2026-04-11T09:00:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:00:08.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:00:08.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-04-11T09:00:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 8, 59, 34), 0.21058, 98.5566, 0.0, 26.0755, 13.2394, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:00:09.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 08:59:34
2026-04-11T09:00:09.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:00:09.927 [DEBUG] [Thread-167071] [transport.py] [_log()] starting thread (client mode): 0xae5e5c90
2026-04-11T09:00:09.927 [DEBUG] [Thread-167071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:00:09.946 [DEBUG] [Thread-167071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:00:09.946 [INFO] [Thread-167071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] client lang: <none>
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] server lang: <none>
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] kex follows: False
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] Compression: none
2026-04-11T09:00:09.949 [DEBUG] [Thread-167071] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:00:09.966 [DEBUG] [Thread-167071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:00:09.967 [DEBUG] [Thread-167071] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:00:09.967 [DEBUG] [Thread-167071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:00:09.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:00:09.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:00:09.969 [DEBUG] [Thread-167071] [transport.py] [_log()] userauth is OK
2026-04-11T09:00:09.969 [DEBUG] [Thread-167071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:00:09.969 [DEBUG] [Thread-167071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:00:09.969 [DEBUG] [Thread-167071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:00:09.969 [DEBUG] [Thread-167071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:00:09.985 [INFO] [Thread-167071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:00:09.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:00:11.218 [DEBUG] [Thread-167071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:00:11.218 [DEBUG] [Thread-167071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:00:11.219 [DEBUG] [Thread-167071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:00:11.259 [DEBUG] [Thread-167071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:00:11.259 [DEBUG] [Thread-167071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:00:11.263 [DEBUG] [Thread-167071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:00:11.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:00:11.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:00:11.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:00:11.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:00:11.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:00:11.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:00:11.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:00:11.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:00:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:00:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.291441 -999.00  +12.60  15.54     97  +12.20 1 3 1 3 1   887    0 0.36 -3.03 ----- 24.6 15.5 96.6 25.0 13.7 -0.8 13.7 -0.3 13.6 -0.5 13.8 -0.8
2026-04-11T09:00:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:00:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:00:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.291441
2026-04-11T09:00:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:00:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:00:11.284 [DEBUG] [Thread-167071] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:00:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:00:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:00:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:00:11.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T08:59:34', tmtdew=0.21058, humidity=98.5566, cloud=0.0, wind=26.0755, temperature=13.2394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T06:59:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:00:11.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:00:11.378 [DEBUG] [Thread-167074] [transport.py] [_log()] starting thread (client mode): 0xae515210
2026-04-11T09:00:11.378 [DEBUG] [Thread-167074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:00:11.392 [DEBUG] [Thread-167074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:00:11.393 [INFO] [Thread-167074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:00:11.400 [DEBUG] [Thread-167074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:00:11.400 [DEBUG] [Thread-167074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:00:11.400 [DEBUG] [Thread-167074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:00:11.400 [DEBUG] [Thread-167074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:11.400 [DEBUG] [Thread-167074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] client lang: <none>
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] server lang: <none>
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] kex follows: False
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:00:11.401 [DEBUG] [Thread-167074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:00:11.402 [DEBUG] [Thread-167074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:00:11.402 [DEBUG] [Thread-167074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:00:11.402 [DEBUG] [Thread-167074] [transport.py] [_log()] Compression: none
2026-04-11T09:00:11.402 [DEBUG] [Thread-167074] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:00:11.460 [DEBUG] [Thread-167074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:00:11.460 [DEBUG] [Thread-167074] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:00:11.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:00:11.461 [DEBUG] [Thread-167074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:00:11.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:00:11.496 [DEBUG] [Thread-167076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:00:11.519 [DEBUG] [Thread-167074] [transport.py] [_log()] userauth is OK
2026-04-11T09:00:11.519 [DEBUG] [Thread-167074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:00:11.519 [DEBUG] [Thread-167074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:00:11.519 [DEBUG] [Thread-167074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:00:11.519 [DEBUG] [Thread-167074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:00:11.538 [INFO] [Thread-167074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:00:11.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:00:11.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:00:12.356 [DEBUG] [Thread-167074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:00:12.357 [DEBUG] [Thread-167074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:00:12.404 [DEBUG] [Thread-167074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:00:12.405 [DEBUG] [Thread-167074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:00:12.413 [DEBUG] [Thread-167074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:00:12.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:00:12.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-04-11T09:00:12.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:00:12.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:00:12.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:00:12.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:00:12.449 [DEBUG] [Thread-167074] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:00:24.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:00:24.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:00:26.557 [DEBUG] [Thread-167077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:00:41.594 [DEBUG] [Thread-167078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:00:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:00:42.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:00:42.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-04-11T09:00:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 0, 9), 0.10014, 99.3116, 0.0, 19.832, 12.8363, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:00:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:00:09
2026-04-11T09:00:44.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:00:44.286 [DEBUG] [Thread-167079] [transport.py] [_log()] starting thread (client mode): 0xae5f02b0
2026-04-11T09:00:44.286 [DEBUG] [Thread-167079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:00:44.307 [DEBUG] [Thread-167079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:00:44.308 [INFO] [Thread-167079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:00:44.311 [DEBUG] [Thread-167079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:00:44.311 [DEBUG] [Thread-167079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:00:44.311 [DEBUG] [Thread-167079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:00:44.311 [DEBUG] [Thread-167079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:44.311 [DEBUG] [Thread-167079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] client lang: <none>
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] server lang: <none>
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] kex follows: False
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] Compression: none
2026-04-11T09:00:44.312 [DEBUG] [Thread-167079] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:00:44.330 [DEBUG] [Thread-167079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:00:44.330 [DEBUG] [Thread-167079] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:00:44.331 [DEBUG] [Thread-167079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:00:44.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:00:44.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:00:44.333 [DEBUG] [Thread-167079] [transport.py] [_log()] userauth is OK
2026-04-11T09:00:44.333 [DEBUG] [Thread-167079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:00:44.333 [DEBUG] [Thread-167079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:00:44.333 [DEBUG] [Thread-167079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:00:44.333 [DEBUG] [Thread-167079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:00:44.352 [INFO] [Thread-167079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:00:44.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:00:45.165 [DEBUG] [Thread-167079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:00:45.165 [DEBUG] [Thread-167079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:00:45.166 [DEBUG] [Thread-167079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:00:45.206 [DEBUG] [Thread-167079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:00:45.206 [DEBUG] [Thread-167079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:00:45.210 [DEBUG] [Thread-167079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:00:45.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:00:45.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:00:45.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:00:45.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:00:45.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:00:45.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:00:45.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:00:45.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:00:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:00:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.291788 -999.00  +12.60  18.71     97  +12.20 1 3 1 3 1   887    0 0.33 -3.34 ----- 17.2 18.7 119.8 26.4 13.6 -1.0 13.7 -0.3 13.6 -0.5 13.8 -0.7
2026-04-11T09:00:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:00:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:00:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.291788
2026-04-11T09:00:45.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:00:45.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:00:45.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:00:45.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:00:45.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:00:45.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:00:09', tmtdew=0.10014, humidity=99.3116, cloud=0.0, wind=19.832, temperature=12.8363, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:00:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:00:45.236 [DEBUG] [Thread-167079] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:00:45.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:00:45.327 [DEBUG] [Thread-167082] [transport.py] [_log()] starting thread (client mode): 0xb0fce680
2026-04-11T09:00:45.327 [DEBUG] [Thread-167082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:00:45.341 [DEBUG] [Thread-167082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:00:45.341 [INFO] [Thread-167082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:00:45.349 [DEBUG] [Thread-167082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:00:45.349 [DEBUG] [Thread-167082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] client lang: <none>
2026-04-11T09:00:45.350 [DEBUG] [Thread-167082] [transport.py] [_log()] server lang: <none>
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] kex follows: False
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] Compression: none
2026-04-11T09:00:45.351 [DEBUG] [Thread-167082] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:00:45.406 [DEBUG] [Thread-167082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:00:45.407 [DEBUG] [Thread-167082] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:00:45.407 [DEBUG] [Thread-167082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:00:45.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:00:45.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:00:45.465 [DEBUG] [Thread-167082] [transport.py] [_log()] userauth is OK
2026-04-11T09:00:45.465 [DEBUG] [Thread-167082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:00:45.465 [DEBUG] [Thread-167082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:00:45.465 [DEBUG] [Thread-167082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:00:45.466 [DEBUG] [Thread-167082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:00:45.485 [INFO] [Thread-167082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:00: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-04-11T09:00:45.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:00:46.301 [DEBUG] [Thread-167082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:00:46.302 [DEBUG] [Thread-167082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:00:46.350 [DEBUG] [Thread-167082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:00:46.350 [DEBUG] [Thread-167082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:00:46.359 [DEBUG] [Thread-167082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:00:46.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:00:46.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:00: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') -> 00000000
2026-04-11T09:00:46.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:00:46.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:00:46.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:00:46.393 [DEBUG] [Thread-167082] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:00:55.227 [DEBUG] [Thread-167084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:00:56.636 [DEBUG] [Thread-167085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:11.698 [DEBUG] [Thread-167086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:01:16.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:01:16.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-04-11T09:01:17.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 0, 45), 0.20023, 98.6231, 0.0, 20.8894, 13.2063, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:01:17.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:00:45
2026-04-11T09:01:18.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:01:18.215 [DEBUG] [Thread-167087] [transport.py] [_log()] starting thread (client mode): 0xae5e43a0
2026-04-11T09:01:18.215 [DEBUG] [Thread-167087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:01:18.236 [DEBUG] [Thread-167087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:01:18.236 [INFO] [Thread-167087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:01:18.237 [DEBUG] [Thread-167087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:01:18.237 [DEBUG] [Thread-167087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:01:18.237 [DEBUG] [Thread-167087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] client lang: <none>
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] server lang: <none>
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] kex follows: False
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:01:18.238 [DEBUG] [Thread-167087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:01:18.239 [DEBUG] [Thread-167087] [transport.py] [_log()] Compression: none
2026-04-11T09:01:18.239 [DEBUG] [Thread-167087] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:01:18.249 [DEBUG] [Thread-167087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:01:18.250 [DEBUG] [Thread-167087] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:01:18.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:01:18.252 [DEBUG] [Thread-167087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:01:18.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:01:18.254 [DEBUG] [Thread-167087] [transport.py] [_log()] userauth is OK
2026-04-11T09:01:18.254 [DEBUG] [Thread-167087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:01:18.254 [DEBUG] [Thread-167087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:01:18.254 [DEBUG] [Thread-167087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:01:18.254 [DEBUG] [Thread-167087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:01:18.278 [INFO] [Thread-167087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:01:18.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:01:19.035 [DEBUG] [Thread-167087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:01:19.035 [DEBUG] [Thread-167087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:01:19.035 [DEBUG] [Thread-167087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:01:19.076 [DEBUG] [Thread-167087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:01:19.076 [DEBUG] [Thread-167087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:01:19.080 [DEBUG] [Thread-167087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:01:19.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:01:19.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:01:19.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:01:19.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:01:19.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:01:19.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:01:19.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:01:19.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:01:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:01:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.292136 -999.00  +12.60  18.24     97  +12.20 1 3 1 3 1   887    0 0.34 -3.38 ----- 14.4 18.2 114.7 20.9 13.6 -0.7 13.7 -0.3 13.6 -0.4 13.8 -0.8
2026-04-11T09:01:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:01:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:01:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.292136
2026-04-11T09:01:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:01:19.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:01:19.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:01:19.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:01:19.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:01:19.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:00:45', tmtdew=0.20023, humidity=98.6231, cloud=0.0, wind=20.8894, temperature=13.2063, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:00:40.550', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:01:19.106 [DEBUG] [Thread-167087] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:01:19.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:01:19.197 [DEBUG] [Thread-167090] [transport.py] [_log()] starting thread (client mode): 0xae5f0c70
2026-04-11T09:01:19.197 [DEBUG] [Thread-167090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:01:19.212 [DEBUG] [Thread-167090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:01:19.212 [INFO] [Thread-167090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:01:19.220 [DEBUG] [Thread-167090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:01:19.220 [DEBUG] [Thread-167090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:01:19.220 [DEBUG] [Thread-167090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:01:19.220 [DEBUG] [Thread-167090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:19.220 [DEBUG] [Thread-167090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] client lang: <none>
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] server lang: <none>
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] kex follows: False
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] Compression: none
2026-04-11T09:01:19.221 [DEBUG] [Thread-167090] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:01:19.279 [DEBUG] [Thread-167090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:01:19.279 [DEBUG] [Thread-167090] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:01:19.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:01:19.281 [DEBUG] [Thread-167090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:01:19.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:01:19.338 [DEBUG] [Thread-167090] [transport.py] [_log()] userauth is OK
2026-04-11T09:01:19.339 [DEBUG] [Thread-167090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:01:19.339 [DEBUG] [Thread-167090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:01:19.339 [DEBUG] [Thread-167090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:01:19.339 [DEBUG] [Thread-167090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:01:19.366 [INFO] [Thread-167090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:01:19.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:01:19.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:01:20.189 [DEBUG] [Thread-167090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:01:20.189 [DEBUG] [Thread-167090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:01:20.237 [DEBUG] [Thread-167090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:01:20.237 [DEBUG] [Thread-167090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:01:20.247 [DEBUG] [Thread-167090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:01:20.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:01:20.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-04-11T09:01:20.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-04-11T09:01:20.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:01:20.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:01:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:01:20.284 [DEBUG] [Thread-167090] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:01:24.150 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:24.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:26.735 [DEBUG] [Thread-167092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:41.788 [DEBUG] [Thread-167093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:01:50.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:01:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:01:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 1, 20), 0.15013, 99.3116, 0.0, 18.6149, 12.8864, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:01:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:01:20
2026-04-11T09:01:51.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:01:52.118 [DEBUG] [Thread-167094] [transport.py] [_log()] starting thread (client mode): 0xae5f18d0
2026-04-11T09:01:52.118 [DEBUG] [Thread-167094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:01:52.134 [DEBUG] [Thread-167094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:01:52.134 [INFO] [Thread-167094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] client lang: <none>
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] server lang: <none>
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] kex follows: False
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:01:52.137 [DEBUG] [Thread-167094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:01:52.138 [DEBUG] [Thread-167094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:01:52.138 [DEBUG] [Thread-167094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:01:52.138 [DEBUG] [Thread-167094] [transport.py] [_log()] Compression: none
2026-04-11T09:01:52.138 [DEBUG] [Thread-167094] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:01:52.156 [DEBUG] [Thread-167094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:01:52.156 [DEBUG] [Thread-167094] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:01:52.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:01:52.157 [DEBUG] [Thread-167094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:01:52.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:01:52.159 [DEBUG] [Thread-167094] [transport.py] [_log()] userauth is OK
2026-04-11T09:01:52.159 [DEBUG] [Thread-167094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:01:52.159 [DEBUG] [Thread-167094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:01:52.159 [DEBUG] [Thread-167094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:01:52.159 [DEBUG] [Thread-167094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:01:52.183 [INFO] [Thread-167094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:01:52.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:01:52.986 [DEBUG] [Thread-167094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:01:52.987 [DEBUG] [Thread-167094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:01:52.987 [DEBUG] [Thread-167094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:01:53.029 [DEBUG] [Thread-167094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:01:53.029 [DEBUG] [Thread-167094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:01:53.032 [DEBUG] [Thread-167094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:01:53.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:01:53.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:01:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:01:53.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:01:53.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:01:53.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:01:53.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:01:53.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:01:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:01:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.292483 -999.00  +12.70  15.70     97  +12.20 1 3 1 3 1   887    0 0.36 -2.80 ----- 18.7 15.7 119.2 19.8 13.7 -0.8 13.7 -0.3 13.6 -0.6 13.9 -0.6
2026-04-11T09:01:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:01:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:01:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.292483
2026-04-11T09:01:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:01:53.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:01:53.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:01:53.060 [DEBUG] [Thread-167094] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:01:53.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:01:53.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:01:53.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:01:20', tmtdew=0.15013, humidity=99.3116, cloud=0.0, wind=18.6149, temperature=12.8864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:01:10.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:01:53.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:01:53.165 [DEBUG] [Thread-167097] [transport.py] [_log()] starting thread (client mode): 0xae5a7be0
2026-04-11T09:01:53.165 [DEBUG] [Thread-167097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:01:53.183 [DEBUG] [Thread-167097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:01:53.183 [INFO] [Thread-167097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:01:53.193 [DEBUG] [Thread-167097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:01:53.193 [DEBUG] [Thread-167097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:01:53.193 [DEBUG] [Thread-167097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] client lang: <none>
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] server lang: <none>
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] kex follows: False
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:01:53.194 [DEBUG] [Thread-167097] [transport.py] [_log()] Compression: none
2026-04-11T09:01:53.195 [DEBUG] [Thread-167097] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:01:53.253 [DEBUG] [Thread-167097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:01:53.253 [DEBUG] [Thread-167097] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:01:53.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:01:53.255 [DEBUG] [Thread-167097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:01:53.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:01:53.312 [DEBUG] [Thread-167097] [transport.py] [_log()] userauth is OK
2026-04-11T09:01:53.312 [DEBUG] [Thread-167097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:01:53.312 [DEBUG] [Thread-167097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:01:53.313 [DEBUG] [Thread-167097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:01:53.313 [DEBUG] [Thread-167097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:01:53.337 [INFO] [Thread-167097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:01:53.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:01:53.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:01:54.162 [DEBUG] [Thread-167097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:01:54.162 [DEBUG] [Thread-167097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:01:54.213 [DEBUG] [Thread-167097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:01:54.213 [DEBUG] [Thread-167097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:01:54.223 [DEBUG] [Thread-167097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:01:54.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:01:54.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-04-11T09:01:54.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:01:54.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:01:54.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:01:54.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:01:54.270 [DEBUG] [Thread-167097] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:01:55.271 [DEBUG] [Thread-167099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:01:56.821 [DEBUG] [Thread-167100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:11.875 [DEBUG] [Thread-167101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:24.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:02:24.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:02:24.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:02:24.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:24.294 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 1, 55), 0.10012, 99.3116, 0.0, 22.5148, 12.8698, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:02:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:01:55
2026-04-11T09:02:26.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:02:26.215 [DEBUG] [Thread-167102] [transport.py] [_log()] starting thread (client mode): 0xae52cf10
2026-04-11T09:02:26.215 [DEBUG] [Thread-167102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:02:26.239 [DEBUG] [Thread-167102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:02:26.239 [INFO] [Thread-167102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] client lang: <none>
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] server lang: <none>
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] kex follows: False
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:02:26.241 [DEBUG] [Thread-167102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:02:26.242 [DEBUG] [Thread-167102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:02:26.242 [DEBUG] [Thread-167102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:02:26.242 [DEBUG] [Thread-167102] [transport.py] [_log()] Compression: none
2026-04-11T09:02:26.242 [DEBUG] [Thread-167102] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:02:26.250 [DEBUG] [Thread-167102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:02:26.251 [DEBUG] [Thread-167102] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:02:26.251 [DEBUG] [Thread-167102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:02:26.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:02:26.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:02:26.253 [DEBUG] [Thread-167102] [transport.py] [_log()] userauth is OK
2026-04-11T09:02:26.253 [DEBUG] [Thread-167102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:02:26.253 [DEBUG] [Thread-167102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:02:26.254 [DEBUG] [Thread-167102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:02:26.254 [DEBUG] [Thread-167102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:02:26.286 [INFO] [Thread-167102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:02:26.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:02:26.912 [DEBUG] [Thread-167104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:27.087 [DEBUG] [Thread-167102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:02:27.087 [DEBUG] [Thread-167102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:02:27.088 [DEBUG] [Thread-167102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:02:27.128 [DEBUG] [Thread-167102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:02:27.128 [DEBUG] [Thread-167102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:02:27.132 [DEBUG] [Thread-167102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:02:27.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:02:27.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:02:27.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:02:27.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:02:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:02:27.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:02:27.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:02:27.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:02:27.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:02:27.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.292830 -999.00  +12.70  19.74     97  +12.20 1 3 1 3 1   887    0 0.37 -2.11 ----- 14.7 19.7 110.1 25.4 13.6 -0.9 13.7 -0.2 13.6 -0.5 13.8 -0.7
2026-04-11T09:02:27.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:02:27.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:02:27.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.292830
2026-04-11T09:02:27.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:02:27.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:02:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:02:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:02:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:02:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:01:55', tmtdew=0.10012, humidity=99.3116, cloud=0.0, wind=22.5148, temperature=12.8698, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:01:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:02:27.160 [DEBUG] [Thread-167102] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:02:27.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:02:27.253 [DEBUG] [Thread-167106] [transport.py] [_log()] starting thread (client mode): 0xb0fb6020
2026-04-11T09:02:27.253 [DEBUG] [Thread-167106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:02:27.268 [DEBUG] [Thread-167106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:02:27.268 [INFO] [Thread-167106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:02:27.278 [DEBUG] [Thread-167106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:02:27.278 [DEBUG] [Thread-167106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:02:27.278 [DEBUG] [Thread-167106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:02:27.278 [DEBUG] [Thread-167106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] client lang: <none>
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] server lang: <none>
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] kex follows: False
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] Compression: none
2026-04-11T09:02:27.279 [DEBUG] [Thread-167106] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:02:27.335 [DEBUG] [Thread-167106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:02:27.335 [DEBUG] [Thread-167106] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:02:27.336 [DEBUG] [Thread-167106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:02:27.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:02:27.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:02:27.397 [DEBUG] [Thread-167106] [transport.py] [_log()] userauth is OK
2026-04-11T09:02:27.397 [DEBUG] [Thread-167106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:02:27.397 [DEBUG] [Thread-167106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:02:27.398 [DEBUG] [Thread-167106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:02:27.398 [DEBUG] [Thread-167106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:02:27.417 [INFO] [Thread-167106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:02:27.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:02:27.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:02:28.262 [DEBUG] [Thread-167106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:02:28.263 [DEBUG] [Thread-167106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:02:28.311 [DEBUG] [Thread-167106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:02:28.312 [DEBUG] [Thread-167106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:02:28.322 [DEBUG] [Thread-167106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:02:28.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:02:28.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:02:28.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:02:28.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:02:28.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:02:28.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:02:28.359 [DEBUG] [Thread-167106] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:02:41.949 [DEBUG] [Thread-167108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:55.315 [DEBUG] [Thread-167109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:57.012 [DEBUG] [Thread-167110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:02:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:02:58.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:02:58.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-04-11T09:02:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 2, 31), 0.094985, 99.3448, 0.0, 21.4564, 12.903, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:02:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:02:31
2026-04-11T09:03:00.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:03:00.206 [DEBUG] [Thread-167111] [transport.py] [_log()] starting thread (client mode): 0xae51b760
2026-04-11T09:03:00.206 [DEBUG] [Thread-167111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:03:00.227 [DEBUG] [Thread-167111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:03:00.228 [INFO] [Thread-167111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] client lang: <none>
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] server lang: <none>
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] kex follows: False
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] Compression: none
2026-04-11T09:03:00.231 [DEBUG] [Thread-167111] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:03:00.249 [DEBUG] [Thread-167111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:03:00.250 [DEBUG] [Thread-167111] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:03:00.250 [DEBUG] [Thread-167111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:03:00.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:03:00.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:03:00.252 [DEBUG] [Thread-167111] [transport.py] [_log()] userauth is OK
2026-04-11T09:03:00.253 [DEBUG] [Thread-167111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:03:00.253 [DEBUG] [Thread-167111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:03:00.253 [DEBUG] [Thread-167111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:03:00.253 [DEBUG] [Thread-167111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:03:00.277 [INFO] [Thread-167111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:03:00.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:03:01.077 [DEBUG] [Thread-167111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:03:01.078 [DEBUG] [Thread-167111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:03:01.078 [DEBUG] [Thread-167111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:03:01.119 [DEBUG] [Thread-167111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:03:01.119 [DEBUG] [Thread-167111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:03:01.123 [DEBUG] [Thread-167111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:03:01.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:03:01.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:03:01.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:03:01.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:03:01.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:03:01.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:03:01.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:03:01.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:03:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:03:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.293177 -999.00  +12.60  17.17     97  +12.20 1 3 1 3 1   887    0 0.39 -1.89 ----- 23.1 17.2 116.2 25.6 13.6 -1.0 13.7 -0.3 13.6 -0.4 13.8 -0.9
2026-04-11T09:03:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:03:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:03:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.293177
2026-04-11T09:03:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:03:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:03:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:03:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:03:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:03:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:02:31', tmtdew=0.094985, humidity=99.3448, cloud=0.0, wind=21.4564, temperature=12.903, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:02:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:03:01.152 [DEBUG] [Thread-167111] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:03:01.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:03:01.254 [DEBUG] [Thread-167114] [transport.py] [_log()] starting thread (client mode): 0xb0fcf820
2026-04-11T09:03:01.254 [DEBUG] [Thread-167114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:03:01.270 [DEBUG] [Thread-167114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:03:01.270 [INFO] [Thread-167114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:03:01.277 [DEBUG] [Thread-167114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] client lang: <none>
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] server lang: <none>
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] kex follows: False
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] Compression: none
2026-04-11T09:03:01.278 [DEBUG] [Thread-167114] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:03:01.334 [DEBUG] [Thread-167114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:03:01.334 [DEBUG] [Thread-167114] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:03:01.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:03:01.335 [DEBUG] [Thread-167114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:03:01.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:03:01.392 [DEBUG] [Thread-167114] [transport.py] [_log()] userauth is OK
2026-04-11T09:03:01.392 [DEBUG] [Thread-167114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:03:01.392 [DEBUG] [Thread-167114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:03:01.392 [DEBUG] [Thread-167114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:03:01.392 [DEBUG] [Thread-167114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:03:01.416 [INFO] [Thread-167114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:03:01.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:03:01.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:03:02.280 [DEBUG] [Thread-167114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:03:02.280 [DEBUG] [Thread-167114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:03:02.333 [DEBUG] [Thread-167114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:03:02.334 [DEBUG] [Thread-167114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:03:02.343 [DEBUG] [Thread-167114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:03:02.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:03:02.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:03:02.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-04-11T09:03:02.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:03:02.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:03:02.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:03:02.379 [DEBUG] [Thread-167114] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:03:12.053 [DEBUG] [Thread-167116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:03:24.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:03:24.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:03:27.109 [DEBUG] [Thread-167117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:03:32.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:03:32.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:03:32.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-04-11T09:03:33.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 3, 6), 0.102675, 99.2951, 0.0, 23.3615, 12.8699, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:03:33.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:03:06
2026-04-11T09:03:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:03:34.219 [DEBUG] [Thread-167118] [transport.py] [_log()] starting thread (client mode): 0xae5a7460
2026-04-11T09:03:34.219 [DEBUG] [Thread-167118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:03:34.240 [DEBUG] [Thread-167118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:03:34.240 [INFO] [Thread-167118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:03:34.243 [DEBUG] [Thread-167118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:03:34.244 [DEBUG] [Thread-167118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] client lang: <none>
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] server lang: <none>
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] kex follows: False
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:03:34.245 [DEBUG] [Thread-167118] [transport.py] [_log()] Compression: none
2026-04-11T09:03:34.246 [DEBUG] [Thread-167118] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:03:34.266 [DEBUG] [Thread-167118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:03:34.266 [DEBUG] [Thread-167118] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:03:34.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:03:34.267 [DEBUG] [Thread-167118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:03:34.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:03:34.269 [DEBUG] [Thread-167118] [transport.py] [_log()] userauth is OK
2026-04-11T09:03:34.270 [DEBUG] [Thread-167118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:03:34.270 [DEBUG] [Thread-167118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:03:34.270 [DEBUG] [Thread-167118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:03:34.270 [DEBUG] [Thread-167118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:03:34.295 [INFO] [Thread-167118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:03:34.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:03:35.119 [DEBUG] [Thread-167118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:03:35.120 [DEBUG] [Thread-167118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:03:35.120 [DEBUG] [Thread-167118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:03:35.161 [DEBUG] [Thread-167118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:03:35.161 [DEBUG] [Thread-167118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:03:35.165 [DEBUG] [Thread-167118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:03:35.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:03:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:03:35.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:03:35.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:03:35.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:03:35.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:03:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:03:35.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.293525 -999.00  +12.60  20.86     97  +12.20 1 3 1 3 1   887    0 0.39 -1.91 ----- 17.7 20.9 123.6 25.6 13.6 -0.9 13.7 -0.3 13.6 -0.5 13.8 -0.9
2026-04-11T09:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.293525
2026-04-11T09:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:03:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:03:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:03:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:03:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:03:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:03:06', tmtdew=0.102675, humidity=99.2951, cloud=0.0, wind=23.3615, temperature=12.8699, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:02:40.560', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:03:35.194 [DEBUG] [Thread-167118] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:03:35.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:03:35.287 [DEBUG] [Thread-167121] [transport.py] [_log()] starting thread (client mode): 0xa7953460
2026-04-11T09:03:35.287 [DEBUG] [Thread-167121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:03:35.301 [DEBUG] [Thread-167121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:03:35.301 [INFO] [Thread-167121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:03:35.309 [DEBUG] [Thread-167121] [transport.py] [_log()] client lang: <none>
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] server lang: <none>
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] kex follows: False
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] Compression: none
2026-04-11T09:03:35.310 [DEBUG] [Thread-167121] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:03:35.366 [DEBUG] [Thread-167121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:03:35.367 [DEBUG] [Thread-167121] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:03:35.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:03:35.368 [DEBUG] [Thread-167121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:03:35.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:03:35.422 [DEBUG] [Thread-167121] [transport.py] [_log()] userauth is OK
2026-04-11T09:03:35.423 [DEBUG] [Thread-167121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:03:35.423 [DEBUG] [Thread-167121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:03:35.423 [DEBUG] [Thread-167121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:03:35.423 [DEBUG] [Thread-167121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:03:35.441 [INFO] [Thread-167121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:03:35.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:03:35.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:03:36.250 [DEBUG] [Thread-167121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:03:36.251 [DEBUG] [Thread-167121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:03:36.299 [DEBUG] [Thread-167121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:03:36.299 [DEBUG] [Thread-167121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:03:36.310 [DEBUG] [Thread-167121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:03:36.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:03:36.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-04-11T09:03:36.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-04-11T09:03:36.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:03:36.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:03:36.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:03:36.346 [DEBUG] [Thread-167121] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:03:42.148 [DEBUG] [Thread-167123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:03:55.348 [DEBUG] [Thread-167124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:03:57.201 [DEBUG] [Thread-167125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:06.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:04:06.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:04:06.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-04-11T09:04:07.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 3, 42), 0.2156, 98.5239, 0.0, 25.8638, 13.1734, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:04:07.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:03:42
2026-04-11T09:04:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:04:08.199 [DEBUG] [Thread-167126] [transport.py] [_log()] starting thread (client mode): 0xae52c550
2026-04-11T09:04:08.199 [DEBUG] [Thread-167126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:04:08.220 [DEBUG] [Thread-167126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:04:08.220 [INFO] [Thread-167126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:08.224 [DEBUG] [Thread-167126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] client lang: <none>
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] server lang: <none>
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] kex follows: False
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:04:08.225 [DEBUG] [Thread-167126] [transport.py] [_log()] Compression: none
2026-04-11T09:04:08.226 [DEBUG] [Thread-167126] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:04:08.245 [DEBUG] [Thread-167126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:04:08.245 [DEBUG] [Thread-167126] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:04:08.246 [DEBUG] [Thread-167126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:04:08.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:04:08.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:04:08.289 [DEBUG] [Thread-167126] [transport.py] [_log()] userauth is OK
2026-04-11T09:04:08.289 [DEBUG] [Thread-167126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:04:08.289 [DEBUG] [Thread-167126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:04:08.289 [DEBUG] [Thread-167126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:04:08.289 [DEBUG] [Thread-167126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:04:08.311 [INFO] [Thread-167126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:04:08.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:04:09.103 [DEBUG] [Thread-167126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:04:09.103 [DEBUG] [Thread-167126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:04:09.104 [DEBUG] [Thread-167126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:04:09.146 [DEBUG] [Thread-167126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:04:09.146 [DEBUG] [Thread-167126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:04:09.150 [DEBUG] [Thread-167126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:04:09.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:04:09.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:04:09.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:04:09.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:04:09.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:04:09.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:04:09.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:04:09.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:04:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:04:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.293872 -999.00  +12.70  20.23     97  +12.20 1 3 1 3 1   887    0 0.39 -1.67 ----- 16.0 20.2 95.4 27.2 13.6 -0.6 13.7 -0.2 13.6 -0.4 13.8 -0.7
2026-04-11T09:04:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:04:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:04:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.293872
2026-04-11T09:04:09.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:04:09.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:04:09.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:04:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:04:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:04:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:03:42', tmtdew=0.2156, humidity=98.5239, cloud=0.0, wind=25.8638, temperature=13.1734, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:03:10.541', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:04:09.181 [DEBUG] [Thread-167126] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:04:09.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:04:09.262 [DEBUG] [Thread-167129] [transport.py] [_log()] starting thread (client mode): 0xae51b760
2026-04-11T09:04:09.263 [DEBUG] [Thread-167129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:04:09.277 [DEBUG] [Thread-167129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:04:09.277 [INFO] [Thread-167129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:04:09.286 [DEBUG] [Thread-167129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:04:09.286 [DEBUG] [Thread-167129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:04:09.286 [DEBUG] [Thread-167129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:04:09.286 [DEBUG] [Thread-167129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:09.286 [DEBUG] [Thread-167129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] client lang: <none>
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] server lang: <none>
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] kex follows: False
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:04:09.287 [DEBUG] [Thread-167129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:04:09.288 [DEBUG] [Thread-167129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:04:09.288 [DEBUG] [Thread-167129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:04:09.288 [DEBUG] [Thread-167129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:04:09.288 [DEBUG] [Thread-167129] [transport.py] [_log()] Compression: none
2026-04-11T09:04:09.288 [DEBUG] [Thread-167129] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:04:09.345 [DEBUG] [Thread-167129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:04:09.346 [DEBUG] [Thread-167129] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:04:09.346 [DEBUG] [Thread-167129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:04:09.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:04:09.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:04:09.404 [DEBUG] [Thread-167129] [transport.py] [_log()] userauth is OK
2026-04-11T09:04:09.405 [DEBUG] [Thread-167129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:04:09.405 [DEBUG] [Thread-167129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:04:09.405 [DEBUG] [Thread-167129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:04:09.405 [DEBUG] [Thread-167129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:04:09.430 [INFO] [Thread-167129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:04:09.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:04:09.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:04:10.247 [DEBUG] [Thread-167129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:04:10.247 [DEBUG] [Thread-167129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:04:10.297 [DEBUG] [Thread-167129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:04:10.298 [DEBUG] [Thread-167129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:04:10.311 [DEBUG] [Thread-167129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:04:10.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:04:10.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-04-11T09:04:10.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-04-11T09:04:10.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:04:10.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:04:10.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:04:10.355 [DEBUG] [Thread-167129] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:04:12.241 [DEBUG] [Thread-167131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:24.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:24.577 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:27.307 [DEBUG] [Thread-167132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:40.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:04:40.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:04:40.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-04-11T09:04:41.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 4, 17), 0.15269, 99.2952, 0.0, 18.0144, 12.8864, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:04:41.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:04:17
2026-04-11T09:04:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:04:42.259 [DEBUG] [Thread-167133] [transport.py] [_log()] starting thread (client mode): 0xb0fccb20
2026-04-11T09:04:42.259 [DEBUG] [Thread-167133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:04:42.279 [DEBUG] [Thread-167133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:04:42.279 [INFO] [Thread-167133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:04:42.281 [DEBUG] [Thread-167133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] client lang: <none>
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] server lang: <none>
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] kex follows: False
2026-04-11T09:04:42.282 [DEBUG] [Thread-167133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:04:42.283 [DEBUG] [Thread-167133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:04:42.283 [DEBUG] [Thread-167133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:04:42.283 [DEBUG] [Thread-167133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:04:42.283 [DEBUG] [Thread-167133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:04:42.283 [DEBUG] [Thread-167133] [transport.py] [_log()] Compression: none
2026-04-11T09:04:42.283 [DEBUG] [Thread-167133] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:04:42.301 [DEBUG] [Thread-167133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:04:42.302 [DEBUG] [Thread-167133] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:04:42.303 [DEBUG] [Thread-167133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:04:42.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:04:42.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:04:42.344 [DEBUG] [Thread-167135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:42.345 [DEBUG] [Thread-167133] [transport.py] [_log()] userauth is OK
2026-04-11T09:04:42.346 [DEBUG] [Thread-167133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:04:42.346 [DEBUG] [Thread-167133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:04:42.346 [DEBUG] [Thread-167133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:04:42.346 [DEBUG] [Thread-167133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:04:42.371 [INFO] [Thread-167133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:04:42.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:04:43.153 [DEBUG] [Thread-167133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:04:43.153 [DEBUG] [Thread-167133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:04:43.154 [DEBUG] [Thread-167133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:04:43.194 [DEBUG] [Thread-167133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:04:43.194 [DEBUG] [Thread-167133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:04:43.198 [DEBUG] [Thread-167133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:04:43.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:04:43.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:04:43.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:04:43.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:04:43.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:04:43.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:04:43.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:04:43.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:04:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:04:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.294566 -999.00  +12.60  22.72     97  +12.20 1 3 1 3 1   887    0 0.39 -1.59 ----- 17.9 22.7 94.4 30.2 13.6 -0.9 13.7 -0.3 13.6 -0.6 13.8 -0.8
2026-04-11T09:04:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:04:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:04:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.294566
2026-04-11T09:04:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:04:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:04:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:04:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:04:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:04:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:04:17', tmtdew=0.15269, humidity=99.2952, cloud=0.0, wind=18.0144, temperature=12.8864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:04:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:04:43.227 [DEBUG] [Thread-167133] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:04:43.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:04:43.319 [DEBUG] [Thread-167137] [transport.py] [_log()] starting thread (client mode): 0xb0f8c1c0
2026-04-11T09:04:43.319 [DEBUG] [Thread-167137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:04:43.337 [DEBUG] [Thread-167137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:04:43.337 [INFO] [Thread-167137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:04:43.345 [DEBUG] [Thread-167137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:04:43.346 [DEBUG] [Thread-167137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] client lang: <none>
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] server lang: <none>
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] kex follows: False
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] Compression: none
2026-04-11T09:04:43.347 [DEBUG] [Thread-167137] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:04:43.403 [DEBUG] [Thread-167137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:04:43.403 [DEBUG] [Thread-167137] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:04:43.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:04:43.405 [DEBUG] [Thread-167137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:04:43.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:04:43.459 [DEBUG] [Thread-167137] [transport.py] [_log()] userauth is OK
2026-04-11T09:04:43.459 [DEBUG] [Thread-167137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:04:43.459 [DEBUG] [Thread-167137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:04:43.459 [DEBUG] [Thread-167137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:04:43.459 [DEBUG] [Thread-167137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:04:43.477 [INFO] [Thread-167137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:04:43.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:04:43.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:04:44.303 [DEBUG] [Thread-167137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:04:44.304 [DEBUG] [Thread-167137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:04:44.351 [DEBUG] [Thread-167137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:04:44.351 [DEBUG] [Thread-167137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:04:44.360 [DEBUG] [Thread-167137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:04:44.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:04:44.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:04: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-04-11T09:04:44.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:04:44.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:04:44.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:04:44.400 [DEBUG] [Thread-167137] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:04:55.393 [DEBUG] [Thread-167139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:04:57.383 [DEBUG] [Thread-167140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:12.432 [DEBUG] [Thread-167141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:14.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:05:14.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:05:14.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-04-11T09:05:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 4, 53), 0.21052, 98.5572, 0.0, 27.2045, 13.2729, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:05:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:04:53
2026-04-11T09:05:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:05:16.254 [DEBUG] [Thread-167142] [transport.py] [_log()] starting thread (client mode): 0xae5a5360
2026-04-11T09:05:16.254 [DEBUG] [Thread-167142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:05:16.277 [DEBUG] [Thread-167142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:05:16.277 [INFO] [Thread-167142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:05:16.280 [DEBUG] [Thread-167142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:05:16.280 [DEBUG] [Thread-167142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:05:16.280 [DEBUG] [Thread-167142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:05:16.280 [DEBUG] [Thread-167142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] client lang: <none>
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] server lang: <none>
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] kex follows: False
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] Compression: none
2026-04-11T09:05:16.281 [DEBUG] [Thread-167142] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:05:16.298 [DEBUG] [Thread-167142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:05:16.299 [DEBUG] [Thread-167142] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:05:16.299 [DEBUG] [Thread-167142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:05:16.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:05:16.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:05:16.301 [DEBUG] [Thread-167142] [transport.py] [_log()] userauth is OK
2026-04-11T09:05:16.301 [DEBUG] [Thread-167142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:05:16.301 [DEBUG] [Thread-167142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:05:16.301 [DEBUG] [Thread-167142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:05:16.302 [DEBUG] [Thread-167142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:05:16.324 [INFO] [Thread-167142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:05:16.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:05:19.398 [DEBUG] [Thread-167142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:05:19.398 [DEBUG] [Thread-167142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:05:19.398 [DEBUG] [Thread-167142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:05:19.439 [DEBUG] [Thread-167142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:05:19.440 [DEBUG] [Thread-167142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:05:19.443 [DEBUG] [Thread-167142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:05:19.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:05:19.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:05:19.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:05:19.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:05:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:05:19.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:05:19.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:05:19.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:05:19.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:05:19.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.294914 -999.00  +12.60  23.27     97  +12.20 1 3 1 3 1   887    0 0.38 -1.78 ----- 22.1 23.3 116.8 28.6 13.6 -1.0 13.6 -0.3 13.6 -0.5 13.8 -0.7
2026-04-11T09:05:19.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:05:19.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:05:19.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.294914
2026-04-11T09:05:19.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:05:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:05:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:05:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:05:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:05:19.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:04:53', tmtdew=0.21052, humidity=98.5572, cloud=0.0, wind=27.2045, temperature=13.2729, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:04:40.570', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:05:19.471 [DEBUG] [Thread-167142] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:05:19.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:05:19.561 [DEBUG] [Thread-167145] [transport.py] [_log()] starting thread (client mode): 0xae5f3e20
2026-04-11T09:05:19.561 [DEBUG] [Thread-167145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:05:19.580 [DEBUG] [Thread-167145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:05:19.580 [INFO] [Thread-167145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:05:19.592 [DEBUG] [Thread-167145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:05:19.592 [DEBUG] [Thread-167145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:05:19.592 [DEBUG] [Thread-167145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] client lang: <none>
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] server lang: <none>
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] kex follows: False
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] Compression: none
2026-04-11T09:05:19.593 [DEBUG] [Thread-167145] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:05:19.649 [DEBUG] [Thread-167145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:05:19.649 [DEBUG] [Thread-167145] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:05:19.650 [DEBUG] [Thread-167145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:05:19.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:05:19.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:05:19.705 [DEBUG] [Thread-167145] [transport.py] [_log()] userauth is OK
2026-04-11T09:05:19.705 [DEBUG] [Thread-167145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:05:19.705 [DEBUG] [Thread-167145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:05:19.705 [DEBUG] [Thread-167145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:05:19.706 [DEBUG] [Thread-167145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:05:19.725 [INFO] [Thread-167145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:05:19.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:05:19.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:05:20.548 [DEBUG] [Thread-167145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:05:20.548 [DEBUG] [Thread-167145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:05:20.597 [DEBUG] [Thread-167145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:05:20.597 [DEBUG] [Thread-167145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:05:20.607 [DEBUG] [Thread-167145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:05:20.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:05:20.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-04-11T09:05:20.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:05:20.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:05:20.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:05:20.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:05:20.643 [DEBUG] [Thread-167145] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:05:24.716 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:24.717 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:27.471 [DEBUG] [Thread-167147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:42.525 [DEBUG] [Thread-167148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:50.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:05:50.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:05:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:05:51.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 5, 28), 0.097535, 99.3283, 0.0, 21.1198, 12.8865, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:05:51.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:05:28
2026-04-11T09:05:52.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:05:52.454 [DEBUG] [Thread-167149] [transport.py] [_log()] starting thread (client mode): 0xae5f3af0
2026-04-11T09:05:52.454 [DEBUG] [Thread-167149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:05:52.473 [DEBUG] [Thread-167149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:05:52.474 [INFO] [Thread-167149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:05:52.477 [DEBUG] [Thread-167149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:05:52.477 [DEBUG] [Thread-167149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:05:52.477 [DEBUG] [Thread-167149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:05:52.477 [DEBUG] [Thread-167149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:52.477 [DEBUG] [Thread-167149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:52.477 [DEBUG] [Thread-167149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] client lang: <none>
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] server lang: <none>
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] kex follows: False
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] Compression: none
2026-04-11T09:05:52.478 [DEBUG] [Thread-167149] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:05:52.496 [DEBUG] [Thread-167149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:05:52.497 [DEBUG] [Thread-167149] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:05:52.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:05:52.498 [DEBUG] [Thread-167149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:05:52.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:05:52.500 [DEBUG] [Thread-167149] [transport.py] [_log()] userauth is OK
2026-04-11T09:05:52.500 [DEBUG] [Thread-167149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:05:52.500 [DEBUG] [Thread-167149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:05:52.500 [DEBUG] [Thread-167149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:05:52.500 [DEBUG] [Thread-167149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:05:52.518 [INFO] [Thread-167149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:05:52.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:05:53.276 [DEBUG] [Thread-167149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:05:53.276 [DEBUG] [Thread-167149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:05:53.276 [DEBUG] [Thread-167149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:05:53.317 [DEBUG] [Thread-167149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:05:53.317 [DEBUG] [Thread-167149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:05:53.321 [DEBUG] [Thread-167149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:05:53.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:05:53.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:05:53.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:05:53.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:05:53.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:05:53.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:05:53.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:05:53.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:05:53.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:05:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.295261 -999.00  +12.60  18.57     97  +12.20 1 3 1 3 1   887    0 0.39 -1.73 ----- 17.0 18.6 105.1 30.1 13.6 -1.1 13.6 -0.2 13.6 -0.4 13.8 -0.9
2026-04-11T09:05:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:05:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:05:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.295261
2026-04-11T09:05:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:05:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:05:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:05:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:05:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:05:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:05:28', tmtdew=0.097535, humidity=99.3283, cloud=0.0, wind=21.1198, temperature=12.8865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:05:10.550', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:05:53.348 [DEBUG] [Thread-167149] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:05:53.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:05:53.445 [DEBUG] [Thread-167152] [transport.py] [_log()] starting thread (client mode): 0xb0f8dc60
2026-04-11T09:05:53.446 [DEBUG] [Thread-167152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:05:53.461 [DEBUG] [Thread-167152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:05:53.462 [INFO] [Thread-167152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:05:53.469 [DEBUG] [Thread-167152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:05:53.469 [DEBUG] [Thread-167152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] client lang: <none>
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] server lang: <none>
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] kex follows: False
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:05:53.470 [DEBUG] [Thread-167152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:05:53.471 [DEBUG] [Thread-167152] [transport.py] [_log()] Compression: none
2026-04-11T09:05:53.471 [DEBUG] [Thread-167152] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:05:53.528 [DEBUG] [Thread-167152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:05:53.528 [DEBUG] [Thread-167152] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:05:53.529 [DEBUG] [Thread-167152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:05:53.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:05:53.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:05:53.587 [DEBUG] [Thread-167152] [transport.py] [_log()] userauth is OK
2026-04-11T09:05:53.587 [DEBUG] [Thread-167152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:05:53.587 [DEBUG] [Thread-167152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:05:53.588 [DEBUG] [Thread-167152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:05:53.588 [DEBUG] [Thread-167152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:05:53.607 [INFO] [Thread-167152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:05:53.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:05:53.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:05:54.455 [DEBUG] [Thread-167152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:05:54.456 [DEBUG] [Thread-167152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:05:54.504 [DEBUG] [Thread-167152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:05:54.504 [DEBUG] [Thread-167152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:05:54.514 [DEBUG] [Thread-167152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:05:54.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:05:54.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-04-11T09:05:54.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-04-11T09:05:54.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:05:54.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:05:54.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:05:54.561 [DEBUG] [Thread-167152] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:05:55.425 [DEBUG] [Thread-167154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:05:57.564 [DEBUG] [Thread-167155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:12.614 [DEBUG] [Thread-167156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:06:24.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:06:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:06:24.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:24.856 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:25.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 6, 3), 0.10267, 99.2952, 0.0, 23.0602, 12.8699, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:06:25.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:06:03
2026-04-11T09:06:26.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:06:26.394 [DEBUG] [Thread-167157] [transport.py] [_log()] starting thread (client mode): 0xa7951a20
2026-04-11T09:06:26.394 [DEBUG] [Thread-167157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:06:26.415 [DEBUG] [Thread-167157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:06:26.415 [INFO] [Thread-167157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:06:26.427 [DEBUG] [Thread-167157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:06:26.428 [DEBUG] [Thread-167157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:06:26.428 [DEBUG] [Thread-167157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:06:26.428 [DEBUG] [Thread-167157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:06:26.428 [DEBUG] [Thread-167157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] client lang: <none>
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] server lang: <none>
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] kex follows: False
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] Compression: none
2026-04-11T09:06:26.429 [DEBUG] [Thread-167157] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:06:26.449 [DEBUG] [Thread-167157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:06:26.450 [DEBUG] [Thread-167157] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:06:26.450 [DEBUG] [Thread-167157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:06:26.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:06:26.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:06:26.453 [DEBUG] [Thread-167157] [transport.py] [_log()] userauth is OK
2026-04-11T09:06:26.453 [DEBUG] [Thread-167157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:06:26.453 [DEBUG] [Thread-167157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:06:26.453 [DEBUG] [Thread-167157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:06:26.453 [DEBUG] [Thread-167157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:06:26.478 [INFO] [Thread-167157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:06:26.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:06:27.294 [DEBUG] [Thread-167157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:06:27.295 [DEBUG] [Thread-167157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:06:27.295 [DEBUG] [Thread-167157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:06:27.336 [DEBUG] [Thread-167157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:06:27.336 [DEBUG] [Thread-167157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:06:27.338 [DEBUG] [Thread-167157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:06:27.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:06:27.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:06:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:06:27.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:06:27.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:06:27.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:06:27.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:06:27.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:06:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:06:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.295608 -999.00  +12.60  14.71     97  +12.20 1 3 1 3 1   887    0 0.37 -2.02 ----- 18.6 14.7 112.7 27.0 13.6 -0.7 13.6 -0.2 13.6 -0.4 13.8 -0.8
2026-04-11T09:06:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:06:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:06:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.295608
2026-04-11T09:06:27.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:06:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:06:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:06:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:06:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:06:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:06:03', tmtdew=0.10267, humidity=99.2952, cloud=0.0, wind=23.0602, temperature=12.8699, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:05:40.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:06:27.355 [DEBUG] [Thread-167157] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:06:27.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:06:27.456 [DEBUG] [Thread-167160] [transport.py] [_log()] starting thread (client mode): 0xae5a7850
2026-04-11T09:06:27.456 [DEBUG] [Thread-167160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:06:27.471 [DEBUG] [Thread-167160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:06:27.471 [INFO] [Thread-167160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:06:27.479 [DEBUG] [Thread-167160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:06:27.479 [DEBUG] [Thread-167160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:06:27.479 [DEBUG] [Thread-167160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:06:27.479 [DEBUG] [Thread-167160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:06:27.479 [DEBUG] [Thread-167160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:06:27.479 [DEBUG] [Thread-167160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] client lang: <none>
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] server lang: <none>
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] kex follows: False
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] Compression: none
2026-04-11T09:06:27.480 [DEBUG] [Thread-167160] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:06:27.549 [DEBUG] [Thread-167160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:06:27.550 [DEBUG] [Thread-167160] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:06:27.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:06:27.551 [DEBUG] [Thread-167160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:06:27.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:06:27.614 [DEBUG] [Thread-167160] [transport.py] [_log()] userauth is OK
2026-04-11T09:06:27.614 [DEBUG] [Thread-167160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:06:27.614 [DEBUG] [Thread-167160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:06:27.614 [DEBUG] [Thread-167160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:06:27.615 [DEBUG] [Thread-167160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:06:27.634 [INFO] [Thread-167160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:06:27.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:06:27.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:06:27.650 [DEBUG] [Thread-167162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:28.515 [DEBUG] [Thread-167160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:06:28.515 [DEBUG] [Thread-167160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:06:28.566 [DEBUG] [Thread-167160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:06:28.567 [DEBUG] [Thread-167160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:06:28.576 [DEBUG] [Thread-167160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:06:28.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:06:28.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:06: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-04-11T09:06:28.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:06:28.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:06:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:06:28.616 [DEBUG] [Thread-167160] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:06:42.702 [DEBUG] [Thread-167163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:55.457 [DEBUG] [Thread-167164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:57.740 [DEBUG] [Thread-167165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:06:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:06:58.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:06:58.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-04-11T09:06:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 6, 39), 0.1848, 98.7231, 0.0, 27.769, 13.3061, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:06:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:06:39
2026-04-11T09:07:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:07:00.606 [DEBUG] [Thread-167166] [transport.py] [_log()] starting thread (client mode): 0xae5195d0
2026-04-11T09:07:00.606 [DEBUG] [Thread-167166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:07:00.624 [DEBUG] [Thread-167166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:07:00.624 [INFO] [Thread-167166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:07:00.627 [DEBUG] [Thread-167166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:07:00.627 [DEBUG] [Thread-167166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] client lang: <none>
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] server lang: <none>
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] kex follows: False
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:07:00.628 [DEBUG] [Thread-167166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:07:00.629 [DEBUG] [Thread-167166] [transport.py] [_log()] Compression: none
2026-04-11T09:07:00.629 [DEBUG] [Thread-167166] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:07:00.638 [DEBUG] [Thread-167166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:07:00.638 [DEBUG] [Thread-167166] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:07:00.639 [DEBUG] [Thread-167166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:07:00.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:07:00.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:07:00.640 [DEBUG] [Thread-167166] [transport.py] [_log()] userauth is OK
2026-04-11T09:07:00.640 [DEBUG] [Thread-167166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:07:00.640 [DEBUG] [Thread-167166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:07:00.640 [DEBUG] [Thread-167166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:07:00.641 [DEBUG] [Thread-167166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:07:00.658 [INFO] [Thread-167166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:07:00.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:07:01.438 [DEBUG] [Thread-167166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:07:01.438 [DEBUG] [Thread-167166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:07:01.439 [DEBUG] [Thread-167166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:07:01.479 [DEBUG] [Thread-167166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:07:01.479 [DEBUG] [Thread-167166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:07:01.483 [DEBUG] [Thread-167166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:07:01.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:07:01.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:07:01.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:07:01.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:07:01.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:07:01.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:07:01.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:07:01.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:07:01.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:07:01.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.295955 -999.00  +12.70  13.95     97  +12.20 1 3 1 3 1   887    0 0.39 -1.69 ----- 11.7 13.9 101.5 26.6 13.6 -0.3 13.7 -0.2 13.6 -0.5 13.8 -0.6
2026-04-11T09:07:01.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:07:01.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:07:01.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.295955
2026-04-11T09:07:01.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:07:01.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:07:01.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:07:01.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:07:01.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:07:01.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:06:39', tmtdew=0.1848, humidity=98.7231, cloud=0.0, wind=27.769, temperature=13.3061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:06:10.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:07:01.512 [DEBUG] [Thread-167166] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:07:01.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:07:01.618 [DEBUG] [Thread-167169] [transport.py] [_log()] starting thread (client mode): 0xb0f8f670
2026-04-11T09:07:01.618 [DEBUG] [Thread-167169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:07:01.633 [DEBUG] [Thread-167169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:07:01.633 [INFO] [Thread-167169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:07:01.640 [DEBUG] [Thread-167169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] client lang: <none>
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] server lang: <none>
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] kex follows: False
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:07:01.641 [DEBUG] [Thread-167169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:07:01.642 [DEBUG] [Thread-167169] [transport.py] [_log()] Compression: none
2026-04-11T09:07:01.642 [DEBUG] [Thread-167169] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:07:01.700 [DEBUG] [Thread-167169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:07:01.700 [DEBUG] [Thread-167169] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:07:01.701 [DEBUG] [Thread-167169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:07:01.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:07:01.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:07:01.756 [DEBUG] [Thread-167169] [transport.py] [_log()] userauth is OK
2026-04-11T09:07:01.757 [DEBUG] [Thread-167169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:07:01.757 [DEBUG] [Thread-167169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:07:01.757 [DEBUG] [Thread-167169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:07:01.757 [DEBUG] [Thread-167169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:07:01.775 [INFO] [Thread-167169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:07:01.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:07:01.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:07:02.634 [DEBUG] [Thread-167169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:07:02.635 [DEBUG] [Thread-167169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:07:02.682 [DEBUG] [Thread-167169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:07:02.682 [DEBUG] [Thread-167169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:07:02.690 [DEBUG] [Thread-167169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:07:02.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:07:02.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-04-11T09:07:02.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-04-11T09:07:02.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:07:02.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:07:02.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:07:02.722 [DEBUG] [Thread-167169] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:07:12.779 [DEBUG] [Thread-167171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:07:24.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:07:24.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:07:27.840 [DEBUG] [Thread-167172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:07:32.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:07:32.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:07:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:07:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 7, 14), 0.155225, 99.2786, 0.0, 19.7093, 12.8533, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:07:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:07:14
2026-04-11T09:07:34.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:07:34.588 [DEBUG] [Thread-167173] [transport.py] [_log()] starting thread (client mode): 0xa7951c60
2026-04-11T09:07:34.588 [DEBUG] [Thread-167173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:07:34.612 [DEBUG] [Thread-167173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:07:34.612 [INFO] [Thread-167173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] client lang: <none>
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] server lang: <none>
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] kex follows: False
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] Compression: none
2026-04-11T09:07:34.614 [DEBUG] [Thread-167173] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:07:34.633 [DEBUG] [Thread-167173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:07:34.634 [DEBUG] [Thread-167173] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:07:34.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:07:34.635 [DEBUG] [Thread-167173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:07:34.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:07:34.638 [DEBUG] [Thread-167173] [transport.py] [_log()] userauth is OK
2026-04-11T09:07:34.638 [DEBUG] [Thread-167173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:07:34.638 [DEBUG] [Thread-167173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:07:34.638 [DEBUG] [Thread-167173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:07:34.638 [DEBUG] [Thread-167173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:07:34.655 [INFO] [Thread-167173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:07:34.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:07:35.462 [DEBUG] [Thread-167173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:07:35.462 [DEBUG] [Thread-167173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:07:35.462 [DEBUG] [Thread-167173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:07:35.503 [DEBUG] [Thread-167173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:07:35.503 [DEBUG] [Thread-167173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:07:35.507 [DEBUG] [Thread-167173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:07:35.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:07:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:07:35.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:07:35.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:07:35.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:07:35.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:07:35.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:07:35.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:07:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:07:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.296303 -999.00  +12.70  16.70     97  +12.30 1 3 1 3 1   887    0 0.39 -1.50 ----- 17.1 16.7 117.2 23.9 13.7 -0.7 13.7 -0.2 13.6 -0.3 13.8 -0.5
2026-04-11T09:07:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:07:35.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:07:35.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.296303
2026-04-11T09:07:35.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:07:35.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:07:35.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:07:35.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:07:35.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:07:35.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:07:14', tmtdew=0.155225, humidity=99.2786, cloud=0.0, wind=19.7093, temperature=12.8533, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:06:40.579', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:07:35.532 [DEBUG] [Thread-167173] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:07:35.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:07:35.635 [DEBUG] [Thread-167176] [transport.py] [_log()] starting thread (client mode): 0xae51bca0
2026-04-11T09:07:35.636 [DEBUG] [Thread-167176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:07:35.652 [DEBUG] [Thread-167176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:07:35.653 [INFO] [Thread-167176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:07:35.660 [DEBUG] [Thread-167176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] client lang: <none>
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] server lang: <none>
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] kex follows: False
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:07:35.661 [DEBUG] [Thread-167176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:07:35.662 [DEBUG] [Thread-167176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:07:35.662 [DEBUG] [Thread-167176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:07:35.662 [DEBUG] [Thread-167176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:07:35.662 [DEBUG] [Thread-167176] [transport.py] [_log()] Compression: none
2026-04-11T09:07:35.662 [DEBUG] [Thread-167176] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:07:35.719 [DEBUG] [Thread-167176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:07:35.720 [DEBUG] [Thread-167176] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:07:35.720 [DEBUG] [Thread-167176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:07:35.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:07:35.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:07:35.779 [DEBUG] [Thread-167176] [transport.py] [_log()] userauth is OK
2026-04-11T09:07:35.780 [DEBUG] [Thread-167176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:07:35.780 [DEBUG] [Thread-167176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:07:35.780 [DEBUG] [Thread-167176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:07:35.780 [DEBUG] [Thread-167176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:07:35.799 [INFO] [Thread-167176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:07:35.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:07:35.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:07:36.628 [DEBUG] [Thread-167176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:07:36.628 [DEBUG] [Thread-167176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:07:36.676 [DEBUG] [Thread-167176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:07:36.676 [DEBUG] [Thread-167176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:07:36.685 [DEBUG] [Thread-167176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:07:36.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:07:36.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-04-11T09:07:36.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-04-11T09:07:36.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:07:36.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:07:36.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:07:36.724 [DEBUG] [Thread-167176] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:07:42.877 [DEBUG] [Thread-167178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:07:55.491 [DEBUG] [Thread-167179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:07:57.931 [DEBUG] [Thread-167180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:06.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:08:06.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:08:06.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-04-11T09:08:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 7, 50), 0.20018, 98.6236, 0.0, 21.3833, 13.2398, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:08:08.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:07:50
2026-04-11T09:08:08.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:08:08.564 [DEBUG] [Thread-167181] [transport.py] [_log()] starting thread (client mode): 0xb0f8ca00
2026-04-11T09:08:08.565 [DEBUG] [Thread-167181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:08:08.587 [DEBUG] [Thread-167181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:08:08.587 [INFO] [Thread-167181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:08:08.590 [DEBUG] [Thread-167181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] client lang: <none>
2026-04-11T09:08:08.591 [DEBUG] [Thread-167181] [transport.py] [_log()] server lang: <none>
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] kex follows: False
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] Compression: none
2026-04-11T09:08:08.592 [DEBUG] [Thread-167181] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:08:08.610 [DEBUG] [Thread-167181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:08:08.611 [DEBUG] [Thread-167181] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:08:08.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:08:08.612 [DEBUG] [Thread-167181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:08:08.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:08:08.614 [DEBUG] [Thread-167181] [transport.py] [_log()] userauth is OK
2026-04-11T09:08:08.614 [DEBUG] [Thread-167181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:08:08.614 [DEBUG] [Thread-167181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:08:08.614 [DEBUG] [Thread-167181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:08:08.614 [DEBUG] [Thread-167181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:08:08.637 [INFO] [Thread-167181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:08:08.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:08:09.444 [DEBUG] [Thread-167181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:08:09.444 [DEBUG] [Thread-167181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:08:09.445 [DEBUG] [Thread-167181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:08:09.486 [DEBUG] [Thread-167181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:08:09.486 [DEBUG] [Thread-167181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:08:09.490 [DEBUG] [Thread-167181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:08:09.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:08:09.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:08:09.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:08:09.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:08:09.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:08:09.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:08:09.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:08:09.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:08:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:08:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.296650 -999.00  +12.70  17.84     97  +12.30 1 3 1 3 1   887    0 0.39 -1.34 ----- 18.8 17.8 106.1 24.7 13.7 -0.5 13.7 -0.3 13.6 -0.3 13.8 -0.6
2026-04-11T09:08:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:08:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:08:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.296650
2026-04-11T09:08:09.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:08:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:08:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:08:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:08:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:08:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:07:50', tmtdew=0.20018, humidity=98.6236, cloud=0.0, wind=21.3833, temperature=13.2398, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:07:10.560', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:08:09.514 [DEBUG] [Thread-167181] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:08:09.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:08:09.608 [DEBUG] [Thread-167184] [transport.py] [_log()] starting thread (client mode): 0xb0f8c040
2026-04-11T09:08:09.608 [DEBUG] [Thread-167184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:08:09.622 [DEBUG] [Thread-167184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:08:09.622 [INFO] [Thread-167184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] client lang: <none>
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] server lang: <none>
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] kex follows: False
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:08:09.630 [DEBUG] [Thread-167184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:08:09.631 [DEBUG] [Thread-167184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:08:09.631 [DEBUG] [Thread-167184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:08:09.631 [DEBUG] [Thread-167184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:08:09.631 [DEBUG] [Thread-167184] [transport.py] [_log()] Compression: none
2026-04-11T09:08:09.631 [DEBUG] [Thread-167184] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:08:09.691 [DEBUG] [Thread-167184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:08:09.692 [DEBUG] [Thread-167184] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:08:09.692 [DEBUG] [Thread-167184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:08:09.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:08:09.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:08:09.751 [DEBUG] [Thread-167184] [transport.py] [_log()] userauth is OK
2026-04-11T09:08:09.752 [DEBUG] [Thread-167184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:08:09.752 [DEBUG] [Thread-167184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:08:09.752 [DEBUG] [Thread-167184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:08:09.752 [DEBUG] [Thread-167184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:08:09.773 [INFO] [Thread-167184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:08:09.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:08:09.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:08:10.579 [DEBUG] [Thread-167184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:08:10.580 [DEBUG] [Thread-167184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:08:10.628 [DEBUG] [Thread-167184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:08:10.628 [DEBUG] [Thread-167184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:08:10.637 [DEBUG] [Thread-167184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:08:10.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:08:10.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-04-11T09:08:10.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:08:10.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:08:10.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:08:10.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:08:10.671 [DEBUG] [Thread-167184] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:08:12.962 [DEBUG] [Thread-167186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:25.138 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:25.140 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:28.004 [DEBUG] [Thread-167187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:08:40.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:08:40.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-04-11T09:08:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 8, 25), 0.147525, 99.3284, 0.0, 23.2366, 12.8365, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:08:41.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:08:25
2026-04-11T09:08:42.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:08:42.483 [DEBUG] [Thread-167188] [transport.py] [_log()] starting thread (client mode): 0xb0f8de70
2026-04-11T09:08:42.483 [DEBUG] [Thread-167188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:08:42.501 [DEBUG] [Thread-167188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:08:42.501 [INFO] [Thread-167188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:42.503 [DEBUG] [Thread-167188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] client lang: <none>
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] server lang: <none>
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] kex follows: False
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] Compression: none
2026-04-11T09:08:42.504 [DEBUG] [Thread-167188] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:08:42.516 [DEBUG] [Thread-167188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:08:42.516 [DEBUG] [Thread-167188] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:08:42.516 [DEBUG] [Thread-167188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:08:42.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:08:42.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:08:42.518 [DEBUG] [Thread-167188] [transport.py] [_log()] userauth is OK
2026-04-11T09:08:42.518 [DEBUG] [Thread-167188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:08:42.518 [DEBUG] [Thread-167188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:08:42.518 [DEBUG] [Thread-167188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:08:42.518 [DEBUG] [Thread-167188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:08:42.537 [INFO] [Thread-167188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:08:42.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:08:43.043 [DEBUG] [Thread-167190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:43.343 [DEBUG] [Thread-167188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:08:43.343 [DEBUG] [Thread-167188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:08:43.343 [DEBUG] [Thread-167188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:08:43.384 [DEBUG] [Thread-167188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:08:43.385 [DEBUG] [Thread-167188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:08:43.388 [DEBUG] [Thread-167188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:08:43.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:08:43.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:08:43.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:08:43.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:08:43.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:08:43.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:08:43.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:08:43.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:08:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:08:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.297344 -999.00  +12.70  13.44     97  +12.30 1 3 1 3 1   887    0 0.40 -1.15 ----- 16.0 13.4 118.8 18.5 13.7 -0.7 13.7 -0.3 13.6 -0.5 13.8 -0.6
2026-04-11T09:08:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:08:43.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:08:43.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.297344
2026-04-11T09:08:43.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:08:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:08:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:08:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:08:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:08:43.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:08:25', tmtdew=0.147525, humidity=99.3284, cloud=0.0, wind=23.2366, temperature=12.8365, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:08:10.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:08:43.410 [DEBUG] [Thread-167188] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:08:43.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:08:43.508 [DEBUG] [Thread-167192] [transport.py] [_log()] starting thread (client mode): 0xae51bca0
2026-04-11T09:08:43.508 [DEBUG] [Thread-167192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:08:43.529 [DEBUG] [Thread-167192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:08:43.529 [INFO] [Thread-167192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:08:43.541 [DEBUG] [Thread-167192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:08:43.541 [DEBUG] [Thread-167192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:08:43.541 [DEBUG] [Thread-167192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] client lang: <none>
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] server lang: <none>
2026-04-11T09:08:43.542 [DEBUG] [Thread-167192] [transport.py] [_log()] kex follows: False
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] Compression: none
2026-04-11T09:08:43.543 [DEBUG] [Thread-167192] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:08:43.609 [DEBUG] [Thread-167192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:08:43.610 [DEBUG] [Thread-167192] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:08:43.610 [DEBUG] [Thread-167192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:08:43.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:08:43.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:08:43.679 [DEBUG] [Thread-167192] [transport.py] [_log()] userauth is OK
2026-04-11T09:08:43.679 [DEBUG] [Thread-167192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:08:43.679 [DEBUG] [Thread-167192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:08:43.679 [DEBUG] [Thread-167192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:08:43.679 [DEBUG] [Thread-167192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:08:43.700 [INFO] [Thread-167192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:08:43.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:08:43.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:08:44.509 [DEBUG] [Thread-167192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:08:44.509 [DEBUG] [Thread-167192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:08:44.557 [DEBUG] [Thread-167192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:08:44.557 [DEBUG] [Thread-167192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:08:44.567 [DEBUG] [Thread-167192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:08:44.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:08:44.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-04-11T09:08:44.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:08:44.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:08:44.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:08:44.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:08:44.610 [DEBUG] [Thread-167192] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:08:55.526 [DEBUG] [Thread-167194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:08:58.080 [DEBUG] [Thread-167195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:13.132 [DEBUG] [Thread-167196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:14.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:09:14.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:09:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:09:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 9), 0.1501, 99.3118, 0.0, 20.1848, 12.8865, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:09:15.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:09:00
2026-04-11T09:09:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:09:16.478 [DEBUG] [Thread-167197] [transport.py] [_log()] starting thread (client mode): 0xb0fb4760
2026-04-11T09:09:16.478 [DEBUG] [Thread-167197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:09:16.498 [DEBUG] [Thread-167197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:09:16.498 [INFO] [Thread-167197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:09:16.501 [DEBUG] [Thread-167197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:09:16.501 [DEBUG] [Thread-167197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] client lang: <none>
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] server lang: <none>
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] kex follows: False
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:09:16.502 [DEBUG] [Thread-167197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:09:16.503 [DEBUG] [Thread-167197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:09:16.503 [DEBUG] [Thread-167197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:09:16.503 [DEBUG] [Thread-167197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:09:16.503 [DEBUG] [Thread-167197] [transport.py] [_log()] Compression: none
2026-04-11T09:09:16.503 [DEBUG] [Thread-167197] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:09:16.521 [DEBUG] [Thread-167197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:09:16.522 [DEBUG] [Thread-167197] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:09:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:09:16.524 [DEBUG] [Thread-167197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:09:16.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:09:16.526 [DEBUG] [Thread-167197] [transport.py] [_log()] userauth is OK
2026-04-11T09:09:16.526 [DEBUG] [Thread-167197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:09:16.526 [DEBUG] [Thread-167197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:09:16.527 [DEBUG] [Thread-167197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:09:16.527 [DEBUG] [Thread-167197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:09:16.542 [INFO] [Thread-167197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:09:16.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:09:17.328 [DEBUG] [Thread-167197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:09:17.328 [DEBUG] [Thread-167197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:09:17.329 [DEBUG] [Thread-167197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:09:17.369 [DEBUG] [Thread-167197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:09:17.369 [DEBUG] [Thread-167197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:09:17.373 [DEBUG] [Thread-167197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:09:17.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:09:17.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:09:17.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:09:17.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:09:17.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:09:17.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:09:17.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:09:17.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:09:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:09:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.297691 -999.00  +12.80  13.42     97  +12.30 1 3 1 3 1   887    0 0.41 -0.79 ----- 13.8 13.4 123.6 24.2 13.7 -0.6 13.7 -0.2 13.7 -0.2 13.9 -0.6
2026-04-11T09:09:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:09:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:09:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.297691
2026-04-11T09:09:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:09:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:09:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:09:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:09:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:09:17.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:09:00', tmtdew=0.1501, humidity=99.3118, cloud=0.0, wind=20.1848, temperature=12.8865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:08:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:09:17.402 [DEBUG] [Thread-167197] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:09:17.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:09:17.504 [DEBUG] [Thread-167200] [transport.py] [_log()] starting thread (client mode): 0xb0fb7f40
2026-04-11T09:09:17.504 [DEBUG] [Thread-167200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:09:17.519 [DEBUG] [Thread-167200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:09:17.519 [INFO] [Thread-167200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:09:17.527 [DEBUG] [Thread-167200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:09:17.527 [DEBUG] [Thread-167200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:09:17.527 [DEBUG] [Thread-167200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:09:17.527 [DEBUG] [Thread-167200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:17.527 [DEBUG] [Thread-167200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] client lang: <none>
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] server lang: <none>
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] kex follows: False
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] Compression: none
2026-04-11T09:09:17.528 [DEBUG] [Thread-167200] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:09:17.583 [DEBUG] [Thread-167200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:09:17.583 [DEBUG] [Thread-167200] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:09:17.584 [DEBUG] [Thread-167200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:09:17.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:09:17.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:09:17.640 [DEBUG] [Thread-167200] [transport.py] [_log()] userauth is OK
2026-04-11T09:09:17.640 [DEBUG] [Thread-167200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:09:17.640 [DEBUG] [Thread-167200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:09:17.640 [DEBUG] [Thread-167200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:09:17.640 [DEBUG] [Thread-167200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:09:17.659 [INFO] [Thread-167200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:09:17.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:09:17.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:09:18.575 [DEBUG] [Thread-167200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:09:18.575 [DEBUG] [Thread-167200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:09:18.624 [DEBUG] [Thread-167200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:09:18.624 [DEBUG] [Thread-167200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:09:18.636 [DEBUG] [Thread-167200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:09:18.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:09:18.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-04-11T09:09:18.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-04-11T09:09:18.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:09:18.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:09:18.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:09:18.673 [DEBUG] [Thread-167200] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:09:25.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:25.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:28.171 [DEBUG] [Thread-167202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:43.232 [DEBUG] [Thread-167203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:09:48.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:09:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:09:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 9, 36), 0.19503, 98.6568, 0.0, 24.0293, 13.2398, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:09:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:09:36
2026-04-11T09:09:50.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:09:50.486 [DEBUG] [Thread-167204] [transport.py] [_log()] starting thread (client mode): 0xb0fb4d00
2026-04-11T09:09:50.487 [DEBUG] [Thread-167204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:09:50.506 [DEBUG] [Thread-167204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:09:50.507 [INFO] [Thread-167204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:09:50.509 [DEBUG] [Thread-167204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] client lang: <none>
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] server lang: <none>
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] kex follows: False
2026-04-11T09:09:50.510 [DEBUG] [Thread-167204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:09:50.511 [DEBUG] [Thread-167204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:09:50.511 [DEBUG] [Thread-167204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:09:50.511 [DEBUG] [Thread-167204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:09:50.511 [DEBUG] [Thread-167204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:09:50.511 [DEBUG] [Thread-167204] [transport.py] [_log()] Compression: none
2026-04-11T09:09:50.511 [DEBUG] [Thread-167204] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:09:50.529 [DEBUG] [Thread-167204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:09:50.529 [DEBUG] [Thread-167204] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:09:50.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:09:50.530 [DEBUG] [Thread-167204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:09:50.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:09:50.534 [DEBUG] [Thread-167204] [transport.py] [_log()] userauth is OK
2026-04-11T09:09:50.534 [DEBUG] [Thread-167204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:09:50.534 [DEBUG] [Thread-167204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:09:50.534 [DEBUG] [Thread-167204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:09:50.534 [DEBUG] [Thread-167204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:09:50.571 [INFO] [Thread-167204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:09:50.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:09:51.353 [DEBUG] [Thread-167204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:09:51.353 [DEBUG] [Thread-167204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:09:51.354 [DEBUG] [Thread-167204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:09:51.394 [DEBUG] [Thread-167204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:09:51.394 [DEBUG] [Thread-167204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:09:51.398 [DEBUG] [Thread-167204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:09:51.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:09:51.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:09:51.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:09:51.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:09:51.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:09:51.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:09:51.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:09:51.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:09:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:09:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.298038 -999.00  +12.80  17.48     97  +12.30 1 3 1 3 1   887    0 0.40 -0.90 ----- 10.6 17.5 76.3 25.9 13.7 -0.5 13.8 -0.2 13.7 -0.6 13.9 -0.6
2026-04-11T09:09:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:09:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:09:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.298038
2026-04-11T09:09:51.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:09:51.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:09:51.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:09:51.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:09:51.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:09:51.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:09:36', tmtdew=0.19503, humidity=98.6568, cloud=0.0, wind=24.0293, temperature=13.2398, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:09:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:09:51.423 [DEBUG] [Thread-167204] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:09:51.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:09:51.518 [DEBUG] [Thread-167207] [transport.py] [_log()] starting thread (client mode): 0xa79520e0
2026-04-11T09:09:51.518 [DEBUG] [Thread-167207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:09:51.533 [DEBUG] [Thread-167207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:09:51.533 [INFO] [Thread-167207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:09:51.543 [DEBUG] [Thread-167207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:09:51.543 [DEBUG] [Thread-167207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] client lang: <none>
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] server lang: <none>
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] kex follows: False
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:09:51.544 [DEBUG] [Thread-167207] [transport.py] [_log()] Compression: none
2026-04-11T09:09:51.545 [DEBUG] [Thread-167207] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:09:51.605 [DEBUG] [Thread-167207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:09:51.606 [DEBUG] [Thread-167207] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:09:51.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:09:51.607 [DEBUG] [Thread-167207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:09:51.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:09:51.666 [DEBUG] [Thread-167207] [transport.py] [_log()] userauth is OK
2026-04-11T09:09:51.666 [DEBUG] [Thread-167207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:09:51.667 [DEBUG] [Thread-167207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:09:51.667 [DEBUG] [Thread-167207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:09:51.667 [DEBUG] [Thread-167207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:09:51.691 [INFO] [Thread-167207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:09:51.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:09:51.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:09:52.517 [DEBUG] [Thread-167207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:09:52.517 [DEBUG] [Thread-167207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:09:52.565 [DEBUG] [Thread-167207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:09:52.565 [DEBUG] [Thread-167207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:09:52.575 [DEBUG] [Thread-167207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:09:52.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:09:52.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-04-11T09:09:52.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-04-11T09:09:52.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:09:52.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:09:52.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:09:52.612 [DEBUG] [Thread-167207] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:09:55.560 [DEBUG] [Thread-167209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:09:58.271 [DEBUG] [Thread-167210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:13.327 [DEBUG] [Thread-167211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:22.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:10:22.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:10:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:10:23.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 10, 11), 0.14238, 99.3616, 0.0, 21.685, 12.8865, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:10:23.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:10:11
2026-04-11T09:10:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:10:24.437 [DEBUG] [Thread-167212] [transport.py] [_log()] starting thread (client mode): 0xae51a350
2026-04-11T09:10:24.437 [DEBUG] [Thread-167212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:10:24.450 [DEBUG] [Thread-167212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:10:24.450 [INFO] [Thread-167212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:10:24.451 [DEBUG] [Thread-167212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] client lang: <none>
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] server lang: <none>
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] kex follows: False
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] Compression: none
2026-04-11T09:10:24.452 [DEBUG] [Thread-167212] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:10:24.460 [DEBUG] [Thread-167212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:10:24.461 [DEBUG] [Thread-167212] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:10:24.461 [DEBUG] [Thread-167212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:10:24.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:10:24.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:10:24.462 [DEBUG] [Thread-167212] [transport.py] [_log()] userauth is OK
2026-04-11T09:10:24.462 [DEBUG] [Thread-167212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:10:24.462 [DEBUG] [Thread-167212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:10:24.462 [DEBUG] [Thread-167212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:10:24.462 [DEBUG] [Thread-167212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:10:24.482 [INFO] [Thread-167212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:10:24.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:10:25.437 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:25.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:28.363 [DEBUG] [Thread-167214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:32.984 [DEBUG] [Thread-167212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:10:32.984 [DEBUG] [Thread-167212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:10:32.984 [DEBUG] [Thread-167212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:10:33.025 [DEBUG] [Thread-167212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:10:33.025 [DEBUG] [Thread-167212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:10:33.028 [DEBUG] [Thread-167212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:10:33.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:10:33.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:10:33.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:10:33.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:10:33.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:10:33.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:10:33.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:10:33.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:10:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:10:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.298733 -999.00  +12.80  13.43     97  +12.30 1 3 1 3 1   887    0 0.42 -0.69 ----- 13.8 13.4 123.7 18.9 13.7 -0.7 13.8 -0.2 13.7 -0.3 13.9 -0.7
2026-04-11T09:10:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:10:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:10:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.298733
2026-04-11T09:10:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:10:33.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:10:33.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:10:33.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:10:33.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:10:33.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:10:11', tmtdew=0.14238, humidity=99.3616, cloud=0.0, wind=21.685, temperature=12.8865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:10:10.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:10:33.133 [DEBUG] [Thread-167212] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:10:33.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:10:33.230 [DEBUG] [Thread-167216] [transport.py] [_log()] starting thread (client mode): 0xa7953a60
2026-04-11T09:10:33.230 [DEBUG] [Thread-167216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:10:33.245 [DEBUG] [Thread-167216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:10:33.245 [INFO] [Thread-167216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:10:33.253 [DEBUG] [Thread-167216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] client lang: <none>
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] server lang: <none>
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] kex follows: False
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:10:33.254 [DEBUG] [Thread-167216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:10:33.255 [DEBUG] [Thread-167216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:10:33.255 [DEBUG] [Thread-167216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:10:33.255 [DEBUG] [Thread-167216] [transport.py] [_log()] Compression: none
2026-04-11T09:10:33.255 [DEBUG] [Thread-167216] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:10:33.316 [DEBUG] [Thread-167216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:10:33.316 [DEBUG] [Thread-167216] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:10:33.317 [DEBUG] [Thread-167216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:10:33.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:10:33.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:10:33.375 [DEBUG] [Thread-167216] [transport.py] [_log()] userauth is OK
2026-04-11T09:10:33.375 [DEBUG] [Thread-167216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:10:33.375 [DEBUG] [Thread-167216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:10:33.375 [DEBUG] [Thread-167216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:10:33.376 [DEBUG] [Thread-167216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:10:33.394 [INFO] [Thread-167216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:10:33.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:10:33.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:10:34.272 [DEBUG] [Thread-167216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:10:34.272 [DEBUG] [Thread-167216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:10:34.320 [DEBUG] [Thread-167216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:10:34.320 [DEBUG] [Thread-167216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:10:34.330 [DEBUG] [Thread-167216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:10:34.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:10:34.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-04-11T09:10:34.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-04-11T09:10:34.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:10:34.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:10:34.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:10:34.366 [DEBUG] [Thread-167216] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:10:43.399 [DEBUG] [Thread-167218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:55.594 [DEBUG] [Thread-167219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:10:58.452 [DEBUG] [Thread-167220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:04.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:11:04.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:11:04.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:11:05.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 10, 47), 0.20527, 98.5905, 0.0, 27.522, 13.1735, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:11:05.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:10:47
2026-04-11T09:11:06.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:11:06.197 [DEBUG] [Thread-167221] [transport.py] [_log()] starting thread (client mode): 0xae5a7b80
2026-04-11T09:11:06.197 [DEBUG] [Thread-167221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:11:06.220 [DEBUG] [Thread-167221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:11:06.220 [INFO] [Thread-167221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] client lang: <none>
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] server lang: <none>
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] kex follows: False
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] Compression: none
2026-04-11T09:11:06.223 [DEBUG] [Thread-167221] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:11:06.243 [DEBUG] [Thread-167221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:11:06.243 [DEBUG] [Thread-167221] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:11:06.244 [DEBUG] [Thread-167221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:11:06.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:11:06.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:11:06.246 [DEBUG] [Thread-167221] [transport.py] [_log()] userauth is OK
2026-04-11T09:11:06.246 [DEBUG] [Thread-167221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:11:06.246 [DEBUG] [Thread-167221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:11:06.247 [DEBUG] [Thread-167221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:11:06.247 [DEBUG] [Thread-167221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:11:06.272 [INFO] [Thread-167221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:11:06.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:11:07.044 [DEBUG] [Thread-167221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:11:07.045 [DEBUG] [Thread-167221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:11:07.045 [DEBUG] [Thread-167221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:11:07.085 [DEBUG] [Thread-167221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:11:07.086 [DEBUG] [Thread-167221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:11:07.088 [DEBUG] [Thread-167221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:11:07.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:11:07.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:11:07.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:11:07.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:11:07.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:11:07.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:11:07.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:11:07.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:11:07.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:11:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.298733 -999.00  +12.80  13.43     97  +12.30 1 3 1 3 1   887    0 0.42 -0.69 ----- 13.8 13.4 123.7 18.9 13.7 -0.7 13.8 -0.2 13.7 -0.3 13.9 -0.7
2026-04-11T09:11:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:11:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:11:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.298733
2026-04-11T09:11:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:11:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:11:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:11:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:11:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:11:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:10:47', tmtdew=0.20527, humidity=98.5905, cloud=0.0, wind=27.522, temperature=13.1735, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:10:10.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:11:07.114 [DEBUG] [Thread-167221] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:11:07.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:11:07.216 [DEBUG] [Thread-167224] [transport.py] [_log()] starting thread (client mode): 0xb0fccee0
2026-04-11T09:11:07.216 [DEBUG] [Thread-167224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:11:07.231 [DEBUG] [Thread-167224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:11:07.231 [INFO] [Thread-167224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] client lang: <none>
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] server lang: <none>
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] kex follows: False
2026-04-11T09:11:07.239 [DEBUG] [Thread-167224] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:11:07.240 [DEBUG] [Thread-167224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:11:07.240 [DEBUG] [Thread-167224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:11:07.240 [DEBUG] [Thread-167224] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:11:07.240 [DEBUG] [Thread-167224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:11:07.240 [DEBUG] [Thread-167224] [transport.py] [_log()] Compression: none
2026-04-11T09:11:07.240 [DEBUG] [Thread-167224] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:11:07.304 [DEBUG] [Thread-167224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:11:07.305 [DEBUG] [Thread-167224] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:11:07.305 [DEBUG] [Thread-167224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:11:07.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:11:07.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:11:07.365 [DEBUG] [Thread-167224] [transport.py] [_log()] userauth is OK
2026-04-11T09:11:07.365 [DEBUG] [Thread-167224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:11:07.365 [DEBUG] [Thread-167224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:11:07.366 [DEBUG] [Thread-167224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:11:07.366 [DEBUG] [Thread-167224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:11:07.385 [INFO] [Thread-167224] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:11:07.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:11:07.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:11:08.239 [DEBUG] [Thread-167224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:11:08.239 [DEBUG] [Thread-167224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:11:08.287 [DEBUG] [Thread-167224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:11:08.288 [DEBUG] [Thread-167224] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:11:08.297 [DEBUG] [Thread-167224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:11:08.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:11:08.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:11:08.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-04-11T09:11:08.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:11:08.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:11:08.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:11:08.336 [DEBUG] [Thread-167224] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:11:13.493 [DEBUG] [Thread-167226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:25.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:25.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:28.557 [DEBUG] [Thread-167227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:38.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:11:38.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:11:38.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-04-11T09:11:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 11, 22), 0.094965, 99.345, 0.0, 16.992, 12.8531, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:11:39.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:11:22
2026-04-11T09:11:39.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:11:40.138 [DEBUG] [Thread-167228] [transport.py] [_log()] starting thread (client mode): 0xae5a7160
2026-04-11T09:11:40.138 [DEBUG] [Thread-167228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:11:40.159 [DEBUG] [Thread-167228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:11:40.159 [INFO] [Thread-167228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:11:40.162 [DEBUG] [Thread-167228] [transport.py] [_log()] client lang: <none>
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] server lang: <none>
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] kex follows: False
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] Compression: none
2026-04-11T09:11:40.163 [DEBUG] [Thread-167228] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:11:40.185 [DEBUG] [Thread-167228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:11:40.186 [DEBUG] [Thread-167228] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:11:40.186 [DEBUG] [Thread-167228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:11:40.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:11:40.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:11:40.191 [DEBUG] [Thread-167228] [transport.py] [_log()] userauth is OK
2026-04-11T09:11:40.191 [DEBUG] [Thread-167228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:11:40.191 [DEBUG] [Thread-167228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:11:40.191 [DEBUG] [Thread-167228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:11:40.191 [DEBUG] [Thread-167228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:11:40.217 [INFO] [Thread-167228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:11:40.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:11:40.973 [DEBUG] [Thread-167228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:11:40.974 [DEBUG] [Thread-167228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:11:40.974 [DEBUG] [Thread-167228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:11:41.015 [DEBUG] [Thread-167228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:11:41.015 [DEBUG] [Thread-167228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:11:41.019 [DEBUG] [Thread-167228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:11:41.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:11:41.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:11:41.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:11:41.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:11:41.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:11:41.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:11:41.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:11:41.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:11:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:11:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.299080 -999.00  +12.80  11.90     97  +12.30 1 3 1 3 1   887    0 0.43 -0.29 ----- 12.6 11.9 101.8 19.6 13.7 -0.6 13.8 -0.1 13.7 -0.4 13.9 -0.7
2026-04-11T09:11:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:11:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:11:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.299080
2026-04-11T09:11:41.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:11:41.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:11:41.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:11:41.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:11:41.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:11:41.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:11:22', tmtdew=0.094965, humidity=99.345, cloud=0.0, wind=16.992, temperature=12.8531, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:10:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:11:41.047 [DEBUG] [Thread-167228] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:11:41.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:11:41.143 [DEBUG] [Thread-167231] [transport.py] [_log()] starting thread (client mode): 0xae5e7be0
2026-04-11T09:11:41.143 [DEBUG] [Thread-167231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:11:41.158 [DEBUG] [Thread-167231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:11:41.159 [INFO] [Thread-167231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:11:41.166 [DEBUG] [Thread-167231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] client lang: <none>
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] server lang: <none>
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] kex follows: False
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:11:41.167 [DEBUG] [Thread-167231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:11:41.168 [DEBUG] [Thread-167231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:11:41.168 [DEBUG] [Thread-167231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:11:41.168 [DEBUG] [Thread-167231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:11:41.168 [DEBUG] [Thread-167231] [transport.py] [_log()] Compression: none
2026-04-11T09:11:41.168 [DEBUG] [Thread-167231] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:11:41.229 [DEBUG] [Thread-167231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:11:41.230 [DEBUG] [Thread-167231] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:11:41.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:11:41.231 [DEBUG] [Thread-167231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:11:41.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:11:41.288 [DEBUG] [Thread-167231] [transport.py] [_log()] userauth is OK
2026-04-11T09:11:41.288 [DEBUG] [Thread-167231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:11:41.288 [DEBUG] [Thread-167231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:11:41.288 [DEBUG] [Thread-167231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:11:41.288 [DEBUG] [Thread-167231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:11:41.308 [INFO] [Thread-167231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:11:41.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:11:41.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:11:42.137 [DEBUG] [Thread-167231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:11:42.137 [DEBUG] [Thread-167231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:11:42.186 [DEBUG] [Thread-167231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:11:42.186 [DEBUG] [Thread-167231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:11:42.200 [DEBUG] [Thread-167231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:11:42.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:11:42.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:11:42.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-04-11T09:11:42.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:11:42.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:11:42.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:11:42.237 [DEBUG] [Thread-167231] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:11:43.592 [DEBUG] [Thread-167233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:55.628 [DEBUG] [Thread-167234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:11:58.655 [DEBUG] [Thread-167235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:12.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:12:12.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:12:12.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:12:13.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 11, 58), 0.14754, 99.3284, 0.0, 20.5553, 12.9031, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:12:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:11:58
2026-04-11T09:12:13.696 [DEBUG] [Thread-167236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:12:14.113 [DEBUG] [Thread-167237] [transport.py] [_log()] starting thread (client mode): 0xb0fcceb0
2026-04-11T09:12:14.113 [DEBUG] [Thread-167237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:12:14.133 [DEBUG] [Thread-167237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:12:14.133 [INFO] [Thread-167237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] client lang: <none>
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] server lang: <none>
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] kex follows: False
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:12:14.136 [DEBUG] [Thread-167237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:12:14.137 [DEBUG] [Thread-167237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:12:14.137 [DEBUG] [Thread-167237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:12:14.137 [DEBUG] [Thread-167237] [transport.py] [_log()] Compression: none
2026-04-11T09:12:14.137 [DEBUG] [Thread-167237] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:12:14.156 [DEBUG] [Thread-167237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:12:14.156 [DEBUG] [Thread-167237] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:12:14.157 [DEBUG] [Thread-167237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:12:14.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:12:14.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:12:14.159 [DEBUG] [Thread-167237] [transport.py] [_log()] userauth is OK
2026-04-11T09:12:14.159 [DEBUG] [Thread-167237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:12:14.159 [DEBUG] [Thread-167237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:12:14.159 [DEBUG] [Thread-167237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:12:14.159 [DEBUG] [Thread-167237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:12:14.195 [INFO] [Thread-167237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:12:14.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:12:14.922 [DEBUG] [Thread-167237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:12:14.922 [DEBUG] [Thread-167237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:12:14.923 [DEBUG] [Thread-167237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:12:14.963 [DEBUG] [Thread-167237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:12:14.963 [DEBUG] [Thread-167237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:12:14.968 [DEBUG] [Thread-167237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:12:14.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:12:14.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:12:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:12:14.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:12:14.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:12:14.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:12:14.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:12:14.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:12:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:12:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.299427 -999.00  +12.70  23.49     97  +12.30 1 3 1 3 1   887    0 0.44 0.11 ----- 20.3 23.5 68.8 26.2 13.8 -0.6 13.8 -0.3 13.7 -0.2 13.9 -0.6
2026-04-11T09:12:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:12:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:12:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.299427
2026-04-11T09:12:14.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:12:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:12:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:12:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:12:14.990 [DEBUG] [Thread-167237] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:12:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:12:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:11:58', tmtdew=0.14754, humidity=99.3284, cloud=0.0, wind=20.5553, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:11:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:12:15.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:12:15.083 [DEBUG] [Thread-167240] [transport.py] [_log()] starting thread (client mode): 0xb0f6d630
2026-04-11T09:12:15.084 [DEBUG] [Thread-167240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:12:15.098 [DEBUG] [Thread-167240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:12:15.098 [INFO] [Thread-167240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] client lang: <none>
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] server lang: <none>
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] kex follows: False
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:12:15.106 [DEBUG] [Thread-167240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:12:15.107 [DEBUG] [Thread-167240] [transport.py] [_log()] Compression: none
2026-04-11T09:12:15.107 [DEBUG] [Thread-167240] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:12:15.167 [DEBUG] [Thread-167240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:12:15.167 [DEBUG] [Thread-167240] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:12:15.168 [DEBUG] [Thread-167240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:12:15.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:12:15.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:12:15.222 [DEBUG] [Thread-167240] [transport.py] [_log()] userauth is OK
2026-04-11T09:12:15.223 [DEBUG] [Thread-167240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:12:15.223 [DEBUG] [Thread-167240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:12:15.224 [DEBUG] [Thread-167240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:12:15.224 [DEBUG] [Thread-167240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:12:15.247 [INFO] [Thread-167240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:12:15.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:12:15.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:12:16.130 [DEBUG] [Thread-167240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:12:16.130 [DEBUG] [Thread-167240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:12:16.178 [DEBUG] [Thread-167240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:12:16.178 [DEBUG] [Thread-167240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:12:16.187 [DEBUG] [Thread-167240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:12:16.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:12: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-04-11T09:12: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-04-11T09:12:16.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:12:16.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:12:16.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:12:16.225 [DEBUG] [Thread-167240] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:12:25.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:25.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:28.730 [DEBUG] [Thread-167242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:43.819 [DEBUG] [Thread-167243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:12:46.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:12:46.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-04-11T09:12:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 12, 33), 0.14238, 99.3616, 0.0, 16.6568, 12.8865, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:12:47.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:12:33
2026-04-11T09:12:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:12:48.100 [DEBUG] [Thread-167244] [transport.py] [_log()] starting thread (client mode): 0xb0f6c250
2026-04-11T09:12:48.100 [DEBUG] [Thread-167244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:12:48.119 [DEBUG] [Thread-167244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:12:48.119 [INFO] [Thread-167244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] client lang: <none>
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] server lang: <none>
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] kex follows: False
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:12:48.122 [DEBUG] [Thread-167244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:12:48.123 [DEBUG] [Thread-167244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:12:48.123 [DEBUG] [Thread-167244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:12:48.123 [DEBUG] [Thread-167244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:12:48.123 [DEBUG] [Thread-167244] [transport.py] [_log()] Compression: none
2026-04-11T09:12:48.123 [DEBUG] [Thread-167244] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:12:48.140 [DEBUG] [Thread-167244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:12:48.140 [DEBUG] [Thread-167244] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:12:48.141 [DEBUG] [Thread-167244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:12:48.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:12:48.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:12:48.142 [DEBUG] [Thread-167244] [transport.py] [_log()] userauth is OK
2026-04-11T09:12:48.143 [DEBUG] [Thread-167244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:12:48.143 [DEBUG] [Thread-167244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:12:48.143 [DEBUG] [Thread-167244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:12:48.143 [DEBUG] [Thread-167244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:12:48.166 [INFO] [Thread-167244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:12:48.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:12:48.900 [DEBUG] [Thread-167244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:12:48.900 [DEBUG] [Thread-167244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:12:48.901 [DEBUG] [Thread-167244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:12:48.941 [DEBUG] [Thread-167244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:12:48.941 [DEBUG] [Thread-167244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:12:48.945 [DEBUG] [Thread-167244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:12:48.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:12:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:12:48.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:12:48.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:12:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:12:48.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:12:48.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:12:48.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:12:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:12:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.300122 -999.00  +12.80  10.89     97  +12.30 1 3 1 3 1   887    0 0.44 0.00 ----- 12.9 10.9 107.7 20.5 13.7 -0.5 13.8 -0.3 13.7 -0.4 13.9 -0.6
2026-04-11T09:12:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:12:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:12:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.300122
2026-04-11T09:12:48.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:12:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:12:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:12:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:12:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:12:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:12:33', tmtdew=0.14238, humidity=99.3616, cloud=0.0, wind=16.6568, temperature=12.8865, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:12:10.541', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:12:48.973 [DEBUG] [Thread-167244] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:12:49.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:12:49.077 [DEBUG] [Thread-167247] [transport.py] [_log()] starting thread (client mode): 0xae5e7520
2026-04-11T09:12:49.078 [DEBUG] [Thread-167247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:12:49.093 [DEBUG] [Thread-167247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:12:49.093 [INFO] [Thread-167247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:49.101 [DEBUG] [Thread-167247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] client lang: <none>
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] server lang: <none>
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] kex follows: False
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:12:49.102 [DEBUG] [Thread-167247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:12:49.103 [DEBUG] [Thread-167247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:12:49.103 [DEBUG] [Thread-167247] [transport.py] [_log()] Compression: none
2026-04-11T09:12:49.103 [DEBUG] [Thread-167247] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:12:49.158 [DEBUG] [Thread-167247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:12:49.158 [DEBUG] [Thread-167247] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:12:49.159 [DEBUG] [Thread-167247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:12:49.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:12:49.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:12:49.218 [DEBUG] [Thread-167247] [transport.py] [_log()] userauth is OK
2026-04-11T09:12:49.218 [DEBUG] [Thread-167247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:12:49.218 [DEBUG] [Thread-167247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:12:49.218 [DEBUG] [Thread-167247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:12:49.218 [DEBUG] [Thread-167247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:12:49.237 [INFO] [Thread-167247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:12:49.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:12:49.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:12:50.124 [DEBUG] [Thread-167247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:12:50.125 [DEBUG] [Thread-167247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:12:50.173 [DEBUG] [Thread-167247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:12:50.174 [DEBUG] [Thread-167247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:12:50.183 [DEBUG] [Thread-167247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:12:50.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:12:50.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-04-11T09:12:50.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-04-11T09:12:50.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:12:50.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:12:50.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:12:50.219 [DEBUG] [Thread-167247] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:12:55.670 [DEBUG] [Thread-167249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:12:58.862 [DEBUG] [Thread-167250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:13.921 [DEBUG] [Thread-167251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:13:20.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:13:20.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-04-11T09:13:21.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 13, 8), 0.147535, 99.3284, 0.0, 21.2785, 12.9031, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:13:21.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:13:08
2026-04-11T09:13:21.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:13:22.026 [DEBUG] [Thread-167252] [transport.py] [_log()] starting thread (client mode): 0xae5f0910
2026-04-11T09:13:22.026 [DEBUG] [Thread-167252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:13:22.047 [DEBUG] [Thread-167252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:13:22.047 [INFO] [Thread-167252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:13:22.050 [DEBUG] [Thread-167252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:13:22.051 [DEBUG] [Thread-167252] [transport.py] [_log()] client lang: <none>
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] server lang: <none>
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] kex follows: False
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] Compression: none
2026-04-11T09:13:22.052 [DEBUG] [Thread-167252] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:13:22.071 [DEBUG] [Thread-167252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:13:22.072 [DEBUG] [Thread-167252] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:13:22.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:13:22.074 [DEBUG] [Thread-167252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:13:22.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:13:22.076 [DEBUG] [Thread-167252] [transport.py] [_log()] userauth is OK
2026-04-11T09:13:22.076 [DEBUG] [Thread-167252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:13:22.077 [DEBUG] [Thread-167252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:13:22.077 [DEBUG] [Thread-167252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:13:22.077 [DEBUG] [Thread-167252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:13:22.097 [INFO] [Thread-167252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:13:22.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:13:22.849 [DEBUG] [Thread-167252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:13:22.849 [DEBUG] [Thread-167252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:13:22.849 [DEBUG] [Thread-167252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:13:22.890 [DEBUG] [Thread-167252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:13:22.891 [DEBUG] [Thread-167252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:13:22.894 [DEBUG] [Thread-167252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:13:22.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:13:22.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:13:22.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:13:22.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:13:22.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:13:22.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:13:22.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:13:22.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:13:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:13:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.300816 -999.00  +12.70  16.37     97  +12.30 1 3 1 3 1   887    0 0.45 0.40 ----- 18.5 16.4 103.2 22.6 13.7 -1.0 13.8 -0.3 13.7 -0.4 14.0 -0.8
2026-04-11T09:13:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:13:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:13:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.300816
2026-04-11T09:13:22.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:13:22.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:13:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:13:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:13:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:13:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:13:08', tmtdew=0.147535, humidity=99.3284, cloud=0.0, wind=21.2785, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:13:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:13:22.927 [DEBUG] [Thread-167252] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:13:23.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:13:23.024 [DEBUG] [Thread-167255] [transport.py] [_log()] starting thread (client mode): 0xae5f15a0
2026-04-11T09:13:23.024 [DEBUG] [Thread-167255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:13:23.040 [DEBUG] [Thread-167255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:13:23.040 [INFO] [Thread-167255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] client lang: <none>
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] server lang: <none>
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] kex follows: False
2026-04-11T09:13:23.048 [DEBUG] [Thread-167255] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:13:23.049 [DEBUG] [Thread-167255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:13:23.049 [DEBUG] [Thread-167255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:13:23.049 [DEBUG] [Thread-167255] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:13:23.049 [DEBUG] [Thread-167255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:13:23.049 [DEBUG] [Thread-167255] [transport.py] [_log()] Compression: none
2026-04-11T09:13:23.049 [DEBUG] [Thread-167255] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:13:23.109 [DEBUG] [Thread-167255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:13:23.109 [DEBUG] [Thread-167255] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:13:23.110 [DEBUG] [Thread-167255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:13:23.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:13:23.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:13:23.164 [DEBUG] [Thread-167255] [transport.py] [_log()] userauth is OK
2026-04-11T09:13:23.165 [DEBUG] [Thread-167255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:13:23.165 [DEBUG] [Thread-167255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:13:23.165 [DEBUG] [Thread-167255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:13:23.165 [DEBUG] [Thread-167255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:13:23.185 [INFO] [Thread-167255] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:13:23.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:13:23.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:13:24.006 [DEBUG] [Thread-167255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:13:24.006 [DEBUG] [Thread-167255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:13:24.054 [DEBUG] [Thread-167255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:13:24.054 [DEBUG] [Thread-167255] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:13:24.064 [DEBUG] [Thread-167255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:13:24.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:13:24.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-04-11T09:13:24.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-04-11T09:13:24.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:13:24.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:13:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:13:24.100 [DEBUG] [Thread-167255] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:13:25.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:25.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:28.959 [DEBUG] [Thread-167257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:44.012 [DEBUG] [Thread-167258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:54.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:13:54.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:13:54.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-04-11T09:13:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 13, 44), 0.20534, 98.5905, 0.0, 29.1449, 13.273, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:13:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:13:44
2026-04-11T09:13:55.728 [DEBUG] [Thread-167259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:13:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:13:55.896 [DEBUG] [Thread-167260] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ee0
2026-04-11T09:13:55.897 [DEBUG] [Thread-167260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:13:55.918 [DEBUG] [Thread-167260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:13:55.918 [INFO] [Thread-167260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:13:55.921 [DEBUG] [Thread-167260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] client lang: <none>
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] server lang: <none>
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] kex follows: False
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] Compression: none
2026-04-11T09:13:55.922 [DEBUG] [Thread-167260] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:13:55.942 [DEBUG] [Thread-167260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:13:55.943 [DEBUG] [Thread-167260] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:13:55.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:13:55.944 [DEBUG] [Thread-167260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:13:55.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:13:55.946 [DEBUG] [Thread-167260] [transport.py] [_log()] userauth is OK
2026-04-11T09:13:55.946 [DEBUG] [Thread-167260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:13:55.947 [DEBUG] [Thread-167260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:13:55.947 [DEBUG] [Thread-167260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:13:55.947 [DEBUG] [Thread-167260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:13:55.970 [INFO] [Thread-167260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:13:55.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:13:56.719 [DEBUG] [Thread-167260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:13:56.719 [DEBUG] [Thread-167260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:13:56.719 [DEBUG] [Thread-167260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:13:56.760 [DEBUG] [Thread-167260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:13:56.760 [DEBUG] [Thread-167260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:13:56.764 [DEBUG] [Thread-167260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:13:56.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:13:56.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:13:56.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:13:56.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:13:56.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:13:56.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:13:56.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:13:56.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:13:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:13:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.300816 -999.00  +12.70  16.37     97  +12.30 1 3 1 3 1   887    0 0.45 0.40 ----- 18.5 16.4 103.2 22.6 13.7 -1.0 13.8 -0.3 13.7 -0.4 14.0 -0.8
2026-04-11T09:13:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:13:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:13:56.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.300816
2026-04-11T09:13:56.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:13:56.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:13:56.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:13:56.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:13:56.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:13:56.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:13:44', tmtdew=0.20534, humidity=98.5905, cloud=0.0, wind=29.1449, temperature=13.273, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:13:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:13:56.789 [DEBUG] [Thread-167260] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:13:56.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:13:56.888 [DEBUG] [Thread-167263] [transport.py] [_log()] starting thread (client mode): 0xae5f3280
2026-04-11T09:13:56.888 [DEBUG] [Thread-167263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:13:56.905 [DEBUG] [Thread-167263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:13:56.906 [INFO] [Thread-167263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:13:56.916 [DEBUG] [Thread-167263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:13:56.916 [DEBUG] [Thread-167263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:13:56.916 [DEBUG] [Thread-167263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:13:56.916 [DEBUG] [Thread-167263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:56.916 [DEBUG] [Thread-167263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] client lang: <none>
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] server lang: <none>
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] kex follows: False
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:13:56.917 [DEBUG] [Thread-167263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:13:56.918 [DEBUG] [Thread-167263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:13:56.918 [DEBUG] [Thread-167263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:13:56.918 [DEBUG] [Thread-167263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:13:56.918 [DEBUG] [Thread-167263] [transport.py] [_log()] Compression: none
2026-04-11T09:13:56.918 [DEBUG] [Thread-167263] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:13:56.979 [DEBUG] [Thread-167263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:13:56.979 [DEBUG] [Thread-167263] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:13:56.980 [DEBUG] [Thread-167263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:13:56.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:13:56.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:13:57.038 [DEBUG] [Thread-167263] [transport.py] [_log()] userauth is OK
2026-04-11T09:13:57.038 [DEBUG] [Thread-167263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:13:57.039 [DEBUG] [Thread-167263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:13:57.039 [DEBUG] [Thread-167263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:13:57.039 [DEBUG] [Thread-167263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:13:57.059 [INFO] [Thread-167263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:13:57.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:13:57.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:13:57.889 [DEBUG] [Thread-167263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:13:57.889 [DEBUG] [Thread-167263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:13:57.940 [DEBUG] [Thread-167263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:13:57.940 [DEBUG] [Thread-167263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:13:57.953 [DEBUG] [Thread-167263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:13:57.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:13:57.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:13:57.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:13:57.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:13:57.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:13:57.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:13:57.998 [DEBUG] [Thread-167263] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:13:59.048 [DEBUG] [Thread-167265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:14.090 [DEBUG] [Thread-167266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:26.005 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:26.006 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:28.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:14:28.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:14:28.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:14:29.133 [DEBUG] [Thread-167267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:29.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 14, 20), 0.147495, 99.3284, 0.0, 21.7195, 12.8534, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:14:29.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:14:20
2026-04-11T09:14:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:14:29.825 [DEBUG] [Thread-167268] [transport.py] [_log()] starting thread (client mode): 0xa7953a60
2026-04-11T09:14:29.825 [DEBUG] [Thread-167268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:14:29.846 [DEBUG] [Thread-167268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:14:29.846 [INFO] [Thread-167268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:14:29.849 [DEBUG] [Thread-167268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:14:29.849 [DEBUG] [Thread-167268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:14:29.849 [DEBUG] [Thread-167268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] client lang: <none>
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] server lang: <none>
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] kex follows: False
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] Compression: none
2026-04-11T09:14:29.850 [DEBUG] [Thread-167268] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:14:29.866 [DEBUG] [Thread-167268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:14:29.867 [DEBUG] [Thread-167268] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:14:29.867 [DEBUG] [Thread-167268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:14:29.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:14:29.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:14:29.869 [DEBUG] [Thread-167268] [transport.py] [_log()] userauth is OK
2026-04-11T09:14:29.870 [DEBUG] [Thread-167268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:14:29.870 [DEBUG] [Thread-167268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:14:29.870 [DEBUG] [Thread-167268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:14:29.870 [DEBUG] [Thread-167268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:14:29.888 [INFO] [Thread-167268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:14:29.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:14:30.633 [DEBUG] [Thread-167268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:14:30.633 [DEBUG] [Thread-167268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:14:30.634 [DEBUG] [Thread-167268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:14:30.674 [DEBUG] [Thread-167268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:14:30.674 [DEBUG] [Thread-167268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:14:30.677 [DEBUG] [Thread-167268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:14:30.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:14:30.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:14:30.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:14:30.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:14:30.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:14:30.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:14:30.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:14:30.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:14:30.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:14:30.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.301511 -999.00  +12.70  17.76     97  +12.30 1 3 1 3 1   887    0 0.45 0.43 ----- 16.2 17.8 122.6 25.9 13.7 -0.7 13.8 -0.4 13.7 -0.3 13.9 -0.7
2026-04-11T09:14:30.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:14:30.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:14:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.301511
2026-04-11T09:14:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:14:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:14:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:14:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:14:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:14:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:14:20', tmtdew=0.147495, humidity=99.3284, cloud=0.0, wind=21.7195, temperature=12.8534, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:14:10.550', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:14:30.704 [DEBUG] [Thread-167268] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:14:30.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:14:30.799 [DEBUG] [Thread-167271] [transport.py] [_log()] starting thread (client mode): 0xb0f6c5e0
2026-04-11T09:14:30.799 [DEBUG] [Thread-167271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:14:30.813 [DEBUG] [Thread-167271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:14:30.813 [INFO] [Thread-167271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:14:30.820 [DEBUG] [Thread-167271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:14:30.820 [DEBUG] [Thread-167271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] client lang: <none>
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] server lang: <none>
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] kex follows: False
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] Compression: none
2026-04-11T09:14:30.821 [DEBUG] [Thread-167271] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:14:30.882 [DEBUG] [Thread-167271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:14:30.883 [DEBUG] [Thread-167271] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:14:30.883 [DEBUG] [Thread-167271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:14:30.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:14:30.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:14:30.943 [DEBUG] [Thread-167271] [transport.py] [_log()] userauth is OK
2026-04-11T09:14:30.943 [DEBUG] [Thread-167271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:14:30.943 [DEBUG] [Thread-167271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:14:30.943 [DEBUG] [Thread-167271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:14:30.943 [DEBUG] [Thread-167271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:14:30.962 [INFO] [Thread-167271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:14:30.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:14:30.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:14:31.786 [DEBUG] [Thread-167271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:14:31.786 [DEBUG] [Thread-167271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:14:31.837 [DEBUG] [Thread-167271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:14:31.837 [DEBUG] [Thread-167271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:14:31.848 [DEBUG] [Thread-167271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:14:31.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:14:31.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-04-11T09:14:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:14:31.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:14:31.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:14:31.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:14:31.897 [DEBUG] [Thread-167271] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:14:44.168 [DEBUG] [Thread-167273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:55.779 [DEBUG] [Thread-167274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:14:59.231 [DEBUG] [Thread-167275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:15:01.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:15:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:15:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 14, 55), 0.147535, 99.3284, 0.0, 22.2494, 12.9031, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:15:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:14:55
2026-04-11T09:15:03.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:15:03.659 [DEBUG] [Thread-167276] [transport.py] [_log()] starting thread (client mode): 0xae5a5ae0
2026-04-11T09:15:03.659 [DEBUG] [Thread-167276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:15:03.678 [DEBUG] [Thread-167276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:15:03.679 [INFO] [Thread-167276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] client lang: <none>
2026-04-11T09:15:03.680 [DEBUG] [Thread-167276] [transport.py] [_log()] server lang: <none>
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] kex follows: False
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] Compression: none
2026-04-11T09:15:03.681 [DEBUG] [Thread-167276] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:15:03.689 [DEBUG] [Thread-167276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:15:03.689 [DEBUG] [Thread-167276] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:15:03.690 [DEBUG] [Thread-167276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:15:03.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:15:03.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:15:03.690 [DEBUG] [Thread-167276] [transport.py] [_log()] userauth is OK
2026-04-11T09:15:03.690 [DEBUG] [Thread-167276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:15:03.690 [DEBUG] [Thread-167276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:15:03.690 [DEBUG] [Thread-167276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:15:03.690 [DEBUG] [Thread-167276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:15:03.701 [INFO] [Thread-167276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:15:03.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:15:14.272 [DEBUG] [Thread-167278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:22.274 [DEBUG] [Thread-167276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:15:22.274 [DEBUG] [Thread-167276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:15:22.275 [DEBUG] [Thread-167276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:15:22.315 [DEBUG] [Thread-167276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:15:22.315 [DEBUG] [Thread-167276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:15:22.319 [DEBUG] [Thread-167276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:15:22.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:15:22.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:15:22.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:15:22.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:15:22.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:15:22.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:15:22.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:15:22.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:15:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:15:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.301511 -999.00  +12.70  17.76     97  +12.30 1 3 1 3 1   887    0 0.45 0.43 ----- 16.2 17.8 122.6 25.9 13.7 -0.7 13.8 -0.4 13.7 -0.3 13.9 -0.7
2026-04-11T09:15:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:15:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:15:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.301511
2026-04-11T09:15:22.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:15:22.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:15:22.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:15:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:15:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:15:22.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:14:55', tmtdew=0.147535, humidity=99.3284, cloud=0.0, wind=22.2494, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:14:10.550', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:15:22.491 [DEBUG] [Thread-167276] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:15:22.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:15:22.586 [DEBUG] [Thread-167280] [transport.py] [_log()] starting thread (client mode): 0xae5a5210
2026-04-11T09:15:22.586 [DEBUG] [Thread-167280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:15:22.601 [DEBUG] [Thread-167280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:15:22.601 [INFO] [Thread-167280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:15:22.608 [DEBUG] [Thread-167280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:15:22.608 [DEBUG] [Thread-167280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:15:22.608 [DEBUG] [Thread-167280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] client lang: <none>
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] server lang: <none>
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] kex follows: False
2026-04-11T09:15:22.609 [DEBUG] [Thread-167280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:15:22.610 [DEBUG] [Thread-167280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:15:22.610 [DEBUG] [Thread-167280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:15:22.610 [DEBUG] [Thread-167280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:15:22.610 [DEBUG] [Thread-167280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:15:22.610 [DEBUG] [Thread-167280] [transport.py] [_log()] Compression: none
2026-04-11T09:15:22.610 [DEBUG] [Thread-167280] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:15:22.666 [DEBUG] [Thread-167280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:15:22.666 [DEBUG] [Thread-167280] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:15:22.667 [DEBUG] [Thread-167280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:15:22.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:15:22.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:15:22.722 [DEBUG] [Thread-167280] [transport.py] [_log()] userauth is OK
2026-04-11T09:15:22.722 [DEBUG] [Thread-167280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:15:22.722 [DEBUG] [Thread-167280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:15:22.722 [DEBUG] [Thread-167280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:15:22.723 [DEBUG] [Thread-167280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:15:22.742 [INFO] [Thread-167280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:15:22.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:15:22.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:15:23.571 [DEBUG] [Thread-167280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:15:23.571 [DEBUG] [Thread-167280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:15:23.619 [DEBUG] [Thread-167280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:15:23.619 [DEBUG] [Thread-167280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:15:23.629 [DEBUG] [Thread-167280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:15:23.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:15:23.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:15: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') -> 00000000
2026-04-11T09:15:23.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:15:23.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:15:23.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:15:23.666 [DEBUG] [Thread-167280] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:15:26.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:26.150 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:29.309 [DEBUG] [Thread-167282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:44.372 [DEBUG] [Thread-167283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:53.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:15:53.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:15:53.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-04-11T09:15:54.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 15, 31), 0.14239, 99.3616, 0.0, 21.5791, 12.9031, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:15:54.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:15:31
2026-04-11T09:15:55.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:15:55.445 [DEBUG] [Thread-167284] [transport.py] [_log()] starting thread (client mode): 0xa7951f30
2026-04-11T09:15:55.445 [DEBUG] [Thread-167284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:15:55.467 [DEBUG] [Thread-167284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:15:55.467 [INFO] [Thread-167284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:15:55.471 [DEBUG] [Thread-167284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] client lang: <none>
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] server lang: <none>
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] kex follows: False
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] Compression: none
2026-04-11T09:15:55.472 [DEBUG] [Thread-167284] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:15:55.493 [DEBUG] [Thread-167284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:15:55.494 [DEBUG] [Thread-167284] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:15:55.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:15:55.495 [DEBUG] [Thread-167284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:15:55.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:15:55.497 [DEBUG] [Thread-167284] [transport.py] [_log()] userauth is OK
2026-04-11T09:15:55.497 [DEBUG] [Thread-167284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:15:55.498 [DEBUG] [Thread-167284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:15:55.498 [DEBUG] [Thread-167284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:15:55.498 [DEBUG] [Thread-167284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:15:55.531 [INFO] [Thread-167284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:15:55.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:15:55.830 [DEBUG] [Thread-167286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:15:56.337 [DEBUG] [Thread-167284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:15:56.338 [DEBUG] [Thread-167284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:15:56.338 [DEBUG] [Thread-167284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:15:56.379 [DEBUG] [Thread-167284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:15:56.379 [DEBUG] [Thread-167284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:15:56.381 [DEBUG] [Thread-167284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:15:56.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:15:56.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:15:56.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:15:56.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:15:56.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:15:56.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:15:56.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:15:56.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:15:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:15:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.301858 -999.00  +12.70  17.44     97  +12.30 1 3 1 3 1   887    0 0.45 0.11 ----- 15.6 17.4 111.4 22.8 13.7 -0.9 13.8 -0.3 13.7 -0.3 13.9 -0.7
2026-04-11T09:15:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:15:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:15:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.301858
2026-04-11T09:15:56.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:15:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:15:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:15:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:15:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:15:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:15:31', tmtdew=0.14239, humidity=99.3616, cloud=0.0, wind=21.5791, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:14:40.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:15:56.406 [DEBUG] [Thread-167284] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:15:56.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:15:56.500 [DEBUG] [Thread-167288] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb30
2026-04-11T09:15:56.501 [DEBUG] [Thread-167288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:15:56.515 [DEBUG] [Thread-167288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:15:56.515 [INFO] [Thread-167288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:15:56.523 [DEBUG] [Thread-167288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:15:56.523 [DEBUG] [Thread-167288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] client lang: <none>
2026-04-11T09:15:56.524 [DEBUG] [Thread-167288] [transport.py] [_log()] server lang: <none>
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] kex follows: False
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:15:56.525 [DEBUG] [Thread-167288] [transport.py] [_log()] Compression: none
2026-04-11T09:15:56.526 [DEBUG] [Thread-167288] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:15:56.582 [DEBUG] [Thread-167288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:15:56.582 [DEBUG] [Thread-167288] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:15:56.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:15:56.583 [DEBUG] [Thread-167288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:15:56.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:15:56.640 [DEBUG] [Thread-167288] [transport.py] [_log()] userauth is OK
2026-04-11T09:15:56.640 [DEBUG] [Thread-167288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:15:56.640 [DEBUG] [Thread-167288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:15:56.641 [DEBUG] [Thread-167288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:15:56.641 [DEBUG] [Thread-167288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:15:56.660 [INFO] [Thread-167288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:15:56.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:15:56.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:15:57.471 [DEBUG] [Thread-167288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:15:57.471 [DEBUG] [Thread-167288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:15:57.519 [DEBUG] [Thread-167288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:15:57.519 [DEBUG] [Thread-167288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:15:57.529 [DEBUG] [Thread-167288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:15:57.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:15: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')
2026-04-11T09:15:57.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-04-11T09:15:57.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:15:57.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:15:57.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:15:57.566 [DEBUG] [Thread-167288] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:15:59.408 [DEBUG] [Thread-167290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:14.461 [DEBUG] [Thread-167291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:26.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:26.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:27.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:16:27.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:16:27.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-04-11T09:16:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 16, 6), 0.1424, 99.3616, 0.0, 20.803, 12.9197, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:16:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:16:06
2026-04-11T09:16:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:16:29.342 [DEBUG] [Thread-167292] [transport.py] [_log()] starting thread (client mode): 0xae52ee90
2026-04-11T09:16:29.342 [DEBUG] [Thread-167292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:16:29.362 [DEBUG] [Thread-167292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:16:29.362 [INFO] [Thread-167292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:16:29.364 [DEBUG] [Thread-167292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] client lang: <none>
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] server lang: <none>
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] kex follows: False
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] Compression: none
2026-04-11T09:16:29.365 [DEBUG] [Thread-167292] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:16:29.381 [DEBUG] [Thread-167292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:16:29.381 [DEBUG] [Thread-167292] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:16:29.382 [DEBUG] [Thread-167292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:16:29.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:16:29.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:16:29.384 [DEBUG] [Thread-167292] [transport.py] [_log()] userauth is OK
2026-04-11T09:16:29.384 [DEBUG] [Thread-167292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:16:29.384 [DEBUG] [Thread-167292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:16:29.384 [DEBUG] [Thread-167292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:16:29.384 [DEBUG] [Thread-167292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:16:29.408 [INFO] [Thread-167292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:16:29.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:16:29.499 [DEBUG] [Thread-167294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:30.209 [DEBUG] [Thread-167292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:16:30.209 [DEBUG] [Thread-167292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:16:30.210 [DEBUG] [Thread-167292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:16:30.250 [DEBUG] [Thread-167292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:16:30.250 [DEBUG] [Thread-167292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:16:30.254 [DEBUG] [Thread-167292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:16:30.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:16:30.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:16:30.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:16:30.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:16:30.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:16:30.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:16:30.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:16:30.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:16:30.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:16:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.302552 -999.00  +12.70  13.89     97  +12.30 1 3 1 3 1   887    0 0.44 0.29 ----- 14.2 13.9 115.1 22.0 13.7 -0.8 13.8 -0.3 13.7 -0.3 14.0 -0.7
2026-04-11T09:16:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:16:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:16:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.302552
2026-04-11T09:16:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:16:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:16:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:16:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:16:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:16:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:16:06', tmtdew=0.1424, humidity=99.3616, cloud=0.0, wind=20.803, temperature=12.9197, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:15:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:16:30.283 [DEBUG] [Thread-167292] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:16:30.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:16:30.375 [DEBUG] [Thread-167296] [transport.py] [_log()] starting thread (client mode): 0xb0f6c4c0
2026-04-11T09:16:30.375 [DEBUG] [Thread-167296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:16:30.390 [DEBUG] [Thread-167296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:16:30.391 [INFO] [Thread-167296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:16:30.398 [DEBUG] [Thread-167296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:16:30.398 [DEBUG] [Thread-167296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:16:30.398 [DEBUG] [Thread-167296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] client lang: <none>
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] server lang: <none>
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] kex follows: False
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] Compression: none
2026-04-11T09:16:30.399 [DEBUG] [Thread-167296] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:16:30.457 [DEBUG] [Thread-167296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:16:30.457 [DEBUG] [Thread-167296] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:16:30.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:16:30.459 [DEBUG] [Thread-167296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:16:30.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:16:30.513 [DEBUG] [Thread-167296] [transport.py] [_log()] userauth is OK
2026-04-11T09:16:30.513 [DEBUG] [Thread-167296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:16:30.513 [DEBUG] [Thread-167296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:16:30.513 [DEBUG] [Thread-167296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:16:30.513 [DEBUG] [Thread-167296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:16:30.532 [INFO] [Thread-167296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:16:30.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:16:30.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:16:31.363 [DEBUG] [Thread-167296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:16:31.363 [DEBUG] [Thread-167296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:16:31.411 [DEBUG] [Thread-167296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:16:31.411 [DEBUG] [Thread-167296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:16:31.420 [DEBUG] [Thread-167296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:16:31.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:16:31.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:16:31.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-04-11T09:16:31.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:16:31.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:16:31.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:16:31.457 [DEBUG] [Thread-167296] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:16:44.531 [DEBUG] [Thread-167298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:55.883 [DEBUG] [Thread-167299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:16:59.582 [DEBUG] [Thread-167300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:17:01.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:17:01.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-04-11T09:17:02.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 16, 42), 0.17966, 98.7564, 0.0, 22.0889, 13.3394, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:17:02.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:16:42
2026-04-11T09:17:03.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:17:03.283 [DEBUG] [Thread-167301] [transport.py] [_log()] starting thread (client mode): 0xb0fb54b0
2026-04-11T09:17:03.283 [DEBUG] [Thread-167301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:17:03.303 [DEBUG] [Thread-167301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:17:03.304 [INFO] [Thread-167301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:17:03.307 [DEBUG] [Thread-167301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:17:03.307 [DEBUG] [Thread-167301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:17:03.307 [DEBUG] [Thread-167301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:17:03.307 [DEBUG] [Thread-167301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:03.307 [DEBUG] [Thread-167301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:03.307 [DEBUG] [Thread-167301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] client lang: <none>
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] server lang: <none>
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] kex follows: False
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:17:03.308 [DEBUG] [Thread-167301] [transport.py] [_log()] Compression: none
2026-04-11T09:17:03.309 [DEBUG] [Thread-167301] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:17:03.328 [DEBUG] [Thread-167301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:17:03.329 [DEBUG] [Thread-167301] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:17:03.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:17:03.330 [DEBUG] [Thread-167301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:17:03.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:17:03.332 [DEBUG] [Thread-167301] [transport.py] [_log()] userauth is OK
2026-04-11T09:17:03.332 [DEBUG] [Thread-167301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:17:03.332 [DEBUG] [Thread-167301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:17:03.333 [DEBUG] [Thread-167301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:17:03.333 [DEBUG] [Thread-167301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:17:03.356 [INFO] [Thread-167301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:17:03.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:17:04.141 [DEBUG] [Thread-167301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:17:04.141 [DEBUG] [Thread-167301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:17:04.142 [DEBUG] [Thread-167301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:17:04.182 [DEBUG] [Thread-167301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:17:04.183 [DEBUG] [Thread-167301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:17:04.186 [DEBUG] [Thread-167301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:17:04.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:17:04.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:17:04.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:17:04.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:17:04.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:17:04.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:17:04.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:17:04.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:17:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:17:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.302899 -999.00  +12.70  16.88     97  +12.30 1 3 1 3 1   887    0 0.43 -0.05 ----- 16.1 16.9 128.8 28.2 13.7 -0.6 13.8 -0.3 13.7 -0.4 13.9 -0.7
2026-04-11T09:17:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:17:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:17:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.302899
2026-04-11T09:17:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:17:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:17:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:17:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:17:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:17:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:16:42', tmtdew=0.17966, humidity=98.7564, cloud=0.0, wind=22.0889, temperature=13.3394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:16:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:17:04.214 [DEBUG] [Thread-167301] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:17:04.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:17:04.310 [DEBUG] [Thread-167304] [transport.py] [_log()] starting thread (client mode): 0xb0fcdc00
2026-04-11T09:17:04.310 [DEBUG] [Thread-167304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:17:04.324 [DEBUG] [Thread-167304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:17:04.325 [INFO] [Thread-167304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:17:04.332 [DEBUG] [Thread-167304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] client lang: <none>
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] server lang: <none>
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] kex follows: False
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] Compression: none
2026-04-11T09:17:04.333 [DEBUG] [Thread-167304] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:17:04.393 [DEBUG] [Thread-167304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:17:04.393 [DEBUG] [Thread-167304] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:17:04.394 [DEBUG] [Thread-167304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:17:04.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:17:04.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:17:04.452 [DEBUG] [Thread-167304] [transport.py] [_log()] userauth is OK
2026-04-11T09:17:04.452 [DEBUG] [Thread-167304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:17:04.453 [DEBUG] [Thread-167304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:17:04.453 [DEBUG] [Thread-167304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:17:04.453 [DEBUG] [Thread-167304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:17:04.472 [INFO] [Thread-167304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:17:04.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:17:04.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:17:05.335 [DEBUG] [Thread-167304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:17:05.336 [DEBUG] [Thread-167304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:17:05.384 [DEBUG] [Thread-167304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:17:05.384 [DEBUG] [Thread-167304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:17:05.393 [DEBUG] [Thread-167304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:17:05.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:17:05.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-04-11T09:17:05.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-04-11T09:17:05.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:17:05.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:17:05.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:17:05.431 [DEBUG] [Thread-167304] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:17:14.620 [DEBUG] [Thread-167306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:26.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:26.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:29.674 [DEBUG] [Thread-167307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:35.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:17:35.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:17:35.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:17:36.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 17, 17), 0.15008, 99.3119, 0.0, 22.1789, 12.87, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:17:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:17:17
2026-04-11T09:17:37.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:17:37.319 [DEBUG] [Thread-167308] [transport.py] [_log()] starting thread (client mode): 0xae5a4df0
2026-04-11T09:17:37.320 [DEBUG] [Thread-167308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:17:37.339 [DEBUG] [Thread-167308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:17:37.340 [INFO] [Thread-167308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:17:37.342 [DEBUG] [Thread-167308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] client lang: <none>
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] server lang: <none>
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] kex follows: False
2026-04-11T09:17:37.343 [DEBUG] [Thread-167308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:17:37.344 [DEBUG] [Thread-167308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:17:37.344 [DEBUG] [Thread-167308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:17:37.344 [DEBUG] [Thread-167308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:17:37.344 [DEBUG] [Thread-167308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:17:37.344 [DEBUG] [Thread-167308] [transport.py] [_log()] Compression: none
2026-04-11T09:17:37.344 [DEBUG] [Thread-167308] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:17:37.364 [DEBUG] [Thread-167308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:17:37.365 [DEBUG] [Thread-167308] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:17:37.366 [DEBUG] [Thread-167308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:17:37.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:17:37.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:17:37.409 [DEBUG] [Thread-167308] [transport.py] [_log()] userauth is OK
2026-04-11T09:17:37.409 [DEBUG] [Thread-167308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:17:37.409 [DEBUG] [Thread-167308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:17:37.409 [DEBUG] [Thread-167308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:17:37.410 [DEBUG] [Thread-167308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:17:37.443 [INFO] [Thread-167308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:17:37.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:17:38.247 [DEBUG] [Thread-167308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:17:38.247 [DEBUG] [Thread-167308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:17:38.247 [DEBUG] [Thread-167308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:17:38.288 [DEBUG] [Thread-167308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:17:38.288 [DEBUG] [Thread-167308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:17:38.291 [DEBUG] [Thread-167308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:17:38.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:17:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:17:38.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:17:38.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:17:38.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:17:38.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:17:38.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:17:38.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:17:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:17:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.303247 -999.00  +12.70  19.52     97  +12.30 1 3 1 3 1   887    0 0.43 0.02 ----- 19.3 19.5 108.9 25.5 13.7 -0.9 13.8 -0.3 13.7 -0.5 13.9 -0.5
2026-04-11T09:17:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:17:38.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:17:38.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.303247
2026-04-11T09:17:38.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:17:38.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:17:38.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:17:38.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:17:38.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:17:38.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:17:17', tmtdew=0.15008, humidity=99.3119, cloud=0.0, wind=22.1789, temperature=12.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:16:40.541', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:17:38.312 [DEBUG] [Thread-167308] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:17:38.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:17:38.407 [DEBUG] [Thread-167311] [transport.py] [_log()] starting thread (client mode): 0xb0fb7160
2026-04-11T09:17:38.407 [DEBUG] [Thread-167311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:17:38.422 [DEBUG] [Thread-167311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:17:38.423 [INFO] [Thread-167311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] client lang: <none>
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] server lang: <none>
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] kex follows: False
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:17:38.431 [DEBUG] [Thread-167311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:17:38.432 [DEBUG] [Thread-167311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:17:38.432 [DEBUG] [Thread-167311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:17:38.432 [DEBUG] [Thread-167311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:17:38.432 [DEBUG] [Thread-167311] [transport.py] [_log()] Compression: none
2026-04-11T09:17:38.432 [DEBUG] [Thread-167311] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:17:38.487 [DEBUG] [Thread-167311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:17:38.488 [DEBUG] [Thread-167311] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:17:38.489 [DEBUG] [Thread-167311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:17:38.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:17:38.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:17:38.543 [DEBUG] [Thread-167311] [transport.py] [_log()] userauth is OK
2026-04-11T09:17:38.544 [DEBUG] [Thread-167311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:17:38.544 [DEBUG] [Thread-167311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:17:38.544 [DEBUG] [Thread-167311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:17:38.544 [DEBUG] [Thread-167311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:17:38.562 [INFO] [Thread-167311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:17:38.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:17:38.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:17:39.425 [DEBUG] [Thread-167311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:17:39.425 [DEBUG] [Thread-167311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:17:39.473 [DEBUG] [Thread-167311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:17:39.473 [DEBUG] [Thread-167311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:17:39.483 [DEBUG] [Thread-167311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:17:39.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:17:39.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-04-11T09:17:39.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:17:39.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:17:39.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:17:39.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:17:39.520 [DEBUG] [Thread-167311] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:17:44.715 [DEBUG] [Thread-167313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:55.915 [DEBUG] [Thread-167314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:17:59.771 [DEBUG] [Thread-167315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:09.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:18:09.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:18:09.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-04-11T09:18:10.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 17, 53), 0.19504, 98.6569, 0.0, 25.5463, 13.2731, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:18:10.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:17:53
2026-04-11T09:18:11.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:18:11.274 [DEBUG] [Thread-167316] [transport.py] [_log()] starting thread (client mode): 0xae516080
2026-04-11T09:18:11.274 [DEBUG] [Thread-167316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:18:11.290 [DEBUG] [Thread-167316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:18:11.290 [INFO] [Thread-167316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:18:11.293 [DEBUG] [Thread-167316] [transport.py] [_log()] client lang: <none>
2026-04-11T09:18:11.294 [DEBUG] [Thread-167316] [transport.py] [_log()] server lang: <none>
2026-04-11T09:18:11.294 [DEBUG] [Thread-167316] [transport.py] [_log()] kex follows: False
2026-04-11T09:18:11.294 [DEBUG] [Thread-167316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:18:11.294 [DEBUG] [Thread-167316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:18:11.303 [DEBUG] [Thread-167316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:18:11.303 [DEBUG] [Thread-167316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:18:11.303 [DEBUG] [Thread-167316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:18:11.304 [DEBUG] [Thread-167316] [transport.py] [_log()] Compression: none
2026-04-11T09:18:11.304 [DEBUG] [Thread-167316] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:18:11.322 [DEBUG] [Thread-167316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:18:11.322 [DEBUG] [Thread-167316] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:18:11.323 [DEBUG] [Thread-167316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:18:11.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:18:11.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:18:11.325 [DEBUG] [Thread-167316] [transport.py] [_log()] userauth is OK
2026-04-11T09:18:11.325 [DEBUG] [Thread-167316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:18:11.325 [DEBUG] [Thread-167316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:18:11.325 [DEBUG] [Thread-167316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:18:11.325 [DEBUG] [Thread-167316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:18:11.344 [INFO] [Thread-167316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:18:11.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:18:12.150 [DEBUG] [Thread-167316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:18:12.151 [DEBUG] [Thread-167316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:18:12.151 [DEBUG] [Thread-167316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:18:12.191 [DEBUG] [Thread-167316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:18:12.192 [DEBUG] [Thread-167316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:18:12.195 [DEBUG] [Thread-167316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:18:12.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:18:12.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:18:12.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:18:12.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:18:12.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:18:12.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:18:12.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:18:12.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:18:12.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:18:12.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.303594 -999.00  +12.70  10.45     97  +12.30 1 3 1 3 1   887    0 0.43 -0.07 ----- 7.3 10.4 93.5 20.9 13.7 -0.5 13.8 -0.3 13.7 -0.4 13.9 -0.6
2026-04-11T09:18:12.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:18:12.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:18:12.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.303594
2026-04-11T09:18:12.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:18:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:18:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:18:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:18:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:18:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:17:53', tmtdew=0.19504, humidity=98.6569, cloud=0.0, wind=25.5463, temperature=13.2731, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:17:10.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:18:12.222 [DEBUG] [Thread-167316] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:18: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-04-11T09:18:12.316 [DEBUG] [Thread-167319] [transport.py] [_log()] starting thread (client mode): 0xb0f6c4c0
2026-04-11T09:18:12.316 [DEBUG] [Thread-167319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:18:12.331 [DEBUG] [Thread-167319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:18:12.332 [INFO] [Thread-167319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:18:12.339 [DEBUG] [Thread-167319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] client lang: <none>
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] server lang: <none>
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] kex follows: False
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:18:12.340 [DEBUG] [Thread-167319] [transport.py] [_log()] Compression: none
2026-04-11T09:18:12.341 [DEBUG] [Thread-167319] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:18:12.399 [DEBUG] [Thread-167319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:18:12.400 [DEBUG] [Thread-167319] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:18:12.401 [DEBUG] [Thread-167319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:18:12.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:18:12.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:18:12.460 [DEBUG] [Thread-167319] [transport.py] [_log()] userauth is OK
2026-04-11T09:18:12.460 [DEBUG] [Thread-167319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:18:12.461 [DEBUG] [Thread-167319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:18:12.461 [DEBUG] [Thread-167319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:18:12.461 [DEBUG] [Thread-167319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:18:12.486 [INFO] [Thread-167319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:18:12.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:18:12.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:18:13.315 [DEBUG] [Thread-167319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:18:13.315 [DEBUG] [Thread-167319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:18:13.363 [DEBUG] [Thread-167319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:18:13.363 [DEBUG] [Thread-167319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:18:13.372 [DEBUG] [Thread-167319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:18:13.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:18:13.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-04-11T09:18:13.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:18:13.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:18:13.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:18:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:18:13.406 [DEBUG] [Thread-167319] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:18:14.807 [DEBUG] [Thread-167321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:26.575 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:26.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:29.861 [DEBUG] [Thread-167322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:18:43.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:18:43.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-04-11T09:18:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 18, 28), 0.097545, 99.3285, 0.0, 20.8375, 12.8697, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:18:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:18:28
2026-04-11T09:18:44.897 [DEBUG] [Thread-167323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:18:45.206 [DEBUG] [Thread-167324] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-11T09:18:45.206 [DEBUG] [Thread-167324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:18:45.230 [DEBUG] [Thread-167324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:18:45.230 [INFO] [Thread-167324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] client lang: <none>
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] server lang: <none>
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] kex follows: False
2026-04-11T09:18:45.232 [DEBUG] [Thread-167324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:18:45.233 [DEBUG] [Thread-167324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:18:45.233 [DEBUG] [Thread-167324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:18:45.233 [DEBUG] [Thread-167324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:18:45.233 [DEBUG] [Thread-167324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:18:45.233 [DEBUG] [Thread-167324] [transport.py] [_log()] Compression: none
2026-04-11T09:18:45.233 [DEBUG] [Thread-167324] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:18:45.250 [DEBUG] [Thread-167324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:18:45.250 [DEBUG] [Thread-167324] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:18:45.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:18:45.251 [DEBUG] [Thread-167324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:18:45.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:18:45.254 [DEBUG] [Thread-167324] [transport.py] [_log()] userauth is OK
2026-04-11T09:18:45.254 [DEBUG] [Thread-167324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:18:45.255 [DEBUG] [Thread-167324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:18:45.255 [DEBUG] [Thread-167324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:18:45.255 [DEBUG] [Thread-167324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:18:45.277 [INFO] [Thread-167324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:18:45.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:18:46.046 [DEBUG] [Thread-167324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:18:46.046 [DEBUG] [Thread-167324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:18:46.047 [DEBUG] [Thread-167324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:18:46.087 [DEBUG] [Thread-167324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:18:46.087 [DEBUG] [Thread-167324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:18:46.090 [DEBUG] [Thread-167324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:18:46.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:18:46.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:18:46.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:18:46.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:18:46.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:18:46.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:18:46.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:18:46.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:18:46.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:18:46.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.303941 -999.00  +12.80  13.46     97  +12.30 1 3 1 3 1   887    0 0.45 0.22 ----- 15.9 13.5 108.5 24.0 13.7 -0.7 13.8 -0.2 13.7 -0.2 13.9 -0.5
2026-04-11T09:18:46.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:18:46.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:18:46.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.303941
2026-04-11T09:18:46.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:18:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:18:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:18:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:18:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:18:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:18:28', tmtdew=0.097545, humidity=99.3285, cloud=0.0, wind=20.8375, temperature=12.8697, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:17:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:18:46.126 [DEBUG] [Thread-167324] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:18:46.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:18:46.220 [DEBUG] [Thread-167327] [transport.py] [_log()] starting thread (client mode): 0xa79b4d90
2026-04-11T09:18:46.220 [DEBUG] [Thread-167327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:18:46.235 [DEBUG] [Thread-167327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:18:46.235 [INFO] [Thread-167327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:46.246 [DEBUG] [Thread-167327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] client lang: <none>
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] server lang: <none>
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] kex follows: False
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] Compression: none
2026-04-11T09:18:46.247 [DEBUG] [Thread-167327] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:18:46.309 [DEBUG] [Thread-167327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:18:46.309 [DEBUG] [Thread-167327] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:18:46.310 [DEBUG] [Thread-167327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:18:46.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:18:46.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:18:46.367 [DEBUG] [Thread-167327] [transport.py] [_log()] userauth is OK
2026-04-11T09:18:46.368 [DEBUG] [Thread-167327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:18:46.368 [DEBUG] [Thread-167327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:18:46.368 [DEBUG] [Thread-167327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:18:46.368 [DEBUG] [Thread-167327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:18:46.388 [INFO] [Thread-167327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:18:46.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:18:46.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:18:47.211 [DEBUG] [Thread-167327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:18:47.211 [DEBUG] [Thread-167327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:18:47.263 [DEBUG] [Thread-167327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:18:47.263 [DEBUG] [Thread-167327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:18:47.272 [DEBUG] [Thread-167327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:18:47.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:18:47.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-04-11T09:18:47.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-04-11T09:18:47.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:18:47.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:18:47.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:18:47.310 [DEBUG] [Thread-167327] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:18:55.965 [DEBUG] [Thread-167329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:18:59.935 [DEBUG] [Thread-167330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:19:14.986 [DEBUG] [Thread-167331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:19:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:19:17.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:19:17.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-04-11T09:19:18.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 19, 3), 0.09753, 99.3285, 0.0, 19.9379, 12.8531, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:19:18.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:19:03
2026-04-11T09:19:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:19:19.084 [DEBUG] [Thread-167332] [transport.py] [_log()] starting thread (client mode): 0xa79b5420
2026-04-11T09:19:19.084 [DEBUG] [Thread-167332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:19:19.104 [DEBUG] [Thread-167332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:19:19.104 [INFO] [Thread-167332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] client lang: <none>
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] server lang: <none>
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] kex follows: False
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] Compression: none
2026-04-11T09:19:19.108 [DEBUG] [Thread-167332] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:19:19.126 [DEBUG] [Thread-167332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:19:19.126 [DEBUG] [Thread-167332] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:19:19.126 [DEBUG] [Thread-167332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:19:19.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:19:19.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:19:19.127 [DEBUG] [Thread-167332] [transport.py] [_log()] userauth is OK
2026-04-11T09:19:19.127 [DEBUG] [Thread-167332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:19:19.127 [DEBUG] [Thread-167332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:19:19.127 [DEBUG] [Thread-167332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:19:19.127 [DEBUG] [Thread-167332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:19:19.137 [INFO] [Thread-167332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:19:19.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:19:19.903 [DEBUG] [Thread-167332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:19:19.904 [DEBUG] [Thread-167332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:19:19.904 [DEBUG] [Thread-167332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:19:19.944 [DEBUG] [Thread-167332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:19:19.944 [DEBUG] [Thread-167332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:19:19.947 [DEBUG] [Thread-167332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:19:19.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:19:19.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:19:19.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:19:19.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:19:19.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:19:19.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:19:19.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:19:19.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:19:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:19:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.304636 -999.00  +12.70  21.51     97  +12.30 1 3 1 3 1   887    0 0.43 0.01 ----- 17.3 21.5 115.0 27.6 13.8 -0.5 13.8 -0.4 13.7 -0.5 13.9 -0.8
2026-04-11T09:19:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:19:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:19:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.304636
2026-04-11T09:19:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:19:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:19:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:19:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:19:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:19:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:19:03', tmtdew=0.09753, humidity=99.3285, cloud=0.0, wind=19.9379, temperature=12.8531, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:18:40.550', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:19:19.971 [DEBUG] [Thread-167332] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:19:20.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:19:20.065 [DEBUG] [Thread-167335] [transport.py] [_log()] starting thread (client mode): 0xae52f8e0
2026-04-11T09:19:20.065 [DEBUG] [Thread-167335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:19:20.080 [DEBUG] [Thread-167335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:19:20.080 [INFO] [Thread-167335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:19:20.087 [DEBUG] [Thread-167335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] client lang: <none>
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] server lang: <none>
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] kex follows: False
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:19:20.088 [DEBUG] [Thread-167335] [transport.py] [_log()] Compression: none
2026-04-11T09:19:20.089 [DEBUG] [Thread-167335] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:19:20.146 [DEBUG] [Thread-167335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:19:20.146 [DEBUG] [Thread-167335] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:19:20.147 [DEBUG] [Thread-167335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:19:20.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:19:20.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:19:20.203 [DEBUG] [Thread-167335] [transport.py] [_log()] userauth is OK
2026-04-11T09:19:20.203 [DEBUG] [Thread-167335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:19:20.203 [DEBUG] [Thread-167335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:19:20.203 [DEBUG] [Thread-167335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:19:20.203 [DEBUG] [Thread-167335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:19:20.223 [INFO] [Thread-167335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:19:20.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:19:20.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:19:21.028 [DEBUG] [Thread-167335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:19:21.028 [DEBUG] [Thread-167335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:19:21.076 [DEBUG] [Thread-167335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:19:21.076 [DEBUG] [Thread-167335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:19:21.086 [DEBUG] [Thread-167335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:19:21.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:19: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')
2026-04-11T09:19:21.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-04-11T09:19:21.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:19:21.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:19:21.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:19:21.125 [DEBUG] [Thread-167335] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:19:26.716 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:19:26.718 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:19:30.026 [DEBUG] [Thread-167337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:19:45.080 [DEBUG] [Thread-167338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:19:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:19:51.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:19:51.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-04-11T09:19:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 19, 39), 0.18477, 98.7232, 0.0, 27.9454, 13.3062, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:19:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:19:39
2026-04-11T09:19:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:19:52.998 [DEBUG] [Thread-167339] [transport.py] [_log()] starting thread (client mode): 0xa79b50c0
2026-04-11T09:19:52.998 [DEBUG] [Thread-167339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:19:53.018 [DEBUG] [Thread-167339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:19:53.019 [INFO] [Thread-167339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:19:53.022 [DEBUG] [Thread-167339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] client lang: <none>
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] server lang: <none>
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] kex follows: False
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] Compression: none
2026-04-11T09:19:53.023 [DEBUG] [Thread-167339] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:19:53.043 [DEBUG] [Thread-167339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:19:53.044 [DEBUG] [Thread-167339] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:19:53.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:19:53.045 [DEBUG] [Thread-167339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:19:53.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:19:53.047 [DEBUG] [Thread-167339] [transport.py] [_log()] userauth is OK
2026-04-11T09:19:53.047 [DEBUG] [Thread-167339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:19:53.047 [DEBUG] [Thread-167339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:19:53.047 [DEBUG] [Thread-167339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:19:53.047 [DEBUG] [Thread-167339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:19:53.073 [INFO] [Thread-167339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:19:53.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:19:53.870 [DEBUG] [Thread-167339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:19:53.870 [DEBUG] [Thread-167339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:19:53.870 [DEBUG] [Thread-167339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:19:53.911 [DEBUG] [Thread-167339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:19:53.911 [DEBUG] [Thread-167339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:19:53.914 [DEBUG] [Thread-167339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:19:53.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:19:53.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:19:53.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:19:53.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:19:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:19:53.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:19:53.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:19:53.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:19:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:19:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.304983 -999.00  +12.70  16.21     97  +12.30 1 3 1 3 1   887    0 0.43 -0.47 ----- 13.4 16.2 105.8 23.3 13.7 -0.5 13.8 -0.3 13.7 -0.5 13.9 -0.6
2026-04-11T09:19:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:19:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:19:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.304983
2026-04-11T09:19:53.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:19:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:19:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:19:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:19:53.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:19:53.945 [DEBUG] [Thread-167339] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:19:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:19:39', tmtdew=0.18477, humidity=98.7232, cloud=0.0, wind=27.9454, temperature=13.3062, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:19:10.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:19:54.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:19:54.040 [DEBUG] [Thread-167342] [transport.py] [_log()] starting thread (client mode): 0xa79b6170
2026-04-11T09:19:54.040 [DEBUG] [Thread-167342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:19:54.056 [DEBUG] [Thread-167342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:19:54.056 [INFO] [Thread-167342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:19:54.063 [DEBUG] [Thread-167342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:19:54.064 [DEBUG] [Thread-167342] [transport.py] [_log()] client lang: <none>
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] server lang: <none>
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] kex follows: False
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:19:54.065 [DEBUG] [Thread-167342] [transport.py] [_log()] Compression: none
2026-04-11T09:19:54.066 [DEBUG] [Thread-167342] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:19:54.125 [DEBUG] [Thread-167342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:19:54.126 [DEBUG] [Thread-167342] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:19:54.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:19:54.127 [DEBUG] [Thread-167342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:19:54.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:19:54.184 [DEBUG] [Thread-167342] [transport.py] [_log()] userauth is OK
2026-04-11T09:19:54.184 [DEBUG] [Thread-167342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:19:54.184 [DEBUG] [Thread-167342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:19:54.184 [DEBUG] [Thread-167342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:19:54.184 [DEBUG] [Thread-167342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:19:54.203 [INFO] [Thread-167342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:19:54.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:19:54.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:19:55.096 [DEBUG] [Thread-167342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:19:55.097 [DEBUG] [Thread-167342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:19:55.144 [DEBUG] [Thread-167342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:19:55.144 [DEBUG] [Thread-167342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:19:55.153 [DEBUG] [Thread-167342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:19:55.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:19:55.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-04-11T09:19: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') -> 00000000
2026-04-11T09:19:55.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:19:55.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:19:55.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:19:55.198 [DEBUG] [Thread-167342] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:19:56.014 [DEBUG] [Thread-167344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:00.119 [DEBUG] [Thread-167345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:15.179 [DEBUG] [Thread-167346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:25.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:20:25.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:20:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:20:26.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 20, 14), 0.13987, 99.3778, 0.0, 23.7496, 12.8863, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:20:26.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:20:14
2026-04-11T09:20:26.857 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:26.858 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:20:27.049 [DEBUG] [Thread-167347] [transport.py] [_log()] starting thread (client mode): 0xb0f6f670
2026-04-11T09:20:27.049 [DEBUG] [Thread-167347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:20:27.067 [DEBUG] [Thread-167347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:20:27.067 [INFO] [Thread-167347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:20:27.070 [DEBUG] [Thread-167347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:20:27.070 [DEBUG] [Thread-167347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:20:27.070 [DEBUG] [Thread-167347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:20:27.070 [DEBUG] [Thread-167347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] client lang: <none>
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] server lang: <none>
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] kex follows: False
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] Compression: none
2026-04-11T09:20:27.071 [DEBUG] [Thread-167347] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:20:27.090 [DEBUG] [Thread-167347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:20:27.090 [DEBUG] [Thread-167347] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:20:27.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:20:27.092 [DEBUG] [Thread-167347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:20:27.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:20:27.094 [DEBUG] [Thread-167347] [transport.py] [_log()] userauth is OK
2026-04-11T09:20:27.095 [DEBUG] [Thread-167347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:20:27.095 [DEBUG] [Thread-167347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:20:27.095 [DEBUG] [Thread-167347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:20:27.095 [DEBUG] [Thread-167347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:20:27.114 [INFO] [Thread-167347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:20:27.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:20:30.215 [DEBUG] [Thread-167349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:31.190 [DEBUG] [Thread-167347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:20:31.190 [DEBUG] [Thread-167347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:20:31.191 [DEBUG] [Thread-167347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:20:31.231 [DEBUG] [Thread-167347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:20:31.231 [DEBUG] [Thread-167347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:20:31.235 [DEBUG] [Thread-167347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:20:31.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:20:31.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:20:31.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:20:31.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:20:31.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:20:31.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:20:31.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:20:31.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:20:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:20:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.305677 -999.00  +12.80  13.89     97  +12.30 1 3 1 3 1   887    0 0.44 0.28 ----- 18.2 13.9 92.4 21.7 13.7 -0.4 13.8 -0.5 13.7 -0.4 14.0 -0.6
2026-04-11T09:20:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:20:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:20:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.305677
2026-04-11T09:20:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:20:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:20:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:20:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:20:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:20:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:20:14', tmtdew=0.13987, humidity=99.3778, cloud=0.0, wind=23.7496, temperature=12.8863, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:20:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:20:31.267 [DEBUG] [Thread-167347] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:20:31.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:20:31.356 [DEBUG] [Thread-167351] [transport.py] [_log()] starting thread (client mode): 0xa79b48e0
2026-04-11T09:20:31.356 [DEBUG] [Thread-167351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:20:31.371 [DEBUG] [Thread-167351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:20:31.371 [INFO] [Thread-167351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:20:31.378 [DEBUG] [Thread-167351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:20:31.378 [DEBUG] [Thread-167351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:20:31.378 [DEBUG] [Thread-167351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:20:31.378 [DEBUG] [Thread-167351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] client lang: <none>
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] server lang: <none>
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] kex follows: False
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] Compression: none
2026-04-11T09:20:31.379 [DEBUG] [Thread-167351] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:20:31.437 [DEBUG] [Thread-167351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:20:31.437 [DEBUG] [Thread-167351] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:20:31.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:20:31.439 [DEBUG] [Thread-167351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:20:31.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:20:31.492 [DEBUG] [Thread-167351] [transport.py] [_log()] userauth is OK
2026-04-11T09:20:31.492 [DEBUG] [Thread-167351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:20:31.492 [DEBUG] [Thread-167351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:20:31.492 [DEBUG] [Thread-167351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:20:31.492 [DEBUG] [Thread-167351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:20:31.507 [INFO] [Thread-167351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:20:31.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:20:31.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:20:32.393 [DEBUG] [Thread-167351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:20:32.393 [DEBUG] [Thread-167351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:20:32.441 [DEBUG] [Thread-167351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:20:32.441 [DEBUG] [Thread-167351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:20:32.449 [DEBUG] [Thread-167351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:20:32.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:20:32.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-04-11T09:20:32.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-04-11T09:20:32.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:20:32.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:20:32.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:20:32.486 [DEBUG] [Thread-167351] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:20:45.252 [DEBUG] [Thread-167353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:20:56.071 [DEBUG] [Thread-167354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:00.301 [DEBUG] [Thread-167355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:21:02.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:21:02.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-04-11T09:21:03.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 20, 50), 0.19, 98.6892, 0.0, 27.4514, 13.2394, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:21:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:20:50
2026-04-11T09:21:04.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:21:04.294 [DEBUG] [Thread-167356] [transport.py] [_log()] starting thread (client mode): 0xae515600
2026-04-11T09:21:04.294 [DEBUG] [Thread-167356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:21:04.315 [DEBUG] [Thread-167356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:21:04.315 [INFO] [Thread-167356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] client lang: <none>
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] server lang: <none>
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] kex follows: False
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:21:04.319 [DEBUG] [Thread-167356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:21:04.320 [DEBUG] [Thread-167356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:21:04.320 [DEBUG] [Thread-167356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:21:04.320 [DEBUG] [Thread-167356] [transport.py] [_log()] Compression: none
2026-04-11T09:21:04.320 [DEBUG] [Thread-167356] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:21:04.336 [DEBUG] [Thread-167356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:21:04.337 [DEBUG] [Thread-167356] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:21:04.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:21:04.338 [DEBUG] [Thread-167356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:21:04.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:21:04.340 [DEBUG] [Thread-167356] [transport.py] [_log()] userauth is OK
2026-04-11T09:21:04.341 [DEBUG] [Thread-167356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:21:04.341 [DEBUG] [Thread-167356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:21:04.341 [DEBUG] [Thread-167356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:21:04.341 [DEBUG] [Thread-167356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:21:04.379 [INFO] [Thread-167356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:21:04.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:21:05.185 [DEBUG] [Thread-167356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:21:05.186 [DEBUG] [Thread-167356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:21:05.186 [DEBUG] [Thread-167356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:21:05.226 [DEBUG] [Thread-167356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:21:05.226 [DEBUG] [Thread-167356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:21:05.228 [DEBUG] [Thread-167356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:21:05.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:21:05.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:21:05.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:21:05.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:21:05.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:21:05.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:21:05.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:21:05.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:21:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:21:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.305677 -999.00  +12.80  13.89     97  +12.30 1 3 1 3 1   887    0 0.44 0.28 ----- 18.2 13.9 92.4 21.7 13.7 -0.4 13.8 -0.5 13.7 -0.4 14.0 -0.6
2026-04-11T09:21:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:21:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:21:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.305677
2026-04-11T09:21:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:21:05.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:21:05.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:21:05.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:21:05.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:21:05.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:20:50', tmtdew=0.19, humidity=98.6892, cloud=0.0, wind=27.4514, temperature=13.2394, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:20:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:21:05.248 [DEBUG] [Thread-167356] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:21:05.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:21:05.341 [DEBUG] [Thread-167359] [transport.py] [_log()] starting thread (client mode): 0xae515e70
2026-04-11T09:21:05.341 [DEBUG] [Thread-167359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:21:05.357 [DEBUG] [Thread-167359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:21:05.357 [INFO] [Thread-167359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:21:05.364 [DEBUG] [Thread-167359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] client lang: <none>
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] server lang: <none>
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] kex follows: False
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] Compression: none
2026-04-11T09:21:05.365 [DEBUG] [Thread-167359] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:21:05.424 [DEBUG] [Thread-167359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:21:05.425 [DEBUG] [Thread-167359] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:21:05.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:21:05.426 [DEBUG] [Thread-167359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:21:05.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:21:05.480 [DEBUG] [Thread-167359] [transport.py] [_log()] userauth is OK
2026-04-11T09:21:05.481 [DEBUG] [Thread-167359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:21:05.481 [DEBUG] [Thread-167359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:21:05.481 [DEBUG] [Thread-167359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:21:05.481 [DEBUG] [Thread-167359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:21:05.501 [INFO] [Thread-167359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:21:05.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:21:05.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:21:06.352 [DEBUG] [Thread-167359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:21:06.353 [DEBUG] [Thread-167359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:21:06.400 [DEBUG] [Thread-167359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:21:06.400 [DEBUG] [Thread-167359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:21:06.413 [DEBUG] [Thread-167359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:21:06.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:21:06.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-04-11T09:21:06.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-04-11T09:21:06.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:21:06.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:21:06.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:21:06.457 [DEBUG] [Thread-167359] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:21:15.340 [DEBUG] [Thread-167361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:26.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:26.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:30.394 [DEBUG] [Thread-167362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:21:36.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:21:36.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:21:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 21, 25), 0.145025, 99.3447, 0.0, 21.6144, 12.9195, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:21:37.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:21:25
2026-04-11T09:21:38.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:21:38.307 [DEBUG] [Thread-167363] [transport.py] [_log()] starting thread (client mode): 0xae52f730
2026-04-11T09:21:38.307 [DEBUG] [Thread-167363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:21:38.329 [DEBUG] [Thread-167363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:21:38.329 [INFO] [Thread-167363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:21:38.330 [DEBUG] [Thread-167363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] client lang: <none>
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] server lang: <none>
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] kex follows: False
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:21:38.331 [DEBUG] [Thread-167363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:21:38.332 [DEBUG] [Thread-167363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:21:38.332 [DEBUG] [Thread-167363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:21:38.332 [DEBUG] [Thread-167363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:21:38.332 [DEBUG] [Thread-167363] [transport.py] [_log()] Compression: none
2026-04-11T09:21:38.332 [DEBUG] [Thread-167363] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:21:38.345 [DEBUG] [Thread-167363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:21:38.345 [DEBUG] [Thread-167363] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:21:38.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:21:38.346 [DEBUG] [Thread-167363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:21:38.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:21:38.348 [DEBUG] [Thread-167363] [transport.py] [_log()] userauth is OK
2026-04-11T09:21:38.349 [DEBUG] [Thread-167363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:21:38.349 [DEBUG] [Thread-167363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:21:38.349 [DEBUG] [Thread-167363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:21:38.349 [DEBUG] [Thread-167363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:21:38.367 [INFO] [Thread-167363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:21:38.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:21:39.120 [DEBUG] [Thread-167363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:21:39.120 [DEBUG] [Thread-167363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:21:39.120 [DEBUG] [Thread-167363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:21:39.161 [DEBUG] [Thread-167363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:21:39.161 [DEBUG] [Thread-167363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:21:39.164 [DEBUG] [Thread-167363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:21:39.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:21:39.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:21:39.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:21:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:21:39.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:21:39.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:21:39.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:21:39.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:21:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:21:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.306024 -999.00  +12.80  13.53     97  +12.30 1 3 1 3 1   887    0 0.44 -0.04 ----- 13.6 13.5 118.6 25.7 13.7 -0.9 13.8 -0.3 13.7 -0.4 13.9 -0.5
2026-04-11T09:21:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:21:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:21:39.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.306024
2026-04-11T09:21:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:21:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:21:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:21:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:21:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:21:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:21:25', tmtdew=0.145025, humidity=99.3447, cloud=0.0, wind=21.6144, temperature=12.9195, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:20:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:21:39.198 [DEBUG] [Thread-167363] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:21:39.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:21:39.289 [DEBUG] [Thread-167366] [transport.py] [_log()] starting thread (client mode): 0xae52d990
2026-04-11T09:21:39.289 [DEBUG] [Thread-167366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:21:39.303 [DEBUG] [Thread-167366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:21:39.304 [INFO] [Thread-167366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:21:39.312 [DEBUG] [Thread-167366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:21:39.312 [DEBUG] [Thread-167366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:21:39.312 [DEBUG] [Thread-167366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:21:39.312 [DEBUG] [Thread-167366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:39.312 [DEBUG] [Thread-167366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] client lang: <none>
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] server lang: <none>
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] kex follows: False
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:21:39.313 [DEBUG] [Thread-167366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:21:39.314 [DEBUG] [Thread-167366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:21:39.314 [DEBUG] [Thread-167366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:21:39.314 [DEBUG] [Thread-167366] [transport.py] [_log()] Compression: none
2026-04-11T09:21:39.314 [DEBUG] [Thread-167366] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:21:39.372 [DEBUG] [Thread-167366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:21:39.373 [DEBUG] [Thread-167366] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:21:39.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:21:39.374 [DEBUG] [Thread-167366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:21:39.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:21:39.428 [DEBUG] [Thread-167366] [transport.py] [_log()] userauth is OK
2026-04-11T09:21:39.428 [DEBUG] [Thread-167366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:21:39.428 [DEBUG] [Thread-167366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:21:39.428 [DEBUG] [Thread-167366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:21:39.428 [DEBUG] [Thread-167366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:21:39.447 [INFO] [Thread-167366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:21:39.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:21:39.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:21:40.280 [DEBUG] [Thread-167366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:21:40.280 [DEBUG] [Thread-167366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:21:40.328 [DEBUG] [Thread-167366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:21:40.328 [DEBUG] [Thread-167366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:21:40.338 [DEBUG] [Thread-167366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:21:40.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:21:40.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-04-11T09:21:40.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-04-11T09:21:40.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:21:40.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:21:40.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:21:40.375 [DEBUG] [Thread-167366] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:21:45.431 [DEBUG] [Thread-167368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:21:56.123 [DEBUG] [Thread-167369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:00.485 [DEBUG] [Thread-167370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:22:10.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:22:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:22:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 22, 1), 0.145035, 99.3447, 0.0, 18.2268, 12.9861, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:22:11.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:22:01
2026-04-11T09:22:12.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:22:12.210 [DEBUG] [Thread-167371] [transport.py] [_log()] starting thread (client mode): 0xae52f700
2026-04-11T09:22:12.210 [DEBUG] [Thread-167371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:22:12.230 [DEBUG] [Thread-167371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:22:12.231 [INFO] [Thread-167371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:22:12.233 [DEBUG] [Thread-167371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:22:12.233 [DEBUG] [Thread-167371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] client lang: <none>
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] server lang: <none>
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] kex follows: False
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] Compression: none
2026-04-11T09:22:12.234 [DEBUG] [Thread-167371] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:22:12.252 [DEBUG] [Thread-167371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:22:12.252 [DEBUG] [Thread-167371] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:22:12.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:22:12.253 [DEBUG] [Thread-167371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:22:12.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:22:12.255 [DEBUG] [Thread-167371] [transport.py] [_log()] userauth is OK
2026-04-11T09:22:12.256 [DEBUG] [Thread-167371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:22:12.256 [DEBUG] [Thread-167371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:22:12.256 [DEBUG] [Thread-167371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:22:12.256 [DEBUG] [Thread-167371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:22:12.280 [INFO] [Thread-167371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:22:12.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:22:13.043 [DEBUG] [Thread-167371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:22:13.044 [DEBUG] [Thread-167371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:22:13.044 [DEBUG] [Thread-167371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:22:13.085 [DEBUG] [Thread-167371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:22:13.085 [DEBUG] [Thread-167371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:22:13.088 [DEBUG] [Thread-167371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:22:13.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:22:13.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:22:13.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:22:13.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:22:13.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:22:13.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:22:13.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:22:13.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:22:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:22:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.306372 -999.00  +12.80  13.22     97  +12.40 1 3 1 3 1   887    0 0.43 0.14 ----- 12.9 13.2 97.4 20.6 13.8 -0.6 13.8 -0.2 13.7 -0.3 13.9 -0.6
2026-04-11T09:22:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:22:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:22:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.306372
2026-04-11T09:22:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:22:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:22:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:22:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:22:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:22:13.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:22:01', tmtdew=0.145035, humidity=99.3447, cloud=0.0, wind=18.2268, temperature=12.9861, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:21:10.541', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:22:13.115 [DEBUG] [Thread-167371] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:22:13.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:22:13.212 [DEBUG] [Thread-167374] [transport.py] [_log()] starting thread (client mode): 0xae5e6f80
2026-04-11T09:22:13.212 [DEBUG] [Thread-167374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:22:13.227 [DEBUG] [Thread-167374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:22:13.228 [INFO] [Thread-167374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:22:13.236 [DEBUG] [Thread-167374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:13.237 [DEBUG] [Thread-167374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] client lang: <none>
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] server lang: <none>
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] kex follows: False
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:22:13.238 [DEBUG] [Thread-167374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:22:13.239 [DEBUG] [Thread-167374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:22:13.239 [DEBUG] [Thread-167374] [transport.py] [_log()] Compression: none
2026-04-11T09:22:13.239 [DEBUG] [Thread-167374] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:22:13.294 [DEBUG] [Thread-167374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:22:13.294 [DEBUG] [Thread-167374] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:22:13.295 [DEBUG] [Thread-167374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:22:13.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:22:13.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:22:13.351 [DEBUG] [Thread-167374] [transport.py] [_log()] userauth is OK
2026-04-11T09:22:13.351 [DEBUG] [Thread-167374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:22:13.351 [DEBUG] [Thread-167374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:22:13.351 [DEBUG] [Thread-167374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:22:13.351 [DEBUG] [Thread-167374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:22:13.372 [INFO] [Thread-167374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:22:13.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:22:13.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:22:14.192 [DEBUG] [Thread-167374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:22:14.192 [DEBUG] [Thread-167374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:22:14.243 [DEBUG] [Thread-167374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:22:14.243 [DEBUG] [Thread-167374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:22:14.253 [DEBUG] [Thread-167374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:22:14.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:22:14.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-04-11T09:22:14.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-04-11T09:22:14.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:22:14.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:22:14.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:22:14.300 [DEBUG] [Thread-167374] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:22:15.523 [DEBUG] [Thread-167376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:27.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:27.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:30.576 [DEBUG] [Thread-167377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:44.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:22:44.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:22:44.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-04-11T09:22:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 22, 36), 0.18486, 98.7227, 0.0, 18.1022, 13.3059, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:22:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:22:36
2026-04-11T09:22:45.614 [DEBUG] [Thread-167378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:22:45.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:22:46.102 [DEBUG] [Thread-167379] [transport.py] [_log()] starting thread (client mode): 0xae5f1120
2026-04-11T09:22:46.102 [DEBUG] [Thread-167379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:22:46.122 [DEBUG] [Thread-167379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:22:46.122 [INFO] [Thread-167379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:22:46.125 [DEBUG] [Thread-167379] [transport.py] [_log()] client lang: <none>
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] server lang: <none>
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] kex follows: False
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] Compression: none
2026-04-11T09:22:46.126 [DEBUG] [Thread-167379] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:22:46.145 [DEBUG] [Thread-167379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:22:46.146 [DEBUG] [Thread-167379] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:22:46.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:22:46.147 [DEBUG] [Thread-167379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:22:46.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:22:46.149 [DEBUG] [Thread-167379] [transport.py] [_log()] userauth is OK
2026-04-11T09:22:46.150 [DEBUG] [Thread-167379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:22:46.150 [DEBUG] [Thread-167379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:22:46.150 [DEBUG] [Thread-167379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:22:46.150 [DEBUG] [Thread-167379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:22:46.173 [INFO] [Thread-167379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:22:46.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:22:46.907 [DEBUG] [Thread-167379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:22:46.907 [DEBUG] [Thread-167379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:22:46.907 [DEBUG] [Thread-167379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:22:46.948 [DEBUG] [Thread-167379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:22:46.948 [DEBUG] [Thread-167379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:22:46.950 [DEBUG] [Thread-167379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:22:46.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:22:46.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:22:46.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:22:46.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:22:46.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:22:46.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:22:46.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:22:46.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:22:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:22:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.307066 -999.00  +12.80  13.32     97  +12.40 1 3 1 3 1   887    0 0.45 0.21 ----- 15.7 13.3 109.3 27.6 13.8 -0.7 13.8 -0.2 13.7 -0.4 14.0 -0.5
2026-04-11T09:22:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:22:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:22:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.307066
2026-04-11T09:22:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:22:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:22:46.977 [DEBUG] [Thread-167379] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:22:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:22:46.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:22:46.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:22:46.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:22:36', tmtdew=0.18486, humidity=98.7227, cloud=0.0, wind=18.1022, temperature=13.3059, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:22:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:22:47.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:22:47.074 [DEBUG] [Thread-167382] [transport.py] [_log()] starting thread (client mode): 0xae5e56f0
2026-04-11T09:22:47.074 [DEBUG] [Thread-167382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:22:47.092 [DEBUG] [Thread-167382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:22:47.092 [INFO] [Thread-167382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:22:47.101 [DEBUG] [Thread-167382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:22:47.101 [DEBUG] [Thread-167382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:22:47.101 [DEBUG] [Thread-167382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] client lang: <none>
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] server lang: <none>
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] kex follows: False
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] Compression: none
2026-04-11T09:22:47.102 [DEBUG] [Thread-167382] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:22:47.164 [DEBUG] [Thread-167382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:22:47.164 [DEBUG] [Thread-167382] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:22:47.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:22:47.165 [DEBUG] [Thread-167382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:22:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:22:47.223 [DEBUG] [Thread-167382] [transport.py] [_log()] userauth is OK
2026-04-11T09:22:47.223 [DEBUG] [Thread-167382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:22:47.224 [DEBUG] [Thread-167382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:22:47.224 [DEBUG] [Thread-167382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:22:47.224 [DEBUG] [Thread-167382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:22:47.242 [INFO] [Thread-167382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:22:47.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:22:47.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:22:48.095 [DEBUG] [Thread-167382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:22:48.095 [DEBUG] [Thread-167382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:22:48.143 [DEBUG] [Thread-167382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:22:48.143 [DEBUG] [Thread-167382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:22:48.151 [DEBUG] [Thread-167382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:22:48.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:22:48.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-04-11T09:22:48.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-04-11T09:22:48.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:22:48.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:22:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:22:48.186 [DEBUG] [Thread-167382] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:22:56.186 [DEBUG] [Thread-167384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:00.656 [DEBUG] [Thread-167385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:15.704 [DEBUG] [Thread-167386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:18.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:23:18.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:23:18.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:23:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 23, 12), 0.09246, 99.3613, 0.0, 24.7198, 12.9527, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:23:19.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:23:12
2026-04-11T09:23:19.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:23:19.999 [DEBUG] [Thread-167387] [transport.py] [_log()] starting thread (client mode): 0xb0f6d630
2026-04-11T09:23:19.999 [DEBUG] [Thread-167387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:23:20.018 [DEBUG] [Thread-167387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:23:20.018 [INFO] [Thread-167387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] client lang: <none>
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] server lang: <none>
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] kex follows: False
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] Compression: none
2026-04-11T09:23:20.021 [DEBUG] [Thread-167387] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:23:20.036 [DEBUG] [Thread-167387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:23:20.037 [DEBUG] [Thread-167387] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:23:20.037 [DEBUG] [Thread-167387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:23:20.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:23:20.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:23:20.039 [DEBUG] [Thread-167387] [transport.py] [_log()] userauth is OK
2026-04-11T09:23:20.039 [DEBUG] [Thread-167387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:23:20.039 [DEBUG] [Thread-167387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:23:20.039 [DEBUG] [Thread-167387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:23:20.039 [DEBUG] [Thread-167387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:23:20.063 [INFO] [Thread-167387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:23:20.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:23:20.822 [DEBUG] [Thread-167387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:23:20.822 [DEBUG] [Thread-167387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:23:20.823 [DEBUG] [Thread-167387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:23:20.863 [DEBUG] [Thread-167387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:23:20.863 [DEBUG] [Thread-167387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:23:20.869 [DEBUG] [Thread-167387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:23:20.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:23:20.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:23:20.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:23:20.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:23:20.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:23:20.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:23:20.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:23:20.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:23:20.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:23:20.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.307413 -999.00  +12.90  13.12     97  +12.40 1 3 1 3 1   887    0 0.45 0.57 ----- 14.7 13.1 86.7 18.9 13.9 -0.5 13.8 -0.3 13.7 -0.2 14.0 -0.4
2026-04-11T09:23:20.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:23:20.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:23:20.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.307413
2026-04-11T09:23:20.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:23:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:23:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:23:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:23:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:23:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:23:12', tmtdew=0.09246, humidity=99.3613, cloud=0.0, wind=24.7198, temperature=12.9527, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:22:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:23:20.894 [DEBUG] [Thread-167387] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:23:20.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:23:20.999 [DEBUG] [Thread-167390] [transport.py] [_log()] starting thread (client mode): 0xae515e70
2026-04-11T09:23:20.999 [DEBUG] [Thread-167390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:23:21.015 [DEBUG] [Thread-167390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:23:21.015 [INFO] [Thread-167390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] client lang: <none>
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] server lang: <none>
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] kex follows: False
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:23:21.023 [DEBUG] [Thread-167390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:23:21.024 [DEBUG] [Thread-167390] [transport.py] [_log()] Compression: none
2026-04-11T09:23:21.024 [DEBUG] [Thread-167390] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:23:21.083 [DEBUG] [Thread-167390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:23:21.084 [DEBUG] [Thread-167390] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:23:21.084 [DEBUG] [Thread-167390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:23:21.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:23:21.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:23:21.142 [DEBUG] [Thread-167390] [transport.py] [_log()] userauth is OK
2026-04-11T09:23:21.143 [DEBUG] [Thread-167390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:23:21.143 [DEBUG] [Thread-167390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:23:21.143 [DEBUG] [Thread-167390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:23:21.143 [DEBUG] [Thread-167390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:23:21.162 [INFO] [Thread-167390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:23:21.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:23:21.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:23:22.018 [DEBUG] [Thread-167390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:23:22.018 [DEBUG] [Thread-167390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:23:22.066 [DEBUG] [Thread-167390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:23:22.066 [DEBUG] [Thread-167390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:23:22.076 [DEBUG] [Thread-167390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:23:22.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:23:22.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-04-11T09:23:22.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:23:22.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:23:22.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:23:22.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:23:22.113 [DEBUG] [Thread-167390] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:23:27.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:27.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:30.742 [DEBUG] [Thread-167392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:45.796 [DEBUG] [Thread-167393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:23:52.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:23:52.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:23:52.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-04-11T09:23:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 23, 12), 0.09246, 99.3613, 0.0, 24.7198, 12.9527, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:23:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:23:12
2026-04-11T09:23:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:23:53.997 [DEBUG] [Thread-167394] [transport.py] [_log()] starting thread (client mode): 0xae5142e0
2026-04-11T09:23:53.997 [DEBUG] [Thread-167394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:23:54.018 [DEBUG] [Thread-167394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:23:54.018 [INFO] [Thread-167394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:23:54.021 [DEBUG] [Thread-167394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:23:54.021 [DEBUG] [Thread-167394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] client lang: <none>
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] server lang: <none>
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] kex follows: False
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:23:54.022 [DEBUG] [Thread-167394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:23:54.023 [DEBUG] [Thread-167394] [transport.py] [_log()] Compression: none
2026-04-11T09:23:54.023 [DEBUG] [Thread-167394] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:23:54.041 [DEBUG] [Thread-167394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:23:54.041 [DEBUG] [Thread-167394] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:23:54.042 [DEBUG] [Thread-167394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:23:54.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:23:54.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:23:54.043 [DEBUG] [Thread-167394] [transport.py] [_log()] userauth is OK
2026-04-11T09:23:54.044 [DEBUG] [Thread-167394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:23:54.044 [DEBUG] [Thread-167394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:23:54.044 [DEBUG] [Thread-167394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:23:54.044 [DEBUG] [Thread-167394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:23:54.068 [INFO] [Thread-167394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:23:54.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:23:54.828 [DEBUG] [Thread-167394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:23:54.828 [DEBUG] [Thread-167394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:23:54.829 [DEBUG] [Thread-167394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:23:54.869 [DEBUG] [Thread-167394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:23:54.869 [DEBUG] [Thread-167394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:23:54.871 [DEBUG] [Thread-167394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:23:54.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:23:54.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:23:54.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:23:54.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:23:54.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:23:54.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:23:54.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:23:54.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:23:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:23:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.307760 -999.00  +12.80  16.44     97  +12.40 1 3 1 3 1   887    0 0.46 0.66 ----- 19.3 16.4 72.8 22.9 13.8 -0.4 13.8 -0.4 13.7 -0.1 14.0 -0.5
2026-04-11T09:23:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:23:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:23:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.307760
2026-04-11T09:23:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:23:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:23:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:23:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:23:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:23:54.896 [DEBUG] [Thread-167394] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:23:54.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:23:12', tmtdew=0.09246, humidity=99.3613, cloud=0.0, wind=24.7198, temperature=12.9527, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:23:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:23:54.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:23:54.989 [DEBUG] [Thread-167397] [transport.py] [_log()] starting thread (client mode): 0xb0fcc2e0
2026-04-11T09:23:54.989 [DEBUG] [Thread-167397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:23:55.004 [DEBUG] [Thread-167397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:23:55.004 [INFO] [Thread-167397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] client lang: <none>
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] server lang: <none>
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] kex follows: False
2026-04-11T09:23:55.012 [DEBUG] [Thread-167397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:23:55.013 [DEBUG] [Thread-167397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:23:55.013 [DEBUG] [Thread-167397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:23:55.013 [DEBUG] [Thread-167397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:23:55.013 [DEBUG] [Thread-167397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:23:55.013 [DEBUG] [Thread-167397] [transport.py] [_log()] Compression: none
2026-04-11T09:23:55.013 [DEBUG] [Thread-167397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:23:55.075 [DEBUG] [Thread-167397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:23:55.076 [DEBUG] [Thread-167397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:23:55.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:23:55.078 [DEBUG] [Thread-167397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:23:55.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:23:55.134 [DEBUG] [Thread-167397] [transport.py] [_log()] userauth is OK
2026-04-11T09:23:55.134 [DEBUG] [Thread-167397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:23:55.135 [DEBUG] [Thread-167397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:23:55.135 [DEBUG] [Thread-167397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:23:55.135 [DEBUG] [Thread-167397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:23:55.153 [INFO] [Thread-167397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:23:55.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:23:55.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:23:55.978 [DEBUG] [Thread-167397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:23:55.978 [DEBUG] [Thread-167397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:23:56.026 [DEBUG] [Thread-167397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:23:56.026 [DEBUG] [Thread-167397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:23:56.037 [DEBUG] [Thread-167397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:23:56.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:23:56.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-04-11T09:23:56.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:23:56.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:23:56.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:23:56.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:23:56.078 [DEBUG] [Thread-167397] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:23:56.236 [DEBUG] [Thread-167399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:00.831 [DEBUG] [Thread-167400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:15.885 [DEBUG] [Thread-167401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:24:26.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:24:26.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-04-11T09:24:27.426 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:27.427 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 23, 47), 0.17457, 98.7891, 0.0, 20.3249, 13.3391, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:24:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:23:47
2026-04-11T09:24:27.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:24:28.126 [DEBUG] [Thread-167402] [transport.py] [_log()] starting thread (client mode): 0xae516020
2026-04-11T09:24:28.126 [DEBUG] [Thread-167402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:24:28.146 [DEBUG] [Thread-167402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:24:28.146 [INFO] [Thread-167402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:24:28.149 [DEBUG] [Thread-167402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] client lang: <none>
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] server lang: <none>
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] kex follows: False
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] Compression: none
2026-04-11T09:24:28.150 [DEBUG] [Thread-167402] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:24:28.168 [DEBUG] [Thread-167402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:24:28.169 [DEBUG] [Thread-167402] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:24:28.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:24:28.170 [DEBUG] [Thread-167402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:24:28.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:24:28.172 [DEBUG] [Thread-167402] [transport.py] [_log()] userauth is OK
2026-04-11T09:24:28.172 [DEBUG] [Thread-167402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:24:28.172 [DEBUG] [Thread-167402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:24:28.172 [DEBUG] [Thread-167402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:24:28.172 [DEBUG] [Thread-167402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:24:28.195 [INFO] [Thread-167402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:24:28.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:24:28.946 [DEBUG] [Thread-167402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:24:28.946 [DEBUG] [Thread-167402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:24:28.946 [DEBUG] [Thread-167402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:24:28.988 [DEBUG] [Thread-167402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:24:28.988 [DEBUG] [Thread-167402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:24:28.991 [DEBUG] [Thread-167402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:24:29.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:24:29.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:24:29.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:24:29.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:24:29.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:24:29.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:24:29.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:24:29.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:24:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:24:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.308108 -999.00  +12.80  12.84     97  +12.40 1 3 1 3 1   887    0 0.44 0.41 ----- 13.0 12.8 107.2 23.3 13.8 -0.7 13.8 -0.3 13.7 -0.3 14.0 -0.6
2026-04-11T09:24:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:24:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:24:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.308108
2026-04-11T09:24:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:24:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:24:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:24:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:24:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:24:29.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:23:47', tmtdew=0.17457, humidity=98.7891, cloud=0.0, wind=20.3249, temperature=13.3391, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:23:40.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:24:29.019 [DEBUG] [Thread-167402] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:24:29.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:24:29.113 [DEBUG] [Thread-167405] [transport.py] [_log()] starting thread (client mode): 0xb0f6f1c0
2026-04-11T09:24:29.113 [DEBUG] [Thread-167405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:24:29.128 [DEBUG] [Thread-167405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:24:29.128 [INFO] [Thread-167405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:24:29.136 [DEBUG] [Thread-167405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:24:29.136 [DEBUG] [Thread-167405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:24:29.136 [DEBUG] [Thread-167405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:24:29.136 [DEBUG] [Thread-167405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:24:29.136 [DEBUG] [Thread-167405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] client lang: <none>
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] server lang: <none>
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] kex follows: False
2026-04-11T09:24:29.137 [DEBUG] [Thread-167405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:24:29.138 [DEBUG] [Thread-167405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:24:29.138 [DEBUG] [Thread-167405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:24:29.138 [DEBUG] [Thread-167405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:24:29.138 [DEBUG] [Thread-167405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:24:29.138 [DEBUG] [Thread-167405] [transport.py] [_log()] Compression: none
2026-04-11T09:24:29.138 [DEBUG] [Thread-167405] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:24:29.196 [DEBUG] [Thread-167405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:24:29.197 [DEBUG] [Thread-167405] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:24:29.198 [DEBUG] [Thread-167405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:24:29.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:24:29.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:24:29.253 [DEBUG] [Thread-167405] [transport.py] [_log()] userauth is OK
2026-04-11T09:24:29.254 [DEBUG] [Thread-167405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:24:29.254 [DEBUG] [Thread-167405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:24:29.254 [DEBUG] [Thread-167405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:24:29.254 [DEBUG] [Thread-167405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:24:29.273 [INFO] [Thread-167405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:24:29.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:24:29.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:24:30.118 [DEBUG] [Thread-167405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:24:30.119 [DEBUG] [Thread-167405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:24:30.166 [DEBUG] [Thread-167405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:24:30.166 [DEBUG] [Thread-167405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:24:30.178 [DEBUG] [Thread-167405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:24:30.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:24:30.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-04-11T09:24:30.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-04-11T09:24:30.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:24:30.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:24:30.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:24:30.220 [DEBUG] [Thread-167405] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:24:30.924 [DEBUG] [Thread-167407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:45.977 [DEBUG] [Thread-167408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:24:56.310 [DEBUG] [Thread-167409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:25:00.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:25:00.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:25:01.014 [DEBUG] [Thread-167410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 24, 22), 0.09501, 99.3448, 0.0, 18.0328, 12.9361, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:25:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:24:22
2026-04-11T09:25:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:25:02.250 [DEBUG] [Thread-167411] [transport.py] [_log()] starting thread (client mode): 0xb0f6d360
2026-04-11T09:25:02.250 [DEBUG] [Thread-167411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:25:02.270 [DEBUG] [Thread-167411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:25:02.270 [INFO] [Thread-167411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:25:02.272 [DEBUG] [Thread-167411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] client lang: <none>
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] server lang: <none>
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] kex follows: False
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:25:02.273 [DEBUG] [Thread-167411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:25:02.274 [DEBUG] [Thread-167411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:25:02.274 [DEBUG] [Thread-167411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:25:02.274 [DEBUG] [Thread-167411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:25:02.274 [DEBUG] [Thread-167411] [transport.py] [_log()] Compression: none
2026-04-11T09:25:02.274 [DEBUG] [Thread-167411] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:25:02.284 [DEBUG] [Thread-167411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:25:02.285 [DEBUG] [Thread-167411] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:25:02.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:25:02.287 [DEBUG] [Thread-167411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:25:02.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:25:02.289 [DEBUG] [Thread-167411] [transport.py] [_log()] userauth is OK
2026-04-11T09:25:02.290 [DEBUG] [Thread-167411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:25:02.290 [DEBUG] [Thread-167411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:25:02.290 [DEBUG] [Thread-167411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:25:02.290 [DEBUG] [Thread-167411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:25:02.316 [INFO] [Thread-167411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:25:02.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:25:03.496 [DEBUG] [Thread-167411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:25:03.497 [DEBUG] [Thread-167411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:25:03.497 [DEBUG] [Thread-167411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:25:03.538 [DEBUG] [Thread-167411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:25:03.538 [DEBUG] [Thread-167411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:25:03.542 [DEBUG] [Thread-167411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:25:03.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:25:03.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:25:03.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:25:03.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:25:03.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:25:03.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:25:03.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:25:03.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:25:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:25:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.308802 -999.00  +12.80  21.51     97  +12.40 1 3 1 3 1   887    0 0.45 0.54 ----- 22.2 21.5 70.2 24.9 13.8 -0.6 13.8 -0.2 13.8 -0.2 14.1 -0.6
2026-04-11T09:25:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:25:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:25:03.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.308802
2026-04-11T09:25:03.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:25:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:25:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:25:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:25:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:25:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:24:22', tmtdew=0.09501, humidity=99.3448, cloud=0.0, wind=18.0328, temperature=12.9361, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:24:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:25:03.573 [DEBUG] [Thread-167411] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:25:03.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:25:03.666 [DEBUG] [Thread-167414] [transport.py] [_log()] starting thread (client mode): 0xae5a7280
2026-04-11T09:25:03.666 [DEBUG] [Thread-167414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:25:03.680 [DEBUG] [Thread-167414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:25:03.680 [INFO] [Thread-167414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:25:03.688 [DEBUG] [Thread-167414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] client lang: <none>
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] server lang: <none>
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] kex follows: False
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] Compression: none
2026-04-11T09:25:03.689 [DEBUG] [Thread-167414] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:25:03.749 [DEBUG] [Thread-167414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:25:03.749 [DEBUG] [Thread-167414] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:25:03.750 [DEBUG] [Thread-167414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:25:03.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:25:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:25:03.805 [DEBUG] [Thread-167414] [transport.py] [_log()] userauth is OK
2026-04-11T09:25:03.805 [DEBUG] [Thread-167414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:25:03.805 [DEBUG] [Thread-167414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:25:03.806 [DEBUG] [Thread-167414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:25:03.806 [DEBUG] [Thread-167414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:25:03.825 [INFO] [Thread-167414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:25:03.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:25:03.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:25:04.648 [DEBUG] [Thread-167414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:25:04.648 [DEBUG] [Thread-167414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:25:04.696 [DEBUG] [Thread-167414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:25:04.696 [DEBUG] [Thread-167414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:25:04.705 [DEBUG] [Thread-167414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:25:04.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:25:04.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:25:04.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:25:04.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:25:04.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:25:04.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:25:04.743 [DEBUG] [Thread-167414] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:25:16.051 [DEBUG] [Thread-167416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:27.574 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:27.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:31.103 [DEBUG] [Thread-167417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:25:34.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:25:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:25:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 24, 59), 0.100145, 99.3117, 0.0, 21.7033, 12.9196, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:25:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:24:59
2026-04-11T09:25:36.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:25:36.661 [DEBUG] [Thread-167418] [transport.py] [_log()] starting thread (client mode): 0xae5e6950
2026-04-11T09:25:36.661 [DEBUG] [Thread-167418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:25:36.682 [DEBUG] [Thread-167418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:25:36.682 [INFO] [Thread-167418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:25:36.683 [DEBUG] [Thread-167418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] client lang: <none>
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] server lang: <none>
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] kex follows: False
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:25:36.684 [DEBUG] [Thread-167418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:25:36.685 [DEBUG] [Thread-167418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:25:36.685 [DEBUG] [Thread-167418] [transport.py] [_log()] Compression: none
2026-04-11T09:25:36.685 [DEBUG] [Thread-167418] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:25:36.694 [DEBUG] [Thread-167418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:25:36.695 [DEBUG] [Thread-167418] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:25:36.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:25:36.696 [DEBUG] [Thread-167418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:25:36.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:25:36.698 [DEBUG] [Thread-167418] [transport.py] [_log()] userauth is OK
2026-04-11T09:25:36.698 [DEBUG] [Thread-167418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:25:36.698 [DEBUG] [Thread-167418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:25:36.698 [DEBUG] [Thread-167418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:25:36.699 [DEBUG] [Thread-167418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:25:36.719 [INFO] [Thread-167418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:25:36.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:25:37.614 [DEBUG] [Thread-167418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:25:37.615 [DEBUG] [Thread-167418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:25:37.615 [DEBUG] [Thread-167418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:25:37.657 [DEBUG] [Thread-167418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:25:37.658 [DEBUG] [Thread-167418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:25:37.662 [DEBUG] [Thread-167418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:25:37.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:25:37.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:25:37.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:25:37.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:25:37.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:25:37.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:25:37.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:25:37.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:25:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:25:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.308802 -999.00  +12.80  21.51     97  +12.40 1 3 1 3 1   887    0 0.45 0.54 ----- 22.2 21.5 70.2 24.9 13.8 -0.6 13.8 -0.2 13.8 -0.2 14.1 -0.6
2026-04-11T09:25:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:25:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:25:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.308802
2026-04-11T09:25:37.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:25:37.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:25:37.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:25:37.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:25:37.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:25:37.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:24:59', tmtdew=0.100145, humidity=99.3117, cloud=0.0, wind=21.7033, temperature=12.9196, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:24:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:25:37.733 [DEBUG] [Thread-167418] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:25:37.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:25:37.829 [DEBUG] [Thread-167421] [transport.py] [_log()] starting thread (client mode): 0xae5a4370
2026-04-11T09:25:37.829 [DEBUG] [Thread-167421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:25:37.844 [DEBUG] [Thread-167421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:25:37.844 [INFO] [Thread-167421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:25:37.851 [DEBUG] [Thread-167421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:25:37.851 [DEBUG] [Thread-167421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] client lang: <none>
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] server lang: <none>
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] kex follows: False
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:25:37.852 [DEBUG] [Thread-167421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:25:37.853 [DEBUG] [Thread-167421] [transport.py] [_log()] Compression: none
2026-04-11T09:25:37.853 [DEBUG] [Thread-167421] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:25:37.912 [DEBUG] [Thread-167421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:25:37.913 [DEBUG] [Thread-167421] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:25:37.914 [DEBUG] [Thread-167421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:25:37.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:25:37.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:25:37.968 [DEBUG] [Thread-167421] [transport.py] [_log()] userauth is OK
2026-04-11T09:25:37.968 [DEBUG] [Thread-167421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:25:37.969 [DEBUG] [Thread-167421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:25:37.969 [DEBUG] [Thread-167421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:25:37.969 [DEBUG] [Thread-167421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:25:37.987 [INFO] [Thread-167421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:25:37.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:25:37.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:25:38.815 [DEBUG] [Thread-167421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:25:38.816 [DEBUG] [Thread-167421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:25:38.864 [DEBUG] [Thread-167421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:25:38.864 [DEBUG] [Thread-167421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:25:38.874 [DEBUG] [Thread-167421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:25:38.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:25:38.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:25:38.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:25:38.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:25:38.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:25:38.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:25:38.912 [DEBUG] [Thread-167421] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:25:46.142 [DEBUG] [Thread-167423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:25:56.365 [DEBUG] [Thread-167424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:01.195 [DEBUG] [Thread-167425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:08.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:26:08.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:26:08.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-04-11T09:26:10.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 25, 34), 0.17972, 98.7561, 0.0, 24.241, 13.3723, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:26:10.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:25:34
2026-04-11T09:26:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:26:10.729 [DEBUG] [Thread-167426] [transport.py] [_log()] starting thread (client mode): 0xb0f6d1b0
2026-04-11T09:26:10.729 [DEBUG] [Thread-167426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:26:10.745 [DEBUG] [Thread-167426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:26:10.745 [INFO] [Thread-167426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] client lang: <none>
2026-04-11T09:26:10.748 [DEBUG] [Thread-167426] [transport.py] [_log()] server lang: <none>
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] kex follows: False
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] Compression: none
2026-04-11T09:26:10.749 [DEBUG] [Thread-167426] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:26:10.765 [DEBUG] [Thread-167426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:26:10.766 [DEBUG] [Thread-167426] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:26:10.767 [DEBUG] [Thread-167426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:26:10.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:26:10.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:26:10.770 [DEBUG] [Thread-167426] [transport.py] [_log()] userauth is OK
2026-04-11T09:26:10.770 [DEBUG] [Thread-167426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:26:10.770 [DEBUG] [Thread-167426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:26:10.770 [DEBUG] [Thread-167426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:26:10.770 [DEBUG] [Thread-167426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:26:10.795 [INFO] [Thread-167426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:26:10.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:26:11.599 [DEBUG] [Thread-167426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:26:11.599 [DEBUG] [Thread-167426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:26:11.599 [DEBUG] [Thread-167426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:26:11.641 [DEBUG] [Thread-167426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:26:11.641 [DEBUG] [Thread-167426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:26:11.643 [DEBUG] [Thread-167426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:26:11.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:26:11.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:26:11.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:26:11.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:26:11.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:26:11.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:26:11.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:26:11.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:26:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:26:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.309149 -999.00  +12.80  19.75     97  +12.40 1 3 1 3 1   887    0 0.44 0.25 ----- 13.4 19.8 62.8 22.8 13.9 -0.4 13.8 -0.3 13.8 -0.4 14.0 -0.4
2026-04-11T09:26:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:26:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:26:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.309149
2026-04-11T09:26:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:26:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:26:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:26:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:26:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:26:11.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:25:34', tmtdew=0.17972, humidity=98.7561, cloud=0.0, wind=24.241, temperature=13.3723, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:25:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:26:11.665 [DEBUG] [Thread-167426] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:26:11.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:26:11.769 [DEBUG] [Thread-167429] [transport.py] [_log()] starting thread (client mode): 0xb0fcefb0
2026-04-11T09:26:11.769 [DEBUG] [Thread-167429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:26:11.784 [DEBUG] [Thread-167429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:26:11.784 [INFO] [Thread-167429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:26:11.792 [DEBUG] [Thread-167429] [transport.py] [_log()] client lang: <none>
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] server lang: <none>
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] kex follows: False
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] Compression: none
2026-04-11T09:26:11.793 [DEBUG] [Thread-167429] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:26:11.853 [DEBUG] [Thread-167429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:26:11.853 [DEBUG] [Thread-167429] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:26:11.854 [DEBUG] [Thread-167429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:26:11.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:26:11.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:26:11.912 [DEBUG] [Thread-167429] [transport.py] [_log()] userauth is OK
2026-04-11T09:26:11.912 [DEBUG] [Thread-167429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:26:11.913 [DEBUG] [Thread-167429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:26:11.913 [DEBUG] [Thread-167429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:26:11.913 [DEBUG] [Thread-167429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:26:11.932 [INFO] [Thread-167429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:26:11.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:26:11.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:26:12.723 [DEBUG] [Thread-167429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:26:12.723 [DEBUG] [Thread-167429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:26:12.772 [DEBUG] [Thread-167429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:26:12.773 [DEBUG] [Thread-167429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:26:12.782 [DEBUG] [Thread-167429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:26:12.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:26: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-04-11T09:26: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-04-11T09:26:12.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:26:12.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:26:12.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:26:12.823 [DEBUG] [Thread-167429] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:26:16.235 [DEBUG] [Thread-167431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:27.718 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:27.719 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:31.290 [DEBUG] [Thread-167432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:42.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:26:42.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:26:42.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-04-11T09:26:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 26, 10), 0.092425, 99.3615, 0.0, 22.7441, 12.9362, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:26:44.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:26:10
2026-04-11T09:26:44.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:26:44.771 [DEBUG] [Thread-167433] [transport.py] [_log()] starting thread (client mode): 0xb0fcc2e0
2026-04-11T09:26:44.771 [DEBUG] [Thread-167433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:26:44.791 [DEBUG] [Thread-167433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:26:44.791 [INFO] [Thread-167433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] client lang: <none>
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] server lang: <none>
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] kex follows: False
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] Compression: none
2026-04-11T09:26:44.795 [DEBUG] [Thread-167433] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:26:44.816 [DEBUG] [Thread-167433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:26:44.817 [DEBUG] [Thread-167433] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:26:44.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:26:44.818 [DEBUG] [Thread-167433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:26:44.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:26:44.861 [DEBUG] [Thread-167433] [transport.py] [_log()] userauth is OK
2026-04-11T09:26:44.861 [DEBUG] [Thread-167433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:26:44.862 [DEBUG] [Thread-167433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:26:44.862 [DEBUG] [Thread-167433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:26:44.862 [DEBUG] [Thread-167433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:26:44.899 [INFO] [Thread-167433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:26:44.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:26:45.626 [DEBUG] [Thread-167433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:26:45.627 [DEBUG] [Thread-167433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:26:45.627 [DEBUG] [Thread-167433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:26:45.668 [DEBUG] [Thread-167433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:26:45.668 [DEBUG] [Thread-167433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:26:45.671 [DEBUG] [Thread-167433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:26:45.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:26:45.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:26:45.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:26:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:26:45.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:26:45.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:26:45.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:26:45.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:26:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:26:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.309844 -999.00  +12.90  11.65     97  +12.50 1 3 1 3 1   887    0 0.44 0.00 ----- 17.5 11.7 120.4 20.8 13.9 -0.5 13.9 -0.2 13.8 -0.3 14.1 -0.5
2026-04-11T09:26:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:26:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:26:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.309844
2026-04-11T09:26:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:26:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:26:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:26:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:26:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:26:45.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:26:10', tmtdew=0.092425, humidity=99.3615, cloud=0.0, wind=22.7441, temperature=12.9362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:26:10.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:26:45.701 [DEBUG] [Thread-167433] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:26:45.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:26:45.797 [DEBUG] [Thread-167436] [transport.py] [_log()] starting thread (client mode): 0xb0f8cd00
2026-04-11T09:26:45.797 [DEBUG] [Thread-167436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:26:45.812 [DEBUG] [Thread-167436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:26:45.812 [INFO] [Thread-167436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:26:45.820 [DEBUG] [Thread-167436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:26:45.820 [DEBUG] [Thread-167436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:26:45.820 [DEBUG] [Thread-167436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:26:45.820 [DEBUG] [Thread-167436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:45.820 [DEBUG] [Thread-167436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:26:45.820 [DEBUG] [Thread-167436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] client lang: <none>
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] server lang: <none>
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] kex follows: False
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] Compression: none
2026-04-11T09:26:45.821 [DEBUG] [Thread-167436] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:26:45.880 [DEBUG] [Thread-167436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:26:45.880 [DEBUG] [Thread-167436] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:26:45.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:26:45.881 [DEBUG] [Thread-167436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:26:45.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:26:45.941 [DEBUG] [Thread-167436] [transport.py] [_log()] userauth is OK
2026-04-11T09:26:45.941 [DEBUG] [Thread-167436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:26:45.941 [DEBUG] [Thread-167436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:26:45.942 [DEBUG] [Thread-167436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:26:45.942 [DEBUG] [Thread-167436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:26:45.975 [INFO] [Thread-167436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:26:45.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:26:45.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:26:46.328 [DEBUG] [Thread-167438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:26:46.828 [DEBUG] [Thread-167436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:26:46.829 [DEBUG] [Thread-167436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:26:46.877 [DEBUG] [Thread-167436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:26:46.877 [DEBUG] [Thread-167436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:26:46.887 [DEBUG] [Thread-167436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:26:46.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:26:46.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-04-11T09:26:46.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-04-11T09:26:46.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:26:46.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:26:46.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:26:46.925 [DEBUG] [Thread-167436] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:26:56.417 [DEBUG] [Thread-167439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:01.383 [DEBUG] [Thread-167440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:16.422 [DEBUG] [Thread-167441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:16.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:27:16.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:27:16.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-04-11T09:27:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 26, 45), 0.17972, 98.7562, 0.0, 25.1582, 13.4056, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:27:18.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:26:45
2026-04-11T09:27:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:27:18.756 [DEBUG] [Thread-167442] [transport.py] [_log()] starting thread (client mode): 0xae5e6410
2026-04-11T09:27:18.756 [DEBUG] [Thread-167442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:27:18.773 [DEBUG] [Thread-167442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:27:18.773 [INFO] [Thread-167442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:27:18.776 [DEBUG] [Thread-167442] [transport.py] [_log()] client lang: <none>
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] server lang: <none>
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] kex follows: False
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] Compression: none
2026-04-11T09:27:18.777 [DEBUG] [Thread-167442] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:27:18.794 [DEBUG] [Thread-167442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:27:18.795 [DEBUG] [Thread-167442] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:27:18.795 [DEBUG] [Thread-167442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:27:18.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:27:18.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:27:18.797 [DEBUG] [Thread-167442] [transport.py] [_log()] userauth is OK
2026-04-11T09:27:18.798 [DEBUG] [Thread-167442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:27:18.798 [DEBUG] [Thread-167442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:27:18.798 [DEBUG] [Thread-167442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:27:18.798 [DEBUG] [Thread-167442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:27:18.834 [INFO] [Thread-167442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:27:18.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:27:19.642 [DEBUG] [Thread-167442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:27:19.642 [DEBUG] [Thread-167442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:27:19.642 [DEBUG] [Thread-167442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:27:19.683 [DEBUG] [Thread-167442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:27:19.683 [DEBUG] [Thread-167442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:27:19.686 [DEBUG] [Thread-167442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:27:19.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:27:19.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:27:19.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:27:19.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:27:19.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:27:19.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:27:19.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:27:19.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:27:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:27:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.310191 -999.00  +12.90  15.84     97  +12.50 1 3 1 3 1   887    0 0.43 -0.24 ----- 10.2 15.8 86.5 20.3 13.9 -0.5 13.9 -0.2 13.8 -0.4 14.1 -0.4
2026-04-11T09:27:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:27:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:27:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.310191
2026-04-11T09:27:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:27:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:27:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:27:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:27:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:27:19.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:26:45', tmtdew=0.17972, humidity=98.7562, cloud=0.0, wind=25.1582, temperature=13.4056, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:26:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:27:19.709 [DEBUG] [Thread-167442] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:27:19.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:27:19.805 [DEBUG] [Thread-167445] [transport.py] [_log()] starting thread (client mode): 0xb0fcc610
2026-04-11T09:27:19.805 [DEBUG] [Thread-167445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:27:19.820 [DEBUG] [Thread-167445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:27:19.820 [INFO] [Thread-167445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:27:19.827 [DEBUG] [Thread-167445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] client lang: <none>
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] server lang: <none>
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] kex follows: False
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:27:19.828 [DEBUG] [Thread-167445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:27:19.829 [DEBUG] [Thread-167445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:27:19.829 [DEBUG] [Thread-167445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:27:19.829 [DEBUG] [Thread-167445] [transport.py] [_log()] Compression: none
2026-04-11T09:27:19.829 [DEBUG] [Thread-167445] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:27:19.886 [DEBUG] [Thread-167445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:27:19.886 [DEBUG] [Thread-167445] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:27:19.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:27:19.887 [DEBUG] [Thread-167445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:27:19.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:27:19.942 [DEBUG] [Thread-167445] [transport.py] [_log()] userauth is OK
2026-04-11T09:27:19.943 [DEBUG] [Thread-167445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:27:19.943 [DEBUG] [Thread-167445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:27:19.943 [DEBUG] [Thread-167445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:27:19.943 [DEBUG] [Thread-167445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:27:19.962 [INFO] [Thread-167445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:27:19.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:27:19.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:27:20.781 [DEBUG] [Thread-167445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:27:20.781 [DEBUG] [Thread-167445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:27:20.828 [DEBUG] [Thread-167445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:27:20.829 [DEBUG] [Thread-167445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:27:20.837 [DEBUG] [Thread-167445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:27:20.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:27:20.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-04-11T09:27:20.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-04-11T09:27:20.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:27:20.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:27:20.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:27:20.871 [DEBUG] [Thread-167445] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:27:27.858 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:27.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:31.457 [DEBUG] [Thread-167447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:46.512 [DEBUG] [Thread-167448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:27:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:27:50.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:27:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:27:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 27, 21), 0.08471, 99.4112, 0.0, 18.9853, 12.9862, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:27:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:27:21
2026-04-11T09:27:52.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:27:52.669 [DEBUG] [Thread-167449] [transport.py] [_log()] starting thread (client mode): 0xa79536a0
2026-04-11T09:27:52.669 [DEBUG] [Thread-167449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:27:52.689 [DEBUG] [Thread-167449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:27:52.689 [INFO] [Thread-167449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:27:52.692 [DEBUG] [Thread-167449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] client lang: <none>
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] server lang: <none>
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] kex follows: False
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:27:52.693 [DEBUG] [Thread-167449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:27:52.694 [DEBUG] [Thread-167449] [transport.py] [_log()] Compression: none
2026-04-11T09:27:52.694 [DEBUG] [Thread-167449] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:27:52.710 [DEBUG] [Thread-167449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:27:52.710 [DEBUG] [Thread-167449] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:27:52.711 [DEBUG] [Thread-167449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:27:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:27:52.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:27:52.712 [DEBUG] [Thread-167449] [transport.py] [_log()] userauth is OK
2026-04-11T09:27:52.713 [DEBUG] [Thread-167449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:27:52.713 [DEBUG] [Thread-167449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:27:52.713 [DEBUG] [Thread-167449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:27:52.713 [DEBUG] [Thread-167449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:27:52.730 [INFO] [Thread-167449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:27:52.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:27:53.503 [DEBUG] [Thread-167449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:27:53.504 [DEBUG] [Thread-167449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:27:53.504 [DEBUG] [Thread-167449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:27:53.545 [DEBUG] [Thread-167449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:27:53.545 [DEBUG] [Thread-167449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:27:53.549 [DEBUG] [Thread-167449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:27:53.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:27:53.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:27:53.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:27:53.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:27:53.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:27:53.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:27:53.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:27:53.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:27:53.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:27:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.310538 -999.00  +12.90  12.66     97  +12.50 1 3 1 3 1   887    0 0.42 -0.52 ----- 11.8 12.7 93.3 19.3 13.9 -0.3 13.9 -0.3 13.8 -0.2 14.1 -0.5
2026-04-11T09:27:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:27:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:27:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.310538
2026-04-11T09:27:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:27:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:27:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:27:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:27:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:27:53.576 [DEBUG] [Thread-167449] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:27:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:27:21', tmtdew=0.08471, humidity=99.4112, cloud=0.0, wind=18.9853, temperature=12.9862, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:27:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:27:53.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:27:53.669 [DEBUG] [Thread-167452] [transport.py] [_log()] starting thread (client mode): 0xa79526b0
2026-04-11T09:27:53.669 [DEBUG] [Thread-167452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:27:53.685 [DEBUG] [Thread-167452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:27:53.685 [INFO] [Thread-167452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] client lang: <none>
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] server lang: <none>
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] kex follows: False
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:27:53.693 [DEBUG] [Thread-167452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:27:53.694 [DEBUG] [Thread-167452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:27:53.694 [DEBUG] [Thread-167452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:27:53.694 [DEBUG] [Thread-167452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:27:53.694 [DEBUG] [Thread-167452] [transport.py] [_log()] Compression: none
2026-04-11T09:27:53.694 [DEBUG] [Thread-167452] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:27:53.754 [DEBUG] [Thread-167452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:27:53.755 [DEBUG] [Thread-167452] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:27:53.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:27:53.756 [DEBUG] [Thread-167452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:27:53.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:27:53.811 [DEBUG] [Thread-167452] [transport.py] [_log()] userauth is OK
2026-04-11T09:27:53.811 [DEBUG] [Thread-167452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:27:53.812 [DEBUG] [Thread-167452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:27:53.812 [DEBUG] [Thread-167452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:27:53.812 [DEBUG] [Thread-167452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:27:53.831 [INFO] [Thread-167452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:27:53.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:27:53.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:27:54.649 [DEBUG] [Thread-167452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:27:54.650 [DEBUG] [Thread-167452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:27:54.698 [DEBUG] [Thread-167452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:27:54.699 [DEBUG] [Thread-167452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:27:54.710 [DEBUG] [Thread-167452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:27:54.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:27:54.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:27:54.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-04-11T09:27:54.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:27:54.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:27:54.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:27:54.747 [DEBUG] [Thread-167452] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:27:56.468 [DEBUG] [Thread-167454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:01.546 [DEBUG] [Thread-167455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:16.591 [DEBUG] [Thread-167456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:28:24.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:28:24.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-04-11T09:28:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 27, 56), 0.092435, 99.3615, 0.0, 16.9744, 13.0028, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:28:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:27:56
2026-04-11T09:28:26.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:28:26.640 [DEBUG] [Thread-167457] [transport.py] [_log()] starting thread (client mode): 0xb0fcecb0
2026-04-11T09:28:26.640 [DEBUG] [Thread-167457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:28:26.661 [DEBUG] [Thread-167457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:28:26.662 [INFO] [Thread-167457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] client lang: <none>
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] server lang: <none>
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] kex follows: False
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] Compression: none
2026-04-11T09:28:26.665 [DEBUG] [Thread-167457] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:28:26.683 [DEBUG] [Thread-167457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:28:26.683 [DEBUG] [Thread-167457] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:28:26.684 [DEBUG] [Thread-167457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:28:26.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:28:26.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:28:26.686 [DEBUG] [Thread-167457] [transport.py] [_log()] userauth is OK
2026-04-11T09:28:26.686 [DEBUG] [Thread-167457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:28:26.686 [DEBUG] [Thread-167457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:28:26.686 [DEBUG] [Thread-167457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:28:26.686 [DEBUG] [Thread-167457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:28:26.710 [INFO] [Thread-167457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:28:26.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:28:27.525 [DEBUG] [Thread-167457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:28:27.525 [DEBUG] [Thread-167457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:28:27.526 [DEBUG] [Thread-167457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:28:27.566 [DEBUG] [Thread-167457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:28:27.567 [DEBUG] [Thread-167457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:28:27.570 [DEBUG] [Thread-167457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:28:27.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:28:27.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:28:27.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:28:27.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:28:27.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:28:27.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:28:27.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:28:27.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:28:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:28:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.310885 -999.00  +12.90  18.84     97  +12.40 1 3 1 3 1   887    0 0.41 -0.93 ----- 20.4 18.8 128.6 22.8 13.9 -0.6 13.9 -0.2 13.8 -0.4 14.1 -0.6
2026-04-11T09:28:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:28:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:28:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.310885
2026-04-11T09:28:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:28:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:28:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:28:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:28:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:28:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:27:56', tmtdew=0.092435, humidity=99.3615, cloud=0.0, wind=16.9744, temperature=13.0028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:27:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:28:27.598 [DEBUG] [Thread-167457] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:28:27.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:28:27.692 [DEBUG] [Thread-167460] [transport.py] [_log()] starting thread (client mode): 0xae5f07f0
2026-04-11T09:28:27.692 [DEBUG] [Thread-167460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:28:27.710 [DEBUG] [Thread-167460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:28:27.710 [INFO] [Thread-167460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:28:27.717 [DEBUG] [Thread-167460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:28:27.718 [DEBUG] [Thread-167460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:28:27.718 [DEBUG] [Thread-167460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:28:27.718 [DEBUG] [Thread-167460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:28:27.718 [DEBUG] [Thread-167460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:28:27.718 [DEBUG] [Thread-167460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:28:27.718 [DEBUG] [Thread-167460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] client lang: <none>
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] server lang: <none>
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] kex follows: False
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] Compression: none
2026-04-11T09:28:27.719 [DEBUG] [Thread-167460] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:28:27.773 [DEBUG] [Thread-167460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:28:27.773 [DEBUG] [Thread-167460] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:28:27.774 [DEBUG] [Thread-167460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:28:27.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:28:27.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:28:27.834 [DEBUG] [Thread-167460] [transport.py] [_log()] userauth is OK
2026-04-11T09:28:27.834 [DEBUG] [Thread-167460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:28:27.834 [DEBUG] [Thread-167460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:28:27.834 [DEBUG] [Thread-167460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:28:27.834 [DEBUG] [Thread-167460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:28:27.851 [INFO] [Thread-167460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:28:27.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:28:27.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:28:27.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:28.001 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:28.685 [DEBUG] [Thread-167460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:28:28.685 [DEBUG] [Thread-167460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:28:28.733 [DEBUG] [Thread-167460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:28:28.733 [DEBUG] [Thread-167460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:28:28.742 [DEBUG] [Thread-167460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:28:28.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:28:28.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:28:28.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-04-11T09:28:28.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:28:28.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:28:28.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:28:28.779 [DEBUG] [Thread-167460] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:28:31.628 [DEBUG] [Thread-167462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:46.681 [DEBUG] [Thread-167463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:56.523 [DEBUG] [Thread-167464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:28:58.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:28:58.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:28:58.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:29:00.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 28, 31), 0.087285, 99.3947, 0.0, 18.562, 13.0028, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:29:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:28:31
2026-04-11T09:29:00.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:29:00.679 [DEBUG] [Thread-167465] [transport.py] [_log()] starting thread (client mode): 0xae516320
2026-04-11T09:29:00.679 [DEBUG] [Thread-167465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:29:00.699 [DEBUG] [Thread-167465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:29:00.699 [INFO] [Thread-167465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:29:00.702 [DEBUG] [Thread-167465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:29:00.702 [DEBUG] [Thread-167465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:29:00.702 [DEBUG] [Thread-167465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:29:00.702 [DEBUG] [Thread-167465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:00.702 [DEBUG] [Thread-167465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] client lang: <none>
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] server lang: <none>
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] kex follows: False
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] Compression: none
2026-04-11T09:29:00.703 [DEBUG] [Thread-167465] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:29:00.719 [DEBUG] [Thread-167465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:29:00.719 [DEBUG] [Thread-167465] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:29:00.720 [DEBUG] [Thread-167465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:29:00.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:29:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:29:00.722 [DEBUG] [Thread-167465] [transport.py] [_log()] userauth is OK
2026-04-11T09:29:00.722 [DEBUG] [Thread-167465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:29:00.722 [DEBUG] [Thread-167465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:29:00.722 [DEBUG] [Thread-167465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:29:00.723 [DEBUG] [Thread-167465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:29:00.744 [INFO] [Thread-167465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:29:00.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:29:01.521 [DEBUG] [Thread-167465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:29:01.521 [DEBUG] [Thread-167465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:29:01.522 [DEBUG] [Thread-167465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:29:01.562 [DEBUG] [Thread-167465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:29:01.562 [DEBUG] [Thread-167465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:29:01.564 [DEBUG] [Thread-167465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:29:01.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:29:01.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:29:01.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:29:01.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:29:01.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:29:01.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:29:01.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.311233 -999.00  +12.90  17.08     97  +12.40 1 3 1 3 1   887    0 0.43 -0.37 ----- 12.7 17.1 93.4 24.5 13.9 -0.6 13.9 -0.6 13.8 -0.5 14.1 -0.8
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.311233
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:29:01.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:28:31', tmtdew=0.087285, humidity=99.3947, cloud=0.0, wind=18.562, temperature=13.0028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:28:10.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:29:01.583 [DEBUG] [Thread-167465] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:29:01.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:29:01.667 [DEBUG] [Thread-167468] [transport.py] [_log()] starting thread (client mode): 0xb0f8c3d0
2026-04-11T09:29:01.667 [DEBUG] [Thread-167468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:29:01.681 [DEBUG] [Thread-167468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:29:01.681 [INFO] [Thread-167468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] client lang: <none>
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] server lang: <none>
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] kex follows: False
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:29:01.689 [DEBUG] [Thread-167468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:29:01.690 [DEBUG] [Thread-167468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:29:01.690 [DEBUG] [Thread-167468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:29:01.690 [DEBUG] [Thread-167468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:29:01.690 [DEBUG] [Thread-167468] [transport.py] [_log()] Compression: none
2026-04-11T09:29:01.690 [DEBUG] [Thread-167468] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:29:01.718 [DEBUG] [Thread-167470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:29:01.746 [DEBUG] [Thread-167468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:29:01.746 [DEBUG] [Thread-167468] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:29:01.747 [DEBUG] [Thread-167468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:29:01.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:29:01.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:29:01.807 [DEBUG] [Thread-167468] [transport.py] [_log()] userauth is OK
2026-04-11T09:29:01.807 [DEBUG] [Thread-167468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:29:01.808 [DEBUG] [Thread-167468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:29:01.808 [DEBUG] [Thread-167468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:29:01.808 [DEBUG] [Thread-167468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:29:01.827 [INFO] [Thread-167468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:29:01.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:29:01.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:29:02.670 [DEBUG] [Thread-167468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:29:02.671 [DEBUG] [Thread-167468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:29:02.719 [DEBUG] [Thread-167468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:29:02.719 [DEBUG] [Thread-167468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:29:02.730 [DEBUG] [Thread-167468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:29:02.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:29:02.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:29:02.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:29:02.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:29:02.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:29:02.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:29:02.767 [DEBUG] [Thread-167468] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:29:16.773 [DEBUG] [Thread-167471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:29:28.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:29:28.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:29:31.809 [DEBUG] [Thread-167472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:29:32.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:29:32.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:29:32.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-04-11T09:29:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 29, 7), 0.084725, 99.4113, 0.0, 16.8156, 13.036, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:29:34.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:29:07
2026-04-11T09:29:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:29:34.616 [DEBUG] [Thread-167473] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb30
2026-04-11T09:29:34.616 [DEBUG] [Thread-167473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:29:34.637 [DEBUG] [Thread-167473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:29:34.638 [INFO] [Thread-167473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] client lang: <none>
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] server lang: <none>
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] kex follows: False
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:29:34.641 [DEBUG] [Thread-167473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:29:34.642 [DEBUG] [Thread-167473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:29:34.642 [DEBUG] [Thread-167473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:29:34.642 [DEBUG] [Thread-167473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:29:34.642 [DEBUG] [Thread-167473] [transport.py] [_log()] Compression: none
2026-04-11T09:29:34.642 [DEBUG] [Thread-167473] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:29:34.660 [DEBUG] [Thread-167473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:29:34.660 [DEBUG] [Thread-167473] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:29:34.661 [DEBUG] [Thread-167473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:29:34.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:29:34.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:29:34.663 [DEBUG] [Thread-167473] [transport.py] [_log()] userauth is OK
2026-04-11T09:29:34.664 [DEBUG] [Thread-167473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:29:34.664 [DEBUG] [Thread-167473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:29:34.664 [DEBUG] [Thread-167473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:29:34.664 [DEBUG] [Thread-167473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:29:34.689 [INFO] [Thread-167473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:29:34.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:29:35.469 [DEBUG] [Thread-167473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:29:35.469 [DEBUG] [Thread-167473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:29:35.469 [DEBUG] [Thread-167473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:29:35.510 [DEBUG] [Thread-167473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:29:35.510 [DEBUG] [Thread-167473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:29:35.514 [DEBUG] [Thread-167473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:29:35.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:29:35.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:29:35.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:29:35.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:29:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:29:35.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:29:35.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:29:35.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:29:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:29:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.311580 -999.00  +12.90  20.48     97  +12.40 1 3 1 3 1   887    0 0.43 0.21 ----- 19.6 20.5 92.1 26.6 13.9 -1.1 13.9 -0.3 13.8 -0.3 14.1 -0.7
2026-04-11T09:29:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:29:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:29:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.311580
2026-04-11T09:29:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:29:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:29:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:29:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:29:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:29:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:29:07', tmtdew=0.084725, humidity=99.4113, cloud=0.0, wind=16.8156, temperature=13.036, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:28:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:29:35.542 [DEBUG] [Thread-167473] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:29:35.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:29:35.636 [DEBUG] [Thread-167476] [transport.py] [_log()] starting thread (client mode): 0xae5a56c0
2026-04-11T09:29:35.636 [DEBUG] [Thread-167476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:29:35.655 [DEBUG] [Thread-167476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:29:35.655 [INFO] [Thread-167476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:29:35.665 [DEBUG] [Thread-167476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:29:35.666 [DEBUG] [Thread-167476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:29:35.667 [DEBUG] [Thread-167476] [transport.py] [_log()] client lang: <none>
2026-04-11T09:29:35.667 [DEBUG] [Thread-167476] [transport.py] [_log()] server lang: <none>
2026-04-11T09:29:35.667 [DEBUG] [Thread-167476] [transport.py] [_log()] kex follows: False
2026-04-11T09:29:35.667 [DEBUG] [Thread-167476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:29:35.667 [DEBUG] [Thread-167476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:29:35.668 [DEBUG] [Thread-167476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:29:35.668 [DEBUG] [Thread-167476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:29:35.668 [DEBUG] [Thread-167476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:29:35.668 [DEBUG] [Thread-167476] [transport.py] [_log()] Compression: none
2026-04-11T09:29:35.668 [DEBUG] [Thread-167476] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:29:35.721 [DEBUG] [Thread-167476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:29:35.722 [DEBUG] [Thread-167476] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:29:35.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:29:35.723 [DEBUG] [Thread-167476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:29:35.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:29:35.778 [DEBUG] [Thread-167476] [transport.py] [_log()] userauth is OK
2026-04-11T09:29:35.778 [DEBUG] [Thread-167476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:29:35.778 [DEBUG] [Thread-167476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:29:35.778 [DEBUG] [Thread-167476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:29:35.779 [DEBUG] [Thread-167476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:29:35.797 [INFO] [Thread-167476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:29:35.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:29:35.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:29:36.638 [DEBUG] [Thread-167476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:29:36.639 [DEBUG] [Thread-167476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:29:36.686 [DEBUG] [Thread-167476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:29:36.686 [DEBUG] [Thread-167476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:29:36.696 [DEBUG] [Thread-167476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:29:36.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:29:36.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-04-11T09:29:36.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-04-11T09:29:36.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:29:36.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:29:36.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:29:36.732 [DEBUG] [Thread-167476] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:29:46.847 [DEBUG] [Thread-167478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:29:56.596 [DEBUG] [Thread-167479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:01.912 [DEBUG] [Thread-167480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:06.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:30:06.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:30:06.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-04-11T09:30:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 29, 42), 0.18487, 98.7231, 0.0, 22.4064, 13.4388, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:30:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:29:42
2026-04-11T09:30:08.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:30:08.649 [DEBUG] [Thread-167481] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d60
2026-04-11T09:30:08.649 [DEBUG] [Thread-167481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:30:08.663 [DEBUG] [Thread-167481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:30:08.663 [INFO] [Thread-167481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] client lang: <none>
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] server lang: <none>
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] kex follows: False
2026-04-11T09:30:08.666 [DEBUG] [Thread-167481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:30:08.667 [DEBUG] [Thread-167481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:30:08.667 [DEBUG] [Thread-167481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:30:08.667 [DEBUG] [Thread-167481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:30:08.667 [DEBUG] [Thread-167481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:30:08.667 [DEBUG] [Thread-167481] [transport.py] [_log()] Compression: none
2026-04-11T09:30:08.667 [DEBUG] [Thread-167481] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:30:08.684 [DEBUG] [Thread-167481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:30:08.685 [DEBUG] [Thread-167481] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:30:08.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:30:08.686 [DEBUG] [Thread-167481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:30:08.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:30:08.688 [DEBUG] [Thread-167481] [transport.py] [_log()] userauth is OK
2026-04-11T09:30:08.689 [DEBUG] [Thread-167481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:30:08.689 [DEBUG] [Thread-167481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:30:08.689 [DEBUG] [Thread-167481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:30:08.689 [DEBUG] [Thread-167481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:30:08.714 [INFO] [Thread-167481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:30:08.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:30:16.948 [DEBUG] [Thread-167483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:19.686 [DEBUG] [Thread-167481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:30:19.687 [DEBUG] [Thread-167481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:30:19.687 [DEBUG] [Thread-167481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:30:19.729 [DEBUG] [Thread-167481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:30:19.729 [DEBUG] [Thread-167481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:30:19.733 [DEBUG] [Thread-167481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:30:19.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:30:19.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:30:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:30:19.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:30:19.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:30:19.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:30:19.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:30:19.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:30:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:30:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.311927 -999.00  +12.90  16.65     97  +12.40 1 3 1 3 1   887    0 0.45 0.34 ----- 10.5 16.6 67.9 22.9 13.9 -0.3 13.9 -0.4 13.8 -0.4 14.1 -0.7
2026-04-11T09:30:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:30:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:30:19.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.311927
2026-04-11T09:30:19.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:30:19.810 [DEBUG] [Thread-167481] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:30:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:30:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:30:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:30:19.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:30:19.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:29:42', tmtdew=0.18487, humidity=98.7231, cloud=0.0, wind=22.4064, temperature=13.4388, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:29:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:30:19.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:30:19.914 [DEBUG] [Thread-167485] [transport.py] [_log()] starting thread (client mode): 0xae5a7940
2026-04-11T09:30:19.914 [DEBUG] [Thread-167485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:30:19.933 [DEBUG] [Thread-167485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:30:19.933 [INFO] [Thread-167485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] client lang: <none>
2026-04-11T09:30:19.941 [DEBUG] [Thread-167485] [transport.py] [_log()] server lang: <none>
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] kex follows: False
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] Compression: none
2026-04-11T09:30:19.942 [DEBUG] [Thread-167485] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:30:20.005 [DEBUG] [Thread-167485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:30:20.006 [DEBUG] [Thread-167485] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:30:20.006 [DEBUG] [Thread-167485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:30:20.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:30:20.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:30:20.066 [DEBUG] [Thread-167485] [transport.py] [_log()] userauth is OK
2026-04-11T09:30:20.066 [DEBUG] [Thread-167485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:30:20.066 [DEBUG] [Thread-167485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:30:20.067 [DEBUG] [Thread-167485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:30:20.067 [DEBUG] [Thread-167485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:30:20.088 [INFO] [Thread-167485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:30:20.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:30:20.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:30:20.928 [DEBUG] [Thread-167485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:30:20.928 [DEBUG] [Thread-167485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:30:20.976 [DEBUG] [Thread-167485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:30:20.977 [DEBUG] [Thread-167485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:30:20.986 [DEBUG] [Thread-167485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:30:20.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:30:20.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-04-11T09:30:21.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-04-11T09:30:21.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:30:21.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:30:21.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:30:21.024 [DEBUG] [Thread-167485] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:30:28.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:28.285 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:31.993 [DEBUG] [Thread-167487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:47.049 [DEBUG] [Thread-167488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:30:51.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:30:51.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:30:51.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-04-11T09:30:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 30, 18), 0.13474, 99.4113, 0.0, 17.7322, 13.0526, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:30:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:30:18
2026-04-11T09:30:52.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:30:52.822 [DEBUG] [Thread-167489] [transport.py] [_log()] starting thread (client mode): 0xae51b670
2026-04-11T09:30:52.822 [DEBUG] [Thread-167489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:30:52.852 [DEBUG] [Thread-167489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:30:52.852 [INFO] [Thread-167489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:30:52.855 [DEBUG] [Thread-167489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:30:52.855 [DEBUG] [Thread-167489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:30:52.855 [DEBUG] [Thread-167489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] client lang: <none>
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] server lang: <none>
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] kex follows: False
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] Compression: none
2026-04-11T09:30:52.856 [DEBUG] [Thread-167489] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:30:52.875 [DEBUG] [Thread-167489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:30:52.875 [DEBUG] [Thread-167489] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:30:52.876 [DEBUG] [Thread-167489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:30:52.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:30:52.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:30:52.881 [DEBUG] [Thread-167489] [transport.py] [_log()] userauth is OK
2026-04-11T09:30:52.881 [DEBUG] [Thread-167489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:30:52.881 [DEBUG] [Thread-167489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:30:52.881 [DEBUG] [Thread-167489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:30:52.881 [DEBUG] [Thread-167489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:30:52.908 [INFO] [Thread-167489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:30:52.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:30:53.712 [DEBUG] [Thread-167489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:30:53.712 [DEBUG] [Thread-167489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:30:53.713 [DEBUG] [Thread-167489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:30:53.755 [DEBUG] [Thread-167489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:30:53.755 [DEBUG] [Thread-167489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:30:53.760 [DEBUG] [Thread-167489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:30:53.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:30:53.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:30:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:30:53.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:30:53.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:30:53.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:30:53.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:30:53.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:30:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:30:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.312621 -999.00  +12.90  10.82     97  +12.40 1 3 1 3 1   887    0 0.46 0.59 ----- 12.2 10.8 115.0 16.2 13.9 -0.7 13.9 -0.2 13.8 -0.3 14.1 -0.5
2026-04-11T09:30:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:30:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:30:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.312621
2026-04-11T09:30:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:30:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:30:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:30:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:30:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:30:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:30:18', tmtdew=0.13474, humidity=99.4113, cloud=0.0, wind=17.7322, temperature=13.0526, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:30:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:30:53.789 [DEBUG] [Thread-167489] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:30:53.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:30:53.881 [DEBUG] [Thread-167492] [transport.py] [_log()] starting thread (client mode): 0xae51b3a0
2026-04-11T09:30:53.881 [DEBUG] [Thread-167492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:30:53.896 [DEBUG] [Thread-167492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:30:53.896 [INFO] [Thread-167492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:30:53.904 [DEBUG] [Thread-167492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:30:53.905 [DEBUG] [Thread-167492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:30:53.905 [DEBUG] [Thread-167492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] client lang: <none>
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] server lang: <none>
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] kex follows: False
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:30:53.906 [DEBUG] [Thread-167492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:30:53.907 [DEBUG] [Thread-167492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:30:53.907 [DEBUG] [Thread-167492] [transport.py] [_log()] Compression: none
2026-04-11T09:30:53.907 [DEBUG] [Thread-167492] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:30:53.965 [DEBUG] [Thread-167492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:30:53.965 [DEBUG] [Thread-167492] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:30:53.966 [DEBUG] [Thread-167492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:30:53.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:30:53.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:30:54.021 [DEBUG] [Thread-167492] [transport.py] [_log()] userauth is OK
2026-04-11T09:30:54.021 [DEBUG] [Thread-167492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:30:54.021 [DEBUG] [Thread-167492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:30:54.021 [DEBUG] [Thread-167492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:30:54.021 [DEBUG] [Thread-167492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:30:54.039 [INFO] [Thread-167492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:30:54.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:30:54.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:30:54.903 [DEBUG] [Thread-167492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:30:54.904 [DEBUG] [Thread-167492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:30:54.951 [DEBUG] [Thread-167492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:30:54.951 [DEBUG] [Thread-167492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:30:54.961 [DEBUG] [Thread-167492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:30:54.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:30:54.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-04-11T09:30:54.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-04-11T09:30:54.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:30:54.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:30:54.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:30:54.998 [DEBUG] [Thread-167492] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:30:56.640 [DEBUG] [Thread-167494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:02.087 [DEBUG] [Thread-167495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:17.152 [DEBUG] [Thread-167496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:31:25.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:31:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:31:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 30, 53), 0.17473, 98.7886, 0.0, 20.9952, 13.4714, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:31:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:30:53
2026-04-11T09:31:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:31:26.939 [DEBUG] [Thread-167497] [transport.py] [_log()] starting thread (client mode): 0xae51bf40
2026-04-11T09:31:26.939 [DEBUG] [Thread-167497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:31:26.960 [DEBUG] [Thread-167497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:31:26.960 [INFO] [Thread-167497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] client lang: <none>
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] server lang: <none>
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] kex follows: False
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] Compression: none
2026-04-11T09:31:26.963 [DEBUG] [Thread-167497] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:31:26.982 [DEBUG] [Thread-167497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:31:26.983 [DEBUG] [Thread-167497] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:31:26.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:31:26.984 [DEBUG] [Thread-167497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:31:26.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:31:26.986 [DEBUG] [Thread-167497] [transport.py] [_log()] userauth is OK
2026-04-11T09:31:26.987 [DEBUG] [Thread-167497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:31:26.987 [DEBUG] [Thread-167497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:31:26.987 [DEBUG] [Thread-167497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:31:26.987 [DEBUG] [Thread-167497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:31:27.012 [INFO] [Thread-167497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:31:27.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:31:27.826 [DEBUG] [Thread-167497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:31:27.827 [DEBUG] [Thread-167497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:31:27.827 [DEBUG] [Thread-167497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:31:27.868 [DEBUG] [Thread-167497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:31:27.868 [DEBUG] [Thread-167497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:31:27.871 [DEBUG] [Thread-167497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:31:27.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:31:27.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:31:27.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:31:27.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:31:27.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:31:27.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:31:27.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:31:27.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:31:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:31:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.312969 -999.00  +12.90  15.56     97  +12.50 1 3 1 3 1   887    0 0.45 0.28 ----- 12.6 15.6 69.4 23.6 13.9 -0.4 13.9 -0.3 13.8 -0.4 14.1 -0.6
2026-04-11T09:31:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:31:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:31:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.312969
2026-04-11T09:31:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:31:27.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:31:27.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:31:27.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:31:27.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:31:27.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:30:53', tmtdew=0.17473, humidity=98.7886, cloud=0.0, wind=20.9952, temperature=13.4714, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:30:40.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:31:27.885 [DEBUG] [Thread-167497] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:31:27.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:31:27.978 [DEBUG] [Thread-167500] [transport.py] [_log()] starting thread (client mode): 0xa7950910
2026-04-11T09:31:27.978 [DEBUG] [Thread-167500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:31:27.997 [DEBUG] [Thread-167500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:31:27.997 [INFO] [Thread-167500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] client lang: <none>
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] server lang: <none>
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] kex follows: False
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:31:28.009 [DEBUG] [Thread-167500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:31:28.010 [DEBUG] [Thread-167500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:31:28.010 [DEBUG] [Thread-167500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:31:28.010 [DEBUG] [Thread-167500] [transport.py] [_log()] Compression: none
2026-04-11T09:31:28.010 [DEBUG] [Thread-167500] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:31:28.073 [DEBUG] [Thread-167500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:31:28.073 [DEBUG] [Thread-167500] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:31:28.073 [DEBUG] [Thread-167500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:31:28.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:31:28.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:31:28.141 [DEBUG] [Thread-167500] [transport.py] [_log()] userauth is OK
2026-04-11T09:31:28.141 [DEBUG] [Thread-167500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:31:28.141 [DEBUG] [Thread-167500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:31:28.141 [DEBUG] [Thread-167500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:31:28.141 [DEBUG] [Thread-167500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:31:28.170 [INFO] [Thread-167500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:31:28.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:31:28.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:31:28.426 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:28.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:29.045 [DEBUG] [Thread-167500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:31:29.045 [DEBUG] [Thread-167500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:31:29.094 [DEBUG] [Thread-167500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:31:29.094 [DEBUG] [Thread-167500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:31:29.104 [DEBUG] [Thread-167500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:31:29.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:31:29.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-04-11T09:31:29.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:31:29.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:31:29.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:31:29.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:31:29.141 [DEBUG] [Thread-167500] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:31:32.189 [DEBUG] [Thread-167502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:47.238 [DEBUG] [Thread-167503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:56.694 [DEBUG] [Thread-167504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:31:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:31:59.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:31:59.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-04-11T09:32:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 31, 29), 0.13735, 99.3944, 0.0, 21.7901, 13.0358, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:32:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:31:29
2026-04-11T09:32:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:32:01.010 [DEBUG] [Thread-167505] [transport.py] [_log()] starting thread (client mode): 0xb0fb5390
2026-04-11T09:32:01.010 [DEBUG] [Thread-167505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:32:01.032 [DEBUG] [Thread-167505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:32:01.032 [INFO] [Thread-167505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:32:01.035 [DEBUG] [Thread-167505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:32:01.035 [DEBUG] [Thread-167505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:32:01.035 [DEBUG] [Thread-167505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:32:01.035 [DEBUG] [Thread-167505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:01.035 [DEBUG] [Thread-167505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] client lang: <none>
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] server lang: <none>
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] kex follows: False
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:32:01.036 [DEBUG] [Thread-167505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:32:01.037 [DEBUG] [Thread-167505] [transport.py] [_log()] Compression: none
2026-04-11T09:32:01.037 [DEBUG] [Thread-167505] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:32:01.057 [DEBUG] [Thread-167505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:32:01.058 [DEBUG] [Thread-167505] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:32:01.058 [DEBUG] [Thread-167505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:32:01.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:32:01.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:32:01.061 [DEBUG] [Thread-167505] [transport.py] [_log()] userauth is OK
2026-04-11T09:32:01.061 [DEBUG] [Thread-167505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:32:01.061 [DEBUG] [Thread-167505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:32:01.061 [DEBUG] [Thread-167505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:32:01.061 [DEBUG] [Thread-167505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:32:01.086 [INFO] [Thread-167505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:32:01.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:32:01.881 [DEBUG] [Thread-167505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:32:01.881 [DEBUG] [Thread-167505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:32:01.882 [DEBUG] [Thread-167505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:32:01.922 [DEBUG] [Thread-167505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:32:01.922 [DEBUG] [Thread-167505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:32:01.924 [DEBUG] [Thread-167505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:32:01.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:32:01.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:32:01.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:32:01.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:32:01.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:32:01.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:32:01.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.313316 -999.00  +12.90  15.98     97  +12.50 1 3 1 3 1   887    0 0.45 0.28 ----- 18.3 16.0 114.9 22.9 14.0 -1.3 14.0 -0.3 13.9 -0.2 14.2 -0.3
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.313316
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:32:01.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:32:01.935 [DEBUG] [Thread-167505] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:32:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:32:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:31:29', tmtdew=0.13735, humidity=99.3944, cloud=0.0, wind=21.7901, temperature=13.0358, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:31:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:32:02.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:32:02.022 [DEBUG] [Thread-167508] [transport.py] [_log()] starting thread (client mode): 0xae5a6230
2026-04-11T09:32:02.022 [DEBUG] [Thread-167508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:32:02.036 [DEBUG] [Thread-167508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:32:02.036 [INFO] [Thread-167508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] client lang: <none>
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] server lang: <none>
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] kex follows: False
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:32:02.044 [DEBUG] [Thread-167508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:32:02.045 [DEBUG] [Thread-167508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:32:02.045 [DEBUG] [Thread-167508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:32:02.045 [DEBUG] [Thread-167508] [transport.py] [_log()] Compression: none
2026-04-11T09:32:02.045 [DEBUG] [Thread-167508] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:32:02.105 [DEBUG] [Thread-167508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:32:02.105 [DEBUG] [Thread-167508] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:32:02.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:32:02.106 [DEBUG] [Thread-167508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:32:02.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:32:02.164 [DEBUG] [Thread-167508] [transport.py] [_log()] userauth is OK
2026-04-11T09:32:02.164 [DEBUG] [Thread-167508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:32:02.164 [DEBUG] [Thread-167508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:32:02.164 [DEBUG] [Thread-167508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:32:02.165 [DEBUG] [Thread-167508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:32:02.183 [INFO] [Thread-167508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:32:02.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:32:02.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:32:02.284 [DEBUG] [Thread-167510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:32:03.031 [DEBUG] [Thread-167508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:32:03.031 [DEBUG] [Thread-167508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:32:03.078 [DEBUG] [Thread-167508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:32:03.078 [DEBUG] [Thread-167508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:32:03.087 [DEBUG] [Thread-167508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:32:03.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:32:03.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-04-11T09:32:03.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:32:03.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:32:03.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:32:03.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:32:03.119 [DEBUG] [Thread-167508] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:32:17.344 [DEBUG] [Thread-167511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:32:28.568 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:32:28.569 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:32:32.381 [DEBUG] [Thread-167512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:32:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:32:33.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:32:33.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-04-11T09:32:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 32, 4), 0.13734, 99.3944, 0.0, 20.3436, 13.0192, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:32:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:32:04
2026-04-11T09:32:34.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:32:35.025 [DEBUG] [Thread-167513] [transport.py] [_log()] starting thread (client mode): 0xb0f6d1b0
2026-04-11T09:32:35.025 [DEBUG] [Thread-167513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:32:35.046 [DEBUG] [Thread-167513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:32:35.046 [INFO] [Thread-167513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] client lang: <none>
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] server lang: <none>
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] kex follows: False
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:32:35.049 [DEBUG] [Thread-167513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:32:35.050 [DEBUG] [Thread-167513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:32:35.050 [DEBUG] [Thread-167513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:32:35.050 [DEBUG] [Thread-167513] [transport.py] [_log()] Compression: none
2026-04-11T09:32:35.050 [DEBUG] [Thread-167513] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:32:35.067 [DEBUG] [Thread-167513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:32:35.068 [DEBUG] [Thread-167513] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:32:35.068 [DEBUG] [Thread-167513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:32:35.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:32:35.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:32:35.071 [DEBUG] [Thread-167513] [transport.py] [_log()] userauth is OK
2026-04-11T09:32:35.072 [DEBUG] [Thread-167513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:32:35.072 [DEBUG] [Thread-167513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:32:35.072 [DEBUG] [Thread-167513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:32:35.072 [DEBUG] [Thread-167513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:32:35.100 [INFO] [Thread-167513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:32:35.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:32:35.854 [DEBUG] [Thread-167513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:32:35.854 [DEBUG] [Thread-167513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:32:35.854 [DEBUG] [Thread-167513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:32:35.896 [DEBUG] [Thread-167513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:32:35.896 [DEBUG] [Thread-167513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:32:35.901 [DEBUG] [Thread-167513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:32:35.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:32:35.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:32:35.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:32:35.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:32:35.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:32:35.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:32:35.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:32:35.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:32:35.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:32:35.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.313663 -999.00  +12.90  12.84     97  +12.50 1 3 1 3 1   887    0 0.45 0.42 ----- 9.2 12.8 104.0 20.2 13.9 -0.8 14.0 -0.6 13.8 -0.6 14.2 -0.4
2026-04-11T09:32:35.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:32:35.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:32:35.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.313663
2026-04-11T09:32:35.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:32:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:32:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:32:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:32:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:32:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:32:04', tmtdew=0.13734, humidity=99.3944, cloud=0.0, wind=20.3436, temperature=13.0192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:31:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:32:35.927 [DEBUG] [Thread-167513] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:32:36.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:32:36.023 [DEBUG] [Thread-167516] [transport.py] [_log()] starting thread (client mode): 0xb0f8c2e0
2026-04-11T09:32:36.023 [DEBUG] [Thread-167516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:32:36.038 [DEBUG] [Thread-167516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:32:36.038 [INFO] [Thread-167516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:32:36.046 [DEBUG] [Thread-167516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:32:36.046 [DEBUG] [Thread-167516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] client lang: <none>
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] server lang: <none>
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] kex follows: False
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] Compression: none
2026-04-11T09:32:36.047 [DEBUG] [Thread-167516] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:32:36.104 [DEBUG] [Thread-167516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:32:36.104 [DEBUG] [Thread-167516] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:32:36.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:32:36.106 [DEBUG] [Thread-167516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:32:36.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:32:36.164 [DEBUG] [Thread-167516] [transport.py] [_log()] userauth is OK
2026-04-11T09:32:36.164 [DEBUG] [Thread-167516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:32:36.164 [DEBUG] [Thread-167516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:32:36.164 [DEBUG] [Thread-167516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:32:36.164 [DEBUG] [Thread-167516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:32:36.185 [INFO] [Thread-167516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:32:36.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:32:36.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:32:37.007 [DEBUG] [Thread-167516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:32:37.007 [DEBUG] [Thread-167516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:32:37.055 [DEBUG] [Thread-167516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:32:37.055 [DEBUG] [Thread-167516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:32:37.065 [DEBUG] [Thread-167516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:32:37.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:32:37.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:32:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:32:37.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:32:37.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:32:37.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:32:37.103 [DEBUG] [Thread-167516] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:32:47.419 [DEBUG] [Thread-167518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:32:56.767 [DEBUG] [Thread-167519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:02.482 [DEBUG] [Thread-167520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:33:07.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:33:07.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-04-11T09:33:08.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 32, 40), 0.19515, 98.6563, 0.0, 23.6412, 13.3059, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:33:08.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:32:40
2026-04-11T09:33:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:33:08.934 [DEBUG] [Thread-167521] [transport.py] [_log()] starting thread (client mode): 0xae518160
2026-04-11T09:33:08.934 [DEBUG] [Thread-167521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:33:08.956 [DEBUG] [Thread-167521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:33:08.957 [INFO] [Thread-167521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:33:08.960 [DEBUG] [Thread-167521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:33:08.960 [DEBUG] [Thread-167521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:33:08.960 [DEBUG] [Thread-167521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:33:08.960 [DEBUG] [Thread-167521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:08.960 [DEBUG] [Thread-167521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] client lang: <none>
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] server lang: <none>
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] kex follows: False
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:33:08.961 [DEBUG] [Thread-167521] [transport.py] [_log()] Compression: none
2026-04-11T09:33:08.962 [DEBUG] [Thread-167521] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:33:08.980 [DEBUG] [Thread-167521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:33:08.981 [DEBUG] [Thread-167521] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:33:08.981 [DEBUG] [Thread-167521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:33:08.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:33:08.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:33:08.983 [DEBUG] [Thread-167521] [transport.py] [_log()] userauth is OK
2026-04-11T09:33:08.983 [DEBUG] [Thread-167521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:33:08.983 [DEBUG] [Thread-167521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:33:08.984 [DEBUG] [Thread-167521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:33:08.984 [DEBUG] [Thread-167521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:33:09.007 [INFO] [Thread-167521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:33:09.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:33:09.760 [DEBUG] [Thread-167521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:33:09.760 [DEBUG] [Thread-167521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:33:09.760 [DEBUG] [Thread-167521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:33:09.801 [DEBUG] [Thread-167521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:33:09.801 [DEBUG] [Thread-167521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:33:09.805 [DEBUG] [Thread-167521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:33:09.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:33:09.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:33:09.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:33:09.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:33:09.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:33:09.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:33:09.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:33:09.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:33:09.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:33:09.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.314010 -999.00  +12.90  15.51     97  +12.50 1 3 1 3 1   887    0 0.44 0.27 ----- 20.2 15.5 106.8 23.6 13.9 -0.6 14.0 -0.4 13.8 -0.5 14.1 -0.8
2026-04-11T09:33:09.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:33:09.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:33:09.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.314010
2026-04-11T09:33:09.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:33:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:33:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:33:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:33:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:33:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:32:40', tmtdew=0.19515, humidity=98.6563, cloud=0.0, wind=23.6412, temperature=13.3059, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:32:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:33:09.835 [DEBUG] [Thread-167521] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:33:09.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:33:09.941 [DEBUG] [Thread-167524] [transport.py] [_log()] starting thread (client mode): 0xa7953a60
2026-04-11T09:33:09.941 [DEBUG] [Thread-167524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:33:09.956 [DEBUG] [Thread-167524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:33:09.956 [INFO] [Thread-167524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:33:09.963 [DEBUG] [Thread-167524] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:33:09.964 [DEBUG] [Thread-167524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:33:09.964 [DEBUG] [Thread-167524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:33:09.964 [DEBUG] [Thread-167524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:09.964 [DEBUG] [Thread-167524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:09.964 [DEBUG] [Thread-167524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:09.964 [DEBUG] [Thread-167524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] client lang: <none>
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] server lang: <none>
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] kex follows: False
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] Compression: none
2026-04-11T09:33:09.965 [DEBUG] [Thread-167524] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:33:10.024 [DEBUG] [Thread-167524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:33:10.025 [DEBUG] [Thread-167524] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:33:10.025 [DEBUG] [Thread-167524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:33:10.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:33:10.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:33:10.083 [DEBUG] [Thread-167524] [transport.py] [_log()] userauth is OK
2026-04-11T09:33:10.084 [DEBUG] [Thread-167524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:33:10.084 [DEBUG] [Thread-167524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:33:10.084 [DEBUG] [Thread-167524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:33:10.084 [DEBUG] [Thread-167524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:33:10.103 [INFO] [Thread-167524] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:33:10.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:33:10.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:33:10.925 [DEBUG] [Thread-167524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:33:10.925 [DEBUG] [Thread-167524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:33:10.974 [DEBUG] [Thread-167524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:33:10.975 [DEBUG] [Thread-167524] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:33:10.986 [DEBUG] [Thread-167524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:33:10.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:33:10.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:33:11.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-04-11T09:33:11.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:33:11.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:33:11.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:33:11.035 [DEBUG] [Thread-167524] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:33:17.520 [DEBUG] [Thread-167526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:28.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:28.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:32.577 [DEBUG] [Thread-167527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:33:41.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:33:41.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:33:42.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 33, 15), 0.13989, 99.3779, 0.0, 22.1789, 13.0027, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:33:42.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:33:15
2026-04-11T09:33:42.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:33:42.922 [DEBUG] [Thread-167528] [transport.py] [_log()] starting thread (client mode): 0xb0fcf430
2026-04-11T09:33:42.922 [DEBUG] [Thread-167528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:33:42.942 [DEBUG] [Thread-167528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:33:42.942 [INFO] [Thread-167528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] client lang: <none>
2026-04-11T09:33:42.946 [DEBUG] [Thread-167528] [transport.py] [_log()] server lang: <none>
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] kex follows: False
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] Compression: none
2026-04-11T09:33:42.947 [DEBUG] [Thread-167528] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:33:42.965 [DEBUG] [Thread-167528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:33:42.966 [DEBUG] [Thread-167528] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:33:42.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:33:42.967 [DEBUG] [Thread-167528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:33:42.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:33:42.968 [DEBUG] [Thread-167528] [transport.py] [_log()] userauth is OK
2026-04-11T09:33:42.969 [DEBUG] [Thread-167528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:33:42.969 [DEBUG] [Thread-167528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:33:42.969 [DEBUG] [Thread-167528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:33:42.969 [DEBUG] [Thread-167528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:33:42.985 [INFO] [Thread-167528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:33:42.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:33:43.737 [DEBUG] [Thread-167528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:33:43.737 [DEBUG] [Thread-167528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:33:43.737 [DEBUG] [Thread-167528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:33:43.778 [DEBUG] [Thread-167528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:33:43.778 [DEBUG] [Thread-167528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:33:43.781 [DEBUG] [Thread-167528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:33:43.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:33:43.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:33:43.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:33:43.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:33:43.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:33:43.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:33:43.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:33:43.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:33:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:33:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.314358 -999.00  +12.90  11.76     97  +12.50 1 3 1 3 1   887    0 0.45 -0.07 ----- 19.7 11.8 123.2 29.5 13.9 -0.5 13.9 -0.4 13.8 -0.6 14.1 -0.6
2026-04-11T09:33:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:33:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:33:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.314358
2026-04-11T09:33:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:33:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:33:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:33:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:33:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:33:43.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:33:15', tmtdew=0.13989, humidity=99.3779, cloud=0.0, wind=22.1789, temperature=13.0027, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:32:40.531', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:33:43.809 [DEBUG] [Thread-167528] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:33:43.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:33:43.900 [DEBUG] [Thread-167531] [transport.py] [_log()] starting thread (client mode): 0xb0fcda50
2026-04-11T09:33:43.900 [DEBUG] [Thread-167531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:33:43.914 [DEBUG] [Thread-167531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:33:43.914 [INFO] [Thread-167531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:43.922 [DEBUG] [Thread-167531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] client lang: <none>
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] server lang: <none>
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] kex follows: False
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:33:43.923 [DEBUG] [Thread-167531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:33:43.924 [DEBUG] [Thread-167531] [transport.py] [_log()] Compression: none
2026-04-11T09:33:43.924 [DEBUG] [Thread-167531] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:33:43.978 [DEBUG] [Thread-167531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:33:43.978 [DEBUG] [Thread-167531] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:33:43.979 [DEBUG] [Thread-167531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:33:43.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:33:43.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:33:44.034 [DEBUG] [Thread-167531] [transport.py] [_log()] userauth is OK
2026-04-11T09:33:44.034 [DEBUG] [Thread-167531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:33:44.034 [DEBUG] [Thread-167531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:33:44.035 [DEBUG] [Thread-167531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:33:44.035 [DEBUG] [Thread-167531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:33:44.053 [INFO] [Thread-167531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:33:44.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:33:44.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:33:44.882 [DEBUG] [Thread-167531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:33:44.882 [DEBUG] [Thread-167531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:33:44.929 [DEBUG] [Thread-167531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:33:44.929 [DEBUG] [Thread-167531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:33:44.938 [DEBUG] [Thread-167531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:33:44.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:33:44.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:33:44.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:33:44.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:33:44.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:33:44.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:33:44.972 [DEBUG] [Thread-167531] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:33:47.615 [DEBUG] [Thread-167533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:33:56.810 [DEBUG] [Thread-167534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:02.666 [DEBUG] [Thread-167535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:14.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:34:14.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:34:15.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-04-11T09:34:16.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 33, 51), 0.18505, 98.7219, 0.0, 24.5232, 13.4381, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:34:16.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:33:51
2026-04-11T09:34:16.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:34:16.787 [DEBUG] [Thread-167536] [transport.py] [_log()] starting thread (client mode): 0xae5a6230
2026-04-11T09:34:16.787 [DEBUG] [Thread-167536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:34:16.805 [DEBUG] [Thread-167536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:34:16.805 [INFO] [Thread-167536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:34:16.808 [DEBUG] [Thread-167536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:34:16.808 [DEBUG] [Thread-167536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:34:16.808 [DEBUG] [Thread-167536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] client lang: <none>
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] server lang: <none>
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] kex follows: False
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] Compression: none
2026-04-11T09:34:16.809 [DEBUG] [Thread-167536] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:34:16.826 [DEBUG] [Thread-167536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:34:16.827 [DEBUG] [Thread-167536] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:34:16.827 [DEBUG] [Thread-167536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:34:16.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:34:16.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:34:16.829 [DEBUG] [Thread-167536] [transport.py] [_log()] userauth is OK
2026-04-11T09:34:16.830 [DEBUG] [Thread-167536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:34:16.830 [DEBUG] [Thread-167536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:34:16.830 [DEBUG] [Thread-167536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:34:16.830 [DEBUG] [Thread-167536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:34:16.845 [INFO] [Thread-167536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:34:16.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:34:17.545 [DEBUG] [Thread-167536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:34:17.546 [DEBUG] [Thread-167536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:34:17.546 [DEBUG] [Thread-167536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:34:17.587 [DEBUG] [Thread-167536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:34:17.587 [DEBUG] [Thread-167536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:34:17.590 [DEBUG] [Thread-167536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:34:17.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:34:17.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:34:17.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:34:17.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:34:17.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:34:17.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:34:17.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:34:17.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:34:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:34:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.315052 -999.00  +12.90  18.25     97  +12.50 1 3 1 3 1   887    0 0.44 0.06 ----- 12.5 18.2 88.9 21.0 14.0 -0.4 14.0 -0.4 13.8 -0.5 14.1 -0.4
2026-04-11T09:34:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:34:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:34:17.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.315052
2026-04-11T09:34:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:34:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:34:17.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:34:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:34:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:34:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:33:51', tmtdew=0.18505, humidity=98.7219, cloud=0.0, wind=24.5232, temperature=13.4381, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:33:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:34:17.619 [DEBUG] [Thread-167536] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:34:17.702 [DEBUG] [Thread-167539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:17.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:34:17.714 [DEBUG] [Thread-167540] [transport.py] [_log()] starting thread (client mode): 0xb0fcdcf0
2026-04-11T09:34:17.714 [DEBUG] [Thread-167540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:34:17.728 [DEBUG] [Thread-167540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:34:17.728 [INFO] [Thread-167540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:17.735 [DEBUG] [Thread-167540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] client lang: <none>
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] server lang: <none>
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] kex follows: False
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] Compression: none
2026-04-11T09:34:17.736 [DEBUG] [Thread-167540] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:34:17.796 [DEBUG] [Thread-167540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:34:17.796 [DEBUG] [Thread-167540] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:34:17.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:34:17.798 [DEBUG] [Thread-167540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:34:17.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:34:17.855 [DEBUG] [Thread-167540] [transport.py] [_log()] userauth is OK
2026-04-11T09:34:17.855 [DEBUG] [Thread-167540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:34:17.856 [DEBUG] [Thread-167540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:34:17.856 [DEBUG] [Thread-167540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:34:17.856 [DEBUG] [Thread-167540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:34:17.874 [INFO] [Thread-167540] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:34:17.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:34:17.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:34:18.717 [DEBUG] [Thread-167540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:34:18.717 [DEBUG] [Thread-167540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:34:18.765 [DEBUG] [Thread-167540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:34:18.765 [DEBUG] [Thread-167540] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:34:18.774 [DEBUG] [Thread-167540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:34:18.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:34:18.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:34:18.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-04-11T09:34:18.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:34:18.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:34:18.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:34:18.813 [DEBUG] [Thread-167540] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:34:28.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:28.853 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:32.746 [DEBUG] [Thread-167542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:47.778 [DEBUG] [Thread-167543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:34:48.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:34:48.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:34:48.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-04-11T09:34:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 34, 26), 0.13739, 99.3941, 0.0, 15.633, 13.0356, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:34:50.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:34:26
2026-04-11T09:34:50.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:34:50.636 [DEBUG] [Thread-167544] [transport.py] [_log()] starting thread (client mode): 0xb0fb6ce0
2026-04-11T09:34:50.636 [DEBUG] [Thread-167544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:34:50.657 [DEBUG] [Thread-167544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:34:50.657 [INFO] [Thread-167544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] client lang: <none>
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] server lang: <none>
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] kex follows: False
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] Compression: none
2026-04-11T09:34:50.661 [DEBUG] [Thread-167544] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:34:50.678 [DEBUG] [Thread-167544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:34:50.679 [DEBUG] [Thread-167544] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:34:50.679 [DEBUG] [Thread-167544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:34:50.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:34:50.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:34:50.682 [DEBUG] [Thread-167544] [transport.py] [_log()] userauth is OK
2026-04-11T09:34:50.683 [DEBUG] [Thread-167544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:34:50.683 [DEBUG] [Thread-167544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:34:50.683 [DEBUG] [Thread-167544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:34:50.683 [DEBUG] [Thread-167544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:34:50.719 [INFO] [Thread-167544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:34:50.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:34:51.474 [DEBUG] [Thread-167544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:34:51.475 [DEBUG] [Thread-167544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:34:51.475 [DEBUG] [Thread-167544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:34:51.517 [DEBUG] [Thread-167544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:34:51.517 [DEBUG] [Thread-167544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:34:51.521 [DEBUG] [Thread-167544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:34:51.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:34:51.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:34:51.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:34:51.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:34:51.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:34:51.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:34:51.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:34:51.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:34:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:34:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.315399 -999.00  +13.00  17.65     97  +12.50 1 3 1 3 1   887    0 0.44 0.06 ----- 24.7 17.6 96.7 22.8 14.0 -0.4 14.0 -0.3 13.8 -0.2 14.2 -0.5
2026-04-11T09:34:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:34:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:34:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.315399
2026-04-11T09:34:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:34:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:34:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:34:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:34:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:34:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:34:26', tmtdew=0.13739, humidity=99.3941, cloud=0.0, wind=15.633, temperature=13.0356, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:34:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:34:51.550 [DEBUG] [Thread-167544] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:34:51.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:34:51.644 [DEBUG] [Thread-167547] [transport.py] [_log()] starting thread (client mode): 0xb0f8c040
2026-04-11T09:34:51.644 [DEBUG] [Thread-167547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:34:51.659 [DEBUG] [Thread-167547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:34:51.659 [INFO] [Thread-167547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:34:51.667 [DEBUG] [Thread-167547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:34:51.667 [DEBUG] [Thread-167547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:34:51.667 [DEBUG] [Thread-167547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] client lang: <none>
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] server lang: <none>
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] kex follows: False
2026-04-11T09:34:51.668 [DEBUG] [Thread-167547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:34:51.669 [DEBUG] [Thread-167547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:34:51.669 [DEBUG] [Thread-167547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:34:51.669 [DEBUG] [Thread-167547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:34:51.669 [DEBUG] [Thread-167547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:34:51.669 [DEBUG] [Thread-167547] [transport.py] [_log()] Compression: none
2026-04-11T09:34:51.669 [DEBUG] [Thread-167547] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:34:51.726 [DEBUG] [Thread-167547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:34:51.726 [DEBUG] [Thread-167547] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:34:51.727 [DEBUG] [Thread-167547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:34:51.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:34:51.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:34:51.787 [DEBUG] [Thread-167547] [transport.py] [_log()] userauth is OK
2026-04-11T09:34:51.787 [DEBUG] [Thread-167547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:34:51.788 [DEBUG] [Thread-167547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:34:51.788 [DEBUG] [Thread-167547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:34:51.788 [DEBUG] [Thread-167547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:34:51.807 [INFO] [Thread-167547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:34:51.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:34:51.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:34:52.696 [DEBUG] [Thread-167547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:34:52.697 [DEBUG] [Thread-167547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:34:52.747 [DEBUG] [Thread-167547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:34:52.747 [DEBUG] [Thread-167547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:34:52.759 [DEBUG] [Thread-167547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:34:52.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:34:52.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-04-11T09:34:52.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:34:52.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:34:52.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:34:52.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:34:52.807 [DEBUG] [Thread-167547] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:34:56.854 [DEBUG] [Thread-167549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:02.816 [DEBUG] [Thread-167550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:17.875 [DEBUG] [Thread-167551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:22.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:35:22.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:35:22.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-04-11T09:35:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 35, 2), 0.13479, 99.4108, 0.0, 15.1567, 13.0191, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:35:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:35:02
2026-04-11T09:35:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:35:24.684 [DEBUG] [Thread-167552] [transport.py] [_log()] starting thread (client mode): 0xb0f8e4a0
2026-04-11T09:35:24.685 [DEBUG] [Thread-167552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:35:24.706 [DEBUG] [Thread-167552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:35:24.706 [INFO] [Thread-167552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] client lang: <none>
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] server lang: <none>
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] kex follows: False
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:35:24.710 [DEBUG] [Thread-167552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:35:24.711 [DEBUG] [Thread-167552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:35:24.711 [DEBUG] [Thread-167552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:35:24.711 [DEBUG] [Thread-167552] [transport.py] [_log()] Compression: none
2026-04-11T09:35:24.711 [DEBUG] [Thread-167552] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:35:24.729 [DEBUG] [Thread-167552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:35:24.729 [DEBUG] [Thread-167552] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:35:24.729 [DEBUG] [Thread-167552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:35:24.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:35:24.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:35:24.732 [DEBUG] [Thread-167552] [transport.py] [_log()] userauth is OK
2026-04-11T09:35:24.732 [DEBUG] [Thread-167552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:35:24.732 [DEBUG] [Thread-167552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:35:24.732 [DEBUG] [Thread-167552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:35:24.733 [DEBUG] [Thread-167552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:35:24.742 [INFO] [Thread-167552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:35:24.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:35:28.122 [DEBUG] [Thread-167552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:35:28.122 [DEBUG] [Thread-167552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:35:28.123 [DEBUG] [Thread-167552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:35:28.163 [DEBUG] [Thread-167552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:35:28.163 [DEBUG] [Thread-167552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:35:28.166 [DEBUG] [Thread-167552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:35:28.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:35:28.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:35:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:35:28.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:35:28.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:35:28.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:35:28.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:35:28.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:35:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:35:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.316094 -999.00  +12.90  17.66     97  +12.50 1 3 1 3 1   887    0 0.41 -0.48 ----- 22.7 17.7 74.2 23.8 13.9 -0.8 13.9 -0.3 13.8 -0.4 14.1 -0.6
2026-04-11T09:35:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:35:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:35:28.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.316094
2026-04-11T09:35:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:35:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:35:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:35:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:35:28.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:35:28.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:35:02', tmtdew=0.13479, humidity=99.4108, cloud=0.0, wind=15.1567, temperature=13.0191, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:35:10.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:35:28.201 [DEBUG] [Thread-167552] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:35:28.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:35:28.297 [DEBUG] [Thread-167555] [transport.py] [_log()] starting thread (client mode): 0xae5e73d0
2026-04-11T09:35:28.297 [DEBUG] [Thread-167555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:35:28.313 [DEBUG] [Thread-167555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:35:28.314 [INFO] [Thread-167555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:35:28.324 [DEBUG] [Thread-167555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:35:28.324 [DEBUG] [Thread-167555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:35:28.324 [DEBUG] [Thread-167555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:35:28.324 [DEBUG] [Thread-167555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:35:28.324 [DEBUG] [Thread-167555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:35:28.324 [DEBUG] [Thread-167555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] client lang: <none>
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] server lang: <none>
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] kex follows: False
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] Compression: none
2026-04-11T09:35:28.325 [DEBUG] [Thread-167555] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:35:28.384 [DEBUG] [Thread-167555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:35:28.385 [DEBUG] [Thread-167555] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:35:28.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:35:28.386 [DEBUG] [Thread-167555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:35:28.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:35:28.442 [DEBUG] [Thread-167555] [transport.py] [_log()] userauth is OK
2026-04-11T09:35:28.442 [DEBUG] [Thread-167555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:35:28.442 [DEBUG] [Thread-167555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:35:28.442 [DEBUG] [Thread-167555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:35:28.442 [DEBUG] [Thread-167555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:35:28.462 [INFO] [Thread-167555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:35:28.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:35:28.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:35:28.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:28.994 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:29.280 [DEBUG] [Thread-167555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:35:29.280 [DEBUG] [Thread-167555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:35:29.330 [DEBUG] [Thread-167555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:35:29.330 [DEBUG] [Thread-167555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:35:29.341 [DEBUG] [Thread-167555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:35:29.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:35:29.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-04-11T09:35:29.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:35:29.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:35:29.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:35:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:35:29.379 [DEBUG] [Thread-167555] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:35:32.910 [DEBUG] [Thread-167557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:47.959 [DEBUG] [Thread-167558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:56.890 [DEBUG] [Thread-167559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:35:59.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:35:59.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:35:59.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-04-11T09:36:00.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 35, 37), 0.16445, 98.8549, 0.0, 25.4758, 13.4714, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:36:00.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:35:37
2026-04-11T09:36:01.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:36:01.336 [DEBUG] [Thread-167560] [transport.py] [_log()] starting thread (client mode): 0xb0f8c1c0
2026-04-11T09:36:01.336 [DEBUG] [Thread-167560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:36:01.358 [DEBUG] [Thread-167560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:36:01.358 [INFO] [Thread-167560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] client lang: <none>
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] server lang: <none>
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] kex follows: False
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] Compression: none
2026-04-11T09:36:01.360 [DEBUG] [Thread-167560] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:36:01.368 [DEBUG] [Thread-167560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:36:01.368 [DEBUG] [Thread-167560] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:36:01.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:36:01.369 [DEBUG] [Thread-167560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:36:01.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:36:01.370 [DEBUG] [Thread-167560] [transport.py] [_log()] userauth is OK
2026-04-11T09:36:01.370 [DEBUG] [Thread-167560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:36:01.370 [DEBUG] [Thread-167560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:36:01.370 [DEBUG] [Thread-167560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:36:01.370 [DEBUG] [Thread-167560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:36:01.381 [INFO] [Thread-167560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:36:01.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:36:02.159 [DEBUG] [Thread-167560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:36:02.159 [DEBUG] [Thread-167560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:36:02.160 [DEBUG] [Thread-167560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:36:02.202 [DEBUG] [Thread-167560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:36:02.202 [DEBUG] [Thread-167560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:36:02.206 [DEBUG] [Thread-167560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:36:02.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:36:02.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:36:02.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:36:02.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:36:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:36:02.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:36:02.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:36:02.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:36:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:36:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.316094 -999.00  +12.90  17.66     97  +12.50 1 3 1 3 1   887    0 0.41 -0.48 ----- 22.7 17.7 74.2 23.8 13.9 -0.8 13.9 -0.3 13.8 -0.4 14.1 -0.6
2026-04-11T09:36:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:36:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:36:02.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.316094
2026-04-11T09:36:02.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:36:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:36:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:36:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:36:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:36:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:35:37', tmtdew=0.16445, humidity=98.8549, cloud=0.0, wind=25.4758, temperature=13.4714, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:35:10.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:36:02.241 [DEBUG] [Thread-167560] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:36:02.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:36:02.339 [DEBUG] [Thread-167563] [transport.py] [_log()] starting thread (client mode): 0xa7951870
2026-04-11T09:36:02.340 [DEBUG] [Thread-167563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:36:02.354 [DEBUG] [Thread-167563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:36:02.354 [INFO] [Thread-167563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] client lang: <none>
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] server lang: <none>
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] kex follows: False
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:36:02.362 [DEBUG] [Thread-167563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:36:02.363 [DEBUG] [Thread-167563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:36:02.363 [DEBUG] [Thread-167563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:36:02.363 [DEBUG] [Thread-167563] [transport.py] [_log()] Compression: none
2026-04-11T09:36:02.363 [DEBUG] [Thread-167563] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:36:02.423 [DEBUG] [Thread-167563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:36:02.424 [DEBUG] [Thread-167563] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:36:02.424 [DEBUG] [Thread-167563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:36:02.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:36:02.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:36:02.483 [DEBUG] [Thread-167563] [transport.py] [_log()] userauth is OK
2026-04-11T09:36:02.483 [DEBUG] [Thread-167563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:36:02.484 [DEBUG] [Thread-167563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:36:02.484 [DEBUG] [Thread-167563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:36:02.484 [DEBUG] [Thread-167563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:36:02.502 [INFO] [Thread-167563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:36:02.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:36:02.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:36:02.993 [DEBUG] [Thread-167565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:36:03.359 [DEBUG] [Thread-167563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:36:03.359 [DEBUG] [Thread-167563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:36:03.407 [DEBUG] [Thread-167563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:36:03.407 [DEBUG] [Thread-167563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:36:03.416 [DEBUG] [Thread-167563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:36:03.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:36:03.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-04-11T09:36:03.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-04-11T09:36:03.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:36:03.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:36:03.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:36:03.453 [DEBUG] [Thread-167563] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:36:18.044 [DEBUG] [Thread-167566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:36:29.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:36:29.137 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:36:33.085 [DEBUG] [Thread-167567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:36:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:36:33.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:36:33.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-04-11T09:36:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 36, 13), 0.145085, 99.3442, 0.0, 19.3565, 13.0026, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:36:34.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:36:13
2026-04-11T09:36:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:36:35.387 [DEBUG] [Thread-167568] [transport.py] [_log()] starting thread (client mode): 0xae5f0f10
2026-04-11T09:36:35.387 [DEBUG] [Thread-167568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:36:35.413 [DEBUG] [Thread-167568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:36:35.413 [INFO] [Thread-167568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:36:35.417 [DEBUG] [Thread-167568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:35.418 [DEBUG] [Thread-167568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] client lang: <none>
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] server lang: <none>
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] kex follows: False
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:36:35.419 [DEBUG] [Thread-167568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:36:35.420 [DEBUG] [Thread-167568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:36:35.420 [DEBUG] [Thread-167568] [transport.py] [_log()] Compression: none
2026-04-11T09:36:35.420 [DEBUG] [Thread-167568] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:36:35.439 [DEBUG] [Thread-167568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:36:35.439 [DEBUG] [Thread-167568] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:36:35.440 [DEBUG] [Thread-167568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:36:35.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:36:35.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:36:35.442 [DEBUG] [Thread-167568] [transport.py] [_log()] userauth is OK
2026-04-11T09:36:35.442 [DEBUG] [Thread-167568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:36:35.443 [DEBUG] [Thread-167568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:36:35.443 [DEBUG] [Thread-167568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:36:35.443 [DEBUG] [Thread-167568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:36:35.480 [INFO] [Thread-167568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:36:35.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:36:36.286 [DEBUG] [Thread-167568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:36:36.286 [DEBUG] [Thread-167568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:36:36.287 [DEBUG] [Thread-167568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:36:36.327 [DEBUG] [Thread-167568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:36:36.327 [DEBUG] [Thread-167568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:36:36.331 [DEBUG] [Thread-167568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:36:36.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:36:36.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:36:36.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:36:36.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:36:36.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:36:36.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:36:36.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:36:36.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:36:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:36:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.316441 -999.00  +12.90  16.17     97  +12.50 1 3 1 3 1   887    0 0.41 -0.64 ----- 15.8 16.2 92.9 21.2 14.0 -1.0 14.0 -0.2 13.9 -0.4 14.1 -0.4
2026-04-11T09:36:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:36:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:36:36.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.316441
2026-04-11T09:36:36.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:36:36.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:36:36.356 [DEBUG] [Thread-167568] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:36:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:36:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:36:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:36:36.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:36:13', tmtdew=0.145085, humidity=99.3442, cloud=0.0, wind=19.3565, temperature=13.0026, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:35:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:36:36.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:36:36.451 [DEBUG] [Thread-167571] [transport.py] [_log()] starting thread (client mode): 0xb0f8c100
2026-04-11T09:36:36.451 [DEBUG] [Thread-167571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:36:36.465 [DEBUG] [Thread-167571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:36:36.465 [INFO] [Thread-167571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] client lang: <none>
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] server lang: <none>
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] kex follows: False
2026-04-11T09:36:36.473 [DEBUG] [Thread-167571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:36:36.474 [DEBUG] [Thread-167571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:36:36.474 [DEBUG] [Thread-167571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:36:36.474 [DEBUG] [Thread-167571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:36:36.474 [DEBUG] [Thread-167571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:36:36.474 [DEBUG] [Thread-167571] [transport.py] [_log()] Compression: none
2026-04-11T09:36:36.474 [DEBUG] [Thread-167571] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:36:36.531 [DEBUG] [Thread-167571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:36:36.532 [DEBUG] [Thread-167571] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:36:36.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:36:36.533 [DEBUG] [Thread-167571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:36:36.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:36:36.589 [DEBUG] [Thread-167571] [transport.py] [_log()] userauth is OK
2026-04-11T09:36:36.589 [DEBUG] [Thread-167571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:36:36.589 [DEBUG] [Thread-167571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:36:36.589 [DEBUG] [Thread-167571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:36:36.589 [DEBUG] [Thread-167571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:36:36.612 [INFO] [Thread-167571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:36:36.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:36:36.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:36:37.446 [DEBUG] [Thread-167571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:36:37.447 [DEBUG] [Thread-167571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:36:37.495 [DEBUG] [Thread-167571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:36:37.496 [DEBUG] [Thread-167571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:36:37.505 [DEBUG] [Thread-167571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:36:37.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:36:37.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-04-11T09:36:37.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-04-11T09:36:37.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:36:37.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:36:37.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:36:37.541 [DEBUG] [Thread-167571] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:36:48.121 [DEBUG] [Thread-167573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:36:56.949 [DEBUG] [Thread-167574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:03.179 [DEBUG] [Thread-167575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:07.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:37:07.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:37:07.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-04-11T09:37:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 36, 48), 0.17994, 98.7548, 0.0, 29.6741, 13.4047, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:37:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:36:48
2026-04-11T09:37:09.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:37:09.443 [DEBUG] [Thread-167576] [transport.py] [_log()] starting thread (client mode): 0xae5f2aa0
2026-04-11T09:37:09.443 [DEBUG] [Thread-167576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:37:09.463 [DEBUG] [Thread-167576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:37:09.463 [INFO] [Thread-167576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:09.465 [DEBUG] [Thread-167576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] client lang: <none>
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] server lang: <none>
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] kex follows: False
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] Compression: none
2026-04-11T09:37:09.466 [DEBUG] [Thread-167576] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:37:09.481 [DEBUG] [Thread-167576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:37:09.482 [DEBUG] [Thread-167576] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:37:09.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:37:09.484 [DEBUG] [Thread-167576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:37:09.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:37:09.486 [DEBUG] [Thread-167576] [transport.py] [_log()] userauth is OK
2026-04-11T09:37:09.486 [DEBUG] [Thread-167576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:37:09.486 [DEBUG] [Thread-167576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:37:09.487 [DEBUG] [Thread-167576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:37:09.487 [DEBUG] [Thread-167576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:37:09.511 [INFO] [Thread-167576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:37:09.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:37:10.293 [DEBUG] [Thread-167576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:37:10.293 [DEBUG] [Thread-167576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:37:10.294 [DEBUG] [Thread-167576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:37:10.334 [DEBUG] [Thread-167576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:37:10.334 [DEBUG] [Thread-167576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:37:10.337 [DEBUG] [Thread-167576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:37:10.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:37:10.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:37:10.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:37:10.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:37:10.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:37:10.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:37:10.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:37:10.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:37:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:37:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.316788 -999.00  +12.90  17.40     97  +12.50 1 3 1 3 1   887    0 0.40 -0.79 ----- 24.6 17.4 81.9 22.8 14.0 -0.9 14.0 -0.2 13.9 -0.3 14.2 -0.5
2026-04-11T09:37:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:37:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:37:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.316788
2026-04-11T09:37:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:37:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:37:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:37:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:37:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:37:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:36:48', tmtdew=0.17994, humidity=98.7548, cloud=0.0, wind=29.6741, temperature=13.4047, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:36:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:37:10.361 [DEBUG] [Thread-167576] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:37:10.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:37:10.457 [DEBUG] [Thread-167579] [transport.py] [_log()] starting thread (client mode): 0xb0fcc1f0
2026-04-11T09:37:10.457 [DEBUG] [Thread-167579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:37:10.473 [DEBUG] [Thread-167579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:37:10.473 [INFO] [Thread-167579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:37:10.486 [DEBUG] [Thread-167579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:37:10.486 [DEBUG] [Thread-167579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:37:10.486 [DEBUG] [Thread-167579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:37:10.486 [DEBUG] [Thread-167579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:10.486 [DEBUG] [Thread-167579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] client lang: <none>
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] server lang: <none>
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] kex follows: False
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] Compression: none
2026-04-11T09:37:10.487 [DEBUG] [Thread-167579] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:37:10.540 [DEBUG] [Thread-167579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:37:10.541 [DEBUG] [Thread-167579] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:37:10.541 [DEBUG] [Thread-167579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:37:10.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:37:10.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:37:10.596 [DEBUG] [Thread-167579] [transport.py] [_log()] userauth is OK
2026-04-11T09:37:10.597 [DEBUG] [Thread-167579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:37:10.597 [DEBUG] [Thread-167579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:37:10.597 [DEBUG] [Thread-167579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:37:10.597 [DEBUG] [Thread-167579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:37:10.617 [INFO] [Thread-167579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:37:10.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:37:10.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:37:11.462 [DEBUG] [Thread-167579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:37:11.462 [DEBUG] [Thread-167579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:37:11.510 [DEBUG] [Thread-167579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:37:11.510 [DEBUG] [Thread-167579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:37:11.520 [DEBUG] [Thread-167579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:37:11.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:37:11.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-04-11T09:37:11.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:37:11.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:37:11.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:37:11.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:37:11.558 [DEBUG] [Thread-167579] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:37:18.218 [DEBUG] [Thread-167581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:29.277 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:29.278 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:33.272 [DEBUG] [Thread-167582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:37:41.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:37: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-04-11T09:37:42.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 37, 24), 0.139945, 99.3775, 0.0, 20.6266, 13.0024, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:37:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:37:24
2026-04-11T09:37:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:37:43.396 [DEBUG] [Thread-167583] [transport.py] [_log()] starting thread (client mode): 0xae5e7f40
2026-04-11T09:37:43.396 [DEBUG] [Thread-167583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:37:43.415 [DEBUG] [Thread-167583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:37:43.416 [INFO] [Thread-167583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:37:43.419 [DEBUG] [Thread-167583] [transport.py] [_log()] client lang: <none>
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] server lang: <none>
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] kex follows: False
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] Compression: none
2026-04-11T09:37:43.420 [DEBUG] [Thread-167583] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:37:43.439 [DEBUG] [Thread-167583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:37:43.439 [DEBUG] [Thread-167583] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:37:43.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:37:43.440 [DEBUG] [Thread-167583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:37:43.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:37:43.441 [DEBUG] [Thread-167583] [transport.py] [_log()] userauth is OK
2026-04-11T09:37:43.441 [DEBUG] [Thread-167583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:37:43.441 [DEBUG] [Thread-167583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:37:43.441 [DEBUG] [Thread-167583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:37:43.442 [DEBUG] [Thread-167583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:37:43.476 [INFO] [Thread-167583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:37:43.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:37:44.268 [DEBUG] [Thread-167583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:37:44.269 [DEBUG] [Thread-167583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:37:44.269 [DEBUG] [Thread-167583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:37:44.310 [DEBUG] [Thread-167583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:37:44.310 [DEBUG] [Thread-167583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:37:44.313 [DEBUG] [Thread-167583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:37:44.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:37:44.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:37:44.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:37:44.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:37:44.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:37:44.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:37:44.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:37:44.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:37:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:37:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.317135 -999.00  +12.90  21.15     97  +12.50 1 3 1 3 1   887    0 0.40 -1.10 ----- 16.7 21.1 68.4 24.1 14.0 -1.0 14.0 -0.4 13.9 -0.4 14.2 -0.7
2026-04-11T09:37:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:37:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:37:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.317135
2026-04-11T09:37:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:37:44.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:37:44.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:37:44.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:37:44.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:37:44.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:37:24', tmtdew=0.139945, humidity=99.3775, cloud=0.0, wind=20.6266, temperature=13.0024, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:36:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:37:44.340 [DEBUG] [Thread-167583] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:37:44.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:37:44.434 [DEBUG] [Thread-167586] [transport.py] [_log()] starting thread (client mode): 0xae5a5000
2026-04-11T09:37:44.434 [DEBUG] [Thread-167586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:37:44.448 [DEBUG] [Thread-167586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:37:44.448 [INFO] [Thread-167586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:37:44.456 [DEBUG] [Thread-167586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:37:44.456 [DEBUG] [Thread-167586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:37:44.456 [DEBUG] [Thread-167586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:37:44.456 [DEBUG] [Thread-167586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:44.456 [DEBUG] [Thread-167586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] client lang: <none>
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] server lang: <none>
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] kex follows: False
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] Compression: none
2026-04-11T09:37:44.457 [DEBUG] [Thread-167586] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:37:44.513 [DEBUG] [Thread-167586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:37:44.513 [DEBUG] [Thread-167586] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:37:44.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:37:44.514 [DEBUG] [Thread-167586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:37:44.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:37:44.569 [DEBUG] [Thread-167586] [transport.py] [_log()] userauth is OK
2026-04-11T09:37:44.569 [DEBUG] [Thread-167586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:37:44.569 [DEBUG] [Thread-167586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:37:44.569 [DEBUG] [Thread-167586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:37:44.569 [DEBUG] [Thread-167586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:37:44.588 [INFO] [Thread-167586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:37:44.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:37:44.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:37:45.414 [DEBUG] [Thread-167586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:37:45.414 [DEBUG] [Thread-167586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:37:45.462 [DEBUG] [Thread-167586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:37:45.462 [DEBUG] [Thread-167586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:37:45.472 [DEBUG] [Thread-167586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:37:45.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:37:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:37:45.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-04-11T09:37:45.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:37:45.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:37:45.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:37:45.510 [DEBUG] [Thread-167586] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:37:48.310 [DEBUG] [Thread-167588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:37:56.993 [DEBUG] [Thread-167589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:03.363 [DEBUG] [Thread-167590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:38:15.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:38:15.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-04-11T09:38:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 37, 24), 0.139945, 99.3775, 0.0, 20.6266, 13.0024, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:38:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:37:24
2026-04-11T09:38:17.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:38:17.384 [DEBUG] [Thread-167591] [transport.py] [_log()] starting thread (client mode): 0xae5e56c0
2026-04-11T09:38:17.385 [DEBUG] [Thread-167591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:38:17.405 [DEBUG] [Thread-167591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:38:17.405 [INFO] [Thread-167591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:38:17.407 [DEBUG] [Thread-167591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:38:17.407 [DEBUG] [Thread-167591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:38:17.407 [DEBUG] [Thread-167591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:38:17.407 [DEBUG] [Thread-167591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] client lang: <none>
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] server lang: <none>
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] kex follows: False
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] Compression: none
2026-04-11T09:38:17.408 [DEBUG] [Thread-167591] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:38:17.426 [DEBUG] [Thread-167591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:38:17.426 [DEBUG] [Thread-167591] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:38:17.427 [DEBUG] [Thread-167591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:38:17.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:38:17.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:38:17.428 [DEBUG] [Thread-167591] [transport.py] [_log()] userauth is OK
2026-04-11T09:38:17.429 [DEBUG] [Thread-167591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:38:17.429 [DEBUG] [Thread-167591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:38:17.429 [DEBUG] [Thread-167591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:38:17.429 [DEBUG] [Thread-167591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:38:17.447 [INFO] [Thread-167591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:38:17.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:38:18.243 [DEBUG] [Thread-167591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:38:18.243 [DEBUG] [Thread-167591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:38:18.244 [DEBUG] [Thread-167591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:38:18.284 [DEBUG] [Thread-167591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:38:18.284 [DEBUG] [Thread-167591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:38:18.288 [DEBUG] [Thread-167591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:38:18.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:38:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:38:18.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:38:18.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:38:18.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:38:18.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:38:18.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:38:18.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:38:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:38:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.317830 -999.00  +12.90  18.12     97  +12.50 1 3 1 3 1   887    0 0.40 -1.40 ----- 17.2 18.1 71.1 24.6 14.0 -0.8 14.0 -0.4 13.8 -0.5 14.1 -0.5
2026-04-11T09:38:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:38:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:38:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.317830
2026-04-11T09:38:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:38:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:38:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:38:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:38:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:38:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:37:24', tmtdew=0.139945, humidity=99.3775, cloud=0.0, wind=20.6266, temperature=13.0024, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:37:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:38:18.313 [DEBUG] [Thread-167591] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:38:18.396 [DEBUG] [Thread-167594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:18.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:38:18.409 [DEBUG] [Thread-167595] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-11T09:38:18.409 [DEBUG] [Thread-167595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:38:18.424 [DEBUG] [Thread-167595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:38:18.424 [INFO] [Thread-167595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:38:18.432 [DEBUG] [Thread-167595] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:38:18.432 [DEBUG] [Thread-167595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:38:18.432 [DEBUG] [Thread-167595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:38:18.432 [DEBUG] [Thread-167595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:18.432 [DEBUG] [Thread-167595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] client lang: <none>
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] server lang: <none>
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] kex follows: False
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] Compression: none
2026-04-11T09:38:18.433 [DEBUG] [Thread-167595] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:38:18.490 [DEBUG] [Thread-167595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:38:18.490 [DEBUG] [Thread-167595] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:38:18.491 [DEBUG] [Thread-167595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:38:18.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:38:18.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:38:18.553 [DEBUG] [Thread-167595] [transport.py] [_log()] userauth is OK
2026-04-11T09:38:18.554 [DEBUG] [Thread-167595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:38:18.554 [DEBUG] [Thread-167595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:38:18.554 [DEBUG] [Thread-167595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:38:18.554 [DEBUG] [Thread-167595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:38:18.581 [INFO] [Thread-167595] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:38:18.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:38:18.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:38:19.414 [DEBUG] [Thread-167595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:38:19.415 [DEBUG] [Thread-167595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:38:19.465 [DEBUG] [Thread-167595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:38:19.465 [DEBUG] [Thread-167595] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:38:19.475 [DEBUG] [Thread-167595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:38:19.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:38: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-04-11T09:38: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-04-11T09:38:19.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:38:19.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:38:19.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:38:19.516 [DEBUG] [Thread-167595] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:38:29.418 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:29.419 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:33.440 [DEBUG] [Thread-167597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:48.477 [DEBUG] [Thread-167598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:38:49.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:38:49.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:38:49.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-04-11T09:38:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 38, 35), 0.16969, 98.8208, 0.0, 26.1814, 13.4045, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:38:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:38:35
2026-04-11T09:38:51.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:38:51.370 [DEBUG] [Thread-167599] [transport.py] [_log()] starting thread (client mode): 0xb0f8c340
2026-04-11T09:38:51.370 [DEBUG] [Thread-167599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:38:51.391 [DEBUG] [Thread-167599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:38:51.391 [INFO] [Thread-167599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:38:51.394 [DEBUG] [Thread-167599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] client lang: <none>
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] server lang: <none>
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] kex follows: False
2026-04-11T09:38:51.395 [DEBUG] [Thread-167599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:38:51.396 [DEBUG] [Thread-167599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:38:51.396 [DEBUG] [Thread-167599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:38:51.396 [DEBUG] [Thread-167599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:38:51.396 [DEBUG] [Thread-167599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:38:51.396 [DEBUG] [Thread-167599] [transport.py] [_log()] Compression: none
2026-04-11T09:38:51.396 [DEBUG] [Thread-167599] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:38:51.415 [DEBUG] [Thread-167599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:38:51.416 [DEBUG] [Thread-167599] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:38:51.416 [DEBUG] [Thread-167599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:38:51.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:38:51.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:38:51.418 [DEBUG] [Thread-167599] [transport.py] [_log()] userauth is OK
2026-04-11T09:38:51.418 [DEBUG] [Thread-167599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:38:51.419 [DEBUG] [Thread-167599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:38:51.419 [DEBUG] [Thread-167599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:38:51.419 [DEBUG] [Thread-167599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:38:51.435 [INFO] [Thread-167599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:38:51.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:38:52.238 [DEBUG] [Thread-167599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:38:52.238 [DEBUG] [Thread-167599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:38:52.238 [DEBUG] [Thread-167599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:38:52.279 [DEBUG] [Thread-167599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:38:52.279 [DEBUG] [Thread-167599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:38:52.283 [DEBUG] [Thread-167599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:38:52.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:38:52.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:38:52.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:38:52.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:38:52.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:38:52.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:38:52.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:38:52.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:38:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:38:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.318177 -999.00  +12.90  16.18     97  +12.40 1 3 1 3 1   887    0 0.39 -1.17 ----- 11.8 16.2 111.0 21.2 13.9 -1.0 14.0 -0.2 13.9 -0.5 14.2 -0.4
2026-04-11T09:38:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:38:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:38:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.318177
2026-04-11T09:38:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:38:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:38:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:38:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:38:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:38:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:38:35', tmtdew=0.16969, humidity=98.8208, cloud=0.0, wind=26.1814, temperature=13.4045, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:38:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:38:52.309 [DEBUG] [Thread-167599] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:38:52.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:38:52.403 [DEBUG] [Thread-167602] [transport.py] [_log()] starting thread (client mode): 0xae5e6140
2026-04-11T09:38:52.403 [DEBUG] [Thread-167602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:38:52.420 [DEBUG] [Thread-167602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:38:52.420 [INFO] [Thread-167602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] client lang: <none>
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] server lang: <none>
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] kex follows: False
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] Compression: none
2026-04-11T09:38:52.428 [DEBUG] [Thread-167602] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:38:52.489 [DEBUG] [Thread-167602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:38:52.489 [DEBUG] [Thread-167602] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:38:52.489 [DEBUG] [Thread-167602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:38:52.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:38:52.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:38:52.546 [DEBUG] [Thread-167602] [transport.py] [_log()] userauth is OK
2026-04-11T09:38:52.546 [DEBUG] [Thread-167602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:38:52.546 [DEBUG] [Thread-167602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:38:52.546 [DEBUG] [Thread-167602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:38:52.546 [DEBUG] [Thread-167602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:38:52.565 [INFO] [Thread-167602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:38:52.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:38:52.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:38:53.455 [DEBUG] [Thread-167602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:38:53.456 [DEBUG] [Thread-167602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:38:53.504 [DEBUG] [Thread-167602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:38:53.504 [DEBUG] [Thread-167602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:38:53.513 [DEBUG] [Thread-167602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:38:53.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:38:53.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-04-11T09:38: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-04-11T09:38:53.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:38:53.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:38:53.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:38:53.551 [DEBUG] [Thread-167602] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:38:57.038 [DEBUG] [Thread-167604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:03.513 [DEBUG] [Thread-167605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:18.578 [DEBUG] [Thread-167606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:23.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:39:23.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:39: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-04-11T09:39:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 39, 10), 0.132285, 99.427, 0.0, 21.1028, 13.0354, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:39:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:39:10
2026-04-11T09:39:25.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:39:25.403 [DEBUG] [Thread-167607] [transport.py] [_log()] starting thread (client mode): 0xae52ddb0
2026-04-11T09:39:25.403 [DEBUG] [Thread-167607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:39:25.425 [DEBUG] [Thread-167607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:39:25.425 [INFO] [Thread-167607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:39:25.429 [DEBUG] [Thread-167607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:39:25.429 [DEBUG] [Thread-167607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] client lang: <none>
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] server lang: <none>
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] kex follows: False
2026-04-11T09:39:25.430 [DEBUG] [Thread-167607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:39:25.431 [DEBUG] [Thread-167607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:39:25.431 [DEBUG] [Thread-167607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:39:25.431 [DEBUG] [Thread-167607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:39:25.431 [DEBUG] [Thread-167607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:39:25.431 [DEBUG] [Thread-167607] [transport.py] [_log()] Compression: none
2026-04-11T09:39:25.431 [DEBUG] [Thread-167607] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:39:25.454 [DEBUG] [Thread-167607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:39:25.454 [DEBUG] [Thread-167607] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:39:25.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:39:25.455 [DEBUG] [Thread-167607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:39:25.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:39:25.457 [DEBUG] [Thread-167607] [transport.py] [_log()] userauth is OK
2026-04-11T09:39:25.458 [DEBUG] [Thread-167607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:39:25.458 [DEBUG] [Thread-167607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:39:25.458 [DEBUG] [Thread-167607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:39:25.458 [DEBUG] [Thread-167607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:39:25.496 [INFO] [Thread-167607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:39:25.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:39:26.291 [DEBUG] [Thread-167607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:39:26.292 [DEBUG] [Thread-167607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:39:26.292 [DEBUG] [Thread-167607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:39:26.332 [DEBUG] [Thread-167607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:39:26.332 [DEBUG] [Thread-167607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:39:26.336 [DEBUG] [Thread-167607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:39:26.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:39:26.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:39:26.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:39:26.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:39:26.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:39:26.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:39:26.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:39:26.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:39:26.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:39:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.318524 -999.00  +12.90  13.20     97  +12.50 1 3 1 3 1   887    0 0.41 -1.13 ----- 14.9 13.2 92.8 21.5 14.0 -0.6 14.0 -0.2 13.9 -0.4 14.2 -0.7
2026-04-11T09:39:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:39:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:39:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.318524
2026-04-11T09:39:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:39:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:39:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:39:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:39:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:39:26.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:39:10', tmtdew=0.132285, humidity=99.427, cloud=0.0, wind=21.1028, temperature=13.0354, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:38:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:39:26.368 [DEBUG] [Thread-167607] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:39:26.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:39:26.460 [DEBUG] [Thread-167610] [transport.py] [_log()] starting thread (client mode): 0xae52e230
2026-04-11T09:39:26.460 [DEBUG] [Thread-167610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:39:26.476 [DEBUG] [Thread-167610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:39:26.476 [INFO] [Thread-167610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:39:26.487 [DEBUG] [Thread-167610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:39:26.488 [DEBUG] [Thread-167610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:39:26.488 [DEBUG] [Thread-167610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:39:26.488 [DEBUG] [Thread-167610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:39:26.488 [DEBUG] [Thread-167610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:39:26.488 [DEBUG] [Thread-167610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:39:26.488 [DEBUG] [Thread-167610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] client lang: <none>
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] server lang: <none>
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] kex follows: False
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] Compression: none
2026-04-11T09:39:26.489 [DEBUG] [Thread-167610] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:39:26.547 [DEBUG] [Thread-167610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:39:26.548 [DEBUG] [Thread-167610] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:39:26.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:39:26.549 [DEBUG] [Thread-167610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:39:26.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:39:26.607 [DEBUG] [Thread-167610] [transport.py] [_log()] userauth is OK
2026-04-11T09:39:26.607 [DEBUG] [Thread-167610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:39:26.607 [DEBUG] [Thread-167610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:39:26.607 [DEBUG] [Thread-167610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:39:26.607 [DEBUG] [Thread-167610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:39:26.626 [INFO] [Thread-167610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:39:26.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:39:26.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:39:27.442 [DEBUG] [Thread-167610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:39:27.443 [DEBUG] [Thread-167610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:39:27.492 [DEBUG] [Thread-167610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:39:27.492 [DEBUG] [Thread-167610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:39:27.501 [DEBUG] [Thread-167610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:39:27.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:39:27.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-04-11T09:39:27.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-04-11T09:39:27.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:39:27.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:39:27.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:39:27.538 [DEBUG] [Thread-167610] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:39:29.561 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:29.563 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:33.619 [DEBUG] [Thread-167612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:48.687 [DEBUG] [Thread-167613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:57.083 [DEBUG] [Thread-167614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:39:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:39:57.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:39:57.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-04-11T09:39:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 39, 46), 0.1645, 98.8544, 0.0, 21.8066, 13.4379, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:39:58.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:39:46
2026-04-11T09:39:59.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:39:59.427 [DEBUG] [Thread-167615] [transport.py] [_log()] starting thread (client mode): 0xae5f0100
2026-04-11T09:39:59.427 [DEBUG] [Thread-167615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:39:59.449 [DEBUG] [Thread-167615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:39:59.449 [INFO] [Thread-167615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:39:59.452 [DEBUG] [Thread-167615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] client lang: <none>
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] server lang: <none>
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] kex follows: False
2026-04-11T09:39:59.453 [DEBUG] [Thread-167615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:39:59.454 [DEBUG] [Thread-167615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:39:59.454 [DEBUG] [Thread-167615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:39:59.454 [DEBUG] [Thread-167615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:39:59.454 [DEBUG] [Thread-167615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:39:59.454 [DEBUG] [Thread-167615] [transport.py] [_log()] Compression: none
2026-04-11T09:39:59.454 [DEBUG] [Thread-167615] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:39:59.471 [DEBUG] [Thread-167615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:39:59.472 [DEBUG] [Thread-167615] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:39:59.473 [DEBUG] [Thread-167615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:39:59.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:39:59.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:39:59.475 [DEBUG] [Thread-167615] [transport.py] [_log()] userauth is OK
2026-04-11T09:39:59.475 [DEBUG] [Thread-167615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:39:59.476 [DEBUG] [Thread-167615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:39:59.476 [DEBUG] [Thread-167615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:39:59.476 [DEBUG] [Thread-167615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:39:59.499 [INFO] [Thread-167615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:39:59.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:40:00.303 [DEBUG] [Thread-167615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:40:00.303 [DEBUG] [Thread-167615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:40:00.304 [DEBUG] [Thread-167615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:40:00.344 [DEBUG] [Thread-167615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:40:00.345 [DEBUG] [Thread-167615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:40:00.347 [DEBUG] [Thread-167615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:40:00.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:40:00.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:40:00.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:40:00.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:40:00.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:40:00.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:40:00.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:40:00.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:40:00.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:40:00.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.318871 -999.00  +12.90  17.04     97  +12.50 1 3 1 3 1   887    0 0.39 -1.15 ----- 20.4 17.0 71.7 24.2 14.0 -0.9 14.0 -0.1 13.9 -0.3 14.2 -0.6
2026-04-11T09:40:00.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:40:00.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:40:00.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.318871
2026-04-11T09:40:00.380 [DEBUG] [Thread-167615] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:40:00.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:40:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:40:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:40:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:40:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:40:00.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:39:46', tmtdew=0.1645, humidity=98.8544, cloud=0.0, wind=21.8066, temperature=13.4379, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:39:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:40:00.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:40:00.475 [DEBUG] [Thread-167618] [transport.py] [_log()] starting thread (client mode): 0xae5a4100
2026-04-11T09:40:00.476 [DEBUG] [Thread-167618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:40:00.491 [DEBUG] [Thread-167618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:40:00.491 [INFO] [Thread-167618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:40:00.498 [DEBUG] [Thread-167618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:40:00.508 [DEBUG] [Thread-167618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] client lang: <none>
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] server lang: <none>
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] kex follows: False
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] Compression: none
2026-04-11T09:40:00.509 [DEBUG] [Thread-167618] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:40:00.559 [DEBUG] [Thread-167618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:40:00.560 [DEBUG] [Thread-167618] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:40:00.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:40:00.561 [DEBUG] [Thread-167618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:40:00.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:40:00.621 [DEBUG] [Thread-167618] [transport.py] [_log()] userauth is OK
2026-04-11T09:40:00.621 [DEBUG] [Thread-167618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:40:00.621 [DEBUG] [Thread-167618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:40:00.621 [DEBUG] [Thread-167618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:40:00.621 [DEBUG] [Thread-167618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:40:00.640 [INFO] [Thread-167618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:40:00.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:40:00.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:40:01.457 [DEBUG] [Thread-167618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:40:01.458 [DEBUG] [Thread-167618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:40:01.505 [DEBUG] [Thread-167618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:40:01.505 [DEBUG] [Thread-167618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:40:01.514 [DEBUG] [Thread-167618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:40:01.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:40:01.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-04-11T09:40:01.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:40:01.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:40:01.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:40:01.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:40:01.550 [DEBUG] [Thread-167618] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:40:03.726 [DEBUG] [Thread-167620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:40:18.777 [DEBUG] [Thread-167621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:40:29.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:40:29.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:40:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:40:31.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:40:31.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-04-11T09:40:32.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 40, 21), 0.13994, 99.3775, 0.0, 22.1083, 12.9692, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:40:32.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:40:21
2026-04-11T09:40:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:40:33.446 [DEBUG] [Thread-167622] [transport.py] [_log()] starting thread (client mode): 0xa79b70a0
2026-04-11T09:40:33.446 [DEBUG] [Thread-167622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:40:33.466 [DEBUG] [Thread-167622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:40:33.466 [INFO] [Thread-167622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:40:33.469 [DEBUG] [Thread-167622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] client lang: <none>
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] server lang: <none>
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] kex follows: False
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] Compression: none
2026-04-11T09:40:33.470 [DEBUG] [Thread-167622] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:40:33.487 [DEBUG] [Thread-167622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:40:33.488 [DEBUG] [Thread-167622] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:40:33.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:40:33.489 [DEBUG] [Thread-167622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:40:33.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:40:33.491 [DEBUG] [Thread-167622] [transport.py] [_log()] userauth is OK
2026-04-11T09:40:33.491 [DEBUG] [Thread-167622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:40:33.492 [DEBUG] [Thread-167622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:40:33.492 [DEBUG] [Thread-167622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:40:33.492 [DEBUG] [Thread-167622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:40:33.516 [INFO] [Thread-167622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:40:33.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:40:33.813 [DEBUG] [Thread-167624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:40:34.584 [DEBUG] [Thread-167622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:40:34.584 [DEBUG] [Thread-167622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:40:34.585 [DEBUG] [Thread-167622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:40:34.625 [DEBUG] [Thread-167622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:40:34.625 [DEBUG] [Thread-167622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:40:34.629 [DEBUG] [Thread-167622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:40:34.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:40:34.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:40:34.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:40:34.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:40:34.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:40:34.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:40:34.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:40:34.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:40:34.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:40:34.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.319219 -999.00  +12.90  20.78     97  +12.50 1 3 1 3 1   887    0 0.39 -1.13 ----- 17.6 20.8 57.4 25.3 14.0 -1.2 14.0 -0.3 13.9 -0.2 14.2 -0.5
2026-04-11T09:40:34.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:40:34.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:40:34.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.319219
2026-04-11T09:40:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:40:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:40:34.682 [DEBUG] [Thread-167622] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:40:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:40:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:40:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:40:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:40:21', tmtdew=0.13994, humidity=99.3775, cloud=0.0, wind=22.1083, temperature=12.9692, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:39:40.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:40:34.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:40:34.766 [DEBUG] [Thread-167626] [transport.py] [_log()] starting thread (client mode): 0xb0fcd270
2026-04-11T09:40:34.766 [DEBUG] [Thread-167626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:40:34.781 [DEBUG] [Thread-167626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:40:34.781 [INFO] [Thread-167626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] client lang: <none>
2026-04-11T09:40:34.789 [DEBUG] [Thread-167626] [transport.py] [_log()] server lang: <none>
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] kex follows: False
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] Compression: none
2026-04-11T09:40:34.790 [DEBUG] [Thread-167626] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:40:34.847 [DEBUG] [Thread-167626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:40:34.848 [DEBUG] [Thread-167626] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:40:34.849 [DEBUG] [Thread-167626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:40:34.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:40:34.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:40:34.904 [DEBUG] [Thread-167626] [transport.py] [_log()] userauth is OK
2026-04-11T09:40:34.904 [DEBUG] [Thread-167626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:40:34.904 [DEBUG] [Thread-167626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:40:34.904 [DEBUG] [Thread-167626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:40:34.904 [DEBUG] [Thread-167626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:40:34.923 [INFO] [Thread-167626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:40:34.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:40:34.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:40:35.742 [DEBUG] [Thread-167626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:40:35.742 [DEBUG] [Thread-167626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:40:35.790 [DEBUG] [Thread-167626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:40:35.790 [DEBUG] [Thread-167626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:40:35.800 [DEBUG] [Thread-167626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:40:35.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:40:35.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-04-11T09:40:35.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:40:35.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:40:35.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:40:35.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:40:35.837 [DEBUG] [Thread-167626] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:40:48.852 [DEBUG] [Thread-167628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:40:57.119 [DEBUG] [Thread-167629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:03.914 [DEBUG] [Thread-167630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:05.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:41:05.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:41:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:41:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 40, 57), 0.134785, 99.4108, 0.0, 22.32, 12.9859, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:41:07.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:40:57
2026-04-11T09:41:07.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:41:07.658 [DEBUG] [Thread-167631] [transport.py] [_log()] starting thread (client mode): 0xae52de70
2026-04-11T09:41:07.658 [DEBUG] [Thread-167631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:41:07.678 [DEBUG] [Thread-167631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:41:07.678 [INFO] [Thread-167631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] client lang: <none>
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] server lang: <none>
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] kex follows: False
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] Compression: none
2026-04-11T09:41:07.682 [DEBUG] [Thread-167631] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:41:07.697 [DEBUG] [Thread-167631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:41:07.698 [DEBUG] [Thread-167631] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:41:07.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:41:07.698 [DEBUG] [Thread-167631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:41:07.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:41:07.699 [DEBUG] [Thread-167631] [transport.py] [_log()] userauth is OK
2026-04-11T09:41:07.699 [DEBUG] [Thread-167631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:41:07.699 [DEBUG] [Thread-167631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:41:07.699 [DEBUG] [Thread-167631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:41:07.699 [DEBUG] [Thread-167631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:41:07.711 [INFO] [Thread-167631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:41:07.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:41:08.454 [DEBUG] [Thread-167631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:41:08.454 [DEBUG] [Thread-167631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:41:08.455 [DEBUG] [Thread-167631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:41:08.495 [DEBUG] [Thread-167631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:41:08.495 [DEBUG] [Thread-167631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:41:08.499 [DEBUG] [Thread-167631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:41:08.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:41:08.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:41:08.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:41:08.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:41:08.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:41:08.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:41:08.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:41:08.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:41:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:41:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.319566 -999.00  +12.90  13.69     97  +12.40 1 3 1 3 1   887    0 0.41 -0.75 ----- 18.0 13.7 105.3 27.2 14.0 -1.4 14.0 -0.5 13.9 -0.6 14.2 -0.7
2026-04-11T09:41:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:41:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:41:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.319566
2026-04-11T09:41:08.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:41:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:41:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:41:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:41:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:41:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:40:57', tmtdew=0.134785, humidity=99.4108, cloud=0.0, wind=22.32, temperature=12.9859, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:40:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:41:08.527 [DEBUG] [Thread-167631] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:41:08.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:41:08.621 [DEBUG] [Thread-167634] [transport.py] [_log()] starting thread (client mode): 0xae5144c0
2026-04-11T09:41:08.621 [DEBUG] [Thread-167634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:41:08.635 [DEBUG] [Thread-167634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:41:08.635 [INFO] [Thread-167634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:08.643 [DEBUG] [Thread-167634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] client lang: <none>
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] server lang: <none>
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] kex follows: False
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] Compression: none
2026-04-11T09:41:08.644 [DEBUG] [Thread-167634] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:41:08.700 [DEBUG] [Thread-167634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:41:08.700 [DEBUG] [Thread-167634] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:41:08.701 [DEBUG] [Thread-167634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:41:08.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:41:08.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:41:08.756 [DEBUG] [Thread-167634] [transport.py] [_log()] userauth is OK
2026-04-11T09:41:08.756 [DEBUG] [Thread-167634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:41:08.757 [DEBUG] [Thread-167634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:41:08.757 [DEBUG] [Thread-167634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:41:08.757 [DEBUG] [Thread-167634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:41:08.776 [INFO] [Thread-167634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:41:08.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:41:08.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:41:09.613 [DEBUG] [Thread-167634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:41:09.613 [DEBUG] [Thread-167634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:41:09.661 [DEBUG] [Thread-167634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:41:09.662 [DEBUG] [Thread-167634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:41:09.671 [DEBUG] [Thread-167634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:41:09.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:41:09.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-04-11T09:41: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') -> 00000000
2026-04-11T09:41:09.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:41:09.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:41:09.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:41:09.708 [DEBUG] [Thread-167634] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:41:18.951 [DEBUG] [Thread-167636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:29.850 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:29.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:34.006 [DEBUG] [Thread-167637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:39.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:41:39.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:41:39.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-04-11T09:41:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 41, 32), 0.134785, 99.4108, 0.0, 22.073, 12.9859, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:41:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:41:32
2026-04-11T09:41:41.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:41:41.567 [DEBUG] [Thread-167638] [transport.py] [_log()] starting thread (client mode): 0xae5157e0
2026-04-11T09:41:41.567 [DEBUG] [Thread-167638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:41:41.587 [DEBUG] [Thread-167638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:41:41.587 [INFO] [Thread-167638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:41:41.590 [DEBUG] [Thread-167638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:41:41.590 [DEBUG] [Thread-167638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] client lang: <none>
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] server lang: <none>
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] kex follows: False
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:41:41.591 [DEBUG] [Thread-167638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:41:41.592 [DEBUG] [Thread-167638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:41:41.592 [DEBUG] [Thread-167638] [transport.py] [_log()] Compression: none
2026-04-11T09:41:41.592 [DEBUG] [Thread-167638] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:41:41.610 [DEBUG] [Thread-167638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:41:41.611 [DEBUG] [Thread-167638] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:41:41.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:41:41.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:41:41.613 [DEBUG] [Thread-167638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:41:41.653 [DEBUG] [Thread-167638] [transport.py] [_log()] userauth is OK
2026-04-11T09:41:41.653 [DEBUG] [Thread-167638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:41:41.653 [DEBUG] [Thread-167638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:41:41.653 [DEBUG] [Thread-167638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:41:41.653 [DEBUG] [Thread-167638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:41:41.678 [INFO] [Thread-167638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:41:41.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:41:42.489 [DEBUG] [Thread-167638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:41:42.489 [DEBUG] [Thread-167638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:41:42.489 [DEBUG] [Thread-167638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:41:42.530 [DEBUG] [Thread-167638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:41:42.530 [DEBUG] [Thread-167638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:41:42.534 [DEBUG] [Thread-167638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:41:42.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:41:42.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:41:42.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:41:42.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:41:42.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:41:42.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:41:42.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:41:42.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:41:42.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:41:42.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.319913 -999.00  +12.90  15.96     97  +12.40 1 3 1 3 1   887    0 0.42 -0.38 ----- 24.0 16.0 86.2 29.4 13.9 -0.8 14.0 -0.1 13.8 -0.3 14.2 -0.6
2026-04-11T09:41:42.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:41:42.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:41:42.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.319913
2026-04-11T09:41:42.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:41:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:41:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:41:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:41:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:41:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:41:32', tmtdew=0.134785, humidity=99.4108, cloud=0.0, wind=22.073, temperature=12.9859, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:40:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:41:42.562 [DEBUG] [Thread-167638] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:41:42.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:41:42.665 [DEBUG] [Thread-167641] [transport.py] [_log()] starting thread (client mode): 0xae52f8e0
2026-04-11T09:41:42.665 [DEBUG] [Thread-167641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:41:42.679 [DEBUG] [Thread-167641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:41:42.679 [INFO] [Thread-167641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] client lang: <none>
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] server lang: <none>
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] kex follows: False
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:41:42.687 [DEBUG] [Thread-167641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:41:42.688 [DEBUG] [Thread-167641] [transport.py] [_log()] Compression: none
2026-04-11T09:41:42.688 [DEBUG] [Thread-167641] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:41:42.744 [DEBUG] [Thread-167641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:41:42.745 [DEBUG] [Thread-167641] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:41:42.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:41:42.746 [DEBUG] [Thread-167641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:41:42.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:41:42.801 [DEBUG] [Thread-167641] [transport.py] [_log()] userauth is OK
2026-04-11T09:41:42.801 [DEBUG] [Thread-167641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:41:42.801 [DEBUG] [Thread-167641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:41:42.801 [DEBUG] [Thread-167641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:41:42.801 [DEBUG] [Thread-167641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:41:42.820 [INFO] [Thread-167641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:41:42.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:41:42.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:41:43.649 [DEBUG] [Thread-167641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:41:43.650 [DEBUG] [Thread-167641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:41:43.698 [DEBUG] [Thread-167641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:41:43.698 [DEBUG] [Thread-167641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:41:43.708 [DEBUG] [Thread-167641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:41:43.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:41:43.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-04-11T09:41:43.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-04-11T09:41:43.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:41:43.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:41:43.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:41:43.745 [DEBUG] [Thread-167641] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:41:49.041 [DEBUG] [Thread-167643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:41:57.172 [DEBUG] [Thread-167644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:04.081 [DEBUG] [Thread-167645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:13.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:42:13.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:42:13.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-04-11T09:42:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 42, 7), 0.137465, 99.3935, 0.0, 20.6089, 12.9854, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:42:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:42:07
2026-04-11T09:42:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:42:15.602 [DEBUG] [Thread-167646] [transport.py] [_log()] starting thread (client mode): 0xa79b5750
2026-04-11T09:42:15.602 [DEBUG] [Thread-167646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:42:15.623 [DEBUG] [Thread-167646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:42:15.623 [INFO] [Thread-167646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:42:15.626 [DEBUG] [Thread-167646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] client lang: <none>
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] server lang: <none>
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] kex follows: False
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:42:15.627 [DEBUG] [Thread-167646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:42:15.628 [DEBUG] [Thread-167646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:42:15.628 [DEBUG] [Thread-167646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:42:15.628 [DEBUG] [Thread-167646] [transport.py] [_log()] Compression: none
2026-04-11T09:42:15.628 [DEBUG] [Thread-167646] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:42:15.644 [DEBUG] [Thread-167646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:42:15.645 [DEBUG] [Thread-167646] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:42:15.645 [DEBUG] [Thread-167646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:42:15.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:42:15.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:42:15.647 [DEBUG] [Thread-167646] [transport.py] [_log()] userauth is OK
2026-04-11T09:42:15.647 [DEBUG] [Thread-167646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:42:15.648 [DEBUG] [Thread-167646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:42:15.648 [DEBUG] [Thread-167646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:42:15.648 [DEBUG] [Thread-167646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:42:15.671 [INFO] [Thread-167646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:42:15.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:42:16.482 [DEBUG] [Thread-167646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:42:16.482 [DEBUG] [Thread-167646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:42:16.483 [DEBUG] [Thread-167646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:42:16.524 [DEBUG] [Thread-167646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:42:16.524 [DEBUG] [Thread-167646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:42:16.527 [DEBUG] [Thread-167646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:42:16.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:42:16.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:42:16.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:42:16.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:42:16.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:42:16.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:42:16.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:42:16.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:42:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:42:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.320607 -999.00  +12.90  11.29     97  +12.50 1 3 1 3 1   887    0 0.42 -0.15 ----- 18.5 11.3 118.9 22.4 14.0 -0.5 14.0 -0.3 13.9 -0.4 14.2 -0.6
2026-04-11T09:42:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:42:16.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:42:16.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.320607
2026-04-11T09:42:16.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:42:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:42:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:42:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:42:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:42:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:42:07', tmtdew=0.137465, humidity=99.3935, cloud=0.0, wind=20.6089, temperature=12.9854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:41:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:42:16.549 [DEBUG] [Thread-167646] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:42: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-04-11T09:42:16.655 [DEBUG] [Thread-167649] [transport.py] [_log()] starting thread (client mode): 0xa79b5cf0
2026-04-11T09:42:16.655 [DEBUG] [Thread-167649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:42:16.670 [DEBUG] [Thread-167649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:42:16.670 [INFO] [Thread-167649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:16.677 [DEBUG] [Thread-167649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] client lang: <none>
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] server lang: <none>
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] kex follows: False
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] Compression: none
2026-04-11T09:42:16.678 [DEBUG] [Thread-167649] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:42:16.736 [DEBUG] [Thread-167649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:42:16.736 [DEBUG] [Thread-167649] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:42:16.736 [DEBUG] [Thread-167649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:42:16.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:42:16.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:42:16.792 [DEBUG] [Thread-167649] [transport.py] [_log()] userauth is OK
2026-04-11T09:42:16.792 [DEBUG] [Thread-167649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:42:16.792 [DEBUG] [Thread-167649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:42:16.792 [DEBUG] [Thread-167649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:42:16.792 [DEBUG] [Thread-167649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:42:16.812 [INFO] [Thread-167649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:42:16.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:42:16.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:42:17.653 [DEBUG] [Thread-167649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:42:17.653 [DEBUG] [Thread-167649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:42:17.701 [DEBUG] [Thread-167649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:42:17.701 [DEBUG] [Thread-167649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:42:17.710 [DEBUG] [Thread-167649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:42:17.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:42:17.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-04-11T09:42:17.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:42:17.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:42:17.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:42:17.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:42:17.743 [DEBUG] [Thread-167649] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:42:19.117 [DEBUG] [Thread-167651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:29.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:29.994 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:34.165 [DEBUG] [Thread-167652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:47.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:42:47.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:42:47.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-04-11T09:42:49.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 42, 7), 0.137465, 99.3935, 0.0, 20.6089, 12.9854, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:42:49.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:42:07
2026-04-11T09:42:49.207 [DEBUG] [Thread-167653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:42:49.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:42:49.581 [DEBUG] [Thread-167654] [transport.py] [_log()] starting thread (client mode): 0xa79b7c10
2026-04-11T09:42:49.581 [DEBUG] [Thread-167654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:42:49.600 [DEBUG] [Thread-167654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:42:49.600 [INFO] [Thread-167654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] client lang: <none>
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] server lang: <none>
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] kex follows: False
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] Compression: none
2026-04-11T09:42:49.604 [DEBUG] [Thread-167654] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:42:49.620 [DEBUG] [Thread-167654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:42:49.621 [DEBUG] [Thread-167654] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:42:49.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:42:49.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:42:49.622 [DEBUG] [Thread-167654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:42:49.623 [DEBUG] [Thread-167654] [transport.py] [_log()] userauth is OK
2026-04-11T09:42:49.623 [DEBUG] [Thread-167654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:42:49.623 [DEBUG] [Thread-167654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:42:49.623 [DEBUG] [Thread-167654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:42:49.624 [DEBUG] [Thread-167654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:42:49.643 [INFO] [Thread-167654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:42:49.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:42:50.429 [DEBUG] [Thread-167654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:42:50.430 [DEBUG] [Thread-167654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:42:50.430 [DEBUG] [Thread-167654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:42:50.470 [DEBUG] [Thread-167654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:42:50.470 [DEBUG] [Thread-167654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:42:50.474 [DEBUG] [Thread-167654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:42:50.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:42:50.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:42:50.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:42:50.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:42:50.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:42:50.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:42:50.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:42:50.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:42:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:42:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.320955 -999.00  +13.00   9.58     97  +12.50 1 3 1 3 1   887    0 0.44 0.10 ----- 11.8 9.6 98.6 18.2 14.0 -0.7 14.0 -0.2 13.9 -0.2 14.2 -0.4
2026-04-11T09:42:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:42:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:42:50.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.320955
2026-04-11T09:42:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:42:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:42:50.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:42:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:42:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:42:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:42:07', tmtdew=0.137465, humidity=99.3935, cloud=0.0, wind=20.6089, temperature=12.9854, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:42:10.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:42:50.502 [DEBUG] [Thread-167654] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:42:50.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:42:50.605 [DEBUG] [Thread-167657] [transport.py] [_log()] starting thread (client mode): 0xae52f2e0
2026-04-11T09:42:50.605 [DEBUG] [Thread-167657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:42:50.620 [DEBUG] [Thread-167657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:42:50.620 [INFO] [Thread-167657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:42:50.627 [DEBUG] [Thread-167657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] client lang: <none>
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] server lang: <none>
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] kex follows: False
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] Compression: none
2026-04-11T09:42:50.628 [DEBUG] [Thread-167657] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:42:50.688 [DEBUG] [Thread-167657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:42:50.688 [DEBUG] [Thread-167657] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:42:50.688 [DEBUG] [Thread-167657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:42:50.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:42:50.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:42:50.745 [DEBUG] [Thread-167657] [transport.py] [_log()] userauth is OK
2026-04-11T09:42:50.745 [DEBUG] [Thread-167657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:42:50.745 [DEBUG] [Thread-167657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:42:50.745 [DEBUG] [Thread-167657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:42:50.745 [DEBUG] [Thread-167657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:42:50.769 [INFO] [Thread-167657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:42:50.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:42:50.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:42:51.695 [DEBUG] [Thread-167657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:42:51.695 [DEBUG] [Thread-167657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:42:51.747 [DEBUG] [Thread-167657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:42:51.748 [DEBUG] [Thread-167657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:42:51.757 [DEBUG] [Thread-167657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:42:51.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:42:51.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-04-11T09:42:51.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-04-11T09:42:51.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:42:51.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:42:51.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:42:51.794 [DEBUG] [Thread-167657] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:42:57.231 [DEBUG] [Thread-167659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:04.245 [DEBUG] [Thread-167660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:19.298 [DEBUG] [Thread-167661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:43:21.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:43:21.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:43:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 42, 43), 0.18522, 98.7206, 0.0, 21.4186, 13.3709, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:43:23.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:42:43
2026-04-11T09:43:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:43:23.807 [DEBUG] [Thread-167662] [transport.py] [_log()] starting thread (client mode): 0xae514580
2026-04-11T09:43:23.807 [DEBUG] [Thread-167662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:43:23.828 [DEBUG] [Thread-167662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:43:23.828 [INFO] [Thread-167662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] client lang: <none>
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] server lang: <none>
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] kex follows: False
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:43:23.831 [DEBUG] [Thread-167662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:43:23.832 [DEBUG] [Thread-167662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:43:23.832 [DEBUG] [Thread-167662] [transport.py] [_log()] Compression: none
2026-04-11T09:43:23.832 [DEBUG] [Thread-167662] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:43:23.849 [DEBUG] [Thread-167662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:43:23.849 [DEBUG] [Thread-167662] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:43:23.850 [DEBUG] [Thread-167662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:43:23.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:43:23.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:43:23.893 [DEBUG] [Thread-167662] [transport.py] [_log()] userauth is OK
2026-04-11T09:43:23.893 [DEBUG] [Thread-167662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:43:23.894 [DEBUG] [Thread-167662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:43:23.894 [DEBUG] [Thread-167662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:43:23.894 [DEBUG] [Thread-167662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:43:23.914 [INFO] [Thread-167662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:43:23.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:43:24.690 [DEBUG] [Thread-167662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:43:24.691 [DEBUG] [Thread-167662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:43:24.691 [DEBUG] [Thread-167662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:43:24.732 [DEBUG] [Thread-167662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:43:24.732 [DEBUG] [Thread-167662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:43:24.736 [DEBUG] [Thread-167662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:43:24.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:43:24.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:43:24.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:43:24.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:43:24.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:43:24.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:43:24.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:43:24.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:43:24.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:43:24.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.321302 -999.00  +12.90  14.75     97  +12.50 1 3 1 3 1   887    0 0.44 0.69 ----- 21.6 14.8 121.5 24.7 14.1 -0.8 14.1 -0.3 13.9 -0.4 14.2 -0.7
2026-04-11T09:43:24.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:43:24.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:43:24.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.321302
2026-04-11T09:43:24.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:43:24.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:43:24.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:43:24.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:43:24.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:43:24.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:42:43', tmtdew=0.18522, humidity=98.7206, cloud=0.0, wind=21.4186, temperature=13.3709, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:42:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:43:24.765 [DEBUG] [Thread-167662] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:43:24.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:43:24.871 [DEBUG] [Thread-167665] [transport.py] [_log()] starting thread (client mode): 0xae52f370
2026-04-11T09:43:24.871 [DEBUG] [Thread-167665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:43:24.886 [DEBUG] [Thread-167665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:43:24.886 [INFO] [Thread-167665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:43:24.893 [DEBUG] [Thread-167665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] client lang: <none>
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] server lang: <none>
2026-04-11T09:43:24.894 [DEBUG] [Thread-167665] [transport.py] [_log()] kex follows: False
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] Compression: none
2026-04-11T09:43:24.895 [DEBUG] [Thread-167665] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:43:24.953 [DEBUG] [Thread-167665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:43:24.954 [DEBUG] [Thread-167665] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:43:24.954 [DEBUG] [Thread-167665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:43:24.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:43:24.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:43:25.013 [DEBUG] [Thread-167665] [transport.py] [_log()] userauth is OK
2026-04-11T09:43:25.014 [DEBUG] [Thread-167665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:43:25.014 [DEBUG] [Thread-167665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:43:25.014 [DEBUG] [Thread-167665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:43:25.014 [DEBUG] [Thread-167665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:43:25.032 [INFO] [Thread-167665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:43:25.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:43:25.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:43:25.863 [DEBUG] [Thread-167665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:43:25.863 [DEBUG] [Thread-167665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:43:25.911 [DEBUG] [Thread-167665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:43:25.911 [DEBUG] [Thread-167665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:43:25.921 [DEBUG] [Thread-167665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:43:25.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:43:25.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:43:25.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-04-11T09:43:25.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:43:25.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:43:25.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:43:25.958 [DEBUG] [Thread-167665] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:43:30.134 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:30.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:34.339 [DEBUG] [Thread-167667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:49.391 [DEBUG] [Thread-167668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:55.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:43:55.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:43: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-04-11T09:43:57.274 [DEBUG] [Thread-167669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:43:57.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 43, 18), 0.087515, 99.3933, 0.0, 17.5572, 13.0351, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:43:57.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:43:18
2026-04-11T09:43:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:43:57.961 [DEBUG] [Thread-167670] [transport.py] [_log()] starting thread (client mode): 0xae516140
2026-04-11T09:43:57.961 [DEBUG] [Thread-167670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:43:57.981 [DEBUG] [Thread-167670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:43:57.981 [INFO] [Thread-167670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:43:57.982 [DEBUG] [Thread-167670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] client lang: <none>
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] server lang: <none>
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] kex follows: False
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] Compression: none
2026-04-11T09:43:57.983 [DEBUG] [Thread-167670] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:43:57.996 [DEBUG] [Thread-167670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:43:57.997 [DEBUG] [Thread-167670] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:43:57.997 [DEBUG] [Thread-167670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:43:57.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:43:57.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:43:57.999 [DEBUG] [Thread-167670] [transport.py] [_log()] userauth is OK
2026-04-11T09:43:57.999 [DEBUG] [Thread-167670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:43:57.999 [DEBUG] [Thread-167670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:43:58.000 [DEBUG] [Thread-167670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:43:58.000 [DEBUG] [Thread-167670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:43:58.036 [INFO] [Thread-167670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:43:58.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:43:58.838 [DEBUG] [Thread-167670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:43:58.838 [DEBUG] [Thread-167670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:43:58.839 [DEBUG] [Thread-167670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:43:58.879 [DEBUG] [Thread-167670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:43:58.879 [DEBUG] [Thread-167670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:43:58.883 [DEBUG] [Thread-167670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:43:58.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:43:58.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:43:58.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:43:58.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:43:58.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:43:58.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:43:58.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:43:58.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:43:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:43:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.321649 -999.00  +12.90  17.63     97  +12.50 1 3 1 3 1   888    0 0.46 0.62 ----- 13.9 17.6 101.9 24.4 14.0 -1.1 14.0 -0.3 13.9 -0.4 14.2 -0.6
2026-04-11T09:43:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:43:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:43:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.321649
2026-04-11T09:43:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:43:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:43:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:43:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:43:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:43:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:43:18', tmtdew=0.087515, humidity=99.3933, cloud=0.0, wind=17.5572, temperature=13.0351, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:43:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:43:58.909 [DEBUG] [Thread-167670] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:43:58.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:43:59.002 [DEBUG] [Thread-167673] [transport.py] [_log()] starting thread (client mode): 0xae5f2f50
2026-04-11T09:43:59.003 [DEBUG] [Thread-167673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:43:59.017 [DEBUG] [Thread-167673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:43:59.017 [INFO] [Thread-167673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:43:59.024 [DEBUG] [Thread-167673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] client lang: <none>
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] server lang: <none>
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] kex follows: False
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] Compression: none
2026-04-11T09:43:59.025 [DEBUG] [Thread-167673] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:43:59.080 [DEBUG] [Thread-167673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:43:59.080 [DEBUG] [Thread-167673] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:43:59.080 [DEBUG] [Thread-167673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:43:59.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:43:59.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:43:59.137 [DEBUG] [Thread-167673] [transport.py] [_log()] userauth is OK
2026-04-11T09:43:59.137 [DEBUG] [Thread-167673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:43:59.137 [DEBUG] [Thread-167673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:43:59.137 [DEBUG] [Thread-167673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:43:59.137 [DEBUG] [Thread-167673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:43:59.153 [INFO] [Thread-167673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:43:59.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:43:59.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:44:00.005 [DEBUG] [Thread-167673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:44:00.005 [DEBUG] [Thread-167673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:44:00.053 [DEBUG] [Thread-167673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:44:00.053 [DEBUG] [Thread-167673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:44:00.062 [DEBUG] [Thread-167673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:44:00.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:44:00.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:44:00.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:44:00.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:44:00.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:44:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:44:00.096 [DEBUG] [Thread-167673] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:44:04.428 [DEBUG] [Thread-167675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:44:19.491 [DEBUG] [Thread-167676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:44:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:44:30.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:44:30.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-04-11T09:44:30.277 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:44:30.278 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:44:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 43, 54), 0.15974, 98.8851, 0.0, 21.9478, 13.4363, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:44:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:43:54
2026-04-11T09:44:31.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:44:32.038 [DEBUG] [Thread-167677] [transport.py] [_log()] starting thread (client mode): 0xae5147f0
2026-04-11T09:44:32.038 [DEBUG] [Thread-167677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:44:32.058 [DEBUG] [Thread-167677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:44:32.058 [INFO] [Thread-167677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:44:32.061 [DEBUG] [Thread-167677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:44:32.061 [DEBUG] [Thread-167677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:44:32.061 [DEBUG] [Thread-167677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] client lang: <none>
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] server lang: <none>
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] kex follows: False
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] Compression: none
2026-04-11T09:44:32.062 [DEBUG] [Thread-167677] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:44:32.079 [DEBUG] [Thread-167677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:44:32.079 [DEBUG] [Thread-167677] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:44:32.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:44:32.080 [DEBUG] [Thread-167677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:44:32.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:44:32.082 [DEBUG] [Thread-167677] [transport.py] [_log()] userauth is OK
2026-04-11T09:44:32.082 [DEBUG] [Thread-167677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:44:32.082 [DEBUG] [Thread-167677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:44:32.083 [DEBUG] [Thread-167677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:44:32.083 [DEBUG] [Thread-167677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:44:32.106 [INFO] [Thread-167677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:44:32.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:44:32.866 [DEBUG] [Thread-167677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:44:32.867 [DEBUG] [Thread-167677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:44:32.867 [DEBUG] [Thread-167677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:44:32.908 [DEBUG] [Thread-167677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:44:32.908 [DEBUG] [Thread-167677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:44:32.911 [DEBUG] [Thread-167677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:44:32.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:44:32.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:44:32.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:44:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:44:32.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:44:32.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:44:32.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:44:32.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:44:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:44:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.321996 -999.00  +12.90  15.57     97  +12.50 1 3 1 3 1   888    0 0.45 0.43 ----- 15.2 15.6 118.4 19.9 14.0 -0.7 14.1 -0.2 13.9 -0.3 14.2 -0.6
2026-04-11T09:44:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:44:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:44:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.321996
2026-04-11T09:44:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:44:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:44:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:44:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:44:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:44:32.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:43:54', tmtdew=0.15974, humidity=98.8851, cloud=0.0, wind=21.9478, temperature=13.4363, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:43:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:44:32.937 [DEBUG] [Thread-167677] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:44:33.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:44:33.031 [DEBUG] [Thread-167680] [transport.py] [_log()] starting thread (client mode): 0xae5f15a0
2026-04-11T09:44:33.031 [DEBUG] [Thread-167680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:44:33.048 [DEBUG] [Thread-167680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:44:33.048 [INFO] [Thread-167680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:44:33.055 [DEBUG] [Thread-167680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:44:33.056 [DEBUG] [Thread-167680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] client lang: <none>
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] server lang: <none>
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] kex follows: False
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:44:33.057 [DEBUG] [Thread-167680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:44:33.058 [DEBUG] [Thread-167680] [transport.py] [_log()] Compression: none
2026-04-11T09:44:33.058 [DEBUG] [Thread-167680] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:44:33.119 [DEBUG] [Thread-167680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:44:33.119 [DEBUG] [Thread-167680] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:44:33.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:44:33.121 [DEBUG] [Thread-167680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:44:33.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:44:33.178 [DEBUG] [Thread-167680] [transport.py] [_log()] userauth is OK
2026-04-11T09:44:33.179 [DEBUG] [Thread-167680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:44:33.179 [DEBUG] [Thread-167680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:44:33.179 [DEBUG] [Thread-167680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:44:33.179 [DEBUG] [Thread-167680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:44:33.200 [INFO] [Thread-167680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:44:33.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:44:33.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:44:34.070 [DEBUG] [Thread-167680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:44:34.070 [DEBUG] [Thread-167680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:44:34.118 [DEBUG] [Thread-167680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:44:34.118 [DEBUG] [Thread-167680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:44:34.127 [DEBUG] [Thread-167680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:44:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:44:34.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-04-11T09:44:34.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-04-11T09:44:34.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:44:34.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:44:34.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:44:34.171 [DEBUG] [Thread-167680] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:44:34.525 [DEBUG] [Thread-167682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:44:49.592 [DEBUG] [Thread-167683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:44:57.315 [DEBUG] [Thread-167684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:45:04.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:45:04.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-04-11T09:45:04.630 [DEBUG] [Thread-167685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 44, 30), 0.079885, 99.4425, 0.0, 19.197, 13.0513, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:45:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:44:30
2026-04-11T09:45:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:45:06.036 [DEBUG] [Thread-167686] [transport.py] [_log()] starting thread (client mode): 0xae5a4df0
2026-04-11T09:45:06.036 [DEBUG] [Thread-167686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:45:06.056 [DEBUG] [Thread-167686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:45:06.057 [INFO] [Thread-167686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:45:06.060 [DEBUG] [Thread-167686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:45:06.060 [DEBUG] [Thread-167686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:45:06.060 [DEBUG] [Thread-167686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:45:06.060 [DEBUG] [Thread-167686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:06.060 [DEBUG] [Thread-167686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:06.060 [DEBUG] [Thread-167686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] client lang: <none>
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] server lang: <none>
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] kex follows: False
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:45:06.061 [DEBUG] [Thread-167686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:45:06.062 [DEBUG] [Thread-167686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:45:06.062 [DEBUG] [Thread-167686] [transport.py] [_log()] Compression: none
2026-04-11T09:45:06.062 [DEBUG] [Thread-167686] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:45:06.076 [DEBUG] [Thread-167686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:45:06.076 [DEBUG] [Thread-167686] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:45:06.077 [DEBUG] [Thread-167686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:45:06.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:45:06.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:45:06.079 [DEBUG] [Thread-167686] [transport.py] [_log()] userauth is OK
2026-04-11T09:45:06.080 [DEBUG] [Thread-167686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:45:06.080 [DEBUG] [Thread-167686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:45:06.080 [DEBUG] [Thread-167686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:45:06.080 [DEBUG] [Thread-167686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:45:06.115 [INFO] [Thread-167686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:45:06.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:45:09.851 [DEBUG] [Thread-167686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:45:09.852 [DEBUG] [Thread-167686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:45:09.852 [DEBUG] [Thread-167686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:45:09.893 [DEBUG] [Thread-167686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:45:09.893 [DEBUG] [Thread-167686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:45:09.896 [DEBUG] [Thread-167686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:45:09.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:45:09.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:45:09.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:45:09.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:45:09.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:45:09.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:45:09.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:45:09.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:45:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:45:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.322691 -999.00  +13.00  20.21     97  +12.50 1 3 1 3 1   888    0 0.45 0.46 ----- 9.6 20.2 75.2 24.8 14.0 -0.8 14.1 -0.2 13.9 -0.3 14.2 -0.6
2026-04-11T09:45:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:45:09.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:45:09.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.322691
2026-04-11T09:45:09.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:45:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:45:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:45:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:45:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:45:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:44:30', tmtdew=0.079885, humidity=99.4425, cloud=0.0, wind=19.197, temperature=13.0513, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:44:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:45:09.927 [DEBUG] [Thread-167686] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:45: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-04-11T09:45:10.020 [DEBUG] [Thread-167689] [transport.py] [_log()] starting thread (client mode): 0xae5a5ab0
2026-04-11T09:45:10.020 [DEBUG] [Thread-167689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:45:10.035 [DEBUG] [Thread-167689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:45:10.036 [INFO] [Thread-167689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:45:10.043 [DEBUG] [Thread-167689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:45:10.043 [DEBUG] [Thread-167689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:45:10.043 [DEBUG] [Thread-167689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:45:10.043 [DEBUG] [Thread-167689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:10.043 [DEBUG] [Thread-167689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] client lang: <none>
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] server lang: <none>
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] kex follows: False
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] Compression: none
2026-04-11T09:45:10.044 [DEBUG] [Thread-167689] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:45:10.103 [DEBUG] [Thread-167689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:45:10.103 [DEBUG] [Thread-167689] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:45:10.104 [DEBUG] [Thread-167689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:45:10.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:45:10.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:45:10.158 [DEBUG] [Thread-167689] [transport.py] [_log()] userauth is OK
2026-04-11T09:45:10.158 [DEBUG] [Thread-167689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:45:10.158 [DEBUG] [Thread-167689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:45:10.158 [DEBUG] [Thread-167689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:45:10.159 [DEBUG] [Thread-167689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:45:10.177 [INFO] [Thread-167689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:45:10.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:45:10.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:45:10.999 [DEBUG] [Thread-167689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:45:11.000 [DEBUG] [Thread-167689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:45:11.048 [DEBUG] [Thread-167689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:45:11.049 [DEBUG] [Thread-167689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:45:11.059 [DEBUG] [Thread-167689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:45:11.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:45:11.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-04-11T09:45:11.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:45:11.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:45:11.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:45:11.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:45:11.101 [DEBUG] [Thread-167689] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:45:19.669 [DEBUG] [Thread-167691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:30.419 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:30.420 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:34.723 [DEBUG] [Thread-167692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:45:41.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:45:41.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:45:42.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 45, 5), 0.085025, 99.4094, 0.0, 20.4847, 13.0347, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:45:42.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:45:05
2026-04-11T09:45:42.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:45:42.989 [DEBUG] [Thread-167693] [transport.py] [_log()] starting thread (client mode): 0xa79b4580
2026-04-11T09:45:42.989 [DEBUG] [Thread-167693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:45:43.009 [DEBUG] [Thread-167693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:45:43.010 [INFO] [Thread-167693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:45:43.013 [DEBUG] [Thread-167693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] client lang: <none>
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] server lang: <none>
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] kex follows: False
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] Compression: none
2026-04-11T09:45:43.014 [DEBUG] [Thread-167693] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:45:43.033 [DEBUG] [Thread-167693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:45:43.034 [DEBUG] [Thread-167693] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:45:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:45:43.035 [DEBUG] [Thread-167693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:45:43.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:45:43.037 [DEBUG] [Thread-167693] [transport.py] [_log()] userauth is OK
2026-04-11T09:45:43.038 [DEBUG] [Thread-167693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:45:43.038 [DEBUG] [Thread-167693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:45:43.038 [DEBUG] [Thread-167693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:45:43.038 [DEBUG] [Thread-167693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:45:43.060 [INFO] [Thread-167693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:45:43.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:45:43.818 [DEBUG] [Thread-167693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:45:43.818 [DEBUG] [Thread-167693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:45:43.819 [DEBUG] [Thread-167693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:45:43.859 [DEBUG] [Thread-167693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:45:43.860 [DEBUG] [Thread-167693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:45:43.863 [DEBUG] [Thread-167693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:45:43.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:45:43.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:45:43.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:45:43.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:45:43.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:45:43.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:45:43.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:45:43.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:45:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:45:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.323385 -999.00  +12.90  21.27     97  +12.50 1 3 1 3 1   888    0 0.45 0.13 ----- 23.9 21.3 60.4 28.6 14.0 -1.0 14.0 -0.5 13.9 -0.6 14.2 -0.7
2026-04-11T09:45:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:45:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:45:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.323385
2026-04-11T09:45:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:45:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:45:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:45:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:45:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:45:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:45:05', tmtdew=0.085025, humidity=99.4094, cloud=0.0, wind=20.4847, temperature=13.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:45:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:45:43.892 [DEBUG] [Thread-167693] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:45:43.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:45:43.985 [DEBUG] [Thread-167696] [transport.py] [_log()] starting thread (client mode): 0xa79b4610
2026-04-11T09:45:43.985 [DEBUG] [Thread-167696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:45:44.000 [DEBUG] [Thread-167696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:45:44.000 [INFO] [Thread-167696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] client lang: <none>
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] server lang: <none>
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] kex follows: False
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:45:44.008 [DEBUG] [Thread-167696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:45:44.009 [DEBUG] [Thread-167696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:45:44.009 [DEBUG] [Thread-167696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:45:44.009 [DEBUG] [Thread-167696] [transport.py] [_log()] Compression: none
2026-04-11T09:45:44.009 [DEBUG] [Thread-167696] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:45:44.066 [DEBUG] [Thread-167696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:45:44.067 [DEBUG] [Thread-167696] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:45:44.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:45:44.068 [DEBUG] [Thread-167696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:45:44.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:45:44.122 [DEBUG] [Thread-167696] [transport.py] [_log()] userauth is OK
2026-04-11T09:45:44.123 [DEBUG] [Thread-167696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:45:44.123 [DEBUG] [Thread-167696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:45:44.123 [DEBUG] [Thread-167696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:45:44.123 [DEBUG] [Thread-167696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:45:44.142 [INFO] [Thread-167696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:45:44.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:45:44.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:45:44.960 [DEBUG] [Thread-167696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:45:44.960 [DEBUG] [Thread-167696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:45:45.008 [DEBUG] [Thread-167696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:45:45.008 [DEBUG] [Thread-167696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:45:45.019 [DEBUG] [Thread-167696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:45:45.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:45:45.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:45:45.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-04-11T09:45:45.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:45:45.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:45:45.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:45:45.058 [DEBUG] [Thread-167696] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:45:49.760 [DEBUG] [Thread-167698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:45:57.350 [DEBUG] [Thread-167699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:04.816 [DEBUG] [Thread-167700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:15.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:46:15.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:46:15.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-04-11T09:46:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 45, 41), 0.15975, 98.8851, 0.0, 21.4186, 13.4363, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:46:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:45:41
2026-04-11T09:46:16.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:46:16.916 [DEBUG] [Thread-167701] [transport.py] [_log()] starting thread (client mode): 0xae5f01f0
2026-04-11T09:46:16.916 [DEBUG] [Thread-167701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:46:16.939 [DEBUG] [Thread-167701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:46:16.939 [INFO] [Thread-167701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] client lang: <none>
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] server lang: <none>
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] kex follows: False
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:46:16.942 [DEBUG] [Thread-167701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:46:16.943 [DEBUG] [Thread-167701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:46:16.943 [DEBUG] [Thread-167701] [transport.py] [_log()] Compression: none
2026-04-11T09:46:16.943 [DEBUG] [Thread-167701] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:46:16.959 [DEBUG] [Thread-167701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:46:16.960 [DEBUG] [Thread-167701] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:46:16.960 [DEBUG] [Thread-167701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:46:16.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:46:16.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:46:16.962 [DEBUG] [Thread-167701] [transport.py] [_log()] userauth is OK
2026-04-11T09:46:16.963 [DEBUG] [Thread-167701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:46:16.963 [DEBUG] [Thread-167701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:46:16.963 [DEBUG] [Thread-167701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:46:16.963 [DEBUG] [Thread-167701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:46:16.987 [INFO] [Thread-167701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:46:16.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:46:17.739 [DEBUG] [Thread-167701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:46:17.739 [DEBUG] [Thread-167701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:46:17.739 [DEBUG] [Thread-167701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:46:17.780 [DEBUG] [Thread-167701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:46:17.780 [DEBUG] [Thread-167701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:46:17.784 [DEBUG] [Thread-167701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:46:17.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:46:17.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:46:17.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:46:17.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:46:17.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:46:17.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:46:17.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:46:17.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:46:17.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:46:17.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.323385 -999.00  +12.90  21.27     97  +12.50 1 3 1 3 1   888    0 0.45 0.13 ----- 23.9 21.3 60.4 28.6 14.0 -1.0 14.0 -0.5 13.9 -0.6 14.2 -0.7
2026-04-11T09:46:17.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:46:17.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:46:17.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.323385
2026-04-11T09:46:17.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:46:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:46:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:46:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:46:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:46:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:45:41', tmtdew=0.15975, humidity=98.8851, cloud=0.0, wind=21.4186, temperature=13.4363, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:45:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:46:17.808 [DEBUG] [Thread-167701] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:46:17.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:46:17.913 [DEBUG] [Thread-167704] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-11T09:46:17.913 [DEBUG] [Thread-167704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:46:17.927 [DEBUG] [Thread-167704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:46:17.928 [INFO] [Thread-167704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] client lang: <none>
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] server lang: <none>
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] kex follows: False
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:46:17.935 [DEBUG] [Thread-167704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:46:17.936 [DEBUG] [Thread-167704] [transport.py] [_log()] Compression: none
2026-04-11T09:46:17.936 [DEBUG] [Thread-167704] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:46:17.994 [DEBUG] [Thread-167704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:46:17.995 [DEBUG] [Thread-167704] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:46:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:46:17.996 [DEBUG] [Thread-167704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:46:17.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:46:18.052 [DEBUG] [Thread-167704] [transport.py] [_log()] userauth is OK
2026-04-11T09:46:18.052 [DEBUG] [Thread-167704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:46:18.052 [DEBUG] [Thread-167704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:46:18.052 [DEBUG] [Thread-167704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:46:18.052 [DEBUG] [Thread-167704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:46:18.071 [INFO] [Thread-167704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:46:18.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:46:18.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:46:18.942 [DEBUG] [Thread-167704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:46:18.942 [DEBUG] [Thread-167704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:46:18.990 [DEBUG] [Thread-167704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:46:18.990 [DEBUG] [Thread-167704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:46:19.000 [DEBUG] [Thread-167704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:46:19.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:46: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-04-11T09:46:19.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-04-11T09:46:19.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:46:19.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:46:19.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:46:19.038 [DEBUG] [Thread-167704] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:46:19.856 [DEBUG] [Thread-167706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:30.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:30.560 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:34.912 [DEBUG] [Thread-167707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:46:49.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:46:49.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-04-11T09:46:49.948 [DEBUG] [Thread-167708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:46:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 46, 16), 0.08759, 99.3928, 0.0, 19.2683, 13.0182, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:46:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:46:16
2026-04-11T09:46:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:46:50.900 [DEBUG] [Thread-167709] [transport.py] [_log()] starting thread (client mode): 0xae5f23e0
2026-04-11T09:46:50.900 [DEBUG] [Thread-167709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:46:50.926 [DEBUG] [Thread-167709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:46:50.926 [INFO] [Thread-167709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:46:50.929 [DEBUG] [Thread-167709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:46:50.929 [DEBUG] [Thread-167709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:46:50.929 [DEBUG] [Thread-167709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:46:50.929 [DEBUG] [Thread-167709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] client lang: <none>
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] server lang: <none>
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] kex follows: False
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] Compression: none
2026-04-11T09:46:50.930 [DEBUG] [Thread-167709] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:46:50.950 [DEBUG] [Thread-167709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:46:50.950 [DEBUG] [Thread-167709] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:46:50.951 [DEBUG] [Thread-167709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:46:50.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:46:50.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:46:50.953 [DEBUG] [Thread-167709] [transport.py] [_log()] userauth is OK
2026-04-11T09:46:50.954 [DEBUG] [Thread-167709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:46:50.954 [DEBUG] [Thread-167709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:46:50.954 [DEBUG] [Thread-167709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:46:50.954 [DEBUG] [Thread-167709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:46:50.981 [INFO] [Thread-167709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:46:50.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:46:51.755 [DEBUG] [Thread-167709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:46:51.756 [DEBUG] [Thread-167709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:46:51.756 [DEBUG] [Thread-167709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:46:51.797 [DEBUG] [Thread-167709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:46:51.797 [DEBUG] [Thread-167709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:46:51.801 [DEBUG] [Thread-167709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:46:51.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:46:51.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:46:51.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:46:51.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:46:51.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:46:51.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:46:51.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:46:51.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:46:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:46:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.323732 -999.00  +12.90  23.23     97  +12.50 1 3 1 3 1   888    0 0.43 -0.26 ----- 18.4 23.2 72.6 27.9 14.0 -0.9 14.0 -0.6 13.9 -0.5 14.2 -0.5
2026-04-11T09:46:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:46:51.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:46:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.323732
2026-04-11T09:46:51.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:46:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:46:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:46:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:46:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:46:51.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:46:16', tmtdew=0.08759, humidity=99.3928, cloud=0.0, wind=19.2683, temperature=13.0182, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:46:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:46:51.827 [DEBUG] [Thread-167709] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:46:51.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:46:51.928 [DEBUG] [Thread-167712] [transport.py] [_log()] starting thread (client mode): 0xae518730
2026-04-11T09:46:51.928 [DEBUG] [Thread-167712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:46:51.949 [DEBUG] [Thread-167712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:46:51.949 [INFO] [Thread-167712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:46:51.961 [DEBUG] [Thread-167712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] client lang: <none>
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] server lang: <none>
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] kex follows: False
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:46:51.962 [DEBUG] [Thread-167712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:46:51.963 [DEBUG] [Thread-167712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:46:51.963 [DEBUG] [Thread-167712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:46:51.963 [DEBUG] [Thread-167712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:46:51.963 [DEBUG] [Thread-167712] [transport.py] [_log()] Compression: none
2026-04-11T09:46:51.963 [DEBUG] [Thread-167712] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:46:52.025 [DEBUG] [Thread-167712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:46:52.025 [DEBUG] [Thread-167712] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:46:52.025 [DEBUG] [Thread-167712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:46:52.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:46:52.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:46:52.095 [DEBUG] [Thread-167712] [transport.py] [_log()] userauth is OK
2026-04-11T09:46:52.095 [DEBUG] [Thread-167712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:46:52.096 [DEBUG] [Thread-167712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:46:52.096 [DEBUG] [Thread-167712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:46:52.096 [DEBUG] [Thread-167712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:46:52.123 [INFO] [Thread-167712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:46:52.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:46:52.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:46:52.979 [DEBUG] [Thread-167712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:46:52.979 [DEBUG] [Thread-167712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:46:53.035 [DEBUG] [Thread-167712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:46:53.036 [DEBUG] [Thread-167712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:46:53.060 [DEBUG] [Thread-167712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:46:53.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:46:53.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-04-11T09:46:53.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-04-11T09:46:53.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:46:53.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:46:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:46:53.110 [DEBUG] [Thread-167712] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:46:57.384 [DEBUG] [Thread-167714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:04.987 [DEBUG] [Thread-167715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:20.041 [DEBUG] [Thread-167716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:47:23.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:47:23.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-04-11T09:47:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 46, 52), 0.17005, 98.8187, 0.0, 24.9818, 13.4695, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:47:24.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:46:52
2026-04-11T09:47:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:47:24.909 [DEBUG] [Thread-167717] [transport.py] [_log()] starting thread (client mode): 0xae52dd50
2026-04-11T09:47:24.909 [DEBUG] [Thread-167717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:47:24.928 [DEBUG] [Thread-167717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:47:24.928 [INFO] [Thread-167717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:47:24.931 [DEBUG] [Thread-167717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:47:24.931 [DEBUG] [Thread-167717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:47:24.931 [DEBUG] [Thread-167717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:47:24.931 [DEBUG] [Thread-167717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:24.931 [DEBUG] [Thread-167717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:24.931 [DEBUG] [Thread-167717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] client lang: <none>
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] server lang: <none>
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] kex follows: False
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] Compression: none
2026-04-11T09:47:24.932 [DEBUG] [Thread-167717] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:47:24.943 [DEBUG] [Thread-167717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:47:24.943 [DEBUG] [Thread-167717] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:47:24.944 [DEBUG] [Thread-167717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:47:24.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:47:24.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:47:24.945 [DEBUG] [Thread-167717] [transport.py] [_log()] userauth is OK
2026-04-11T09:47:24.946 [DEBUG] [Thread-167717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:47:24.946 [DEBUG] [Thread-167717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:47:24.946 [DEBUG] [Thread-167717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:47:24.946 [DEBUG] [Thread-167717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:47:24.961 [INFO] [Thread-167717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:47:24.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:47:25.693 [DEBUG] [Thread-167717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:47:25.694 [DEBUG] [Thread-167717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:47:25.694 [DEBUG] [Thread-167717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:47:25.735 [DEBUG] [Thread-167717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:47:25.735 [DEBUG] [Thread-167717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:47:25.737 [DEBUG] [Thread-167717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:47:25.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:47:25.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:47:25.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:47:25.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:47:25.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:47:25.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:47:25.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:47:25.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:47:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:47:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.324080 -999.00  +12.90  15.88     97  +12.50 1 3 1 3 1   888    0 0.41 -0.62 ----- 11.0 15.9 85.8 21.7 14.0 -0.8 14.0 -0.3 13.9 -0.3 14.2 -0.7
2026-04-11T09:47:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:47:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:47:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.324080
2026-04-11T09:47:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:47:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:47:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:47:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:47:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:47:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:46:52', tmtdew=0.17005, humidity=98.8187, cloud=0.0, wind=24.9818, temperature=13.4695, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:46:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:47:25.764 [DEBUG] [Thread-167717] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:47:25.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:47:25.858 [DEBUG] [Thread-167720] [transport.py] [_log()] starting thread (client mode): 0xae5f2ef0
2026-04-11T09:47:25.858 [DEBUG] [Thread-167720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:47:25.872 [DEBUG] [Thread-167720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:47:25.873 [INFO] [Thread-167720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:47:25.880 [DEBUG] [Thread-167720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] client lang: <none>
2026-04-11T09:47:25.881 [DEBUG] [Thread-167720] [transport.py] [_log()] server lang: <none>
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] kex follows: False
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] Compression: none
2026-04-11T09:47:25.882 [DEBUG] [Thread-167720] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:47:25.939 [DEBUG] [Thread-167720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:47:25.940 [DEBUG] [Thread-167720] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:47:25.941 [DEBUG] [Thread-167720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:47:25.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:47:25.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:47:25.995 [DEBUG] [Thread-167720] [transport.py] [_log()] userauth is OK
2026-04-11T09:47:25.995 [DEBUG] [Thread-167720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:47:25.995 [DEBUG] [Thread-167720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:47:25.996 [DEBUG] [Thread-167720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:47:25.996 [DEBUG] [Thread-167720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:47:26.014 [INFO] [Thread-167720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:47:26.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:47:26.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:47:26.950 [DEBUG] [Thread-167720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:47:26.950 [DEBUG] [Thread-167720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:47:26.998 [DEBUG] [Thread-167720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:47:26.998 [DEBUG] [Thread-167720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:47:27.007 [DEBUG] [Thread-167720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:47:27.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:47:27.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-04-11T09:47:27.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-04-11T09:47:27.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:47:27.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:47:27.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:47:27.044 [DEBUG] [Thread-167720] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:47:30.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:30.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:35.079 [DEBUG] [Thread-167722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:50.134 [DEBUG] [Thread-167723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:57.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:47:57.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:47:57.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:47:57.428 [DEBUG] [Thread-167724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:47:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 47, 27), 0.087645, 99.3924, 0.0, 20.1848, 13.0013, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:47:58.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:47:27
2026-04-11T09:47:58.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:47:58.873 [DEBUG] [Thread-167725] [transport.py] [_log()] starting thread (client mode): 0xae5e6380
2026-04-11T09:47:58.873 [DEBUG] [Thread-167725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:47:58.893 [DEBUG] [Thread-167725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:47:58.894 [INFO] [Thread-167725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] client lang: <none>
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] server lang: <none>
2026-04-11T09:47:58.897 [DEBUG] [Thread-167725] [transport.py] [_log()] kex follows: False
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] Compression: none
2026-04-11T09:47:58.898 [DEBUG] [Thread-167725] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:47:58.915 [DEBUG] [Thread-167725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:47:58.916 [DEBUG] [Thread-167725] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:47:58.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:47:58.917 [DEBUG] [Thread-167725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:47:58.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:47:58.919 [DEBUG] [Thread-167725] [transport.py] [_log()] userauth is OK
2026-04-11T09:47:58.919 [DEBUG] [Thread-167725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:47:58.919 [DEBUG] [Thread-167725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:47:58.919 [DEBUG] [Thread-167725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:47:58.920 [DEBUG] [Thread-167725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:47:58.944 [INFO] [Thread-167725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:47:58.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:47:59.712 [DEBUG] [Thread-167725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:47:59.712 [DEBUG] [Thread-167725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:47:59.712 [DEBUG] [Thread-167725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:47:59.753 [DEBUG] [Thread-167725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:47:59.753 [DEBUG] [Thread-167725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:47:59.755 [DEBUG] [Thread-167725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:47:59.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:47:59.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:47:59.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:47:59.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:47:59.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:47:59.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:47:59.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:47:59.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:47:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:47:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.324427 -999.00  +12.90  10.51     97  +12.50 1 3 1 3 1   888    0 0.41 -0.66 ----- 13.2 10.5 100.1 26.4 14.1 -0.7 14.1 -0.2 13.9 -0.5 14.2 -0.6
2026-04-11T09:47:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:47:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:47:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.324427
2026-04-11T09:47:59.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:47:59.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:47:59.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:47:59.782 [DEBUG] [Thread-167725] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:47:59.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:47:59.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:47:59.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:47:27', tmtdew=0.087645, humidity=99.3924, cloud=0.0, wind=20.1848, temperature=13.0013, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:47:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:47:59.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:47:59.892 [DEBUG] [Thread-167728] [transport.py] [_log()] starting thread (client mode): 0xa79b5b40
2026-04-11T09:47:59.892 [DEBUG] [Thread-167728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:47:59.911 [DEBUG] [Thread-167728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:47:59.911 [INFO] [Thread-167728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:47:59.919 [DEBUG] [Thread-167728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] client lang: <none>
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] server lang: <none>
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] kex follows: False
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] Compression: none
2026-04-11T09:47:59.920 [DEBUG] [Thread-167728] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:47:59.979 [DEBUG] [Thread-167728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:47:59.979 [DEBUG] [Thread-167728] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:47:59.980 [DEBUG] [Thread-167728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:47:59.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:47:59.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:48:00.035 [DEBUG] [Thread-167728] [transport.py] [_log()] userauth is OK
2026-04-11T09:48:00.035 [DEBUG] [Thread-167728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:48:00.035 [DEBUG] [Thread-167728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:48:00.035 [DEBUG] [Thread-167728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:48:00.035 [DEBUG] [Thread-167728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:48:00.054 [INFO] [Thread-167728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:48:00.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:48:00.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:48:00.879 [DEBUG] [Thread-167728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:48:00.880 [DEBUG] [Thread-167728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:48:00.928 [DEBUG] [Thread-167728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:48:00.929 [DEBUG] [Thread-167728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:48:00.938 [DEBUG] [Thread-167728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:48:00.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:48:00.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:48:00.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-04-11T09:48:00.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:48:00.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:48:00.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:48:00.976 [DEBUG] [Thread-167728] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:48:05.169 [DEBUG] [Thread-167730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:48:20.221 [DEBUG] [Thread-167731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:48:30.844 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:48:30.846 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:48:30.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:48:30.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:48:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:48:32.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 48, 2), 0.07994, 99.4421, 0.0, 19.4616, 13.0179, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:48:32.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:48:02
2026-04-11T09:48:32.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:48:32.915 [DEBUG] [Thread-167732] [transport.py] [_log()] starting thread (client mode): 0xae5f3fa0
2026-04-11T09:48:32.916 [DEBUG] [Thread-167732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:48:32.940 [DEBUG] [Thread-167732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:48:32.941 [INFO] [Thread-167732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:48:32.943 [DEBUG] [Thread-167732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:48:32.943 [DEBUG] [Thread-167732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] client lang: <none>
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] server lang: <none>
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] kex follows: False
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:48:32.944 [DEBUG] [Thread-167732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:48:32.945 [DEBUG] [Thread-167732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:48:32.945 [DEBUG] [Thread-167732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:48:32.945 [DEBUG] [Thread-167732] [transport.py] [_log()] Compression: none
2026-04-11T09:48:32.945 [DEBUG] [Thread-167732] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:48:32.961 [DEBUG] [Thread-167732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:48:32.962 [DEBUG] [Thread-167732] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:48:32.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:48:32.963 [DEBUG] [Thread-167732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:48:32.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:48:33.005 [DEBUG] [Thread-167732] [transport.py] [_log()] userauth is OK
2026-04-11T09:48:33.005 [DEBUG] [Thread-167732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:48:33.005 [DEBUG] [Thread-167732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:48:33.005 [DEBUG] [Thread-167732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:48:33.005 [DEBUG] [Thread-167732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:48:33.025 [INFO] [Thread-167732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:48:33.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:48:33.649 [DEBUG] [Thread-167732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:48:33.649 [DEBUG] [Thread-167732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:48:33.650 [DEBUG] [Thread-167732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:48:33.690 [DEBUG] [Thread-167732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:48:33.690 [DEBUG] [Thread-167732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:48:33.694 [DEBUG] [Thread-167732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:48:33.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:48:33.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:48:33.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:48:33.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:48:33.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:48:33.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:48:33.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:48:33.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:48:33.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:48:33.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 
2026-04-11T09:48:33.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:48:33.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:48:33.723 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-11T09:48:33.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:48:02', tmtdew=0.07994, humidity=99.4421, cloud=0.0, wind=19.4616, temperature=13.0179, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:48:33.723 [DEBUG] [Thread-167732] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:48:33.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:48:33.830 [DEBUG] [Thread-167735] [transport.py] [_log()] starting thread (client mode): 0xae5a5660
2026-04-11T09:48:33.830 [DEBUG] [Thread-167735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:48:33.845 [DEBUG] [Thread-167735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:48:33.845 [INFO] [Thread-167735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:48:33.853 [DEBUG] [Thread-167735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:48:33.853 [DEBUG] [Thread-167735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:48:33.853 [DEBUG] [Thread-167735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:48:33.853 [DEBUG] [Thread-167735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] client lang: <none>
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] server lang: <none>
2026-04-11T09:48:33.854 [DEBUG] [Thread-167735] [transport.py] [_log()] kex follows: False
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] Compression: none
2026-04-11T09:48:33.855 [DEBUG] [Thread-167735] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:48:33.912 [DEBUG] [Thread-167735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:48:33.913 [DEBUG] [Thread-167735] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:48:33.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:48:33.915 [DEBUG] [Thread-167735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:48:33.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:48:33.971 [DEBUG] [Thread-167735] [transport.py] [_log()] userauth is OK
2026-04-11T09:48:33.972 [DEBUG] [Thread-167735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:48:33.972 [DEBUG] [Thread-167735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:48:33.973 [DEBUG] [Thread-167735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:48:33.973 [DEBUG] [Thread-167735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:48:33.997 [INFO] [Thread-167735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:48:33.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:48:33.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:48:34.818 [DEBUG] [Thread-167735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:48:34.818 [DEBUG] [Thread-167735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:48:34.866 [DEBUG] [Thread-167735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:48:34.867 [DEBUG] [Thread-167735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:48:34.876 [DEBUG] [Thread-167735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:48:34.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:48:34.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:48:34.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:48:34.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:48:34.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:48:34.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:48:34.913 [DEBUG] [Thread-167735] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:48:35.261 [DEBUG] [Thread-167737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:48:50.316 [DEBUG] [Thread-167738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:48:57.463 [DEBUG] [Thread-167739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:04.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:49:04.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:49:04.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:49:05.355 [DEBUG] [Thread-167740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 48, 38), 0.18041, 98.7517, 0.0, 22.2653, 13.4027, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:49:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:48:38
2026-04-11T09:49:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:49:06.788 [DEBUG] [Thread-167741] [transport.py] [_log()] starting thread (client mode): 0xae5e63e0
2026-04-11T09:49:06.788 [DEBUG] [Thread-167741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:49:06.810 [DEBUG] [Thread-167741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:49:06.810 [INFO] [Thread-167741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:49:06.813 [DEBUG] [Thread-167741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:49:06.813 [DEBUG] [Thread-167741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:49:06.813 [DEBUG] [Thread-167741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:49:06.813 [DEBUG] [Thread-167741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:06.813 [DEBUG] [Thread-167741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] client lang: <none>
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] server lang: <none>
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] kex follows: False
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] Compression: none
2026-04-11T09:49:06.814 [DEBUG] [Thread-167741] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:49:06.831 [DEBUG] [Thread-167741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:49:06.831 [DEBUG] [Thread-167741] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:49:06.832 [DEBUG] [Thread-167741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:49:06.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:49:06.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:49:06.834 [DEBUG] [Thread-167741] [transport.py] [_log()] userauth is OK
2026-04-11T09:49:06.834 [DEBUG] [Thread-167741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:49:06.834 [DEBUG] [Thread-167741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:49:06.834 [DEBUG] [Thread-167741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:49:06.835 [DEBUG] [Thread-167741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:49:06.852 [INFO] [Thread-167741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:49:06.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:49:07.535 [DEBUG] [Thread-167741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:49:07.536 [DEBUG] [Thread-167741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:49:07.536 [DEBUG] [Thread-167741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:49:07.577 [DEBUG] [Thread-167741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:49:07.577 [DEBUG] [Thread-167741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:49:07.581 [DEBUG] [Thread-167741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:49:07.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:49:07.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:49:07.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:49:07.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:49:07.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:49:07.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:49:07.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:49:07.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:49:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:49:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.325121 -999.00  +12.90  18.77     97  +12.50 1 3 1 3 1   888    0 0.41 -0.93 ----- 18.0 18.8 140.6 25.3 14.0 -1.4 14.0 -0.4 13.9 -0.3 14.2 -0.6
2026-04-11T09:49:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:49:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:49:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.325121
2026-04-11T09:49:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:49:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:49:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:49:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:49:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:49:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:48:38', tmtdew=0.18041, humidity=98.7517, cloud=0.0, wind=22.2653, temperature=13.4027, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:48:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:49:07.607 [DEBUG] [Thread-167741] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:49:07.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:49:07.701 [DEBUG] [Thread-167744] [transport.py] [_log()] starting thread (client mode): 0xae5f2800
2026-04-11T09:49:07.701 [DEBUG] [Thread-167744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:49:07.717 [DEBUG] [Thread-167744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:49:07.717 [INFO] [Thread-167744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:49:07.724 [DEBUG] [Thread-167744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] client lang: <none>
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] server lang: <none>
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] kex follows: False
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] Compression: none
2026-04-11T09:49:07.725 [DEBUG] [Thread-167744] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:49:07.782 [DEBUG] [Thread-167744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:49:07.783 [DEBUG] [Thread-167744] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:49:07.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:49:07.783 [DEBUG] [Thread-167744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:49:07.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:49:07.843 [DEBUG] [Thread-167744] [transport.py] [_log()] userauth is OK
2026-04-11T09:49:07.843 [DEBUG] [Thread-167744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:49:07.843 [DEBUG] [Thread-167744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:49:07.843 [DEBUG] [Thread-167744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:49:07.843 [DEBUG] [Thread-167744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:49:07.863 [INFO] [Thread-167744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:49:07.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:49:07.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:49:08.785 [DEBUG] [Thread-167744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:49:08.786 [DEBUG] [Thread-167744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:49:08.834 [DEBUG] [Thread-167744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:49:08.835 [DEBUG] [Thread-167744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:49:08.844 [DEBUG] [Thread-167744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:49:08.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:49:08.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:49:08.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:49:08.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:49:08.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:49:08.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:49:08.882 [DEBUG] [Thread-167744] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:49:20.392 [DEBUG] [Thread-167746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:30.985 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:30.986 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:35.449 [DEBUG] [Thread-167747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:38.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:49:38.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:49:38.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-04-11T09:49:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 49, 13), 0.137645, 99.3924, 0.0, 22.3553, 13.0179, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:49:40.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:49:13
2026-04-11T09:49:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:49:40.772 [DEBUG] [Thread-167748] [transport.py] [_log()] starting thread (client mode): 0xae52f5e0
2026-04-11T09:49:40.772 [DEBUG] [Thread-167748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:49:40.791 [DEBUG] [Thread-167748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:49:40.791 [INFO] [Thread-167748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:49:40.799 [DEBUG] [Thread-167748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:49:40.799 [DEBUG] [Thread-167748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:49:40.799 [DEBUG] [Thread-167748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:49:40.799 [DEBUG] [Thread-167748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:40.799 [DEBUG] [Thread-167748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] client lang: <none>
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] server lang: <none>
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] kex follows: False
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:49:40.800 [DEBUG] [Thread-167748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:49:40.801 [DEBUG] [Thread-167748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:49:40.801 [DEBUG] [Thread-167748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:49:40.801 [DEBUG] [Thread-167748] [transport.py] [_log()] Compression: none
2026-04-11T09:49:40.801 [DEBUG] [Thread-167748] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:49:40.812 [DEBUG] [Thread-167748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:49:40.813 [DEBUG] [Thread-167748] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:49:40.813 [DEBUG] [Thread-167748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:49:40.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:49:40.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:49:40.815 [DEBUG] [Thread-167748] [transport.py] [_log()] userauth is OK
2026-04-11T09:49:40.815 [DEBUG] [Thread-167748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:49:40.815 [DEBUG] [Thread-167748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:49:40.815 [DEBUG] [Thread-167748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:49:40.815 [DEBUG] [Thread-167748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:49:40.833 [INFO] [Thread-167748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:49:40.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:49:41.501 [DEBUG] [Thread-167748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:49:41.502 [DEBUG] [Thread-167748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:49:41.502 [DEBUG] [Thread-167748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:49:41.542 [DEBUG] [Thread-167748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:49:41.542 [DEBUG] [Thread-167748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:49:41.546 [DEBUG] [Thread-167748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:49:41.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:49:41.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:49:41.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:49:41.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:49:41.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:49:41.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:49:41.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:49:41.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:49:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:49:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.325816 -999.00  +12.90   9.93     97  +12.50 1 3 1 3 1   888    0 0.41 -1.20 ----- 12.5 9.9 79.4 20.7 14.0 -0.9 14.0 -0.3 13.9 -0.2 14.2 -0.4
2026-04-11T09:49:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:49:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:49:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.325816
2026-04-11T09:49:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:49:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:49:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:49:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:49:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:49:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:49:13', tmtdew=0.137645, humidity=99.3924, cloud=0.0, wind=22.3553, temperature=13.0179, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:49:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:49:41.568 [DEBUG] [Thread-167748] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:49:41.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:49:41.662 [DEBUG] [Thread-167750] [transport.py] [_log()] starting thread (client mode): 0xa79b5540
2026-04-11T09:49:41.662 [DEBUG] [Thread-167750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:49:41.677 [DEBUG] [Thread-167750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:49:41.677 [INFO] [Thread-167750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:49:41.684 [DEBUG] [Thread-167750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:49:41.684 [DEBUG] [Thread-167750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] client lang: <none>
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] server lang: <none>
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] kex follows: False
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] Compression: none
2026-04-11T09:49:41.685 [DEBUG] [Thread-167750] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:49:41.745 [DEBUG] [Thread-167750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:49:41.745 [DEBUG] [Thread-167750] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:49:41.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:49:41.746 [DEBUG] [Thread-167750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:49:41.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:49:41.807 [DEBUG] [Thread-167750] [transport.py] [_log()] userauth is OK
2026-04-11T09:49:41.807 [DEBUG] [Thread-167750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:49:41.808 [DEBUG] [Thread-167750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:49:41.808 [DEBUG] [Thread-167750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:49:41.808 [DEBUG] [Thread-167750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:49:41.827 [INFO] [Thread-167750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:49:41.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:49:41.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:49:42.662 [DEBUG] [Thread-167750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:49:42.662 [DEBUG] [Thread-167750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:49:42.713 [DEBUG] [Thread-167750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:49:42.713 [DEBUG] [Thread-167750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:49:42.727 [DEBUG] [Thread-167750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:49:42.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:49:42.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-04-11T09:49:42.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:49:42.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:49:42.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:49:42.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:49:42.764 [DEBUG] [Thread-167750] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:49:50.485 [DEBUG] [Thread-167752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:49:57.501 [DEBUG] [Thread-167753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:05.540 [DEBUG] [Thread-167754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:12.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:50:12.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:50:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:50:14.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 49, 48), 0.165, 98.8513, 0.0, 27.1339, 13.4691, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:50:14.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:49:48
2026-04-11T09:50:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:50:14.598 [DEBUG] [Thread-167755] [transport.py] [_log()] starting thread (client mode): 0xae514a60
2026-04-11T09:50:14.598 [DEBUG] [Thread-167755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:50:14.620 [DEBUG] [Thread-167755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:50:14.620 [INFO] [Thread-167755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:50:14.623 [DEBUG] [Thread-167755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] client lang: <none>
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] server lang: <none>
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] kex follows: False
2026-04-11T09:50:14.624 [DEBUG] [Thread-167755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:50:14.625 [DEBUG] [Thread-167755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:50:14.625 [DEBUG] [Thread-167755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:50:14.625 [DEBUG] [Thread-167755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:50:14.625 [DEBUG] [Thread-167755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:50:14.625 [DEBUG] [Thread-167755] [transport.py] [_log()] Compression: none
2026-04-11T09:50:14.625 [DEBUG] [Thread-167755] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:50:14.634 [DEBUG] [Thread-167755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:50:14.635 [DEBUG] [Thread-167755] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:50:14.636 [DEBUG] [Thread-167755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:50:14.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:50:14.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:50:14.638 [DEBUG] [Thread-167755] [transport.py] [_log()] userauth is OK
2026-04-11T09:50:14.638 [DEBUG] [Thread-167755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:50:14.638 [DEBUG] [Thread-167755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:50:14.638 [DEBUG] [Thread-167755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:50:14.638 [DEBUG] [Thread-167755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:50:14.657 [INFO] [Thread-167755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:50:14.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:50:18.128 [DEBUG] [Thread-167755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:50:18.128 [DEBUG] [Thread-167755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:50:18.129 [DEBUG] [Thread-167755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:50:18.170 [DEBUG] [Thread-167755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:50:18.170 [DEBUG] [Thread-167755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:50:18.174 [DEBUG] [Thread-167755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:50:18.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:50:18.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:50:18.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:50:18.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:50:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:50:18.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:50:18.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:50:18.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:50:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:50:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.326510 -999.00  +13.00  16.50     97  +12.50 1 3 1 3 1   888    0 0.43 -0.22 ----- 9.6 16.5 69.9 24.2 14.1 -0.8 14.1 -0.2 13.9 -0.3 14.2 -0.7
2026-04-11T09:50:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:50:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:50:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.326510
2026-04-11T09:50:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:50:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:50:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:50:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:50:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:50:18.202 [DEBUG] [Thread-167755] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:50:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:49:48', tmtdew=0.165, humidity=98.8513, cloud=0.0, wind=27.1339, temperature=13.4691, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:50:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:50:18.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:50:18.290 [DEBUG] [Thread-167758] [transport.py] [_log()] starting thread (client mode): 0xae5f2440
2026-04-11T09:50:18.290 [DEBUG] [Thread-167758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:50:18.305 [DEBUG] [Thread-167758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:50:18.305 [INFO] [Thread-167758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:50:18.313 [DEBUG] [Thread-167758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] client lang: <none>
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] server lang: <none>
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] kex follows: False
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:50:18.314 [DEBUG] [Thread-167758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:50:18.315 [DEBUG] [Thread-167758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:50:18.315 [DEBUG] [Thread-167758] [transport.py] [_log()] Compression: none
2026-04-11T09:50:18.315 [DEBUG] [Thread-167758] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:50:18.373 [DEBUG] [Thread-167758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:50:18.374 [DEBUG] [Thread-167758] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:50:18.374 [DEBUG] [Thread-167758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:50:18.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:50:18.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:50:18.432 [DEBUG] [Thread-167758] [transport.py] [_log()] userauth is OK
2026-04-11T09:50:18.432 [DEBUG] [Thread-167758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:50:18.433 [DEBUG] [Thread-167758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:50:18.433 [DEBUG] [Thread-167758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:50:18.433 [DEBUG] [Thread-167758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:50:18.451 [INFO] [Thread-167758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:50:18.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:50:18.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:50:19.278 [DEBUG] [Thread-167758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:50:19.278 [DEBUG] [Thread-167758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:50:19.326 [DEBUG] [Thread-167758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:50:19.327 [DEBUG] [Thread-167758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:50:19.337 [DEBUG] [Thread-167758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:50:19.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:50:19.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-04-11T09:50:19.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-04-11T09:50:19.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:50:19.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:50:19.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:50:19.375 [DEBUG] [Thread-167758] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:50:20.578 [DEBUG] [Thread-167760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:31.127 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:31.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:35.629 [DEBUG] [Thread-167761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:50:49.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:50:49.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-04-11T09:50:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 50, 24), 0.1325, 99.4257, 0.0, 19.638, 13.0345, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:50:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:50:24
2026-04-11T09:50:50.667 [DEBUG] [Thread-167762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:50:51.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:50:51.200 [DEBUG] [Thread-167763] [transport.py] [_log()] starting thread (client mode): 0xa7953790
2026-04-11T09:50:51.200 [DEBUG] [Thread-167763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:50:51.219 [DEBUG] [Thread-167763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:50:51.219 [INFO] [Thread-167763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] client lang: <none>
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] server lang: <none>
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] kex follows: False
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] Compression: none
2026-04-11T09:50:51.223 [DEBUG] [Thread-167763] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:50:51.239 [DEBUG] [Thread-167763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:50:51.239 [DEBUG] [Thread-167763] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:50:51.240 [DEBUG] [Thread-167763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:50:51.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:50:51.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:50:51.242 [DEBUG] [Thread-167763] [transport.py] [_log()] userauth is OK
2026-04-11T09:50:51.242 [DEBUG] [Thread-167763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:50:51.242 [DEBUG] [Thread-167763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:50:51.242 [DEBUG] [Thread-167763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:50:51.243 [DEBUG] [Thread-167763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:50:51.260 [INFO] [Thread-167763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:50:51.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:50:51.999 [DEBUG] [Thread-167763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:50:51.999 [DEBUG] [Thread-167763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:50:52.000 [DEBUG] [Thread-167763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:50:52.041 [DEBUG] [Thread-167763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:50:52.041 [DEBUG] [Thread-167763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:50:52.044 [DEBUG] [Thread-167763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:50:52.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:50:52.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:50:52.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:50:52.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:50:52.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:50:52.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:50:52.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:50:52.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:50:52.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:50:52.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.326857 -999.00  +12.90  10.56     97  +12.50 1 3 1 3 1   888    0 0.44 0.02 ----- 16.8 10.6 150.6 24.9 14.1 -0.8 14.1 -0.4 13.9 -0.6 14.2 -0.6
2026-04-11T09:50:52.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:50:52.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:50:52.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.326857
2026-04-11T09:50:52.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:50:52.070 [DEBUG] [Thread-167763] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:50:52.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:50:52.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:50:52.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:50:52.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:50:52.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:50:24', tmtdew=0.1325, humidity=99.4257, cloud=0.0, wind=19.638, temperature=13.0345, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:50:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:50:52.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:50:52.173 [DEBUG] [Thread-167766] [transport.py] [_log()] starting thread (client mode): 0xae5175e0
2026-04-11T09:50:52.173 [DEBUG] [Thread-167766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:50:52.188 [DEBUG] [Thread-167766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:50:52.188 [INFO] [Thread-167766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:50:52.199 [DEBUG] [Thread-167766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:50:52.199 [DEBUG] [Thread-167766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:50:52.199 [DEBUG] [Thread-167766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] client lang: <none>
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] server lang: <none>
2026-04-11T09:50:52.200 [DEBUG] [Thread-167766] [transport.py] [_log()] kex follows: False
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] Compression: none
2026-04-11T09:50:52.201 [DEBUG] [Thread-167766] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:50:52.259 [DEBUG] [Thread-167766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:50:52.259 [DEBUG] [Thread-167766] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:50:52.260 [DEBUG] [Thread-167766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:50:52.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:50:52.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:50:52.316 [DEBUG] [Thread-167766] [transport.py] [_log()] userauth is OK
2026-04-11T09:50:52.316 [DEBUG] [Thread-167766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:50:52.316 [DEBUG] [Thread-167766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:50:52.316 [DEBUG] [Thread-167766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:50:52.316 [DEBUG] [Thread-167766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:50:52.336 [INFO] [Thread-167766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:50:52.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:50:52.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:50:53.158 [DEBUG] [Thread-167766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:50:53.159 [DEBUG] [Thread-167766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:50:53.207 [DEBUG] [Thread-167766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:50:53.207 [DEBUG] [Thread-167766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:50:53.216 [DEBUG] [Thread-167766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:50:53.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:50:53.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-04-11T09:50:53.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-04-11T09:50:53.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:50:53.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:50:53.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:50:53.250 [DEBUG] [Thread-167766] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:50:57.553 [DEBUG] [Thread-167768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:05.702 [DEBUG] [Thread-167769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:20.756 [DEBUG] [Thread-167770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:51:23.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:51:23.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-04-11T09:51:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 50, 59), 0.132525, 99.4253, 0.0, 22.4082, 13.018, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:51:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:50:59
2026-04-11T09:51:24.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:51:25.080 [DEBUG] [Thread-167771] [transport.py] [_log()] starting thread (client mode): 0xae5a5ab0
2026-04-11T09:51:25.080 [DEBUG] [Thread-167771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:51:25.103 [DEBUG] [Thread-167771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:51:25.104 [INFO] [Thread-167771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:51:25.107 [DEBUG] [Thread-167771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] client lang: <none>
2026-04-11T09:51:25.108 [DEBUG] [Thread-167771] [transport.py] [_log()] server lang: <none>
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] kex follows: False
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] Compression: none
2026-04-11T09:51:25.109 [DEBUG] [Thread-167771] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:51:25.126 [DEBUG] [Thread-167771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:51:25.127 [DEBUG] [Thread-167771] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:51:25.127 [DEBUG] [Thread-167771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:51:25.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:51:25.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:51:25.129 [DEBUG] [Thread-167771] [transport.py] [_log()] userauth is OK
2026-04-11T09:51:25.130 [DEBUG] [Thread-167771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:51:25.130 [DEBUG] [Thread-167771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:51:25.130 [DEBUG] [Thread-167771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:51:25.130 [DEBUG] [Thread-167771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:51:25.155 [INFO] [Thread-167771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:51:25.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:51:25.873 [DEBUG] [Thread-167771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:51:25.873 [DEBUG] [Thread-167771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:51:25.874 [DEBUG] [Thread-167771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:51:25.914 [DEBUG] [Thread-167771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:51:25.914 [DEBUG] [Thread-167771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:51:25.917 [DEBUG] [Thread-167771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:51:25.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:51:25.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:51:25.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:51:25.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:51:25.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:51:25.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:51:25.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:51:25.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:51:25.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:51:25.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.326857 -999.00  +12.90  10.56     97  +12.50 1 3 1 3 1   888    0 0.44 0.02 ----- 16.8 10.6 150.6 24.9 14.1 -0.8 14.1 -0.4 13.9 -0.6 14.2 -0.6
2026-04-11T09:51:25.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:51:25.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:51:25.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.326857
2026-04-11T09:51:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:51:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:51:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:51:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:51:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:51:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:50:59', tmtdew=0.132525, humidity=99.4253, cloud=0.0, wind=22.4082, temperature=13.018, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:50:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:51:25.943 [DEBUG] [Thread-167771] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:51:26.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:51:26.041 [DEBUG] [Thread-167774] [transport.py] [_log()] starting thread (client mode): 0xb0fce050
2026-04-11T09:51:26.041 [DEBUG] [Thread-167774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:51:26.055 [DEBUG] [Thread-167774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:51:26.055 [INFO] [Thread-167774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:51:26.064 [DEBUG] [Thread-167774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] client lang: <none>
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] server lang: <none>
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] kex follows: False
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] Compression: none
2026-04-11T09:51:26.065 [DEBUG] [Thread-167774] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:51:26.121 [DEBUG] [Thread-167774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:51:26.121 [DEBUG] [Thread-167774] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:51:26.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:51:26.122 [DEBUG] [Thread-167774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:51:26.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:51:26.183 [DEBUG] [Thread-167774] [transport.py] [_log()] userauth is OK
2026-04-11T09:51:26.183 [DEBUG] [Thread-167774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:51:26.184 [DEBUG] [Thread-167774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:51:26.184 [DEBUG] [Thread-167774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:51:26.184 [DEBUG] [Thread-167774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:51:26.202 [INFO] [Thread-167774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:51:26.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:51:26.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:51:27.030 [DEBUG] [Thread-167774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:51:27.031 [DEBUG] [Thread-167774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:51:27.079 [DEBUG] [Thread-167774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:51:27.079 [DEBUG] [Thread-167774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:51:27.088 [DEBUG] [Thread-167774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:51:27.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:51:27.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-04-11T09:51:27.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:51:27.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:51:27.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:51:27.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:51:27.125 [DEBUG] [Thread-167774] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:51:31.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:31.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:35.793 [DEBUG] [Thread-167776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:50.846 [DEBUG] [Thread-167777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:57.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:51:57.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:51:57.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-04-11T09:51:57.588 [DEBUG] [Thread-167778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:51:58.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 51, 35), 0.18045, 98.7511, 0.0, 24.5232, 13.3028, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:51:58.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:51:35
2026-04-11T09:51:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:51:58.990 [DEBUG] [Thread-167779] [transport.py] [_log()] starting thread (client mode): 0xae51add0
2026-04-11T09:51:58.990 [DEBUG] [Thread-167779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:51:59.010 [DEBUG] [Thread-167779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:51:59.010 [INFO] [Thread-167779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:51:59.013 [DEBUG] [Thread-167779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:51:59.013 [DEBUG] [Thread-167779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:51:59.013 [DEBUG] [Thread-167779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:51:59.013 [DEBUG] [Thread-167779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] client lang: <none>
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] server lang: <none>
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] kex follows: False
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] Compression: none
2026-04-11T09:51:59.014 [DEBUG] [Thread-167779] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:51:59.031 [DEBUG] [Thread-167779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:51:59.031 [DEBUG] [Thread-167779] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:51:59.031 [DEBUG] [Thread-167779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:51:59.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:51:59.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:51:59.032 [DEBUG] [Thread-167779] [transport.py] [_log()] userauth is OK
2026-04-11T09:51:59.032 [DEBUG] [Thread-167779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:51:59.032 [DEBUG] [Thread-167779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:51:59.032 [DEBUG] [Thread-167779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:51:59.032 [DEBUG] [Thread-167779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:51:59.052 [INFO] [Thread-167779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:51:59.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:51:59.834 [DEBUG] [Thread-167779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:51:59.834 [DEBUG] [Thread-167779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:51:59.834 [DEBUG] [Thread-167779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:51:59.875 [DEBUG] [Thread-167779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:51:59.875 [DEBUG] [Thread-167779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:51:59.879 [DEBUG] [Thread-167779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:51:59.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:51:59.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:51:59.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:51:59.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:51:59.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:51:59.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:51:59.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.327205 -999.00  +12.90  11.86     97  +12.50 1 3 1 3 1   888    0 0.42 -0.18 ----- 16.7 11.9 109.2 25.9 14.1 -0.8 14.0 -0.4 13.9 -0.5 14.2 -0.6
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.327205
2026-04-11T09:51:59.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:51:59.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:51:59.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:51:59.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:51:59.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:51:59.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:51:35', tmtdew=0.18045, humidity=98.7511, cloud=0.0, wind=24.5232, temperature=13.3028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:51:10.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:51:59.901 [DEBUG] [Thread-167779] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:51:59.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:51:59.982 [DEBUG] [Thread-167782] [transport.py] [_log()] starting thread (client mode): 0xb0f57c10
2026-04-11T09:51:59.982 [DEBUG] [Thread-167782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:51:59.997 [DEBUG] [Thread-167782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:51:59.997 [INFO] [Thread-167782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:52:00.004 [DEBUG] [Thread-167782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:52:00.005 [DEBUG] [Thread-167782] [transport.py] [_log()] client lang: <none>
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] server lang: <none>
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] kex follows: False
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:52:00.006 [DEBUG] [Thread-167782] [transport.py] [_log()] Compression: none
2026-04-11T09:52:00.007 [DEBUG] [Thread-167782] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:52:00.064 [DEBUG] [Thread-167782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:52:00.064 [DEBUG] [Thread-167782] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:52:00.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:52:00.066 [DEBUG] [Thread-167782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:52:00.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:52:00.120 [DEBUG] [Thread-167782] [transport.py] [_log()] userauth is OK
2026-04-11T09:52:00.120 [DEBUG] [Thread-167782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:52:00.121 [DEBUG] [Thread-167782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:52:00.121 [DEBUG] [Thread-167782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:52:00.121 [DEBUG] [Thread-167782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:52:00.139 [INFO] [Thread-167782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:52:00.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:52:00.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:52:00.989 [DEBUG] [Thread-167782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:52:00.989 [DEBUG] [Thread-167782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:52:01.037 [DEBUG] [Thread-167782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:52:01.037 [DEBUG] [Thread-167782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:52:01.051 [DEBUG] [Thread-167782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:52:01.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:52:01.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-04-11T09:52:01.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-04-11T09:52:01.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:52:01.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:52:01.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:52:01.090 [DEBUG] [Thread-167782] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:52:05.882 [DEBUG] [Thread-167784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:52:20.937 [DEBUG] [Thread-167785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:52:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:52:31.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:52:31.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-04-11T09:52:31.420 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:52:31.421 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:52:32.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 52, 10), 0.082575, 99.425, 0.0, 21.9848, 12.9844, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:52:32.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:52:10
2026-04-11T09:52:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:52:32.966 [DEBUG] [Thread-167786] [transport.py] [_log()] starting thread (client mode): 0xae5175e0
2026-04-11T09:52:32.966 [DEBUG] [Thread-167786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:52:32.984 [DEBUG] [Thread-167786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:52:32.985 [INFO] [Thread-167786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] client lang: <none>
2026-04-11T09:52:32.986 [DEBUG] [Thread-167786] [transport.py] [_log()] server lang: <none>
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] kex follows: False
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] Compression: none
2026-04-11T09:52:32.987 [DEBUG] [Thread-167786] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:52:33.013 [DEBUG] [Thread-167786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:52:33.014 [DEBUG] [Thread-167786] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:52:33.014 [DEBUG] [Thread-167786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:52:33.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:52:33.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:52:33.017 [DEBUG] [Thread-167786] [transport.py] [_log()] userauth is OK
2026-04-11T09:52:33.018 [DEBUG] [Thread-167786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:52:33.018 [DEBUG] [Thread-167786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:52:33.018 [DEBUG] [Thread-167786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:52:33.018 [DEBUG] [Thread-167786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:52:33.040 [INFO] [Thread-167786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:52:33.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:52:33.791 [DEBUG] [Thread-167786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:52:33.792 [DEBUG] [Thread-167786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:52:33.792 [DEBUG] [Thread-167786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:52:33.833 [DEBUG] [Thread-167786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:52:33.833 [DEBUG] [Thread-167786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:52:33.837 [DEBUG] [Thread-167786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:52:33.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:52:33.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:52:33.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:52:33.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:52:33.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:52:33.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:52:33.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:52:33.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:52:33.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:52:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.327552 -999.00  +12.90  21.54     97  +12.50 1 3 1 3 1   888    0 0.42 -0.55 ----- 20.3 21.5 70.6 26.4 14.0 -1.0 14.1 -0.5 13.9 -0.3 14.2 -0.7
2026-04-11T09:52:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:52:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:52:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.327552
2026-04-11T09:52:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:52:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:52:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:52:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:52:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:52:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:52:10', tmtdew=0.082575, humidity=99.425, cloud=0.0, wind=21.9848, temperature=12.9844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:51:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:52:33.862 [DEBUG] [Thread-167786] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:52:33.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:52:33.959 [DEBUG] [Thread-167789] [transport.py] [_log()] starting thread (client mode): 0xb0f6f8e0
2026-04-11T09:52:33.959 [DEBUG] [Thread-167789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:52:33.973 [DEBUG] [Thread-167789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:52:33.973 [INFO] [Thread-167789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:52:33.981 [DEBUG] [Thread-167789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:52:33.981 [DEBUG] [Thread-167789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:52:33.981 [DEBUG] [Thread-167789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:52:33.981 [DEBUG] [Thread-167789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:52:33.981 [DEBUG] [Thread-167789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:52:33.981 [DEBUG] [Thread-167789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] client lang: <none>
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] server lang: <none>
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] kex follows: False
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] Compression: none
2026-04-11T09:52:33.982 [DEBUG] [Thread-167789] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:52:34.044 [DEBUG] [Thread-167789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:52:34.044 [DEBUG] [Thread-167789] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:52:34.045 [DEBUG] [Thread-167789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:52:34.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:52:34.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:52:34.104 [DEBUG] [Thread-167789] [transport.py] [_log()] userauth is OK
2026-04-11T09:52:34.105 [DEBUG] [Thread-167789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:52:34.105 [DEBUG] [Thread-167789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:52:34.105 [DEBUG] [Thread-167789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:52:34.105 [DEBUG] [Thread-167789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:52:34.124 [INFO] [Thread-167789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:52:34.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:52:34.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:52:34.961 [DEBUG] [Thread-167789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:52:34.961 [DEBUG] [Thread-167789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:52:35.009 [DEBUG] [Thread-167789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:52:35.010 [DEBUG] [Thread-167789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:52:35.019 [DEBUG] [Thread-167789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:52:35.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:52:35.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-04-11T09:52:35.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-04-11T09:52:35.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:52:35.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:52:35.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:52:35.056 [DEBUG] [Thread-167789] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:52:35.974 [DEBUG] [Thread-167791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:52:51.028 [DEBUG] [Thread-167792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:52:57.626 [DEBUG] [Thread-167793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:53:05.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:53:05.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-04-11T09:53:06.061 [DEBUG] [Thread-167794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 52, 45), 0.17031, 98.8168, 0.0, 24.8407, 13.4019, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:53:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:52:45
2026-04-11T09:53:06.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:53:06.896 [DEBUG] [Thread-167795] [transport.py] [_log()] starting thread (client mode): 0xb0f6cb20
2026-04-11T09:53:06.896 [DEBUG] [Thread-167795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:53:06.917 [DEBUG] [Thread-167795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:53:06.918 [INFO] [Thread-167795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:53:06.920 [DEBUG] [Thread-167795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:53:06.920 [DEBUG] [Thread-167795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] client lang: <none>
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] server lang: <none>
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] kex follows: False
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:53:06.921 [DEBUG] [Thread-167795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:53:06.922 [DEBUG] [Thread-167795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:53:06.922 [DEBUG] [Thread-167795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:53:06.922 [DEBUG] [Thread-167795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:53:06.922 [DEBUG] [Thread-167795] [transport.py] [_log()] Compression: none
2026-04-11T09:53:06.922 [DEBUG] [Thread-167795] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:53:06.941 [DEBUG] [Thread-167795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:53:06.942 [DEBUG] [Thread-167795] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:53:06.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:53:06.943 [DEBUG] [Thread-167795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:53:06.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:53:06.945 [DEBUG] [Thread-167795] [transport.py] [_log()] userauth is OK
2026-04-11T09:53:06.946 [DEBUG] [Thread-167795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:53:06.946 [DEBUG] [Thread-167795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:53:06.946 [DEBUG] [Thread-167795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:53:06.946 [DEBUG] [Thread-167795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:53:06.971 [INFO] [Thread-167795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:53:06.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:53:07.749 [DEBUG] [Thread-167795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:53:07.750 [DEBUG] [Thread-167795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:53:07.750 [DEBUG] [Thread-167795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:53:07.792 [DEBUG] [Thread-167795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:53:07.792 [DEBUG] [Thread-167795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:53:07.796 [DEBUG] [Thread-167795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:53:07.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:53:07.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:53:07.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:53:07.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:53:07.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:53:07.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:53:07.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:53:07.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:53:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:53:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.328246 -999.00  +12.90  12.68     97  +12.50 1 3 1 3 1   888    0 0.40 -1.06 ----- 17.1 12.7 90.5 30.0 14.0 -0.8 14.0 -0.4 13.9 -0.4 14.2 -0.6
2026-04-11T09:53:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:53:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:53:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.328246
2026-04-11T09:53:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:53:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:53:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:53:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:53:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:53:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:52:45', tmtdew=0.17031, humidity=98.8168, cloud=0.0, wind=24.8407, temperature=13.4019, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:52:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:53:07.821 [DEBUG] [Thread-167795] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:53:07.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:53:07.918 [DEBUG] [Thread-167798] [transport.py] [_log()] starting thread (client mode): 0xb0fb4d30
2026-04-11T09:53:07.918 [DEBUG] [Thread-167798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:53:07.933 [DEBUG] [Thread-167798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:53:07.933 [INFO] [Thread-167798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:53:07.940 [DEBUG] [Thread-167798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:53:07.940 [DEBUG] [Thread-167798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:53:07.940 [DEBUG] [Thread-167798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:53:07.940 [DEBUG] [Thread-167798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:07.940 [DEBUG] [Thread-167798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] client lang: <none>
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] server lang: <none>
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] kex follows: False
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:53:07.941 [DEBUG] [Thread-167798] [transport.py] [_log()] Compression: none
2026-04-11T09:53:07.942 [DEBUG] [Thread-167798] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:53:08.002 [DEBUG] [Thread-167798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:53:08.003 [DEBUG] [Thread-167798] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:53:08.004 [DEBUG] [Thread-167798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:53:08.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:53:08.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:53:08.060 [DEBUG] [Thread-167798] [transport.py] [_log()] userauth is OK
2026-04-11T09:53:08.060 [DEBUG] [Thread-167798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:53:08.060 [DEBUG] [Thread-167798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:53:08.060 [DEBUG] [Thread-167798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:53:08.061 [DEBUG] [Thread-167798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:53:08.088 [INFO] [Thread-167798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:53:08.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:53:08.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:53:08.897 [DEBUG] [Thread-167798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:53:08.897 [DEBUG] [Thread-167798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:53:08.945 [DEBUG] [Thread-167798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:53:08.945 [DEBUG] [Thread-167798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:53:08.955 [DEBUG] [Thread-167798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:53:08.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:53:08.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-04-11T09:53:08.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-04-11T09:53:08.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:53:08.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:53:08.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:53:08.991 [DEBUG] [Thread-167798] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:53:21.101 [DEBUG] [Thread-167800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:31.561 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:31.562 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:36.156 [DEBUG] [Thread-167801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:39.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:53:39.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:53:39.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-04-11T09:53:40.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 53, 21), 0.106905, 99.591, 0.0, 23.5026, 13.1503, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:53:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:53:21
2026-04-11T09:53:40.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:53:40.827 [DEBUG] [Thread-167802] [transport.py] [_log()] starting thread (client mode): 0xa7950a30
2026-04-11T09:53:40.827 [DEBUG] [Thread-167802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:53:40.846 [DEBUG] [Thread-167802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:53:40.846 [INFO] [Thread-167802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] client lang: <none>
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] server lang: <none>
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] kex follows: False
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:53:40.850 [DEBUG] [Thread-167802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:53:40.851 [DEBUG] [Thread-167802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:53:40.851 [DEBUG] [Thread-167802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:53:40.851 [DEBUG] [Thread-167802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:53:40.851 [DEBUG] [Thread-167802] [transport.py] [_log()] Compression: none
2026-04-11T09:53:40.851 [DEBUG] [Thread-167802] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:53:40.870 [DEBUG] [Thread-167802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:53:40.870 [DEBUG] [Thread-167802] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:53:40.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:53:40.871 [DEBUG] [Thread-167802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:53:40.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:53:40.873 [DEBUG] [Thread-167802] [transport.py] [_log()] userauth is OK
2026-04-11T09:53:40.873 [DEBUG] [Thread-167802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:53:40.873 [DEBUG] [Thread-167802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:53:40.873 [DEBUG] [Thread-167802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:53:40.874 [DEBUG] [Thread-167802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:53:40.910 [INFO] [Thread-167802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:53:40.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:53:41.637 [DEBUG] [Thread-167802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:53:41.638 [DEBUG] [Thread-167802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:53:41.638 [DEBUG] [Thread-167802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:53:41.678 [DEBUG] [Thread-167802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:53:41.678 [DEBUG] [Thread-167802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:53:41.682 [DEBUG] [Thread-167802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:53:41.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:53:41.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:53:41.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:53:41.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:53:41.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:53:41.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:53:41.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:53:41.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:53:41.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:53:41.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.328593 -999.00  +12.90  14.88     97  +12.50 1 3 1 3 1   888    0 0.40 -1.00 ----- 16.3 14.9 86.4 23.5 14.0 -0.9 14.1 -0.5 13.9 -0.4 14.2 -0.5
2026-04-11T09:53:41.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:53:41.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:53:41.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.328593
2026-04-11T09:53:41.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:53:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:53:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:53:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:53:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:53:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:53:21', tmtdew=0.106905, humidity=99.591, cloud=0.0, wind=23.5026, temperature=13.1503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:53:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:53:41.712 [DEBUG] [Thread-167802] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:53:41.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:53:41.807 [DEBUG] [Thread-167805] [transport.py] [_log()] starting thread (client mode): 0xb0f8dea0
2026-04-11T09:53:41.807 [DEBUG] [Thread-167805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:53:41.823 [DEBUG] [Thread-167805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:53:41.823 [INFO] [Thread-167805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:41.831 [DEBUG] [Thread-167805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] client lang: <none>
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] server lang: <none>
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] kex follows: False
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] Compression: none
2026-04-11T09:53:41.832 [DEBUG] [Thread-167805] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:53:41.888 [DEBUG] [Thread-167805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:53:41.888 [DEBUG] [Thread-167805] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:53:41.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:53:41.889 [DEBUG] [Thread-167805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:53:41.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:53:41.949 [DEBUG] [Thread-167805] [transport.py] [_log()] userauth is OK
2026-04-11T09:53:41.950 [DEBUG] [Thread-167805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:53:41.950 [DEBUG] [Thread-167805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:53:41.950 [DEBUG] [Thread-167805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:53:41.950 [DEBUG] [Thread-167805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:53:41.970 [INFO] [Thread-167805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:53:41.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:53:41.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:53:42.820 [DEBUG] [Thread-167805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:53:42.820 [DEBUG] [Thread-167805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:53:42.868 [DEBUG] [Thread-167805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:53:42.868 [DEBUG] [Thread-167805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:53:42.877 [DEBUG] [Thread-167805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:53:42.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:53:42.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-04-11T09:53:42.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:53:42.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:53:42.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:53:42.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:53:42.914 [DEBUG] [Thread-167805] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:53:51.197 [DEBUG] [Thread-167807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:53:57.668 [DEBUG] [Thread-167808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:06.252 [DEBUG] [Thread-167809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:12.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:54:12.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:54:12.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:54:14.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 53, 57), 0.085135, 99.4086, 0.0, 19.5152, 13.0177, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:54:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:53:57
2026-04-11T09:54:14.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:54:14.785 [DEBUG] [Thread-167810] [transport.py] [_log()] starting thread (client mode): 0xa7952d40
2026-04-11T09:54:14.785 [DEBUG] [Thread-167810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:54:14.805 [DEBUG] [Thread-167810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:54:14.805 [INFO] [Thread-167810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] client lang: <none>
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] server lang: <none>
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] kex follows: False
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:54:14.809 [DEBUG] [Thread-167810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:54:14.810 [DEBUG] [Thread-167810] [transport.py] [_log()] Compression: none
2026-04-11T09:54:14.810 [DEBUG] [Thread-167810] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:54:14.829 [DEBUG] [Thread-167810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:54:14.829 [DEBUG] [Thread-167810] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:54:14.830 [DEBUG] [Thread-167810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:54:14.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:54:14.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:54:14.832 [DEBUG] [Thread-167810] [transport.py] [_log()] userauth is OK
2026-04-11T09:54:14.833 [DEBUG] [Thread-167810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:54:14.833 [DEBUG] [Thread-167810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:54:14.833 [DEBUG] [Thread-167810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:54:14.833 [DEBUG] [Thread-167810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:54:14.869 [INFO] [Thread-167810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:54:14.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:54:15.619 [DEBUG] [Thread-167810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:54:15.620 [DEBUG] [Thread-167810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:54:15.620 [DEBUG] [Thread-167810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:54:15.660 [DEBUG] [Thread-167810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:54:15.660 [DEBUG] [Thread-167810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:54:15.664 [DEBUG] [Thread-167810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:54:15.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:54:15.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:54:15.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:54:15.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:54:15.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:54:15.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:54:15.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:54:15.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:54:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:54:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.329288 -999.00  +12.90  15.18     97  +12.50 1 3 1 3 1   888    0 0.38 -1.28 ----- 8.2 15.2 88.2 24.2 14.0 -0.9 14.1 -0.4 13.9 -0.3 14.2 -0.6
2026-04-11T09:54:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:54:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:54:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.329288
2026-04-11T09:54:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:54:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:54:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:54:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:54:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:54:15.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:53:57', tmtdew=0.085135, humidity=99.4086, cloud=0.0, wind=19.5152, temperature=13.0177, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:54:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:54:15.692 [DEBUG] [Thread-167810] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:54:15.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:54:15.787 [DEBUG] [Thread-167813] [transport.py] [_log()] starting thread (client mode): 0xb0fb4e50
2026-04-11T09:54:15.788 [DEBUG] [Thread-167813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:54:15.802 [DEBUG] [Thread-167813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:54:15.802 [INFO] [Thread-167813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:54:15.810 [DEBUG] [Thread-167813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:54:15.810 [DEBUG] [Thread-167813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:54:15.810 [DEBUG] [Thread-167813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:54:15.810 [DEBUG] [Thread-167813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] client lang: <none>
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] server lang: <none>
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] kex follows: False
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:54:15.811 [DEBUG] [Thread-167813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:54:15.812 [DEBUG] [Thread-167813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:54:15.812 [DEBUG] [Thread-167813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:54:15.812 [DEBUG] [Thread-167813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:54:15.812 [DEBUG] [Thread-167813] [transport.py] [_log()] Compression: none
2026-04-11T09:54:15.812 [DEBUG] [Thread-167813] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:54:15.869 [DEBUG] [Thread-167813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:54:15.869 [DEBUG] [Thread-167813] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:54:15.870 [DEBUG] [Thread-167813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:54:15.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:54:15.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:54:15.930 [DEBUG] [Thread-167813] [transport.py] [_log()] userauth is OK
2026-04-11T09:54:15.930 [DEBUG] [Thread-167813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:54:15.930 [DEBUG] [Thread-167813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:54:15.930 [DEBUG] [Thread-167813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:54:15.930 [DEBUG] [Thread-167813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:54:15.950 [INFO] [Thread-167813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:54:15.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:54:15.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:54:16.798 [DEBUG] [Thread-167813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:54:16.799 [DEBUG] [Thread-167813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:54:16.847 [DEBUG] [Thread-167813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:54:16.847 [DEBUG] [Thread-167813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:54:16.857 [DEBUG] [Thread-167813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:54:16.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:54:16.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-04-11T09:54:16.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-04-11T09:54:16.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:54:16.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:54:16.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:54:16.893 [DEBUG] [Thread-167813] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:54:21.295 [DEBUG] [Thread-167815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:31.718 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:31.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:36.351 [DEBUG] [Thread-167816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:54:46.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:54:46.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-04-11T09:54:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 54, 32), 0.0826, 99.4249, 0.0, 20.8206, 13.0009, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:54:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:54:32
2026-04-11T09:54:48.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:54:48.699 [DEBUG] [Thread-167817] [transport.py] [_log()] starting thread (client mode): 0xb0fb6710
2026-04-11T09:54:48.699 [DEBUG] [Thread-167817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:54:48.724 [DEBUG] [Thread-167817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:54:48.725 [INFO] [Thread-167817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:54:48.726 [DEBUG] [Thread-167817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:54:48.726 [DEBUG] [Thread-167817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] client lang: <none>
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] server lang: <none>
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] kex follows: False
2026-04-11T09:54:48.727 [DEBUG] [Thread-167817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:54:48.728 [DEBUG] [Thread-167817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:54:48.728 [DEBUG] [Thread-167817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:54:48.728 [DEBUG] [Thread-167817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:54:48.728 [DEBUG] [Thread-167817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:54:48.728 [DEBUG] [Thread-167817] [transport.py] [_log()] Compression: none
2026-04-11T09:54:48.728 [DEBUG] [Thread-167817] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:54:48.739 [DEBUG] [Thread-167817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:54:48.740 [DEBUG] [Thread-167817] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:54:48.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:54:48.741 [DEBUG] [Thread-167817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:54:48.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:54:48.744 [DEBUG] [Thread-167817] [transport.py] [_log()] userauth is OK
2026-04-11T09:54:48.744 [DEBUG] [Thread-167817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:54:48.745 [DEBUG] [Thread-167817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:54:48.745 [DEBUG] [Thread-167817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:54:48.745 [DEBUG] [Thread-167817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:54:48.768 [INFO] [Thread-167817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:54:48.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:54:49.507 [DEBUG] [Thread-167817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:54:49.507 [DEBUG] [Thread-167817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:54:49.507 [DEBUG] [Thread-167817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:54:49.549 [DEBUG] [Thread-167817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:54:49.549 [DEBUG] [Thread-167817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:54:49.554 [DEBUG] [Thread-167817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:54:49.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:54:49.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:54:49.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:54:49.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:54:49.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:54:49.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:54:49.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:54:49.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:54:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:54:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.329635 -999.00  +12.90  21.03     97  +12.50 1 3 1 3 1   888    0 0.40 -0.84 ----- 19.9 21.0 58.1 25.9 14.0 -0.9 14.1 -0.4 13.9 -0.8 14.2 -0.7
2026-04-11T09:54:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:54:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:54:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.329635
2026-04-11T09:54:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:54:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:54:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:54:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:54:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:54:49.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:54:32', tmtdew=0.0826, humidity=99.4249, cloud=0.0, wind=20.8206, temperature=13.0009, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:54:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:54:49.582 [DEBUG] [Thread-167817] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:54:49.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:54:49.676 [DEBUG] [Thread-167820] [transport.py] [_log()] starting thread (client mode): 0xb0f6d930
2026-04-11T09:54:49.676 [DEBUG] [Thread-167820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:54:49.691 [DEBUG] [Thread-167820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:54:49.691 [INFO] [Thread-167820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:54:49.699 [DEBUG] [Thread-167820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:54:49.700 [DEBUG] [Thread-167820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:54:49.700 [DEBUG] [Thread-167820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:54:49.700 [DEBUG] [Thread-167820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:49.700 [DEBUG] [Thread-167820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:54:49.700 [DEBUG] [Thread-167820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:49.700 [DEBUG] [Thread-167820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] client lang: <none>
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] server lang: <none>
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] kex follows: False
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] Compression: none
2026-04-11T09:54:49.701 [DEBUG] [Thread-167820] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:54:49.754 [DEBUG] [Thread-167820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:54:49.755 [DEBUG] [Thread-167820] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:54:49.755 [DEBUG] [Thread-167820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:54:49.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:54:49.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:54:49.812 [DEBUG] [Thread-167820] [transport.py] [_log()] userauth is OK
2026-04-11T09:54:49.812 [DEBUG] [Thread-167820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:54:49.813 [DEBUG] [Thread-167820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:54:49.813 [DEBUG] [Thread-167820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:54:49.813 [DEBUG] [Thread-167820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:54:49.838 [INFO] [Thread-167820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:54:49.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:54:49.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:54:50.659 [DEBUG] [Thread-167820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:54:50.659 [DEBUG] [Thread-167820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:54:50.707 [DEBUG] [Thread-167820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:54:50.707 [DEBUG] [Thread-167820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:54:50.717 [DEBUG] [Thread-167820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:54:50.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:54:50.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-04-11T09:54:50.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-04-11T09:54:50.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:54:50.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:54:50.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:54:50.756 [DEBUG] [Thread-167820] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:54:51.388 [DEBUG] [Thread-167822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:54:57.711 [DEBUG] [Thread-167823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:06.447 [DEBUG] [Thread-167824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:20.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:55:20.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:55:20.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-04-11T09:55:21.484 [DEBUG] [Thread-167825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:22.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 55, 7), 0.08265, 99.4247, 0.0, 19.3918, 13.0339, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:55:22.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:55:07
2026-04-11T09:55:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:55:22.588 [DEBUG] [Thread-167826] [transport.py] [_log()] starting thread (client mode): 0xb0f6d7e0
2026-04-11T09:55:22.588 [DEBUG] [Thread-167826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:55:22.608 [DEBUG] [Thread-167826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:55:22.608 [INFO] [Thread-167826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] client lang: <none>
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] server lang: <none>
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] kex follows: False
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] Compression: none
2026-04-11T09:55:22.611 [DEBUG] [Thread-167826] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:55:22.629 [DEBUG] [Thread-167826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:55:22.629 [DEBUG] [Thread-167826] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:55:22.630 [DEBUG] [Thread-167826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:55:22.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:55:22.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:55:22.630 [DEBUG] [Thread-167826] [transport.py] [_log()] userauth is OK
2026-04-11T09:55:22.630 [DEBUG] [Thread-167826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:55:22.630 [DEBUG] [Thread-167826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:55:22.631 [DEBUG] [Thread-167826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:55:22.631 [DEBUG] [Thread-167826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:55:22.642 [INFO] [Thread-167826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:55:22.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:55:31.859 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:31.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:35.413 [DEBUG] [Thread-167826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:55:35.413 [DEBUG] [Thread-167826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:55:35.413 [DEBUG] [Thread-167826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:55:35.454 [DEBUG] [Thread-167826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:55:35.454 [DEBUG] [Thread-167826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:55:35.458 [DEBUG] [Thread-167826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:55:35.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:55:35.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:55:35.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:55:35.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:55:35.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:55:35.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:55:35.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:55:35.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:55:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:55:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.329635 -999.00  +12.90  21.03     97  +12.50 1 3 1 3 1   888    0 0.40 -0.84 ----- 19.9 21.0 58.1 25.9 14.0 -0.9 14.1 -0.4 13.9 -0.8 14.2 -0.7
2026-04-11T09:55:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:55:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:55:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.329635
2026-04-11T09:55:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:55:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:55:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:55:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:55:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:55:35.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:55:07', tmtdew=0.08265, humidity=99.4247, cloud=0.0, wind=19.3918, temperature=13.0339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:54:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:55:35.565 [DEBUG] [Thread-167826] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:55:35.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:55:35.659 [DEBUG] [Thread-167829] [transport.py] [_log()] starting thread (client mode): 0xb0fcffa0
2026-04-11T09:55:35.659 [DEBUG] [Thread-167829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:55:35.674 [DEBUG] [Thread-167829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:55:35.674 [INFO] [Thread-167829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] client lang: <none>
2026-04-11T09:55:35.682 [DEBUG] [Thread-167829] [transport.py] [_log()] server lang: <none>
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] kex follows: False
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] Compression: none
2026-04-11T09:55:35.683 [DEBUG] [Thread-167829] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:55:35.741 [DEBUG] [Thread-167829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:55:35.742 [DEBUG] [Thread-167829] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:55:35.742 [DEBUG] [Thread-167829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:55:35.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:55:35.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:55:35.800 [DEBUG] [Thread-167829] [transport.py] [_log()] userauth is OK
2026-04-11T09:55:35.800 [DEBUG] [Thread-167829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:55:35.800 [DEBUG] [Thread-167829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:55:35.800 [DEBUG] [Thread-167829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:55:35.800 [DEBUG] [Thread-167829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:55:35.821 [INFO] [Thread-167829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:55:35.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:55:35.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:55:36.522 [DEBUG] [Thread-167831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:36.665 [DEBUG] [Thread-167829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:55:36.666 [DEBUG] [Thread-167829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:55:36.717 [DEBUG] [Thread-167829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:55:36.717 [DEBUG] [Thread-167829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:55:36.727 [DEBUG] [Thread-167829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:55:36.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:55:36.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-04-11T09:55:36.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-04-11T09:55:36.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:55:36.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:55:36.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:55:36.763 [DEBUG] [Thread-167829] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:55:51.575 [DEBUG] [Thread-167832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:55:57.760 [DEBUG] [Thread-167833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:06.613 [DEBUG] [Thread-167834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:56:06.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:56:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:56:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 55, 43), 0.16017, 98.8826, 0.0, 22.9709, 13.501, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:56:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:55:43
2026-04-11T09:56:08.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:56:08.635 [DEBUG] [Thread-167835] [transport.py] [_log()] starting thread (client mode): 0xb0fb6620
2026-04-11T09:56:08.635 [DEBUG] [Thread-167835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:56:08.655 [DEBUG] [Thread-167835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:56:08.655 [INFO] [Thread-167835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:56:08.656 [DEBUG] [Thread-167835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] client lang: <none>
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] server lang: <none>
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] kex follows: False
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] Compression: none
2026-04-11T09:56:08.657 [DEBUG] [Thread-167835] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:56:08.667 [DEBUG] [Thread-167835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:56:08.667 [DEBUG] [Thread-167835] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:56:08.668 [DEBUG] [Thread-167835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:56:08.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:56:08.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:56:08.669 [DEBUG] [Thread-167835] [transport.py] [_log()] userauth is OK
2026-04-11T09:56:08.669 [DEBUG] [Thread-167835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:56:08.669 [DEBUG] [Thread-167835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:56:08.669 [DEBUG] [Thread-167835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:56:08.669 [DEBUG] [Thread-167835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:56:08.682 [INFO] [Thread-167835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:56:08.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:56:09.421 [DEBUG] [Thread-167835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:56:09.421 [DEBUG] [Thread-167835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:56:09.422 [DEBUG] [Thread-167835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:56:09.462 [DEBUG] [Thread-167835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:56:09.463 [DEBUG] [Thread-167835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:56:09.466 [DEBUG] [Thread-167835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:56:09.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:56:09.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:56:09.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:56:09.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:56:09.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:56:09.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:56:09.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:56:09.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:56:09.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:56:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.329982 -999.00  +13.00  10.35     97  +12.60 1 3 1 3 1   888    0 0.40 -0.87 ----- 15.7 10.3 98.8 24.7 14.1 -1.2 14.0 -0.4 13.9 -0.6 14.2 -0.5
2026-04-11T09:56:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:56:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:56:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.329982
2026-04-11T09:56:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:56:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:56:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:56:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:56:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:56:09.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:55:43', tmtdew=0.16017, humidity=98.8826, cloud=0.0, wind=22.9709, temperature=13.501, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:55:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:56:09.488 [DEBUG] [Thread-167835] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:56:09.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:56:09.583 [DEBUG] [Thread-167838] [transport.py] [_log()] starting thread (client mode): 0xb0f6cb20
2026-04-11T09:56:09.584 [DEBUG] [Thread-167838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:56:09.599 [DEBUG] [Thread-167838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:56:09.599 [INFO] [Thread-167838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:56:09.606 [DEBUG] [Thread-167838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] client lang: <none>
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] server lang: <none>
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] kex follows: False
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] Compression: none
2026-04-11T09:56:09.607 [DEBUG] [Thread-167838] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:56:09.664 [DEBUG] [Thread-167838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:56:09.665 [DEBUG] [Thread-167838] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:56:09.665 [DEBUG] [Thread-167838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:56:09.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:56:09.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:56:09.728 [DEBUG] [Thread-167838] [transport.py] [_log()] userauth is OK
2026-04-11T09:56:09.728 [DEBUG] [Thread-167838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:56:09.729 [DEBUG] [Thread-167838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:56:09.729 [DEBUG] [Thread-167838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:56:09.729 [DEBUG] [Thread-167838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:56:09.748 [INFO] [Thread-167838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:56:09.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:56:09.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:56:10.590 [DEBUG] [Thread-167838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:56:10.590 [DEBUG] [Thread-167838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:56:10.638 [DEBUG] [Thread-167838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:56:10.638 [DEBUG] [Thread-167838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:56:10.647 [DEBUG] [Thread-167838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:56:10.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:56:10.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-04-11T09:56:10.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-04-11T09:56:10.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:56:10.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:56:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:56:10.685 [DEBUG] [Thread-167838] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:56:21.651 [DEBUG] [Thread-167840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:32.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:32.002 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:36.712 [DEBUG] [Thread-167841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:40.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:56:40.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:56:40.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-04-11T09:56:41.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 56, 19), 0.137795, 99.3915, 0.0, 22.0738, 13.0839, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:56:41.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:56:19
2026-04-11T09:56:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:56:42.542 [DEBUG] [Thread-167842] [transport.py] [_log()] starting thread (client mode): 0xae5a5690
2026-04-11T09:56:42.542 [DEBUG] [Thread-167842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:56:42.564 [DEBUG] [Thread-167842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:56:42.564 [INFO] [Thread-167842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:56:42.567 [DEBUG] [Thread-167842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:56:42.567 [DEBUG] [Thread-167842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:56:42.567 [DEBUG] [Thread-167842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] client lang: <none>
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] server lang: <none>
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] kex follows: False
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] Compression: none
2026-04-11T09:56:42.568 [DEBUG] [Thread-167842] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:56:42.586 [DEBUG] [Thread-167842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:56:42.587 [DEBUG] [Thread-167842] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:56:42.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:56:42.588 [DEBUG] [Thread-167842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:56:42.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:56:42.590 [DEBUG] [Thread-167842] [transport.py] [_log()] userauth is OK
2026-04-11T09:56:42.591 [DEBUG] [Thread-167842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:56:42.591 [DEBUG] [Thread-167842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:56:42.591 [DEBUG] [Thread-167842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:56:42.591 [DEBUG] [Thread-167842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:56:42.614 [INFO] [Thread-167842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:56:42.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:56:43.394 [DEBUG] [Thread-167842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:56:43.394 [DEBUG] [Thread-167842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:56:43.395 [DEBUG] [Thread-167842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:56:43.435 [DEBUG] [Thread-167842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:56:43.435 [DEBUG] [Thread-167842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:56:43.438 [DEBUG] [Thread-167842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:56:43.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:56:43.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:56:43.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:56:43.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:56:43.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:56:43.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:56:43.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:56:43.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:56:43.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:56:43.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.330329 -999.00  +13.00  15.66     97  +12.60 1 3 1 3 1   888    0 0.40 -0.79 ----- 17.4 15.7 83.2 20.7 14.0 -0.6 14.1 -0.3 13.9 -0.3 14.2 -0.5
2026-04-11T09:56:43.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:56:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:56:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.330329
2026-04-11T09:56:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:56:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:56:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:56:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:56:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:56:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:56:19', tmtdew=0.137795, humidity=99.3915, cloud=0.0, wind=22.0738, temperature=13.0839, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:55:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:56:43.467 [DEBUG] [Thread-167842] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:56:43.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:56:43.550 [DEBUG] [Thread-167845] [transport.py] [_log()] starting thread (client mode): 0xb0f6f370
2026-04-11T09:56:43.550 [DEBUG] [Thread-167845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:56:43.565 [DEBUG] [Thread-167845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:56:43.565 [INFO] [Thread-167845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:56:43.572 [DEBUG] [Thread-167845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] client lang: <none>
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] server lang: <none>
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] kex follows: False
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] Compression: none
2026-04-11T09:56:43.573 [DEBUG] [Thread-167845] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:56:43.632 [DEBUG] [Thread-167845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:56:43.632 [DEBUG] [Thread-167845] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:56:43.633 [DEBUG] [Thread-167845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:56:43.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:56:43.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:56:43.690 [DEBUG] [Thread-167845] [transport.py] [_log()] userauth is OK
2026-04-11T09:56:43.690 [DEBUG] [Thread-167845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:56:43.691 [DEBUG] [Thread-167845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:56:43.691 [DEBUG] [Thread-167845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:56:43.691 [DEBUG] [Thread-167845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:56:43.716 [INFO] [Thread-167845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:56:43.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:56:43.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:56:44.568 [DEBUG] [Thread-167845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:56:44.569 [DEBUG] [Thread-167845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:56:44.617 [DEBUG] [Thread-167845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:56:44.617 [DEBUG] [Thread-167845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:56:44.626 [DEBUG] [Thread-167845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:56:44.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:56:44.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:56:44.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:56:44.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:56:44.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:56:44.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:56:44.669 [DEBUG] [Thread-167845] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:56:51.750 [DEBUG] [Thread-167847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:56:57.821 [DEBUG] [Thread-167848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:06.811 [DEBUG] [Thread-167849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:14.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:57:14.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:57:14.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-04-11T09:57:15.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 56, 54), 0.127475, 99.4581, 0.0, 16.515, 13.1007, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:57:15.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:56:54
2026-04-11T09:57:16.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:57:16.535 [DEBUG] [Thread-167850] [transport.py] [_log()] starting thread (client mode): 0xb0f8eb90
2026-04-11T09:57:16.536 [DEBUG] [Thread-167850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:57:16.558 [DEBUG] [Thread-167850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:57:16.558 [INFO] [Thread-167850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:16.561 [DEBUG] [Thread-167850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] client lang: <none>
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] server lang: <none>
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] kex follows: False
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] Compression: none
2026-04-11T09:57:16.562 [DEBUG] [Thread-167850] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:57:16.577 [DEBUG] [Thread-167850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:57:16.578 [DEBUG] [Thread-167850] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:57:16.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:57:16.579 [DEBUG] [Thread-167850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:57:16.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:57:16.581 [DEBUG] [Thread-167850] [transport.py] [_log()] userauth is OK
2026-04-11T09:57:16.581 [DEBUG] [Thread-167850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:57:16.581 [DEBUG] [Thread-167850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:57:16.581 [DEBUG] [Thread-167850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:57:16.581 [DEBUG] [Thread-167850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:57:16.598 [INFO] [Thread-167850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:57:16.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:57:17.762 [DEBUG] [Thread-167850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:57:17.762 [DEBUG] [Thread-167850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:57:17.763 [DEBUG] [Thread-167850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:57:17.803 [DEBUG] [Thread-167850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:57:17.803 [DEBUG] [Thread-167850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:57:17.806 [DEBUG] [Thread-167850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:57:17.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:57:17.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:57:17.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:57:17.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:57:17.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:57:17.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:57:17.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:57:17.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.331371 -999.00  +13.00  18.84     97  +12.60 1 3 1 3 1   888    0 0.37 -1.69 ----- 11.3 18.8 73.8 23.0 14.1 -0.8 14.1 -0.5 14.0 -0.3 14.2 -0.6
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.331371
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:57:17.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:56:54', tmtdew=0.127475, humidity=99.4581, cloud=0.0, wind=16.515, temperature=13.1007, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:57:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:57:17.830 [DEBUG] [Thread-167850] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:57:17.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:57:17.923 [DEBUG] [Thread-167853] [transport.py] [_log()] starting thread (client mode): 0xa7951b10
2026-04-11T09:57:17.923 [DEBUG] [Thread-167853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:57:17.939 [DEBUG] [Thread-167853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:57:17.940 [INFO] [Thread-167853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:57:17.951 [DEBUG] [Thread-167853] [transport.py] [_log()] client lang: <none>
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] server lang: <none>
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] kex follows: False
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] Compression: none
2026-04-11T09:57:17.952 [DEBUG] [Thread-167853] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:57:18.008 [DEBUG] [Thread-167853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:57:18.008 [DEBUG] [Thread-167853] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:57:18.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:57:18.009 [DEBUG] [Thread-167853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:57:18.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:57:18.068 [DEBUG] [Thread-167853] [transport.py] [_log()] userauth is OK
2026-04-11T09:57:18.068 [DEBUG] [Thread-167853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:57:18.068 [DEBUG] [Thread-167853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:57:18.069 [DEBUG] [Thread-167853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:57:18.069 [DEBUG] [Thread-167853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:57:18.089 [INFO] [Thread-167853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:57:18.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:57:18.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:57:18.927 [DEBUG] [Thread-167853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:57:18.927 [DEBUG] [Thread-167853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:57:18.975 [DEBUG] [Thread-167853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:57:18.975 [DEBUG] [Thread-167853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:57:18.985 [DEBUG] [Thread-167853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:57:18.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:57: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')
2026-04-11T09:57:19.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-04-11T09:57:19.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:57:19.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:57:19.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:57:19.022 [DEBUG] [Thread-167853] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:57:21.846 [DEBUG] [Thread-167855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:32.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:32.152 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:36.901 [DEBUG] [Thread-167856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:49.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:57:49.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:57:49.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-04-11T09:57:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 57, 31), 0.124865, 99.4749, 0.0, 16.8502, 13.0842, 2, 2, 0, 2, 0, 0),)
2026-04-11T09:57:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:57:31
2026-04-11T09:57:50.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:57:50.867 [DEBUG] [Thread-167857] [transport.py] [_log()] starting thread (client mode): 0xb0fb4a00
2026-04-11T09:57:50.867 [DEBUG] [Thread-167857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:57:50.887 [DEBUG] [Thread-167857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:57:50.887 [INFO] [Thread-167857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] client lang: <none>
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] server lang: <none>
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] kex follows: False
2026-04-11T09:57:50.890 [DEBUG] [Thread-167857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:57:50.891 [DEBUG] [Thread-167857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:57:50.891 [DEBUG] [Thread-167857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:57:50.891 [DEBUG] [Thread-167857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:57:50.891 [DEBUG] [Thread-167857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:57:50.891 [DEBUG] [Thread-167857] [transport.py] [_log()] Compression: none
2026-04-11T09:57:50.891 [DEBUG] [Thread-167857] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:57:50.907 [DEBUG] [Thread-167857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:57:50.907 [DEBUG] [Thread-167857] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:57:50.908 [DEBUG] [Thread-167857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:57:50.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:57:50.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:57:50.910 [DEBUG] [Thread-167857] [transport.py] [_log()] userauth is OK
2026-04-11T09:57:50.910 [DEBUG] [Thread-167857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:57:50.910 [DEBUG] [Thread-167857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:57:50.910 [DEBUG] [Thread-167857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:57:50.911 [DEBUG] [Thread-167857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:57:50.935 [INFO] [Thread-167857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:57:50.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:57:51.674 [DEBUG] [Thread-167857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:57:51.674 [DEBUG] [Thread-167857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:57:51.674 [DEBUG] [Thread-167857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:57:51.715 [DEBUG] [Thread-167857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:57:51.715 [DEBUG] [Thread-167857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:57:51.718 [DEBUG] [Thread-167857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:57:51.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:57:51.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:57:51.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:57:51.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:57:51.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:57:51.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:57:51.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:57:51.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:57:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:57:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.331718 -999.00  +13.00  13.88     97  +12.60 1 3 1 3 1   888    0 0.36 -2.03 ----- 12.3 13.9 112.6 21.7 14.1 -0.7 14.0 -0.2 14.0 -0.3 14.2 -0.5
2026-04-11T09:57:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:57:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:57:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.331718
2026-04-11T09:57:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:57:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:57:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:57:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:57:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:57:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:57:31', tmtdew=0.124865, humidity=99.4749, cloud=0.0, wind=16.8502, temperature=13.0842, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:57:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:57:51.748 [DEBUG] [Thread-167857] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:57:51.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:57:51.852 [DEBUG] [Thread-167860] [transport.py] [_log()] starting thread (client mode): 0xa7953a60
2026-04-11T09:57:51.852 [DEBUG] [Thread-167860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:57:51.867 [DEBUG] [Thread-167860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:57:51.867 [INFO] [Thread-167860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:57:51.875 [DEBUG] [Thread-167860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:57:51.875 [DEBUG] [Thread-167860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] client lang: <none>
2026-04-11T09:57:51.876 [DEBUG] [Thread-167860] [transport.py] [_log()] server lang: <none>
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] kex follows: False
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] Compression: none
2026-04-11T09:57:51.877 [DEBUG] [Thread-167860] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:57:51.937 [DEBUG] [Thread-167860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:57:51.938 [DEBUG] [Thread-167860] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:57:51.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:57:51.940 [DEBUG] [Thread-167860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:57:51.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:57:51.942 [DEBUG] [Thread-167862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:57:51.996 [DEBUG] [Thread-167860] [transport.py] [_log()] userauth is OK
2026-04-11T09:57:51.996 [DEBUG] [Thread-167860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:57:51.996 [DEBUG] [Thread-167860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:57:51.997 [DEBUG] [Thread-167860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:57:51.997 [DEBUG] [Thread-167860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:57:52.018 [INFO] [Thread-167860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:57:52.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:57:52.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:57:52.896 [DEBUG] [Thread-167860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:57:52.896 [DEBUG] [Thread-167860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:57:52.945 [DEBUG] [Thread-167860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:57:52.946 [DEBUG] [Thread-167860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:57:52.959 [DEBUG] [Thread-167860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:57:52.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:57:52.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:57:52.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-04-11T09:57:52.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:57:52.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:57:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:57:52.996 [DEBUG] [Thread-167860] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:57:57.878 [DEBUG] [Thread-167863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:06.997 [DEBUG] [Thread-167864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:22.037 [DEBUG] [Thread-167865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:23.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:58:23.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:58:23.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-04-11T09:58:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 58, 6), 0.13516, 99.4085, 0.0, 17.0971, 13.1008, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:58:24.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:58:06
2026-04-11T09:58:24.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:58:24.820 [DEBUG] [Thread-167866] [transport.py] [_log()] starting thread (client mode): 0xb0fcf340
2026-04-11T09:58:24.820 [DEBUG] [Thread-167866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:58:24.839 [DEBUG] [Thread-167866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:58:24.839 [INFO] [Thread-167866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] client lang: <none>
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] server lang: <none>
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] kex follows: False
2026-04-11T09:58:24.843 [DEBUG] [Thread-167866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:58:24.844 [DEBUG] [Thread-167866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:58:24.844 [DEBUG] [Thread-167866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:58:24.844 [DEBUG] [Thread-167866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:58:24.844 [DEBUG] [Thread-167866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:58:24.844 [DEBUG] [Thread-167866] [transport.py] [_log()] Compression: none
2026-04-11T09:58:24.844 [DEBUG] [Thread-167866] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:58:24.860 [DEBUG] [Thread-167866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:58:24.861 [DEBUG] [Thread-167866] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:58:24.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:58:24.862 [DEBUG] [Thread-167866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:58:24.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:58:24.864 [DEBUG] [Thread-167866] [transport.py] [_log()] userauth is OK
2026-04-11T09:58:24.864 [DEBUG] [Thread-167866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:58:24.865 [DEBUG] [Thread-167866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:58:24.865 [DEBUG] [Thread-167866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:58:24.865 [DEBUG] [Thread-167866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:58:24.884 [INFO] [Thread-167866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:58:24.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:58:25.634 [DEBUG] [Thread-167866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:58:25.635 [DEBUG] [Thread-167866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:58:25.635 [DEBUG] [Thread-167866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:58:25.676 [DEBUG] [Thread-167866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:58:25.676 [DEBUG] [Thread-167866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:58:25.679 [DEBUG] [Thread-167866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:58:25.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:58:25.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:58:25.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:58:25.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:58:25.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:58:25.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:58:25.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:58:25.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:58:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:58:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.332065 -999.00  +13.10  12.61     97  +12.60 1 3 1 3 1   888    0 0.38 -1.34 ----- 8.6 12.6 71.4 17.0 14.1 -0.9 14.1 -0.2 14.0 -0.3 14.3 -0.5
2026-04-11T09:58:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:58:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:58:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.332065
2026-04-11T09:58:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:58:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:58:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:58:25.706 [DEBUG] [Thread-167866] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:58:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:58:25.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:58:25.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:58:06', tmtdew=0.13516, humidity=99.4085, cloud=0.0, wind=17.0971, temperature=13.1008, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:58:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:58:25.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:58:25.800 [DEBUG] [Thread-167869] [transport.py] [_log()] starting thread (client mode): 0xae514dc0
2026-04-11T09:58:25.800 [DEBUG] [Thread-167869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:58:25.815 [DEBUG] [Thread-167869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:58:25.815 [INFO] [Thread-167869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:58:25.822 [DEBUG] [Thread-167869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] client lang: <none>
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] server lang: <none>
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] kex follows: False
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] Compression: none
2026-04-11T09:58:25.823 [DEBUG] [Thread-167869] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:58:25.880 [DEBUG] [Thread-167869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:58:25.880 [DEBUG] [Thread-167869] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:58:25.881 [DEBUG] [Thread-167869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:58:25.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:58:25.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:58:25.942 [DEBUG] [Thread-167869] [transport.py] [_log()] userauth is OK
2026-04-11T09:58:25.942 [DEBUG] [Thread-167869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:58:25.942 [DEBUG] [Thread-167869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:58:25.942 [DEBUG] [Thread-167869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:58:25.942 [DEBUG] [Thread-167869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:58:25.958 [INFO] [Thread-167869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:58: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-04-11T09:58:25.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:58:26.795 [DEBUG] [Thread-167869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:58:26.795 [DEBUG] [Thread-167869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:58:26.843 [DEBUG] [Thread-167869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:58:26.843 [DEBUG] [Thread-167869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:58:26.853 [DEBUG] [Thread-167869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:58:26.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:58:26.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T09:58:26.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T09:58:26.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:58:26.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:58:26.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:58:26.889 [DEBUG] [Thread-167869] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:58:32.293 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:32.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:37.074 [DEBUG] [Thread-167871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:52.131 [DEBUG] [Thread-167872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:56.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:58:56.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:58:56.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T09:58:57.923 [DEBUG] [Thread-167873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:58:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 58, 42), 0.17028, 98.8171, 0.0, 27.8395, 13.4353, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:58:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:58:42
2026-04-11T09:58:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:58:58.736 [DEBUG] [Thread-167874] [transport.py] [_log()] starting thread (client mode): 0xae517d00
2026-04-11T09:58:58.737 [DEBUG] [Thread-167874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:58:58.756 [DEBUG] [Thread-167874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:58:58.756 [INFO] [Thread-167874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:58:58.759 [DEBUG] [Thread-167874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:58:58.759 [DEBUG] [Thread-167874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:58:58.759 [DEBUG] [Thread-167874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:58:58.759 [DEBUG] [Thread-167874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] client lang: <none>
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] server lang: <none>
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] kex follows: False
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] Compression: none
2026-04-11T09:58:58.760 [DEBUG] [Thread-167874] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:58:58.769 [DEBUG] [Thread-167874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:58:58.770 [DEBUG] [Thread-167874] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:58:58.770 [DEBUG] [Thread-167874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:58:58.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:58:58.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:58:58.772 [DEBUG] [Thread-167874] [transport.py] [_log()] userauth is OK
2026-04-11T09:58:58.772 [DEBUG] [Thread-167874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:58:58.772 [DEBUG] [Thread-167874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:58:58.772 [DEBUG] [Thread-167874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:58:58.773 [DEBUG] [Thread-167874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:58:58.796 [INFO] [Thread-167874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:58:58.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:58:59.534 [DEBUG] [Thread-167874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:58:59.534 [DEBUG] [Thread-167874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:58:59.534 [DEBUG] [Thread-167874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:58:59.575 [DEBUG] [Thread-167874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:58:59.575 [DEBUG] [Thread-167874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:58:59.578 [DEBUG] [Thread-167874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:58:59.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:58:59.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:58:59.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:58:59.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:58:59.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:58:59.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:58:59.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:58:59.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:58:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:58:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.332413 -999.00  +13.00  12.90     97  +12.60 1 3 1 3 1   888    0 0.39 -0.92 ----- 15.4 12.9 110.6 19.3 14.1 -1.2 14.1 -0.2 14.0 -0.3 14.2 -0.6
2026-04-11T09:58:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:58:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:58:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.332413
2026-04-11T09:58:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:58:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:58:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:58:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:58:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:58:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:58:42', tmtdew=0.17028, humidity=98.8171, cloud=0.0, wind=27.8395, temperature=13.4353, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:58:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:58:59.606 [DEBUG] [Thread-167874] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:58:59.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:58:59.701 [DEBUG] [Thread-167877] [transport.py] [_log()] starting thread (client mode): 0xae5a43a0
2026-04-11T09:58:59.701 [DEBUG] [Thread-167877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:58:59.715 [DEBUG] [Thread-167877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:58:59.715 [INFO] [Thread-167877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:58:59.722 [DEBUG] [Thread-167877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:58:59.722 [DEBUG] [Thread-167877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:58:59.722 [DEBUG] [Thread-167877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] client lang: <none>
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] server lang: <none>
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] kex follows: False
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] Compression: none
2026-04-11T09:58:59.723 [DEBUG] [Thread-167877] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:58:59.778 [DEBUG] [Thread-167877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:58:59.778 [DEBUG] [Thread-167877] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:58:59.780 [DEBUG] [Thread-167877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:58:59.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:58:59.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:58:59.836 [DEBUG] [Thread-167877] [transport.py] [_log()] userauth is OK
2026-04-11T09:58:59.837 [DEBUG] [Thread-167877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:58:59.837 [DEBUG] [Thread-167877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:58:59.837 [DEBUG] [Thread-167877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:58:59.837 [DEBUG] [Thread-167877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:58:59.853 [INFO] [Thread-167877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:58:59.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:58:59.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:59:00.694 [DEBUG] [Thread-167877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:59:00.694 [DEBUG] [Thread-167877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:59:00.742 [DEBUG] [Thread-167877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:59:00.743 [DEBUG] [Thread-167877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:59:00.752 [DEBUG] [Thread-167877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:59:00.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:59:00.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-04-11T09:59:00.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-04-11T09:59:00.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:59:00.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:59:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:59:00.789 [DEBUG] [Thread-167877] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:59:07.167 [DEBUG] [Thread-167879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:59:22.222 [DEBUG] [Thread-167880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:59:30.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T09:59:30.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T09:59:30.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-04-11T09:59:32.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 59, 19), 0.135195, 99.4083, 0.0, 20.6089, 13.0841, 2, 2, 2, 2, 0, 0),)
2026-04-11T09:59:32.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:59:19
2026-04-11T09:59:32.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:59:32.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:59:32.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T09:59:32.693 [DEBUG] [Thread-167881] [transport.py] [_log()] starting thread (client mode): 0xae52fd60
2026-04-11T09:59:32.693 [DEBUG] [Thread-167881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:59:32.713 [DEBUG] [Thread-167881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T09:59:32.714 [INFO] [Thread-167881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] client lang: <none>
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] server lang: <none>
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] kex follows: False
2026-04-11T09:59:32.715 [DEBUG] [Thread-167881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:59:32.716 [DEBUG] [Thread-167881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:59:32.716 [DEBUG] [Thread-167881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:59:32.716 [DEBUG] [Thread-167881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:59:32.716 [DEBUG] [Thread-167881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:59:32.716 [DEBUG] [Thread-167881] [transport.py] [_log()] Compression: none
2026-04-11T09:59:32.716 [DEBUG] [Thread-167881] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:59:32.732 [DEBUG] [Thread-167881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:59:32.732 [DEBUG] [Thread-167881] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:59:32.732 [DEBUG] [Thread-167881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T09:59:32.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T09:59:32.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:59:32.733 [DEBUG] [Thread-167881] [transport.py] [_log()] userauth is OK
2026-04-11T09:59:32.733 [DEBUG] [Thread-167881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:59:32.733 [DEBUG] [Thread-167881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:59:32.733 [DEBUG] [Thread-167881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T09:59:32.733 [DEBUG] [Thread-167881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:59:32.743 [INFO] [Thread-167881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:59:32.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:59:33.491 [DEBUG] [Thread-167881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:59:33.491 [DEBUG] [Thread-167881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:59:33.492 [DEBUG] [Thread-167881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T09:59:33.532 [DEBUG] [Thread-167881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:59:33.532 [DEBUG] [Thread-167881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:59:33.538 [DEBUG] [Thread-167881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:59:33.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:59:33.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T09:59:33.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T09:59:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T09:59:33.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:59:33.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T09:59:33.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:59:33.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:59:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T09:59:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.332760 -999.00  +13.00  15.83     97  +12.60 1 3 1 3 1   888    0 0.40 -0.64 ----- 13.5 15.8 88.5 22.1 14.1 -1.6 14.2 -0.3 14.0 -0.7 14.2 -0.4
2026-04-11T09:59:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T09:59:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T09:59:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.332760
2026-04-11T09:59:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T09:59:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T09:59:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T09:59:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T09:59:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T09:59:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:59:19', tmtdew=0.135195, humidity=99.4083, cloud=0.0, wind=20.6089, temperature=13.0841, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:59:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T09:59:33.562 [DEBUG] [Thread-167881] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:59:33.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T09:59:33.656 [DEBUG] [Thread-167884] [transport.py] [_log()] starting thread (client mode): 0xae52f550
2026-04-11T09:59:33.656 [DEBUG] [Thread-167884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T09:59:33.671 [DEBUG] [Thread-167884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T09:59:33.671 [INFO] [Thread-167884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T09:59:33.679 [DEBUG] [Thread-167884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] client lang: <none>
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] server lang: <none>
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] kex follows: False
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T09:59:33.680 [DEBUG] [Thread-167884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T09:59:33.681 [DEBUG] [Thread-167884] [transport.py] [_log()] Compression: none
2026-04-11T09:59:33.681 [DEBUG] [Thread-167884] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T09:59:33.737 [DEBUG] [Thread-167884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T09:59:33.738 [DEBUG] [Thread-167884] [transport.py] [_log()] Switch to new keys ...
2026-04-11T09:59:33.738 [DEBUG] [Thread-167884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T09:59:33.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T09:59:33.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T09:59:33.796 [DEBUG] [Thread-167884] [transport.py] [_log()] userauth is OK
2026-04-11T09:59:33.796 [DEBUG] [Thread-167884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T09:59:33.796 [DEBUG] [Thread-167884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T09:59:33.797 [DEBUG] [Thread-167884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T09:59:33.797 [DEBUG] [Thread-167884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T09:59:33.815 [INFO] [Thread-167884] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T09:59:33.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T09:59:33.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T09:59:34.625 [DEBUG] [Thread-167884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T09:59:34.625 [DEBUG] [Thread-167884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T09:59:34.678 [DEBUG] [Thread-167884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T09:59:34.679 [DEBUG] [Thread-167884] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T09:59:34.688 [DEBUG] [Thread-167884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T09:59:34.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T09:59:34.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-04-11T09:59:34.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-04-11T09:59:34.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T09:59:34.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T09:59:34.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T09:59:34.729 [DEBUG] [Thread-167884] [transport.py] [_log()] EOF in transport thread
2026-04-11T09:59:37.259 [DEBUG] [Thread-167886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:59:52.315 [DEBUG] [Thread-167887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T09:59:58.002 [DEBUG] [Thread-167888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:00:04.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:00:04.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-04-11T10:00:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 9, 59, 54), 0.1499, 98.9488, 0.0, 24.6996, 13.5342, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:00:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 09:59:54
2026-04-11T10:00:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:00:06.542 [DEBUG] [Thread-167889] [transport.py] [_log()] starting thread (client mode): 0xae5a79a0
2026-04-11T10:00:06.543 [DEBUG] [Thread-167889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:00:06.563 [DEBUG] [Thread-167889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:00:06.563 [INFO] [Thread-167889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:00:06.566 [DEBUG] [Thread-167889] [transport.py] [_log()] client lang: <none>
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] server lang: <none>
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] kex follows: False
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] Compression: none
2026-04-11T10:00:06.567 [DEBUG] [Thread-167889] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:00:06.579 [DEBUG] [Thread-167889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:00:06.580 [DEBUG] [Thread-167889] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:00:06.580 [DEBUG] [Thread-167889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:00:06.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:00:06.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:00:06.626 [DEBUG] [Thread-167889] [transport.py] [_log()] userauth is OK
2026-04-11T10:00:06.626 [DEBUG] [Thread-167889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:00:06.626 [DEBUG] [Thread-167889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:00:06.626 [DEBUG] [Thread-167889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:00:06.627 [DEBUG] [Thread-167889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:00:06.647 [INFO] [Thread-167889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:00:06.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:00:07.352 [DEBUG] [Thread-167891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:10.748 [DEBUG] [Thread-167889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:00:10.748 [DEBUG] [Thread-167889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:00:10.749 [DEBUG] [Thread-167889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:00:10.789 [DEBUG] [Thread-167889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:00:10.790 [DEBUG] [Thread-167889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:00:10.793 [DEBUG] [Thread-167889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:00:10.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:00:10.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:00:10.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:00:10.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:00:10.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:00:10.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:00:10.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:00:10.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:00:10.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:00:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.333107 -999.00  +13.00  12.78     97  +12.50 1 3 1 3 1   888    0 0.42 -0.32 ----- 15.7 12.8 100.7 23.0 14.1 -1.1 14.1 -0.4 14.0 -0.5 14.2 -0.6
2026-04-11T10:00:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:00:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:00:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.333107
2026-04-11T10:00:10.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:00:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:00:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:00:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:00:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:00:10.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T09:59:54', tmtdew=0.1499, humidity=98.9488, cloud=0.0, wind=24.6996, temperature=13.5342, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:59:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:00:10.825 [DEBUG] [Thread-167889] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:00:10.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:00:10.921 [DEBUG] [Thread-167893] [transport.py] [_log()] starting thread (client mode): 0xae5a74f0
2026-04-11T10:00:10.921 [DEBUG] [Thread-167893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:00:10.936 [DEBUG] [Thread-167893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:00:10.936 [INFO] [Thread-167893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:00:10.944 [DEBUG] [Thread-167893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:00:10.944 [DEBUG] [Thread-167893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:00:10.944 [DEBUG] [Thread-167893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:00:10.944 [DEBUG] [Thread-167893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] client lang: <none>
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] server lang: <none>
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] kex follows: False
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] Compression: none
2026-04-11T10:00:10.945 [DEBUG] [Thread-167893] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:00:11.004 [DEBUG] [Thread-167893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:00:11.005 [DEBUG] [Thread-167893] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:00:11.006 [DEBUG] [Thread-167893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:00:11.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:00:11.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:00:11.065 [DEBUG] [Thread-167893] [transport.py] [_log()] userauth is OK
2026-04-11T10:00:11.065 [DEBUG] [Thread-167893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:00:11.066 [DEBUG] [Thread-167893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:00:11.066 [DEBUG] [Thread-167893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:00:11.066 [DEBUG] [Thread-167893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:00:11.086 [INFO] [Thread-167893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:00:11.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:00:11.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:00:11.928 [DEBUG] [Thread-167893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:00:11.928 [DEBUG] [Thread-167893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:00:11.979 [DEBUG] [Thread-167893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:00:11.979 [DEBUG] [Thread-167893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:00:11.995 [DEBUG] [Thread-167893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:00:12.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:00:12.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-04-11T10:00:12.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-04-11T10:00:12.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:00:12.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:00:12.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:00:12.048 [DEBUG] [Thread-167893] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:00:22.388 [DEBUG] [Thread-167895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:32.577 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:32.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:37.451 [DEBUG] [Thread-167896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:00:42.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:00:42.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-04-11T10:00:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 0, 30), 0.130085, 99.4412, 0.0, 21.3498, 13.1005, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:00:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:00:30
2026-04-11T10:00:43.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:00:43.908 [DEBUG] [Thread-167897] [transport.py] [_log()] starting thread (client mode): 0xb0f6cca0
2026-04-11T10:00:43.908 [DEBUG] [Thread-167897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:00:43.932 [DEBUG] [Thread-167897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:00:43.932 [INFO] [Thread-167897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] client lang: <none>
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] server lang: <none>
2026-04-11T10:00:43.933 [DEBUG] [Thread-167897] [transport.py] [_log()] kex follows: False
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] Compression: none
2026-04-11T10:00:43.934 [DEBUG] [Thread-167897] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:00:43.951 [DEBUG] [Thread-167897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:00:43.952 [DEBUG] [Thread-167897] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:00:43.953 [DEBUG] [Thread-167897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:00:43.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:00:43.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:00:43.955 [DEBUG] [Thread-167897] [transport.py] [_log()] userauth is OK
2026-04-11T10:00:43.955 [DEBUG] [Thread-167897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:00:43.956 [DEBUG] [Thread-167897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:00:43.956 [DEBUG] [Thread-167897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:00:43.956 [DEBUG] [Thread-167897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:00:43.980 [INFO] [Thread-167897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:00:43.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:00:44.777 [DEBUG] [Thread-167897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:00:44.778 [DEBUG] [Thread-167897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:00:44.778 [DEBUG] [Thread-167897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:00:44.820 [DEBUG] [Thread-167897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:00:44.821 [DEBUG] [Thread-167897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:00:44.826 [DEBUG] [Thread-167897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:00:44.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:00:44.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:00:44.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:00:44.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:00:44.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:00:44.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:00:44.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:00:44.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:00:44.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:00:44.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.333107 -999.00  +13.00  12.78     97  +12.50 1 3 1 3 1   888    0 0.42 -0.32 ----- 15.7 12.8 100.7 23.0 14.1 -1.1 14.1 -0.4 14.0 -0.5 14.2 -0.6
2026-04-11T10:00:44.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:00:44.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:00:44.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.333107
2026-04-11T10:00:44.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:00:44.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:00:44.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:00:44.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:00:44.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:00:44.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:00:30', tmtdew=0.130085, humidity=99.4412, cloud=0.0, wind=21.3498, temperature=13.1005, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T07:59:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:00:44.862 [DEBUG] [Thread-167897] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:00:44.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:00:44.956 [DEBUG] [Thread-167900] [transport.py] [_log()] starting thread (client mode): 0xae5142e0
2026-04-11T10:00:44.956 [DEBUG] [Thread-167900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:00:44.971 [DEBUG] [Thread-167900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:00:44.971 [INFO] [Thread-167900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] client lang: <none>
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] server lang: <none>
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] kex follows: False
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:00:44.979 [DEBUG] [Thread-167900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:00:44.980 [DEBUG] [Thread-167900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:00:44.980 [DEBUG] [Thread-167900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:00:44.980 [DEBUG] [Thread-167900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:00:44.980 [DEBUG] [Thread-167900] [transport.py] [_log()] Compression: none
2026-04-11T10:00:44.980 [DEBUG] [Thread-167900] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:00:45.035 [DEBUG] [Thread-167900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:00:45.036 [DEBUG] [Thread-167900] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:00:45.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:00:45.037 [DEBUG] [Thread-167900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:00:45.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:00:45.092 [DEBUG] [Thread-167900] [transport.py] [_log()] userauth is OK
2026-04-11T10:00:45.092 [DEBUG] [Thread-167900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:00:45.092 [DEBUG] [Thread-167900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:00:45.092 [DEBUG] [Thread-167900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:00:45.093 [DEBUG] [Thread-167900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:00:45.112 [INFO] [Thread-167900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:00:45.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:00:45.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:00:45.961 [DEBUG] [Thread-167900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:00:45.962 [DEBUG] [Thread-167900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:00:46.010 [DEBUG] [Thread-167900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:00:46.010 [DEBUG] [Thread-167900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:00:46.021 [DEBUG] [Thread-167900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:00:46.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:00:46.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-04-11T10:00:46.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-04-11T10:00:46.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:00:46.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:00:46.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:00:46.062 [DEBUG] [Thread-167900] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:00:52.488 [DEBUG] [Thread-167902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:00:58.065 [DEBUG] [Thread-167903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:07.552 [DEBUG] [Thread-167904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:01:16.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:01:16.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-04-11T10:01:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 1, 5), 0.12755, 99.4577, 0.0, 20.8382, 13.117, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:01:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:01:05
2026-04-11T10:01:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:01:17.891 [DEBUG] [Thread-167905] [transport.py] [_log()] starting thread (client mode): 0xae51b340
2026-04-11T10:01:17.891 [DEBUG] [Thread-167905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:01:17.912 [DEBUG] [Thread-167905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:01:17.912 [INFO] [Thread-167905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:01:17.915 [DEBUG] [Thread-167905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] client lang: <none>
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] server lang: <none>
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] kex follows: False
2026-04-11T10:01:17.916 [DEBUG] [Thread-167905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:01:17.917 [DEBUG] [Thread-167905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:01:17.917 [DEBUG] [Thread-167905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:01:17.917 [DEBUG] [Thread-167905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:01:17.917 [DEBUG] [Thread-167905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:01:17.917 [DEBUG] [Thread-167905] [transport.py] [_log()] Compression: none
2026-04-11T10:01:17.917 [DEBUG] [Thread-167905] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:01:17.934 [DEBUG] [Thread-167905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:01:17.935 [DEBUG] [Thread-167905] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:01:17.936 [DEBUG] [Thread-167905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:01:17.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:01:17.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:01:17.938 [DEBUG] [Thread-167905] [transport.py] [_log()] userauth is OK
2026-04-11T10:01:17.938 [DEBUG] [Thread-167905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:01:17.938 [DEBUG] [Thread-167905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:01:17.938 [DEBUG] [Thread-167905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:01:17.938 [DEBUG] [Thread-167905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:01:17.966 [INFO] [Thread-167905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:01:17.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:01:18.743 [DEBUG] [Thread-167905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:01:18.744 [DEBUG] [Thread-167905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:01:18.744 [DEBUG] [Thread-167905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:01:18.785 [DEBUG] [Thread-167905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:01:18.786 [DEBUG] [Thread-167905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:01:18.790 [DEBUG] [Thread-167905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:01:18.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:01:18.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:01:18.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:01:18.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:01:18.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:01:18.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:01:18.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:01:18.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:01:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:01:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.333802 -999.00  +13.00  10.94     97  +12.60 1 3 1 3 1   888    0 0.44 0.68 ----- 14.8 10.9 119.7 16.2 14.1 -0.9 14.1 -0.2 14.0 -0.3 14.3 -0.7
2026-04-11T10:01:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:01:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:01:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.333802
2026-04-11T10:01:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:01:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:01:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:01:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:01:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:01:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:01:05', tmtdew=0.12755, humidity=99.4577, cloud=0.0, wind=20.8382, temperature=13.117, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:00:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:01:18.820 [DEBUG] [Thread-167905] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:01:18.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:01:18.914 [DEBUG] [Thread-167908] [transport.py] [_log()] starting thread (client mode): 0xa79b5c00
2026-04-11T10:01:18.914 [DEBUG] [Thread-167908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:01:18.929 [DEBUG] [Thread-167908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:01:18.929 [INFO] [Thread-167908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:01:18.936 [DEBUG] [Thread-167908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] client lang: <none>
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] server lang: <none>
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] kex follows: False
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] Compression: none
2026-04-11T10:01:18.937 [DEBUG] [Thread-167908] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:01:18.996 [DEBUG] [Thread-167908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:01:18.996 [DEBUG] [Thread-167908] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:01:18.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:01:18.997 [DEBUG] [Thread-167908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:01:18.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:01:19.052 [DEBUG] [Thread-167908] [transport.py] [_log()] userauth is OK
2026-04-11T10:01:19.053 [DEBUG] [Thread-167908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:01:19.053 [DEBUG] [Thread-167908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:01:19.053 [DEBUG] [Thread-167908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:01:19.053 [DEBUG] [Thread-167908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:01:19.073 [INFO] [Thread-167908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:01:19.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:01:19.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:01:19.889 [DEBUG] [Thread-167908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:01:19.890 [DEBUG] [Thread-167908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:01:19.937 [DEBUG] [Thread-167908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:01:19.937 [DEBUG] [Thread-167908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:01:19.947 [DEBUG] [Thread-167908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:01:19.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:01: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')
2026-04-11T10:01:19.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:01:19.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:01:19.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:01:19.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:01:19.984 [DEBUG] [Thread-167908] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:01:22.589 [DEBUG] [Thread-167910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:32.717 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:32.718 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:37.643 [DEBUG] [Thread-167911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:50.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:01:50.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:01:50.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-04-11T10:01:51.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 1, 41), 0.15511, 98.9153, 0.0, 23.6765, 13.5671, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:01:51.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:01:41
2026-04-11T10:01:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:01:51.815 [DEBUG] [Thread-167912] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff70
2026-04-11T10:01:51.815 [DEBUG] [Thread-167912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:01:51.840 [DEBUG] [Thread-167912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:01:51.841 [INFO] [Thread-167912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] client lang: <none>
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] server lang: <none>
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] kex follows: False
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:01:51.844 [DEBUG] [Thread-167912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:01:51.845 [DEBUG] [Thread-167912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:01:51.845 [DEBUG] [Thread-167912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:01:51.845 [DEBUG] [Thread-167912] [transport.py] [_log()] Compression: none
2026-04-11T10:01:51.845 [DEBUG] [Thread-167912] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:01:51.863 [DEBUG] [Thread-167912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:01:51.863 [DEBUG] [Thread-167912] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:01:51.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:01:51.864 [DEBUG] [Thread-167912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:01:51.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:01:51.867 [DEBUG] [Thread-167912] [transport.py] [_log()] userauth is OK
2026-04-11T10:01:51.867 [DEBUG] [Thread-167912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:01:51.867 [DEBUG] [Thread-167912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:01:51.867 [DEBUG] [Thread-167912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:01:51.867 [DEBUG] [Thread-167912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:01:51.892 [INFO] [Thread-167912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:01:51.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:01:52.676 [DEBUG] [Thread-167912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:01:52.676 [DEBUG] [Thread-167912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:01:52.676 [DEBUG] [Thread-167912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:01:52.681 [DEBUG] [Thread-167914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:01:52.717 [DEBUG] [Thread-167912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:01:52.717 [DEBUG] [Thread-167912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:01:52.721 [DEBUG] [Thread-167912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:01:52.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:01:52.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:01:52.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:01:52.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:01:52.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:01:52.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:01:52.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:01:52.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:01:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:01:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.334149 -999.00  +13.00  10.64     97  +12.60 1 3 1 3 1   888    0 0.44 0.41 ----- 15.3 10.6 92.9 20.6 14.1 -0.9 14.1 -0.3 14.0 -0.2 14.2 -0.6
2026-04-11T10:01:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:01:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:01:52.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.334149
2026-04-11T10:01:52.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:01:52.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:01:52.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:01:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:01:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:01:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:01:41', tmtdew=0.15511, humidity=98.9153, cloud=0.0, wind=23.6765, temperature=13.5671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:01:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:01:52.747 [DEBUG] [Thread-167912] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:01:52.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:01:52.841 [DEBUG] [Thread-167916] [transport.py] [_log()] starting thread (client mode): 0xae5a4100
2026-04-11T10:01:52.841 [DEBUG] [Thread-167916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:01:52.857 [DEBUG] [Thread-167916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:01:52.857 [INFO] [Thread-167916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:01:52.865 [DEBUG] [Thread-167916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:01:52.865 [DEBUG] [Thread-167916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:01:52.865 [DEBUG] [Thread-167916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:01:52.865 [DEBUG] [Thread-167916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:52.865 [DEBUG] [Thread-167916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:01:52.865 [DEBUG] [Thread-167916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] client lang: <none>
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] server lang: <none>
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] kex follows: False
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:01:52.866 [DEBUG] [Thread-167916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:01:52.867 [DEBUG] [Thread-167916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:01:52.867 [DEBUG] [Thread-167916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:01:52.867 [DEBUG] [Thread-167916] [transport.py] [_log()] Compression: none
2026-04-11T10:01:52.867 [DEBUG] [Thread-167916] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:01:52.925 [DEBUG] [Thread-167916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:01:52.926 [DEBUG] [Thread-167916] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:01:52.927 [DEBUG] [Thread-167916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:01:52.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:01:52.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:01:52.984 [DEBUG] [Thread-167916] [transport.py] [_log()] userauth is OK
2026-04-11T10:01:52.985 [DEBUG] [Thread-167916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:01:52.985 [DEBUG] [Thread-167916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:01:52.985 [DEBUG] [Thread-167916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:01:52.985 [DEBUG] [Thread-167916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:01:53.007 [INFO] [Thread-167916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:01:53.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:01:53.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:01:53.863 [DEBUG] [Thread-167916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:01:53.863 [DEBUG] [Thread-167916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:01:53.912 [DEBUG] [Thread-167916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:01:53.912 [DEBUG] [Thread-167916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:01:53.930 [DEBUG] [Thread-167916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:01:53.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:01: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-04-11T10:01: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-04-11T10:01:53.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:01:53.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:01:53.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:01:53.968 [DEBUG] [Thread-167916] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:01:58.123 [DEBUG] [Thread-167918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:07.717 [DEBUG] [Thread-167919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:22.780 [DEBUG] [Thread-167920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:02:23.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:02:23.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:02:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 2, 16), 0.12756, 99.4575, 0.0, 24.1898, 13.0837, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:02:25.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:02:16
2026-04-11T10:02:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:02:25.783 [DEBUG] [Thread-167921] [transport.py] [_log()] starting thread (client mode): 0xae5f3f40
2026-04-11T10:02:25.783 [DEBUG] [Thread-167921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:02:25.803 [DEBUG] [Thread-167921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:02:25.803 [INFO] [Thread-167921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] client lang: <none>
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] server lang: <none>
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] kex follows: False
2026-04-11T10:02:25.806 [DEBUG] [Thread-167921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:02:25.807 [DEBUG] [Thread-167921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:02:25.807 [DEBUG] [Thread-167921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:02:25.807 [DEBUG] [Thread-167921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:02:25.807 [DEBUG] [Thread-167921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:02:25.807 [DEBUG] [Thread-167921] [transport.py] [_log()] Compression: none
2026-04-11T10:02:25.807 [DEBUG] [Thread-167921] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:02:25.825 [DEBUG] [Thread-167921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:02:25.825 [DEBUG] [Thread-167921] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:02:25.826 [DEBUG] [Thread-167921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:02:25.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:02:25.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:02:25.869 [DEBUG] [Thread-167921] [transport.py] [_log()] userauth is OK
2026-04-11T10:02:25.869 [DEBUG] [Thread-167921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:02:25.869 [DEBUG] [Thread-167921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:02:25.870 [DEBUG] [Thread-167921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:02:25.870 [DEBUG] [Thread-167921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:02:25.908 [INFO] [Thread-167921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:02:25.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:02:26.698 [DEBUG] [Thread-167921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:02:26.698 [DEBUG] [Thread-167921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:02:26.699 [DEBUG] [Thread-167921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:02:26.739 [DEBUG] [Thread-167921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:02:26.739 [DEBUG] [Thread-167921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:02:26.743 [DEBUG] [Thread-167921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:02:26.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:02:26.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:02:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:02:26.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:02:26.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:02:26.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:02:26.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:02:26.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:02:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:02:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.334496 -999.00  +13.00   6.78     97  +12.60 1 3 1 3 1   888    0 0.43 0.21 ----- 14.6 6.8 117.5 25.3 14.1 -0.7 14.1 -0.4 14.0 -0.5 14.2 -0.5
2026-04-11T10:02:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:02:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:02:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.334496
2026-04-11T10:02:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:02:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:02:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:02:26.772 [DEBUG] [Thread-167921] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:02:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:02:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:02:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:02:16', tmtdew=0.12756, humidity=99.4575, cloud=0.0, wind=24.1898, temperature=13.0837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:01:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:02:26.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:02:26.871 [DEBUG] [Thread-167924] [transport.py] [_log()] starting thread (client mode): 0xb0fce470
2026-04-11T10:02:26.872 [DEBUG] [Thread-167924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:02:26.887 [DEBUG] [Thread-167924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:02:26.887 [INFO] [Thread-167924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:02:26.894 [DEBUG] [Thread-167924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:02:26.895 [DEBUG] [Thread-167924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:02:26.895 [DEBUG] [Thread-167924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:02:26.895 [DEBUG] [Thread-167924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:02:26.895 [DEBUG] [Thread-167924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:02:26.895 [DEBUG] [Thread-167924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:02:26.895 [DEBUG] [Thread-167924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] client lang: <none>
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] server lang: <none>
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] kex follows: False
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:02:26.896 [DEBUG] [Thread-167924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:02:26.897 [DEBUG] [Thread-167924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:02:26.897 [DEBUG] [Thread-167924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:02:26.897 [DEBUG] [Thread-167924] [transport.py] [_log()] Compression: none
2026-04-11T10:02:26.897 [DEBUG] [Thread-167924] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:02:26.957 [DEBUG] [Thread-167924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:02:26.958 [DEBUG] [Thread-167924] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:02:26.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:02:26.959 [DEBUG] [Thread-167924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:02:26.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:02:27.016 [DEBUG] [Thread-167924] [transport.py] [_log()] userauth is OK
2026-04-11T10:02:27.016 [DEBUG] [Thread-167924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:02:27.016 [DEBUG] [Thread-167924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:02:27.016 [DEBUG] [Thread-167924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:02:27.016 [DEBUG] [Thread-167924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:02:27.035 [INFO] [Thread-167924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:02:27.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:02:27.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:02:27.889 [DEBUG] [Thread-167924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:02:27.889 [DEBUG] [Thread-167924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:02:27.937 [DEBUG] [Thread-167924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:02:27.937 [DEBUG] [Thread-167924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:02:27.945 [DEBUG] [Thread-167924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:02:27.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:02:27.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:02:27.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:02:27.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:02:27.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:02:27.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:02:27.978 [DEBUG] [Thread-167924] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:02:32.857 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:32.859 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:37.815 [DEBUG] [Thread-167926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:52.857 [DEBUG] [Thread-167927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:02:58.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:02:58.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-04-11T10:02:58.203 [DEBUG] [Thread-167928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:02:59.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 2, 51), 0.17054, 98.8156, 0.0, 26.393, 13.4675, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:02:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:02:51
2026-04-11T10:02:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:02:59.906 [DEBUG] [Thread-167929] [transport.py] [_log()] starting thread (client mode): 0xb0fcceb0
2026-04-11T10:02:59.906 [DEBUG] [Thread-167929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:02:59.926 [DEBUG] [Thread-167929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:02:59.926 [INFO] [Thread-167929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:02:59.929 [DEBUG] [Thread-167929] [transport.py] [_log()] client lang: <none>
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] server lang: <none>
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] kex follows: False
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] Compression: none
2026-04-11T10:02:59.930 [DEBUG] [Thread-167929] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:02:59.947 [DEBUG] [Thread-167929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:02:59.948 [DEBUG] [Thread-167929] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:02:59.948 [DEBUG] [Thread-167929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:02:59.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:02:59.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:02:59.950 [DEBUG] [Thread-167929] [transport.py] [_log()] userauth is OK
2026-04-11T10:02:59.951 [DEBUG] [Thread-167929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:02:59.951 [DEBUG] [Thread-167929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:02:59.951 [DEBUG] [Thread-167929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:02:59.951 [DEBUG] [Thread-167929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:02:59.969 [INFO] [Thread-167929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:02:59.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:03:00.716 [DEBUG] [Thread-167929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:03:00.716 [DEBUG] [Thread-167929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:03:00.716 [DEBUG] [Thread-167929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:03:00.757 [DEBUG] [Thread-167929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:03:00.757 [DEBUG] [Thread-167929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:03:00.760 [DEBUG] [Thread-167929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:03:00.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:03:00.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:03:00.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:03:00.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:03:00.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:03:00.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:03:00.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:03:00.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:03:00.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:03:00.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.334843 -999.00  +13.00   9.97     97  +12.60 1 3 1 3 1   888    0 0.42 -0.04 ----- 10.1 10.0 118.8 22.2 14.1 -0.7 14.1 -0.3 14.0 -0.4 14.2 -0.5
2026-04-11T10:03:00.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:03:00.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:03:00.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.334843
2026-04-11T10:03:00.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:03:00.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:03:00.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:03:00.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:03:00.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:03:00.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:02:51', tmtdew=0.17054, humidity=98.8156, cloud=0.0, wind=26.393, temperature=13.4675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:02:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:03:00.787 [DEBUG] [Thread-167929] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:03:00.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:03:00.881 [DEBUG] [Thread-167932] [transport.py] [_log()] starting thread (client mode): 0xa7952950
2026-04-11T10:03:00.881 [DEBUG] [Thread-167932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:03:00.895 [DEBUG] [Thread-167932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:03:00.895 [INFO] [Thread-167932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] client lang: <none>
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] server lang: <none>
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] kex follows: False
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] Compression: none
2026-04-11T10:03:00.903 [DEBUG] [Thread-167932] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:03:00.964 [DEBUG] [Thread-167932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:03:00.964 [DEBUG] [Thread-167932] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:03:00.965 [DEBUG] [Thread-167932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:03:00.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:03:00.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:03:01.019 [DEBUG] [Thread-167932] [transport.py] [_log()] userauth is OK
2026-04-11T10:03:01.019 [DEBUG] [Thread-167932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:03:01.020 [DEBUG] [Thread-167932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:03:01.020 [DEBUG] [Thread-167932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:03:01.020 [DEBUG] [Thread-167932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:03:01.039 [INFO] [Thread-167932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:03:01.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:03:01.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:03:01.903 [DEBUG] [Thread-167932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:03:01.904 [DEBUG] [Thread-167932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:03:01.952 [DEBUG] [Thread-167932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:03:01.952 [DEBUG] [Thread-167932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:03:01.961 [DEBUG] [Thread-167932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:03:01.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:03:01.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-04-11T10:03:01.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-04-11T10:03:01.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:03:01.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:03:01.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:03:01.999 [DEBUG] [Thread-167932] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:03:07.893 [DEBUG] [Thread-167934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:03:22.938 [DEBUG] [Thread-167935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:03:32.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:03:32.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:03:32.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-04-11T10:03:32.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:03:33.001 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:03:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 2, 51), 0.17054, 98.8156, 0.0, 26.393, 13.4675, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:03:33.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:02:51
2026-04-11T10:03:33.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:03:33.872 [DEBUG] [Thread-167936] [transport.py] [_log()] starting thread (client mode): 0xa79b5c30
2026-04-11T10:03:33.872 [DEBUG] [Thread-167936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:03:33.893 [DEBUG] [Thread-167936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:03:33.894 [INFO] [Thread-167936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:03:33.897 [DEBUG] [Thread-167936] [transport.py] [_log()] client lang: <none>
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] server lang: <none>
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] kex follows: False
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] Compression: none
2026-04-11T10:03:33.898 [DEBUG] [Thread-167936] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:03:33.917 [DEBUG] [Thread-167936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:03:33.918 [DEBUG] [Thread-167936] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:03:33.919 [DEBUG] [Thread-167936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:03:33.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:03:33.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:03:33.921 [DEBUG] [Thread-167936] [transport.py] [_log()] userauth is OK
2026-04-11T10:03:33.921 [DEBUG] [Thread-167936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:03:33.921 [DEBUG] [Thread-167936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:03:33.921 [DEBUG] [Thread-167936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:03:33.921 [DEBUG] [Thread-167936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:03:33.944 [INFO] [Thread-167936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:03:33.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:03:34.722 [DEBUG] [Thread-167936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:03:34.722 [DEBUG] [Thread-167936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:03:34.722 [DEBUG] [Thread-167936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:03:34.763 [DEBUG] [Thread-167936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:03:34.763 [DEBUG] [Thread-167936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:03:34.766 [DEBUG] [Thread-167936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:03:34.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:03:34.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:03:34.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:03:34.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:03:34.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:03:34.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:03:34.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:03:34.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:03:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:03:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.335190 -999.00  +13.00  16.06     97  +12.60 1 3 1 3 1   888    0 0.41 -0.30 ----- 19.9 16.1 80.2 21.6 14.1 -1.1 14.1 -0.3 14.0 -0.4 14.3 -0.7
2026-04-11T10:03:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:03:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:03:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.335190
2026-04-11T10:03:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:03:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:03:34.791 [DEBUG] [Thread-167936] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:03:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:03:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:03:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:03:34.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:02:51', tmtdew=0.17054, humidity=98.8156, cloud=0.0, wind=26.393, temperature=13.4675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:02:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:03:34.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:03:34.884 [DEBUG] [Thread-167939] [transport.py] [_log()] starting thread (client mode): 0xa7951630
2026-04-11T10:03:34.884 [DEBUG] [Thread-167939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:03:34.903 [DEBUG] [Thread-167939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:03:34.903 [INFO] [Thread-167939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] client lang: <none>
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] server lang: <none>
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] kex follows: False
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:03:34.911 [DEBUG] [Thread-167939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:03:34.912 [DEBUG] [Thread-167939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:03:34.912 [DEBUG] [Thread-167939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:03:34.912 [DEBUG] [Thread-167939] [transport.py] [_log()] Compression: none
2026-04-11T10:03:34.912 [DEBUG] [Thread-167939] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:03:34.967 [DEBUG] [Thread-167939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:03:34.967 [DEBUG] [Thread-167939] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:03:34.968 [DEBUG] [Thread-167939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:03:34.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:03:34.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:03:35.023 [DEBUG] [Thread-167939] [transport.py] [_log()] userauth is OK
2026-04-11T10:03:35.023 [DEBUG] [Thread-167939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:03:35.023 [DEBUG] [Thread-167939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:03:35.023 [DEBUG] [Thread-167939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:03:35.023 [DEBUG] [Thread-167939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:03:35.045 [INFO] [Thread-167939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:03:35.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:03:35.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:03:35.870 [DEBUG] [Thread-167939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:03:35.879 [DEBUG] [Thread-167939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:03:35.918 [DEBUG] [Thread-167939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:03:35.918 [DEBUG] [Thread-167939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:03:35.931 [DEBUG] [Thread-167939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:03:35.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:03:35.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:03:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:03:35.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:03:35.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:03:35.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:03:35.974 [DEBUG] [Thread-167939] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:03:37.974 [DEBUG] [Thread-167941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:03:53.024 [DEBUG] [Thread-167942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:03:58.265 [DEBUG] [Thread-167943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:05.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:04:05.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:04:06.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-04-11T10:04:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 3, 27), 0.135285, 99.4077, 0.0, 20.6082, 13.0837, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:04:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:03:27
2026-04-11T10:04:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:04:07.854 [DEBUG] [Thread-167944] [transport.py] [_log()] starting thread (client mode): 0xae5f3010
2026-04-11T10:04:07.854 [DEBUG] [Thread-167944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:04:07.876 [DEBUG] [Thread-167944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:04:07.876 [INFO] [Thread-167944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:04:07.886 [DEBUG] [Thread-167944] [transport.py] [_log()] client lang: <none>
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] server lang: <none>
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] kex follows: False
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] Compression: none
2026-04-11T10:04:07.887 [DEBUG] [Thread-167944] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:04:07.905 [DEBUG] [Thread-167944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:04:07.906 [DEBUG] [Thread-167944] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:04:07.906 [DEBUG] [Thread-167944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:04:07.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:04:07.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:04:07.908 [DEBUG] [Thread-167944] [transport.py] [_log()] userauth is OK
2026-04-11T10:04:07.908 [DEBUG] [Thread-167944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:04:07.909 [DEBUG] [Thread-167944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:04:07.909 [DEBUG] [Thread-167944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:04:07.909 [DEBUG] [Thread-167944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:04:07.944 [INFO] [Thread-167944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:04:07.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:04:08.063 [DEBUG] [Thread-167946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:08.725 [DEBUG] [Thread-167944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:04:08.725 [DEBUG] [Thread-167944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:04:08.725 [DEBUG] [Thread-167944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:04:08.766 [DEBUG] [Thread-167944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:04:08.766 [DEBUG] [Thread-167944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:04:08.770 [DEBUG] [Thread-167944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:04:08.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:04:08.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:04:08.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:04:08.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:04:08.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:04:08.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:04:08.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:04:08.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:04:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:04:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.335538 -999.00  +13.00  18.12     97  +12.50 1 3 1 3 1   888    0 0.42 -0.29 ----- 18.3 18.1 94.1 26.6 14.1 -0.9 14.1 -0.5 14.0 -0.5 14.2 -0.6
2026-04-11T10:04:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:04:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:04:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.335538
2026-04-11T10:04:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:04:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:04:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:04:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:04:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:04:08.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:03:27', tmtdew=0.135285, humidity=99.4077, cloud=0.0, wind=20.6082, temperature=13.0837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:03:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:04:08.797 [DEBUG] [Thread-167944] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:04:08.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:04:08.891 [DEBUG] [Thread-167948] [transport.py] [_log()] starting thread (client mode): 0xa795fee0
2026-04-11T10:04:08.891 [DEBUG] [Thread-167948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:04:08.905 [DEBUG] [Thread-167948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:04:08.906 [INFO] [Thread-167948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] client lang: <none>
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] server lang: <none>
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] kex follows: False
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:04:08.914 [DEBUG] [Thread-167948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:04:08.915 [DEBUG] [Thread-167948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:04:08.915 [DEBUG] [Thread-167948] [transport.py] [_log()] Compression: none
2026-04-11T10:04:08.915 [DEBUG] [Thread-167948] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:04:08.973 [DEBUG] [Thread-167948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:04:08.974 [DEBUG] [Thread-167948] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:04:08.974 [DEBUG] [Thread-167948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:04:08.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:04:08.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:04:09.032 [DEBUG] [Thread-167948] [transport.py] [_log()] userauth is OK
2026-04-11T10:04:09.032 [DEBUG] [Thread-167948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:04:09.032 [DEBUG] [Thread-167948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:04:09.032 [DEBUG] [Thread-167948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:04:09.032 [DEBUG] [Thread-167948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:04:09.052 [INFO] [Thread-167948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:04:09.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:04:09.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:04:09.873 [DEBUG] [Thread-167948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:04:09.874 [DEBUG] [Thread-167948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:04:09.922 [DEBUG] [Thread-167948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:04:09.922 [DEBUG] [Thread-167948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:04:09.932 [DEBUG] [Thread-167948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:04:09.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:04:09.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:04:09.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-04-11T10:04:09.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:04:09.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:04:09.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:04:09.968 [DEBUG] [Thread-167948] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:04:23.101 [DEBUG] [Thread-167950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:33.143 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:33.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:38.157 [DEBUG] [Thread-167951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:04:39.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:04:39.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-04-11T10:04:41.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 4, 2), 0.12757, 99.4574, 0.0, 21.1021, 13.0837, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:04:41.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:04:02
2026-04-11T10:04:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:04:41.856 [DEBUG] [Thread-167952] [transport.py] [_log()] starting thread (client mode): 0xae5f0160
2026-04-11T10:04:41.857 [DEBUG] [Thread-167952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:04:41.872 [DEBUG] [Thread-167952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:04:41.872 [INFO] [Thread-167952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:04:41.875 [DEBUG] [Thread-167952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:04:41.875 [DEBUG] [Thread-167952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:04:41.875 [DEBUG] [Thread-167952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] client lang: <none>
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] server lang: <none>
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] kex follows: False
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] Compression: none
2026-04-11T10:04:41.876 [DEBUG] [Thread-167952] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:04:41.893 [DEBUG] [Thread-167952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:04:41.894 [DEBUG] [Thread-167952] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:04:41.894 [DEBUG] [Thread-167952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:04:41.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:04:41.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:04:41.896 [DEBUG] [Thread-167952] [transport.py] [_log()] userauth is OK
2026-04-11T10:04:41.896 [DEBUG] [Thread-167952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:04:41.896 [DEBUG] [Thread-167952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:04:41.897 [DEBUG] [Thread-167952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:04:41.897 [DEBUG] [Thread-167952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:04:41.921 [INFO] [Thread-167952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:04:41.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:04:42.684 [DEBUG] [Thread-167952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:04:42.684 [DEBUG] [Thread-167952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:04:42.685 [DEBUG] [Thread-167952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:04:42.726 [DEBUG] [Thread-167952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:04:42.726 [DEBUG] [Thread-167952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:04:42.729 [DEBUG] [Thread-167952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:04:42.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:04:42.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:04:42.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:04:42.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:04:42.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:04:42.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:04:42.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:04:42.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:04:42.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:04:42.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.335885 -999.00  +13.00  12.38     97  +12.50 1 3 1 3 1   888    0 0.43 -0.04 ----- 13.6 12.4 110.0 25.0 14.1 -1.0 14.1 -0.3 14.0 -0.3 14.3 -0.6
2026-04-11T10:04:42.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:04:42.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:04:42.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.335885
2026-04-11T10:04:42.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:04:42.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:04:42.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:04:42.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:04:42.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:04:42.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:04:02', tmtdew=0.12757, humidity=99.4574, cloud=0.0, wind=21.1021, temperature=13.0837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:03:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:04:42.751 [DEBUG] [Thread-167952] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:04:42.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:04:42.845 [DEBUG] [Thread-167955] [transport.py] [_log()] starting thread (client mode): 0xae5f3d30
2026-04-11T10:04:42.845 [DEBUG] [Thread-167955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:04:42.860 [DEBUG] [Thread-167955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:04:42.860 [INFO] [Thread-167955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] client lang: <none>
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] server lang: <none>
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] kex follows: False
2026-04-11T10:04:42.868 [DEBUG] [Thread-167955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:04:42.869 [DEBUG] [Thread-167955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:04:42.869 [DEBUG] [Thread-167955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:04:42.869 [DEBUG] [Thread-167955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:04:42.869 [DEBUG] [Thread-167955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:04:42.869 [DEBUG] [Thread-167955] [transport.py] [_log()] Compression: none
2026-04-11T10:04:42.869 [DEBUG] [Thread-167955] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:04:42.928 [DEBUG] [Thread-167955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:04:42.928 [DEBUG] [Thread-167955] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:04:42.929 [DEBUG] [Thread-167955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:04:42.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:04:42.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:04:42.984 [DEBUG] [Thread-167955] [transport.py] [_log()] userauth is OK
2026-04-11T10:04:42.984 [DEBUG] [Thread-167955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:04:42.985 [DEBUG] [Thread-167955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:04:42.985 [DEBUG] [Thread-167955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:04:42.985 [DEBUG] [Thread-167955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:04:43.004 [INFO] [Thread-167955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:04:43.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:04:43.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:04:43.813 [DEBUG] [Thread-167955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:04:43.813 [DEBUG] [Thread-167955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:04:43.861 [DEBUG] [Thread-167955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:04:43.861 [DEBUG] [Thread-167955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:04:43.870 [DEBUG] [Thread-167955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:04:43.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:04:43.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-04-11T10:04:43.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-04-11T10:04:43.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:04:43.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:04:43.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:04:43.907 [DEBUG] [Thread-167955] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:04:53.194 [DEBUG] [Thread-167957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:04:58.325 [DEBUG] [Thread-167958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:08.244 [DEBUG] [Thread-167959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:13.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:05:13.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:05:13.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-04-11T10:05:15.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 4, 38), 0.16032, 98.8815, 0.0, 27.4514, 13.4672, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:05:15.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:04:38
2026-04-11T10:05:15.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:05:15.926 [DEBUG] [Thread-167960] [transport.py] [_log()] starting thread (client mode): 0xae5f0700
2026-04-11T10:05:15.927 [DEBUG] [Thread-167960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:05:15.948 [DEBUG] [Thread-167960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:05:15.948 [INFO] [Thread-167960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:05:15.951 [DEBUG] [Thread-167960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:05:15.951 [DEBUG] [Thread-167960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] client lang: <none>
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] server lang: <none>
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] kex follows: False
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:05:15.952 [DEBUG] [Thread-167960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:05:15.953 [DEBUG] [Thread-167960] [transport.py] [_log()] Compression: none
2026-04-11T10:05:15.953 [DEBUG] [Thread-167960] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:05:15.971 [DEBUG] [Thread-167960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:05:15.971 [DEBUG] [Thread-167960] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:05:15.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:05:15.972 [DEBUG] [Thread-167960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:05:15.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:05:15.975 [DEBUG] [Thread-167960] [transport.py] [_log()] userauth is OK
2026-04-11T10:05:15.975 [DEBUG] [Thread-167960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:05:15.975 [DEBUG] [Thread-167960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:05:15.975 [DEBUG] [Thread-167960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:05:15.975 [DEBUG] [Thread-167960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:05:15.992 [INFO] [Thread-167960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:05:15.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:05:22.682 [DEBUG] [Thread-167960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:05:22.683 [DEBUG] [Thread-167960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:05:22.683 [DEBUG] [Thread-167960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:05:22.725 [DEBUG] [Thread-167960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:05:22.725 [DEBUG] [Thread-167960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:05:22.730 [DEBUG] [Thread-167960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:05:22.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:05:22.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:05:22.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:05:22.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:05:22.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:05:22.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:05:22.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:05:22.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:05:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:05:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.336232 -999.00  +13.00  11.88     97  +12.50 1 3 1 3 1   888    0 0.43 0.21 ----- 16.4 11.9 49.6 18.7 14.1 -0.9 14.1 -0.2 14.0 -0.4 14.3 -0.7
2026-04-11T10:05:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:05:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:05:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.336232
2026-04-11T10:05:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:05:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:05:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:05:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:05:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:05:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:04:38', tmtdew=0.16032, humidity=98.8815, cloud=0.0, wind=27.4514, temperature=13.4672, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:04:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:05:22.848 [DEBUG] [Thread-167960] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:05:22.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:05:22.942 [DEBUG] [Thread-167963] [transport.py] [_log()] starting thread (client mode): 0xae5a74f0
2026-04-11T10:05:22.942 [DEBUG] [Thread-167963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:05:22.957 [DEBUG] [Thread-167963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:05:22.957 [INFO] [Thread-167963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:05:22.964 [DEBUG] [Thread-167963] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:05:22.964 [DEBUG] [Thread-167963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:05:22.964 [DEBUG] [Thread-167963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] client lang: <none>
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] server lang: <none>
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] kex follows: False
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] Compression: none
2026-04-11T10:05:22.965 [DEBUG] [Thread-167963] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:05:23.023 [DEBUG] [Thread-167963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:05:23.024 [DEBUG] [Thread-167963] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:05:23.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:05:23.025 [DEBUG] [Thread-167963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:05:23.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:05:23.080 [DEBUG] [Thread-167963] [transport.py] [_log()] userauth is OK
2026-04-11T10:05:23.080 [DEBUG] [Thread-167963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:05:23.080 [DEBUG] [Thread-167963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:05:23.080 [DEBUG] [Thread-167963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:05:23.080 [DEBUG] [Thread-167963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:05:23.099 [INFO] [Thread-167963] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:05:23.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:05:23.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:05:23.280 [DEBUG] [Thread-167965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:23.915 [DEBUG] [Thread-167963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:05:23.916 [DEBUG] [Thread-167963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:05:23.963 [DEBUG] [Thread-167963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:05:23.963 [DEBUG] [Thread-167963] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:05:23.973 [DEBUG] [Thread-167963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:05:23.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:05:23.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:05:23.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:05:24.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:05:24.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:05:24.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:05:24.010 [DEBUG] [Thread-167963] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:05:33.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:33.285 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:38.338 [DEBUG] [Thread-167966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:53.373 [DEBUG] [Thread-167967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:05:54.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:05:54.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:05:54.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:05:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 5, 13), 0.13016, 99.4408, 0.0, 21.244, 13.0336, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:05:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:05:13
2026-04-11T10:05:55.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:05:55.976 [DEBUG] [Thread-167968] [transport.py] [_log()] starting thread (client mode): 0xae5f3be0
2026-04-11T10:05:55.976 [DEBUG] [Thread-167968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:05:55.997 [DEBUG] [Thread-167968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:05:55.997 [INFO] [Thread-167968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:05:55.999 [DEBUG] [Thread-167968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:05:55.999 [DEBUG] [Thread-167968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:05:55.999 [DEBUG] [Thread-167968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] client lang: <none>
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] server lang: <none>
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] kex follows: False
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] Compression: none
2026-04-11T10:05:56.000 [DEBUG] [Thread-167968] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:05:56.020 [DEBUG] [Thread-167968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:05:56.021 [DEBUG] [Thread-167968] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:05:56.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:05:56.022 [DEBUG] [Thread-167968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:05:56.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:05:56.024 [DEBUG] [Thread-167968] [transport.py] [_log()] userauth is OK
2026-04-11T10:05:56.025 [DEBUG] [Thread-167968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:05:56.025 [DEBUG] [Thread-167968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:05:56.025 [DEBUG] [Thread-167968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:05:56.025 [DEBUG] [Thread-167968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:05:56.061 [INFO] [Thread-167968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:05:56.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:05:56.800 [DEBUG] [Thread-167968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:05:56.800 [DEBUG] [Thread-167968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:05:56.801 [DEBUG] [Thread-167968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:05:56.841 [DEBUG] [Thread-167968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:05:56.841 [DEBUG] [Thread-167968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:05:56.845 [DEBUG] [Thread-167968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:05:56.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:05:56.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:05:56.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:05:56.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:05:56.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:05:56.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:05:56.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:05:56.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:05:56.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:05:56.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.337274 -999.00  +12.90  16.52     97  +12.50 1 3 1 3 1   888    0 0.46 0.95 ----- 19.7 16.5 65.2 23.9 14.1 -1.1 14.2 -0.4 14.0 -0.5 14.2 -0.8
2026-04-11T10:05:56.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:05:56.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:05:56.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.337274
2026-04-11T10:05:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:05:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:05:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:05:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:05:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:05:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:05:13', tmtdew=0.13016, humidity=99.4408, cloud=0.0, wind=21.244, temperature=13.0336, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:05:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:05:56.870 [DEBUG] [Thread-167968] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:05:56.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:05:56.962 [DEBUG] [Thread-167971] [transport.py] [_log()] starting thread (client mode): 0xa795ed70
2026-04-11T10:05:56.962 [DEBUG] [Thread-167971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:05:56.977 [DEBUG] [Thread-167971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:05:56.978 [INFO] [Thread-167971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:05:56.988 [DEBUG] [Thread-167971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:05:56.988 [DEBUG] [Thread-167971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:05:56.988 [DEBUG] [Thread-167971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] client lang: <none>
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] server lang: <none>
2026-04-11T10:05:56.989 [DEBUG] [Thread-167971] [transport.py] [_log()] kex follows: False
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] Compression: none
2026-04-11T10:05:56.990 [DEBUG] [Thread-167971] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:05:57.048 [DEBUG] [Thread-167971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:05:57.048 [DEBUG] [Thread-167971] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:05:57.049 [DEBUG] [Thread-167971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:05:57.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:05:57.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:05:57.108 [DEBUG] [Thread-167971] [transport.py] [_log()] userauth is OK
2026-04-11T10:05:57.108 [DEBUG] [Thread-167971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:05:57.108 [DEBUG] [Thread-167971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:05:57.108 [DEBUG] [Thread-167971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:05:57.108 [DEBUG] [Thread-167971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:05:57.127 [INFO] [Thread-167971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:05:57.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:05:57.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:05:57.970 [DEBUG] [Thread-167971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:05:57.970 [DEBUG] [Thread-167971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:05:58.018 [DEBUG] [Thread-167971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:05:58.019 [DEBUG] [Thread-167971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:05:58.028 [DEBUG] [Thread-167971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:05:58.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:05:58.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-04-11T10:05:58.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-04-11T10:05:58.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:05:58.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:05:58.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:05:58.069 [DEBUG] [Thread-167971] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:05:58.392 [DEBUG] [Thread-167973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:08.409 [DEBUG] [Thread-167974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:23.465 [DEBUG] [Thread-167975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:28.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:06:28.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:06:28.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-04-11T10:06:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 5, 49), 0.14994, 98.9485, 0.0, 18.5609, 13.5008, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:06:29.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:05:49
2026-04-11T10:06:29.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:06:29.977 [DEBUG] [Thread-167976] [transport.py] [_log()] starting thread (client mode): 0xa795dd20
2026-04-11T10:06:29.977 [DEBUG] [Thread-167976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:06:29.998 [DEBUG] [Thread-167976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:06:29.998 [INFO] [Thread-167976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:06:30.001 [DEBUG] [Thread-167976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:06:30.001 [DEBUG] [Thread-167976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:06:30.001 [DEBUG] [Thread-167976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] client lang: <none>
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] server lang: <none>
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] kex follows: False
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:06:30.002 [DEBUG] [Thread-167976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:06:30.003 [DEBUG] [Thread-167976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:06:30.003 [DEBUG] [Thread-167976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:06:30.003 [DEBUG] [Thread-167976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:06:30.003 [DEBUG] [Thread-167976] [transport.py] [_log()] Compression: none
2026-04-11T10:06:30.003 [DEBUG] [Thread-167976] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:06:30.023 [DEBUG] [Thread-167976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:06:30.023 [DEBUG] [Thread-167976] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:06:30.024 [DEBUG] [Thread-167976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:06:30.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:06:30.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:06:30.027 [DEBUG] [Thread-167976] [transport.py] [_log()] userauth is OK
2026-04-11T10:06:30.027 [DEBUG] [Thread-167976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:06:30.027 [DEBUG] [Thread-167976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:06:30.027 [DEBUG] [Thread-167976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:06:30.027 [DEBUG] [Thread-167976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:06:30.052 [INFO] [Thread-167976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:06:30.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:06:30.871 [DEBUG] [Thread-167976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:06:30.872 [DEBUG] [Thread-167976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:06:30.872 [DEBUG] [Thread-167976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:06:30.913 [DEBUG] [Thread-167976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:06:30.913 [DEBUG] [Thread-167976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:06:30.916 [DEBUG] [Thread-167976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:06:30.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:06:30.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:06:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:06:30.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:06:30.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:06:30.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:06:30.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:06:30.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:06:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:06:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.337274 -999.00  +12.90  16.52     97  +12.50 1 3 1 3 1   888    0 0.46 0.95 ----- 19.7 16.5 65.2 23.9 14.1 -1.1 14.2 -0.4 14.0 -0.5 14.2 -0.8
2026-04-11T10:06:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:06:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:06:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.337274
2026-04-11T10:06:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:06:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:06:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:06:30.944 [DEBUG] [Thread-167976] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:06:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:06:30.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:06:30.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:05:49', tmtdew=0.14994, humidity=98.9485, cloud=0.0, wind=18.5609, temperature=13.5008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:05:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:06:31.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:06:31.037 [DEBUG] [Thread-167979] [transport.py] [_log()] starting thread (client mode): 0xae5f10f0
2026-04-11T10:06:31.037 [DEBUG] [Thread-167979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:06:31.052 [DEBUG] [Thread-167979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:06:31.052 [INFO] [Thread-167979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:06:31.059 [DEBUG] [Thread-167979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:06:31.060 [DEBUG] [Thread-167979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] client lang: <none>
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] server lang: <none>
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] kex follows: False
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] Compression: none
2026-04-11T10:06:31.061 [DEBUG] [Thread-167979] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:06:31.119 [DEBUG] [Thread-167979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:06:31.120 [DEBUG] [Thread-167979] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:06:31.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:06:31.121 [DEBUG] [Thread-167979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:06:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:06:31.175 [DEBUG] [Thread-167979] [transport.py] [_log()] userauth is OK
2026-04-11T10:06:31.176 [DEBUG] [Thread-167979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:06:31.176 [DEBUG] [Thread-167979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:06:31.176 [DEBUG] [Thread-167979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:06:31.176 [DEBUG] [Thread-167979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:06:31.195 [INFO] [Thread-167979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:06:31.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:06:31.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:06:32.075 [DEBUG] [Thread-167979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:06:32.075 [DEBUG] [Thread-167979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:06:32.127 [DEBUG] [Thread-167979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:06:32.127 [DEBUG] [Thread-167979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:06:32.139 [DEBUG] [Thread-167979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:06:32.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:06:32.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-04-11T10:06:32.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-04-11T10:06:32.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:06:32.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:06:32.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:06:32.186 [DEBUG] [Thread-167979] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:06:33.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:33.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:38.503 [DEBUG] [Thread-167981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:53.554 [DEBUG] [Thread-167982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:06:58.449 [DEBUG] [Thread-167983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:02.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:07:02.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:07:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:07:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 6, 24), 0.080105, 99.4411, 0.0, 18.3686, 13.0338, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:07:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:06:24
2026-04-11T10:07:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:07:04.038 [DEBUG] [Thread-167984] [transport.py] [_log()] starting thread (client mode): 0xa79b4040
2026-04-11T10:07:04.038 [DEBUG] [Thread-167984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:07:04.063 [DEBUG] [Thread-167984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:07:04.064 [INFO] [Thread-167984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] client lang: <none>
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] server lang: <none>
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] kex follows: False
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:07:04.067 [DEBUG] [Thread-167984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:07:04.068 [DEBUG] [Thread-167984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:07:04.068 [DEBUG] [Thread-167984] [transport.py] [_log()] Compression: none
2026-04-11T10:07:04.068 [DEBUG] [Thread-167984] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:07:04.090 [DEBUG] [Thread-167984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:07:04.090 [DEBUG] [Thread-167984] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:07:04.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:07:04.091 [DEBUG] [Thread-167984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:07:04.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:07:04.095 [DEBUG] [Thread-167984] [transport.py] [_log()] userauth is OK
2026-04-11T10:07:04.095 [DEBUG] [Thread-167984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:07:04.095 [DEBUG] [Thread-167984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:07:04.095 [DEBUG] [Thread-167984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:07:04.095 [DEBUG] [Thread-167984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:07:04.131 [INFO] [Thread-167984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:07:04.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:07:04.909 [DEBUG] [Thread-167984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:07:04.909 [DEBUG] [Thread-167984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:07:04.910 [DEBUG] [Thread-167984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:07:04.951 [DEBUG] [Thread-167984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:07:04.951 [DEBUG] [Thread-167984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:07:04.956 [DEBUG] [Thread-167984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:07:04.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:07:04.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:07:04.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:07:04.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:07:04.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:07:04.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:07:04.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:07:04.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:07:04.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:07:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.337968 -999.00  +13.00  15.56     97  +12.60 1 3 1 3 1   888    0 0.46 0.62 ----- 22.0 15.6 104.0 23.8 14.1 -1.1 14.2 -0.2 14.1 -0.5 14.3 -0.7
2026-04-11T10:07:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:07:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:07:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.337968
2026-04-11T10:07:04.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:07:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:07:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:07:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:07:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:07:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:06:24', tmtdew=0.080105, humidity=99.4411, cloud=0.0, wind=18.3686, temperature=13.0338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:06:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:07:04.990 [DEBUG] [Thread-167984] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:07:05.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:07:05.083 [DEBUG] [Thread-167987] [transport.py] [_log()] starting thread (client mode): 0xae5a4160
2026-04-11T10:07:05.083 [DEBUG] [Thread-167987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:07:05.098 [DEBUG] [Thread-167987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:07:05.098 [INFO] [Thread-167987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:07:05.105 [DEBUG] [Thread-167987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:07:05.106 [DEBUG] [Thread-167987] [transport.py] [_log()] client lang: <none>
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] server lang: <none>
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] kex follows: False
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] Compression: none
2026-04-11T10:07:05.107 [DEBUG] [Thread-167987] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:07:05.164 [DEBUG] [Thread-167987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:07:05.165 [DEBUG] [Thread-167987] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:07:05.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:07:05.167 [DEBUG] [Thread-167987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:07:05.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:07:05.223 [DEBUG] [Thread-167987] [transport.py] [_log()] userauth is OK
2026-04-11T10:07:05.224 [DEBUG] [Thread-167987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:07:05.224 [DEBUG] [Thread-167987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:07:05.224 [DEBUG] [Thread-167987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:07:05.224 [DEBUG] [Thread-167987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:07:05.246 [INFO] [Thread-167987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:07:05.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:07:05.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:07:06.081 [DEBUG] [Thread-167987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:07:06.081 [DEBUG] [Thread-167987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:07:06.129 [DEBUG] [Thread-167987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:07:06.129 [DEBUG] [Thread-167987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:07:06.137 [DEBUG] [Thread-167987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:07:06.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:07:06.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-04-11T10:07:06.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-04-11T10:07:06.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:07:06.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:07:06.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:07:06.174 [DEBUG] [Thread-167987] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:07:08.596 [DEBUG] [Thread-167989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:23.648 [DEBUG] [Thread-167990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:33.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:33.572 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:07:36.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:07:36.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-04-11T10:07:37.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 6, 24), 0.080105, 99.4411, 0.0, 14.7686, 13.0338, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:07:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:06:24
2026-04-11T10:07:37.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:07:38.092 [DEBUG] [Thread-167991] [transport.py] [_log()] starting thread (client mode): 0xa79b7af0
2026-04-11T10:07:38.092 [DEBUG] [Thread-167991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:07:38.111 [DEBUG] [Thread-167991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:07:38.111 [INFO] [Thread-167991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:07:38.112 [DEBUG] [Thread-167991] [transport.py] [_log()] client lang: <none>
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] server lang: <none>
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] kex follows: False
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] Compression: none
2026-04-11T10:07:38.113 [DEBUG] [Thread-167991] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:07:38.122 [DEBUG] [Thread-167991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:07:38.122 [DEBUG] [Thread-167991] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:07:38.123 [DEBUG] [Thread-167991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:07:38.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:07:38.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:07:38.125 [DEBUG] [Thread-167991] [transport.py] [_log()] userauth is OK
2026-04-11T10:07:38.125 [DEBUG] [Thread-167991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:07:38.126 [DEBUG] [Thread-167991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:07:38.126 [DEBUG] [Thread-167991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:07:38.126 [DEBUG] [Thread-167991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:07:38.147 [INFO] [Thread-167991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:07:38.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:07:38.683 [DEBUG] [Thread-167993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:38.773 [DEBUG] [Thread-167991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:07:38.773 [DEBUG] [Thread-167991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:07:38.773 [DEBUG] [Thread-167991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:07:38.814 [DEBUG] [Thread-167991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:07:38.814 [DEBUG] [Thread-167991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:07:38.817 [DEBUG] [Thread-167991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:07:38.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:07:38.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:07:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:07:38.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:07:38.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:07:38.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:07:38.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:07:38.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:07:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:07:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.338315 -999.00  +12.90  13.41     97  +12.50 1 3 1 3 1   888    0 0.45 0.61 ----- 12.4 13.4 88.1 23.1 14.1 -1.1 14.1 -0.4 14.1 -0.6 14.3 -0.8
2026-04-11T10:07:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:07:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:07:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.338315
2026-04-11T10:07:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:07:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:07:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:07:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:07:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:07:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:06:24', tmtdew=0.080105, humidity=99.4411, cloud=0.0, wind=14.7686, temperature=13.0338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:07:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:07:38.845 [DEBUG] [Thread-167991] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:07:38.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:07:38.935 [DEBUG] [Thread-167994] [transport.py] [_log()] starting thread (client mode): 0xae5a5150
2026-04-11T10:07:38.935 [DEBUG] [Thread-167994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:07:38.950 [DEBUG] [Thread-167994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:07:38.950 [INFO] [Thread-167994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] client lang: <none>
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] server lang: <none>
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] kex follows: False
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] Compression: none
2026-04-11T10:07:38.959 [DEBUG] [Thread-167994] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:07:39.015 [DEBUG] [Thread-167994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:07:39.016 [DEBUG] [Thread-167994] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:07:39.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:07:39.017 [DEBUG] [Thread-167994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:07:39.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:07:39.071 [DEBUG] [Thread-167994] [transport.py] [_log()] userauth is OK
2026-04-11T10:07:39.071 [DEBUG] [Thread-167994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:07:39.072 [DEBUG] [Thread-167994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:07:39.072 [DEBUG] [Thread-167994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:07:39.072 [DEBUG] [Thread-167994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:07:39.091 [INFO] [Thread-167994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:07:39.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:07:39.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:07:39.941 [DEBUG] [Thread-167994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:07:39.941 [DEBUG] [Thread-167994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:07:39.989 [DEBUG] [Thread-167994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:07:39.989 [DEBUG] [Thread-167994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:07:39.998 [DEBUG] [Thread-167994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:07:40.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:07:40.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-04-11T10:07:40.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-04-11T10:07:40.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:07:40.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:07:40.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:07:40.037 [DEBUG] [Thread-167994] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:07:53.719 [DEBUG] [Thread-167996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:07:58.501 [DEBUG] [Thread-167997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:08.769 [DEBUG] [Thread-167998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:10.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:08:10.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:08:10.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-04-11T10:08:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 7, 35), 0.1705, 98.8156, 0.0, 26.1814, 13.4012, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:08:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:07:35
2026-04-11T10:08:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:08:11.924 [DEBUG] [Thread-167999] [transport.py] [_log()] starting thread (client mode): 0xae519330
2026-04-11T10:08:11.924 [DEBUG] [Thread-167999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:08:11.937 [DEBUG] [Thread-167999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:08:11.937 [INFO] [Thread-167999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:08:11.938 [DEBUG] [Thread-167999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] client lang: <none>
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] server lang: <none>
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] kex follows: False
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] Compression: none
2026-04-11T10:08:11.939 [DEBUG] [Thread-167999] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:08:11.952 [DEBUG] [Thread-167999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:08:11.952 [DEBUG] [Thread-167999] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:08:11.953 [DEBUG] [Thread-167999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:08:11.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:08:11.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:08:11.954 [DEBUG] [Thread-167999] [transport.py] [_log()] userauth is OK
2026-04-11T10:08:11.954 [DEBUG] [Thread-167999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:08:11.954 [DEBUG] [Thread-167999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:08:11.954 [DEBUG] [Thread-167999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:08:11.954 [DEBUG] [Thread-167999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:08:11.979 [INFO] [Thread-167999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:08:11.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:08:12.736 [DEBUG] [Thread-167999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:08:12.737 [DEBUG] [Thread-167999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:08:12.737 [DEBUG] [Thread-167999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:08:12.779 [DEBUG] [Thread-167999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:08:12.779 [DEBUG] [Thread-167999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:08:12.782 [DEBUG] [Thread-167999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:08:12.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:08:12.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:08:12.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:08:12.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:08:12.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:08:12.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:08:12.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:08:12.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:08:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:08:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.338663 -999.00  +12.90  12.41     97  +12.50 1 3 1 3 1   888    0 0.45 0.53 ----- 15.8 12.4 85.6 23.3 14.1 -1.1 14.1 -0.4 14.0 -0.6 14.2 -0.7
2026-04-11T10:08:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:08:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:08:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.338663
2026-04-11T10:08:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:08:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:08:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:08:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:08:12.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:08:12.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:07:35', tmtdew=0.1705, humidity=98.8156, cloud=0.0, wind=26.1814, temperature=13.4012, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:07:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:08:12.809 [DEBUG] [Thread-167999] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:08:12.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:08:12.896 [DEBUG] [Thread-168002] [transport.py] [_log()] starting thread (client mode): 0xae51bca0
2026-04-11T10:08:12.896 [DEBUG] [Thread-168002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:08:12.910 [DEBUG] [Thread-168002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:08:12.910 [INFO] [Thread-168002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:08:12.918 [DEBUG] [Thread-168002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:12.919 [DEBUG] [Thread-168002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] client lang: <none>
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] server lang: <none>
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] kex follows: False
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] Compression: none
2026-04-11T10:08:12.920 [DEBUG] [Thread-168002] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:08:12.979 [DEBUG] [Thread-168002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:08:12.979 [DEBUG] [Thread-168002] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:08:12.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:08:12.980 [DEBUG] [Thread-168002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:08:12.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:08:13.038 [DEBUG] [Thread-168002] [transport.py] [_log()] userauth is OK
2026-04-11T10:08:13.039 [DEBUG] [Thread-168002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:08:13.039 [DEBUG] [Thread-168002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:08:13.039 [DEBUG] [Thread-168002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:08:13.039 [DEBUG] [Thread-168002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:08:13.057 [INFO] [Thread-168002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:08:13.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:08:13.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:08:13.886 [DEBUG] [Thread-168002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:08:13.886 [DEBUG] [Thread-168002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:08:13.934 [DEBUG] [Thread-168002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:08:13.935 [DEBUG] [Thread-168002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:08:13.944 [DEBUG] [Thread-168002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:08:13.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:08:13.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:08:13.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-04-11T10:08:13.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:08:13.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:08:13.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:08:13.981 [DEBUG] [Thread-168002] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:08:23.806 [DEBUG] [Thread-168004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:33.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:33.714 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:38.860 [DEBUG] [Thread-168005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:44.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:08:44.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:08:44.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-04-11T10:08:45.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 8, 11), 0.124875, 99.4748, 0.0, 19.885, 13.0342, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:08:45.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:08:11
2026-04-11T10:08:45.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:08:45.920 [DEBUG] [Thread-168006] [transport.py] [_log()] starting thread (client mode): 0xae518160
2026-04-11T10:08:45.920 [DEBUG] [Thread-168006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:08:45.930 [DEBUG] [Thread-168006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:08:45.930 [INFO] [Thread-168006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:08:45.931 [DEBUG] [Thread-168006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] client lang: <none>
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] server lang: <none>
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] kex follows: False
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] Compression: none
2026-04-11T10:08:45.932 [DEBUG] [Thread-168006] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:08:45.942 [DEBUG] [Thread-168006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:08:45.942 [DEBUG] [Thread-168006] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:08:45.943 [DEBUG] [Thread-168006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:08:45.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:08:45.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:08:45.944 [DEBUG] [Thread-168006] [transport.py] [_log()] userauth is OK
2026-04-11T10:08:45.944 [DEBUG] [Thread-168006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:08:45.944 [DEBUG] [Thread-168006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:08:45.944 [DEBUG] [Thread-168006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:08:45.944 [DEBUG] [Thread-168006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:08:45.966 [INFO] [Thread-168006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:08:45.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:08:46.628 [DEBUG] [Thread-168006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:08:46.628 [DEBUG] [Thread-168006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:08:46.628 [DEBUG] [Thread-168006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:08:46.669 [DEBUG] [Thread-168006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:08:46.669 [DEBUG] [Thread-168006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:08:46.673 [DEBUG] [Thread-168006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:08:46.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:08:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:08:46.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:08:46.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:08:46.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:08:46.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:08:46.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:08:46.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:08:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:08:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.338663 -999.00  +12.90  12.41     97  +12.50 1 3 1 3 1   888    0 0.45 0.53 ----- 15.8 12.4 85.6 23.3 14.1 -1.1 14.1 -0.4 14.0 -0.6 14.2 -0.7
2026-04-11T10:08:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:08:46.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:08:46.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.338663
2026-04-11T10:08:46.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:08:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:08:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:08:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:08:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:08:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:08:11', tmtdew=0.124875, humidity=99.4748, cloud=0.0, wind=19.885, temperature=13.0342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:07:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:08:46.699 [DEBUG] [Thread-168006] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:08: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-04-11T10:08:46.796 [DEBUG] [Thread-168009] [transport.py] [_log()] starting thread (client mode): 0xa79b5de0
2026-04-11T10:08:46.796 [DEBUG] [Thread-168009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:08:46.811 [DEBUG] [Thread-168009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:08:46.811 [INFO] [Thread-168009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] client lang: <none>
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] server lang: <none>
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] kex follows: False
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:08:46.819 [DEBUG] [Thread-168009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:08:46.820 [DEBUG] [Thread-168009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:08:46.820 [DEBUG] [Thread-168009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:08:46.820 [DEBUG] [Thread-168009] [transport.py] [_log()] Compression: none
2026-04-11T10:08:46.820 [DEBUG] [Thread-168009] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:08:46.882 [DEBUG] [Thread-168009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:08:46.882 [DEBUG] [Thread-168009] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:08:46.883 [DEBUG] [Thread-168009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:08:46.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:08:46.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:08:46.939 [DEBUG] [Thread-168009] [transport.py] [_log()] userauth is OK
2026-04-11T10:08:46.939 [DEBUG] [Thread-168009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:08:46.939 [DEBUG] [Thread-168009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:08:46.939 [DEBUG] [Thread-168009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:08:46.940 [DEBUG] [Thread-168009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:08:46.961 [INFO] [Thread-168009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:08:46.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:08:46.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:08:47.776 [DEBUG] [Thread-168009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:08:47.777 [DEBUG] [Thread-168009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:08:47.825 [DEBUG] [Thread-168009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:08:47.825 [DEBUG] [Thread-168009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:08:47.834 [DEBUG] [Thread-168009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:08:47.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:08:47.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-04-11T10:08:47.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:08:47.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:08:47.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:08:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:08:47.868 [DEBUG] [Thread-168009] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:08:53.897 [DEBUG] [Thread-168011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:08:58.553 [DEBUG] [Thread-168012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:08.951 [DEBUG] [Thread-168013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:17.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:09:17.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:09:17.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-04-11T10:09:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 8, 46), 0.14459, 98.9831, 0.0, 25.0524, 13.5349, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:09:19.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:08:46
2026-04-11T10:09:19.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:09:19.705 [DEBUG] [Thread-168014] [transport.py] [_log()] starting thread (client mode): 0xae5a47c0
2026-04-11T10:09:19.705 [DEBUG] [Thread-168014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:09:19.725 [DEBUG] [Thread-168014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:09:19.726 [INFO] [Thread-168014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:09:19.729 [DEBUG] [Thread-168014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:09:19.729 [DEBUG] [Thread-168014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:09:19.729 [DEBUG] [Thread-168014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:09:19.729 [DEBUG] [Thread-168014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:19.729 [DEBUG] [Thread-168014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] client lang: <none>
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] server lang: <none>
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] kex follows: False
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:09:19.730 [DEBUG] [Thread-168014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:09:19.731 [DEBUG] [Thread-168014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:09:19.731 [DEBUG] [Thread-168014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:09:19.731 [DEBUG] [Thread-168014] [transport.py] [_log()] Compression: none
2026-04-11T10:09:19.731 [DEBUG] [Thread-168014] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:09:19.751 [DEBUG] [Thread-168014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:09:19.751 [DEBUG] [Thread-168014] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:09:19.752 [DEBUG] [Thread-168014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:09:19.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:09:19.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:09:19.755 [DEBUG] [Thread-168014] [transport.py] [_log()] userauth is OK
2026-04-11T10:09:19.755 [DEBUG] [Thread-168014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:09:19.755 [DEBUG] [Thread-168014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:09:19.755 [DEBUG] [Thread-168014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:09:19.755 [DEBUG] [Thread-168014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:09:19.793 [INFO] [Thread-168014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:09:19.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:09:20.504 [DEBUG] [Thread-168014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:09:20.504 [DEBUG] [Thread-168014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:09:20.505 [DEBUG] [Thread-168014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:09:20.545 [DEBUG] [Thread-168014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:09:20.546 [DEBUG] [Thread-168014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:09:20.550 [DEBUG] [Thread-168014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:09:20.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:09:20.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:09:20.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:09:20.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:09:20.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:09:20.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:09:20.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:09:20.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:09:20.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:09:20.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.339704 -999.00  +12.90  14.04     97  +12.50 1 3 1 3 1   888    0 0.46 0.65 ----- 14.3 14.0 120.5 22.2 14.1 -0.9 14.2 -0.3 14.0 -0.6 14.2 -0.7
2026-04-11T10:09:20.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:09:20.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:09:20.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.339704
2026-04-11T10:09:20.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:09:20.579 [DEBUG] [Thread-168014] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:09:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:09:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:09:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:09:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:09:20.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:08:46', tmtdew=0.14459, humidity=98.9831, cloud=0.0, wind=25.0524, temperature=13.5349, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:09:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:09:20.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:09:20.673 [DEBUG] [Thread-168017] [transport.py] [_log()] starting thread (client mode): 0xae52c430
2026-04-11T10:09:20.673 [DEBUG] [Thread-168017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:09:20.688 [DEBUG] [Thread-168017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:09:20.689 [INFO] [Thread-168017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:09:20.696 [DEBUG] [Thread-168017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:09:20.697 [DEBUG] [Thread-168017] [transport.py] [_log()] client lang: <none>
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] server lang: <none>
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] kex follows: False
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:09:20.698 [DEBUG] [Thread-168017] [transport.py] [_log()] Compression: none
2026-04-11T10:09:20.699 [DEBUG] [Thread-168017] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:09:20.757 [DEBUG] [Thread-168017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:09:20.758 [DEBUG] [Thread-168017] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:09:20.758 [DEBUG] [Thread-168017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:09:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:09:20.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:09:20.812 [DEBUG] [Thread-168017] [transport.py] [_log()] userauth is OK
2026-04-11T10:09:20.813 [DEBUG] [Thread-168017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:09:20.813 [DEBUG] [Thread-168017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:09:20.813 [DEBUG] [Thread-168017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:09:20.813 [DEBUG] [Thread-168017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:09:20.832 [INFO] [Thread-168017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:09: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-04-11T10:09:20.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:09:21.683 [DEBUG] [Thread-168017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:09:21.683 [DEBUG] [Thread-168017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:09:21.732 [DEBUG] [Thread-168017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:09:21.732 [DEBUG] [Thread-168017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:09:21.742 [DEBUG] [Thread-168017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:09:21.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:09:21.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-04-11T10:09:21.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-04-11T10:09:21.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:09:21.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:09:21.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:09:21.781 [DEBUG] [Thread-168017] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:09:23.994 [DEBUG] [Thread-168019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:33.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:33.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:39.059 [DEBUG] [Thread-168020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:09:51.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:09:51.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-04-11T10:09:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 9, 22), 0.122285, 99.4916, 0.0, 18.5098, 13.1009, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:09:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:09:22
2026-04-11T10:09:53.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:09:53.576 [DEBUG] [Thread-168021] [transport.py] [_log()] starting thread (client mode): 0xae52f4c0
2026-04-11T10:09:53.576 [DEBUG] [Thread-168021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:09:53.598 [DEBUG] [Thread-168021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:09:53.598 [INFO] [Thread-168021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] client lang: <none>
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] server lang: <none>
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] kex follows: False
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:09:53.602 [DEBUG] [Thread-168021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:09:53.603 [DEBUG] [Thread-168021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:09:53.603 [DEBUG] [Thread-168021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:09:53.603 [DEBUG] [Thread-168021] [transport.py] [_log()] Compression: none
2026-04-11T10:09:53.603 [DEBUG] [Thread-168021] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:09:53.620 [DEBUG] [Thread-168021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:09:53.620 [DEBUG] [Thread-168021] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:09:53.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:09:53.621 [DEBUG] [Thread-168021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:09:53.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:09:53.623 [DEBUG] [Thread-168021] [transport.py] [_log()] userauth is OK
2026-04-11T10:09:53.624 [DEBUG] [Thread-168021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:09:53.624 [DEBUG] [Thread-168021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:09:53.624 [DEBUG] [Thread-168021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:09:53.624 [DEBUG] [Thread-168021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:09:53.648 [INFO] [Thread-168021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:09:53.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:09:54.098 [DEBUG] [Thread-168023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:09:54.376 [DEBUG] [Thread-168021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:09:54.376 [DEBUG] [Thread-168021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:09:54.377 [DEBUG] [Thread-168021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:09:54.417 [DEBUG] [Thread-168021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:09:54.417 [DEBUG] [Thread-168021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:09:54.421 [DEBUG] [Thread-168021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:09:54.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:09:54.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:09:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:09:54.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:09:54.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:09:54.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:09:54.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:09:54.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:09:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:09:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.340051 -999.00  +13.00  18.40     97  +12.60 1 3 1 3 1   888    0 0.45 0.51 ----- 12.8 18.4 64.6 22.6 14.1 -0.7 14.2 -0.3 14.1 -0.4 14.3 -0.6
2026-04-11T10:09:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:09:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:09:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.340051
2026-04-11T10:09:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:09:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:09:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:09:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:09:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:09:54.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:09:22', tmtdew=0.122285, humidity=99.4916, cloud=0.0, wind=18.5098, temperature=13.1009, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:09:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:09:54.450 [DEBUG] [Thread-168021] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:09:54.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:09:54.542 [DEBUG] [Thread-168025] [transport.py] [_log()] starting thread (client mode): 0xae5e6ad0
2026-04-11T10:09:54.543 [DEBUG] [Thread-168025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:09:54.558 [DEBUG] [Thread-168025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:09:54.559 [INFO] [Thread-168025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:09:54.566 [DEBUG] [Thread-168025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:09:54.566 [DEBUG] [Thread-168025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] client lang: <none>
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] server lang: <none>
2026-04-11T10:09:54.567 [DEBUG] [Thread-168025] [transport.py] [_log()] kex follows: False
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] Compression: none
2026-04-11T10:09:54.568 [DEBUG] [Thread-168025] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:09:54.632 [DEBUG] [Thread-168025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:09:54.633 [DEBUG] [Thread-168025] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:09:54.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:09:54.634 [DEBUG] [Thread-168025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:09:54.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:09:54.691 [DEBUG] [Thread-168025] [transport.py] [_log()] userauth is OK
2026-04-11T10:09:54.691 [DEBUG] [Thread-168025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:09:54.691 [DEBUG] [Thread-168025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:09:54.691 [DEBUG] [Thread-168025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:09:54.691 [DEBUG] [Thread-168025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:09:54.710 [INFO] [Thread-168025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:09:54.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:09:54.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:09:55.559 [DEBUG] [Thread-168025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:09:55.559 [DEBUG] [Thread-168025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:09:55.607 [DEBUG] [Thread-168025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:09:55.607 [DEBUG] [Thread-168025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:09:55.617 [DEBUG] [Thread-168025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:09:55.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:09:55.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:09:55.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:09:55.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:09:55.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:09:55.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:09:55.654 [DEBUG] [Thread-168025] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:09:58.616 [DEBUG] [Thread-168027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:09.137 [DEBUG] [Thread-168028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:24.174 [DEBUG] [Thread-168029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:25.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:10:25.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:10:25.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:10:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 9, 57), 0.069725, 99.5081, 0.0, 18.9148, 13.0675, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:10:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:09:57
2026-04-11T10:10:27.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:10:27.515 [DEBUG] [Thread-168030] [transport.py] [_log()] starting thread (client mode): 0xb0f57a60
2026-04-11T10:10:27.515 [DEBUG] [Thread-168030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:10:27.535 [DEBUG] [Thread-168030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:10:27.535 [INFO] [Thread-168030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] client lang: <none>
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] server lang: <none>
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] kex follows: False
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:10:27.538 [DEBUG] [Thread-168030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:10:27.539 [DEBUG] [Thread-168030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:10:27.539 [DEBUG] [Thread-168030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:10:27.539 [DEBUG] [Thread-168030] [transport.py] [_log()] Compression: none
2026-04-11T10:10:27.539 [DEBUG] [Thread-168030] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:10:27.555 [DEBUG] [Thread-168030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:10:27.555 [DEBUG] [Thread-168030] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:10:27.555 [DEBUG] [Thread-168030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:10:27.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:10:27.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:10:27.601 [DEBUG] [Thread-168030] [transport.py] [_log()] userauth is OK
2026-04-11T10:10:27.601 [DEBUG] [Thread-168030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:10:27.601 [DEBUG] [Thread-168030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:10:27.601 [DEBUG] [Thread-168030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:10:27.601 [DEBUG] [Thread-168030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:10:27.610 [INFO] [Thread-168030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:10:27.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:10:33.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:33.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:38.686 [DEBUG] [Thread-168030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:10:38.686 [DEBUG] [Thread-168030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:10:38.686 [DEBUG] [Thread-168030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:10:38.728 [DEBUG] [Thread-168030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:10:38.728 [DEBUG] [Thread-168030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:10:38.730 [DEBUG] [Thread-168030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:10:38.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:10:38.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:10:38.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:10:38.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:10:38.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:10:38.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:10:38.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.340051 -999.00  +13.00  18.40     97  +12.60 1 3 1 3 1   888    0 0.45 0.51 ----- 12.8 18.4 64.6 22.6 14.1 -0.7 14.2 -0.3 14.1 -0.4 14.3 -0.6
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.340051
2026-04-11T10:10:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:10:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:10:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:10:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:10:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:10:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:09:57', tmtdew=0.069725, humidity=99.5081, cloud=0.0, wind=18.9148, temperature=13.0675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:09:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:10:38.784 [DEBUG] [Thread-168030] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:10:38.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:10:38.865 [DEBUG] [Thread-168033] [transport.py] [_log()] starting thread (client mode): 0xae5f1e10
2026-04-11T10:10:38.865 [DEBUG] [Thread-168033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:10:38.879 [DEBUG] [Thread-168033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:10:38.879 [INFO] [Thread-168033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] client lang: <none>
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] server lang: <none>
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] kex follows: False
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] Compression: none
2026-04-11T10:10:38.887 [DEBUG] [Thread-168033] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:10:38.944 [DEBUG] [Thread-168033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:10:38.944 [DEBUG] [Thread-168033] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:10:38.944 [DEBUG] [Thread-168033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:10:38.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:10:38.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:10:39.001 [DEBUG] [Thread-168033] [transport.py] [_log()] userauth is OK
2026-04-11T10:10:39.001 [DEBUG] [Thread-168033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:10:39.001 [DEBUG] [Thread-168033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:10:39.001 [DEBUG] [Thread-168033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:10:39.001 [DEBUG] [Thread-168033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:10:39.016 [INFO] [Thread-168033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:10:39.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:10:39.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:10:39.199 [DEBUG] [Thread-168035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:39.856 [DEBUG] [Thread-168033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:10:39.856 [DEBUG] [Thread-168033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:10:39.905 [DEBUG] [Thread-168033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:10:39.905 [DEBUG] [Thread-168033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:10:39.913 [DEBUG] [Thread-168033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:10:39.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:10:39.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:10: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') -> 00000000
2026-04-11T10:10:39.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:10:39.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:10:39.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:10:39.956 [DEBUG] [Thread-168033] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:10:54.240 [DEBUG] [Thread-168036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:10:58.682 [DEBUG] [Thread-168037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:09.280 [DEBUG] [Thread-168038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:09.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:11:09.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:11:09.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-04-11T10:11:11.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 10, 32), 0.080035, 99.4415, 0.0, 19.0559, 13.0341, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:11:11.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:10:32
2026-04-11T10:11:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:11:11.892 [DEBUG] [Thread-168039] [transport.py] [_log()] starting thread (client mode): 0xae5173a0
2026-04-11T10:11:11.893 [DEBUG] [Thread-168039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:11:11.914 [DEBUG] [Thread-168039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:11:11.914 [INFO] [Thread-168039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:11:11.917 [DEBUG] [Thread-168039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:11:11.917 [DEBUG] [Thread-168039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] client lang: <none>
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] server lang: <none>
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] kex follows: False
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] Compression: none
2026-04-11T10:11:11.918 [DEBUG] [Thread-168039] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:11:11.935 [DEBUG] [Thread-168039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:11:11.936 [DEBUG] [Thread-168039] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:11:11.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:11:11.937 [DEBUG] [Thread-168039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:11:11.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:11:11.939 [DEBUG] [Thread-168039] [transport.py] [_log()] userauth is OK
2026-04-11T10:11:11.939 [DEBUG] [Thread-168039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:11:11.940 [DEBUG] [Thread-168039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:11:11.940 [DEBUG] [Thread-168039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:11:11.940 [DEBUG] [Thread-168039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:11:11.963 [INFO] [Thread-168039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:11:11.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:11:12.822 [DEBUG] [Thread-168039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:11:12.822 [DEBUG] [Thread-168039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:11:12.823 [DEBUG] [Thread-168039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:11:12.863 [DEBUG] [Thread-168039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:11:12.864 [DEBUG] [Thread-168039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:11:12.867 [DEBUG] [Thread-168039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:11:12.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:11:12.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:11:12.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:11:12.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:11:12.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:11:12.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:11:12.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:11:12.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:11:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:11:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.340399 -999.00  +13.00  22.00     97  +12.50 1 3 1 3 1   888    0 0.45 0.64 ----- 8.5 22.0 64.2 23.1 14.1 -0.7 14.1 -0.3 14.1 -0.4 14.3 -0.8
2026-04-11T10:11:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:11:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:11:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.340399
2026-04-11T10:11:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:11:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:11:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:11:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:11:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:11:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:10:32', tmtdew=0.080035, humidity=99.4415, cloud=0.0, wind=19.0559, temperature=13.0341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:10:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:11:12.894 [DEBUG] [Thread-168039] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:11:12.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:11:12.988 [DEBUG] [Thread-168042] [transport.py] [_log()] starting thread (client mode): 0xae52f220
2026-04-11T10:11:12.988 [DEBUG] [Thread-168042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:11:13.003 [DEBUG] [Thread-168042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:11:13.003 [INFO] [Thread-168042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] client lang: <none>
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] server lang: <none>
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] kex follows: False
2026-04-11T10:11:13.011 [DEBUG] [Thread-168042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:11:13.012 [DEBUG] [Thread-168042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:11:13.012 [DEBUG] [Thread-168042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:11:13.012 [DEBUG] [Thread-168042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:11:13.012 [DEBUG] [Thread-168042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:11:13.012 [DEBUG] [Thread-168042] [transport.py] [_log()] Compression: none
2026-04-11T10:11:13.012 [DEBUG] [Thread-168042] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:11:13.071 [DEBUG] [Thread-168042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:11:13.072 [DEBUG] [Thread-168042] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:11:13.073 [DEBUG] [Thread-168042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:11:13.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:11:13.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:11:13.127 [DEBUG] [Thread-168042] [transport.py] [_log()] userauth is OK
2026-04-11T10:11:13.128 [DEBUG] [Thread-168042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:11:13.128 [DEBUG] [Thread-168042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:11:13.128 [DEBUG] [Thread-168042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:11:13.128 [DEBUG] [Thread-168042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:11:13.147 [INFO] [Thread-168042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:11:13.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:11:13.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:11:13.970 [DEBUG] [Thread-168042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:11:13.970 [DEBUG] [Thread-168042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:11:14.018 [DEBUG] [Thread-168042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:11:14.018 [DEBUG] [Thread-168042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:11:14.027 [DEBUG] [Thread-168042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:11:14.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:11: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-04-11T10:11:14.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-04-11T10:11:14.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:11:14.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:11:14.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:11:14.064 [DEBUG] [Thread-168042] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:11:24.322 [DEBUG] [Thread-168044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:34.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:34.137 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:39.375 [DEBUG] [Thread-168045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:44.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:11:44.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:11:44.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-04-11T10:11:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 11, 8), 0.080075, 99.4413, 0.0, 19.3381, 13.0505, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:11:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:11:08
2026-04-11T10:11:45.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:11:45.979 [DEBUG] [Thread-168046] [transport.py] [_log()] starting thread (client mode): 0xae518e80
2026-04-11T10:11:45.980 [DEBUG] [Thread-168046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:11:46.000 [DEBUG] [Thread-168046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:11:46.000 [INFO] [Thread-168046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:11:46.003 [DEBUG] [Thread-168046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:11:46.003 [DEBUG] [Thread-168046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:11:46.003 [DEBUG] [Thread-168046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:11:46.003 [DEBUG] [Thread-168046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] client lang: <none>
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] server lang: <none>
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] kex follows: False
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:11:46.004 [DEBUG] [Thread-168046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:11:46.005 [DEBUG] [Thread-168046] [transport.py] [_log()] Compression: none
2026-04-11T10:11:46.005 [DEBUG] [Thread-168046] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:11:46.023 [DEBUG] [Thread-168046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:11:46.024 [DEBUG] [Thread-168046] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:11:46.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:11:46.025 [DEBUG] [Thread-168046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:11:46.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:11:46.069 [DEBUG] [Thread-168046] [transport.py] [_log()] userauth is OK
2026-04-11T10:11:46.070 [DEBUG] [Thread-168046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:11:46.070 [DEBUG] [Thread-168046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:11:46.070 [DEBUG] [Thread-168046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:11:46.070 [DEBUG] [Thread-168046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:11:46.108 [INFO] [Thread-168046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:11:46.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:11:46.923 [DEBUG] [Thread-168046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:11:46.923 [DEBUG] [Thread-168046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:11:46.924 [DEBUG] [Thread-168046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:11:46.964 [DEBUG] [Thread-168046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:11:46.964 [DEBUG] [Thread-168046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:11:46.967 [DEBUG] [Thread-168046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:11:46.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:11:46.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:11:46.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:11:46.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:11:46.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:11:46.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:11:46.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:11:46.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:11:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:11:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.341093 -999.00  +13.00  13.38     97  +12.50 1 3 1 3 1   888    0 0.49 1.84 ----- 15.4 13.4 82.2 20.2 14.1 -1.0 14.1 -0.4 14.0 -0.5 14.3 -0.7
2026-04-11T10:11:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:11:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:11:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.341093
2026-04-11T10:11:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:11:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:11:46.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:11:46.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:11:46.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:11:46.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:11:08', tmtdew=0.080075, humidity=99.4413, cloud=0.0, wind=19.3381, temperature=13.0505, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:11:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:11:46.987 [DEBUG] [Thread-168046] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:11:47.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:11:47.080 [DEBUG] [Thread-168049] [transport.py] [_log()] starting thread (client mode): 0xae5a4e80
2026-04-11T10:11:47.080 [DEBUG] [Thread-168049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:11:47.095 [DEBUG] [Thread-168049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:11:47.095 [INFO] [Thread-168049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:47.103 [DEBUG] [Thread-168049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] client lang: <none>
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] server lang: <none>
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] kex follows: False
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:11:47.104 [DEBUG] [Thread-168049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:11:47.105 [DEBUG] [Thread-168049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:11:47.105 [DEBUG] [Thread-168049] [transport.py] [_log()] Compression: none
2026-04-11T10:11:47.105 [DEBUG] [Thread-168049] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:11:47.161 [DEBUG] [Thread-168049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:11:47.161 [DEBUG] [Thread-168049] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:11:47.162 [DEBUG] [Thread-168049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:11:47.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:11:47.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:11:47.217 [DEBUG] [Thread-168049] [transport.py] [_log()] userauth is OK
2026-04-11T10:11:47.217 [DEBUG] [Thread-168049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:11:47.218 [DEBUG] [Thread-168049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:11:47.218 [DEBUG] [Thread-168049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:11:47.218 [DEBUG] [Thread-168049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:11:47.242 [INFO] [Thread-168049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:11:47.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:11:47.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:11:48.044 [DEBUG] [Thread-168049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:11:48.045 [DEBUG] [Thread-168049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:11:48.094 [DEBUG] [Thread-168049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:11:48.094 [DEBUG] [Thread-168049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:11:48.103 [DEBUG] [Thread-168049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:11:48.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:11:48.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-04-11T10:11:48.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-04-11T10:11:48.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:11:48.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:11:48.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:11:48.139 [DEBUG] [Thread-168049] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:11:54.412 [DEBUG] [Thread-168051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:11:58.742 [DEBUG] [Thread-168052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:09.474 [DEBUG] [Thread-168053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:12:18.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:12:18.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-04-11T10:12:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 11, 43), 0.13958, 99.0153, 0.0, 24.0998, 13.5011, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:12:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:11:43
2026-04-11T10:12:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:12:20.079 [DEBUG] [Thread-168054] [transport.py] [_log()] starting thread (client mode): 0xa7951c00
2026-04-11T10:12:20.079 [DEBUG] [Thread-168054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:12:20.100 [DEBUG] [Thread-168054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:12:20.100 [INFO] [Thread-168054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] client lang: <none>
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] server lang: <none>
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] kex follows: False
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:12:20.103 [DEBUG] [Thread-168054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:12:20.104 [DEBUG] [Thread-168054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:12:20.104 [DEBUG] [Thread-168054] [transport.py] [_log()] Compression: none
2026-04-11T10:12:20.104 [DEBUG] [Thread-168054] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:12:20.123 [DEBUG] [Thread-168054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:12:20.124 [DEBUG] [Thread-168054] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:12:20.124 [DEBUG] [Thread-168054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:12:20.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:12:20.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:12:20.126 [DEBUG] [Thread-168054] [transport.py] [_log()] userauth is OK
2026-04-11T10:12:20.127 [DEBUG] [Thread-168054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:12:20.127 [DEBUG] [Thread-168054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:12:20.127 [DEBUG] [Thread-168054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:12:20.127 [DEBUG] [Thread-168054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:12:20.151 [INFO] [Thread-168054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:12:20.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:12:20.891 [DEBUG] [Thread-168054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:12:20.891 [DEBUG] [Thread-168054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:12:20.892 [DEBUG] [Thread-168054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:12:20.933 [DEBUG] [Thread-168054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:12:20.934 [DEBUG] [Thread-168054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:12:20.936 [DEBUG] [Thread-168054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:12:20.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:12:20.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:12:20.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:12:20.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:12:20.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:12:20.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:12:20.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:12:20.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:12:20.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:12:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.341440 -999.00  +13.00   9.73     97  +12.50 1 3 1 3 1   888    0 0.50 1.95 ----- 12.1 9.7 102.3 17.1 14.1 -0.7 14.2 -0.3 14.1 -0.4 14.3 -0.7
2026-04-11T10:12:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:12:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:12:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.341440
2026-04-11T10:12:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:12:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:12:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:12:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:12:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:12:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:11:43', tmtdew=0.13958, humidity=99.0153, cloud=0.0, wind=24.0998, temperature=13.5011, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:11:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:12:20.961 [DEBUG] [Thread-168054] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:12:21.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:12:21.055 [DEBUG] [Thread-168057] [transport.py] [_log()] starting thread (client mode): 0xae5154e0
2026-04-11T10:12:21.055 [DEBUG] [Thread-168057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:12:21.070 [DEBUG] [Thread-168057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:12:21.070 [INFO] [Thread-168057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:12:21.078 [DEBUG] [Thread-168057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:12:21.078 [DEBUG] [Thread-168057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:12:21.078 [DEBUG] [Thread-168057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] client lang: <none>
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] server lang: <none>
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] kex follows: False
2026-04-11T10:12:21.079 [DEBUG] [Thread-168057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:12:21.080 [DEBUG] [Thread-168057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:12:21.080 [DEBUG] [Thread-168057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:12:21.080 [DEBUG] [Thread-168057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:12:21.080 [DEBUG] [Thread-168057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:12:21.080 [DEBUG] [Thread-168057] [transport.py] [_log()] Compression: none
2026-04-11T10:12:21.080 [DEBUG] [Thread-168057] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:12:21.140 [DEBUG] [Thread-168057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:12:21.140 [DEBUG] [Thread-168057] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:12:21.141 [DEBUG] [Thread-168057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:12:21.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:12:21.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:12:21.199 [DEBUG] [Thread-168057] [transport.py] [_log()] userauth is OK
2026-04-11T10:12:21.200 [DEBUG] [Thread-168057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:12:21.200 [DEBUG] [Thread-168057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:12:21.200 [DEBUG] [Thread-168057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:12:21.200 [DEBUG] [Thread-168057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:12:21.219 [INFO] [Thread-168057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:12:21.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:12:21.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:12:22.073 [DEBUG] [Thread-168057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:12:22.073 [DEBUG] [Thread-168057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:12:22.121 [DEBUG] [Thread-168057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:12:22.121 [DEBUG] [Thread-168057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:12:22.131 [DEBUG] [Thread-168057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:12:22.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:12:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:12:22.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:12:22.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:12:22.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:12:22.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:12:22.168 [DEBUG] [Thread-168057] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:12:24.510 [DEBUG] [Thread-168059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:34.277 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:34.279 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:39.567 [DEBUG] [Thread-168060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:12:52.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:12:52.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:12:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 12, 19), 0.074965, 99.4743, 0.0, 16.6568, 13.0504, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:12:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:12:19
2026-04-11T10:12:53.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:12:53.962 [DEBUG] [Thread-168061] [transport.py] [_log()] starting thread (client mode): 0xae5f0a30
2026-04-11T10:12:53.962 [DEBUG] [Thread-168061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:12:53.983 [DEBUG] [Thread-168061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:12:53.983 [INFO] [Thread-168061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:12:53.985 [DEBUG] [Thread-168061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:12:53.985 [DEBUG] [Thread-168061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:12:53.985 [DEBUG] [Thread-168061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:12:53.985 [DEBUG] [Thread-168061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:53.985 [DEBUG] [Thread-168061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] client lang: <none>
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] server lang: <none>
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] kex follows: False
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:12:53.986 [DEBUG] [Thread-168061] [transport.py] [_log()] Compression: none
2026-04-11T10:12:53.987 [DEBUG] [Thread-168061] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:12:53.999 [DEBUG] [Thread-168061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:12:54.000 [DEBUG] [Thread-168061] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:12:54.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:12:54.001 [DEBUG] [Thread-168061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:12:54.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:12:54.003 [DEBUG] [Thread-168061] [transport.py] [_log()] userauth is OK
2026-04-11T10:12:54.003 [DEBUG] [Thread-168061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:12:54.003 [DEBUG] [Thread-168061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:12:54.003 [DEBUG] [Thread-168061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:12:54.003 [DEBUG] [Thread-168061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:12:54.027 [INFO] [Thread-168061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:12:54.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:12:54.604 [DEBUG] [Thread-168063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:12:54.784 [DEBUG] [Thread-168061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:12:54.784 [DEBUG] [Thread-168061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:12:54.785 [DEBUG] [Thread-168061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:12:54.825 [DEBUG] [Thread-168061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:12:54.825 [DEBUG] [Thread-168061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:12:54.828 [DEBUG] [Thread-168061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:12:54.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:12:54.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:12:54.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:12:54.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:12:54.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:12:54.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:12:54.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:12:54.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:12:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:12:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.341787 -999.00  +13.00  15.00     97  +12.60 1 3 1 3 1   888    0 0.48 1.80 ----- 12.2 15.0 119.5 18.0 14.1 -1.0 14.1 -0.5 14.0 -0.3 14.3 -0.7
2026-04-11T10:12:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:12:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:12:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.341787
2026-04-11T10:12:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:12:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:12:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:12:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:12:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:12:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:12:19', tmtdew=0.074965, humidity=99.4743, cloud=0.0, wind=16.6568, temperature=13.0504, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:12:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:12:54.851 [DEBUG] [Thread-168061] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:12:54.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:12:54.943 [DEBUG] [Thread-168065] [transport.py] [_log()] starting thread (client mode): 0xae52fbe0
2026-04-11T10:12:54.943 [DEBUG] [Thread-168065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:12:54.958 [DEBUG] [Thread-168065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:12:54.959 [INFO] [Thread-168065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:12:54.966 [DEBUG] [Thread-168065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:12:54.966 [DEBUG] [Thread-168065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] client lang: <none>
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] server lang: <none>
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] kex follows: False
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] Compression: none
2026-04-11T10:12:54.967 [DEBUG] [Thread-168065] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:12:55.026 [DEBUG] [Thread-168065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:12:55.027 [DEBUG] [Thread-168065] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:12:55.027 [DEBUG] [Thread-168065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:12:55.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:12:55.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:12:55.084 [DEBUG] [Thread-168065] [transport.py] [_log()] userauth is OK
2026-04-11T10:12:55.084 [DEBUG] [Thread-168065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:12:55.084 [DEBUG] [Thread-168065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:12:55.084 [DEBUG] [Thread-168065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:12:55.084 [DEBUG] [Thread-168065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:12:55.103 [INFO] [Thread-168065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:12:55.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:12:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:12:55.957 [DEBUG] [Thread-168065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:12:55.957 [DEBUG] [Thread-168065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:12:56.005 [DEBUG] [Thread-168065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:12:56.005 [DEBUG] [Thread-168065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:12:56.014 [DEBUG] [Thread-168065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:12:56.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:12:56.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-04-11T10:12:56.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-04-11T10:12:56.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:12:56.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:12:56.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:12:56.051 [DEBUG] [Thread-168065] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:12:58.797 [DEBUG] [Thread-168067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:09.639 [DEBUG] [Thread-168068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:24.689 [DEBUG] [Thread-168069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:26.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:13:26.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:13:26.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-04-11T10:13:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 12, 54), 0.14993, 98.9486, 0.0, 21.595, 13.534, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:13:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:12:54
2026-04-11T10:13:27.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:13:27.971 [DEBUG] [Thread-168070] [transport.py] [_log()] starting thread (client mode): 0xae51bfa0
2026-04-11T10:13:27.971 [DEBUG] [Thread-168070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:13:27.993 [DEBUG] [Thread-168070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:13:27.993 [INFO] [Thread-168070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] client lang: <none>
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] server lang: <none>
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] kex follows: False
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] Compression: none
2026-04-11T10:13:27.995 [DEBUG] [Thread-168070] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:13:28.004 [DEBUG] [Thread-168070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:13:28.005 [DEBUG] [Thread-168070] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:13:28.005 [DEBUG] [Thread-168070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:13:28.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:13:28.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:13:28.007 [DEBUG] [Thread-168070] [transport.py] [_log()] userauth is OK
2026-04-11T10:13:28.008 [DEBUG] [Thread-168070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:13:28.008 [DEBUG] [Thread-168070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:13:28.008 [DEBUG] [Thread-168070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:13:28.008 [DEBUG] [Thread-168070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:13:28.027 [INFO] [Thread-168070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:13:28.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:13:28.725 [DEBUG] [Thread-168070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:13:28.725 [DEBUG] [Thread-168070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:13:28.725 [DEBUG] [Thread-168070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:13:28.767 [DEBUG] [Thread-168070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:13:28.767 [DEBUG] [Thread-168070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:13:28.771 [DEBUG] [Thread-168070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:13:28.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:13:28.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:13:28.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:13:28.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:13:28.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:13:28.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:13:28.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:13:28.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:13:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:13:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.342135 -999.00  +13.00  14.41     97  +12.50 1 3 1 3 1   888    0 0.50 2.06 ----- 14.6 14.4 118.8 20.4 14.2 -1.5 14.1 -0.4 14.0 -0.5 14.3 -0.9
2026-04-11T10:13:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:13:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:13:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.342135
2026-04-11T10:13:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:13:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:13:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:13:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:13:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:13:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:12:54', tmtdew=0.14993, humidity=98.9486, cloud=0.0, wind=21.595, temperature=13.534, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:12:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:13:28.805 [DEBUG] [Thread-168070] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:13:28.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:13:28.892 [DEBUG] [Thread-168073] [transport.py] [_log()] starting thread (client mode): 0xa7952260
2026-04-11T10:13:28.892 [DEBUG] [Thread-168073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:13:28.907 [DEBUG] [Thread-168073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:13:28.907 [INFO] [Thread-168073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] client lang: <none>
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] server lang: <none>
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] kex follows: False
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:13:28.915 [DEBUG] [Thread-168073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:13:28.916 [DEBUG] [Thread-168073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:13:28.916 [DEBUG] [Thread-168073] [transport.py] [_log()] Compression: none
2026-04-11T10:13:28.916 [DEBUG] [Thread-168073] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:13:28.973 [DEBUG] [Thread-168073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:13:28.974 [DEBUG] [Thread-168073] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:13:28.975 [DEBUG] [Thread-168073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:13:28.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:13:28.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:13:29.034 [DEBUG] [Thread-168073] [transport.py] [_log()] userauth is OK
2026-04-11T10:13:29.034 [DEBUG] [Thread-168073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:13:29.034 [DEBUG] [Thread-168073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:13:29.034 [DEBUG] [Thread-168073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:13:29.034 [DEBUG] [Thread-168073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:13:29.053 [INFO] [Thread-168073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:13: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-04-11T10:13:29.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:13:29.899 [DEBUG] [Thread-168073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:13:29.900 [DEBUG] [Thread-168073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:13:29.949 [DEBUG] [Thread-168073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:13:29.949 [DEBUG] [Thread-168073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:13:29.958 [DEBUG] [Thread-168073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:13:29.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:13:29.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-04-11T10:13: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-04-11T10:13:29.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:13:29.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:13:29.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:13:30.000 [DEBUG] [Thread-168073] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:13:34.420 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:34.422 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:39.726 [DEBUG] [Thread-168075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:54.786 [DEBUG] [Thread-168076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:58.829 [DEBUG] [Thread-168077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:13:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:13:59.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:14:00.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-04-11T10:14:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 13, 29), 0.119845, 99.5073, 0.0, 18.7913, 13.1003, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:14:01.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:13:29
2026-04-11T10:14:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:14:01.879 [DEBUG] [Thread-168078] [transport.py] [_log()] starting thread (client mode): 0xa7953ac0
2026-04-11T10:14:01.879 [DEBUG] [Thread-168078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:14:01.899 [DEBUG] [Thread-168078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:14:01.900 [INFO] [Thread-168078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] client lang: <none>
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] server lang: <none>
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] kex follows: False
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] Compression: none
2026-04-11T10:14:01.903 [DEBUG] [Thread-168078] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:14:01.922 [DEBUG] [Thread-168078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:14:01.922 [DEBUG] [Thread-168078] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:14:01.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:14:01.923 [DEBUG] [Thread-168078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:14:01.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:14:01.965 [DEBUG] [Thread-168078] [transport.py] [_log()] userauth is OK
2026-04-11T10:14:01.965 [DEBUG] [Thread-168078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:14:01.965 [DEBUG] [Thread-168078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:14:01.965 [DEBUG] [Thread-168078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:14:01.966 [DEBUG] [Thread-168078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:14:01.991 [INFO] [Thread-168078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:14:01.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:14:02.780 [DEBUG] [Thread-168078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:14:02.780 [DEBUG] [Thread-168078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:14:02.780 [DEBUG] [Thread-168078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:14:02.821 [DEBUG] [Thread-168078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:14:02.821 [DEBUG] [Thread-168078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:14:02.825 [DEBUG] [Thread-168078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:14:02.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:14:02.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:14:02.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:14:02.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:14:02.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:14:02.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:14:02.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:14:02.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:14:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:14:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.342482 -999.00  +12.90  13.75     97  +12.50 1 3 1 3 1   888    0 0.50 1.81 ----- 13.6 13.8 104.7 19.1 14.1 -1.6 14.1 -0.5 13.9 -0.5 14.2 -0.8
2026-04-11T10:14:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:14:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:14:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.342482
2026-04-11T10:14:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:14:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:14:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:14:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:14:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:14:02.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:13:29', tmtdew=0.119845, humidity=99.5073, cloud=0.0, wind=18.7913, temperature=13.1003, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:13:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:14:02.853 [DEBUG] [Thread-168078] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:14:02.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:14:02.947 [DEBUG] [Thread-168081] [transport.py] [_log()] starting thread (client mode): 0xa7953460
2026-04-11T10:14:02.947 [DEBUG] [Thread-168081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:14:02.963 [DEBUG] [Thread-168081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:14:02.964 [INFO] [Thread-168081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:14:02.974 [DEBUG] [Thread-168081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:14:02.974 [DEBUG] [Thread-168081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:14:02.974 [DEBUG] [Thread-168081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:14:02.974 [DEBUG] [Thread-168081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] client lang: <none>
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] server lang: <none>
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] kex follows: False
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] Compression: none
2026-04-11T10:14:02.975 [DEBUG] [Thread-168081] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:14:03.032 [DEBUG] [Thread-168081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:14:03.032 [DEBUG] [Thread-168081] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:14:03.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:14:03.034 [DEBUG] [Thread-168081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:14:03.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:14:03.091 [DEBUG] [Thread-168081] [transport.py] [_log()] userauth is OK
2026-04-11T10:14:03.092 [DEBUG] [Thread-168081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:14:03.092 [DEBUG] [Thread-168081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:14:03.092 [DEBUG] [Thread-168081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:14:03.092 [DEBUG] [Thread-168081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:14:03.112 [INFO] [Thread-168081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:14:03.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:14:03.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:14:03.965 [DEBUG] [Thread-168081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:14:03.965 [DEBUG] [Thread-168081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:14:04.014 [DEBUG] [Thread-168081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:14:04.014 [DEBUG] [Thread-168081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:14:04.027 [DEBUG] [Thread-168081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:14:04.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:14:04.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:14:04.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-04-11T10:14:04.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:14:04.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:14:04.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:14:04.064 [DEBUG] [Thread-168081] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:14:09.819 [DEBUG] [Thread-168083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:14:24.872 [DEBUG] [Thread-168084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:14:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:14:34.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:14:34.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-04-11T10:14:34.561 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:14:34.562 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:14:35.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 14, 5), 0.12498, 99.4742, 0.0, 19.2146, 13.0838, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:14:35.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:14:05
2026-04-11T10:14:35.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:14:35.901 [DEBUG] [Thread-168085] [transport.py] [_log()] starting thread (client mode): 0xae51b8b0
2026-04-11T10:14:35.901 [DEBUG] [Thread-168085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:14:35.921 [DEBUG] [Thread-168085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:14:35.921 [INFO] [Thread-168085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:14:35.924 [DEBUG] [Thread-168085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] client lang: <none>
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] server lang: <none>
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] kex follows: False
2026-04-11T10:14:35.925 [DEBUG] [Thread-168085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:14:35.926 [DEBUG] [Thread-168085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:14:35.926 [DEBUG] [Thread-168085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:14:35.926 [DEBUG] [Thread-168085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:14:35.926 [DEBUG] [Thread-168085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:14:35.926 [DEBUG] [Thread-168085] [transport.py] [_log()] Compression: none
2026-04-11T10:14:35.926 [DEBUG] [Thread-168085] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:14:35.944 [DEBUG] [Thread-168085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:14:35.945 [DEBUG] [Thread-168085] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:14:35.945 [DEBUG] [Thread-168085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:14:35.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:14:35.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:14:35.947 [DEBUG] [Thread-168085] [transport.py] [_log()] userauth is OK
2026-04-11T10:14:35.948 [DEBUG] [Thread-168085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:14:35.948 [DEBUG] [Thread-168085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:14:35.948 [DEBUG] [Thread-168085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:14:35.948 [DEBUG] [Thread-168085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:14:35.979 [INFO] [Thread-168085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:14:35.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:14:36.744 [DEBUG] [Thread-168085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:14:36.744 [DEBUG] [Thread-168085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:14:36.745 [DEBUG] [Thread-168085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:14:36.785 [DEBUG] [Thread-168085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:14:36.785 [DEBUG] [Thread-168085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:14:36.789 [DEBUG] [Thread-168085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:14:36.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:14:36.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:14:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:14:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:14:36.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:14:36.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:14:36.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:14:36.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:14:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:14:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.342829 -999.00  +12.90  14.60     97  +12.50 1 3 1 3 1   888    0 0.48 1.47 ----- 9.3 14.6 65.5 20.8 14.0 -1.3 14.1 -0.4 14.0 -0.4 14.2 -0.6
2026-04-11T10:14:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:14:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:14:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.342829
2026-04-11T10:14:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:14:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:14:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:14:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:14:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:14:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:14:05', tmtdew=0.12498, humidity=99.4742, cloud=0.0, wind=19.2146, temperature=13.0838, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:13:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:14:36.808 [DEBUG] [Thread-168085] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:14:36.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:14:36.902 [DEBUG] [Thread-168088] [transport.py] [_log()] starting thread (client mode): 0xae52d900
2026-04-11T10:14:36.902 [DEBUG] [Thread-168088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:14:36.916 [DEBUG] [Thread-168088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:14:36.916 [INFO] [Thread-168088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:14:36.924 [DEBUG] [Thread-168088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:14:36.925 [DEBUG] [Thread-168088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] client lang: <none>
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] server lang: <none>
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] kex follows: False
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:14:36.926 [DEBUG] [Thread-168088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:14:36.927 [DEBUG] [Thread-168088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:14:36.927 [DEBUG] [Thread-168088] [transport.py] [_log()] Compression: none
2026-04-11T10:14:36.927 [DEBUG] [Thread-168088] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:14:36.985 [DEBUG] [Thread-168088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:14:36.985 [DEBUG] [Thread-168088] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:14:36.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:14:36.986 [DEBUG] [Thread-168088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:14:36.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:14:37.044 [DEBUG] [Thread-168088] [transport.py] [_log()] userauth is OK
2026-04-11T10:14:37.045 [DEBUG] [Thread-168088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:14:37.045 [DEBUG] [Thread-168088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:14:37.045 [DEBUG] [Thread-168088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:14:37.045 [DEBUG] [Thread-168088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:14:37.070 [INFO] [Thread-168088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:14:37.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:14:37.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:14:37.903 [DEBUG] [Thread-168088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:14:37.904 [DEBUG] [Thread-168088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:14:37.953 [DEBUG] [Thread-168088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:14:37.953 [DEBUG] [Thread-168088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:14:37.962 [DEBUG] [Thread-168088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:14:37.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:14:37.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:14:37.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-04-11T10:14:37.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:14:37.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:14:37.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:14:38.006 [DEBUG] [Thread-168088] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:14:39.912 [DEBUG] [Thread-168090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:14:54.967 [DEBUG] [Thread-168091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:14:58.872 [DEBUG] [Thread-168092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:08.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:15:08.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:15:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:15:09.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 14, 40), 0.14999, 98.9481, 0.0, 27.8042, 13.4674, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:15:09.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:14:40
2026-04-11T10:15:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:15:09.841 [DEBUG] [Thread-168093] [transport.py] [_log()] starting thread (client mode): 0xae5f19c0
2026-04-11T10:15:09.841 [DEBUG] [Thread-168093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:15:09.861 [DEBUG] [Thread-168093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:15:09.861 [INFO] [Thread-168093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] client lang: <none>
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] server lang: <none>
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] kex follows: False
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] Compression: none
2026-04-11T10:15:09.865 [DEBUG] [Thread-168093] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:15:09.882 [DEBUG] [Thread-168093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:15:09.883 [DEBUG] [Thread-168093] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:15:09.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:15:09.884 [DEBUG] [Thread-168093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:15:09.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:15:09.886 [DEBUG] [Thread-168093] [transport.py] [_log()] userauth is OK
2026-04-11T10:15:09.886 [DEBUG] [Thread-168093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:15:09.886 [DEBUG] [Thread-168093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:15:09.886 [DEBUG] [Thread-168093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:15:09.886 [DEBUG] [Thread-168093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:15:09.910 [INFO] [Thread-168093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:15:09.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:15:10.006 [DEBUG] [Thread-168095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:15.555 [DEBUG] [Thread-168093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:15:15.556 [DEBUG] [Thread-168093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:15:15.556 [DEBUG] [Thread-168093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:15:15.596 [DEBUG] [Thread-168093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:15:15.596 [DEBUG] [Thread-168093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:15:15.600 [DEBUG] [Thread-168093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:15:15.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:15:15.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:15:15.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:15:15.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:15:15.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:15:15.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:15:15.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:15:15.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:15:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:15:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.343176 -999.00  +13.00  11.23     97  +12.50 1 3 1 3 1   888    0 0.48 1.21 ----- 12.8 11.2 117.9 18.8 14.0 -1.2 14.1 -0.3 14.0 -0.4 14.3 -0.5
2026-04-11T10:15:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:15:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:15:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.343176
2026-04-11T10:15:15.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:15:15.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:15:15.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:15:15.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:15:15.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:15:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:14:40', tmtdew=0.14999, humidity=98.9481, cloud=0.0, wind=27.8042, temperature=13.4674, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:14:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:15:15.691 [DEBUG] [Thread-168093] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:15:15.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:15:15.786 [DEBUG] [Thread-168097] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b50
2026-04-11T10:15:15.786 [DEBUG] [Thread-168097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:15:15.802 [DEBUG] [Thread-168097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:15:15.802 [INFO] [Thread-168097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:15:15.810 [DEBUG] [Thread-168097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:15:15.810 [DEBUG] [Thread-168097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:15:15.810 [DEBUG] [Thread-168097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:15:15.810 [DEBUG] [Thread-168097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] client lang: <none>
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] server lang: <none>
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] kex follows: False
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:15:15.811 [DEBUG] [Thread-168097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:15:15.812 [DEBUG] [Thread-168097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:15:15.812 [DEBUG] [Thread-168097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:15:15.812 [DEBUG] [Thread-168097] [transport.py] [_log()] Compression: none
2026-04-11T10:15:15.812 [DEBUG] [Thread-168097] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:15:15.869 [DEBUG] [Thread-168097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:15:15.870 [DEBUG] [Thread-168097] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:15:15.871 [DEBUG] [Thread-168097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:15:15.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:15:15.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:15:15.934 [DEBUG] [Thread-168097] [transport.py] [_log()] userauth is OK
2026-04-11T10:15:15.935 [DEBUG] [Thread-168097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:15:15.935 [DEBUG] [Thread-168097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:15:15.935 [DEBUG] [Thread-168097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:15:15.935 [DEBUG] [Thread-168097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:15:15.954 [INFO] [Thread-168097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:15:15.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:15:15.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:15:16.803 [DEBUG] [Thread-168097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:15:16.804 [DEBUG] [Thread-168097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:15:16.851 [DEBUG] [Thread-168097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:15:16.851 [DEBUG] [Thread-168097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:15:16.860 [DEBUG] [Thread-168097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:15:16.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:15:16.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-04-11T10:15:16.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-04-11T10:15:16.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:15:16.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:15:16.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:15:16.895 [DEBUG] [Thread-168097] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:15:25.044 [DEBUG] [Thread-168099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:34.701 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:34.703 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:40.096 [DEBUG] [Thread-168100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:15:46.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:15:46.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-04-11T10:15:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 15, 16), 0.07499, 99.474, 0.0, 21.8614, 13.0171, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:15:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:15:16
2026-04-11T10:15:48.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:15:48.738 [DEBUG] [Thread-168101] [transport.py] [_log()] starting thread (client mode): 0xb0fb6e90
2026-04-11T10:15:48.738 [DEBUG] [Thread-168101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:15:48.758 [DEBUG] [Thread-168101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:15:48.758 [INFO] [Thread-168101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:15:48.771 [DEBUG] [Thread-168101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:15:48.771 [DEBUG] [Thread-168101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:15:48.771 [DEBUG] [Thread-168101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:15:48.771 [DEBUG] [Thread-168101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] client lang: <none>
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] server lang: <none>
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] kex follows: False
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] Compression: none
2026-04-11T10:15:48.772 [DEBUG] [Thread-168101] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:15:48.792 [DEBUG] [Thread-168101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:15:48.793 [DEBUG] [Thread-168101] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:15:48.793 [DEBUG] [Thread-168101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:15:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:15:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:15:48.797 [DEBUG] [Thread-168101] [transport.py] [_log()] userauth is OK
2026-04-11T10:15:48.798 [DEBUG] [Thread-168101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:15:48.798 [DEBUG] [Thread-168101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:15:48.798 [DEBUG] [Thread-168101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:15:48.798 [DEBUG] [Thread-168101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:15:48.824 [INFO] [Thread-168101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:15:48.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:15:49.560 [DEBUG] [Thread-168101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:15:49.561 [DEBUG] [Thread-168101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:15:49.561 [DEBUG] [Thread-168101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:15:49.602 [DEBUG] [Thread-168101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:15:49.602 [DEBUG] [Thread-168101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:15:49.606 [DEBUG] [Thread-168101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:15:49.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:15:49.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:15:49.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:15:49.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:15:49.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:15:49.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:15:49.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:15:49.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:15:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:15:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.344218 -999.00  +13.00  14.35     97  +12.50 1 3 1 3 1   888    0 0.49 1.64 ----- 14.6 14.3 91.4 19.3 14.1 -1.1 14.1 -0.4 14.1 -0.5 14.3 -0.8
2026-04-11T10:15:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:15:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:15:49.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.344218
2026-04-11T10:15:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:15:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:15:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:15:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:15:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:15:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:15:16', tmtdew=0.07499, humidity=99.474, cloud=0.0, wind=21.8614, temperature=13.0171, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:15:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:15:49.634 [DEBUG] [Thread-168101] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:15:49.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:15:49.727 [DEBUG] [Thread-168104] [transport.py] [_log()] starting thread (client mode): 0xb0fcfeb0
2026-04-11T10:15:49.727 [DEBUG] [Thread-168104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:15:49.741 [DEBUG] [Thread-168104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:15:49.741 [INFO] [Thread-168104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:49.749 [DEBUG] [Thread-168104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] client lang: <none>
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] server lang: <none>
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] kex follows: False
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] Compression: none
2026-04-11T10:15:49.750 [DEBUG] [Thread-168104] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:15:49.807 [DEBUG] [Thread-168104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:15:49.807 [DEBUG] [Thread-168104] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:15:49.808 [DEBUG] [Thread-168104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:15:49.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:15:49.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:15:49.862 [DEBUG] [Thread-168104] [transport.py] [_log()] userauth is OK
2026-04-11T10:15:49.863 [DEBUG] [Thread-168104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:15:49.863 [DEBUG] [Thread-168104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:15:49.863 [DEBUG] [Thread-168104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:15:49.863 [DEBUG] [Thread-168104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:15:49.882 [INFO] [Thread-168104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:15:49.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:15:49.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:15:50.730 [DEBUG] [Thread-168104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:15:50.731 [DEBUG] [Thread-168104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:15:50.779 [DEBUG] [Thread-168104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:15:50.779 [DEBUG] [Thread-168104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:15:50.788 [DEBUG] [Thread-168104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:15:50.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:15:50.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-04-11T10:15:50.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-04-11T10:15:50.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:15:50.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:15:50.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:15:50.823 [DEBUG] [Thread-168104] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:15:55.141 [DEBUG] [Thread-168106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:15:58.907 [DEBUG] [Thread-168107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:10.193 [DEBUG] [Thread-168108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:16:20.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:16:20.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-04-11T10:16:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 15, 52), 0.155, 98.9156, 0.0, 23.359, 13.3683, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:16:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:15:52
2026-04-11T10:16:22.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:16:22.555 [DEBUG] [Thread-168109] [transport.py] [_log()] starting thread (client mode): 0xb0fcf010
2026-04-11T10:16:22.555 [DEBUG] [Thread-168109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:16:22.576 [DEBUG] [Thread-168109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:16:22.576 [INFO] [Thread-168109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:16:22.579 [DEBUG] [Thread-168109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] client lang: <none>
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] server lang: <none>
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] kex follows: False
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] Compression: none
2026-04-11T10:16:22.580 [DEBUG] [Thread-168109] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:16:22.598 [DEBUG] [Thread-168109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:16:22.598 [DEBUG] [Thread-168109] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:16:22.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:16:22.599 [DEBUG] [Thread-168109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:16:22.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:16:22.601 [DEBUG] [Thread-168109] [transport.py] [_log()] userauth is OK
2026-04-11T10:16:22.601 [DEBUG] [Thread-168109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:16:22.601 [DEBUG] [Thread-168109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:16:22.601 [DEBUG] [Thread-168109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:16:22.601 [DEBUG] [Thread-168109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:16:22.636 [INFO] [Thread-168109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:16:22.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:16:23.405 [DEBUG] [Thread-168109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:16:23.405 [DEBUG] [Thread-168109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:16:23.405 [DEBUG] [Thread-168109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:16:23.445 [DEBUG] [Thread-168109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:16:23.446 [DEBUG] [Thread-168109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:16:23.447 [DEBUG] [Thread-168109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:16:23.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:16:23.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:16:23.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:16:23.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:16:23.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:16:23.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:16:23.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:16:23.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:16:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:16:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.344218 -999.00  +13.00  14.35     97  +12.50 1 3 1 3 1   888    0 0.49 1.64 ----- 14.6 14.3 91.4 19.3 14.1 -1.1 14.1 -0.4 14.1 -0.5 14.3 -0.8
2026-04-11T10:16:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:16:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:16:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.344218
2026-04-11T10:16:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:16:23.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:16:23.469 [DEBUG] [Thread-168109] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:16:23.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:16:23.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:16:23.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:16:23.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:15:52', tmtdew=0.155, humidity=98.9156, cloud=0.0, wind=23.359, temperature=13.3683, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:15:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:16:23.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:16:23.566 [DEBUG] [Thread-168112] [transport.py] [_log()] starting thread (client mode): 0xb0f8df30
2026-04-11T10:16:23.566 [DEBUG] [Thread-168112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:16:23.580 [DEBUG] [Thread-168112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:16:23.580 [INFO] [Thread-168112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:16:23.587 [DEBUG] [Thread-168112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] client lang: <none>
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] server lang: <none>
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] kex follows: False
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:16:23.588 [DEBUG] [Thread-168112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:16:23.589 [DEBUG] [Thread-168112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:16:23.589 [DEBUG] [Thread-168112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:16:23.589 [DEBUG] [Thread-168112] [transport.py] [_log()] Compression: none
2026-04-11T10:16:23.589 [DEBUG] [Thread-168112] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:16:23.646 [DEBUG] [Thread-168112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:16:23.647 [DEBUG] [Thread-168112] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:16:23.647 [DEBUG] [Thread-168112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:16:23.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:16:23.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:16:23.703 [DEBUG] [Thread-168112] [transport.py] [_log()] userauth is OK
2026-04-11T10:16:23.703 [DEBUG] [Thread-168112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:16:23.704 [DEBUG] [Thread-168112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:16:23.704 [DEBUG] [Thread-168112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:16:23.704 [DEBUG] [Thread-168112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:16:23.723 [INFO] [Thread-168112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:16:23.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:16:23.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:16:24.580 [DEBUG] [Thread-168112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:16:24.580 [DEBUG] [Thread-168112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:16:24.630 [DEBUG] [Thread-168112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:16:24.630 [DEBUG] [Thread-168112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:16:24.640 [DEBUG] [Thread-168112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:16:24.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:16:24.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-04-11T10:16: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') -> 00000000
2026-04-11T10:16:24.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:16:24.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:16:24.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:16:24.680 [DEBUG] [Thread-168112] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:16:25.229 [DEBUG] [Thread-168114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:34.845 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:34.846 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:40.282 [DEBUG] [Thread-168115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:54.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:16:54.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:16:54.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-04-11T10:16:55.327 [DEBUG] [Thread-168116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:16:55.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 16, 27), 0.124945, 99.4744, 0.0, 15.8094, 13.0173, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:16:55.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:16:27
2026-04-11T10:16:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:16:56.514 [DEBUG] [Thread-168117] [transport.py] [_log()] starting thread (client mode): 0xb0f8d990
2026-04-11T10:16:56.514 [DEBUG] [Thread-168117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:16:56.535 [DEBUG] [Thread-168117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:16:56.535 [INFO] [Thread-168117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:16:56.538 [DEBUG] [Thread-168117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:16:56.538 [DEBUG] [Thread-168117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:16:56.538 [DEBUG] [Thread-168117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:16:56.538 [DEBUG] [Thread-168117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:56.538 [DEBUG] [Thread-168117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:56.538 [DEBUG] [Thread-168117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] client lang: <none>
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] server lang: <none>
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] kex follows: False
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] Compression: none
2026-04-11T10:16:56.539 [DEBUG] [Thread-168117] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:16:56.556 [DEBUG] [Thread-168117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:16:56.557 [DEBUG] [Thread-168117] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:16:56.557 [DEBUG] [Thread-168117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:16:56.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:16:56.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:16:56.558 [DEBUG] [Thread-168117] [transport.py] [_log()] userauth is OK
2026-04-11T10:16:56.558 [DEBUG] [Thread-168117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:16:56.558 [DEBUG] [Thread-168117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:16:56.558 [DEBUG] [Thread-168117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:16:56.558 [DEBUG] [Thread-168117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:16:56.577 [INFO] [Thread-168117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:16:56.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:16:57.305 [DEBUG] [Thread-168117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:16:57.305 [DEBUG] [Thread-168117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:16:57.305 [DEBUG] [Thread-168117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:16:57.346 [DEBUG] [Thread-168117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:16:57.346 [DEBUG] [Thread-168117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:16:57.350 [DEBUG] [Thread-168117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:16:57.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:16:57.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:16:57.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:16:57.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:16:57.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:16:57.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:16:57.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:16:57.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:16:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:16:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.344565 -999.00  +13.00  11.83     97  +12.50 1 3 1 3 1   888    0 0.51 1.93 ----- 11.9 11.8 80.5 23.3 14.1 -0.9 14.1 -0.4 14.0 -0.3 14.2 -0.8
2026-04-11T10:16:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:16:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:16:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.344565
2026-04-11T10:16:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:16:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:16:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:16:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:16:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:16:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:16:27', tmtdew=0.124945, humidity=99.4744, cloud=0.0, wind=15.8094, temperature=13.0173, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:16:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:16:57.383 [DEBUG] [Thread-168117] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:16:57.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:16:57.474 [DEBUG] [Thread-168120] [transport.py] [_log()] starting thread (client mode): 0xae519bd0
2026-04-11T10:16:57.474 [DEBUG] [Thread-168120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:16:57.489 [DEBUG] [Thread-168120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:16:57.489 [INFO] [Thread-168120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:16:57.497 [DEBUG] [Thread-168120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:16:57.497 [DEBUG] [Thread-168120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:16:57.497 [DEBUG] [Thread-168120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:16:57.497 [DEBUG] [Thread-168120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:57.497 [DEBUG] [Thread-168120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:16:57.497 [DEBUG] [Thread-168120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] client lang: <none>
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] server lang: <none>
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] kex follows: False
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] Compression: none
2026-04-11T10:16:57.498 [DEBUG] [Thread-168120] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:16:57.557 [DEBUG] [Thread-168120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:16:57.557 [DEBUG] [Thread-168120] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:16:57.558 [DEBUG] [Thread-168120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:16:57.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:16:57.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:16:57.613 [DEBUG] [Thread-168120] [transport.py] [_log()] userauth is OK
2026-04-11T10:16:57.614 [DEBUG] [Thread-168120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:16:57.614 [DEBUG] [Thread-168120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:16:57.614 [DEBUG] [Thread-168120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:16:57.614 [DEBUG] [Thread-168120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:16:57.639 [INFO] [Thread-168120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:16:57.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:16:57.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:16:58.460 [DEBUG] [Thread-168120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:16:58.461 [DEBUG] [Thread-168120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:16:58.511 [DEBUG] [Thread-168120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:16:58.511 [DEBUG] [Thread-168120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:16:58.521 [DEBUG] [Thread-168120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:16:58.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:16:58.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-04-11T10:16:58.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-04-11T10:16:58.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:16:58.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:16:58.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:16:58.561 [DEBUG] [Thread-168120] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:16:58.940 [DEBUG] [Thread-168122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:10.366 [DEBUG] [Thread-168123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:25.419 [DEBUG] [Thread-168124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:17:28.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:17:28.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-04-11T10:17:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 17, 2), 0.12496, 99.4742, 0.0, 15.0685, 13.0006, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:17:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:17:02
2026-04-11T10:17:30.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:17:30.390 [DEBUG] [Thread-168125] [transport.py] [_log()] starting thread (client mode): 0xb0f8f2b0
2026-04-11T10:17:30.390 [DEBUG] [Thread-168125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:17:30.412 [DEBUG] [Thread-168125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:17:30.412 [INFO] [Thread-168125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:17:30.415 [DEBUG] [Thread-168125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:17:30.415 [DEBUG] [Thread-168125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:17:30.415 [DEBUG] [Thread-168125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] client lang: <none>
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] server lang: <none>
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] kex follows: False
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:17:30.416 [DEBUG] [Thread-168125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:17:30.417 [DEBUG] [Thread-168125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:17:30.417 [DEBUG] [Thread-168125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:17:30.417 [DEBUG] [Thread-168125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:17:30.417 [DEBUG] [Thread-168125] [transport.py] [_log()] Compression: none
2026-04-11T10:17:30.417 [DEBUG] [Thread-168125] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:17:30.435 [DEBUG] [Thread-168125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:17:30.436 [DEBUG] [Thread-168125] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:17:30.437 [DEBUG] [Thread-168125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:17:30.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:17:30.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:17:30.439 [DEBUG] [Thread-168125] [transport.py] [_log()] userauth is OK
2026-04-11T10:17:30.439 [DEBUG] [Thread-168125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:17:30.439 [DEBUG] [Thread-168125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:17:30.439 [DEBUG] [Thread-168125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:17:30.439 [DEBUG] [Thread-168125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:17:30.474 [INFO] [Thread-168125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:17:30.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:17:31.209 [DEBUG] [Thread-168125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:17:31.209 [DEBUG] [Thread-168125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:17:31.210 [DEBUG] [Thread-168125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:17:31.250 [DEBUG] [Thread-168125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:17:31.250 [DEBUG] [Thread-168125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:17:31.253 [DEBUG] [Thread-168125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:17:31.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:17:31.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:17:31.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:17:31.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:17:31.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:17:31.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:17:31.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:17:31.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:17:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:17:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.344912 -999.00  +12.90  12.22     97  +12.50 1 3 1 3 1   888    0 0.50 1.65 ----- 11.8 12.2 113.2 18.9 14.1 -1.1 14.1 -0.4 14.0 -0.6 14.2 -0.7
2026-04-11T10:17:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:17:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:17:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.344912
2026-04-11T10:17:31.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:17:31.280 [DEBUG] [Thread-168125] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:17:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:17:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:17:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:17:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:17:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:17:02', tmtdew=0.12496, humidity=99.4742, cloud=0.0, wind=15.0685, temperature=13.0006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:16:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:17:31.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:17:31.376 [DEBUG] [Thread-168128] [transport.py] [_log()] starting thread (client mode): 0xb0f8ead0
2026-04-11T10:17:31.376 [DEBUG] [Thread-168128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:17:31.391 [DEBUG] [Thread-168128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:17:31.391 [INFO] [Thread-168128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:17:31.399 [DEBUG] [Thread-168128] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:17:31.399 [DEBUG] [Thread-168128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] client lang: <none>
2026-04-11T10:17:31.400 [DEBUG] [Thread-168128] [transport.py] [_log()] server lang: <none>
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] kex follows: False
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] Compression: none
2026-04-11T10:17:31.401 [DEBUG] [Thread-168128] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:17:31.457 [DEBUG] [Thread-168128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:17:31.458 [DEBUG] [Thread-168128] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:17:31.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:17:31.459 [DEBUG] [Thread-168128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:17:31.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:17:31.514 [DEBUG] [Thread-168128] [transport.py] [_log()] userauth is OK
2026-04-11T10:17:31.514 [DEBUG] [Thread-168128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:17:31.514 [DEBUG] [Thread-168128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:17:31.514 [DEBUG] [Thread-168128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:17:31.515 [DEBUG] [Thread-168128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:17:31.534 [INFO] [Thread-168128] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:17:31.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:17:31.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:17:32.386 [DEBUG] [Thread-168128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:17:32.386 [DEBUG] [Thread-168128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:17:32.434 [DEBUG] [Thread-168128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:17:32.434 [DEBUG] [Thread-168128] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:17:32.443 [DEBUG] [Thread-168128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:17:32.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:17:32.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-04-11T10:17:32.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:17:32.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:17:32.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:17:32.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:17:32.484 [DEBUG] [Thread-168128] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:17:34.987 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:34.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:40.456 [DEBUG] [Thread-168130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:55.507 [DEBUG] [Thread-168131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:17:58.978 [DEBUG] [Thread-168132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:18:02.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:18:02.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-04-11T10:18:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 17, 38), 0.1551, 98.9153, 0.0, 21.0658, 13.5007, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:18:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:17:38
2026-04-11T10:18:04.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:18:04.331 [DEBUG] [Thread-168133] [transport.py] [_log()] starting thread (client mode): 0xb0fcc1f0
2026-04-11T10:18:04.331 [DEBUG] [Thread-168133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:18:04.352 [DEBUG] [Thread-168133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:18:04.353 [INFO] [Thread-168133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] client lang: <none>
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] server lang: <none>
2026-04-11T10:18:04.356 [DEBUG] [Thread-168133] [transport.py] [_log()] kex follows: False
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] Compression: none
2026-04-11T10:18:04.357 [DEBUG] [Thread-168133] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:18:04.375 [DEBUG] [Thread-168133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:18:04.375 [DEBUG] [Thread-168133] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:18:04.376 [DEBUG] [Thread-168133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:18:04.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:18:04.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:18:04.378 [DEBUG] [Thread-168133] [transport.py] [_log()] userauth is OK
2026-04-11T10:18:04.378 [DEBUG] [Thread-168133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:18:04.378 [DEBUG] [Thread-168133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:18:04.378 [DEBUG] [Thread-168133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:18:04.378 [DEBUG] [Thread-168133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:18:04.401 [INFO] [Thread-168133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:18:04.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:18:05.137 [DEBUG] [Thread-168133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:18:05.137 [DEBUG] [Thread-168133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:18:05.137 [DEBUG] [Thread-168133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:18:05.178 [DEBUG] [Thread-168133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:18:05.178 [DEBUG] [Thread-168133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:18:05.181 [DEBUG] [Thread-168133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:18:05.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:18:05.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:18:05.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:18:05.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:18:05.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:18:05.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:18:05.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:18:05.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:18:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:18:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.345260 -999.00  +12.90  15.79     97  +12.50 1 3 1 3 1   888    0 0.48 1.61 ----- 15.9 15.8 122.8 22.1 14.1 -0.8 14.2 -0.3 14.0 -0.5 14.2 -0.6
2026-04-11T10:18:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:18:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:18:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.345260
2026-04-11T10:18:05.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:18:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:18:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:18:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:18:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:18:05.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:17:38', tmtdew=0.1551, humidity=98.9153, cloud=0.0, wind=21.0658, temperature=13.5007, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:17:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:18:05.201 [DEBUG] [Thread-168133] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:18:05.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:18:05.296 [DEBUG] [Thread-168136] [transport.py] [_log()] starting thread (client mode): 0xb0fccaf0
2026-04-11T10:18:05.296 [DEBUG] [Thread-168136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:18:05.311 [DEBUG] [Thread-168136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:18:05.312 [INFO] [Thread-168136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:18:05.319 [DEBUG] [Thread-168136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:18:05.319 [DEBUG] [Thread-168136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] client lang: <none>
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] server lang: <none>
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] kex follows: False
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:18:05.320 [DEBUG] [Thread-168136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:18:05.321 [DEBUG] [Thread-168136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:18:05.321 [DEBUG] [Thread-168136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:18:05.321 [DEBUG] [Thread-168136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:18:05.321 [DEBUG] [Thread-168136] [transport.py] [_log()] Compression: none
2026-04-11T10:18:05.321 [DEBUG] [Thread-168136] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:18:05.381 [DEBUG] [Thread-168136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:18:05.381 [DEBUG] [Thread-168136] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:18:05.382 [DEBUG] [Thread-168136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:18:05.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:18:05.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:18:05.438 [DEBUG] [Thread-168136] [transport.py] [_log()] userauth is OK
2026-04-11T10:18:05.438 [DEBUG] [Thread-168136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:18:05.439 [DEBUG] [Thread-168136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:18:05.439 [DEBUG] [Thread-168136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:18:05.439 [DEBUG] [Thread-168136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:18:05.457 [INFO] [Thread-168136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:18:05.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:18:05.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:18:06.321 [DEBUG] [Thread-168136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:18:06.321 [DEBUG] [Thread-168136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:18:06.369 [DEBUG] [Thread-168136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:18:06.369 [DEBUG] [Thread-168136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:18:06.379 [DEBUG] [Thread-168136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:18:06.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:18:06.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:18:06.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-04-11T10:18:06.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:18:06.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:18:06.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:18:06.415 [DEBUG] [Thread-168136] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:18:10.546 [DEBUG] [Thread-168138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:25.601 [DEBUG] [Thread-168139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:35.128 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:35.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:36.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:18:36.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:18:36.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-04-11T10:18:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 18, 14), 0.122365, 99.4911, 0.0, 17.8916, 13.0506, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:18:37.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:18:14
2026-04-11T10:18:38.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:18:38.372 [DEBUG] [Thread-168140] [transport.py] [_log()] starting thread (client mode): 0xb0fcd9f0
2026-04-11T10:18:38.372 [DEBUG] [Thread-168140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:18:38.393 [DEBUG] [Thread-168140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:18:38.393 [INFO] [Thread-168140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:18:38.396 [DEBUG] [Thread-168140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:18:38.397 [DEBUG] [Thread-168140] [transport.py] [_log()] client lang: <none>
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] server lang: <none>
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] kex follows: False
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] Compression: none
2026-04-11T10:18:38.398 [DEBUG] [Thread-168140] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:18:38.418 [DEBUG] [Thread-168140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:18:38.418 [DEBUG] [Thread-168140] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:18:38.419 [DEBUG] [Thread-168140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:18:38.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:18:38.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:18:38.421 [DEBUG] [Thread-168140] [transport.py] [_log()] userauth is OK
2026-04-11T10:18:38.421 [DEBUG] [Thread-168140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:18:38.421 [DEBUG] [Thread-168140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:18:38.421 [DEBUG] [Thread-168140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:18:38.421 [DEBUG] [Thread-168140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:18:38.438 [INFO] [Thread-168140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:18:38.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:18:39.201 [DEBUG] [Thread-168140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:18:39.202 [DEBUG] [Thread-168140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:18:39.202 [DEBUG] [Thread-168140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:18:39.242 [DEBUG] [Thread-168140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:18:39.243 [DEBUG] [Thread-168140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:18:39.249 [DEBUG] [Thread-168140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:18:39.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:18:39.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:18:39.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:18:39.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:18:39.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:18:39.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:18:39.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:18:39.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:18:39.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:18:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.345607 -999.00  +12.90  16.14     97  +12.50 1 3 1 3 1   888    0 0.47 1.27 ----- 16.8 16.1 99.2 22.8 14.1 -0.8 14.1 -0.3 14.0 -0.7 14.2 -0.8
2026-04-11T10:18:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:18:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:18:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.345607
2026-04-11T10:18:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:18:39.268 [DEBUG] [Thread-168140] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:18:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:18:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:18:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:18:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:18:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:18:14', tmtdew=0.122365, humidity=99.4911, cloud=0.0, wind=17.8916, temperature=13.0506, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:17:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:18:39.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:18:39.372 [DEBUG] [Thread-168143] [transport.py] [_log()] starting thread (client mode): 0xa7953460
2026-04-11T10:18:39.372 [DEBUG] [Thread-168143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:18:39.387 [DEBUG] [Thread-168143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:18:39.387 [INFO] [Thread-168143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:18:39.394 [DEBUG] [Thread-168143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:18:39.395 [DEBUG] [Thread-168143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:18:39.395 [DEBUG] [Thread-168143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:18:39.395 [DEBUG] [Thread-168143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:39.395 [DEBUG] [Thread-168143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] client lang: <none>
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] server lang: <none>
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] kex follows: False
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] Compression: none
2026-04-11T10:18:39.396 [DEBUG] [Thread-168143] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:18:39.456 [DEBUG] [Thread-168143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:18:39.457 [DEBUG] [Thread-168143] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:18:39.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:18:39.458 [DEBUG] [Thread-168143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:18:39.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:18:39.521 [DEBUG] [Thread-168143] [transport.py] [_log()] userauth is OK
2026-04-11T10:18:39.521 [DEBUG] [Thread-168143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:18:39.521 [DEBUG] [Thread-168143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:18:39.522 [DEBUG] [Thread-168143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:18:39.522 [DEBUG] [Thread-168143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:18:39.540 [INFO] [Thread-168143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:18:39.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:18:39.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:18:40.387 [DEBUG] [Thread-168143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:18:40.387 [DEBUG] [Thread-168143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:18:40.435 [DEBUG] [Thread-168143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:18:40.435 [DEBUG] [Thread-168143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:18:40.444 [DEBUG] [Thread-168143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:18:40.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:18:40.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-04-11T10:18:40.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-04-11T10:18:40.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:18:40.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:18:40.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:18:40.483 [DEBUG] [Thread-168143] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:18:40.635 [DEBUG] [Thread-168145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:55.689 [DEBUG] [Thread-168146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:18:59.022 [DEBUG] [Thread-168147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:10.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:19:10.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:19:10.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-04-11T10:19:10.727 [DEBUG] [Thread-168148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:11.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 18, 49), 0.14982, 98.949, 0.0, 24.0998, 13.3685, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:19:11.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:18:49
2026-04-11T10:19:12.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:19:12.313 [DEBUG] [Thread-168149] [transport.py] [_log()] starting thread (client mode): 0xb0fce9e0
2026-04-11T10:19:12.314 [DEBUG] [Thread-168149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:19:12.329 [DEBUG] [Thread-168149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:19:12.329 [INFO] [Thread-168149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:19:12.332 [DEBUG] [Thread-168149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] client lang: <none>
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] server lang: <none>
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] kex follows: False
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] Compression: none
2026-04-11T10:19:12.333 [DEBUG] [Thread-168149] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:19:12.349 [DEBUG] [Thread-168149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:19:12.349 [DEBUG] [Thread-168149] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:19:12.350 [DEBUG] [Thread-168149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:19:12.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:19:12.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:19:12.352 [DEBUG] [Thread-168149] [transport.py] [_log()] userauth is OK
2026-04-11T10:19:12.352 [DEBUG] [Thread-168149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:19:12.352 [DEBUG] [Thread-168149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:19:12.352 [DEBUG] [Thread-168149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:19:12.352 [DEBUG] [Thread-168149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:19:12.371 [INFO] [Thread-168149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:19:12.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:19:13.112 [DEBUG] [Thread-168149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:19:13.113 [DEBUG] [Thread-168149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:19:13.113 [DEBUG] [Thread-168149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:19:13.154 [DEBUG] [Thread-168149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:19:13.154 [DEBUG] [Thread-168149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:19:13.158 [DEBUG] [Thread-168149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:19:13.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:19:13.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:19:13.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:19:13.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:19:13.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:19:13.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:19:13.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:19:13.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:19:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:19:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.345954 -999.00  +12.90   7.84     97  +12.50 1 3 1 3 1   888    0 0.47 0.86 ----- 18.0 7.8 104.0 23.6 14.1 -0.8 14.1 -0.4 14.0 -0.5 14.2 -0.8
2026-04-11T10:19:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:19:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:19:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.345954
2026-04-11T10:19:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:19:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:19:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:19:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:19:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:19:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:18:49', tmtdew=0.14982, humidity=98.949, cloud=0.0, wind=24.0998, temperature=13.3685, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:18:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:19:13.197 [DEBUG] [Thread-168149] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:19:13.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:19:13.297 [DEBUG] [Thread-168152] [transport.py] [_log()] starting thread (client mode): 0xb0f8f670
2026-04-11T10:19:13.297 [DEBUG] [Thread-168152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:19:13.312 [DEBUG] [Thread-168152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:19:13.312 [INFO] [Thread-168152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] client lang: <none>
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] server lang: <none>
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] kex follows: False
2026-04-11T10:19:13.320 [DEBUG] [Thread-168152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:19:13.321 [DEBUG] [Thread-168152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:19:13.321 [DEBUG] [Thread-168152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:19:13.321 [DEBUG] [Thread-168152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:19:13.321 [DEBUG] [Thread-168152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:19:13.321 [DEBUG] [Thread-168152] [transport.py] [_log()] Compression: none
2026-04-11T10:19:13.321 [DEBUG] [Thread-168152] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:19:13.380 [DEBUG] [Thread-168152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:19:13.380 [DEBUG] [Thread-168152] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:19:13.381 [DEBUG] [Thread-168152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:19:13.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:19:13.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:19:13.441 [DEBUG] [Thread-168152] [transport.py] [_log()] userauth is OK
2026-04-11T10:19:13.441 [DEBUG] [Thread-168152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:19:13.441 [DEBUG] [Thread-168152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:19:13.441 [DEBUG] [Thread-168152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:19:13.442 [DEBUG] [Thread-168152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:19:13.465 [INFO] [Thread-168152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:19:13.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:19:13.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:19:14.319 [DEBUG] [Thread-168152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:19:14.319 [DEBUG] [Thread-168152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:19:14.367 [DEBUG] [Thread-168152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:19:14.367 [DEBUG] [Thread-168152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:19:14.376 [DEBUG] [Thread-168152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:19:14.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:19:14.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:19:14.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-04-11T10:19:14.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:19:14.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:19:14.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:19:14.418 [DEBUG] [Thread-168152] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:19:25.766 [DEBUG] [Thread-168154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:35.267 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:35.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:40.833 [DEBUG] [Thread-168155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:19:44.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:19:44.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:19:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 19, 24), 0.12493, 99.4743, 0.0, 15.9682, 12.9675, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:19:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:19:24
2026-04-11T10:19:46.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:19:46.234 [DEBUG] [Thread-168156] [transport.py] [_log()] starting thread (client mode): 0xb0fcf490
2026-04-11T10:19:46.234 [DEBUG] [Thread-168156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:19:46.254 [DEBUG] [Thread-168156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:19:46.254 [INFO] [Thread-168156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:19:46.257 [DEBUG] [Thread-168156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:19:46.257 [DEBUG] [Thread-168156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:19:46.257 [DEBUG] [Thread-168156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] client lang: <none>
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] server lang: <none>
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] kex follows: False
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:19:46.258 [DEBUG] [Thread-168156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:19:46.259 [DEBUG] [Thread-168156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:19:46.259 [DEBUG] [Thread-168156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:19:46.259 [DEBUG] [Thread-168156] [transport.py] [_log()] Compression: none
2026-04-11T10:19:46.259 [DEBUG] [Thread-168156] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:19:46.277 [DEBUG] [Thread-168156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:19:46.278 [DEBUG] [Thread-168156] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:19:46.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:19:46.279 [DEBUG] [Thread-168156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:19:46.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:19:46.281 [DEBUG] [Thread-168156] [transport.py] [_log()] userauth is OK
2026-04-11T10:19:46.281 [DEBUG] [Thread-168156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:19:46.282 [DEBUG] [Thread-168156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:19:46.282 [DEBUG] [Thread-168156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:19:46.282 [DEBUG] [Thread-168156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:19:46.302 [INFO] [Thread-168156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:19:46.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:19:47.060 [DEBUG] [Thread-168156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:19:47.060 [DEBUG] [Thread-168156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:19:47.061 [DEBUG] [Thread-168156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:19:47.101 [DEBUG] [Thread-168156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:19:47.101 [DEBUG] [Thread-168156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:19:47.104 [DEBUG] [Thread-168156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:19:47.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:19:47.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:19:47.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:19:47.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:19:47.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:19:47.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:19:47.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:19:47.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:19:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:19:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.346996 -999.00  +12.90  15.93     97  +12.50 1 3 1 3 1   888    0 0.45 0.37 ----- 11.4 15.9 84.3 18.8 14.1 -1.2 14.1 -0.3 14.0 -0.4 14.3 -0.7
2026-04-11T10:19:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:19:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:19:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.346996
2026-04-11T10:19:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:19:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:19:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:19:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:19:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:19:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:19:24', tmtdew=0.12493, humidity=99.4743, cloud=0.0, wind=15.9682, temperature=12.9675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:19:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:19:47.131 [DEBUG] [Thread-168156] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:19:47.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:19:47.237 [DEBUG] [Thread-168159] [transport.py] [_log()] starting thread (client mode): 0xae515e70
2026-04-11T10:19:47.237 [DEBUG] [Thread-168159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:19:47.252 [DEBUG] [Thread-168159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:19:47.252 [INFO] [Thread-168159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:19:47.259 [DEBUG] [Thread-168159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] client lang: <none>
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] server lang: <none>
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] kex follows: False
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] Compression: none
2026-04-11T10:19:47.260 [DEBUG] [Thread-168159] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:19:47.316 [DEBUG] [Thread-168159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:19:47.317 [DEBUG] [Thread-168159] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:19:47.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:19:47.318 [DEBUG] [Thread-168159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:19:47.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:19:47.373 [DEBUG] [Thread-168159] [transport.py] [_log()] userauth is OK
2026-04-11T10:19:47.373 [DEBUG] [Thread-168159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:19:47.373 [DEBUG] [Thread-168159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:19:47.374 [DEBUG] [Thread-168159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:19:47.374 [DEBUG] [Thread-168159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:19:47.393 [INFO] [Thread-168159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:19:47.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:19:47.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:19:48.232 [DEBUG] [Thread-168159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:19:48.232 [DEBUG] [Thread-168159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:19:48.280 [DEBUG] [Thread-168159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:19:48.280 [DEBUG] [Thread-168159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:19:48.289 [DEBUG] [Thread-168159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:19:48.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:19:48.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-04-11T10:19:48.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:19:48.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:19:48.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:19:48.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:19:48.328 [DEBUG] [Thread-168159] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:19:55.873 [DEBUG] [Thread-168161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:19:59.059 [DEBUG] [Thread-168162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:10.937 [DEBUG] [Thread-168163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:20:18.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:20:18.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-04-11T10:20:19.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 20), 0.069805, 99.5075, 0.0, 19.8144, 12.9507, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:20:19.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:20:00
2026-04-11T10:20:20.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:20:20.247 [DEBUG] [Thread-168164] [transport.py] [_log()] starting thread (client mode): 0xae51b7f0
2026-04-11T10:20:20.247 [DEBUG] [Thread-168164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:20:20.267 [DEBUG] [Thread-168164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:20:20.268 [INFO] [Thread-168164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:20:20.268 [DEBUG] [Thread-168164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] client lang: <none>
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] server lang: <none>
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] kex follows: False
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] Compression: none
2026-04-11T10:20:20.269 [DEBUG] [Thread-168164] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:20:20.278 [DEBUG] [Thread-168164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:20:20.278 [DEBUG] [Thread-168164] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:20:20.278 [DEBUG] [Thread-168164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:20:20.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:20:20.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:20:20.280 [DEBUG] [Thread-168164] [transport.py] [_log()] userauth is OK
2026-04-11T10:20:20.280 [DEBUG] [Thread-168164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:20:20.280 [DEBUG] [Thread-168164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:20:20.280 [DEBUG] [Thread-168164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:20:20.281 [DEBUG] [Thread-168164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:20:20.306 [INFO] [Thread-168164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:20:20.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:20:25.975 [DEBUG] [Thread-168166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:33.527 [DEBUG] [Thread-168164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:20:33.527 [DEBUG] [Thread-168164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:20:33.528 [DEBUG] [Thread-168164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:20:33.568 [DEBUG] [Thread-168164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:20:33.568 [DEBUG] [Thread-168164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:20:33.571 [DEBUG] [Thread-168164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:20:33.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:20:33.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:20:33.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:20:33.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:20:33.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:20:33.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:20:33.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:20:33.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:20:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:20:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.346996 -999.00  +12.90  15.93     97  +12.50 1 3 1 3 1   888    0 0.45 0.37 ----- 11.4 15.9 84.3 18.8 14.1 -1.2 14.1 -0.3 14.0 -0.4 14.3 -0.7
2026-04-11T10:20:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:20:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:20:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.346996
2026-04-11T10:20:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:20:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:20:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:20:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:20:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:20:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:20:00', tmtdew=0.069805, humidity=99.5075, cloud=0.0, wind=19.8144, temperature=12.9507, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:19:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:20:33.606 [DEBUG] [Thread-168164] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:20:33.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:20:33.704 [DEBUG] [Thread-168168] [transport.py] [_log()] starting thread (client mode): 0xb0fccc40
2026-04-11T10:20:33.704 [DEBUG] [Thread-168168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:20:33.720 [DEBUG] [Thread-168168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:20:33.721 [INFO] [Thread-168168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:20:33.729 [DEBUG] [Thread-168168] [transport.py] [_log()] client lang: <none>
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] server lang: <none>
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] kex follows: False
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] Compression: none
2026-04-11T10:20:33.730 [DEBUG] [Thread-168168] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:20:33.791 [DEBUG] [Thread-168168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:20:33.792 [DEBUG] [Thread-168168] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:20:33.793 [DEBUG] [Thread-168168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:20:33.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:20:33.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:20:33.850 [DEBUG] [Thread-168168] [transport.py] [_log()] userauth is OK
2026-04-11T10:20:33.850 [DEBUG] [Thread-168168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:20:33.850 [DEBUG] [Thread-168168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:20:33.851 [DEBUG] [Thread-168168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:20:33.851 [DEBUG] [Thread-168168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:20:33.871 [INFO] [Thread-168168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:20:33.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:20:33.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:20:34.791 [DEBUG] [Thread-168168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:20:34.792 [DEBUG] [Thread-168168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:20:34.840 [DEBUG] [Thread-168168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:20:34.840 [DEBUG] [Thread-168168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:20:34.850 [DEBUG] [Thread-168168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:20:34.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:20:34.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-04-11T10:20:34.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-04-11T10:20:34.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:20:34.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:20:34.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:20:34.886 [DEBUG] [Thread-168168] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:20:35.408 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:35.410 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:41.011 [DEBUG] [Thread-168170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:56.061 [DEBUG] [Thread-168171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:20:59.087 [DEBUG] [Thread-168172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:04.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:21:04.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:21:04.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 20, 36), 0.14478, 98.9815, 0.0, 25.123, 13.3349, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:20:36
2026-04-11T10:21:06.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:21:06.711 [DEBUG] [Thread-168173] [transport.py] [_log()] starting thread (client mode): 0xa7950580
2026-04-11T10:21:06.711 [DEBUG] [Thread-168173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:21:06.733 [DEBUG] [Thread-168173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:21:06.733 [INFO] [Thread-168173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:21:06.735 [DEBUG] [Thread-168173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:21:06.735 [DEBUG] [Thread-168173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:21:06.735 [DEBUG] [Thread-168173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:21:06.735 [DEBUG] [Thread-168173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:06.735 [DEBUG] [Thread-168173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:06.735 [DEBUG] [Thread-168173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] client lang: <none>
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] server lang: <none>
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] kex follows: False
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] Compression: none
2026-04-11T10:21:06.736 [DEBUG] [Thread-168173] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:21:06.744 [DEBUG] [Thread-168173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:21:06.744 [DEBUG] [Thread-168173] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:21:06.745 [DEBUG] [Thread-168173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:21:06.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:21:06.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:21:06.746 [DEBUG] [Thread-168173] [transport.py] [_log()] userauth is OK
2026-04-11T10:21:06.746 [DEBUG] [Thread-168173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:21:06.746 [DEBUG] [Thread-168173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:21:06.747 [DEBUG] [Thread-168173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:21:06.747 [DEBUG] [Thread-168173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:21:06.759 [INFO] [Thread-168173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:21:06.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:21:07.493 [DEBUG] [Thread-168173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:21:07.493 [DEBUG] [Thread-168173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:21:07.493 [DEBUG] [Thread-168173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:21:07.536 [DEBUG] [Thread-168173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:21:07.536 [DEBUG] [Thread-168173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:21:07.541 [DEBUG] [Thread-168173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:21:07.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:21:07.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:21:07.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:21:07.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:21:07.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:21:07.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:21:07.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:21:07.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:21:07.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:21:07.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.347343 -999.00  +12.90  12.75     97  +12.50 1 3 1 3 1   888    0 0.44 0.33 ----- 12.6 12.8 98.7 16.3 14.1 -1.3 14.1 -0.3 14.0 -0.6 14.2 -0.7
2026-04-11T10:21:07.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:21:07.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:21:07.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.347343
2026-04-11T10:21:07.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:21:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:21:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:21:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:21:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:21:07.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:20:36', tmtdew=0.14478, humidity=98.9815, cloud=0.0, wind=25.123, temperature=13.3349, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:20:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:21:07.582 [DEBUG] [Thread-168173] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:21: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-04-11T10:21:07.674 [DEBUG] [Thread-168176] [transport.py] [_log()] starting thread (client mode): 0xb0fcd330
2026-04-11T10:21:07.674 [DEBUG] [Thread-168176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:21:07.689 [DEBUG] [Thread-168176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:21:07.689 [INFO] [Thread-168176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:21:07.696 [DEBUG] [Thread-168176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] client lang: <none>
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] server lang: <none>
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] kex follows: False
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] Compression: none
2026-04-11T10:21:07.697 [DEBUG] [Thread-168176] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:21:07.756 [DEBUG] [Thread-168176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:21:07.757 [DEBUG] [Thread-168176] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:21:07.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:21:07.758 [DEBUG] [Thread-168176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:21:07.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:21:07.814 [DEBUG] [Thread-168176] [transport.py] [_log()] userauth is OK
2026-04-11T10:21:07.814 [DEBUG] [Thread-168176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:21:07.814 [DEBUG] [Thread-168176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:21:07.814 [DEBUG] [Thread-168176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:21:07.814 [DEBUG] [Thread-168176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:21:07.830 [INFO] [Thread-168176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:21:07.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:21:07.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:21:08.677 [DEBUG] [Thread-168176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:21:08.677 [DEBUG] [Thread-168176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:21:08.725 [DEBUG] [Thread-168176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:21:08.726 [DEBUG] [Thread-168176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:21:08.735 [DEBUG] [Thread-168176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:21:08.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:21:08.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:21:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:21:08.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:21:08.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:21:08.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:21:08.772 [DEBUG] [Thread-168176] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:21:11.098 [DEBUG] [Thread-168178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:26.153 [DEBUG] [Thread-168179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:35.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:35.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:38.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:21:38.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:21:38.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-04-11T10:21:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 21, 11), 0.07753, 99.4576, 0.0, 18.5443, 12.934, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:21:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:21:11
2026-04-11T10:21:40.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:21:40.745 [DEBUG] [Thread-168180] [transport.py] [_log()] starting thread (client mode): 0xa7951c00
2026-04-11T10:21:40.745 [DEBUG] [Thread-168180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:21:40.762 [DEBUG] [Thread-168180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:21:40.762 [INFO] [Thread-168180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:40.765 [DEBUG] [Thread-168180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] client lang: <none>
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] server lang: <none>
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] kex follows: False
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] Compression: none
2026-04-11T10:21:40.766 [DEBUG] [Thread-168180] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:21:40.783 [DEBUG] [Thread-168180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:21:40.784 [DEBUG] [Thread-168180] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:21:40.784 [DEBUG] [Thread-168180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:21:40.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:21:40.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:21:40.786 [DEBUG] [Thread-168180] [transport.py] [_log()] userauth is OK
2026-04-11T10:21:40.786 [DEBUG] [Thread-168180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:21:40.787 [DEBUG] [Thread-168180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:21:40.787 [DEBUG] [Thread-168180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:21:40.787 [DEBUG] [Thread-168180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:21:40.803 [INFO] [Thread-168180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:21:40.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:21:41.191 [DEBUG] [Thread-168182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:41.509 [DEBUG] [Thread-168180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:21:41.510 [DEBUG] [Thread-168180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:21:41.510 [DEBUG] [Thread-168180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:21:41.552 [DEBUG] [Thread-168180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:21:41.552 [DEBUG] [Thread-168180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:21:41.555 [DEBUG] [Thread-168180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:21:41.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:21:41.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:21:41.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:21:41.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:21:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:21:41.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:21:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:21:41.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:21:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:21:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.347690 -999.00  +12.90  12.56     97  +12.40 1 3 1 3 1   888    0 0.45 0.76 ----- 14.4 12.6 120.9 17.4 14.0 -1.1 14.1 -0.5 14.0 -0.5 14.2 -0.7
2026-04-11T10:21:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:21:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:21:41.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.347690
2026-04-11T10:21:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:21:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:21:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:21:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:21:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:21:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:21:11', tmtdew=0.07753, humidity=99.4576, cloud=0.0, wind=18.5443, temperature=12.934, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:20:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:21:41.585 [DEBUG] [Thread-168180] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:21:41.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:21:41.679 [DEBUG] [Thread-168184] [transport.py] [_log()] starting thread (client mode): 0xb0f6f340
2026-04-11T10:21:41.679 [DEBUG] [Thread-168184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:21:41.693 [DEBUG] [Thread-168184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:21:41.694 [INFO] [Thread-168184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:21:41.701 [DEBUG] [Thread-168184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] client lang: <none>
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] server lang: <none>
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] kex follows: False
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] Compression: none
2026-04-11T10:21:41.702 [DEBUG] [Thread-168184] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:21:41.759 [DEBUG] [Thread-168184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:21:41.760 [DEBUG] [Thread-168184] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:21:41.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:21:41.761 [DEBUG] [Thread-168184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:21:41.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:21:41.815 [DEBUG] [Thread-168184] [transport.py] [_log()] userauth is OK
2026-04-11T10:21:41.815 [DEBUG] [Thread-168184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:21:41.816 [DEBUG] [Thread-168184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:21:41.816 [DEBUG] [Thread-168184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:21:41.816 [DEBUG] [Thread-168184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:21:41.835 [INFO] [Thread-168184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:21:41.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:21:41.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:21:42.679 [DEBUG] [Thread-168184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:21:42.679 [DEBUG] [Thread-168184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:21:42.733 [DEBUG] [Thread-168184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:21:42.733 [DEBUG] [Thread-168184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:21:42.748 [DEBUG] [Thread-168184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:21:42.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:21:42.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-04-11T10:21:42.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:21:42.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:21:42.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:21:42.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:21:42.804 [DEBUG] [Thread-168184] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:21:56.232 [DEBUG] [Thread-168186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:21:59.140 [DEBUG] [Thread-168187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:11.285 [DEBUG] [Thread-168188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:22:12.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:22:12.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-04-11T10:22:14.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 21, 46), 0.14481, 98.9812, 0.0, 20.7482, 13.3347, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:22:14.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:21:46
2026-04-11T10:22:14.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:22:14.688 [DEBUG] [Thread-168189] [transport.py] [_log()] starting thread (client mode): 0xa7950a30
2026-04-11T10:22:14.689 [DEBUG] [Thread-168189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:22:14.709 [DEBUG] [Thread-168189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:22:14.709 [INFO] [Thread-168189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] client lang: <none>
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] server lang: <none>
2026-04-11T10:22:14.712 [DEBUG] [Thread-168189] [transport.py] [_log()] kex follows: False
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] Compression: none
2026-04-11T10:22:14.713 [DEBUG] [Thread-168189] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:22:14.732 [DEBUG] [Thread-168189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:22:14.733 [DEBUG] [Thread-168189] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:22:14.733 [DEBUG] [Thread-168189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:22:14.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:22:14.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:22:14.735 [DEBUG] [Thread-168189] [transport.py] [_log()] userauth is OK
2026-04-11T10:22:14.736 [DEBUG] [Thread-168189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:22:14.736 [DEBUG] [Thread-168189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:22:14.736 [DEBUG] [Thread-168189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:22:14.736 [DEBUG] [Thread-168189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:22:14.761 [INFO] [Thread-168189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:22:14.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:22:15.462 [DEBUG] [Thread-168189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:22:15.462 [DEBUG] [Thread-168189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:22:15.463 [DEBUG] [Thread-168189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:22:15.503 [DEBUG] [Thread-168189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:22:15.504 [DEBUG] [Thread-168189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:22:15.509 [DEBUG] [Thread-168189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:22:15.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:22:15.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:22:15.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:22:15.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:22:15.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:22:15.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:22:15.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:22:15.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:22:15.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:22:15.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.348037 -999.00  +12.90  13.53     97  +12.40 1 3 1 3 1   888    0 0.47 0.97 ----- 16.0 13.5 110.7 20.2 14.0 -1.0 14.1 -0.4 13.9 -0.5 14.2 -0.6
2026-04-11T10:22:15.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:22:15.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:22:15.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.348037
2026-04-11T10:22:15.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:22:15.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:22:15.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:22:15.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:22:15.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:22:15.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:21:46', tmtdew=0.14481, humidity=98.9812, cloud=0.0, wind=20.7482, temperature=13.3347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:21:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:22:15.536 [DEBUG] [Thread-168189] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:22:15.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:22:15.629 [DEBUG] [Thread-168192] [transport.py] [_log()] starting thread (client mode): 0xae52f280
2026-04-11T10:22:15.629 [DEBUG] [Thread-168192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:22:15.644 [DEBUG] [Thread-168192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:22:15.645 [INFO] [Thread-168192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:15.653 [DEBUG] [Thread-168192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] client lang: <none>
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] server lang: <none>
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] kex follows: False
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:22:15.654 [DEBUG] [Thread-168192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:22:15.655 [DEBUG] [Thread-168192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:22:15.655 [DEBUG] [Thread-168192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:22:15.655 [DEBUG] [Thread-168192] [transport.py] [_log()] Compression: none
2026-04-11T10:22:15.655 [DEBUG] [Thread-168192] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:22:15.721 [DEBUG] [Thread-168192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:22:15.721 [DEBUG] [Thread-168192] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:22:15.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:22:15.723 [DEBUG] [Thread-168192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:22:15.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:22:15.783 [DEBUG] [Thread-168192] [transport.py] [_log()] userauth is OK
2026-04-11T10:22:15.784 [DEBUG] [Thread-168192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:22:15.784 [DEBUG] [Thread-168192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:22:15.784 [DEBUG] [Thread-168192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:22:15.784 [DEBUG] [Thread-168192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:22:15.812 [INFO] [Thread-168192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:22:15.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:22:15.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:22:16.672 [DEBUG] [Thread-168192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:22:16.672 [DEBUG] [Thread-168192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:22:16.720 [DEBUG] [Thread-168192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:22:16.720 [DEBUG] [Thread-168192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:22:16.730 [DEBUG] [Thread-168192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:22:16.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:22:16.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-04-11T10:22:16.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-04-11T10:22:16.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:22:16.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:22:16.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:22:16.775 [DEBUG] [Thread-168192] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:22:26.326 [DEBUG] [Thread-168194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:35.689 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:35.690 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:41.375 [DEBUG] [Thread-168195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:46.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:22:46.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:22:46.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-04-11T10:22:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 22, 22), 0.07498, 99.4741, 0.0, 18.2452, 12.934, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:22:48.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:22:22
2026-04-11T10:22:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:22:48.600 [DEBUG] [Thread-168196] [transport.py] [_log()] starting thread (client mode): 0xae51bf40
2026-04-11T10:22:48.601 [DEBUG] [Thread-168196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:22:48.620 [DEBUG] [Thread-168196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:22:48.620 [INFO] [Thread-168196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:22:48.625 [DEBUG] [Thread-168196] [transport.py] [_log()] client lang: <none>
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] server lang: <none>
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] kex follows: False
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] Compression: none
2026-04-11T10:22:48.626 [DEBUG] [Thread-168196] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:22:48.645 [DEBUG] [Thread-168196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:22:48.645 [DEBUG] [Thread-168196] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:22:48.646 [DEBUG] [Thread-168196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:22:48.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:22:48.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:22:48.648 [DEBUG] [Thread-168196] [transport.py] [_log()] userauth is OK
2026-04-11T10:22:48.648 [DEBUG] [Thread-168196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:22:48.648 [DEBUG] [Thread-168196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:22:48.648 [DEBUG] [Thread-168196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:22:48.648 [DEBUG] [Thread-168196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:22:48.660 [INFO] [Thread-168196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:22:48.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:22:49.414 [DEBUG] [Thread-168196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:22:49.414 [DEBUG] [Thread-168196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:22:49.414 [DEBUG] [Thread-168196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:22:49.455 [DEBUG] [Thread-168196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:22:49.455 [DEBUG] [Thread-168196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:22:49.458 [DEBUG] [Thread-168196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:22:49.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:22:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:22:49.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:22:49.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:22:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:22:49.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:22:49.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:22:49.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:22:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:22:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.348732 -999.00  +12.90  14.07     97  +12.40 1 3 1 3 1   888    0 0.46 0.86 ----- 14.9 14.1 78.6 18.7 13.9 -1.0 14.1 -0.3 13.9 -0.6 14.2 -0.8
2026-04-11T10:22:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:22:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:22:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.348732
2026-04-11T10:22:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:22:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:22:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:22:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:22:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:22:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:22:22', tmtdew=0.07498, humidity=99.4741, cloud=0.0, wind=18.2452, temperature=12.934, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:22:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:22:49.475 [DEBUG] [Thread-168196] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:22:49.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:22:49.572 [DEBUG] [Thread-168199] [transport.py] [_log()] starting thread (client mode): 0xa7950910
2026-04-11T10:22:49.572 [DEBUG] [Thread-168199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:22:49.586 [DEBUG] [Thread-168199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:22:49.586 [INFO] [Thread-168199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] client lang: <none>
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] server lang: <none>
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] kex follows: False
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:22:49.594 [DEBUG] [Thread-168199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:22:49.595 [DEBUG] [Thread-168199] [transport.py] [_log()] Compression: none
2026-04-11T10:22:49.595 [DEBUG] [Thread-168199] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:22:49.652 [DEBUG] [Thread-168199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:22:49.653 [DEBUG] [Thread-168199] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:22:49.653 [DEBUG] [Thread-168199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:22:49.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:22:49.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:22:49.708 [DEBUG] [Thread-168199] [transport.py] [_log()] userauth is OK
2026-04-11T10:22:49.708 [DEBUG] [Thread-168199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:22:49.708 [DEBUG] [Thread-168199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:22:49.708 [DEBUG] [Thread-168199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:22:49.708 [DEBUG] [Thread-168199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:22:49.731 [INFO] [Thread-168199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:22:49.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:22:49.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:22:50.581 [DEBUG] [Thread-168199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:22:50.582 [DEBUG] [Thread-168199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:22:50.630 [DEBUG] [Thread-168199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:22:50.630 [DEBUG] [Thread-168199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:22:50.639 [DEBUG] [Thread-168199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:22:50.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:22:50.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-04-11T10:22:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:22:50.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:22:50.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:22:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:22:50.673 [DEBUG] [Thread-168199] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:22:56.411 [DEBUG] [Thread-168201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:22:59.168 [DEBUG] [Thread-168202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:11.469 [DEBUG] [Thread-168203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:23:20.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:23:20.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-04-11T10:23:21.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 22, 57), 0.122425, 99.4905, 0.0, 17.9446, 12.9339, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:23:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:22:57
2026-04-11T10:23:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:23:22.500 [DEBUG] [Thread-168204] [transport.py] [_log()] starting thread (client mode): 0xae51bfd0
2026-04-11T10:23:22.500 [DEBUG] [Thread-168204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:23:22.513 [DEBUG] [Thread-168204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:23:22.513 [INFO] [Thread-168204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] client lang: <none>
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] server lang: <none>
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] kex follows: False
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] Compression: none
2026-04-11T10:23:22.515 [DEBUG] [Thread-168204] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:23:22.533 [DEBUG] [Thread-168204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:23:22.533 [DEBUG] [Thread-168204] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:23:22.534 [DEBUG] [Thread-168204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:23:22.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:23:22.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:23:22.535 [DEBUG] [Thread-168204] [transport.py] [_log()] userauth is OK
2026-04-11T10:23:22.536 [DEBUG] [Thread-168204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:23:22.536 [DEBUG] [Thread-168204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:23:22.536 [DEBUG] [Thread-168204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:23:22.536 [DEBUG] [Thread-168204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:23:22.553 [INFO] [Thread-168204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:23:22.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:23:23.324 [DEBUG] [Thread-168204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:23:23.325 [DEBUG] [Thread-168204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:23:23.325 [DEBUG] [Thread-168204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:23:23.365 [DEBUG] [Thread-168204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:23:23.365 [DEBUG] [Thread-168204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:23:23.369 [DEBUG] [Thread-168204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:23:23.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:23:23.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:23:23.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:23:23.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:23:23.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:23:23.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:23:23.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:23:23.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:23:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:23:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.349079 -999.00  +12.80  18.26     97  +12.40 1 3 1 3 1   888    0 0.46 0.58 ----- 16.0 18.3 116.3 23.4 13.9 -1.6 14.0 -0.5 13.9 -0.6 14.2 -0.7
2026-04-11T10:23:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:23:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:23:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.349079
2026-04-11T10:23:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:23:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:23:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:23:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:23:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:23:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:22:57', tmtdew=0.122425, humidity=99.4905, cloud=0.0, wind=17.9446, temperature=12.9339, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:22:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:23:23.397 [DEBUG] [Thread-168204] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:23:23.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:23:23.491 [DEBUG] [Thread-168207] [transport.py] [_log()] starting thread (client mode): 0xae52fbb0
2026-04-11T10:23:23.491 [DEBUG] [Thread-168207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:23:23.506 [DEBUG] [Thread-168207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:23:23.506 [INFO] [Thread-168207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:23:23.514 [DEBUG] [Thread-168207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:23:23.514 [DEBUG] [Thread-168207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:23:23.514 [DEBUG] [Thread-168207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] client lang: <none>
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] server lang: <none>
2026-04-11T10:23:23.515 [DEBUG] [Thread-168207] [transport.py] [_log()] kex follows: False
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] Compression: none
2026-04-11T10:23:23.516 [DEBUG] [Thread-168207] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:23:23.573 [DEBUG] [Thread-168207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:23:23.574 [DEBUG] [Thread-168207] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:23:23.574 [DEBUG] [Thread-168207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:23:23.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:23:23.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:23:23.629 [DEBUG] [Thread-168207] [transport.py] [_log()] userauth is OK
2026-04-11T10:23:23.629 [DEBUG] [Thread-168207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:23:23.629 [DEBUG] [Thread-168207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:23:23.629 [DEBUG] [Thread-168207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:23:23.629 [DEBUG] [Thread-168207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:23:23.648 [INFO] [Thread-168207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:23:23.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:23:23.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:23:24.494 [DEBUG] [Thread-168207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:23:24.494 [DEBUG] [Thread-168207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:23:24.542 [DEBUG] [Thread-168207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:23:24.542 [DEBUG] [Thread-168207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:23:24.552 [DEBUG] [Thread-168207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:23:24.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:23: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')
2026-04-11T10:23:24.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-04-11T10:23:24.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:23:24.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:23:24.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:23:24.589 [DEBUG] [Thread-168207] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:23:26.511 [DEBUG] [Thread-168209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:35.830 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:35.832 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:41.564 [DEBUG] [Thread-168210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:23:54.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:23:54.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-04-11T10:23:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 23, 33), 0.15509, 98.9146, 0.0, 22.7945, 13.2351, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:23:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:23:33
2026-04-11T10:23:56.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:23:56.483 [DEBUG] [Thread-168211] [transport.py] [_log()] starting thread (client mode): 0xae51b670
2026-04-11T10:23:56.483 [DEBUG] [Thread-168211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:23:56.505 [DEBUG] [Thread-168211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:23:56.505 [INFO] [Thread-168211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] client lang: <none>
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] server lang: <none>
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] kex follows: False
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] Compression: none
2026-04-11T10:23:56.509 [DEBUG] [Thread-168211] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:23:56.531 [DEBUG] [Thread-168211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:23:56.532 [DEBUG] [Thread-168211] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:23:56.533 [DEBUG] [Thread-168211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:23:56.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:23:56.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:23:56.535 [DEBUG] [Thread-168211] [transport.py] [_log()] userauth is OK
2026-04-11T10:23:56.535 [DEBUG] [Thread-168211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:23:56.535 [DEBUG] [Thread-168211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:23:56.535 [DEBUG] [Thread-168211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:23:56.536 [DEBUG] [Thread-168211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:23:56.573 [INFO] [Thread-168211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:23:56.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:23:56.599 [DEBUG] [Thread-168213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:23:57.351 [DEBUG] [Thread-168211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:23:57.351 [DEBUG] [Thread-168211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:23:57.351 [DEBUG] [Thread-168211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:23:57.392 [DEBUG] [Thread-168211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:23:57.392 [DEBUG] [Thread-168211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:23:57.395 [DEBUG] [Thread-168211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:23:57.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:23:57.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:23:57.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:23:57.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:23:57.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:23:57.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:23:57.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:23:57.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:23:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:23:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.349426 -999.00  +12.80   9.50     97  +12.40 1 3 1 3 1   888    0 0.44 0.28 ----- 11.2 9.5 108.2 22.6 13.9 -1.1 14.0 -0.4 13.9 -0.4 14.2 -0.6
2026-04-11T10:23:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:23:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:23:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.349426
2026-04-11T10:23:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:23:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:23:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:23:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:23:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:23:57.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:23:33', tmtdew=0.15509, humidity=98.9146, cloud=0.0, wind=22.7945, temperature=13.2351, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:23:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:23:57.422 [DEBUG] [Thread-168211] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:23:57.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:23:57.516 [DEBUG] [Thread-168215] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-11T10:23:57.516 [DEBUG] [Thread-168215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:23:57.534 [DEBUG] [Thread-168215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:23:57.534 [INFO] [Thread-168215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:23:57.544 [DEBUG] [Thread-168215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] client lang: <none>
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] server lang: <none>
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] kex follows: False
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:23:57.545 [DEBUG] [Thread-168215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:23:57.546 [DEBUG] [Thread-168215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:23:57.546 [DEBUG] [Thread-168215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:23:57.546 [DEBUG] [Thread-168215] [transport.py] [_log()] Compression: none
2026-04-11T10:23:57.546 [DEBUG] [Thread-168215] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:23:57.602 [DEBUG] [Thread-168215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:23:57.602 [DEBUG] [Thread-168215] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:23:57.603 [DEBUG] [Thread-168215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:23:57.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:23:57.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:23:57.658 [DEBUG] [Thread-168215] [transport.py] [_log()] userauth is OK
2026-04-11T10:23:57.658 [DEBUG] [Thread-168215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:23:57.658 [DEBUG] [Thread-168215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:23:57.658 [DEBUG] [Thread-168215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:23:57.658 [DEBUG] [Thread-168215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:23:57.677 [INFO] [Thread-168215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:23:57.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:23:57.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:23:58.500 [DEBUG] [Thread-168215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:23:58.501 [DEBUG] [Thread-168215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:23:58.548 [DEBUG] [Thread-168215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:23:58.548 [DEBUG] [Thread-168215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:23:58.558 [DEBUG] [Thread-168215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:23:58.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:23:58.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-04-11T10:23:58.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-04-11T10:23:58.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:23:58.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:23:58.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:23:58.596 [DEBUG] [Thread-168215] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:23:59.196 [DEBUG] [Thread-168217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:11.632 [DEBUG] [Thread-168218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:26.686 [DEBUG] [Thread-168219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:28.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:24:28.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:24:28.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-04-11T10:24:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 24, 8), 0.072435, 99.4905, 0.0, 18.8618, 12.8838, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:24:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:24:08
2026-04-11T10:24:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:24:30.446 [DEBUG] [Thread-168220] [transport.py] [_log()] starting thread (client mode): 0xae5f29e0
2026-04-11T10:24:30.446 [DEBUG] [Thread-168220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:24:30.466 [DEBUG] [Thread-168220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:24:30.467 [INFO] [Thread-168220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:24:30.470 [DEBUG] [Thread-168220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] client lang: <none>
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] server lang: <none>
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] kex follows: False
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] Compression: none
2026-04-11T10:24:30.471 [DEBUG] [Thread-168220] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:24:30.489 [DEBUG] [Thread-168220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:24:30.490 [DEBUG] [Thread-168220] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:24:30.491 [DEBUG] [Thread-168220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:24:30.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:24:30.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:24:30.493 [DEBUG] [Thread-168220] [transport.py] [_log()] userauth is OK
2026-04-11T10:24:30.493 [DEBUG] [Thread-168220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:24:30.494 [DEBUG] [Thread-168220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:24:30.494 [DEBUG] [Thread-168220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:24:30.494 [DEBUG] [Thread-168220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:24:30.508 [INFO] [Thread-168220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:24:30.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:24:31.263 [DEBUG] [Thread-168220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:24:31.263 [DEBUG] [Thread-168220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:24:31.264 [DEBUG] [Thread-168220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:24:31.304 [DEBUG] [Thread-168220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:24:31.304 [DEBUG] [Thread-168220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:24:31.308 [DEBUG] [Thread-168220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:24:31.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:24:31.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:24:31.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:24:31.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:24:31.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:24:31.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:24:31.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:24:31.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:24:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:24:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.350121 -999.00  +12.90  14.29     97  +12.40 1 3 1 3 1   888    0 0.44 0.19 ----- 14.2 14.3 78.9 19.1 13.9 -1.1 14.0 -0.4 13.9 -0.6 14.2 -0.8
2026-04-11T10:24:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:24:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:24:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.350121
2026-04-11T10:24:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:24:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:24:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:24:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:24:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:24:31.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:24:08', tmtdew=0.072435, humidity=99.4905, cloud=0.0, wind=18.8618, temperature=12.8838, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:24:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:24:31.336 [DEBUG] [Thread-168220] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:24:31.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:24:31.437 [DEBUG] [Thread-168223] [transport.py] [_log()] starting thread (client mode): 0xb0fcf580
2026-04-11T10:24:31.437 [DEBUG] [Thread-168223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:24:31.452 [DEBUG] [Thread-168223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:24:31.452 [INFO] [Thread-168223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:24:31.459 [DEBUG] [Thread-168223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] client lang: <none>
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] server lang: <none>
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] kex follows: False
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:24:31.460 [DEBUG] [Thread-168223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:24:31.461 [DEBUG] [Thread-168223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:24:31.461 [DEBUG] [Thread-168223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:24:31.461 [DEBUG] [Thread-168223] [transport.py] [_log()] Compression: none
2026-04-11T10:24:31.461 [DEBUG] [Thread-168223] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:24:31.518 [DEBUG] [Thread-168223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:24:31.518 [DEBUG] [Thread-168223] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:24:31.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:24:31.520 [DEBUG] [Thread-168223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:24:31.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:24:31.574 [DEBUG] [Thread-168223] [transport.py] [_log()] userauth is OK
2026-04-11T10:24:31.574 [DEBUG] [Thread-168223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:24:31.574 [DEBUG] [Thread-168223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:24:31.574 [DEBUG] [Thread-168223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:24:31.574 [DEBUG] [Thread-168223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:24:31.588 [INFO] [Thread-168223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:24:31.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:24:31.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:24:32.410 [DEBUG] [Thread-168223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:24:32.411 [DEBUG] [Thread-168223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:24:32.459 [DEBUG] [Thread-168223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:24:32.459 [DEBUG] [Thread-168223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:24:32.469 [DEBUG] [Thread-168223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:24:32.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:24:32.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-04-11T10:24:32.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-04-11T10:24:32.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:24:32.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:24:32.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:24:32.506 [DEBUG] [Thread-168223] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:24:35.972 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:35.974 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:41.724 [DEBUG] [Thread-168225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:56.777 [DEBUG] [Thread-168226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:24:59.223 [DEBUG] [Thread-168227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:25:02.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:25:02.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-04-11T10:25:03.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 24, 44), 0.13974, 99.0141, 0.0, 19.831, 13.3677, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:25:03.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:24:44
2026-04-11T10:25:04.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:25:04.329 [DEBUG] [Thread-168228] [transport.py] [_log()] starting thread (client mode): 0xb0fcd4b0
2026-04-11T10:25:04.329 [DEBUG] [Thread-168228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:25:04.350 [DEBUG] [Thread-168228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:25:04.350 [INFO] [Thread-168228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] client lang: <none>
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] server lang: <none>
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] kex follows: False
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] Compression: none
2026-04-11T10:25:04.353 [DEBUG] [Thread-168228] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:25:04.362 [DEBUG] [Thread-168228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:25:04.362 [DEBUG] [Thread-168228] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:25:04.363 [DEBUG] [Thread-168228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:25:04.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:25:04.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:25:04.365 [DEBUG] [Thread-168228] [transport.py] [_log()] userauth is OK
2026-04-11T10:25:04.365 [DEBUG] [Thread-168228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:25:04.365 [DEBUG] [Thread-168228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:25:04.365 [DEBUG] [Thread-168228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:25:04.365 [DEBUG] [Thread-168228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:25:04.390 [INFO] [Thread-168228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:25:04.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:25:07.482 [DEBUG] [Thread-168228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:25:07.483 [DEBUG] [Thread-168228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:25:07.483 [DEBUG] [Thread-168228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:25:07.524 [DEBUG] [Thread-168228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:25:07.524 [DEBUG] [Thread-168228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:25:07.527 [DEBUG] [Thread-168228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:25:07.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:25:07.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:25:07.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:25:07.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:25:07.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:25:07.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:25:07.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:25:07.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:25:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:25:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.350121 -999.00  +12.90  14.29     97  +12.40 1 3 1 3 1   888    0 0.44 0.19 ----- 14.2 14.3 78.9 19.1 13.9 -1.1 14.0 -0.4 13.9 -0.6 14.2 -0.8
2026-04-11T10:25:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:25:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:25:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.350121
2026-04-11T10:25:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:25:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:25:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:25:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:25:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:25:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:24:44', tmtdew=0.13974, humidity=99.0141, cloud=0.0, wind=19.831, temperature=13.3677, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:24:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:25:07.640 [DEBUG] [Thread-168228] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:25:07.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:25:07.746 [DEBUG] [Thread-168231] [transport.py] [_log()] starting thread (client mode): 0xae5f2170
2026-04-11T10:25:07.746 [DEBUG] [Thread-168231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:25:07.760 [DEBUG] [Thread-168231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:25:07.760 [INFO] [Thread-168231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] client lang: <none>
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] server lang: <none>
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] kex follows: False
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:25:07.768 [DEBUG] [Thread-168231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:25:07.769 [DEBUG] [Thread-168231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:25:07.769 [DEBUG] [Thread-168231] [transport.py] [_log()] Compression: none
2026-04-11T10:25:07.769 [DEBUG] [Thread-168231] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:25:07.825 [DEBUG] [Thread-168231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:25:07.825 [DEBUG] [Thread-168231] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:25:07.825 [DEBUG] [Thread-168231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:25:07.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:25:07.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:25:07.883 [DEBUG] [Thread-168231] [transport.py] [_log()] userauth is OK
2026-04-11T10:25:07.883 [DEBUG] [Thread-168231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:25:07.883 [DEBUG] [Thread-168231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:25:07.883 [DEBUG] [Thread-168231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:25:07.883 [DEBUG] [Thread-168231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:25:07.906 [INFO] [Thread-168231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:25:07.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:25:07.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:25:08.759 [DEBUG] [Thread-168231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:25:08.760 [DEBUG] [Thread-168231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:25:08.808 [DEBUG] [Thread-168231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:25:08.809 [DEBUG] [Thread-168231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:25:08.819 [DEBUG] [Thread-168231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:25:08.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:25:08.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-04-11T10:25:08.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:25:08.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:25:08.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:25:08.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:25:08.860 [DEBUG] [Thread-168231] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:25:11.813 [DEBUG] [Thread-168233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:26.876 [DEBUG] [Thread-168234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:36.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:36.113 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:38.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:25:38.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:25:38.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:25:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 25, 19), 0.119885, 99.507, 0.0, 18.7031, 12.9504, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:25:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:25:19
2026-04-11T10:25:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:25:40.668 [DEBUG] [Thread-168235] [transport.py] [_log()] starting thread (client mode): 0xb0fcd300
2026-04-11T10:25:40.668 [DEBUG] [Thread-168235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:25:40.688 [DEBUG] [Thread-168235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:25:40.689 [INFO] [Thread-168235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:25:40.692 [DEBUG] [Thread-168235] [transport.py] [_log()] client lang: <none>
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] server lang: <none>
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] kex follows: False
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] Compression: none
2026-04-11T10:25:40.693 [DEBUG] [Thread-168235] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:25:40.711 [DEBUG] [Thread-168235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:25:40.712 [DEBUG] [Thread-168235] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:25:40.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:25:40.713 [DEBUG] [Thread-168235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:25:40.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:25:40.715 [DEBUG] [Thread-168235] [transport.py] [_log()] userauth is OK
2026-04-11T10:25:40.715 [DEBUG] [Thread-168235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:25:40.715 [DEBUG] [Thread-168235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:25:40.715 [DEBUG] [Thread-168235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:25:40.716 [DEBUG] [Thread-168235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:25:40.740 [INFO] [Thread-168235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:25:40.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:25:41.521 [DEBUG] [Thread-168235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:25:41.521 [DEBUG] [Thread-168235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:25:41.522 [DEBUG] [Thread-168235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:25:41.562 [DEBUG] [Thread-168235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:25:41.563 [DEBUG] [Thread-168235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:25:41.565 [DEBUG] [Thread-168235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:25:41.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:25:41.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:25:41.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:25:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:25:41.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:25:41.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:25:41.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:25:41.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:25:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:25:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.350468 -999.00  +12.90   9.76     97  +12.40 1 3 1 3 1   888    0 0.46 0.54 ----- 12.4 9.8 135.8 23.3 13.9 -0.9 14.0 -0.5 13.9 -0.5 14.2 -0.7
2026-04-11T10:25:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:25:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:25:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.350468
2026-04-11T10:25:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:25:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:25:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:25:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:25:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:25:41.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:25:19', tmtdew=0.119885, humidity=99.507, cloud=0.0, wind=18.7031, temperature=12.9504, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:24:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:25:41.590 [DEBUG] [Thread-168235] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:25:41.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:25:41.686 [DEBUG] [Thread-168238] [transport.py] [_log()] starting thread (client mode): 0xae5178b0
2026-04-11T10:25:41.687 [DEBUG] [Thread-168238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:25:41.701 [DEBUG] [Thread-168238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:25:41.701 [INFO] [Thread-168238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:25:41.709 [DEBUG] [Thread-168238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:25:41.709 [DEBUG] [Thread-168238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:25:41.710 [DEBUG] [Thread-168238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] client lang: <none>
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] server lang: <none>
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] kex follows: False
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] Compression: none
2026-04-11T10:25:41.711 [DEBUG] [Thread-168238] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:25:41.767 [DEBUG] [Thread-168238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:25:41.768 [DEBUG] [Thread-168238] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:25:41.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:25:41.769 [DEBUG] [Thread-168238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:25:41.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:25:41.823 [DEBUG] [Thread-168238] [transport.py] [_log()] userauth is OK
2026-04-11T10:25:41.823 [DEBUG] [Thread-168238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:25:41.823 [DEBUG] [Thread-168238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:25:41.824 [DEBUG] [Thread-168238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:25:41.824 [DEBUG] [Thread-168238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:25:41.843 [INFO] [Thread-168238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:25:41.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:25:41.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:25:41.915 [DEBUG] [Thread-168240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:42.674 [DEBUG] [Thread-168238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:25:42.674 [DEBUG] [Thread-168238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:25:42.722 [DEBUG] [Thread-168238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:25:42.723 [DEBUG] [Thread-168238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:25:42.733 [DEBUG] [Thread-168238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:25:42.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:25:42.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-04-11T10:25:42.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:25:42.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:25:42.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:25:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:25:42.776 [DEBUG] [Thread-168238] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:25:56.974 [DEBUG] [Thread-168241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:25:59.267 [DEBUG] [Thread-168242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:12.014 [DEBUG] [Thread-168243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:12.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:26:12.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:26:12.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:26:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 25, 54), 0.14489, 98.9807, 0.0, 23.6765, 13.3344, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:26:14.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:25:54
2026-04-11T10:26:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:26:14.644 [DEBUG] [Thread-168244] [transport.py] [_log()] starting thread (client mode): 0xae5f32e0
2026-04-11T10:26:14.644 [DEBUG] [Thread-168244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:26:14.665 [DEBUG] [Thread-168244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:26:14.665 [INFO] [Thread-168244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] client lang: <none>
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] server lang: <none>
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] kex follows: False
2026-04-11T10:26:14.667 [DEBUG] [Thread-168244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:26:14.668 [DEBUG] [Thread-168244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:26:14.668 [DEBUG] [Thread-168244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:26:14.668 [DEBUG] [Thread-168244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:26:14.668 [DEBUG] [Thread-168244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:26:14.668 [DEBUG] [Thread-168244] [transport.py] [_log()] Compression: none
2026-04-11T10:26:14.668 [DEBUG] [Thread-168244] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:26:14.682 [DEBUG] [Thread-168244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:26:14.683 [DEBUG] [Thread-168244] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:26:14.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:26:14.685 [DEBUG] [Thread-168244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:26:14.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:26:14.687 [DEBUG] [Thread-168244] [transport.py] [_log()] userauth is OK
2026-04-11T10:26:14.687 [DEBUG] [Thread-168244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:26:14.687 [DEBUG] [Thread-168244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:26:14.687 [DEBUG] [Thread-168244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:26:14.688 [DEBUG] [Thread-168244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:26:14.717 [INFO] [Thread-168244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:26:14.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:26:15.499 [DEBUG] [Thread-168244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:26:15.499 [DEBUG] [Thread-168244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:26:15.500 [DEBUG] [Thread-168244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:26:15.540 [DEBUG] [Thread-168244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:26:15.540 [DEBUG] [Thread-168244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:26:15.543 [DEBUG] [Thread-168244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:26:15.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:26:15.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:26:15.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:26:15.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:26:15.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:26:15.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:26:15.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:26:15.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:26:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:26:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.350815 -999.00  +12.90  18.91     97  +12.40 1 3 1 3 1   888    0 0.47 0.83 ----- 14.8 18.9 68.8 22.0 13.9 -1.2 14.0 -0.4 13.9 -0.5 14.2 -0.7
2026-04-11T10:26:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:26:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:26:15.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.350815
2026-04-11T10:26:15.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:26:15.577 [DEBUG] [Thread-168244] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:26:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:26:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:26:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:26:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:26:15.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:25:54', tmtdew=0.14489, humidity=98.9807, cloud=0.0, wind=23.6765, temperature=13.3344, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:25:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:26:15.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:26:15.672 [DEBUG] [Thread-168247] [transport.py] [_log()] starting thread (client mode): 0xae5f3880
2026-04-11T10:26:15.672 [DEBUG] [Thread-168247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:26:15.687 [DEBUG] [Thread-168247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:26:15.688 [INFO] [Thread-168247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:15.695 [DEBUG] [Thread-168247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] client lang: <none>
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] server lang: <none>
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] kex follows: False
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] Compression: none
2026-04-11T10:26:15.696 [DEBUG] [Thread-168247] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:26:15.756 [DEBUG] [Thread-168247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:26:15.757 [DEBUG] [Thread-168247] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:26:15.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:26:15.758 [DEBUG] [Thread-168247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:26:15.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:26:15.821 [DEBUG] [Thread-168247] [transport.py] [_log()] userauth is OK
2026-04-11T10:26:15.822 [DEBUG] [Thread-168247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:26:15.822 [DEBUG] [Thread-168247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:26:15.822 [DEBUG] [Thread-168247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:26:15.822 [DEBUG] [Thread-168247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:26:15.841 [INFO] [Thread-168247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:26:15.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:26:15.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:26:16.658 [DEBUG] [Thread-168247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:26:16.659 [DEBUG] [Thread-168247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:26:16.706 [DEBUG] [Thread-168247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:26:16.707 [DEBUG] [Thread-168247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:26:16.716 [DEBUG] [Thread-168247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:26:16.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:26:16.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-04-11T10:26:16.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-04-11T10:26:16.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:26:16.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:26:16.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:26:16.756 [DEBUG] [Thread-168247] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:26:27.052 [DEBUG] [Thread-168249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:36.254 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:36.255 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:42.106 [DEBUG] [Thread-168250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:46.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:26:46.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:26:46.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:26:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 26, 30), 0.07244, 99.4903, 0.0, 19.6733, 12.9006, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:26:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:26:30
2026-04-11T10:26:48.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:26:48.604 [DEBUG] [Thread-168251] [transport.py] [_log()] starting thread (client mode): 0xb0f6f340
2026-04-11T10:26:48.604 [DEBUG] [Thread-168251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:26:48.625 [DEBUG] [Thread-168251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:26:48.625 [INFO] [Thread-168251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:26:48.628 [DEBUG] [Thread-168251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] client lang: <none>
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] server lang: <none>
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] kex follows: False
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] Compression: none
2026-04-11T10:26:48.629 [DEBUG] [Thread-168251] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:26:48.645 [DEBUG] [Thread-168251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:26:48.646 [DEBUG] [Thread-168251] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:26:48.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:26:48.647 [DEBUG] [Thread-168251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:26:48.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:26:48.649 [DEBUG] [Thread-168251] [transport.py] [_log()] userauth is OK
2026-04-11T10:26:48.649 [DEBUG] [Thread-168251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:26:48.649 [DEBUG] [Thread-168251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:26:48.649 [DEBUG] [Thread-168251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:26:48.649 [DEBUG] [Thread-168251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:26:48.672 [INFO] [Thread-168251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:26:48.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:26:49.413 [DEBUG] [Thread-168251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:26:49.413 [DEBUG] [Thread-168251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:26:49.413 [DEBUG] [Thread-168251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:26:49.454 [DEBUG] [Thread-168251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:26:49.454 [DEBUG] [Thread-168251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:26:49.458 [DEBUG] [Thread-168251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:26:49.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:26:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:26:49.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:26:49.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:26:49.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:26:49.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:26:49.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:26:49.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:26:49.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:26:49.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.351510 -999.00  +12.90   9.22     97  +12.50 1 3 1 3 1   888    0 0.45 0.47 ----- 14.5 9.2 89.8 19.2 14.0 -0.8 14.0 -0.3 13.9 -0.4 14.2 -0.7
2026-04-11T10:26:49.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:26:49.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:26:49.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.351510
2026-04-11T10:26:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:26:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:26:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:26:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:26:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:26:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:26:30', tmtdew=0.07244, humidity=99.4903, cloud=0.0, wind=19.6733, temperature=12.9006, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:26:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:26:49.484 [DEBUG] [Thread-168251] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:26:49.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:26:49.574 [DEBUG] [Thread-168254] [transport.py] [_log()] starting thread (client mode): 0xb0fcf370
2026-04-11T10:26:49.574 [DEBUG] [Thread-168254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:26:49.589 [DEBUG] [Thread-168254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:26:49.589 [INFO] [Thread-168254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:26:49.597 [DEBUG] [Thread-168254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:26:49.598 [DEBUG] [Thread-168254] [transport.py] [_log()] client lang: <none>
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] server lang: <none>
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] kex follows: False
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] Compression: none
2026-04-11T10:26:49.599 [DEBUG] [Thread-168254] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:26:49.655 [DEBUG] [Thread-168254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:26:49.656 [DEBUG] [Thread-168254] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:26:49.657 [DEBUG] [Thread-168254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:26:49.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:26:49.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:26:49.712 [DEBUG] [Thread-168254] [transport.py] [_log()] userauth is OK
2026-04-11T10:26:49.712 [DEBUG] [Thread-168254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:26:49.713 [DEBUG] [Thread-168254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:26:49.713 [DEBUG] [Thread-168254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:26:49.713 [DEBUG] [Thread-168254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:26:49.732 [INFO] [Thread-168254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:26:49.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:26:49.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:26:50.574 [DEBUG] [Thread-168254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:26:50.574 [DEBUG] [Thread-168254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:26:50.622 [DEBUG] [Thread-168254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:26:50.623 [DEBUG] [Thread-168254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:26:50.632 [DEBUG] [Thread-168254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:26:50.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:26:50.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-04-11T10:26:50.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-04-11T10:26:50.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:26:50.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:26:50.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:26:50.669 [DEBUG] [Thread-168254] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:26:57.141 [DEBUG] [Thread-168256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:26:59.306 [DEBUG] [Thread-168257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:12.178 [DEBUG] [Thread-168258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:27:20.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:27:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:27:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 27, 5), 0.072445, 99.4903, 0.0, 16.8685, 12.9172, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:27:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:27:05
2026-04-11T10:27:22.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:27:22.507 [DEBUG] [Thread-168259] [transport.py] [_log()] starting thread (client mode): 0xb0f6fdc0
2026-04-11T10:27:22.507 [DEBUG] [Thread-168259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:27:22.520 [DEBUG] [Thread-168259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:27:22.520 [INFO] [Thread-168259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] client lang: <none>
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] server lang: <none>
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] kex follows: False
2026-04-11T10:27:22.523 [DEBUG] [Thread-168259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:27:22.524 [DEBUG] [Thread-168259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:27:22.524 [DEBUG] [Thread-168259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:27:22.524 [DEBUG] [Thread-168259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:27:22.524 [DEBUG] [Thread-168259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:27:22.524 [DEBUG] [Thread-168259] [transport.py] [_log()] Compression: none
2026-04-11T10:27:22.524 [DEBUG] [Thread-168259] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:27:22.542 [DEBUG] [Thread-168259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:27:22.543 [DEBUG] [Thread-168259] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:27:22.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:27:22.544 [DEBUG] [Thread-168259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:27:22.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:27:22.546 [DEBUG] [Thread-168259] [transport.py] [_log()] userauth is OK
2026-04-11T10:27:22.547 [DEBUG] [Thread-168259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:27:22.547 [DEBUG] [Thread-168259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:27:22.547 [DEBUG] [Thread-168259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:27:22.547 [DEBUG] [Thread-168259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:27:22.572 [INFO] [Thread-168259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:27:22.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:27:23.341 [DEBUG] [Thread-168259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:27:23.341 [DEBUG] [Thread-168259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:27:23.342 [DEBUG] [Thread-168259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:27:23.382 [DEBUG] [Thread-168259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:27:23.383 [DEBUG] [Thread-168259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:27:23.388 [DEBUG] [Thread-168259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:27:23.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:27:23.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:27:23.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:27:23.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:27:23.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:27:23.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:27:23.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:27:23.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:27:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:27:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.351857 -999.00  +12.90  19.12     97  +12.40 1 3 1 3 1   888    0 0.45 0.32 ----- 11.3 19.1 76.2 22.9 14.0 -0.8 14.0 -0.5 13.9 -0.5 14.2 -0.8
2026-04-11T10:27:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:27:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:27:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.351857
2026-04-11T10:27:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:27:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:27:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:27:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:27:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:27:23.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:27:05', tmtdew=0.072445, humidity=99.4903, cloud=0.0, wind=16.8685, temperature=12.9172, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:26:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:27:23.410 [DEBUG] [Thread-168259] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:27:23.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:27:23.502 [DEBUG] [Thread-168262] [transport.py] [_log()] starting thread (client mode): 0xae516c20
2026-04-11T10:27:23.503 [DEBUG] [Thread-168262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:27:23.519 [DEBUG] [Thread-168262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:27:23.519 [INFO] [Thread-168262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:27:23.527 [DEBUG] [Thread-168262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] client lang: <none>
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] server lang: <none>
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] kex follows: False
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] Compression: none
2026-04-11T10:27:23.528 [DEBUG] [Thread-168262] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:27:23.588 [DEBUG] [Thread-168262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:27:23.588 [DEBUG] [Thread-168262] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:27:23.589 [DEBUG] [Thread-168262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:27:23.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:27:23.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:27:23.644 [DEBUG] [Thread-168262] [transport.py] [_log()] userauth is OK
2026-04-11T10:27:23.645 [DEBUG] [Thread-168262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:27:23.645 [DEBUG] [Thread-168262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:27:23.645 [DEBUG] [Thread-168262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:27:23.645 [DEBUG] [Thread-168262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:27:23.665 [INFO] [Thread-168262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:27:23.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:27:23.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:27:24.482 [DEBUG] [Thread-168262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:27:24.482 [DEBUG] [Thread-168262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:27:24.530 [DEBUG] [Thread-168262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:27:24.531 [DEBUG] [Thread-168262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:27:24.540 [DEBUG] [Thread-168262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:27:24.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:27:24.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-04-11T10:27:24.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-04-11T10:27:24.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:27:24.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:27:24.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:27:24.587 [DEBUG] [Thread-168262] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:27:27.215 [DEBUG] [Thread-168264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:36.398 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:36.399 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:42.279 [DEBUG] [Thread-168265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:54.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:27:54.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:27:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:27:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 27, 42), 0.12951, 99.0801, 0.0, 24.1704, 13.268, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:27:55.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:27:42
2026-04-11T10:27:56.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:27:56.399 [DEBUG] [Thread-168266] [transport.py] [_log()] starting thread (client mode): 0xae5179d0
2026-04-11T10:27:56.399 [DEBUG] [Thread-168266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:27:56.420 [DEBUG] [Thread-168266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:27:56.420 [INFO] [Thread-168266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] client lang: <none>
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] server lang: <none>
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] kex follows: False
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] Compression: none
2026-04-11T10:27:56.423 [DEBUG] [Thread-168266] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:27:56.441 [DEBUG] [Thread-168266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:27:56.441 [DEBUG] [Thread-168266] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:27:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:27:56.442 [DEBUG] [Thread-168266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:27:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:27:56.443 [DEBUG] [Thread-168266] [transport.py] [_log()] userauth is OK
2026-04-11T10:27:56.443 [DEBUG] [Thread-168266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:27:56.443 [DEBUG] [Thread-168266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:27:56.443 [DEBUG] [Thread-168266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:27:56.443 [DEBUG] [Thread-168266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:27:56.461 [INFO] [Thread-168266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:27:56.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:27:57.213 [DEBUG] [Thread-168266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:27:57.214 [DEBUG] [Thread-168266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:27:57.214 [DEBUG] [Thread-168266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:27:57.256 [DEBUG] [Thread-168266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:27:57.256 [DEBUG] [Thread-168266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:27:57.259 [DEBUG] [Thread-168266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:27:57.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:27:57.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:27:57.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:27:57.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:27:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:27:57.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:27:57.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:27:57.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:27:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:27:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.352204 -999.00  +12.90  10.80     97  +12.50 1 3 1 3 1   888    0 0.45 0.18 ----- 9.7 10.8 118.6 16.2 14.0 -1.5 14.0 -0.3 13.9 -0.3 14.2 -0.6
2026-04-11T10:27:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:27:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:27:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.352204
2026-04-11T10:27:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:27:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:27:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:27:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:27:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:27:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:27:42', tmtdew=0.12951, humidity=99.0801, cloud=0.0, wind=24.1704, temperature=13.268, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:27:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:27:57.288 [DEBUG] [Thread-168266] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:27:57.315 [DEBUG] [Thread-168269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:27:57.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:27:57.381 [DEBUG] [Thread-168270] [transport.py] [_log()] starting thread (client mode): 0xae5157e0
2026-04-11T10:27:57.381 [DEBUG] [Thread-168270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:27:57.397 [DEBUG] [Thread-168270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:27:57.397 [INFO] [Thread-168270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:27:57.409 [DEBUG] [Thread-168270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:27:57.409 [DEBUG] [Thread-168270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:27:57.409 [DEBUG] [Thread-168270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:27:57.409 [DEBUG] [Thread-168270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] client lang: <none>
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] server lang: <none>
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] kex follows: False
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] Compression: none
2026-04-11T10:27:57.410 [DEBUG] [Thread-168270] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:27:57.473 [DEBUG] [Thread-168270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:27:57.473 [DEBUG] [Thread-168270] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:27:57.474 [DEBUG] [Thread-168270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:27:57.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:27:57.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:27:57.538 [DEBUG] [Thread-168270] [transport.py] [_log()] userauth is OK
2026-04-11T10:27:57.538 [DEBUG] [Thread-168270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:27:57.538 [DEBUG] [Thread-168270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:27:57.539 [DEBUG] [Thread-168270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:27:57.539 [DEBUG] [Thread-168270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:27:57.562 [INFO] [Thread-168270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:27:57.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:27:57.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:27:58.367 [DEBUG] [Thread-168270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:27:58.368 [DEBUG] [Thread-168270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:27:58.416 [DEBUG] [Thread-168270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:27:58.416 [DEBUG] [Thread-168270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:27:58.426 [DEBUG] [Thread-168270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:27:58.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:27:58.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-04-11T10:27:58.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-04-11T10:27:58.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:27:58.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:27:58.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:27:58.465 [DEBUG] [Thread-168270] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:27:59.354 [DEBUG] [Thread-168272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:12.359 [DEBUG] [Thread-168273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:27.397 [DEBUG] [Thread-168274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:28:28.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:28:28.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-04-11T10:28:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 28, 17), 0.114765, 99.54, 0.0, 17.6976, 12.9171, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:28:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:28:17
2026-04-11T10:28:30.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:28:30.512 [DEBUG] [Thread-168275] [transport.py] [_log()] starting thread (client mode): 0xa79b4640
2026-04-11T10:28:30.512 [DEBUG] [Thread-168275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:28:30.534 [DEBUG] [Thread-168275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:28:30.534 [INFO] [Thread-168275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:28:30.537 [DEBUG] [Thread-168275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] client lang: <none>
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] server lang: <none>
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] kex follows: False
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:28:30.538 [DEBUG] [Thread-168275] [transport.py] [_log()] Compression: none
2026-04-11T10:28:30.539 [DEBUG] [Thread-168275] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:28:30.558 [DEBUG] [Thread-168275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:28:30.558 [DEBUG] [Thread-168275] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:28:30.559 [DEBUG] [Thread-168275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:28:30.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:28:30.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:28:30.561 [DEBUG] [Thread-168275] [transport.py] [_log()] userauth is OK
2026-04-11T10:28:30.562 [DEBUG] [Thread-168275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:28:30.562 [DEBUG] [Thread-168275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:28:30.562 [DEBUG] [Thread-168275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:28:30.562 [DEBUG] [Thread-168275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:28:30.579 [INFO] [Thread-168275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:28:30.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:28:31.351 [DEBUG] [Thread-168275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:28:31.351 [DEBUG] [Thread-168275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:28:31.352 [DEBUG] [Thread-168275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:28:31.391 [DEBUG] [Thread-168275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:28:31.391 [DEBUG] [Thread-168275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:28:31.394 [DEBUG] [Thread-168275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:28:31.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:28:31.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:28:31.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:28:31.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:28:31.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:28:31.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:28:31.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:28:31.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:28:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:28:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.352551 -999.00  +12.90  13.44     97  +12.50 1 3 1 3 1   888    0 0.43 -0.22 ----- 13.8 13.4 106.4 17.1 14.0 -0.9 14.0 -0.2 13.9 -0.3 14.2 -0.7
2026-04-11T10:28:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:28:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:28:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.352551
2026-04-11T10:28:31.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:28:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:28:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:28:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:28:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:28:31.424 [DEBUG] [Thread-168275] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:28:31.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:28:17', tmtdew=0.114765, humidity=99.54, cloud=0.0, wind=17.6976, temperature=12.9171, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:27:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:28:31.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:28:31.519 [DEBUG] [Thread-168278] [transport.py] [_log()] starting thread (client mode): 0xa795fe20
2026-04-11T10:28:31.519 [DEBUG] [Thread-168278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:28:31.535 [DEBUG] [Thread-168278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:28:31.535 [INFO] [Thread-168278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:28:31.542 [DEBUG] [Thread-168278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:28:31.543 [DEBUG] [Thread-168278] [transport.py] [_log()] client lang: <none>
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] server lang: <none>
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] kex follows: False
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:28:31.544 [DEBUG] [Thread-168278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:28:31.545 [DEBUG] [Thread-168278] [transport.py] [_log()] Compression: none
2026-04-11T10:28:31.545 [DEBUG] [Thread-168278] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:28:31.601 [DEBUG] [Thread-168278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:28:31.602 [DEBUG] [Thread-168278] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:28:31.602 [DEBUG] [Thread-168278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:28:31.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:28:31.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:28:31.661 [DEBUG] [Thread-168278] [transport.py] [_log()] userauth is OK
2026-04-11T10:28:31.661 [DEBUG] [Thread-168278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:28:31.661 [DEBUG] [Thread-168278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:28:31.661 [DEBUG] [Thread-168278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:28:31.661 [DEBUG] [Thread-168278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:28:31.677 [INFO] [Thread-168278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:28:31.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:28:31.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:28:32.524 [DEBUG] [Thread-168278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:28:32.524 [DEBUG] [Thread-168278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:28:32.572 [DEBUG] [Thread-168278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:28:32.573 [DEBUG] [Thread-168278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:28:32.582 [DEBUG] [Thread-168278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:28:32.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:28:32.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:28:32.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-04-11T10:28:32.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:28:32.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:28:32.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:28:32.620 [DEBUG] [Thread-168278] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:28:36.538 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:36.540 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:42.434 [DEBUG] [Thread-168280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:57.489 [DEBUG] [Thread-168281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:28:59.386 [DEBUG] [Thread-168282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:29:02.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:29:02.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:29:03.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 28, 53), 0.15003, 98.9474, 0.0, 23.8882, 13.268, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:29:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:28:53
2026-04-11T10:29:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:29:04.507 [DEBUG] [Thread-168283] [transport.py] [_log()] starting thread (client mode): 0xa79b4550
2026-04-11T10:29:04.507 [DEBUG] [Thread-168283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:29:04.527 [DEBUG] [Thread-168283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:29:04.527 [INFO] [Thread-168283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:29:04.530 [DEBUG] [Thread-168283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] client lang: <none>
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] server lang: <none>
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] kex follows: False
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:29:04.531 [DEBUG] [Thread-168283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:29:04.532 [DEBUG] [Thread-168283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:29:04.532 [DEBUG] [Thread-168283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:29:04.532 [DEBUG] [Thread-168283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:29:04.532 [DEBUG] [Thread-168283] [transport.py] [_log()] Compression: none
2026-04-11T10:29:04.532 [DEBUG] [Thread-168283] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:29:04.551 [DEBUG] [Thread-168283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:29:04.551 [DEBUG] [Thread-168283] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:29:04.553 [DEBUG] [Thread-168283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:29:04.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:29:04.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:29:04.555 [DEBUG] [Thread-168283] [transport.py] [_log()] userauth is OK
2026-04-11T10:29:04.556 [DEBUG] [Thread-168283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:29:04.556 [DEBUG] [Thread-168283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:29:04.556 [DEBUG] [Thread-168283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:29:04.556 [DEBUG] [Thread-168283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:29:04.590 [INFO] [Thread-168283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:29:04.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:29:05.358 [DEBUG] [Thread-168283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:29:05.359 [DEBUG] [Thread-168283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:29:05.359 [DEBUG] [Thread-168283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:29:05.400 [DEBUG] [Thread-168283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:29:05.400 [DEBUG] [Thread-168283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:29:05.403 [DEBUG] [Thread-168283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:29:05.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:29:05.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:29:05.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:29:05.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:29:05.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:29:05.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:29:05.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:29:05.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:29:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:29:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.352898 -999.00  +12.90   8.06     97  +12.50 1 3 1 3 1   888    0 0.43 -0.38 ----- 10.7 8.1 137.2 17.3 14.0 -0.9 14.1 -0.3 13.9 -0.5 14.2 -0.6
2026-04-11T10:29:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:29:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:29:05.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.352898
2026-04-11T10:29:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:29:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:29:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:29:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:29:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:29:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:28:53', tmtdew=0.15003, humidity=98.9474, cloud=0.0, wind=23.8882, temperature=13.268, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:28:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:29:05.430 [DEBUG] [Thread-168283] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:29:05.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:29:05.522 [DEBUG] [Thread-168286] [transport.py] [_log()] starting thread (client mode): 0xa79b5300
2026-04-11T10:29:05.522 [DEBUG] [Thread-168286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:29:05.537 [DEBUG] [Thread-168286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:29:05.537 [INFO] [Thread-168286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] client lang: <none>
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] server lang: <none>
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] kex follows: False
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] Compression: none
2026-04-11T10:29:05.545 [DEBUG] [Thread-168286] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:29:05.604 [DEBUG] [Thread-168286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:29:05.604 [DEBUG] [Thread-168286] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:29:05.604 [DEBUG] [Thread-168286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:29:05.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:29:05.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:29:05.662 [DEBUG] [Thread-168286] [transport.py] [_log()] userauth is OK
2026-04-11T10:29:05.662 [DEBUG] [Thread-168286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:29:05.663 [DEBUG] [Thread-168286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:29:05.663 [DEBUG] [Thread-168286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:29:05.663 [DEBUG] [Thread-168286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:29:05.682 [INFO] [Thread-168286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:29:05.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:29:05.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:29:06.511 [DEBUG] [Thread-168286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:29:06.511 [DEBUG] [Thread-168286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:29:06.559 [DEBUG] [Thread-168286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:29:06.560 [DEBUG] [Thread-168286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:29:06.569 [DEBUG] [Thread-168286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:29:06.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:29:06.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:29:06.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-04-11T10:29:06.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:29:06.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:29:06.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:29:06.604 [DEBUG] [Thread-168286] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:29:12.521 [DEBUG] [Thread-168288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:27.569 [DEBUG] [Thread-168289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:36.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:29:36.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:29:36.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-04-11T10:29:36.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:36.687 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 29, 28), 0.117325, 99.5234, 0.0, 17.2559, 12.9005, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:29:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:29:28
2026-04-11T10:29:38.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:29:38.378 [DEBUG] [Thread-168290] [transport.py] [_log()] starting thread (client mode): 0xae5161a0
2026-04-11T10:29:38.378 [DEBUG] [Thread-168290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:29:38.398 [DEBUG] [Thread-168290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:29:38.398 [INFO] [Thread-168290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] client lang: <none>
2026-04-11T10:29:38.402 [DEBUG] [Thread-168290] [transport.py] [_log()] server lang: <none>
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] kex follows: False
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] Compression: none
2026-04-11T10:29:38.403 [DEBUG] [Thread-168290] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:29:38.419 [DEBUG] [Thread-168290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:29:38.420 [DEBUG] [Thread-168290] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:29:38.420 [DEBUG] [Thread-168290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:29:38.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:29:38.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:29:38.422 [DEBUG] [Thread-168290] [transport.py] [_log()] userauth is OK
2026-04-11T10:29:38.423 [DEBUG] [Thread-168290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:29:38.423 [DEBUG] [Thread-168290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:29:38.423 [DEBUG] [Thread-168290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:29:38.423 [DEBUG] [Thread-168290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:29:38.445 [INFO] [Thread-168290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:29:38.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:29:39.197 [DEBUG] [Thread-168290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:29:39.197 [DEBUG] [Thread-168290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:29:39.198 [DEBUG] [Thread-168290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:29:39.238 [DEBUG] [Thread-168290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:29:39.238 [DEBUG] [Thread-168290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:29:39.242 [DEBUG] [Thread-168290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:29:39.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:29:39.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:29:39.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:29:39.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:29:39.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:29:39.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:29:39.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:29:39.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:29:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:29:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.353246 -999.00  +12.90   7.47     97  +12.50 1 3 1 3 1   888    0 0.43 -0.21 ----- 9.8 7.5 118.4 18.8 14.0 -0.8 14.0 -0.5 13.9 -0.3 14.2 -0.8
2026-04-11T10:29:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:29:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:29:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.353246
2026-04-11T10:29:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:29:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:29:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:29:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:29:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:29:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:29:28', tmtdew=0.117325, humidity=99.5234, cloud=0.0, wind=17.2559, temperature=12.9005, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:28:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:29:39.271 [DEBUG] [Thread-168290] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:29:39.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:29:39.365 [DEBUG] [Thread-168293] [transport.py] [_log()] starting thread (client mode): 0xa79b5fc0
2026-04-11T10:29:39.365 [DEBUG] [Thread-168293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:29:39.383 [DEBUG] [Thread-168293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:29:39.383 [INFO] [Thread-168293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:29:39.391 [DEBUG] [Thread-168293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] client lang: <none>
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] server lang: <none>
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] kex follows: False
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] Compression: none
2026-04-11T10:29:39.392 [DEBUG] [Thread-168293] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:29:39.450 [DEBUG] [Thread-168293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:29:39.450 [DEBUG] [Thread-168293] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:29:39.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:29:39.451 [DEBUG] [Thread-168293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:29:39.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:29:39.506 [DEBUG] [Thread-168293] [transport.py] [_log()] userauth is OK
2026-04-11T10:29:39.506 [DEBUG] [Thread-168293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:29:39.506 [DEBUG] [Thread-168293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:29:39.506 [DEBUG] [Thread-168293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:29:39.506 [DEBUG] [Thread-168293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:29:39.525 [INFO] [Thread-168293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:29:39.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:29:39.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:29:40.362 [DEBUG] [Thread-168293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:29:40.362 [DEBUG] [Thread-168293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:29:40.410 [DEBUG] [Thread-168293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:29:40.411 [DEBUG] [Thread-168293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:29:40.420 [DEBUG] [Thread-168293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:29:40.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:29: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-04-11T10:29: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-04-11T10:29:40.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:29:40.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:29:40.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:29:40.457 [DEBUG] [Thread-168293] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:29:42.606 [DEBUG] [Thread-168295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:57.659 [DEBUG] [Thread-168296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:29:59.421 [DEBUG] [Thread-168297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:10.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:30:10.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:30:10.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:30:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 30, 3), 0.125025, 99.4737, 0.0, 16.2857, 12.9171, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:30:11.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:30:03
2026-04-11T10:30:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:30:12.273 [DEBUG] [Thread-168298] [transport.py] [_log()] starting thread (client mode): 0xae517460
2026-04-11T10:30:12.274 [DEBUG] [Thread-168298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:30:12.292 [DEBUG] [Thread-168298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:30:12.292 [INFO] [Thread-168298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] client lang: <none>
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] server lang: <none>
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] kex follows: False
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] Compression: none
2026-04-11T10:30:12.295 [DEBUG] [Thread-168298] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:30:12.313 [DEBUG] [Thread-168298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:30:12.313 [DEBUG] [Thread-168298] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:30:12.314 [DEBUG] [Thread-168298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:30:12.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:30:12.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:30:12.316 [DEBUG] [Thread-168298] [transport.py] [_log()] userauth is OK
2026-04-11T10:30:12.316 [DEBUG] [Thread-168298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:30:12.316 [DEBUG] [Thread-168298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:30:12.316 [DEBUG] [Thread-168298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:30:12.316 [DEBUG] [Thread-168298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:30:12.341 [INFO] [Thread-168298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:30:12.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:30:12.698 [DEBUG] [Thread-168300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:18.611 [DEBUG] [Thread-168298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:30:18.612 [DEBUG] [Thread-168298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:30:18.612 [DEBUG] [Thread-168298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:30:18.653 [DEBUG] [Thread-168298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:30:18.653 [DEBUG] [Thread-168298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:30:18.657 [DEBUG] [Thread-168298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:30:18.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:30:18.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:30:18.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:30:18.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:30:18.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:30:18.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:30:18.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:30:18.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.353940 -999.00  +12.90  11.17     97  +12.40 1 3 1 3 1   888    0 0.43 -0.51 ----- 7.9 11.2 84.6 22.9 14.0 -0.8 14.0 -0.3 13.9 -0.6 14.2 -0.8
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.353940
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:30:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:30:03', tmtdew=0.125025, humidity=99.4737, cloud=0.0, wind=16.2857, temperature=12.9171, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:29:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:30:18.679 [DEBUG] [Thread-168298] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:30:18.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:30:18.765 [DEBUG] [Thread-168302] [transport.py] [_log()] starting thread (client mode): 0xae5f1a80
2026-04-11T10:30:18.765 [DEBUG] [Thread-168302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:30:18.779 [DEBUG] [Thread-168302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:30:18.779 [INFO] [Thread-168302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:30:18.787 [DEBUG] [Thread-168302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:30:18.787 [DEBUG] [Thread-168302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] client lang: <none>
2026-04-11T10:30:18.788 [DEBUG] [Thread-168302] [transport.py] [_log()] server lang: <none>
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] kex follows: False
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] Compression: none
2026-04-11T10:30:18.789 [DEBUG] [Thread-168302] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:30:18.855 [DEBUG] [Thread-168302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:30:18.856 [DEBUG] [Thread-168302] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:30:18.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:30:18.858 [DEBUG] [Thread-168302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:30:18.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:30:18.914 [DEBUG] [Thread-168302] [transport.py] [_log()] userauth is OK
2026-04-11T10:30:18.915 [DEBUG] [Thread-168302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:30:18.915 [DEBUG] [Thread-168302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:30:18.915 [DEBUG] [Thread-168302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:30:18.916 [DEBUG] [Thread-168302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:30:18.935 [INFO] [Thread-168302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:30:18.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:30:18.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:30:19.777 [DEBUG] [Thread-168302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:30:19.784 [DEBUG] [Thread-168302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:30:19.825 [DEBUG] [Thread-168302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:30:19.825 [DEBUG] [Thread-168302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:30:19.835 [DEBUG] [Thread-168302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:30:19.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:30:19.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-04-11T10:30:19.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-04-11T10:30:19.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:30:19.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:30:19.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:30:19.878 [DEBUG] [Thread-168302] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:30:27.732 [DEBUG] [Thread-168304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:36.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:36.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:42.780 [DEBUG] [Thread-168305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:49.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:30:49.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:30:49.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-04-11T10:30:51.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 30, 39), 0.13979, 99.0136, 0.0, 22.9356, 13.3011, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:30:51.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:30:39
2026-04-11T10:30:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:30:51.766 [DEBUG] [Thread-168306] [transport.py] [_log()] starting thread (client mode): 0xae514670
2026-04-11T10:30:51.766 [DEBUG] [Thread-168306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:30:51.785 [DEBUG] [Thread-168306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:30:51.785 [INFO] [Thread-168306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] client lang: <none>
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] server lang: <none>
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] kex follows: False
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:30:51.787 [DEBUG] [Thread-168306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:30:51.788 [DEBUG] [Thread-168306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:30:51.788 [DEBUG] [Thread-168306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:30:51.788 [DEBUG] [Thread-168306] [transport.py] [_log()] Compression: none
2026-04-11T10:30:51.788 [DEBUG] [Thread-168306] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:30:51.797 [DEBUG] [Thread-168306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:30:51.797 [DEBUG] [Thread-168306] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:30:51.798 [DEBUG] [Thread-168306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:30:51.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:30:51.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:30:51.800 [DEBUG] [Thread-168306] [transport.py] [_log()] userauth is OK
2026-04-11T10:30:51.800 [DEBUG] [Thread-168306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:30:51.800 [DEBUG] [Thread-168306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:30:51.800 [DEBUG] [Thread-168306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:30:51.800 [DEBUG] [Thread-168306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:30:51.824 [INFO] [Thread-168306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:30:51.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:30:52.589 [DEBUG] [Thread-168306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:30:52.589 [DEBUG] [Thread-168306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:30:52.590 [DEBUG] [Thread-168306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:30:52.631 [DEBUG] [Thread-168306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:30:52.631 [DEBUG] [Thread-168306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:30:52.634 [DEBUG] [Thread-168306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:30:52.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:30:52.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:30:52.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:30:52.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:30:52.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:30:52.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:30:52.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:30:52.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.354634 -999.00  +12.90   8.50     97  +12.50 1 3 1 3 1   888    0 0.44 -0.09 ----- 15.3 8.5 107.9 13.9 14.1 -0.8 14.1 -0.3 13.9 -0.6 14.2 -0.6
2026-04-11T10:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.354634
2026-04-11T10:30:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:30:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:30:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:30:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:30:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:30:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:30:39', tmtdew=0.13979, humidity=99.0136, cloud=0.0, wind=22.9356, temperature=13.3011, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:30:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:30:52.659 [DEBUG] [Thread-168306] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:30:52.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:30:52.754 [DEBUG] [Thread-168309] [transport.py] [_log()] starting thread (client mode): 0xae5f3520
2026-04-11T10:30:52.754 [DEBUG] [Thread-168309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:30:52.773 [DEBUG] [Thread-168309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:30:52.773 [INFO] [Thread-168309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] client lang: <none>
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] server lang: <none>
2026-04-11T10:30:52.781 [DEBUG] [Thread-168309] [transport.py] [_log()] kex follows: False
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] Compression: none
2026-04-11T10:30:52.782 [DEBUG] [Thread-168309] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:30:52.838 [DEBUG] [Thread-168309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:30:52.839 [DEBUG] [Thread-168309] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:30:52.849 [DEBUG] [Thread-168309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:30:52.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:30:52.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:30:52.894 [DEBUG] [Thread-168309] [transport.py] [_log()] userauth is OK
2026-04-11T10:30:52.894 [DEBUG] [Thread-168309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:30:52.895 [DEBUG] [Thread-168309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:30:52.895 [DEBUG] [Thread-168309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:30:52.895 [DEBUG] [Thread-168309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:30:52.919 [INFO] [Thread-168309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:30:52.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:30:52.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:30:53.754 [DEBUG] [Thread-168309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:30:53.754 [DEBUG] [Thread-168309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:30:53.802 [DEBUG] [Thread-168309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:30:53.803 [DEBUG] [Thread-168309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:30:53.812 [DEBUG] [Thread-168309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:30:53.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:30:53.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-04-11T10:30:53.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-04-11T10:30:53.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:30:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:30:53.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:30:53.853 [DEBUG] [Thread-168309] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:30:57.818 [DEBUG] [Thread-168311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:30:59.463 [DEBUG] [Thread-168312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:12.867 [DEBUG] [Thread-168313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:23.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:31:23.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:31:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:31:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 31, 14), 0.130135, 99.4405, 0.0, 18.2974, 12.8508, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:31:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:31:14
2026-04-11T10:31:25.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:31:25.713 [DEBUG] [Thread-168314] [transport.py] [_log()] starting thread (client mode): 0xae5f13c0
2026-04-11T10:31:25.713 [DEBUG] [Thread-168314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:31:25.739 [DEBUG] [Thread-168314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:31:25.739 [INFO] [Thread-168314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:31:25.743 [DEBUG] [Thread-168314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:31:25.743 [DEBUG] [Thread-168314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:31:25.743 [DEBUG] [Thread-168314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:31:25.743 [DEBUG] [Thread-168314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] client lang: <none>
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] server lang: <none>
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] kex follows: False
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:31:25.744 [DEBUG] [Thread-168314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:31:25.745 [DEBUG] [Thread-168314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:31:25.745 [DEBUG] [Thread-168314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:31:25.745 [DEBUG] [Thread-168314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:31:25.745 [DEBUG] [Thread-168314] [transport.py] [_log()] Compression: none
2026-04-11T10:31:25.745 [DEBUG] [Thread-168314] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:31:25.759 [DEBUG] [Thread-168314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:31:25.759 [DEBUG] [Thread-168314] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:31:25.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:31:25.760 [DEBUG] [Thread-168314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:31:25.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:31:25.762 [DEBUG] [Thread-168314] [transport.py] [_log()] userauth is OK
2026-04-11T10:31:25.762 [DEBUG] [Thread-168314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:31:25.763 [DEBUG] [Thread-168314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:31:25.763 [DEBUG] [Thread-168314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:31:25.763 [DEBUG] [Thread-168314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:31:25.798 [INFO] [Thread-168314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:31:25.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:31:26.579 [DEBUG] [Thread-168314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:31:26.579 [DEBUG] [Thread-168314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:31:26.580 [DEBUG] [Thread-168314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:31:26.620 [DEBUG] [Thread-168314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:31:26.620 [DEBUG] [Thread-168314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:31:26.625 [DEBUG] [Thread-168314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:31:26.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:31:26.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:31:26.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:31:26.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:31:26.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:31:26.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:31:26.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:31:26.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:31:26.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:31:26.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.354634 -999.00  +12.90   8.50     97  +12.50 1 3 1 3 1   888    0 0.44 -0.09 ----- 15.3 8.5 107.9 13.9 14.1 -0.8 14.1 -0.3 13.9 -0.6 14.2 -0.6
2026-04-11T10:31:26.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:31:26.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:31:26.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.354634
2026-04-11T10:31:26.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:31:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:31:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:31:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:31:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:31:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:31:14', tmtdew=0.130135, humidity=99.4405, cloud=0.0, wind=18.2974, temperature=12.8508, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:30:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:31:26.647 [DEBUG] [Thread-168314] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:31:26.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:31:26.743 [DEBUG] [Thread-168317] [transport.py] [_log()] starting thread (client mode): 0xae52ee60
2026-04-11T10:31:26.743 [DEBUG] [Thread-168317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:31:26.758 [DEBUG] [Thread-168317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:31:26.758 [INFO] [Thread-168317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:31:26.766 [DEBUG] [Thread-168317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:31:26.766 [DEBUG] [Thread-168317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] client lang: <none>
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] server lang: <none>
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] kex follows: False
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] Compression: none
2026-04-11T10:31:26.767 [DEBUG] [Thread-168317] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:31:26.827 [DEBUG] [Thread-168317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:31:26.828 [DEBUG] [Thread-168317] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:31:26.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:31:26.829 [DEBUG] [Thread-168317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:31:26.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:31:26.883 [DEBUG] [Thread-168317] [transport.py] [_log()] userauth is OK
2026-04-11T10:31:26.883 [DEBUG] [Thread-168317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:31:26.883 [DEBUG] [Thread-168317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:31:26.883 [DEBUG] [Thread-168317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:31:26.883 [DEBUG] [Thread-168317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:31:26.902 [INFO] [Thread-168317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:31:26.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:31:26.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:31:27.765 [DEBUG] [Thread-168317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:31:27.765 [DEBUG] [Thread-168317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:31:27.813 [DEBUG] [Thread-168317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:31:27.813 [DEBUG] [Thread-168317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:31:27.822 [DEBUG] [Thread-168317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:31:27.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:31:27.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-04-11T10:31:27.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-04-11T10:31:27.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:31:27.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:31:27.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:31:27.855 [DEBUG] [Thread-168317] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:31:27.901 [DEBUG] [Thread-168319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:36.967 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:36.968 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:42.952 [DEBUG] [Thread-168320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:57.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:31:57.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:31:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:31:57.989 [DEBUG] [Thread-168321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:59.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 31, 50), 0.1398, 99.0136, 0.0, 19.4429, 13.3011, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:31:59.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:31:50
2026-04-11T10:31:59.497 [DEBUG] [Thread-168322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:31:59.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:31:59.660 [DEBUG] [Thread-168323] [transport.py] [_log()] starting thread (client mode): 0xa79b4220
2026-04-11T10:31:59.660 [DEBUG] [Thread-168323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:31:59.679 [DEBUG] [Thread-168323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:31:59.679 [INFO] [Thread-168323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:31:59.683 [DEBUG] [Thread-168323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] client lang: <none>
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] server lang: <none>
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] kex follows: False
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:31:59.684 [DEBUG] [Thread-168323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:31:59.685 [DEBUG] [Thread-168323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:31:59.685 [DEBUG] [Thread-168323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:31:59.685 [DEBUG] [Thread-168323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:31:59.685 [DEBUG] [Thread-168323] [transport.py] [_log()] Compression: none
2026-04-11T10:31:59.685 [DEBUG] [Thread-168323] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:31:59.702 [DEBUG] [Thread-168323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:31:59.702 [DEBUG] [Thread-168323] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:31:59.702 [DEBUG] [Thread-168323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:31:59.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:31:59.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:31:59.703 [DEBUG] [Thread-168323] [transport.py] [_log()] userauth is OK
2026-04-11T10:31:59.704 [DEBUG] [Thread-168323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:31:59.704 [DEBUG] [Thread-168323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:31:59.704 [DEBUG] [Thread-168323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:31:59.704 [DEBUG] [Thread-168323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:31:59.744 [INFO] [Thread-168323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:31:59.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:32:00.512 [DEBUG] [Thread-168323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:32:00.513 [DEBUG] [Thread-168323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:32:00.513 [DEBUG] [Thread-168323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:32:00.554 [DEBUG] [Thread-168323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:32:00.554 [DEBUG] [Thread-168323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:32:00.558 [DEBUG] [Thread-168323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:32:00.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:32:00.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:32:00.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:32:00.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:32:00.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:32:00.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:32:00.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:32:00.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:32:00.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:32:00.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.354982 -999.00  +12.90  13.50     97  +12.40 1 3 1 3 1   888    0 0.44 -0.09 ----- 13.4 13.5 92.9 20.0 14.0 -1.1 14.1 -0.4 13.9 -0.5 14.2 -0.7
2026-04-11T10:32:00.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:32:00.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:32:00.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.354982
2026-04-11T10:32:00.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:32:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:32:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:32:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:32:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:32:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:31:50', tmtdew=0.1398, humidity=99.0136, cloud=0.0, wind=19.4429, temperature=13.3011, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:31:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:32:00.585 [DEBUG] [Thread-168323] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:32:00.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:32:00.679 [DEBUG] [Thread-168326] [transport.py] [_log()] starting thread (client mode): 0xae52e230
2026-04-11T10:32:00.679 [DEBUG] [Thread-168326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:32:00.694 [DEBUG] [Thread-168326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:32:00.694 [INFO] [Thread-168326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] client lang: <none>
2026-04-11T10:32:00.702 [DEBUG] [Thread-168326] [transport.py] [_log()] server lang: <none>
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] kex follows: False
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] Compression: none
2026-04-11T10:32:00.703 [DEBUG] [Thread-168326] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:32:00.759 [DEBUG] [Thread-168326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:32:00.760 [DEBUG] [Thread-168326] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:32:00.760 [DEBUG] [Thread-168326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:32:00.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:32:00.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:32:00.828 [DEBUG] [Thread-168326] [transport.py] [_log()] userauth is OK
2026-04-11T10:32:00.828 [DEBUG] [Thread-168326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:32:00.828 [DEBUG] [Thread-168326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:32:00.828 [DEBUG] [Thread-168326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:32:00.828 [DEBUG] [Thread-168326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:32:00.849 [INFO] [Thread-168326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:32:00.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:32:00.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:32:01.690 [DEBUG] [Thread-168326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:32:01.690 [DEBUG] [Thread-168326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:32:01.739 [DEBUG] [Thread-168326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:32:01.739 [DEBUG] [Thread-168326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:32:01.748 [DEBUG] [Thread-168326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:32:01.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:32: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-04-11T10:32:01.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-04-11T10:32:01.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:32:01.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:32:01.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:32:01.797 [DEBUG] [Thread-168326] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:32:13.028 [DEBUG] [Thread-168328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:32:28.082 [DEBUG] [Thread-168329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:32:31.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:32:31.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:32:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:32:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 32, 25), 0.117335, 99.5234, 0.0, 17.9093, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:32:33.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:32:25
2026-04-11T10:32:33.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:32:33.629 [DEBUG] [Thread-168330] [transport.py] [_log()] starting thread (client mode): 0xa79b6a70
2026-04-11T10:32:33.629 [DEBUG] [Thread-168330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:32:33.652 [DEBUG] [Thread-168330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:32:33.652 [INFO] [Thread-168330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:32:33.655 [DEBUG] [Thread-168330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:32:33.655 [DEBUG] [Thread-168330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] client lang: <none>
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] server lang: <none>
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] kex follows: False
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] Compression: none
2026-04-11T10:32:33.656 [DEBUG] [Thread-168330] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:32:33.674 [DEBUG] [Thread-168330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:32:33.675 [DEBUG] [Thread-168330] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:32:33.675 [DEBUG] [Thread-168330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:32:33.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:32:33.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:32:33.678 [DEBUG] [Thread-168330] [transport.py] [_log()] userauth is OK
2026-04-11T10:32:33.678 [DEBUG] [Thread-168330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:32:33.678 [DEBUG] [Thread-168330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:32:33.678 [DEBUG] [Thread-168330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:32:33.678 [DEBUG] [Thread-168330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:32:33.700 [INFO] [Thread-168330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:32:33.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:32:34.460 [DEBUG] [Thread-168330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:32:34.460 [DEBUG] [Thread-168330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:32:34.460 [DEBUG] [Thread-168330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:32:34.501 [DEBUG] [Thread-168330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:32:34.501 [DEBUG] [Thread-168330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:32:34.505 [DEBUG] [Thread-168330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:32:34.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:32:34.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:32:34.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:32:34.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:32:34.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:32:34.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:32:34.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:32:34.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:32:34.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:32:34.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.355329 -999.00  +12.80  13.28     97  +12.40 1 3 1 3 1   888    0 0.43 -0.48 ----- 12.5 13.3 119.1 20.9 13.9 -1.2 14.0 -0.4 13.9 -0.5 14.2 -1.1
2026-04-11T10:32:34.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:32:34.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:32:34.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.355329
2026-04-11T10:32:34.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:32:34.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:32:34.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:32:34.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:32:34.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:32:34.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:32:25', tmtdew=0.117335, humidity=99.5234, cloud=0.0, wind=17.9093, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:31:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:32:34.533 [DEBUG] [Thread-168330] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:32:34.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:32:34.621 [DEBUG] [Thread-168333] [transport.py] [_log()] starting thread (client mode): 0xae5f24a0
2026-04-11T10:32:34.622 [DEBUG] [Thread-168333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:32:34.637 [DEBUG] [Thread-168333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:32:34.637 [INFO] [Thread-168333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:32:34.645 [DEBUG] [Thread-168333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:32:34.646 [DEBUG] [Thread-168333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] client lang: <none>
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] server lang: <none>
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] kex follows: False
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:32:34.647 [DEBUG] [Thread-168333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:32:34.648 [DEBUG] [Thread-168333] [transport.py] [_log()] Compression: none
2026-04-11T10:32:34.648 [DEBUG] [Thread-168333] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:32:34.704 [DEBUG] [Thread-168333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:32:34.704 [DEBUG] [Thread-168333] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:32:34.705 [DEBUG] [Thread-168333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:32:34.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:32:34.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:32:34.763 [DEBUG] [Thread-168333] [transport.py] [_log()] userauth is OK
2026-04-11T10:32:34.764 [DEBUG] [Thread-168333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:32:34.764 [DEBUG] [Thread-168333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:32:34.764 [DEBUG] [Thread-168333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:32:34.764 [DEBUG] [Thread-168333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:32:34.783 [INFO] [Thread-168333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:32:34.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:32:34.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:32:35.637 [DEBUG] [Thread-168333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:32:35.637 [DEBUG] [Thread-168333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:32:35.685 [DEBUG] [Thread-168333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:32:35.686 [DEBUG] [Thread-168333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:32:35.695 [DEBUG] [Thread-168333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:32:35.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:32:35.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-04-11T10:32: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') -> 00000000
2026-04-11T10:32:35.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:32:35.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:32:35.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:32:35.734 [DEBUG] [Thread-168333] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:32:37.109 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:32:37.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:32:43.120 [DEBUG] [Thread-168335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:32:58.171 [DEBUG] [Thread-168336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:32:59.535 [DEBUG] [Thread-168337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:05.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:33:05.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:33:05.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-04-11T10:33:07.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 32, 25), 0.117335, 99.5234, 0.0, 17.9093, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:33:07.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:32:25
2026-04-11T10:33:07.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:33:07.659 [DEBUG] [Thread-168338] [transport.py] [_log()] starting thread (client mode): 0xae51b340
2026-04-11T10:33:07.659 [DEBUG] [Thread-168338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:33:07.679 [DEBUG] [Thread-168338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:33:07.679 [INFO] [Thread-168338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:33:07.682 [DEBUG] [Thread-168338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:33:07.682 [DEBUG] [Thread-168338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:33:07.682 [DEBUG] [Thread-168338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:33:07.682 [DEBUG] [Thread-168338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:07.682 [DEBUG] [Thread-168338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] client lang: <none>
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] server lang: <none>
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] kex follows: False
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] Compression: none
2026-04-11T10:33:07.683 [DEBUG] [Thread-168338] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:33:07.700 [DEBUG] [Thread-168338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:33:07.701 [DEBUG] [Thread-168338] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:33:07.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:33:07.702 [DEBUG] [Thread-168338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:33:07.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:33:07.703 [DEBUG] [Thread-168338] [transport.py] [_log()] userauth is OK
2026-04-11T10:33:07.703 [DEBUG] [Thread-168338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:33:07.704 [DEBUG] [Thread-168338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:33:07.704 [DEBUG] [Thread-168338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:33:07.704 [DEBUG] [Thread-168338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:33:07.727 [INFO] [Thread-168338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:33:07.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:33:08.467 [DEBUG] [Thread-168338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:33:08.468 [DEBUG] [Thread-168338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:33:08.468 [DEBUG] [Thread-168338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:33:08.509 [DEBUG] [Thread-168338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:33:08.509 [DEBUG] [Thread-168338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:33:08.512 [DEBUG] [Thread-168338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:33:08.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:33:08.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:33:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:33:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:33:08.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:33:08.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:33:08.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:33:08.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:33:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:33:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.356023 -999.00  +12.80  10.12     97  +12.40 1 3 1 3 1   888    0 0.40 -1.29 ----- 8.0 10.1 96.1 25.1 13.9 -1.1 14.0 -0.3 13.9 -0.3 -999.0 -999.0
2026-04-11T10:33:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:33:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:33:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.356023
2026-04-11T10:33:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:33:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:33:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:33:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:33:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:33:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:32:25', tmtdew=0.117335, humidity=99.5234, cloud=0.0, wind=17.9093, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:32:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:33:08.539 [DEBUG] [Thread-168338] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:33:08.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:33:08.634 [DEBUG] [Thread-168341] [transport.py] [_log()] starting thread (client mode): 0xae51a920
2026-04-11T10:33:08.634 [DEBUG] [Thread-168341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:33:08.649 [DEBUG] [Thread-168341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:33:08.649 [INFO] [Thread-168341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:33:08.657 [DEBUG] [Thread-168341] [transport.py] [_log()] client lang: <none>
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] server lang: <none>
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] kex follows: False
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] Compression: none
2026-04-11T10:33:08.658 [DEBUG] [Thread-168341] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:33:08.717 [DEBUG] [Thread-168341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:33:08.718 [DEBUG] [Thread-168341] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:33:08.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:33:08.719 [DEBUG] [Thread-168341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:33:08.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:33:08.776 [DEBUG] [Thread-168341] [transport.py] [_log()] userauth is OK
2026-04-11T10:33:08.776 [DEBUG] [Thread-168341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:33:08.776 [DEBUG] [Thread-168341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:33:08.776 [DEBUG] [Thread-168341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:33:08.777 [DEBUG] [Thread-168341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:33:08.796 [INFO] [Thread-168341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:33:08.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:33:08.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:33:09.638 [DEBUG] [Thread-168341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:33:09.638 [DEBUG] [Thread-168341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:33:09.686 [DEBUG] [Thread-168341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:33:09.687 [DEBUG] [Thread-168341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:33:09.696 [DEBUG] [Thread-168341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:33:09.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:33:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:33:09.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-04-11T10:33:09.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:33:09.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:33:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:33:09.733 [DEBUG] [Thread-168341] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:33:13.210 [DEBUG] [Thread-168343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:28.270 [DEBUG] [Thread-168344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:37.248 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:37.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:39.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:33:39.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:33:39.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-04-11T10:33:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 33), 0.07246, 99.4902, 0.0, 16.9214, 12.8339, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:33:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:33:00
2026-04-11T10:33:41.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:33:41.629 [DEBUG] [Thread-168345] [transport.py] [_log()] starting thread (client mode): 0xa79b4490
2026-04-11T10:33:41.629 [DEBUG] [Thread-168345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:33:41.649 [DEBUG] [Thread-168345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:33:41.649 [INFO] [Thread-168345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:33:41.652 [DEBUG] [Thread-168345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:33:41.652 [DEBUG] [Thread-168345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:33:41.652 [DEBUG] [Thread-168345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:33:41.652 [DEBUG] [Thread-168345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:41.652 [DEBUG] [Thread-168345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:41.652 [DEBUG] [Thread-168345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] client lang: <none>
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] server lang: <none>
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] kex follows: False
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] Compression: none
2026-04-11T10:33:41.653 [DEBUG] [Thread-168345] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:33:41.665 [DEBUG] [Thread-168345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:33:41.666 [DEBUG] [Thread-168345] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:33:41.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:33:41.667 [DEBUG] [Thread-168345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:33:41.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:33:41.669 [DEBUG] [Thread-168345] [transport.py] [_log()] userauth is OK
2026-04-11T10:33:41.669 [DEBUG] [Thread-168345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:33:41.669 [DEBUG] [Thread-168345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:33:41.669 [DEBUG] [Thread-168345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:33:41.669 [DEBUG] [Thread-168345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:33:41.693 [INFO] [Thread-168345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:33:41.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:33:42.430 [DEBUG] [Thread-168345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:33:42.431 [DEBUG] [Thread-168345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:33:42.431 [DEBUG] [Thread-168345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:33:42.472 [DEBUG] [Thread-168345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:33:42.472 [DEBUG] [Thread-168345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:33:42.476 [DEBUG] [Thread-168345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:33:42.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:33:42.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:33:42.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:33:42.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:33:42.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:33:42.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:33:42.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:33:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:33:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:33:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.356371 -999.00  +12.90  11.54     97  +12.40 1 3 1 3 1   888    0 0.41 -1.16 ----- 16.1 11.5 101.8 17.2 14.0 -1.6 14.0 -0.3 13.9 -0.6 14.2 -0.6
2026-04-11T10:33:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:33:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:33:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.356371
2026-04-11T10:33:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:33:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:33:42.504 [DEBUG] [Thread-168345] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:33:42.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:33:42.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:33:42.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:33:42.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:33:00', tmtdew=0.07246, humidity=99.4902, cloud=0.0, wind=16.9214, temperature=12.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:33:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:33:42.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:33:42.600 [DEBUG] [Thread-168348] [transport.py] [_log()] starting thread (client mode): 0xa79b5420
2026-04-11T10:33:42.600 [DEBUG] [Thread-168348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:33:42.619 [DEBUG] [Thread-168348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:33:42.619 [INFO] [Thread-168348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] client lang: <none>
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] server lang: <none>
2026-04-11T10:33:42.627 [DEBUG] [Thread-168348] [transport.py] [_log()] kex follows: False
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] Compression: none
2026-04-11T10:33:42.628 [DEBUG] [Thread-168348] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:33:42.684 [DEBUG] [Thread-168348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:33:42.684 [DEBUG] [Thread-168348] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:33:42.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:33:42.686 [DEBUG] [Thread-168348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:33:42.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:33:42.740 [DEBUG] [Thread-168348] [transport.py] [_log()] userauth is OK
2026-04-11T10:33:42.740 [DEBUG] [Thread-168348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:33:42.740 [DEBUG] [Thread-168348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:33:42.741 [DEBUG] [Thread-168348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:33:42.741 [DEBUG] [Thread-168348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:33:42.760 [INFO] [Thread-168348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:33:42.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:33:42.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:33:43.309 [DEBUG] [Thread-168350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:43.604 [DEBUG] [Thread-168348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:33:43.605 [DEBUG] [Thread-168348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:33:43.652 [DEBUG] [Thread-168348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:33:43.652 [DEBUG] [Thread-168348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:33:43.662 [DEBUG] [Thread-168348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:33:43.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:33:43.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-04-11T10:33:43.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-04-11T10:33:43.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:33:43.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:33:43.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:33:43.699 [DEBUG] [Thread-168348] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:33:58.362 [DEBUG] [Thread-168351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:33:59.579 [DEBUG] [Thread-168352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:13.400 [DEBUG] [Thread-168353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:13.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:34:13.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:34:13.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-04-11T10:34:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 33, 36), 0.1398, 99.0136, 0.0, 21.2422, 13.301, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:34:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:33:36
2026-04-11T10:34:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:34:15.581 [DEBUG] [Thread-168354] [transport.py] [_log()] starting thread (client mode): 0xb0f57c10
2026-04-11T10:34:15.582 [DEBUG] [Thread-168354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:34:15.605 [DEBUG] [Thread-168354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:34:15.605 [INFO] [Thread-168354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:34:15.609 [DEBUG] [Thread-168354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:34:15.609 [DEBUG] [Thread-168354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:34:15.609 [DEBUG] [Thread-168354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:34:15.609 [DEBUG] [Thread-168354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:15.609 [DEBUG] [Thread-168354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:15.609 [DEBUG] [Thread-168354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] client lang: <none>
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] server lang: <none>
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] kex follows: False
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:34:15.610 [DEBUG] [Thread-168354] [transport.py] [_log()] Compression: none
2026-04-11T10:34:15.611 [DEBUG] [Thread-168354] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:34:15.630 [DEBUG] [Thread-168354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:34:15.630 [DEBUG] [Thread-168354] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:34:15.631 [DEBUG] [Thread-168354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:34:15.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:34:15.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:34:15.633 [DEBUG] [Thread-168354] [transport.py] [_log()] userauth is OK
2026-04-11T10:34:15.633 [DEBUG] [Thread-168354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:34:15.633 [DEBUG] [Thread-168354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:34:15.633 [DEBUG] [Thread-168354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:34:15.633 [DEBUG] [Thread-168354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:34:15.658 [INFO] [Thread-168354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:34:15.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:34:16.433 [DEBUG] [Thread-168354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:34:16.433 [DEBUG] [Thread-168354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:34:16.434 [DEBUG] [Thread-168354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:34:16.474 [DEBUG] [Thread-168354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:34:16.475 [DEBUG] [Thread-168354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:34:16.478 [DEBUG] [Thread-168354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:34:16.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:34:16.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:34:16.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:34:16.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:34:16.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:34:16.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:34:16.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:34:16.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:34:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:34:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.357065 -999.00  +12.80  13.00     97  +12.40 1 3 1 3 1   888    0 0.42 -0.93 ----- 14.6 13.0 81.8 22.1 13.9 -0.7 14.0 -0.3 13.9 -0.4 14.2 -0.8
2026-04-11T10:34:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:34:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:34:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.357065
2026-04-11T10:34:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:34:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:34:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:34:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:34:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:34:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:33:36', tmtdew=0.1398, humidity=99.0136, cloud=0.0, wind=21.2422, temperature=13.301, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:34:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:34:16.508 [DEBUG] [Thread-168354] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:34:16.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:34:16.605 [DEBUG] [Thread-168357] [transport.py] [_log()] starting thread (client mode): 0xae5e7640
2026-04-11T10:34:16.605 [DEBUG] [Thread-168357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:34:16.620 [DEBUG] [Thread-168357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:34:16.620 [INFO] [Thread-168357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] client lang: <none>
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] server lang: <none>
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] kex follows: False
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:34:16.628 [DEBUG] [Thread-168357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:34:16.629 [DEBUG] [Thread-168357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:34:16.629 [DEBUG] [Thread-168357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:34:16.629 [DEBUG] [Thread-168357] [transport.py] [_log()] Compression: none
2026-04-11T10:34:16.629 [DEBUG] [Thread-168357] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:34:16.696 [DEBUG] [Thread-168357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:34:16.696 [DEBUG] [Thread-168357] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:34:16.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:34:16.697 [DEBUG] [Thread-168357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:34:16.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:34:16.756 [DEBUG] [Thread-168357] [transport.py] [_log()] userauth is OK
2026-04-11T10:34:16.756 [DEBUG] [Thread-168357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:34:16.756 [DEBUG] [Thread-168357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:34:16.756 [DEBUG] [Thread-168357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:34:16.756 [DEBUG] [Thread-168357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:34:16.778 [INFO] [Thread-168357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:34:16.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:34:16.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:34:17.603 [DEBUG] [Thread-168357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:34:17.604 [DEBUG] [Thread-168357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:34:17.653 [DEBUG] [Thread-168357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:34:17.653 [DEBUG] [Thread-168357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:34:17.666 [DEBUG] [Thread-168357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:34:17.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:34:17.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-04-11T10:34:17.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-04-11T10:34:17.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:34:17.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:34:17.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:34:17.706 [DEBUG] [Thread-168357] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:34:28.437 [DEBUG] [Thread-168359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:37.389 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:37.390 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:43.494 [DEBUG] [Thread-168360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:34:47.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:34:47.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-04-11T10:34:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 34, 11), 0.125025, 99.4736, 0.0, 15.0516, 12.8839, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:34:49.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:34:11
2026-04-11T10:34:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:34:49.642 [DEBUG] [Thread-168361] [transport.py] [_log()] starting thread (client mode): 0xae52f490
2026-04-11T10:34:49.642 [DEBUG] [Thread-168361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:34:49.663 [DEBUG] [Thread-168361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:34:49.663 [INFO] [Thread-168361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:34:49.666 [DEBUG] [Thread-168361] [transport.py] [_log()] client lang: <none>
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] server lang: <none>
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] kex follows: False
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] Compression: none
2026-04-11T10:34:49.667 [DEBUG] [Thread-168361] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:34:49.684 [DEBUG] [Thread-168361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:34:49.685 [DEBUG] [Thread-168361] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:34:49.685 [DEBUG] [Thread-168361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:34:49.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:34:49.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:34:49.687 [DEBUG] [Thread-168361] [transport.py] [_log()] userauth is OK
2026-04-11T10:34:49.688 [DEBUG] [Thread-168361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:34:49.688 [DEBUG] [Thread-168361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:34:49.688 [DEBUG] [Thread-168361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:34:49.688 [DEBUG] [Thread-168361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:34:49.710 [INFO] [Thread-168361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:34:49.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:34:50.459 [DEBUG] [Thread-168361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:34:50.459 [DEBUG] [Thread-168361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:34:50.460 [DEBUG] [Thread-168361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:34:50.501 [DEBUG] [Thread-168361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:34:50.501 [DEBUG] [Thread-168361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:34:50.504 [DEBUG] [Thread-168361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:34:50.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:34:50.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:34:50.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:34:50.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:34:50.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:34:50.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:34:50.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:34:50.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:34:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:34:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.357065 -999.00  +12.80  13.00     97  +12.40 1 3 1 3 1   888    0 0.42 -0.93 ----- 14.6 13.0 81.8 22.1 13.9 -0.7 14.0 -0.3 13.9 -0.4 14.2 -0.8
2026-04-11T10:34:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:34:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:34:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.357065
2026-04-11T10:34:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:34:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:34:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:34:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:34:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:34:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:34:11', tmtdew=0.125025, humidity=99.4736, cloud=0.0, wind=15.0516, temperature=12.8839, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:34:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:34:50.532 [DEBUG] [Thread-168361] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:34:50.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:34:50.621 [DEBUG] [Thread-168364] [transport.py] [_log()] starting thread (client mode): 0xae5179d0
2026-04-11T10:34:50.621 [DEBUG] [Thread-168364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:34:50.635 [DEBUG] [Thread-168364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:34:50.635 [INFO] [Thread-168364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:34:50.643 [DEBUG] [Thread-168364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:34:50.643 [DEBUG] [Thread-168364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:34:50.644 [DEBUG] [Thread-168364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] client lang: <none>
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] server lang: <none>
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] kex follows: False
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] Compression: none
2026-04-11T10:34:50.645 [DEBUG] [Thread-168364] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:34:50.700 [DEBUG] [Thread-168364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:34:50.701 [DEBUG] [Thread-168364] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:34:50.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:34:50.702 [DEBUG] [Thread-168364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:34:50.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:34:50.757 [DEBUG] [Thread-168364] [transport.py] [_log()] userauth is OK
2026-04-11T10:34:50.757 [DEBUG] [Thread-168364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:34:50.758 [DEBUG] [Thread-168364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:34:50.758 [DEBUG] [Thread-168364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:34:50.758 [DEBUG] [Thread-168364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:34:50.777 [INFO] [Thread-168364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:34:50.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:34:50.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:34:51.583 [DEBUG] [Thread-168364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:34:51.583 [DEBUG] [Thread-168364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:34:51.631 [DEBUG] [Thread-168364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:34:51.631 [DEBUG] [Thread-168364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:34:51.640 [DEBUG] [Thread-168364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:34:51.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:34:51.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-04-11T10:34:51.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-04-11T10:34:51.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:34:51.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:34:51.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:34:51.684 [DEBUG] [Thread-168364] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:34:58.535 [DEBUG] [Thread-168366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:34:59.621 [DEBUG] [Thread-168367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:13.592 [DEBUG] [Thread-168368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:21.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:35:21.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:35:21.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-04-11T10:35:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 34, 47), 0.13982, 99.0135, 0.0, 26.393, 13.3342, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:35:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:34:47
2026-04-11T10:35:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:35:23.645 [DEBUG] [Thread-168369] [transport.py] [_log()] starting thread (client mode): 0xa79b4dc0
2026-04-11T10:35:23.645 [DEBUG] [Thread-168369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:35:23.661 [DEBUG] [Thread-168369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:35:23.661 [INFO] [Thread-168369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] client lang: <none>
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] server lang: <none>
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] kex follows: False
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] Compression: none
2026-04-11T10:35:23.664 [DEBUG] [Thread-168369] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:35:23.679 [DEBUG] [Thread-168369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:35:23.679 [DEBUG] [Thread-168369] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:35:23.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:35:23.680 [DEBUG] [Thread-168369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:35:23.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:35:23.683 [DEBUG] [Thread-168369] [transport.py] [_log()] userauth is OK
2026-04-11T10:35:23.683 [DEBUG] [Thread-168369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:35:23.683 [DEBUG] [Thread-168369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:35:23.683 [DEBUG] [Thread-168369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:35:23.683 [DEBUG] [Thread-168369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:35:23.719 [INFO] [Thread-168369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:35:23.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:35:28.627 [DEBUG] [Thread-168371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:31.419 [DEBUG] [Thread-168369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:35:31.419 [DEBUG] [Thread-168369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:35:31.420 [DEBUG] [Thread-168369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:35:31.460 [DEBUG] [Thread-168369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:35:31.460 [DEBUG] [Thread-168369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:35:31.463 [DEBUG] [Thread-168369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:35:31.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:35:31.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:35:31.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:35:31.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:35:31.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:35:31.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:35:31.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:35:31.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:35:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:35:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.357412 -999.00  +12.80  13.59     97  +12.40 1 3 1 3 1   888    0 0.42 -0.79 ----- 11.8 13.6 107.6 18.5 13.9 -1.1 14.0 -0.4 13.9 -0.5 14.1 -0.7
2026-04-11T10:35:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:35:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:35:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.357412
2026-04-11T10:35:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:35:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:35:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:35:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:35:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:35:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:34:47', tmtdew=0.13982, humidity=99.0135, cloud=0.0, wind=26.393, temperature=13.3342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:34:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:35:31.514 [DEBUG] [Thread-168369] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:35:31.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:35:31.609 [DEBUG] [Thread-168373] [transport.py] [_log()] starting thread (client mode): 0xae52e200
2026-04-11T10:35:31.609 [DEBUG] [Thread-168373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:35:31.623 [DEBUG] [Thread-168373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:35:31.623 [INFO] [Thread-168373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:35:31.631 [DEBUG] [Thread-168373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:35:31.631 [DEBUG] [Thread-168373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:35:31.631 [DEBUG] [Thread-168373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:35:31.631 [DEBUG] [Thread-168373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] client lang: <none>
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] server lang: <none>
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] kex follows: False
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:35:31.632 [DEBUG] [Thread-168373] [transport.py] [_log()] Compression: none
2026-04-11T10:35:31.633 [DEBUG] [Thread-168373] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:35:31.697 [DEBUG] [Thread-168373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:35:31.697 [DEBUG] [Thread-168373] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:35:31.698 [DEBUG] [Thread-168373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:35:31.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:35:31.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:35:31.757 [DEBUG] [Thread-168373] [transport.py] [_log()] userauth is OK
2026-04-11T10:35:31.757 [DEBUG] [Thread-168373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:35:31.757 [DEBUG] [Thread-168373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:35:31.757 [DEBUG] [Thread-168373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:35:31.757 [DEBUG] [Thread-168373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:35:31.775 [INFO] [Thread-168373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:35:31.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:35:31.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:35:32.610 [DEBUG] [Thread-168373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:35:32.610 [DEBUG] [Thread-168373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:35:32.659 [DEBUG] [Thread-168373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:35:32.659 [DEBUG] [Thread-168373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:35:32.668 [DEBUG] [Thread-168373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:35:32.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:35:32.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:35:32.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-04-11T10:35:32.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:35:32.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:35:32.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:35:32.699 [DEBUG] [Thread-168373] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:35:37.531 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:37.532 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:43.664 [DEBUG] [Thread-168375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:58.716 [DEBUG] [Thread-168376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:35:59.652 [DEBUG] [Thread-168377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:36:02.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:36:02.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-04-11T10:36:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 35, 22), 0.06478, 99.5399, 0.0, 19.6909, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:36:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:35:22
2026-04-11T10:36:04.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:36:04.514 [DEBUG] [Thread-168378] [transport.py] [_log()] starting thread (client mode): 0xb0fcca90
2026-04-11T10:36:04.514 [DEBUG] [Thread-168378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:36:04.534 [DEBUG] [Thread-168378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:36:04.534 [INFO] [Thread-168378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] client lang: <none>
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] server lang: <none>
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] kex follows: False
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:36:04.538 [DEBUG] [Thread-168378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:36:04.539 [DEBUG] [Thread-168378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:36:04.539 [DEBUG] [Thread-168378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:36:04.539 [DEBUG] [Thread-168378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:36:04.539 [DEBUG] [Thread-168378] [transport.py] [_log()] Compression: none
2026-04-11T10:36:04.539 [DEBUG] [Thread-168378] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:36:04.556 [DEBUG] [Thread-168378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:36:04.556 [DEBUG] [Thread-168378] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:36:04.557 [DEBUG] [Thread-168378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:36:04.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:36:04.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:36:04.559 [DEBUG] [Thread-168378] [transport.py] [_log()] userauth is OK
2026-04-11T10:36:04.559 [DEBUG] [Thread-168378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:36:04.559 [DEBUG] [Thread-168378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:36:04.559 [DEBUG] [Thread-168378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:36:04.559 [DEBUG] [Thread-168378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:36:04.577 [INFO] [Thread-168378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:36:04.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:36:05.398 [DEBUG] [Thread-168378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:36:05.398 [DEBUG] [Thread-168378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:36:05.399 [DEBUG] [Thread-168378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:36:05.438 [DEBUG] [Thread-168378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:36:05.438 [DEBUG] [Thread-168378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:36:05.441 [DEBUG] [Thread-168378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:36:05.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:36:05.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:36:05.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:36:05.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:36:05.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:36:05.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:36:05.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:36:05.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.357759 -999.00  +12.80  12.39     97  +12.40 1 3 1 3 1   888    0 0.41 -0.72 ----- 13.1 12.4 112.8 20.0 13.9 -0.8 14.0 -0.4 13.9 -0.5 14.2 -0.7
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.357759
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:36:05.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:35:22', tmtdew=0.06478, humidity=99.5399, cloud=0.0, wind=19.6909, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:35:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:36:05.454 [DEBUG] [Thread-168378] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:36:05.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:36:05.535 [DEBUG] [Thread-168381] [transport.py] [_log()] starting thread (client mode): 0xb0f8d420
2026-04-11T10:36:05.535 [DEBUG] [Thread-168381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:36:05.551 [DEBUG] [Thread-168381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:36:05.551 [INFO] [Thread-168381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:36:05.559 [DEBUG] [Thread-168381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:36:05.559 [DEBUG] [Thread-168381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:36:05.559 [DEBUG] [Thread-168381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:36:05.559 [DEBUG] [Thread-168381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] client lang: <none>
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] server lang: <none>
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] kex follows: False
2026-04-11T10:36:05.560 [DEBUG] [Thread-168381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:36:05.561 [DEBUG] [Thread-168381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:36:05.561 [DEBUG] [Thread-168381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:36:05.561 [DEBUG] [Thread-168381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:36:05.561 [DEBUG] [Thread-168381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:36:05.561 [DEBUG] [Thread-168381] [transport.py] [_log()] Compression: none
2026-04-11T10:36:05.561 [DEBUG] [Thread-168381] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:36:05.618 [DEBUG] [Thread-168381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:36:05.618 [DEBUG] [Thread-168381] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:36:05.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:36:05.620 [DEBUG] [Thread-168381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:36:05.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:36:05.677 [DEBUG] [Thread-168381] [transport.py] [_log()] userauth is OK
2026-04-11T10:36:05.678 [DEBUG] [Thread-168381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:36:05.678 [DEBUG] [Thread-168381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:36:05.678 [DEBUG] [Thread-168381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:36:05.678 [DEBUG] [Thread-168381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:36:05.697 [INFO] [Thread-168381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:36:05.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:36:05.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:36:06.599 [DEBUG] [Thread-168381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:36:06.599 [DEBUG] [Thread-168381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:36:06.647 [DEBUG] [Thread-168381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:36:06.647 [DEBUG] [Thread-168381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:36:06.658 [DEBUG] [Thread-168381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:36:06.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:36:06.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-04-11T10:36:06.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:36:06.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:36:06.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:36:06.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:36:06.692 [DEBUG] [Thread-168381] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:36:13.754 [DEBUG] [Thread-168383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:28.805 [DEBUG] [Thread-168384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:36.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:36:36.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:36:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:36:37.671 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:37.672 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:37.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 35, 58), 0.11734, 99.5233, 0.0, 22.0025, 12.8505, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:36:37.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:35:58
2026-04-11T10:36:38.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:36:38.529 [DEBUG] [Thread-168385] [transport.py] [_log()] starting thread (client mode): 0xae52c6a0
2026-04-11T10:36:38.529 [DEBUG] [Thread-168385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:36:38.550 [DEBUG] [Thread-168385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:36:38.550 [INFO] [Thread-168385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:36:38.554 [DEBUG] [Thread-168385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:36:38.554 [DEBUG] [Thread-168385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:36:38.554 [DEBUG] [Thread-168385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] client lang: <none>
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] server lang: <none>
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] kex follows: False
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:36:38.555 [DEBUG] [Thread-168385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:36:38.556 [DEBUG] [Thread-168385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:36:38.556 [DEBUG] [Thread-168385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:36:38.556 [DEBUG] [Thread-168385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:36:38.556 [DEBUG] [Thread-168385] [transport.py] [_log()] Compression: none
2026-04-11T10:36:38.556 [DEBUG] [Thread-168385] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:36:38.575 [DEBUG] [Thread-168385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:36:38.575 [DEBUG] [Thread-168385] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:36:38.576 [DEBUG] [Thread-168385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:36:38.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:36:38.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:36:38.579 [DEBUG] [Thread-168385] [transport.py] [_log()] userauth is OK
2026-04-11T10:36:38.579 [DEBUG] [Thread-168385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:36:38.579 [DEBUG] [Thread-168385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:36:38.579 [DEBUG] [Thread-168385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:36:38.579 [DEBUG] [Thread-168385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:36:38.614 [INFO] [Thread-168385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:36:38.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:36:39.415 [DEBUG] [Thread-168385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:36:39.415 [DEBUG] [Thread-168385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:36:39.415 [DEBUG] [Thread-168385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:36:39.456 [DEBUG] [Thread-168385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:36:39.456 [DEBUG] [Thread-168385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:36:39.460 [DEBUG] [Thread-168385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:36:39.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:36:39.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:36:39.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:36:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:36:39.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:36:39.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:36:39.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:36:39.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:36:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:36:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.358107 -999.00  +12.80  10.42     97  +12.30 1 3 1 3 1   888    0 0.44 -0.27 ----- 10.6 10.4 110.0 17.7 13.9 -1.2 14.0 -0.4 13.9 -0.3 14.1 -0.8
2026-04-11T10:36:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:36:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:36:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.358107
2026-04-11T10:36:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:36:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:36:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:36:39.488 [DEBUG] [Thread-168385] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:36:39.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:36:39.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:36:39.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:35:58', tmtdew=0.11734, humidity=99.5233, cloud=0.0, wind=22.0025, temperature=12.8505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:35:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:36:39.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:36:39.572 [DEBUG] [Thread-168388] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-11T10:36:39.572 [DEBUG] [Thread-168388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:36:39.586 [DEBUG] [Thread-168388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:36:39.586 [INFO] [Thread-168388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:36:39.594 [DEBUG] [Thread-168388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:36:39.594 [DEBUG] [Thread-168388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:36:39.594 [DEBUG] [Thread-168388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:36:39.594 [DEBUG] [Thread-168388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:39.594 [DEBUG] [Thread-168388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] client lang: <none>
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] server lang: <none>
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] kex follows: False
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:36:39.595 [DEBUG] [Thread-168388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:36:39.596 [DEBUG] [Thread-168388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:36:39.596 [DEBUG] [Thread-168388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:36:39.596 [DEBUG] [Thread-168388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:36:39.596 [DEBUG] [Thread-168388] [transport.py] [_log()] Compression: none
2026-04-11T10:36:39.596 [DEBUG] [Thread-168388] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:36:39.654 [DEBUG] [Thread-168388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:36:39.655 [DEBUG] [Thread-168388] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:36:39.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:36:39.656 [DEBUG] [Thread-168388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:36:39.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:36:39.714 [DEBUG] [Thread-168388] [transport.py] [_log()] userauth is OK
2026-04-11T10:36:39.715 [DEBUG] [Thread-168388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:36:39.715 [DEBUG] [Thread-168388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:36:39.715 [DEBUG] [Thread-168388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:36:39.715 [DEBUG] [Thread-168388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:36:39.733 [INFO] [Thread-168388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:36:39.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:36:39.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:36:40.547 [DEBUG] [Thread-168388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:36:40.547 [DEBUG] [Thread-168388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:36:40.596 [DEBUG] [Thread-168388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:36:40.596 [DEBUG] [Thread-168388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:36:40.605 [DEBUG] [Thread-168388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:36:40.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:36:40.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-04-11T10:36:40.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-04-11T10:36:40.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:36:40.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:36:40.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:36:40.640 [DEBUG] [Thread-168388] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:36:43.845 [DEBUG] [Thread-168390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:58.906 [DEBUG] [Thread-168391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:36:59.686 [DEBUG] [Thread-168392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:10.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:37:10.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:37:10.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:37:11.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 36, 33), 0.13466, 99.0467, 0.0, 23.112, 13.2347, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:37:11.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:36:33
2026-04-11T10:37:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:37:12.622 [DEBUG] [Thread-168393] [transport.py] [_log()] starting thread (client mode): 0xb0fb4820
2026-04-11T10:37:12.623 [DEBUG] [Thread-168393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:37:12.640 [DEBUG] [Thread-168393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:37:12.640 [INFO] [Thread-168393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] client lang: <none>
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] server lang: <none>
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] kex follows: False
2026-04-11T10:37:12.645 [DEBUG] [Thread-168393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:37:12.646 [DEBUG] [Thread-168393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:37:12.646 [DEBUG] [Thread-168393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:37:12.646 [DEBUG] [Thread-168393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:37:12.646 [DEBUG] [Thread-168393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:37:12.646 [DEBUG] [Thread-168393] [transport.py] [_log()] Compression: none
2026-04-11T10:37:12.646 [DEBUG] [Thread-168393] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:37:12.663 [DEBUG] [Thread-168393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:37:12.664 [DEBUG] [Thread-168393] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:37:12.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:37:12.665 [DEBUG] [Thread-168393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:37:12.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:37:12.667 [DEBUG] [Thread-168393] [transport.py] [_log()] userauth is OK
2026-04-11T10:37:12.667 [DEBUG] [Thread-168393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:37:12.668 [DEBUG] [Thread-168393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:37:12.668 [DEBUG] [Thread-168393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:37:12.668 [DEBUG] [Thread-168393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:37:12.687 [INFO] [Thread-168393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:37:12.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:37:13.472 [DEBUG] [Thread-168393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:37:13.473 [DEBUG] [Thread-168393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:37:13.473 [DEBUG] [Thread-168393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:37:13.514 [DEBUG] [Thread-168393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:37:13.515 [DEBUG] [Thread-168393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:37:13.518 [DEBUG] [Thread-168393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:37:13.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:37:13.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:37:13.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:37:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:37:13.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:37:13.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:37:13.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:37:13.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:37:13.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:37:13.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.358454 -999.00  +12.80  16.66     97  +12.30 1 3 1 3 1   888    0 0.43 -0.31 ----- 13.5 16.7 81.3 21.9 13.9 -1.2 14.0 -0.2 13.8 -0.6 14.1 -0.5
2026-04-11T10:37:13.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:37:13.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:37:13.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.358454
2026-04-11T10:37:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:37:13.542 [DEBUG] [Thread-168393] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:37:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:36:33', tmtdew=0.13466, humidity=99.0467, cloud=0.0, wind=23.112, temperature=13.2347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:36:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:37:13.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:37:13.637 [DEBUG] [Thread-168396] [transport.py] [_log()] starting thread (client mode): 0xb0fb6cb0
2026-04-11T10:37:13.637 [DEBUG] [Thread-168396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:37:13.653 [DEBUG] [Thread-168396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:37:13.653 [INFO] [Thread-168396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:37:13.661 [DEBUG] [Thread-168396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:37:13.661 [DEBUG] [Thread-168396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:37:13.661 [DEBUG] [Thread-168396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:37:13.661 [DEBUG] [Thread-168396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:13.661 [DEBUG] [Thread-168396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] client lang: <none>
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] server lang: <none>
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] kex follows: False
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:37:13.662 [DEBUG] [Thread-168396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:37:13.663 [DEBUG] [Thread-168396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:37:13.663 [DEBUG] [Thread-168396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:37:13.663 [DEBUG] [Thread-168396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:37:13.663 [DEBUG] [Thread-168396] [transport.py] [_log()] Compression: none
2026-04-11T10:37:13.663 [DEBUG] [Thread-168396] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:37:13.729 [DEBUG] [Thread-168396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:37:13.729 [DEBUG] [Thread-168396] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:37:13.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:37:13.730 [DEBUG] [Thread-168396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:37:13.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:37:13.786 [DEBUG] [Thread-168396] [transport.py] [_log()] userauth is OK
2026-04-11T10:37:13.786 [DEBUG] [Thread-168396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:37:13.787 [DEBUG] [Thread-168396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:37:13.787 [DEBUG] [Thread-168396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:37:13.787 [DEBUG] [Thread-168396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:37:13.807 [INFO] [Thread-168396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:37:13.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:37:13.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:37:13.943 [DEBUG] [Thread-168398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:14.603 [DEBUG] [Thread-168396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:37:14.603 [DEBUG] [Thread-168396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:37:14.651 [DEBUG] [Thread-168396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:37:14.651 [DEBUG] [Thread-168396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:37:14.661 [DEBUG] [Thread-168396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:37:14.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:37:14.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-04-11T10:37:14.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-04-11T10:37:14.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:37:14.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:37:14.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:37:14.697 [DEBUG] [Thread-168396] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:37:29.006 [DEBUG] [Thread-168399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:37.812 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:37.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:44.046 [DEBUG] [Thread-168400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:37:44.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:37:44.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-04-11T10:37:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 37, 9), 0.114775, 99.5399, 0.0, 17.8916, 12.8339, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:37:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:37:09
2026-04-11T10:37:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:37:46.684 [DEBUG] [Thread-168401] [transport.py] [_log()] starting thread (client mode): 0xa79b4df0
2026-04-11T10:37:46.684 [DEBUG] [Thread-168401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:37:46.706 [DEBUG] [Thread-168401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:37:46.706 [INFO] [Thread-168401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:46.710 [DEBUG] [Thread-168401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] client lang: <none>
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] server lang: <none>
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] kex follows: False
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] Compression: none
2026-04-11T10:37:46.711 [DEBUG] [Thread-168401] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:37:46.726 [DEBUG] [Thread-168401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:37:46.727 [DEBUG] [Thread-168401] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:37:46.727 [DEBUG] [Thread-168401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:37:46.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:37:46.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:37:46.729 [DEBUG] [Thread-168401] [transport.py] [_log()] userauth is OK
2026-04-11T10:37:46.729 [DEBUG] [Thread-168401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:37:46.729 [DEBUG] [Thread-168401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:37:46.729 [DEBUG] [Thread-168401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:37:46.729 [DEBUG] [Thread-168401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:37:46.753 [INFO] [Thread-168401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:37:46.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:37:47.548 [DEBUG] [Thread-168401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:37:47.548 [DEBUG] [Thread-168401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:37:47.549 [DEBUG] [Thread-168401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:37:47.589 [DEBUG] [Thread-168401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:37:47.590 [DEBUG] [Thread-168401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:37:47.591 [DEBUG] [Thread-168401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:37:47.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:37:47.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:37:47.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:37:47.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:37:47.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:37:47.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:37:47.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:37:47.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:37:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:37:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.359148 -999.00  +12.80   8.52     97  +12.40 1 3 1 3 1   888    0 0.43 -0.40 ----- 11.5 8.5 116.6 15.6 14.0 -0.8 14.0 -0.2 13.9 -0.3 14.1 -0.7
2026-04-11T10:37:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:37:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:37:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.359148
2026-04-11T10:37:47.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:37:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:37:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:37:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:37:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:37:47.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:37:09', tmtdew=0.114775, humidity=99.5399, cloud=0.0, wind=17.8916, temperature=12.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:37:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:37:47.612 [DEBUG] [Thread-168401] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:37:47.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:37:47.705 [DEBUG] [Thread-168404] [transport.py] [_log()] starting thread (client mode): 0xb0fcd450
2026-04-11T10:37:47.705 [DEBUG] [Thread-168404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:37:47.720 [DEBUG] [Thread-168404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:37:47.720 [INFO] [Thread-168404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] client lang: <none>
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] server lang: <none>
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] kex follows: False
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:37:47.727 [DEBUG] [Thread-168404] [transport.py] [_log()] Compression: none
2026-04-11T10:37:47.728 [DEBUG] [Thread-168404] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:37:47.787 [DEBUG] [Thread-168404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:37:47.788 [DEBUG] [Thread-168404] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:37:47.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:37:47.788 [DEBUG] [Thread-168404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:37:47.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:37:47.845 [DEBUG] [Thread-168404] [transport.py] [_log()] userauth is OK
2026-04-11T10:37:47.846 [DEBUG] [Thread-168404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:37:47.846 [DEBUG] [Thread-168404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:37:47.846 [DEBUG] [Thread-168404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:37:47.846 [DEBUG] [Thread-168404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:37:47.865 [INFO] [Thread-168404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:37:47.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:37:47.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:37:48.729 [DEBUG] [Thread-168404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:37:48.730 [DEBUG] [Thread-168404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:37:48.778 [DEBUG] [Thread-168404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:37:48.778 [DEBUG] [Thread-168404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:37:48.787 [DEBUG] [Thread-168404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:37:48.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:37:48.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-04-11T10:37:48.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:37:48.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:37:48.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:37:48.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:37:48.821 [DEBUG] [Thread-168404] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:37:59.082 [DEBUG] [Thread-168406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:37:59.726 [DEBUG] [Thread-168407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:14.136 [DEBUG] [Thread-168408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:18.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:38:18.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:38:18.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:38:20.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 37, 44), 0.14491, 98.9803, 0.0, 22.7239, 13.2015, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:38:20.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:37:44
2026-04-11T10:38:20.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:38:20.662 [DEBUG] [Thread-168409] [transport.py] [_log()] starting thread (client mode): 0xae5e4880
2026-04-11T10:38:20.662 [DEBUG] [Thread-168409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:38:20.682 [DEBUG] [Thread-168409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:38:20.682 [INFO] [Thread-168409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:20.683 [DEBUG] [Thread-168409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] client lang: <none>
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] server lang: <none>
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] kex follows: False
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] Compression: none
2026-04-11T10:38:20.684 [DEBUG] [Thread-168409] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:38:20.703 [DEBUG] [Thread-168409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:38:20.703 [DEBUG] [Thread-168409] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:38:20.704 [DEBUG] [Thread-168409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:38:20.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:38:20.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:38:20.706 [DEBUG] [Thread-168409] [transport.py] [_log()] userauth is OK
2026-04-11T10:38:20.706 [DEBUG] [Thread-168409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:38:20.706 [DEBUG] [Thread-168409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:38:20.707 [DEBUG] [Thread-168409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:38:20.707 [DEBUG] [Thread-168409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:38:20.743 [INFO] [Thread-168409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:38:20.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:38:21.491 [DEBUG] [Thread-168409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:38:21.491 [DEBUG] [Thread-168409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:38:21.491 [DEBUG] [Thread-168409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:38:21.533 [DEBUG] [Thread-168409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:38:21.533 [DEBUG] [Thread-168409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:38:21.536 [DEBUG] [Thread-168409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:38:21.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:38:21.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:38:21.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:38:21.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:38:21.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:38:21.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:38:21.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:38:21.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:38:21.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:38:21.561 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-11T10:38:21.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:37:44', tmtdew=0.14491, humidity=98.9803, cloud=0.0, wind=22.7239, temperature=13.2015, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:38:21.563 [DEBUG] [Thread-168409] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:38:21.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:38:21.674 [DEBUG] [Thread-168412] [transport.py] [_log()] starting thread (client mode): 0xa79513c0
2026-04-11T10:38:21.674 [DEBUG] [Thread-168412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:38:21.690 [DEBUG] [Thread-168412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:38:21.691 [INFO] [Thread-168412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:38:21.701 [DEBUG] [Thread-168412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:38:21.701 [DEBUG] [Thread-168412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] client lang: <none>
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] server lang: <none>
2026-04-11T10:38:21.702 [DEBUG] [Thread-168412] [transport.py] [_log()] kex follows: False
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] Compression: none
2026-04-11T10:38:21.703 [DEBUG] [Thread-168412] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:38:21.762 [DEBUG] [Thread-168412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:38:21.762 [DEBUG] [Thread-168412] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:38:21.763 [DEBUG] [Thread-168412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:38:21.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:38:21.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:38:21.823 [DEBUG] [Thread-168412] [transport.py] [_log()] userauth is OK
2026-04-11T10:38:21.823 [DEBUG] [Thread-168412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:38:21.824 [DEBUG] [Thread-168412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:38:21.824 [DEBUG] [Thread-168412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:38:21.824 [DEBUG] [Thread-168412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:38:21.844 [INFO] [Thread-168412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:38:21.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:38:21.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:38:22.677 [DEBUG] [Thread-168412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:38:22.678 [DEBUG] [Thread-168412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:38:22.726 [DEBUG] [Thread-168412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:38:22.726 [DEBUG] [Thread-168412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:38:22.736 [DEBUG] [Thread-168412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:38:22.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:38:22.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:38:22.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-04-11T10:38:22.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:38:22.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:38:22.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:38:22.781 [DEBUG] [Thread-168412] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:38:29.174 [DEBUG] [Thread-168414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:37.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:37.952 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:44.236 [DEBUG] [Thread-168415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:52.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:38:52.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:38:52.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:38:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 38, 20), 0.127585, 99.457, 0.0, 19.6204, 12.8008, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:38:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:38:20
2026-04-11T10:38:54.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:38:54.579 [DEBUG] [Thread-168416] [transport.py] [_log()] starting thread (client mode): 0xa7950610
2026-04-11T10:38:54.579 [DEBUG] [Thread-168416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:38:54.599 [DEBUG] [Thread-168416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:38:54.599 [INFO] [Thread-168416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:38:54.603 [DEBUG] [Thread-168416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] client lang: <none>
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] server lang: <none>
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] kex follows: False
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] Compression: none
2026-04-11T10:38:54.604 [DEBUG] [Thread-168416] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:38:54.623 [DEBUG] [Thread-168416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:38:54.623 [DEBUG] [Thread-168416] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:38:54.624 [DEBUG] [Thread-168416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:38:54.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:38:54.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:38:54.668 [DEBUG] [Thread-168416] [transport.py] [_log()] userauth is OK
2026-04-11T10:38:54.668 [DEBUG] [Thread-168416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:38:54.668 [DEBUG] [Thread-168416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:38:54.668 [DEBUG] [Thread-168416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:38:54.668 [DEBUG] [Thread-168416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:38:54.699 [INFO] [Thread-168416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:38:54.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:38:55.406 [DEBUG] [Thread-168416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:38:55.407 [DEBUG] [Thread-168416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:38:55.407 [DEBUG] [Thread-168416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:38:55.448 [DEBUG] [Thread-168416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:38:55.448 [DEBUG] [Thread-168416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:38:55.452 [DEBUG] [Thread-168416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:38:55.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:38:55.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:38:55.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:38:55.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:38:55.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:38:55.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:38:55.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:38:55.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:38:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:38:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.360190 -999.00  +12.80   9.54     97  +12.40 1 3 1 3 1   888    0 0.40 -1.17 ----- 8.7 9.5 113.7 19.0 14.0 -0.8 14.0 -0.3 13.9 -0.6 14.1 -0.6
2026-04-11T10:38:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:38:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:38:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.360190
2026-04-11T10:38:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:38:20', tmtdew=0.127585, humidity=99.457, cloud=0.0, wind=19.6204, temperature=12.8008, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:38:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:38:55.483 [DEBUG] [Thread-168416] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:38:55.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:38:55.576 [DEBUG] [Thread-168419] [transport.py] [_log()] starting thread (client mode): 0xa7951570
2026-04-11T10:38:55.577 [DEBUG] [Thread-168419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:38:55.592 [DEBUG] [Thread-168419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:38:55.592 [INFO] [Thread-168419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:38:55.599 [DEBUG] [Thread-168419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] client lang: <none>
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] server lang: <none>
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] kex follows: False
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:38:55.600 [DEBUG] [Thread-168419] [transport.py] [_log()] Compression: none
2026-04-11T10:38:55.601 [DEBUG] [Thread-168419] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:38:55.658 [DEBUG] [Thread-168419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:38:55.659 [DEBUG] [Thread-168419] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:38:55.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:38:55.660 [DEBUG] [Thread-168419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:38:55.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:38:55.714 [DEBUG] [Thread-168419] [transport.py] [_log()] userauth is OK
2026-04-11T10:38:55.715 [DEBUG] [Thread-168419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:38:55.715 [DEBUG] [Thread-168419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:38:55.715 [DEBUG] [Thread-168419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:38:55.715 [DEBUG] [Thread-168419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:38:55.733 [INFO] [Thread-168419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:38:55.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:38:55.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:38:56.571 [DEBUG] [Thread-168419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:38:56.571 [DEBUG] [Thread-168419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:38:56.619 [DEBUG] [Thread-168419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:38:56.620 [DEBUG] [Thread-168419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:38:56.629 [DEBUG] [Thread-168419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:38:56.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:38:56.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:38:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:38:56.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:38:56.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:38:56.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:38:56.665 [DEBUG] [Thread-168419] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:38:59.276 [DEBUG] [Thread-168421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:38:59.795 [DEBUG] [Thread-168422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:14.337 [DEBUG] [Thread-168423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:26.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:39:26.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:39:26.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:39:27.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 38, 56), 0.11733, 99.5233, 0.0, 18.1915, 12.8008, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:39:27.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:38:56
2026-04-11T10:39:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:39:28.509 [DEBUG] [Thread-168424] [transport.py] [_log()] starting thread (client mode): 0xb0fb6b90
2026-04-11T10:39:28.510 [DEBUG] [Thread-168424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:39:28.529 [DEBUG] [Thread-168424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:39:28.530 [INFO] [Thread-168424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] client lang: <none>
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] server lang: <none>
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] kex follows: False
2026-04-11T10:39:28.533 [DEBUG] [Thread-168424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:39:28.534 [DEBUG] [Thread-168424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:39:28.534 [DEBUG] [Thread-168424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:39:28.534 [DEBUG] [Thread-168424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:39:28.534 [DEBUG] [Thread-168424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:39:28.534 [DEBUG] [Thread-168424] [transport.py] [_log()] Compression: none
2026-04-11T10:39:28.534 [DEBUG] [Thread-168424] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:39:28.554 [DEBUG] [Thread-168424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:39:28.555 [DEBUG] [Thread-168424] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:39:28.555 [DEBUG] [Thread-168424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:39:28.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:39:28.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:39:28.561 [DEBUG] [Thread-168424] [transport.py] [_log()] userauth is OK
2026-04-11T10:39:28.562 [DEBUG] [Thread-168424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:39:28.562 [DEBUG] [Thread-168424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:39:28.562 [DEBUG] [Thread-168424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:39:28.562 [DEBUG] [Thread-168424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:39:28.587 [INFO] [Thread-168424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:39:28.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:39:29.303 [DEBUG] [Thread-168424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:39:29.304 [DEBUG] [Thread-168424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:39:29.304 [DEBUG] [Thread-168424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:39:29.347 [DEBUG] [Thread-168424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:39:29.347 [DEBUG] [Thread-168424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:39:29.351 [DEBUG] [Thread-168424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:39:29.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:39:29.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:39:29.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:39:29.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:39:29.376 [DEBUG] [Thread-168427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:29.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:39:29.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:39:29.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:39:29.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:39:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:39:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.360190 -999.00  +12.80   9.54     97  +12.40 1 3 1 3 1   888    0 0.40 -1.17 ----- 8.7 9.5 113.7 19.0 14.0 -0.8 14.0 -0.3 13.9 -0.6 14.1 -0.6
2026-04-11T10:39:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:39:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:39:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.360190
2026-04-11T10:39:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:39:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:39:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:39:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:39:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:39:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:38:56', tmtdew=0.11733, humidity=99.5233, cloud=0.0, wind=18.1915, temperature=12.8008, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:38:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:39:29.387 [DEBUG] [Thread-168424] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:39:29.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:39:29.479 [DEBUG] [Thread-168428] [transport.py] [_log()] starting thread (client mode): 0xb0f8f670
2026-04-11T10:39:29.480 [DEBUG] [Thread-168428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:39:29.494 [DEBUG] [Thread-168428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:39:29.494 [INFO] [Thread-168428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] client lang: <none>
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] server lang: <none>
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] kex follows: False
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:39:29.502 [DEBUG] [Thread-168428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:39:29.503 [DEBUG] [Thread-168428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:39:29.503 [DEBUG] [Thread-168428] [transport.py] [_log()] Compression: none
2026-04-11T10:39:29.503 [DEBUG] [Thread-168428] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:39:29.563 [DEBUG] [Thread-168428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:39:29.564 [DEBUG] [Thread-168428] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:39:29.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:39:29.565 [DEBUG] [Thread-168428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:39:29.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:39:29.623 [DEBUG] [Thread-168428] [transport.py] [_log()] userauth is OK
2026-04-11T10:39:29.623 [DEBUG] [Thread-168428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:39:29.623 [DEBUG] [Thread-168428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:39:29.624 [DEBUG] [Thread-168428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:39:29.624 [DEBUG] [Thread-168428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:39:29.642 [INFO] [Thread-168428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:39:29.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:39:29.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:39:30.498 [DEBUG] [Thread-168428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:39:30.498 [DEBUG] [Thread-168428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:39:30.547 [DEBUG] [Thread-168428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:39:30.547 [DEBUG] [Thread-168428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:39:30.556 [DEBUG] [Thread-168428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:39:30.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:39:30.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-04-11T10:39:30.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:39:30.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:39:30.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:39:30.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:39:30.594 [DEBUG] [Thread-168428] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:39:38.092 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:38.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:44.416 [DEBUG] [Thread-168430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:59.470 [DEBUG] [Thread-168431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:39:59.849 [DEBUG] [Thread-168432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:40:00.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:40:00.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-04-11T10:40:01.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 39, 31), 0.11478, 99.5399, 0.0, 18.2621, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:40:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:39:31
2026-04-11T10:40:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:40:02.641 [DEBUG] [Thread-168433] [transport.py] [_log()] starting thread (client mode): 0xb0fce6b0
2026-04-11T10:40:02.641 [DEBUG] [Thread-168433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:40:02.652 [DEBUG] [Thread-168433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:40:02.652 [INFO] [Thread-168433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] client lang: <none>
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] server lang: <none>
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] kex follows: False
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] Compression: none
2026-04-11T10:40:02.653 [DEBUG] [Thread-168433] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:40:02.661 [DEBUG] [Thread-168433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:40:02.662 [DEBUG] [Thread-168433] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:40:02.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:40:02.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:40:02.662 [DEBUG] [Thread-168433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:40:02.664 [DEBUG] [Thread-168433] [transport.py] [_log()] userauth is OK
2026-04-11T10:40:02.664 [DEBUG] [Thread-168433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:40:02.664 [DEBUG] [Thread-168433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:40:02.664 [DEBUG] [Thread-168433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:40:02.664 [DEBUG] [Thread-168433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:40:02.684 [INFO] [Thread-168433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:40:02.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:40:13.120 [DEBUG] [Thread-168433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:40:13.121 [DEBUG] [Thread-168433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:40:13.121 [DEBUG] [Thread-168433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:40:13.162 [DEBUG] [Thread-168433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:40:13.162 [DEBUG] [Thread-168433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:40:13.165 [DEBUG] [Thread-168433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:40:13.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:40:13.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:40:13.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:40:13.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:40:13.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:40:13.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:40:13.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:40:13.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:40:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:40:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.360537 -999.00  +12.80  22.14     97  +12.30 1 3 1 3 1   888    0 0.39 -1.35 ----- 13.0 22.1 61.0 25.9 13.9 -0.7 14.0 -0.3 13.9 -0.6 14.2 -0.9
2026-04-11T10:40:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:40:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:40:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.360537
2026-04-11T10:40:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:40:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:40:13.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:40:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:40:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:40:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:39:31', tmtdew=0.11478, humidity=99.5399, cloud=0.0, wind=18.2621, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:39:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:40:13.343 [DEBUG] [Thread-168433] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:40:13.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:40:13.437 [DEBUG] [Thread-168436] [transport.py] [_log()] starting thread (client mode): 0xb0fcf4c0
2026-04-11T10:40:13.438 [DEBUG] [Thread-168436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:40:13.452 [DEBUG] [Thread-168436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:40:13.453 [INFO] [Thread-168436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:40:13.460 [DEBUG] [Thread-168436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:40:13.460 [DEBUG] [Thread-168436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] client lang: <none>
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] server lang: <none>
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] kex follows: False
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] Compression: none
2026-04-11T10:40:13.461 [DEBUG] [Thread-168436] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:40:13.519 [DEBUG] [Thread-168436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:40:13.520 [DEBUG] [Thread-168436] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:40:13.521 [DEBUG] [Thread-168436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:40:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:40:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:40:13.575 [DEBUG] [Thread-168436] [transport.py] [_log()] userauth is OK
2026-04-11T10:40:13.575 [DEBUG] [Thread-168436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:40:13.576 [DEBUG] [Thread-168436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:40:13.576 [DEBUG] [Thread-168436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:40:13.576 [DEBUG] [Thread-168436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:40:13.600 [INFO] [Thread-168436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:40:13.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:40:13.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:40:14.445 [DEBUG] [Thread-168436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:40:14.445 [DEBUG] [Thread-168436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:40:14.493 [DEBUG] [Thread-168436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:40:14.493 [DEBUG] [Thread-168436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:40:14.503 [DEBUG] [Thread-168436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:40:14.506 [DEBUG] [Thread-168438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:14.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:40:14.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-04-11T10:40:14.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-04-11T10:40:14.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:40:14.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:40:14.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:40:14.539 [DEBUG] [Thread-168436] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:40:29.564 [DEBUG] [Thread-168439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:38.234 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:38.236 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:44.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:40:44.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:40:44.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-04-11T10:40:44.601 [DEBUG] [Thread-168440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 40, 6), 0.11478, 99.5399, 0.0, 18.2621, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:40:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:40:06
2026-04-11T10:40:46.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:40:46.565 [DEBUG] [Thread-168441] [transport.py] [_log()] starting thread (client mode): 0xb0fcd030
2026-04-11T10:40:46.565 [DEBUG] [Thread-168441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:40:46.585 [DEBUG] [Thread-168441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:40:46.585 [INFO] [Thread-168441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:40:46.588 [DEBUG] [Thread-168441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:40:46.588 [DEBUG] [Thread-168441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:40:46.588 [DEBUG] [Thread-168441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] client lang: <none>
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] server lang: <none>
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] kex follows: False
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:40:46.589 [DEBUG] [Thread-168441] [transport.py] [_log()] Compression: none
2026-04-11T10:40:46.590 [DEBUG] [Thread-168441] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:40:46.607 [DEBUG] [Thread-168441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:40:46.608 [DEBUG] [Thread-168441] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:40:46.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:40:46.609 [DEBUG] [Thread-168441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:40:46.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:40:46.611 [DEBUG] [Thread-168441] [transport.py] [_log()] userauth is OK
2026-04-11T10:40:46.611 [DEBUG] [Thread-168441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:40:46.611 [DEBUG] [Thread-168441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:40:46.611 [DEBUG] [Thread-168441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:40:46.612 [DEBUG] [Thread-168441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:40:46.636 [INFO] [Thread-168441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:40:46.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:40:48.573 [DEBUG] [Thread-168441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:40:48.574 [DEBUG] [Thread-168441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:40:48.574 [DEBUG] [Thread-168441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:40:48.614 [DEBUG] [Thread-168441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:40:48.614 [DEBUG] [Thread-168441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:40:48.618 [DEBUG] [Thread-168441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:40:48.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:40:48.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:40:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:40:48.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:40:48.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:40:48.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:40:48.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:40:48.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:40:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:40:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.360884 -999.00  +12.80  10.85     97  +12.30 1 3 1 3 1   888    0 0.41 -0.98 ----- 17.6 10.8 115.3 19.2 13.9 -0.9 14.0 -0.4 13.9 -0.5 14.1 -0.8
2026-04-11T10:40:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:40:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:40:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.360884
2026-04-11T10:40:48.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:40:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:40:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:40:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:40:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:40:48.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:40:06', tmtdew=0.11478, humidity=99.5399, cloud=0.0, wind=18.2621, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:39:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:40:48.658 [DEBUG] [Thread-168441] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:40:48.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:40:48.751 [DEBUG] [Thread-168444] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ab0
2026-04-11T10:40:48.751 [DEBUG] [Thread-168444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:40:48.765 [DEBUG] [Thread-168444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:40:48.766 [INFO] [Thread-168444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:40:48.773 [DEBUG] [Thread-168444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:40:48.774 [DEBUG] [Thread-168444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:40:48.774 [DEBUG] [Thread-168444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:40:48.774 [DEBUG] [Thread-168444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:48.774 [DEBUG] [Thread-168444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:40:48.774 [DEBUG] [Thread-168444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:48.774 [DEBUG] [Thread-168444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] client lang: <none>
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] server lang: <none>
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] kex follows: False
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:40:48.775 [DEBUG] [Thread-168444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:40:48.776 [DEBUG] [Thread-168444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:40:48.776 [DEBUG] [Thread-168444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:40:48.776 [DEBUG] [Thread-168444] [transport.py] [_log()] Compression: none
2026-04-11T10:40:48.776 [DEBUG] [Thread-168444] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:40:48.836 [DEBUG] [Thread-168444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:40:48.836 [DEBUG] [Thread-168444] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:40:48.837 [DEBUG] [Thread-168444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:40:48.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:40:48.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:40:48.895 [DEBUG] [Thread-168444] [transport.py] [_log()] userauth is OK
2026-04-11T10:40:48.896 [DEBUG] [Thread-168444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:40:48.896 [DEBUG] [Thread-168444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:40:48.896 [DEBUG] [Thread-168444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:40:48.896 [DEBUG] [Thread-168444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:40:48.916 [INFO] [Thread-168444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:40:48.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:40:48.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:40:49.775 [DEBUG] [Thread-168444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:40:49.775 [DEBUG] [Thread-168444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:40:49.823 [DEBUG] [Thread-168444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:40:49.823 [DEBUG] [Thread-168444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:40:49.832 [DEBUG] [Thread-168444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:40:49.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:40:49.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-04-11T10:40:49.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-04-11T10:40:49.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:40:49.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:40:49.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:40:49.869 [DEBUG] [Thread-168444] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:40:59.638 [DEBUG] [Thread-168446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:40:59.917 [DEBUG] [Thread-168447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:14.689 [DEBUG] [Thread-168448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:19.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:41:19.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:41:19.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:41:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 40, 42), 0.12956, 99.0798, 0.0, 22.1242, 13.3342, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:41:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:40:42
2026-04-11T10:41:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:41:21.758 [DEBUG] [Thread-168449] [transport.py] [_log()] starting thread (client mode): 0xb0f8f550
2026-04-11T10:41:21.758 [DEBUG] [Thread-168449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:41:21.779 [DEBUG] [Thread-168449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:41:21.779 [INFO] [Thread-168449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] client lang: <none>
2026-04-11T10:41:21.782 [DEBUG] [Thread-168449] [transport.py] [_log()] server lang: <none>
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] kex follows: False
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] Compression: none
2026-04-11T10:41:21.783 [DEBUG] [Thread-168449] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:41:21.802 [DEBUG] [Thread-168449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:41:21.803 [DEBUG] [Thread-168449] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:41:21.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:41:21.804 [DEBUG] [Thread-168449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:41:21.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:41:21.806 [DEBUG] [Thread-168449] [transport.py] [_log()] userauth is OK
2026-04-11T10:41:21.806 [DEBUG] [Thread-168449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:41:21.806 [DEBUG] [Thread-168449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:41:21.806 [DEBUG] [Thread-168449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:41:21.806 [DEBUG] [Thread-168449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:41:21.830 [INFO] [Thread-168449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:41:21.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:41:22.653 [DEBUG] [Thread-168449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:41:22.653 [DEBUG] [Thread-168449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:41:22.654 [DEBUG] [Thread-168449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:41:22.694 [DEBUG] [Thread-168449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:41:22.694 [DEBUG] [Thread-168449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:41:22.698 [DEBUG] [Thread-168449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:41:22.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:41:22.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:41:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:41:22.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:41:22.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:41:22.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:41:22.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:41:22.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:41:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:41:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.361579 -999.00  +12.80   7.80     97  +12.30 1 3 1 3 1   888    0 0.41 -0.70 ----- 11.4 7.8 84.8 25.2 13.9 -1.2 14.0 -0.4 13.8 -0.6 14.1 -0.7
2026-04-11T10:41:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:41:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:41:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.361579
2026-04-11T10:41:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:41:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:41:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:41:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:41:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:41:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:40:42', tmtdew=0.12956, humidity=99.0798, cloud=0.0, wind=22.1242, temperature=13.3342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:40:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:41:22.727 [DEBUG] [Thread-168449] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:41:22.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:41:22.823 [DEBUG] [Thread-168452] [transport.py] [_log()] starting thread (client mode): 0xb0f8c160
2026-04-11T10:41:22.824 [DEBUG] [Thread-168452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:41:22.838 [DEBUG] [Thread-168452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:41:22.838 [INFO] [Thread-168452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] client lang: <none>
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] server lang: <none>
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] kex follows: False
2026-04-11T10:41:22.846 [DEBUG] [Thread-168452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:41:22.847 [DEBUG] [Thread-168452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:41:22.847 [DEBUG] [Thread-168452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:41:22.847 [DEBUG] [Thread-168452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:41:22.847 [DEBUG] [Thread-168452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:41:22.847 [DEBUG] [Thread-168452] [transport.py] [_log()] Compression: none
2026-04-11T10:41:22.847 [DEBUG] [Thread-168452] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:41:22.904 [DEBUG] [Thread-168452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:41:22.904 [DEBUG] [Thread-168452] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:41:22.905 [DEBUG] [Thread-168452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:41:22.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:41:22.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:41:22.960 [DEBUG] [Thread-168452] [transport.py] [_log()] userauth is OK
2026-04-11T10:41:22.961 [DEBUG] [Thread-168452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:41:22.961 [DEBUG] [Thread-168452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:41:22.961 [DEBUG] [Thread-168452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:41:22.961 [DEBUG] [Thread-168452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:41:22.980 [INFO] [Thread-168452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:41:22.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:41:22.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:41:23.820 [DEBUG] [Thread-168452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:41:23.821 [DEBUG] [Thread-168452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:41:23.869 [DEBUG] [Thread-168452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:41:23.869 [DEBUG] [Thread-168452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:41:23.879 [DEBUG] [Thread-168452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:41:23.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:41:23.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-04-11T10:41:23.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:41:23.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:41:23.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:41:23.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:41:23.916 [DEBUG] [Thread-168452] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:41:29.725 [DEBUG] [Thread-168454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:38.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:38.377 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:44.780 [DEBUG] [Thread-168455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:53.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:41:53.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:41:53.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-04-11T10:41:55.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 41, 18), 0.11733, 99.5233, 0.0, 21.1741, 12.8173, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:41:55.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:41:18
2026-04-11T10:41:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:41:55.963 [DEBUG] [Thread-168456] [transport.py] [_log()] starting thread (client mode): 0xae5e6140
2026-04-11T10:41:55.963 [DEBUG] [Thread-168456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:41:55.983 [DEBUG] [Thread-168456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:41:55.983 [INFO] [Thread-168456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:41:55.986 [DEBUG] [Thread-168456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] client lang: <none>
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] server lang: <none>
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] kex follows: False
2026-04-11T10:41:55.987 [DEBUG] [Thread-168456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:41:55.988 [DEBUG] [Thread-168456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:41:55.988 [DEBUG] [Thread-168456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:41:55.988 [DEBUG] [Thread-168456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:41:55.988 [DEBUG] [Thread-168456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:41:55.988 [DEBUG] [Thread-168456] [transport.py] [_log()] Compression: none
2026-04-11T10:41:55.988 [DEBUG] [Thread-168456] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:41:56.008 [DEBUG] [Thread-168456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:41:56.008 [DEBUG] [Thread-168456] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:41:56.009 [DEBUG] [Thread-168456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:41:56.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:41:56.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:41:56.011 [DEBUG] [Thread-168456] [transport.py] [_log()] userauth is OK
2026-04-11T10:41:56.011 [DEBUG] [Thread-168456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:41:56.011 [DEBUG] [Thread-168456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:41:56.011 [DEBUG] [Thread-168456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:41:56.012 [DEBUG] [Thread-168456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:41:56.032 [INFO] [Thread-168456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:41:56.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:41:56.828 [DEBUG] [Thread-168456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:41:56.829 [DEBUG] [Thread-168456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:41:56.829 [DEBUG] [Thread-168456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:41:56.870 [DEBUG] [Thread-168456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:41:56.870 [DEBUG] [Thread-168456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:41:56.873 [DEBUG] [Thread-168456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:41:56.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:41:56.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:41:56.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:41:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:41:56.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:41:56.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:41:56.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:41:56.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:41:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:41:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.361926 -999.00  +12.80   7.29     97  +12.30 1 3 1 3 1   888    0 0.44 0.06 ----- 12.3 7.3 85.9 17.3 13.9 -0.9 14.0 -0.4 13.9 -0.6 14.1 -0.7
2026-04-11T10:41:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:41:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:41:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.361926
2026-04-11T10:41:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:41:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:41:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:41:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:41:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:41:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:41:18', tmtdew=0.11733, humidity=99.5233, cloud=0.0, wind=21.1741, temperature=12.8173, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:41:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:41:56.902 [DEBUG] [Thread-168456] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:41:56.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:41:56.994 [DEBUG] [Thread-168459] [transport.py] [_log()] starting thread (client mode): 0xae5e4790
2026-04-11T10:41:56.994 [DEBUG] [Thread-168459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:41:57.009 [DEBUG] [Thread-168459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:41:57.009 [INFO] [Thread-168459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:41:57.017 [DEBUG] [Thread-168459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:41:57.017 [DEBUG] [Thread-168459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:41:57.017 [DEBUG] [Thread-168459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:41:57.017 [DEBUG] [Thread-168459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:57.017 [DEBUG] [Thread-168459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:41:57.017 [DEBUG] [Thread-168459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] client lang: <none>
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] server lang: <none>
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] kex follows: False
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] Compression: none
2026-04-11T10:41:57.018 [DEBUG] [Thread-168459] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:41:57.076 [DEBUG] [Thread-168459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:41:57.077 [DEBUG] [Thread-168459] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:41:57.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:41:57.078 [DEBUG] [Thread-168459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:41:57.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:41:57.136 [DEBUG] [Thread-168459] [transport.py] [_log()] userauth is OK
2026-04-11T10:41:57.136 [DEBUG] [Thread-168459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:41:57.136 [DEBUG] [Thread-168459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:41:57.136 [DEBUG] [Thread-168459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:41:57.136 [DEBUG] [Thread-168459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:41:57.155 [INFO] [Thread-168459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:41:57.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:41:57.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:41:57.948 [DEBUG] [Thread-168459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:41:57.949 [DEBUG] [Thread-168459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:41:57.997 [DEBUG] [Thread-168459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:41:57.997 [DEBUG] [Thread-168459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:41:58.006 [DEBUG] [Thread-168459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:41:58.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:41:58.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-04-11T10:41:58.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-04-11T10:41:58.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:41:58.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:41:58.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:41:58.040 [DEBUG] [Thread-168459] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:41:59.818 [DEBUG] [Thread-168461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:41:59.977 [DEBUG] [Thread-168462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:42:14.869 [DEBUG] [Thread-168463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:42:28.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:42:28.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:42:28.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-04-11T10:42:29.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 41, 53), 0.13978, 99.0135, 0.0, 20.7835, 13.2015, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:42:29.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:41:53
2026-04-11T10:42:29.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:42:29.905 [DEBUG] [Thread-168464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:42:29.924 [DEBUG] [Thread-168465] [transport.py] [_log()] starting thread (client mode): 0xb0fccb80
2026-04-11T10:42:29.925 [DEBUG] [Thread-168465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:42:29.945 [DEBUG] [Thread-168465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:42:29.945 [INFO] [Thread-168465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:42:29.948 [DEBUG] [Thread-168465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:42:29.948 [DEBUG] [Thread-168465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:42:29.948 [DEBUG] [Thread-168465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:42:29.948 [DEBUG] [Thread-168465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:42:29.948 [DEBUG] [Thread-168465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:42:29.948 [DEBUG] [Thread-168465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] client lang: <none>
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] server lang: <none>
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] kex follows: False
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] Compression: none
2026-04-11T10:42:29.949 [DEBUG] [Thread-168465] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:42:29.966 [DEBUG] [Thread-168465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:42:29.966 [DEBUG] [Thread-168465] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:42:29.967 [DEBUG] [Thread-168465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:42:29.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:42:29.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:42:29.969 [DEBUG] [Thread-168465] [transport.py] [_log()] userauth is OK
2026-04-11T10:42:29.969 [DEBUG] [Thread-168465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:42:29.969 [DEBUG] [Thread-168465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:42:29.969 [DEBUG] [Thread-168465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:42:29.969 [DEBUG] [Thread-168465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:42:29.994 [INFO] [Thread-168465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:42:29.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:42:30.749 [DEBUG] [Thread-168465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:42:30.749 [DEBUG] [Thread-168465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:42:30.750 [DEBUG] [Thread-168465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:42:30.790 [DEBUG] [Thread-168465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:42:30.790 [DEBUG] [Thread-168465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:42:30.795 [DEBUG] [Thread-168465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:42:30.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:42:30.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:42:30.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:42:30.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:42:30.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:42:30.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:42:30.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:42:30.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:42:30.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:42:30.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.362273 -999.00  +12.80   6.77     97  +12.40 1 3 1 3 1   888    0 0.45 0.63 ----- 10.3 6.8 67.2 20.3 13.9 -0.8 14.0 -0.3 13.8 -0.6 14.1 -0.8
2026-04-11T10:42:30.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:42:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:42:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.362273
2026-04-11T10:42:30.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:42:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:42:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:42:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:42:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:42:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:41:53', tmtdew=0.13978, humidity=99.0135, cloud=0.0, wind=20.7835, temperature=13.2015, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:41:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:42:30.822 [DEBUG] [Thread-168465] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:42:30.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:42:30.929 [DEBUG] [Thread-168468] [transport.py] [_log()] starting thread (client mode): 0xb0fced40
2026-04-11T10:42:30.929 [DEBUG] [Thread-168468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:42:30.944 [DEBUG] [Thread-168468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:42:30.944 [INFO] [Thread-168468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:42:30.952 [DEBUG] [Thread-168468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:42:30.952 [DEBUG] [Thread-168468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:42:30.952 [DEBUG] [Thread-168468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] client lang: <none>
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] server lang: <none>
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] kex follows: False
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] Compression: none
2026-04-11T10:42:30.953 [DEBUG] [Thread-168468] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:42:31.014 [DEBUG] [Thread-168468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:42:31.015 [DEBUG] [Thread-168468] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:42:31.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:42:31.016 [DEBUG] [Thread-168468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:42:31.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:42:31.074 [DEBUG] [Thread-168468] [transport.py] [_log()] userauth is OK
2026-04-11T10:42:31.074 [DEBUG] [Thread-168468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:42:31.074 [DEBUG] [Thread-168468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:42:31.074 [DEBUG] [Thread-168468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:42:31.074 [DEBUG] [Thread-168468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:42:31.093 [INFO] [Thread-168468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:42:31.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:42:31.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:42:31.937 [DEBUG] [Thread-168468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:42:31.938 [DEBUG] [Thread-168468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:42:31.987 [DEBUG] [Thread-168468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:42:31.987 [DEBUG] [Thread-168468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:42:31.999 [DEBUG] [Thread-168468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:42:32.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:42:32.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-04-11T10:42:32.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-04-11T10:42:32.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:42:32.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:42:32.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:42:32.038 [DEBUG] [Thread-168468] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:42:38.515 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:42:38.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:42:44.938 [DEBUG] [Thread-168470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:42:59.998 [DEBUG] [Thread-168471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:43:00.033 [DEBUG] [Thread-168472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:43:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:43:02.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:43:02.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:43:03.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 42, 29), 0.12246, 99.4902, 0.0, 17.663, 12.8173, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:43:03.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:42:29
2026-04-11T10:43:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:43:03.995 [DEBUG] [Thread-168473] [transport.py] [_log()] starting thread (client mode): 0xb0fb5270
2026-04-11T10:43:03.995 [DEBUG] [Thread-168473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:43:04.016 [DEBUG] [Thread-168473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:43:04.017 [INFO] [Thread-168473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:04.019 [DEBUG] [Thread-168473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] client lang: <none>
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] server lang: <none>
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] kex follows: False
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] Compression: none
2026-04-11T10:43:04.020 [DEBUG] [Thread-168473] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:43:04.037 [DEBUG] [Thread-168473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:43:04.038 [DEBUG] [Thread-168473] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:43:04.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:43:04.039 [DEBUG] [Thread-168473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:43:04.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:43:04.041 [DEBUG] [Thread-168473] [transport.py] [_log()] userauth is OK
2026-04-11T10:43:04.042 [DEBUG] [Thread-168473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:43:04.042 [DEBUG] [Thread-168473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:43:04.042 [DEBUG] [Thread-168473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:43:04.042 [DEBUG] [Thread-168473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:43:04.066 [INFO] [Thread-168473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:43:04.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:43:04.844 [DEBUG] [Thread-168473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:43:04.845 [DEBUG] [Thread-168473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:43:04.845 [DEBUG] [Thread-168473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:43:04.886 [DEBUG] [Thread-168473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:43:04.886 [DEBUG] [Thread-168473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:43:04.889 [DEBUG] [Thread-168473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:43:04.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:43:04.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:43:04.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:43:04.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:43:04.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:43:04.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:43:04.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:43:04.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:43:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:43:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.362620 -999.00  +12.80  11.85     97  +12.30 1 3 1 3 1   888    0 0.46 0.47 ----- 16.3 11.8 102.8 19.6 13.9 -1.4 14.0 -0.5 13.8 -0.5 14.1 -0.7
2026-04-11T10:43:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:43:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:43:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.362620
2026-04-11T10:43:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:43:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:43:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:43:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:43:04.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:43:04.916 [DEBUG] [Thread-168473] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:43:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:42:29', tmtdew=0.12246, humidity=99.4902, cloud=0.0, wind=17.663, temperature=12.8173, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:42:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:43:05.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:43:05.011 [DEBUG] [Thread-168476] [transport.py] [_log()] starting thread (client mode): 0xb0f6d780
2026-04-11T10:43:05.011 [DEBUG] [Thread-168476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:43:05.026 [DEBUG] [Thread-168476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:43:05.026 [INFO] [Thread-168476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:43:05.033 [DEBUG] [Thread-168476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:43:05.034 [DEBUG] [Thread-168476] [transport.py] [_log()] client lang: <none>
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] server lang: <none>
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] kex follows: False
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:43:05.035 [DEBUG] [Thread-168476] [transport.py] [_log()] Compression: none
2026-04-11T10:43:05.036 [DEBUG] [Thread-168476] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:43:05.094 [DEBUG] [Thread-168476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:43:05.095 [DEBUG] [Thread-168476] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:43:05.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:43:05.096 [DEBUG] [Thread-168476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:43:05.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:43:05.152 [DEBUG] [Thread-168476] [transport.py] [_log()] userauth is OK
2026-04-11T10:43:05.152 [DEBUG] [Thread-168476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:43:05.153 [DEBUG] [Thread-168476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:43:05.153 [DEBUG] [Thread-168476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:43:05.153 [DEBUG] [Thread-168476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:43:05.173 [INFO] [Thread-168476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:43:05.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:43:05.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:43:06.013 [DEBUG] [Thread-168476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:43:06.013 [DEBUG] [Thread-168476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:43:06.061 [DEBUG] [Thread-168476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:43:06.061 [DEBUG] [Thread-168476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:43:06.071 [DEBUG] [Thread-168476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:43:06.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:43:06.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-04-11T10:43:06.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:43:06.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:43:06.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:43:06.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:43:06.112 [DEBUG] [Thread-168476] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:43:15.037 [DEBUG] [Thread-168478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:43:30.092 [DEBUG] [Thread-168479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:43:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:43:36.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:43:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:43:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 43, 4), 0.11221, 99.5565, 0.0, 19.1624, 12.8339, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:43:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:43:04
2026-04-11T10:43:37.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:43:37.945 [DEBUG] [Thread-168480] [transport.py] [_log()] starting thread (client mode): 0xb0fb59c0
2026-04-11T10:43:37.945 [DEBUG] [Thread-168480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:43:37.966 [DEBUG] [Thread-168480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:43:37.966 [INFO] [Thread-168480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:43:37.969 [DEBUG] [Thread-168480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:37.970 [DEBUG] [Thread-168480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] client lang: <none>
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] server lang: <none>
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] kex follows: False
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:43:37.971 [DEBUG] [Thread-168480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:43:37.972 [DEBUG] [Thread-168480] [transport.py] [_log()] Compression: none
2026-04-11T10:43:37.972 [DEBUG] [Thread-168480] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:43:37.989 [DEBUG] [Thread-168480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:43:37.990 [DEBUG] [Thread-168480] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:43:37.990 [DEBUG] [Thread-168480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:43:37.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:43:37.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:43:37.992 [DEBUG] [Thread-168480] [transport.py] [_log()] userauth is OK
2026-04-11T10:43:37.993 [DEBUG] [Thread-168480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:43:37.993 [DEBUG] [Thread-168480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:43:37.993 [DEBUG] [Thread-168480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:43:37.993 [DEBUG] [Thread-168480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:43:38.028 [INFO] [Thread-168480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:43:38.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:43:38.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:43:38.657 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:43:38.806 [DEBUG] [Thread-168480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:43:38.807 [DEBUG] [Thread-168480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:43:38.807 [DEBUG] [Thread-168480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:43:38.847 [DEBUG] [Thread-168480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:43:38.847 [DEBUG] [Thread-168480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:43:38.850 [DEBUG] [Thread-168480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:43:38.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:43:38.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:43:38.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:43:38.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:43:38.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:43:38.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:43:38.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:43:38.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:43:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:43:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.362968 -999.00  +12.70  13.06     97  +12.30 1 3 1 3 1   888    0 0.45 0.27 ----- 15.7 13.1 110.2 20.4 13.9 -1.0 13.9 -0.7 13.9 -0.5 14.1 -0.8
2026-04-11T10:43:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:43:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:43:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.362968
2026-04-11T10:43:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:43:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:43:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:43:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:43:38.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:43:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:43:04', tmtdew=0.11221, humidity=99.5565, cloud=0.0, wind=19.1624, temperature=12.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:42:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:43:38.870 [DEBUG] [Thread-168480] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:43:38.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:43:38.967 [DEBUG] [Thread-168483] [transport.py] [_log()] starting thread (client mode): 0xae51af80
2026-04-11T10:43:38.967 [DEBUG] [Thread-168483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:43:38.985 [DEBUG] [Thread-168483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:43:38.986 [INFO] [Thread-168483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:43:38.993 [DEBUG] [Thread-168483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] client lang: <none>
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] server lang: <none>
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] kex follows: False
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:43:38.994 [DEBUG] [Thread-168483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:43:38.995 [DEBUG] [Thread-168483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:43:38.995 [DEBUG] [Thread-168483] [transport.py] [_log()] Compression: none
2026-04-11T10:43:38.995 [DEBUG] [Thread-168483] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:43:39.054 [DEBUG] [Thread-168483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:43:39.055 [DEBUG] [Thread-168483] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:43:39.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:43:39.056 [DEBUG] [Thread-168483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:43:39.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:43:39.110 [DEBUG] [Thread-168483] [transport.py] [_log()] userauth is OK
2026-04-11T10:43:39.111 [DEBUG] [Thread-168483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:43:39.111 [DEBUG] [Thread-168483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:43:39.111 [DEBUG] [Thread-168483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:43:39.111 [DEBUG] [Thread-168483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:43:39.138 [INFO] [Thread-168483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:43:39.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:43:39.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:43:39.959 [DEBUG] [Thread-168483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:43:39.959 [DEBUG] [Thread-168483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:43:40.007 [DEBUG] [Thread-168483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:43:40.007 [DEBUG] [Thread-168483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:43:40.017 [DEBUG] [Thread-168483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:43:40.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:43:40.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:43:40.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:43:40.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:43:40.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:43:40.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:43:40.053 [DEBUG] [Thread-168483] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:43:45.129 [DEBUG] [Thread-168485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:00.089 [DEBUG] [Thread-168486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:00.181 [DEBUG] [Thread-168487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:44:10.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:44:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:44:11.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 43, 40), 0.13466, 99.0467, 0.0, 22.5475, 13.2347, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:44:11.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:43:40
2026-04-11T10:44:11.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:44:11.970 [DEBUG] [Thread-168488] [transport.py] [_log()] starting thread (client mode): 0xb0f6c130
2026-04-11T10:44:11.970 [DEBUG] [Thread-168488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:44:11.990 [DEBUG] [Thread-168488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:44:11.990 [INFO] [Thread-168488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] client lang: <none>
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] server lang: <none>
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] kex follows: False
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:44:11.993 [DEBUG] [Thread-168488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:44:11.994 [DEBUG] [Thread-168488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:44:11.994 [DEBUG] [Thread-168488] [transport.py] [_log()] Compression: none
2026-04-11T10:44:11.994 [DEBUG] [Thread-168488] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:44:12.009 [DEBUG] [Thread-168488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:44:12.009 [DEBUG] [Thread-168488] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:44:12.010 [DEBUG] [Thread-168488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:44:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:44:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:44:12.011 [DEBUG] [Thread-168488] [transport.py] [_log()] userauth is OK
2026-04-11T10:44:12.012 [DEBUG] [Thread-168488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:44:12.012 [DEBUG] [Thread-168488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:44:12.012 [DEBUG] [Thread-168488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:44:12.012 [DEBUG] [Thread-168488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:44:12.031 [INFO] [Thread-168488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:44:12.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:44:12.801 [DEBUG] [Thread-168488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:44:12.801 [DEBUG] [Thread-168488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:44:12.801 [DEBUG] [Thread-168488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:44:12.842 [DEBUG] [Thread-168488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:44:12.842 [DEBUG] [Thread-168488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:44:12.845 [DEBUG] [Thread-168488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:44:12.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:44:12.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:44:12.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:44:12.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:44:12.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:44:12.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:44:12.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:44:12.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:44:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:44:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.363315 -999.00  +12.70  11.88     97  +12.30 1 3 1 3 1   888    0 0.44 0.00 ----- 9.1 11.9 114.2 23.3 13.9 -1.0 13.9 -0.5 13.8 -0.2 14.1 -0.8
2026-04-11T10:44:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:44:12.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:44:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.363315
2026-04-11T10:44:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:44:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:44:12.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:44:12.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:44:12.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:44:12.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:43:40', tmtdew=0.13466, humidity=99.0467, cloud=0.0, wind=22.5475, temperature=13.2347, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:43:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:44:12.865 [DEBUG] [Thread-168488] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:44:12.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:44:12.966 [DEBUG] [Thread-168491] [transport.py] [_log()] starting thread (client mode): 0xae5e63e0
2026-04-11T10:44:12.966 [DEBUG] [Thread-168491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:44:12.983 [DEBUG] [Thread-168491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:44:12.983 [INFO] [Thread-168491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:44:12.990 [DEBUG] [Thread-168491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:44:12.991 [DEBUG] [Thread-168491] [transport.py] [_log()] client lang: <none>
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] server lang: <none>
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] kex follows: False
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] Compression: none
2026-04-11T10:44:12.992 [DEBUG] [Thread-168491] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:44:13.051 [DEBUG] [Thread-168491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:44:13.052 [DEBUG] [Thread-168491] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:44:13.053 [DEBUG] [Thread-168491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:44:13.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:44:13.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:44:13.109 [DEBUG] [Thread-168491] [transport.py] [_log()] userauth is OK
2026-04-11T10:44:13.109 [DEBUG] [Thread-168491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:44:13.110 [DEBUG] [Thread-168491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:44:13.110 [DEBUG] [Thread-168491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:44:13.110 [DEBUG] [Thread-168491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:44:13.133 [INFO] [Thread-168491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:44:13.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:44:13.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:44:14.051 [DEBUG] [Thread-168491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:44:14.051 [DEBUG] [Thread-168491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:44:14.100 [DEBUG] [Thread-168491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:44:14.101 [DEBUG] [Thread-168491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:44:14.110 [DEBUG] [Thread-168491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:44:14.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:44:14.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:44:14.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:44:14.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:44:14.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:44:14.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:44:14.149 [DEBUG] [Thread-168491] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:44:15.216 [DEBUG] [Thread-168493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:30.270 [DEBUG] [Thread-168494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:38.799 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:38.801 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:44.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:44:44.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:44:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:44:45.307 [DEBUG] [Thread-168495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:44:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 44, 15), 0.11988, 99.5067, 0.0, 16.1629, 12.7676, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:44:45.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:44:15
2026-04-11T10:44:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:44:45.957 [DEBUG] [Thread-168496] [transport.py] [_log()] starting thread (client mode): 0xae5e78b0
2026-04-11T10:44:45.958 [DEBUG] [Thread-168496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:44:45.978 [DEBUG] [Thread-168496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:44:45.978 [INFO] [Thread-168496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] client lang: <none>
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] server lang: <none>
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] kex follows: False
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:44:45.981 [DEBUG] [Thread-168496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:44:45.982 [DEBUG] [Thread-168496] [transport.py] [_log()] Compression: none
2026-04-11T10:44:45.982 [DEBUG] [Thread-168496] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:44:45.998 [DEBUG] [Thread-168496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:44:45.999 [DEBUG] [Thread-168496] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:44:45.999 [DEBUG] [Thread-168496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:44:46.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:44:46.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:44:46.002 [DEBUG] [Thread-168496] [transport.py] [_log()] userauth is OK
2026-04-11T10:44:46.002 [DEBUG] [Thread-168496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:44:46.002 [DEBUG] [Thread-168496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:44:46.002 [DEBUG] [Thread-168496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:44:46.002 [DEBUG] [Thread-168496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:44:46.017 [INFO] [Thread-168496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:44:46.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:44:46.752 [DEBUG] [Thread-168496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:44:46.752 [DEBUG] [Thread-168496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:44:46.753 [DEBUG] [Thread-168496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:44:46.794 [DEBUG] [Thread-168496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:44:46.794 [DEBUG] [Thread-168496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:44:46.797 [DEBUG] [Thread-168496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:44:46.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:44:46.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:44:46.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:44:46.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:44:46.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:44:46.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:44:46.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:44:46.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:44:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:44:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.364357 -999.00  +12.80   6.82     97  +12.30 1 3 1 3 1   888    0 0.43 -0.16 ----- 10.5 6.8 108.6 18.2 13.9 -1.0 14.0 -0.4 13.8 -0.5 14.1 -0.6
2026-04-11T10:44:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:44:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:44:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.364357
2026-04-11T10:44:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:44:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:44:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:44:46.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:44:46.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:44:46.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:44:15', tmtdew=0.11988, humidity=99.5067, cloud=0.0, wind=16.1629, temperature=12.7676, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:44:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:44:46.824 [DEBUG] [Thread-168496] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:44:46.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:44:46.917 [DEBUG] [Thread-168499] [transport.py] [_log()] starting thread (client mode): 0xae52ca00
2026-04-11T10:44:46.918 [DEBUG] [Thread-168499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:44:46.932 [DEBUG] [Thread-168499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:44:46.932 [INFO] [Thread-168499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:44:46.939 [DEBUG] [Thread-168499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:44:46.940 [DEBUG] [Thread-168499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] client lang: <none>
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] server lang: <none>
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] kex follows: False
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] Compression: none
2026-04-11T10:44:46.941 [DEBUG] [Thread-168499] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:44:47.002 [DEBUG] [Thread-168499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:44:47.002 [DEBUG] [Thread-168499] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:44:47.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:44:47.004 [DEBUG] [Thread-168499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:44:47.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:44:47.062 [DEBUG] [Thread-168499] [transport.py] [_log()] userauth is OK
2026-04-11T10:44:47.062 [DEBUG] [Thread-168499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:44:47.063 [DEBUG] [Thread-168499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:44:47.063 [DEBUG] [Thread-168499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:44:47.063 [DEBUG] [Thread-168499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:44:47.082 [INFO] [Thread-168499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:44:47.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:44:47.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:44:47.927 [DEBUG] [Thread-168499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:44:47.927 [DEBUG] [Thread-168499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:44:47.976 [DEBUG] [Thread-168499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:44:47.976 [DEBUG] [Thread-168499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:44:47.985 [DEBUG] [Thread-168499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:44:47.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:44:47.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-04-11T10:44:48.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-04-11T10:44:48.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:44:48.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:44:48.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:44:48.019 [DEBUG] [Thread-168499] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:45:00.142 [DEBUG] [Thread-168501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:00.347 [DEBUG] [Thread-168502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:15.406 [DEBUG] [Thread-168503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:45:18.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:45:18.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-04-11T10:45:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 44, 51), 0.14489, 98.9803, 0.0, 19.5487, 13.1684, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:45:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:44:51
2026-04-11T10:45:19.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:45:19.892 [DEBUG] [Thread-168504] [transport.py] [_log()] starting thread (client mode): 0xae52c2e0
2026-04-11T10:45:19.892 [DEBUG] [Thread-168504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:45:19.915 [DEBUG] [Thread-168504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:45:19.915 [INFO] [Thread-168504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] client lang: <none>
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] server lang: <none>
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] kex follows: False
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:45:19.919 [DEBUG] [Thread-168504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:45:19.920 [DEBUG] [Thread-168504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:45:19.920 [DEBUG] [Thread-168504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:45:19.920 [DEBUG] [Thread-168504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:45:19.920 [DEBUG] [Thread-168504] [transport.py] [_log()] Compression: none
2026-04-11T10:45:19.920 [DEBUG] [Thread-168504] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:45:19.937 [DEBUG] [Thread-168504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:45:19.937 [DEBUG] [Thread-168504] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:45:19.937 [DEBUG] [Thread-168504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:45:19.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:45:19.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:45:19.939 [DEBUG] [Thread-168504] [transport.py] [_log()] userauth is OK
2026-04-11T10:45:19.940 [DEBUG] [Thread-168504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:45:19.940 [DEBUG] [Thread-168504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:45:19.940 [DEBUG] [Thread-168504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:45:19.940 [DEBUG] [Thread-168504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:45:19.977 [INFO] [Thread-168504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:45:19.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:45:21.984 [DEBUG] [Thread-168504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:45:21.985 [DEBUG] [Thread-168504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:45:21.985 [DEBUG] [Thread-168504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:45:22.025 [DEBUG] [Thread-168504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:45:22.025 [DEBUG] [Thread-168504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:45:22.029 [DEBUG] [Thread-168504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:45:22.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:45:22.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:45:22.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:45:22.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:45:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:45:22.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:45:22.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:45:22.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:45:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:45:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.364704 -999.00  +12.80  14.02     97  +12.30 1 3 1 3 1   888    0 0.44 0.06 ----- 12.9 14.0 87.5 16.9 13.9 -0.9 13.9 -0.3 13.8 -0.6 14.1 -0.7
2026-04-11T10:45:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:45:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:45:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.364704
2026-04-11T10:45:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:45:22.061 [DEBUG] [Thread-168504] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:45:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:45:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:45:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:45:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:45:22.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:44:51', tmtdew=0.14489, humidity=98.9803, cloud=0.0, wind=19.5487, temperature=13.1684, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:45:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:45:22.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:45:22.168 [DEBUG] [Thread-168507] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ae0
2026-04-11T10:45:22.168 [DEBUG] [Thread-168507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:45:22.182 [DEBUG] [Thread-168507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:45:22.183 [INFO] [Thread-168507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:45:22.190 [DEBUG] [Thread-168507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:22.191 [DEBUG] [Thread-168507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] client lang: <none>
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] server lang: <none>
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] kex follows: False
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:45:22.192 [DEBUG] [Thread-168507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:45:22.193 [DEBUG] [Thread-168507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:45:22.193 [DEBUG] [Thread-168507] [transport.py] [_log()] Compression: none
2026-04-11T10:45:22.193 [DEBUG] [Thread-168507] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:45:22.250 [DEBUG] [Thread-168507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:45:22.250 [DEBUG] [Thread-168507] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:45:22.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:45:22.252 [DEBUG] [Thread-168507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:45:22.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:45:22.309 [DEBUG] [Thread-168507] [transport.py] [_log()] userauth is OK
2026-04-11T10:45:22.309 [DEBUG] [Thread-168507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:45:22.310 [DEBUG] [Thread-168507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:45:22.310 [DEBUG] [Thread-168507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:45:22.310 [DEBUG] [Thread-168507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:45:22.329 [INFO] [Thread-168507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:45:22.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:45:22.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:45:23.167 [DEBUG] [Thread-168507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:45:23.167 [DEBUG] [Thread-168507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:45:23.217 [DEBUG] [Thread-168507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:45:23.217 [DEBUG] [Thread-168507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:45:23.226 [DEBUG] [Thread-168507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:45:23.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:45:23.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-04-11T10:45:23.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-04-11T10:45:23.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:45:23.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:45:23.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:45:23.261 [DEBUG] [Thread-168507] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:45:30.441 [DEBUG] [Thread-168509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:38.939 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:38.941 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:45.487 [DEBUG] [Thread-168510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:45:53.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:45:53.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:45:53.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-04-11T10:45:54.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 45, 26), 0.114775, 99.5399, 0.0, 15.1045, 12.8339, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:45:54.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:45:26
2026-04-11T10:45:54.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:45:55.110 [DEBUG] [Thread-168511] [transport.py] [_log()] starting thread (client mode): 0xae518e80
2026-04-11T10:45:55.110 [DEBUG] [Thread-168511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:45:55.131 [DEBUG] [Thread-168511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:45:55.131 [INFO] [Thread-168511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:45:55.133 [DEBUG] [Thread-168511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] client lang: <none>
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] server lang: <none>
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] kex follows: False
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] Compression: none
2026-04-11T10:45:55.134 [DEBUG] [Thread-168511] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:45:55.151 [DEBUG] [Thread-168511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:45:55.152 [DEBUG] [Thread-168511] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:45:55.153 [DEBUG] [Thread-168511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:45:55.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:45:55.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:45:55.196 [DEBUG] [Thread-168511] [transport.py] [_log()] userauth is OK
2026-04-11T10:45:55.196 [DEBUG] [Thread-168511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:45:55.197 [DEBUG] [Thread-168511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:45:55.197 [DEBUG] [Thread-168511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:45:55.197 [DEBUG] [Thread-168511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:45:55.217 [INFO] [Thread-168511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:45:55.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:45:55.980 [DEBUG] [Thread-168511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:45:55.981 [DEBUG] [Thread-168511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:45:55.981 [DEBUG] [Thread-168511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:45:56.024 [DEBUG] [Thread-168511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:45:56.024 [DEBUG] [Thread-168511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:45:56.028 [DEBUG] [Thread-168511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:45:56.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:45:56.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:45:56.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:45:56.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:45:56.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:45:56.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:45:56.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:45:56.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:45:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:45:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.364704 -999.00  +12.80  14.02     97  +12.30 1 3 1 3 1   888    0 0.44 0.06 ----- 12.9 14.0 87.5 16.9 13.9 -0.9 13.9 -0.3 13.8 -0.6 14.1 -0.7
2026-04-11T10:45:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:45:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:45:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.364704
2026-04-11T10:45:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:45:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:45:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:45:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:45:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:45:56.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:45:26', tmtdew=0.114775, humidity=99.5399, cloud=0.0, wind=15.1045, temperature=12.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:45:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:45:56.061 [DEBUG] [Thread-168511] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:45:56.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:45:56.154 [DEBUG] [Thread-168514] [transport.py] [_log()] starting thread (client mode): 0xb0fb4820
2026-04-11T10:45:56.154 [DEBUG] [Thread-168514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:45:56.169 [DEBUG] [Thread-168514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:45:56.169 [INFO] [Thread-168514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:45:56.176 [DEBUG] [Thread-168514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:45:56.176 [DEBUG] [Thread-168514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:45:56.176 [DEBUG] [Thread-168514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:45:56.176 [DEBUG] [Thread-168514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] client lang: <none>
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] server lang: <none>
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] kex follows: False
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] Compression: none
2026-04-11T10:45:56.177 [DEBUG] [Thread-168514] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:45:56.237 [DEBUG] [Thread-168514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:45:56.237 [DEBUG] [Thread-168514] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:45:56.238 [DEBUG] [Thread-168514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:45:56.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:45:56.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:45:56.293 [DEBUG] [Thread-168514] [transport.py] [_log()] userauth is OK
2026-04-11T10:45:56.294 [DEBUG] [Thread-168514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:45:56.294 [DEBUG] [Thread-168514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:45:56.294 [DEBUG] [Thread-168514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:45:56.294 [DEBUG] [Thread-168514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:45:56.313 [INFO] [Thread-168514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:45:56.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:45:56.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:45:57.129 [DEBUG] [Thread-168514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:45:57.130 [DEBUG] [Thread-168514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:45:57.178 [DEBUG] [Thread-168514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:45:57.178 [DEBUG] [Thread-168514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:45:57.188 [DEBUG] [Thread-168514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:45:57.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:45:57.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:45:57.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:45:57.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:45:57.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:45:57.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:45:57.225 [DEBUG] [Thread-168514] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:46:00.194 [DEBUG] [Thread-168516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:46:00.525 [DEBUG] [Thread-168517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:46:15.579 [DEBUG] [Thread-168518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:46:27.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:46:27.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:46:27.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-04-11T10:46:28.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 46, 1), 0.10709, 99.5896, 0.0, 16.2335, 12.8505, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:46:28.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:46:01
2026-04-11T10:46:28.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:46:29.062 [DEBUG] [Thread-168519] [transport.py] [_log()] starting thread (client mode): 0xae51a290
2026-04-11T10:46:29.062 [DEBUG] [Thread-168519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:46:29.083 [DEBUG] [Thread-168519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:46:29.084 [INFO] [Thread-168519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:46:29.087 [DEBUG] [Thread-168519] [transport.py] [_log()] client lang: <none>
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] server lang: <none>
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] kex follows: False
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] Compression: none
2026-04-11T10:46:29.088 [DEBUG] [Thread-168519] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:46:29.101 [DEBUG] [Thread-168519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:46:29.102 [DEBUG] [Thread-168519] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:46:29.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:46:29.104 [DEBUG] [Thread-168519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:46:29.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:46:29.107 [DEBUG] [Thread-168519] [transport.py] [_log()] userauth is OK
2026-04-11T10:46:29.107 [DEBUG] [Thread-168519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:46:29.107 [DEBUG] [Thread-168519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:46:29.107 [DEBUG] [Thread-168519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:46:29.107 [DEBUG] [Thread-168519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:46:29.141 [INFO] [Thread-168519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:46:29.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:46:29.891 [DEBUG] [Thread-168519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:46:29.892 [DEBUG] [Thread-168519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:46:29.892 [DEBUG] [Thread-168519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:46:29.933 [DEBUG] [Thread-168519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:46:29.933 [DEBUG] [Thread-168519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:46:29.937 [DEBUG] [Thread-168519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:46:29.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:46:29.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:46:29.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:46:29.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:46:29.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:46:29.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:46:29.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:46:29.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:46:29.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:46:29.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.365051 -999.00  +12.80   6.57     97  +12.30 1 3 1 3 1   888    0 0.46 0.73 ----- 11.2 6.6 84.8 15.7 13.9 -0.6 14.0 -0.4 13.8 -0.4 14.1 -0.7
2026-04-11T10:46:29.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:46:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:46:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.365051
2026-04-11T10:46:29.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:46:29.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:46:29.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:46:29.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:46:29.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:46:29.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:46:01', tmtdew=0.10709, humidity=99.5896, cloud=0.0, wind=16.2335, temperature=12.8505, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:45:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:46:29.966 [DEBUG] [Thread-168519] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:46:30.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:46:30.060 [DEBUG] [Thread-168522] [transport.py] [_log()] starting thread (client mode): 0xae515540
2026-04-11T10:46:30.060 [DEBUG] [Thread-168522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:46:30.074 [DEBUG] [Thread-168522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:46:30.074 [INFO] [Thread-168522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:46:30.081 [DEBUG] [Thread-168522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:46:30.081 [DEBUG] [Thread-168522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] client lang: <none>
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] server lang: <none>
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] kex follows: False
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] Compression: none
2026-04-11T10:46:30.082 [DEBUG] [Thread-168522] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:46:30.140 [DEBUG] [Thread-168522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:46:30.141 [DEBUG] [Thread-168522] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:46:30.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:46:30.142 [DEBUG] [Thread-168522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:46:30.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:46:30.196 [DEBUG] [Thread-168522] [transport.py] [_log()] userauth is OK
2026-04-11T10:46:30.197 [DEBUG] [Thread-168522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:46:30.197 [DEBUG] [Thread-168522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:46:30.197 [DEBUG] [Thread-168522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:46:30.197 [DEBUG] [Thread-168522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:46:30.216 [INFO] [Thread-168522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:46:30.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:46:30.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:46:30.614 [DEBUG] [Thread-168524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:46:31.090 [DEBUG] [Thread-168522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:46:31.090 [DEBUG] [Thread-168522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:46:31.138 [DEBUG] [Thread-168522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:46:31.138 [DEBUG] [Thread-168522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:46:31.147 [DEBUG] [Thread-168522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:46:31.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:46:31.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-04-11T10:46:31.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:46:31.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:46:31.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:46:31.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:46:31.185 [DEBUG] [Thread-168522] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:46:39.080 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:46:39.081 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:46:45.674 [DEBUG] [Thread-168525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:00.244 [DEBUG] [Thread-168526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:00.709 [DEBUG] [Thread-168527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:01.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:47:01.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:47:01.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:47:02.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 46, 37), 0.12431, 99.1138, 0.0, 15.6679, 13.3347, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:47:02.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:46:37
2026-04-11T10:47:02.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:47:03.025 [DEBUG] [Thread-168528] [transport.py] [_log()] starting thread (client mode): 0xae52d810
2026-04-11T10:47:03.025 [DEBUG] [Thread-168528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:47:03.042 [DEBUG] [Thread-168528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:47:03.042 [INFO] [Thread-168528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] client lang: <none>
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] server lang: <none>
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] kex follows: False
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] Compression: none
2026-04-11T10:47:03.045 [DEBUG] [Thread-168528] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:47:03.062 [DEBUG] [Thread-168528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:47:03.062 [DEBUG] [Thread-168528] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:47:03.062 [DEBUG] [Thread-168528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:47:03.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:47:03.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:47:03.065 [DEBUG] [Thread-168528] [transport.py] [_log()] userauth is OK
2026-04-11T10:47:03.065 [DEBUG] [Thread-168528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:47:03.065 [DEBUG] [Thread-168528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:47:03.065 [DEBUG] [Thread-168528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:47:03.065 [DEBUG] [Thread-168528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:47:03.085 [INFO] [Thread-168528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:47:03.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:47:03.842 [DEBUG] [Thread-168528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:47:03.842 [DEBUG] [Thread-168528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:47:03.842 [DEBUG] [Thread-168528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:47:03.884 [DEBUG] [Thread-168528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:47:03.884 [DEBUG] [Thread-168528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:47:03.887 [DEBUG] [Thread-168528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:47:03.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:47:03.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:47:03.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:47:03.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:47:03.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:47:03.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:47:03.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:47:03.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:47:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:47:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.365398 -999.00  +12.80  11.02     97  +12.40 1 3 1 3 1   888    0 0.46 0.86 ----- 12.2 11.0 119.6 15.3 13.9 -0.7 14.0 -0.3 13.9 -0.6 14.1 -0.6
2026-04-11T10:47:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:47:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:47:03.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.365398
2026-04-11T10:47:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:47:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:47:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:47:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:47:03.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:47:03.916 [DEBUG] [Thread-168528] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:47:03.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:46:37', tmtdew=0.12431, humidity=99.1138, cloud=0.0, wind=15.6679, temperature=13.3347, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:46:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:47:04.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:47:04.011 [DEBUG] [Thread-168531] [transport.py] [_log()] starting thread (client mode): 0xae51b700
2026-04-11T10:47:04.011 [DEBUG] [Thread-168531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:47:04.026 [DEBUG] [Thread-168531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:47:04.026 [INFO] [Thread-168531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:47:04.033 [DEBUG] [Thread-168531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:47:04.033 [DEBUG] [Thread-168531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:47:04.033 [DEBUG] [Thread-168531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] client lang: <none>
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] server lang: <none>
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] kex follows: False
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:47:04.034 [DEBUG] [Thread-168531] [transport.py] [_log()] Compression: none
2026-04-11T10:47:04.035 [DEBUG] [Thread-168531] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:47:04.091 [DEBUG] [Thread-168531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:47:04.092 [DEBUG] [Thread-168531] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:47:04.093 [DEBUG] [Thread-168531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:47:04.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:47:04.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:47:04.147 [DEBUG] [Thread-168531] [transport.py] [_log()] userauth is OK
2026-04-11T10:47:04.147 [DEBUG] [Thread-168531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:47:04.147 [DEBUG] [Thread-168531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:47:04.147 [DEBUG] [Thread-168531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:47:04.147 [DEBUG] [Thread-168531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:47:04.167 [INFO] [Thread-168531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:47:04.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:47:04.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:47:05.090 [DEBUG] [Thread-168531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:47:05.090 [DEBUG] [Thread-168531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:47:05.139 [DEBUG] [Thread-168531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:47:05.139 [DEBUG] [Thread-168531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:47:05.152 [DEBUG] [Thread-168531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:47:05.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:47:05.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-04-11T10:47:05.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:47:05.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:47:05.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:47:05.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:47:05.201 [DEBUG] [Thread-168531] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:47:15.746 [DEBUG] [Thread-168533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:30.805 [DEBUG] [Thread-168534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:47:35.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:47:35.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-04-11T10:47:36.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 47, 12), 0.06215, 99.5569, 0.0, 18.6509, 12.8508, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:47:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:47:12
2026-04-11T10:47:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:47:37.130 [DEBUG] [Thread-168535] [transport.py] [_log()] starting thread (client mode): 0xae518d00
2026-04-11T10:47:37.130 [DEBUG] [Thread-168535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:47:37.143 [DEBUG] [Thread-168535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:47:37.143 [INFO] [Thread-168535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] client lang: <none>
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] server lang: <none>
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] kex follows: False
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] Compression: none
2026-04-11T10:47:37.146 [DEBUG] [Thread-168535] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:47:37.161 [DEBUG] [Thread-168535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:47:37.161 [DEBUG] [Thread-168535] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:47:37.162 [DEBUG] [Thread-168535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:47:37.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:47:37.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:47:37.163 [DEBUG] [Thread-168535] [transport.py] [_log()] userauth is OK
2026-04-11T10:47:37.164 [DEBUG] [Thread-168535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:47:37.164 [DEBUG] [Thread-168535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:47:37.164 [DEBUG] [Thread-168535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:47:37.164 [DEBUG] [Thread-168535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:47:37.182 [INFO] [Thread-168535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:47:37.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:47:37.752 [DEBUG] [Thread-168535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:47:37.752 [DEBUG] [Thread-168535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:47:37.752 [DEBUG] [Thread-168535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:47:37.793 [DEBUG] [Thread-168535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:47:37.793 [DEBUG] [Thread-168535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:47:37.795 [DEBUG] [Thread-168535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:47:37.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:47:37.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:47:37.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:47:37.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:47:37.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:47:37.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:47:37.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:47:37.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:47:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:47:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.366093 -999.00  +12.80   9.27     97  +12.40 1 3 1 3 1   888    0 0.46 0.95 ----- 12.7 9.3 90.2 17.9 13.9 -0.6 13.9 -0.4 13.8 -0.5 14.1 -0.6
2026-04-11T10:47:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:47:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:47:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.366093
2026-04-11T10:47:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:47:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:47:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:47:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:47:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:47:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:47:12', tmtdew=0.06215, humidity=99.5569, cloud=0.0, wind=18.6509, temperature=12.8508, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:47:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:47:37.827 [DEBUG] [Thread-168535] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:47:37.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:47:37.924 [DEBUG] [Thread-168538] [transport.py] [_log()] starting thread (client mode): 0xae5a4490
2026-04-11T10:47:37.925 [DEBUG] [Thread-168538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:47:37.939 [DEBUG] [Thread-168538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:47:37.939 [INFO] [Thread-168538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:47:37.947 [DEBUG] [Thread-168538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:47:37.947 [DEBUG] [Thread-168538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:47:37.948 [DEBUG] [Thread-168538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:47:37.948 [DEBUG] [Thread-168538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:37.948 [DEBUG] [Thread-168538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:47:37.948 [DEBUG] [Thread-168538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:37.956 [DEBUG] [Thread-168538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:47:37.956 [DEBUG] [Thread-168538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:47:37.956 [DEBUG] [Thread-168538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] client lang: <none>
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] server lang: <none>
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] kex follows: False
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] Compression: none
2026-04-11T10:47:37.957 [DEBUG] [Thread-168538] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:47:38.007 [DEBUG] [Thread-168538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:47:38.007 [DEBUG] [Thread-168538] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:47:38.008 [DEBUG] [Thread-168538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:47:38.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:47:38.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:47:38.064 [DEBUG] [Thread-168538] [transport.py] [_log()] userauth is OK
2026-04-11T10:47:38.064 [DEBUG] [Thread-168538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:47:38.064 [DEBUG] [Thread-168538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:47:38.064 [DEBUG] [Thread-168538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:47:38.064 [DEBUG] [Thread-168538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:47:38.083 [INFO] [Thread-168538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:47:38.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:47:38.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:47:38.891 [DEBUG] [Thread-168538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:47:38.891 [DEBUG] [Thread-168538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:47:38.939 [DEBUG] [Thread-168538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:47:38.939 [DEBUG] [Thread-168538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:47:38.949 [DEBUG] [Thread-168538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:47:38.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:47:38.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:47:38.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-04-11T10:47:38.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:47:38.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:47:38.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:47:38.986 [DEBUG] [Thread-168538] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:47:39.221 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:39.222 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:47:45.841 [DEBUG] [Thread-168540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:00.298 [DEBUG] [Thread-168541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:00.894 [DEBUG] [Thread-168542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:48:09.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:48:09.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-04-11T10:48:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 47, 48), 0.12434, 99.1136, 0.0, 16.0913, 13.3677, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:48:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:47:48
2026-04-11T10:48:10.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:48:10.809 [DEBUG] [Thread-168543] [transport.py] [_log()] starting thread (client mode): 0xa79b58d0
2026-04-11T10:48:10.809 [DEBUG] [Thread-168543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:48:10.832 [DEBUG] [Thread-168543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:48:10.832 [INFO] [Thread-168543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:48:10.836 [DEBUG] [Thread-168543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] client lang: <none>
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] server lang: <none>
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] kex follows: False
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] Compression: none
2026-04-11T10:48:10.837 [DEBUG] [Thread-168543] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:48:10.856 [DEBUG] [Thread-168543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:48:10.857 [DEBUG] [Thread-168543] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:48:10.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:48:10.858 [DEBUG] [Thread-168543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:48:10.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:48:10.860 [DEBUG] [Thread-168543] [transport.py] [_log()] userauth is OK
2026-04-11T10:48:10.860 [DEBUG] [Thread-168543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:48:10.860 [DEBUG] [Thread-168543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:48:10.861 [DEBUG] [Thread-168543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:48:10.861 [DEBUG] [Thread-168543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:48:10.895 [INFO] [Thread-168543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:48:10.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:48:11.645 [DEBUG] [Thread-168543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:48:11.645 [DEBUG] [Thread-168543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:48:11.645 [DEBUG] [Thread-168543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:48:11.686 [DEBUG] [Thread-168543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:48:11.686 [DEBUG] [Thread-168543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:48:11.690 [DEBUG] [Thread-168543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:48:11.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:48:11.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:48:11.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:48:11.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:48:11.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:48:11.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:48:11.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:48:11.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:48:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:48:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.366440 -999.00  +12.80  11.82     97  +12.30 1 3 1 3 1   888    0 0.46 0.87 ----- 13.5 11.8 103.1 17.2 13.9 -0.8 13.9 -0.4 13.8 -0.4 14.1 -0.7
2026-04-11T10:48:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:48:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:48:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.366440
2026-04-11T10:48:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:48:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:48:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:48:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:48:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:48:11.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:47:48', tmtdew=0.12434, humidity=99.1136, cloud=0.0, wind=16.0913, temperature=13.3677, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:47:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:48:11.719 [DEBUG] [Thread-168543] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:48:11.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:48:11.811 [DEBUG] [Thread-168546] [transport.py] [_log()] starting thread (client mode): 0xb0f8c2e0
2026-04-11T10:48:11.811 [DEBUG] [Thread-168546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:48:11.826 [DEBUG] [Thread-168546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:48:11.826 [INFO] [Thread-168546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:48:11.834 [DEBUG] [Thread-168546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:48:11.834 [DEBUG] [Thread-168546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:48:11.834 [DEBUG] [Thread-168546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] client lang: <none>
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] server lang: <none>
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] kex follows: False
2026-04-11T10:48:11.835 [DEBUG] [Thread-168546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:48:11.836 [DEBUG] [Thread-168546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:48:11.836 [DEBUG] [Thread-168546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:48:11.836 [DEBUG] [Thread-168546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:48:11.836 [DEBUG] [Thread-168546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:48:11.836 [DEBUG] [Thread-168546] [transport.py] [_log()] Compression: none
2026-04-11T10:48:11.836 [DEBUG] [Thread-168546] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:48:11.892 [DEBUG] [Thread-168546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:48:11.892 [DEBUG] [Thread-168546] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:48:11.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:48:11.894 [DEBUG] [Thread-168546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:48:11.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:48:11.952 [DEBUG] [Thread-168546] [transport.py] [_log()] userauth is OK
2026-04-11T10:48:11.953 [DEBUG] [Thread-168546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:48:11.953 [DEBUG] [Thread-168546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:48:11.953 [DEBUG] [Thread-168546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:48:11.953 [DEBUG] [Thread-168546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:48:11.974 [INFO] [Thread-168546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:48:11.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:48:11.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:48:12.794 [DEBUG] [Thread-168546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:48:12.794 [DEBUG] [Thread-168546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:48:12.842 [DEBUG] [Thread-168546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:48:12.842 [DEBUG] [Thread-168546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:48:12.852 [DEBUG] [Thread-168546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:48:12.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:48:12.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-04-11T10:48:12.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-04-11T10:48:12.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:48:12.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:48:12.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:48:12.889 [DEBUG] [Thread-168546] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:48:15.936 [DEBUG] [Thread-168548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:30.987 [DEBUG] [Thread-168549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:39.363 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:39.364 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:48:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:48:42.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:48:42.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-04-11T10:48:44.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 48, 23), 0.114725, 99.5402, 0.0, 16.6568, 12.8341, 2, 2, 0, 2, 0, 0),)
2026-04-11T10:48:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:48:23
2026-04-11T10:48:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:48:44.702 [DEBUG] [Thread-168550] [transport.py] [_log()] starting thread (client mode): 0xb0fcee00
2026-04-11T10:48:44.702 [DEBUG] [Thread-168550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:48:44.722 [DEBUG] [Thread-168550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:48:44.722 [INFO] [Thread-168550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:48:44.725 [DEBUG] [Thread-168550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] client lang: <none>
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] server lang: <none>
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] kex follows: False
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] Compression: none
2026-04-11T10:48:44.726 [DEBUG] [Thread-168550] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:48:44.743 [DEBUG] [Thread-168550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:48:44.744 [DEBUG] [Thread-168550] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:48:44.745 [DEBUG] [Thread-168550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:48:44.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:48:44.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:48:44.747 [DEBUG] [Thread-168550] [transport.py] [_log()] userauth is OK
2026-04-11T10:48:44.747 [DEBUG] [Thread-168550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:48:44.747 [DEBUG] [Thread-168550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:48:44.747 [DEBUG] [Thread-168550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:48:44.748 [DEBUG] [Thread-168550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:48:44.767 [INFO] [Thread-168550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:48:44.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:48:45.519 [DEBUG] [Thread-168550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:48:45.520 [DEBUG] [Thread-168550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:48:45.520 [DEBUG] [Thread-168550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:48:45.561 [DEBUG] [Thread-168550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:48:45.561 [DEBUG] [Thread-168550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:48:45.564 [DEBUG] [Thread-168550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:48:45.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:48:45.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:48:45.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:48:45.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:48:45.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:48:45.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:48:45.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:48:45.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:48:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:48:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.367134 -999.00  +12.80  16.50     97  +12.40 1 3 1 3 1   888    0 0.44 0.12 ----- 14.2 16.5 65.8 19.5 13.9 -0.7 14.0 -0.5 13.8 -0.5 14.1 -0.7
2026-04-11T10:48:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:48:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:48:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.367134
2026-04-11T10:48:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:48:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:48:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:48:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:48:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:48:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:48:23', tmtdew=0.114725, humidity=99.5402, cloud=0.0, wind=16.6568, temperature=12.8341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:48:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:48:45.593 [DEBUG] [Thread-168550] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:48:45.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:48:46.027 [DEBUG] [Thread-168553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:00.351 [DEBUG] [Thread-168554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:01.089 [DEBUG] [Thread-168555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:16.127 [DEBUG] [Thread-168556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:31.165 [DEBUG] [Thread-168557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:39.506 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:39.507 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:49:46.201 [DEBUG] [Thread-168558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:00.402 [DEBUG] [Thread-168559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:01.238 [DEBUG] [Thread-168560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:16.276 [DEBUG] [Thread-168561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:31.313 [DEBUG] [Thread-168562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:39.648 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:39.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:50:46.352 [DEBUG] [Thread-168563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:00.352 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-11T10:51:00.465 [DEBUG] [Thread-168564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:01.388 [DEBUG] [Thread-168565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:16.426 [DEBUG] [Thread-168566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:30.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:51:30.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:51:30.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-04-11T10:51:31.464 [DEBUG] [Thread-168567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 51, 21), 0.11475, 99.5401, 0.0, 13.7448, 12.884, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:51:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:51:21
2026-04-11T10:51:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:51:32.212 [DEBUG] [Thread-168568] [transport.py] [_log()] starting thread (client mode): 0xae5e6380
2026-04-11T10:51:32.212 [DEBUG] [Thread-168568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:51:32.234 [DEBUG] [Thread-168568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:51:32.234 [INFO] [Thread-168568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:51:32.237 [DEBUG] [Thread-168568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:51:32.237 [DEBUG] [Thread-168568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:51:32.237 [DEBUG] [Thread-168568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:51:32.237 [DEBUG] [Thread-168568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:51:32.237 [DEBUG] [Thread-168568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:51:32.237 [DEBUG] [Thread-168568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] client lang: <none>
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] server lang: <none>
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] kex follows: False
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:51:32.238 [DEBUG] [Thread-168568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:51:32.239 [DEBUG] [Thread-168568] [transport.py] [_log()] Compression: none
2026-04-11T10:51:32.239 [DEBUG] [Thread-168568] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:51:32.257 [DEBUG] [Thread-168568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:51:32.257 [DEBUG] [Thread-168568] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:51:32.258 [DEBUG] [Thread-168568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:51:32.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:51:32.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:51:32.260 [DEBUG] [Thread-168568] [transport.py] [_log()] userauth is OK
2026-04-11T10:51:32.260 [DEBUG] [Thread-168568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:51:32.260 [DEBUG] [Thread-168568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:51:32.260 [DEBUG] [Thread-168568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:51:32.260 [DEBUG] [Thread-168568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:51:32.283 [INFO] [Thread-168568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:51:32.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:51:33.073 [DEBUG] [Thread-168568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:51:33.074 [DEBUG] [Thread-168568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:51:33.074 [DEBUG] [Thread-168568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:51:33.115 [DEBUG] [Thread-168568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:51:33.115 [DEBUG] [Thread-168568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:51:33.117 [DEBUG] [Thread-168568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:51:33.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:51:33.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:51:33.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:51:33.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:51:33.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:51:33.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:51:33.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:51:33.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:51:33.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.368523 -999.00  +12.90   8.53     97  +12.40 1 3 1 3 1   888    0 0.41 -0.56 ----- 12.8 8.5 101.0 18.5 13.9 -0.4 13.9 -0.3 13.8 -0.4 14.2 -0.6
2026-04-11T10:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.368523
2026-04-11T10:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:51:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:51:33.141 [DEBUG] [Thread-168568] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:51:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:51:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:51:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:51:33.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:51:21', tmtdew=0.11475, humidity=99.5401, cloud=0.0, wind=13.7448, temperature=12.884, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:50:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:51:33.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:51:33.235 [DEBUG] [Thread-168571] [transport.py] [_log()] starting thread (client mode): 0xb0fcc9a0
2026-04-11T10:51:33.236 [DEBUG] [Thread-168571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:51:33.250 [DEBUG] [Thread-168571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:51:33.250 [INFO] [Thread-168571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] client lang: <none>
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] server lang: <none>
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] kex follows: False
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:51:33.258 [DEBUG] [Thread-168571] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:51:33.259 [DEBUG] [Thread-168571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:51:33.259 [DEBUG] [Thread-168571] [transport.py] [_log()] Compression: none
2026-04-11T10:51:33.259 [DEBUG] [Thread-168571] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:51:33.319 [DEBUG] [Thread-168571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:51:33.319 [DEBUG] [Thread-168571] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:51:33.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:51:33.320 [DEBUG] [Thread-168571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:51:33.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:51:33.379 [DEBUG] [Thread-168571] [transport.py] [_log()] userauth is OK
2026-04-11T10:51:33.379 [DEBUG] [Thread-168571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:51:33.380 [DEBUG] [Thread-168571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:51:33.380 [DEBUG] [Thread-168571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:51:33.380 [DEBUG] [Thread-168571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:51:33.399 [INFO] [Thread-168571] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:51:33.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:51:33.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:51:34.223 [DEBUG] [Thread-168571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:51:34.223 [DEBUG] [Thread-168571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:51:34.271 [DEBUG] [Thread-168571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:51:34.271 [DEBUG] [Thread-168571] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:51:34.281 [DEBUG] [Thread-168571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:51:34.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:51:34.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:51: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-04-11T10:51:34.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:51:34.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:51:34.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:51:34.318 [DEBUG] [Thread-168571] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:51:39.790 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:39.792 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:51:46.503 [DEBUG] [Thread-168573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:00.514 [DEBUG] [Thread-168574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:01.561 [DEBUG] [Thread-168575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:04.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:52:04.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:52:04.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-04-11T10:52:05.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 51, 56), 0.119865, 99.5069, 0.0, 15.8278, 12.8177, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:52:05.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:51:56
2026-04-11T10:52:05.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:52:06.140 [DEBUG] [Thread-168576] [transport.py] [_log()] starting thread (client mode): 0xa79b59f0
2026-04-11T10:52:06.141 [DEBUG] [Thread-168576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:52:06.162 [DEBUG] [Thread-168576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:52:06.162 [INFO] [Thread-168576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:52:06.165 [DEBUG] [Thread-168576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:52:06.165 [DEBUG] [Thread-168576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:52:06.165 [DEBUG] [Thread-168576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:52:06.165 [DEBUG] [Thread-168576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:06.165 [DEBUG] [Thread-168576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] client lang: <none>
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] server lang: <none>
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] kex follows: False
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:52:06.166 [DEBUG] [Thread-168576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:52:06.167 [DEBUG] [Thread-168576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:52:06.167 [DEBUG] [Thread-168576] [transport.py] [_log()] Compression: none
2026-04-11T10:52:06.167 [DEBUG] [Thread-168576] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:52:06.186 [DEBUG] [Thread-168576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:52:06.186 [DEBUG] [Thread-168576] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:52:06.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:52:06.188 [DEBUG] [Thread-168576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:52:06.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:52:06.191 [DEBUG] [Thread-168576] [transport.py] [_log()] userauth is OK
2026-04-11T10:52:06.191 [DEBUG] [Thread-168576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:52:06.191 [DEBUG] [Thread-168576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:52:06.191 [DEBUG] [Thread-168576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:52:06.192 [DEBUG] [Thread-168576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:52:06.228 [INFO] [Thread-168576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:52:06.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:52:07.047 [DEBUG] [Thread-168576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:52:07.047 [DEBUG] [Thread-168576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:52:07.048 [DEBUG] [Thread-168576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:52:07.088 [DEBUG] [Thread-168576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:52:07.089 [DEBUG] [Thread-168576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:52:07.092 [DEBUG] [Thread-168576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:52:07.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:52:07.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:52:07.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:52:07.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:52:07.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:52:07.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:52:07.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:52:07.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:52:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:52:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.368870 -999.00  +12.90  12.64     97  +12.40 1 3 1 3 1   888    0 0.44 -0.03 ----- 11.7 12.6 66.9 21.7 13.9 -0.6 13.9 -0.3 13.8 -0.3 14.2 -0.6
2026-04-11T10:52:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:52:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:52:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.368870
2026-04-11T10:52:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:52:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:52:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:52:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:52:07.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:52:07.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:51:56', tmtdew=0.119865, humidity=99.5069, cloud=0.0, wind=15.8278, temperature=12.8177, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:51:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:52:07.124 [DEBUG] [Thread-168576] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:52:07.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:52:07.219 [DEBUG] [Thread-168579] [transport.py] [_log()] starting thread (client mode): 0xb0fcd4b0
2026-04-11T10:52:07.219 [DEBUG] [Thread-168579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:52:07.233 [DEBUG] [Thread-168579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:52:07.234 [INFO] [Thread-168579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:07.241 [DEBUG] [Thread-168579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] client lang: <none>
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] server lang: <none>
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] kex follows: False
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] Compression: none
2026-04-11T10:52:07.242 [DEBUG] [Thread-168579] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:52:07.304 [DEBUG] [Thread-168579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:52:07.304 [DEBUG] [Thread-168579] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:52:07.305 [DEBUG] [Thread-168579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:52:07.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:52:07.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:52:07.363 [DEBUG] [Thread-168579] [transport.py] [_log()] userauth is OK
2026-04-11T10:52:07.363 [DEBUG] [Thread-168579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:52:07.363 [DEBUG] [Thread-168579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:52:07.363 [DEBUG] [Thread-168579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:52:07.363 [DEBUG] [Thread-168579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:52:07.382 [INFO] [Thread-168579] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:52:07.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:52:07.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:52:08.236 [DEBUG] [Thread-168579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:52:08.236 [DEBUG] [Thread-168579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:52:08.283 [DEBUG] [Thread-168579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:52:08.283 [DEBUG] [Thread-168579] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:52:08.292 [DEBUG] [Thread-168579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:52:08.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:52:08.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-04-11T10:52:08.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:52:08.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:52:08.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:52:08.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:52:08.328 [DEBUG] [Thread-168579] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:52:16.600 [DEBUG] [Thread-168581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:31.662 [DEBUG] [Thread-168582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:38.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:52:38.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:52:38.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-04-11T10:52:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 52, 31), 0.11731, 99.5235, 0.0, 17.5388, 12.8508, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:52:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:52:31
2026-04-11T10:52:39.933 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:39.934 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:52:39.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:52:40.143 [DEBUG] [Thread-168583] [transport.py] [_log()] starting thread (client mode): 0xae517640
2026-04-11T10:52:40.143 [DEBUG] [Thread-168583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:52:40.164 [DEBUG] [Thread-168583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:52:40.164 [INFO] [Thread-168583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:52:40.167 [DEBUG] [Thread-168583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] client lang: <none>
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] server lang: <none>
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] kex follows: False
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:52:40.168 [DEBUG] [Thread-168583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:52:40.169 [DEBUG] [Thread-168583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:52:40.169 [DEBUG] [Thread-168583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:52:40.169 [DEBUG] [Thread-168583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:52:40.169 [DEBUG] [Thread-168583] [transport.py] [_log()] Compression: none
2026-04-11T10:52:40.169 [DEBUG] [Thread-168583] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:52:40.186 [DEBUG] [Thread-168583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:52:40.187 [DEBUG] [Thread-168583] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:52:40.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:52:40.189 [DEBUG] [Thread-168583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:52:40.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:52:40.190 [DEBUG] [Thread-168583] [transport.py] [_log()] userauth is OK
2026-04-11T10:52:40.190 [DEBUG] [Thread-168583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:52:40.190 [DEBUG] [Thread-168583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:52:40.191 [DEBUG] [Thread-168583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:52:40.191 [DEBUG] [Thread-168583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:52:40.213 [INFO] [Thread-168583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:52:40.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:52:40.995 [DEBUG] [Thread-168583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:52:40.995 [DEBUG] [Thread-168583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:52:40.996 [DEBUG] [Thread-168583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:52:41.036 [DEBUG] [Thread-168583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:52:41.037 [DEBUG] [Thread-168583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:52:41.038 [DEBUG] [Thread-168583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:52:41.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:52:41.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:52:41.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:52:41.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:52:41.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:52:41.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:52:41.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:52:41.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:52:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:52:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.369565 -999.00  +12.80   8.74     97  +12.40 1 3 1 3 1   888    0 0.44 0.16 ----- 14.7 8.7 97.3 14.2 13.9 -0.3 14.0 -0.2 13.9 -0.3 14.1 -0.7
2026-04-11T10:52:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:52:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:52:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.369565
2026-04-11T10:52:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:52:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:52:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:52:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:52:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:52:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:52:31', tmtdew=0.11731, humidity=99.5235, cloud=0.0, wind=17.5388, temperature=12.8508, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:52:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:52:41.059 [DEBUG] [Thread-168583] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:52:41.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:52:41.152 [DEBUG] [Thread-168586] [transport.py] [_log()] starting thread (client mode): 0xae515360
2026-04-11T10:52:41.152 [DEBUG] [Thread-168586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:52:41.167 [DEBUG] [Thread-168586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:52:41.167 [INFO] [Thread-168586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:41.175 [DEBUG] [Thread-168586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] client lang: <none>
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] server lang: <none>
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] kex follows: False
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:52:41.176 [DEBUG] [Thread-168586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:52:41.177 [DEBUG] [Thread-168586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:52:41.177 [DEBUG] [Thread-168586] [transport.py] [_log()] Compression: none
2026-04-11T10:52:41.177 [DEBUG] [Thread-168586] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:52:41.234 [DEBUG] [Thread-168586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:52:41.235 [DEBUG] [Thread-168586] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:52:41.236 [DEBUG] [Thread-168586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:52:41.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:52:41.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:52:41.290 [DEBUG] [Thread-168586] [transport.py] [_log()] userauth is OK
2026-04-11T10:52:41.290 [DEBUG] [Thread-168586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:52:41.290 [DEBUG] [Thread-168586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:52:41.290 [DEBUG] [Thread-168586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:52:41.291 [DEBUG] [Thread-168586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:52:41.311 [INFO] [Thread-168586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:52:41.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:52:41.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:52:42.136 [DEBUG] [Thread-168586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:52:42.136 [DEBUG] [Thread-168586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:52:42.186 [DEBUG] [Thread-168586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:52:42.186 [DEBUG] [Thread-168586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:52:42.197 [DEBUG] [Thread-168586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:52:42.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:52:42.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-04-11T10:52: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-04-11T10:52:42.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:52:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:52:42.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:52:42.235 [DEBUG] [Thread-168586] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:52:46.696 [DEBUG] [Thread-168588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:00.564 [DEBUG] [Thread-168589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:01.748 [DEBUG] [Thread-168590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:53:12.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:53:12.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-04-11T10:53:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 52, 31), 0.11731, 99.5235, 0.0, 17.5388, 12.8508, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:53:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:52:31
2026-04-11T10:53:13.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:53:14.074 [DEBUG] [Thread-168591] [transport.py] [_log()] starting thread (client mode): 0xb0f6d930
2026-04-11T10:53:14.074 [DEBUG] [Thread-168591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:53:14.096 [DEBUG] [Thread-168591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:53:14.096 [INFO] [Thread-168591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] client lang: <none>
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] server lang: <none>
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] kex follows: False
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:53:14.099 [DEBUG] [Thread-168591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:53:14.100 [DEBUG] [Thread-168591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:53:14.100 [DEBUG] [Thread-168591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:53:14.100 [DEBUG] [Thread-168591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:53:14.100 [DEBUG] [Thread-168591] [transport.py] [_log()] Compression: none
2026-04-11T10:53:14.100 [DEBUG] [Thread-168591] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:53:14.116 [DEBUG] [Thread-168591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:53:14.117 [DEBUG] [Thread-168591] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:53:14.118 [DEBUG] [Thread-168591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:53:14.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:53:14.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:53:14.121 [DEBUG] [Thread-168591] [transport.py] [_log()] userauth is OK
2026-04-11T10:53:14.121 [DEBUG] [Thread-168591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:53:14.121 [DEBUG] [Thread-168591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:53:14.121 [DEBUG] [Thread-168591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:53:14.121 [DEBUG] [Thread-168591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:53:14.145 [INFO] [Thread-168591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:53:14.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:53:14.940 [DEBUG] [Thread-168591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:53:14.940 [DEBUG] [Thread-168591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:53:14.941 [DEBUG] [Thread-168591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:53:14.981 [DEBUG] [Thread-168591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:53:14.981 [DEBUG] [Thread-168591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:53:14.984 [DEBUG] [Thread-168591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:53:14.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:53:14.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:53:14.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:53:15.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:53:15.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:53:15.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:53:15.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:53:15.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:53:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:53:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.369912 -999.00  +12.80  15.93     97  +12.40 1 3 1 3 1   888    0 0.44 -0.08 ----- 18.1 15.9 75.4 18.9 13.9 -0.7 14.0 -0.3 13.9 -0.5 14.2 -0.7
2026-04-11T10:53:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:53:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:53:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.369912
2026-04-11T10:53:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:53:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:53:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:53:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:53:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:53:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:52:31', tmtdew=0.11731, humidity=99.5235, cloud=0.0, wind=17.5388, temperature=12.8508, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:52:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:53:15.012 [DEBUG] [Thread-168591] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:53: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-04-11T10:53:15.110 [DEBUG] [Thread-168594] [transport.py] [_log()] starting thread (client mode): 0xae5a68c0
2026-04-11T10:53:15.110 [DEBUG] [Thread-168594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:53:15.131 [DEBUG] [Thread-168594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:53:15.131 [INFO] [Thread-168594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:53:15.143 [DEBUG] [Thread-168594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:53:15.144 [DEBUG] [Thread-168594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:53:15.144 [DEBUG] [Thread-168594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:53:15.144 [DEBUG] [Thread-168594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:15.144 [DEBUG] [Thread-168594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:15.144 [DEBUG] [Thread-168594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:15.144 [DEBUG] [Thread-168594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] client lang: <none>
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] server lang: <none>
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] kex follows: False
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:53:15.145 [DEBUG] [Thread-168594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:53:15.146 [DEBUG] [Thread-168594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:53:15.146 [DEBUG] [Thread-168594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:53:15.146 [DEBUG] [Thread-168594] [transport.py] [_log()] Compression: none
2026-04-11T10:53:15.146 [DEBUG] [Thread-168594] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:53:15.206 [DEBUG] [Thread-168594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:53:15.207 [DEBUG] [Thread-168594] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:53:15.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:53:15.208 [DEBUG] [Thread-168594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:53:15.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:53:15.265 [DEBUG] [Thread-168594] [transport.py] [_log()] userauth is OK
2026-04-11T10:53:15.265 [DEBUG] [Thread-168594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:53:15.265 [DEBUG] [Thread-168594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:53:15.265 [DEBUG] [Thread-168594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:53:15.266 [DEBUG] [Thread-168594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:53:15.287 [INFO] [Thread-168594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:53:15.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:53:15.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:53:16.117 [DEBUG] [Thread-168594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:53:16.118 [DEBUG] [Thread-168594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:53:16.167 [DEBUG] [Thread-168594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:53:16.167 [DEBUG] [Thread-168594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:53:16.179 [DEBUG] [Thread-168594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:53:16.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:53:16.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-04-11T10:53:16.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:53:16.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:53:16.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:53:16.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:53:16.221 [DEBUG] [Thread-168594] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:53:16.786 [DEBUG] [Thread-168596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:31.840 [DEBUG] [Thread-168597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:40.074 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:40.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:46.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:53:46.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:53:46.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-04-11T10:53:46.877 [DEBUG] [Thread-168598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:53:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 53, 7), 0.11732, 99.5234, 0.0, 16.798, 12.884, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:53:47.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:53:07
2026-04-11T10:53:47.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:53:48.079 [DEBUG] [Thread-168599] [transport.py] [_log()] starting thread (client mode): 0xae5f2c20
2026-04-11T10:53:48.079 [DEBUG] [Thread-168599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:53:48.092 [DEBUG] [Thread-168599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:53:48.092 [INFO] [Thread-168599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] client lang: <none>
2026-04-11T10:53:48.094 [DEBUG] [Thread-168599] [transport.py] [_log()] server lang: <none>
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] kex follows: False
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] Compression: none
2026-04-11T10:53:48.095 [DEBUG] [Thread-168599] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:53:48.114 [DEBUG] [Thread-168599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:53:48.114 [DEBUG] [Thread-168599] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:53:48.115 [DEBUG] [Thread-168599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:53:48.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:53:48.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:53:48.117 [DEBUG] [Thread-168599] [transport.py] [_log()] userauth is OK
2026-04-11T10:53:48.117 [DEBUG] [Thread-168599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:53:48.117 [DEBUG] [Thread-168599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:53:48.117 [DEBUG] [Thread-168599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:53:48.117 [DEBUG] [Thread-168599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:53:48.136 [INFO] [Thread-168599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:53:48.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:53:48.893 [DEBUG] [Thread-168599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:53:48.894 [DEBUG] [Thread-168599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:53:48.894 [DEBUG] [Thread-168599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:53:48.934 [DEBUG] [Thread-168599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:53:48.935 [DEBUG] [Thread-168599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:53:48.937 [DEBUG] [Thread-168599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:53:48.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:53:48.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:53:48.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:53:48.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:53:48.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:53:48.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:53:48.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:53:48.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:53:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:53:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.370259 -999.00  +12.80  10.68     97  +12.40 1 3 1 3 1   888    0 0.43 -0.37 ----- 10.9 10.7 105.3 21.2 14.0 -0.2 14.0 -0.3 13.9 -0.3 14.1 -0.8
2026-04-11T10:53:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:53:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:53:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.370259
2026-04-11T10:53:48.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:53:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:53:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:53:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:53:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:53:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:53:07', tmtdew=0.11732, humidity=99.5234, cloud=0.0, wind=16.798, temperature=12.884, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:53:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:53:48.962 [DEBUG] [Thread-168599] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:53:49.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:53:49.056 [DEBUG] [Thread-168602] [transport.py] [_log()] starting thread (client mode): 0xb0f6c400
2026-04-11T10:53:49.056 [DEBUG] [Thread-168602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:53:49.071 [DEBUG] [Thread-168602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:53:49.072 [INFO] [Thread-168602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:53:49.079 [DEBUG] [Thread-168602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] client lang: <none>
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] server lang: <none>
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] kex follows: False
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] Compression: none
2026-04-11T10:53:49.080 [DEBUG] [Thread-168602] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:53:49.142 [DEBUG] [Thread-168602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:53:49.143 [DEBUG] [Thread-168602] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:53:49.144 [DEBUG] [Thread-168602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:53:49.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:53:49.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:53:49.202 [DEBUG] [Thread-168602] [transport.py] [_log()] userauth is OK
2026-04-11T10:53:49.203 [DEBUG] [Thread-168602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:53:49.203 [DEBUG] [Thread-168602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:53:49.203 [DEBUG] [Thread-168602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:53:49.203 [DEBUG] [Thread-168602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:53:49.222 [INFO] [Thread-168602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:53:49.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:53:49.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:53:50.103 [DEBUG] [Thread-168602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:53:50.103 [DEBUG] [Thread-168602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:53:50.151 [DEBUG] [Thread-168602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:53:50.151 [DEBUG] [Thread-168602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:53:50.160 [DEBUG] [Thread-168602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:53:50.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:53:50.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-04-11T10:53:50.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-04-11T10:53:50.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:53:50.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:53:50.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:53:50.197 [DEBUG] [Thread-168602] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:54:00.618 [DEBUG] [Thread-168604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:01.915 [DEBUG] [Thread-168605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:16.971 [DEBUG] [Thread-168606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:20.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:54:20.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:54:20.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-04-11T10:54:21.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 53, 42), 0.12953, 99.08, 0.0, 19.337, 13.3011, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:54:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:53:42
2026-04-11T10:54:21.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:54:22.087 [DEBUG] [Thread-168607] [transport.py] [_log()] starting thread (client mode): 0xae5f1540
2026-04-11T10:54:22.087 [DEBUG] [Thread-168607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:54:22.108 [DEBUG] [Thread-168607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:54:22.108 [INFO] [Thread-168607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] client lang: <none>
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] server lang: <none>
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] kex follows: False
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:54:22.111 [DEBUG] [Thread-168607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:54:22.112 [DEBUG] [Thread-168607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:54:22.112 [DEBUG] [Thread-168607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:54:22.112 [DEBUG] [Thread-168607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:54:22.112 [DEBUG] [Thread-168607] [transport.py] [_log()] Compression: none
2026-04-11T10:54:22.112 [DEBUG] [Thread-168607] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:54:22.131 [DEBUG] [Thread-168607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:54:22.131 [DEBUG] [Thread-168607] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:54:22.132 [DEBUG] [Thread-168607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:54:22.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:54:22.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:54:22.179 [DEBUG] [Thread-168607] [transport.py] [_log()] userauth is OK
2026-04-11T10:54:22.179 [DEBUG] [Thread-168607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:54:22.179 [DEBUG] [Thread-168607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:54:22.179 [DEBUG] [Thread-168607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:54:22.180 [DEBUG] [Thread-168607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:54:22.207 [INFO] [Thread-168607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:54:22.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:54:22.981 [DEBUG] [Thread-168607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:54:22.982 [DEBUG] [Thread-168607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:54:22.982 [DEBUG] [Thread-168607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:54:23.023 [DEBUG] [Thread-168607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:54:23.023 [DEBUG] [Thread-168607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:54:23.027 [DEBUG] [Thread-168607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:54:23.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:54:23.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:54:23.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:54:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:54:23.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:54:23.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:54:23.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:54:23.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:54:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:54:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.370606 -999.00  +12.80  13.18     97  +12.40 1 3 1 3 1   888    0 0.42 -0.46 ----- 10.2 13.2 64.4 16.0 13.9 -0.7 14.0 -0.3 13.9 -0.4 14.2 -0.4
2026-04-11T10:54:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:54:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:54:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.370606
2026-04-11T10:54:23.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:54:23.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:54:23.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:54:23.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:54:23.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:54:23.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:53:42', tmtdew=0.12953, humidity=99.08, cloud=0.0, wind=19.337, temperature=13.3011, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:53:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:54:23.054 [DEBUG] [Thread-168607] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:54:23.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:54:23.145 [DEBUG] [Thread-168610] [transport.py] [_log()] starting thread (client mode): 0xae5a61a0
2026-04-11T10:54:23.145 [DEBUG] [Thread-168610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:54:23.160 [DEBUG] [Thread-168610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:54:23.160 [INFO] [Thread-168610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] client lang: <none>
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] server lang: <none>
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] kex follows: False
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:54:23.168 [DEBUG] [Thread-168610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:54:23.169 [DEBUG] [Thread-168610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:54:23.169 [DEBUG] [Thread-168610] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:54:23.169 [DEBUG] [Thread-168610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:54:23.169 [DEBUG] [Thread-168610] [transport.py] [_log()] Compression: none
2026-04-11T10:54:23.169 [DEBUG] [Thread-168610] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:54:23.226 [DEBUG] [Thread-168610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:54:23.226 [DEBUG] [Thread-168610] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:54:23.227 [DEBUG] [Thread-168610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:54:23.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:54:23.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:54:23.286 [DEBUG] [Thread-168610] [transport.py] [_log()] userauth is OK
2026-04-11T10:54:23.286 [DEBUG] [Thread-168610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:54:23.286 [DEBUG] [Thread-168610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:54:23.286 [DEBUG] [Thread-168610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:54:23.286 [DEBUG] [Thread-168610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:54:23.301 [INFO] [Thread-168610] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:54:23.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:54:23.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:54:24.202 [DEBUG] [Thread-168610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:54:24.202 [DEBUG] [Thread-168610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:54:24.251 [DEBUG] [Thread-168610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:54:24.251 [DEBUG] [Thread-168610] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:54:24.264 [DEBUG] [Thread-168610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:54:24.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:54:24.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:54:24.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:54:24.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:54:24.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:54:24.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:54:24.302 [DEBUG] [Thread-168610] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:54:32.006 [DEBUG] [Thread-168612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:40.221 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:40.222 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:47.061 [DEBUG] [Thread-168613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:54:54.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:54:54.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:54:54.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-04-11T10:54:55.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 54, 18), 0.112205, 99.5566, 0.0, 16.3739, 12.9171, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:54:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:54:18
2026-04-11T10:54:56.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:54:56.187 [DEBUG] [Thread-168614] [transport.py] [_log()] starting thread (client mode): 0xae518730
2026-04-11T10:54:56.188 [DEBUG] [Thread-168614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:54:56.208 [DEBUG] [Thread-168614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:54:56.208 [INFO] [Thread-168614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:54:56.211 [DEBUG] [Thread-168614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:54:56.211 [DEBUG] [Thread-168614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] client lang: <none>
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] server lang: <none>
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] kex follows: False
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:54:56.212 [DEBUG] [Thread-168614] [transport.py] [_log()] Compression: none
2026-04-11T10:54:56.213 [DEBUG] [Thread-168614] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:54:56.229 [DEBUG] [Thread-168614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:54:56.230 [DEBUG] [Thread-168614] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:54:56.230 [DEBUG] [Thread-168614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:54:56.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:54:56.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:54:56.232 [DEBUG] [Thread-168614] [transport.py] [_log()] userauth is OK
2026-04-11T10:54:56.233 [DEBUG] [Thread-168614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:54:56.233 [DEBUG] [Thread-168614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:54:56.233 [DEBUG] [Thread-168614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:54:56.233 [DEBUG] [Thread-168614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:54:56.268 [INFO] [Thread-168614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:54:56.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:54:57.054 [DEBUG] [Thread-168614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:54:57.054 [DEBUG] [Thread-168614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:54:57.055 [DEBUG] [Thread-168614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:54:57.095 [DEBUG] [Thread-168614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:54:57.095 [DEBUG] [Thread-168614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:54:57.099 [DEBUG] [Thread-168614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:54:57.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:54:57.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:54:57.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:54:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:54:57.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:54:57.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:54:57.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:54:57.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:54:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:54:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.370954 -999.00  +12.80  10.97     97  +12.40 1 3 1 3 1   888    0 0.41 -0.55 ----- 9.4 11.0 111.4 17.3 14.0 -0.4 14.0 -0.3 13.9 -0.3 14.1 -0.5
2026-04-11T10:54:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:54:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:54:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.370954
2026-04-11T10:54:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:54:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:54:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:54:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:54:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:54:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:54:18', tmtdew=0.112205, humidity=99.5566, cloud=0.0, wind=16.3739, temperature=12.9171, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:54:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:54:57.127 [DEBUG] [Thread-168614] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:54:57.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:54:57.220 [DEBUG] [Thread-168617] [transport.py] [_log()] starting thread (client mode): 0xae519bd0
2026-04-11T10:54:57.220 [DEBUG] [Thread-168617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:54:57.235 [DEBUG] [Thread-168617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:54:57.235 [INFO] [Thread-168617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:54:57.243 [DEBUG] [Thread-168617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:54:57.244 [DEBUG] [Thread-168617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] client lang: <none>
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] server lang: <none>
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] kex follows: False
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] Compression: none
2026-04-11T10:54:57.245 [DEBUG] [Thread-168617] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:54:57.303 [DEBUG] [Thread-168617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:54:57.303 [DEBUG] [Thread-168617] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:54:57.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:54:57.304 [DEBUG] [Thread-168617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:54:57.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:54:57.358 [DEBUG] [Thread-168617] [transport.py] [_log()] userauth is OK
2026-04-11T10:54:57.358 [DEBUG] [Thread-168617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:54:57.359 [DEBUG] [Thread-168617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:54:57.359 [DEBUG] [Thread-168617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:54:57.359 [DEBUG] [Thread-168617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:54:57.377 [INFO] [Thread-168617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:54:57.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:54:57.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:54:58.206 [DEBUG] [Thread-168617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:54:58.207 [DEBUG] [Thread-168617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:54:58.255 [DEBUG] [Thread-168617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:54:58.255 [DEBUG] [Thread-168617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:54:58.265 [DEBUG] [Thread-168617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:54:58.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:54:58.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:54:58.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:54:58.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:54:58.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:54:58.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:54:58.303 [DEBUG] [Thread-168617] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:55:00.668 [DEBUG] [Thread-168619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:55:02.096 [DEBUG] [Thread-168620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:55:17.147 [DEBUG] [Thread-168621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:55:28.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:55:28.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:55:28.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-04-11T10:55:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 54, 53), 0.11416, 99.1794, 0.0, 23.1826, 13.3011, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:55:29.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:54:53
2026-04-11T10:55:30.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:55:30.233 [DEBUG] [Thread-168622] [transport.py] [_log()] starting thread (client mode): 0xae5a47c0
2026-04-11T10:55:30.233 [DEBUG] [Thread-168622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:55:30.253 [DEBUG] [Thread-168622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:55:30.253 [INFO] [Thread-168622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:55:30.256 [DEBUG] [Thread-168622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] client lang: <none>
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] server lang: <none>
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] kex follows: False
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:55:30.257 [DEBUG] [Thread-168622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:55:30.258 [DEBUG] [Thread-168622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:55:30.258 [DEBUG] [Thread-168622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:55:30.258 [DEBUG] [Thread-168622] [transport.py] [_log()] Compression: none
2026-04-11T10:55:30.258 [DEBUG] [Thread-168622] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:55:30.275 [DEBUG] [Thread-168622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:55:30.275 [DEBUG] [Thread-168622] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:55:30.276 [DEBUG] [Thread-168622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:55:30.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:55:30.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:55:30.279 [DEBUG] [Thread-168622] [transport.py] [_log()] userauth is OK
2026-04-11T10:55:30.279 [DEBUG] [Thread-168622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:55:30.280 [DEBUG] [Thread-168622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:55:30.280 [DEBUG] [Thread-168622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:55:30.280 [DEBUG] [Thread-168622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:55:30.304 [INFO] [Thread-168622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:55:30.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:55:31.159 [DEBUG] [Thread-168622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:55:31.159 [DEBUG] [Thread-168622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:55:31.160 [DEBUG] [Thread-168622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:55:31.200 [DEBUG] [Thread-168622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:55:31.200 [DEBUG] [Thread-168622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:55:31.204 [DEBUG] [Thread-168622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:55:31.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:55:31.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:55:31.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:55:31.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:55:31.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:55:31.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:55:31.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:55:31.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:55:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:55:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.371301 -999.00  +12.80  13.92     97  +12.30 1 3 1 3 1   888    0 0.42 -0.31 ----- 13.7 13.9 95.8 21.1 13.9 -0.5 14.0 -0.2 13.9 -0.3 14.2 -0.6
2026-04-11T10:55:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:55:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:55:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.371301
2026-04-11T10:55:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:55:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:55:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:55:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:55:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:55:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:54:53', tmtdew=0.11416, humidity=99.1794, cloud=0.0, wind=23.1826, temperature=13.3011, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:54:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:55:31.233 [DEBUG] [Thread-168622] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:55:31.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:55:31.327 [DEBUG] [Thread-168625] [transport.py] [_log()] starting thread (client mode): 0xae5a5840
2026-04-11T10:55:31.327 [DEBUG] [Thread-168625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:55:31.343 [DEBUG] [Thread-168625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:55:31.343 [INFO] [Thread-168625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:55:31.350 [DEBUG] [Thread-168625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] client lang: <none>
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] server lang: <none>
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] kex follows: False
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] Compression: none
2026-04-11T10:55:31.351 [DEBUG] [Thread-168625] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:55:31.408 [DEBUG] [Thread-168625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:55:31.409 [DEBUG] [Thread-168625] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:55:31.409 [DEBUG] [Thread-168625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:55:31.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:55:31.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:55:31.466 [DEBUG] [Thread-168625] [transport.py] [_log()] userauth is OK
2026-04-11T10:55:31.466 [DEBUG] [Thread-168625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:55:31.466 [DEBUG] [Thread-168625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:55:31.466 [DEBUG] [Thread-168625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:55:31.467 [DEBUG] [Thread-168625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:55:31.487 [INFO] [Thread-168625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:55:31.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:55:31.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:55:32.190 [DEBUG] [Thread-168627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:55:32.315 [DEBUG] [Thread-168625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:55:32.315 [DEBUG] [Thread-168625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:55:32.364 [DEBUG] [Thread-168625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:55:32.365 [DEBUG] [Thread-168625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:55:32.375 [DEBUG] [Thread-168625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:55:32.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:55: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')
2026-04-11T10:55:32.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-04-11T10:55:32.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:55:32.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:55:32.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:55:32.419 [DEBUG] [Thread-168625] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:55:40.363 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:55:40.364 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:55:47.244 [DEBUG] [Thread-168628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:00.724 [DEBUG] [Thread-168629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:02.285 [DEBUG] [Thread-168630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:02.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:56:02.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:56:02.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-04-11T10:56:03.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 55, 28), 0.114765, 99.54, 0.0, 18.2092, 12.834, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:56:03.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:55:28
2026-04-11T10:56:04.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:56:04.247 [DEBUG] [Thread-168631] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-11T10:56:04.247 [DEBUG] [Thread-168631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:56:04.270 [DEBUG] [Thread-168631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:56:04.270 [INFO] [Thread-168631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:56:04.273 [DEBUG] [Thread-168631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:56:04.273 [DEBUG] [Thread-168631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:56:04.273 [DEBUG] [Thread-168631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] client lang: <none>
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] server lang: <none>
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] kex follows: False
2026-04-11T10:56:04.274 [DEBUG] [Thread-168631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:56:04.275 [DEBUG] [Thread-168631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:56:04.275 [DEBUG] [Thread-168631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:56:04.275 [DEBUG] [Thread-168631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:56:04.275 [DEBUG] [Thread-168631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:56:04.275 [DEBUG] [Thread-168631] [transport.py] [_log()] Compression: none
2026-04-11T10:56:04.275 [DEBUG] [Thread-168631] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:56:04.290 [DEBUG] [Thread-168631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:56:04.291 [DEBUG] [Thread-168631] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:56:04.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:56:04.292 [DEBUG] [Thread-168631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:56:04.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:56:04.296 [DEBUG] [Thread-168631] [transport.py] [_log()] userauth is OK
2026-04-11T10:56:04.296 [DEBUG] [Thread-168631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:56:04.296 [DEBUG] [Thread-168631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:56:04.296 [DEBUG] [Thread-168631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:56:04.296 [DEBUG] [Thread-168631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:56:04.321 [INFO] [Thread-168631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:56:04.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:56:05.142 [DEBUG] [Thread-168631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:56:05.142 [DEBUG] [Thread-168631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:56:05.143 [DEBUG] [Thread-168631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:56:05.185 [DEBUG] [Thread-168631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:56:05.186 [DEBUG] [Thread-168631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:56:05.190 [DEBUG] [Thread-168631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:56:05.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:56:05.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:56:05.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:56:05.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:56:05.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:56:05.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:56:05.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:56:05.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:56:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:56:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.371648 -999.00  +12.80  12.46     97  +12.30 1 3 1 3 1   888    0 0.43 -0.11 ----- 12.3 12.5 114.2 17.5 13.9 -1.1 14.0 -0.2 13.9 -0.4 14.2 -0.5
2026-04-11T10:56:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:56:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:56:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.371648
2026-04-11T10:56:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:56:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:56:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:56:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:56:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:56:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:55:28', tmtdew=0.114765, humidity=99.54, cloud=0.0, wind=18.2092, temperature=12.834, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:55:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:56:05.221 [DEBUG] [Thread-168631] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:56:05.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:56:05.315 [DEBUG] [Thread-168634] [transport.py] [_log()] starting thread (client mode): 0xae5f11b0
2026-04-11T10:56:05.315 [DEBUG] [Thread-168634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:56:05.329 [DEBUG] [Thread-168634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:56:05.329 [INFO] [Thread-168634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:56:05.337 [DEBUG] [Thread-168634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] client lang: <none>
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] server lang: <none>
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] kex follows: False
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:56:05.338 [DEBUG] [Thread-168634] [transport.py] [_log()] Compression: none
2026-04-11T10:56:05.339 [DEBUG] [Thread-168634] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:56:05.396 [DEBUG] [Thread-168634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:56:05.396 [DEBUG] [Thread-168634] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:56:05.397 [DEBUG] [Thread-168634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:56:05.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:56:05.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:56:05.454 [DEBUG] [Thread-168634] [transport.py] [_log()] userauth is OK
2026-04-11T10:56:05.454 [DEBUG] [Thread-168634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:56:05.455 [DEBUG] [Thread-168634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:56:05.455 [DEBUG] [Thread-168634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:56:05.455 [DEBUG] [Thread-168634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:56:05.475 [INFO] [Thread-168634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:56:05.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:56:05.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:56:06.397 [DEBUG] [Thread-168634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:56:06.397 [DEBUG] [Thread-168634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:56:06.445 [DEBUG] [Thread-168634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:56:06.445 [DEBUG] [Thread-168634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:56:06.455 [DEBUG] [Thread-168634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:56:06.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:56:06.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-04-11T10:56:06.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:56:06.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:56:06.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:56:06.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:56:06.492 [DEBUG] [Thread-168634] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:56:17.324 [DEBUG] [Thread-168636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:32.380 [DEBUG] [Thread-168637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:36.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:56:36.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:56:36.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T10:56:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 56, 4), 0.114765, 99.54, 0.0, 19.5145, 12.834, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:56:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:56:04
2026-04-11T10:56:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:56:38.270 [DEBUG] [Thread-168638] [transport.py] [_log()] starting thread (client mode): 0xae518850
2026-04-11T10:56:38.270 [DEBUG] [Thread-168638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:56:38.291 [DEBUG] [Thread-168638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:56:38.291 [INFO] [Thread-168638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] client lang: <none>
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] server lang: <none>
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] kex follows: False
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] Compression: none
2026-04-11T10:56:38.293 [DEBUG] [Thread-168638] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:56:38.312 [DEBUG] [Thread-168638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:56:38.312 [DEBUG] [Thread-168638] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:56:38.313 [DEBUG] [Thread-168638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:56:38.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:56:38.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:56:38.316 [DEBUG] [Thread-168638] [transport.py] [_log()] userauth is OK
2026-04-11T10:56:38.316 [DEBUG] [Thread-168638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:56:38.316 [DEBUG] [Thread-168638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:56:38.316 [DEBUG] [Thread-168638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:56:38.316 [DEBUG] [Thread-168638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:56:38.340 [INFO] [Thread-168638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:56:38.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:56:39.138 [DEBUG] [Thread-168638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:56:39.138 [DEBUG] [Thread-168638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:56:39.139 [DEBUG] [Thread-168638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:56:39.179 [DEBUG] [Thread-168638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:56:39.179 [DEBUG] [Thread-168638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:56:39.183 [DEBUG] [Thread-168638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:56:39.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:56:39.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:56:39.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:56:39.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:56:39.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:56:39.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:56:39.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:56:39.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:56:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:56:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.372342 -999.00  +12.70  11.82     97  +12.30 1 3 1 3 1   888    0 0.44 0.02 ----- 12.3 11.8 105.9 18.3 13.8 -0.5 14.0 -0.2 13.9 -0.7 14.2 -0.6
2026-04-11T10:56:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:56:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:56:39.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.372342
2026-04-11T10:56:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:56:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:56:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:56:39.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:56:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:56:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:56:04', tmtdew=0.114765, humidity=99.54, cloud=0.0, wind=19.5145, temperature=12.834, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:56:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:56:39.209 [DEBUG] [Thread-168638] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:56:39.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:56:39.302 [DEBUG] [Thread-168641] [transport.py] [_log()] starting thread (client mode): 0xae5e5780
2026-04-11T10:56:39.302 [DEBUG] [Thread-168641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:56:39.316 [DEBUG] [Thread-168641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:56:39.316 [INFO] [Thread-168641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] client lang: <none>
2026-04-11T10:56:39.324 [DEBUG] [Thread-168641] [transport.py] [_log()] server lang: <none>
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] kex follows: False
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] Compression: none
2026-04-11T10:56:39.325 [DEBUG] [Thread-168641] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:56:39.382 [DEBUG] [Thread-168641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:56:39.382 [DEBUG] [Thread-168641] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:56:39.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:56:39.383 [DEBUG] [Thread-168641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:56:39.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:56:39.438 [DEBUG] [Thread-168641] [transport.py] [_log()] userauth is OK
2026-04-11T10:56:39.439 [DEBUG] [Thread-168641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:56:39.439 [DEBUG] [Thread-168641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:56:39.439 [DEBUG] [Thread-168641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:56:39.439 [DEBUG] [Thread-168641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:56:39.463 [INFO] [Thread-168641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:56:39.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:56:39.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:56:40.287 [DEBUG] [Thread-168641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:56:40.288 [DEBUG] [Thread-168641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:56:40.336 [DEBUG] [Thread-168641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:56:40.337 [DEBUG] [Thread-168641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:56:40.346 [DEBUG] [Thread-168641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:56:40.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:56:40.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:56:40.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:56:40.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:56:40.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:56:40.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:56:40.383 [DEBUG] [Thread-168641] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:56:40.509 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:40.510 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:56:47.417 [DEBUG] [Thread-168643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:00.757 [DEBUG] [Thread-168644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:02.469 [DEBUG] [Thread-168645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:57:10.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:57:10.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-04-11T10:57:11.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 56, 39), 0.12441, 99.1131, 0.0, 21.6655, 13.2679, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:57:11.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:56:39
2026-04-11T10:57:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:57:12.204 [DEBUG] [Thread-168646] [transport.py] [_log()] starting thread (client mode): 0xb0f6cca0
2026-04-11T10:57:12.204 [DEBUG] [Thread-168646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:57:12.224 [DEBUG] [Thread-168646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:57:12.224 [INFO] [Thread-168646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:57:12.225 [DEBUG] [Thread-168646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] client lang: <none>
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] server lang: <none>
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] kex follows: False
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] Compression: none
2026-04-11T10:57:12.226 [DEBUG] [Thread-168646] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:57:12.236 [DEBUG] [Thread-168646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:57:12.236 [DEBUG] [Thread-168646] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:57:12.236 [DEBUG] [Thread-168646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:57:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:57:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:57:12.238 [DEBUG] [Thread-168646] [transport.py] [_log()] userauth is OK
2026-04-11T10:57:12.238 [DEBUG] [Thread-168646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:57:12.238 [DEBUG] [Thread-168646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:57:12.238 [DEBUG] [Thread-168646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:57:12.238 [DEBUG] [Thread-168646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:57:12.269 [INFO] [Thread-168646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:57:12.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:57:13.093 [DEBUG] [Thread-168646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:57:13.093 [DEBUG] [Thread-168646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:57:13.093 [DEBUG] [Thread-168646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:57:13.134 [DEBUG] [Thread-168646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:57:13.134 [DEBUG] [Thread-168646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:57:13.137 [DEBUG] [Thread-168646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:57:13.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:57:13.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:57:13.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:57:13.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:57:13.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:57:13.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:57:13.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:57:13.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:57:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:57:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.372690 -999.00  +12.70  14.02     97  +12.30 1 3 1 3 1   888    0 0.43 -0.12 ----- 15.2 14.0 142.1 20.8 13.9 -0.3 14.0 -0.4 13.9 -0.3 14.1 -0.4
2026-04-11T10:57:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:57:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:57:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.372690
2026-04-11T10:57:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:57:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:57:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:57:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:57:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:57:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:56:39', tmtdew=0.12441, humidity=99.1131, cloud=0.0, wind=21.6655, temperature=13.2679, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:56:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:57:13.164 [DEBUG] [Thread-168646] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:57:13.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:57:13.257 [DEBUG] [Thread-168649] [transport.py] [_log()] starting thread (client mode): 0xb0f6d930
2026-04-11T10:57:13.257 [DEBUG] [Thread-168649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:57:13.272 [DEBUG] [Thread-168649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:57:13.272 [INFO] [Thread-168649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:57:13.280 [DEBUG] [Thread-168649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:13.281 [DEBUG] [Thread-168649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] client lang: <none>
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] server lang: <none>
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] kex follows: False
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] Compression: none
2026-04-11T10:57:13.282 [DEBUG] [Thread-168649] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:57:13.341 [DEBUG] [Thread-168649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:57:13.342 [DEBUG] [Thread-168649] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:57:13.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:57:13.343 [DEBUG] [Thread-168649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:57:13.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:57:13.399 [DEBUG] [Thread-168649] [transport.py] [_log()] userauth is OK
2026-04-11T10:57:13.400 [DEBUG] [Thread-168649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:57:13.400 [DEBUG] [Thread-168649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:57:13.400 [DEBUG] [Thread-168649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:57:13.400 [DEBUG] [Thread-168649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:57:13.419 [INFO] [Thread-168649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:57:13.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:57:13.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:57:14.239 [DEBUG] [Thread-168649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:57:14.239 [DEBUG] [Thread-168649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:57:14.287 [DEBUG] [Thread-168649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:57:14.287 [DEBUG] [Thread-168649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:57:14.298 [DEBUG] [Thread-168649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:57:14.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:57:14.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-04-11T10:57:14.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-04-11T10:57:14.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:57:14.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:57:14.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:57:14.339 [DEBUG] [Thread-168649] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:57:17.507 [DEBUG] [Thread-168651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:32.563 [DEBUG] [Thread-168652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:40.650 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:40.651 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:44.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:57:44.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:57:44.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-04-11T10:57:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 57, 15), 0.112205, 99.5565, 0.0, 18.6325, 12.8339, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:57:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:57:15
2026-04-11T10:57:45.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:57:46.148 [DEBUG] [Thread-168653] [transport.py] [_log()] starting thread (client mode): 0xae52c220
2026-04-11T10:57:46.148 [DEBUG] [Thread-168653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:57:46.169 [DEBUG] [Thread-168653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:57:46.169 [INFO] [Thread-168653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:57:46.172 [DEBUG] [Thread-168653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:57:46.173 [DEBUG] [Thread-168653] [transport.py] [_log()] client lang: <none>
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] server lang: <none>
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] kex follows: False
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] Compression: none
2026-04-11T10:57:46.174 [DEBUG] [Thread-168653] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:57:46.194 [DEBUG] [Thread-168653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:57:46.195 [DEBUG] [Thread-168653] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:57:46.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:57:46.196 [DEBUG] [Thread-168653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:57:46.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:57:46.199 [DEBUG] [Thread-168653] [transport.py] [_log()] userauth is OK
2026-04-11T10:57:46.199 [DEBUG] [Thread-168653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:57:46.199 [DEBUG] [Thread-168653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:57:46.199 [DEBUG] [Thread-168653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:57:46.199 [DEBUG] [Thread-168653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:57:46.231 [INFO] [Thread-168653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:57:46.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:57:46.988 [DEBUG] [Thread-168653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:57:46.988 [DEBUG] [Thread-168653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:57:46.989 [DEBUG] [Thread-168653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:57:47.032 [DEBUG] [Thread-168653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:57:47.032 [DEBUG] [Thread-168653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:57:47.036 [DEBUG] [Thread-168653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:57:47.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:57:47.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:57:47.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:57:47.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:57:47.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:57:47.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:57:47.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:57:47.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:57:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:57:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.373037 -999.00  +12.80  12.51     97  +12.30 1 3 1 3 1   888    0 0.43 0.16 ----- 9.9 12.5 96.7 19.0 13.9 -0.3 14.0 -0.2 13.9 -0.4 14.2 -0.5
2026-04-11T10:57:47.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:57:47.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:57:47.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.373037
2026-04-11T10:57:47.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:57:47.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:57:47.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:57:47.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:57:47.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:57:47.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:57:15', tmtdew=0.112205, humidity=99.5565, cloud=0.0, wind=18.6325, temperature=12.8339, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:57:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:57:47.075 [DEBUG] [Thread-168653] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:57:47.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:57:47.165 [DEBUG] [Thread-168656] [transport.py] [_log()] starting thread (client mode): 0xae52dc30
2026-04-11T10:57:47.165 [DEBUG] [Thread-168656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:57:47.180 [DEBUG] [Thread-168656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:57:47.180 [INFO] [Thread-168656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:57:47.188 [DEBUG] [Thread-168656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:57:47.188 [DEBUG] [Thread-168656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:57:47.188 [DEBUG] [Thread-168656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:57:47.188 [DEBUG] [Thread-168656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:47.188 [DEBUG] [Thread-168656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] client lang: <none>
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] server lang: <none>
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] kex follows: False
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] Compression: none
2026-04-11T10:57:47.189 [DEBUG] [Thread-168656] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:57:47.246 [DEBUG] [Thread-168656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:57:47.247 [DEBUG] [Thread-168656] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:57:47.247 [DEBUG] [Thread-168656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:57:47.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:57:47.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:57:47.306 [DEBUG] [Thread-168656] [transport.py] [_log()] userauth is OK
2026-04-11T10:57:47.307 [DEBUG] [Thread-168656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:57:47.307 [DEBUG] [Thread-168656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:57:47.307 [DEBUG] [Thread-168656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:57:47.307 [DEBUG] [Thread-168656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:57:47.326 [INFO] [Thread-168656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:57:47.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:57:47.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:57:47.601 [DEBUG] [Thread-168658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:57:48.190 [DEBUG] [Thread-168656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:57:48.190 [DEBUG] [Thread-168656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:57:48.238 [DEBUG] [Thread-168656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:57:48.238 [DEBUG] [Thread-168656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:57:48.248 [DEBUG] [Thread-168656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:57:48.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:57:48.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-04-11T10:57:48.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:57:48.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:57:48.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:57:48.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:57:48.285 [DEBUG] [Thread-168656] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:58:00.802 [DEBUG] [Thread-168659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:02.653 [DEBUG] [Thread-168660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:17.688 [DEBUG] [Thread-168661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:18.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:58:18.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:58:18.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-04-11T10:58:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 57, 50), 0.12953, 99.0799, 0.0, 21.6655, 13.2347, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:58:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:57:50
2026-04-11T10:58:19.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:58:20.125 [DEBUG] [Thread-168662] [transport.py] [_log()] starting thread (client mode): 0xae5f2e90
2026-04-11T10:58:20.125 [DEBUG] [Thread-168662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:58:20.148 [DEBUG] [Thread-168662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:58:20.148 [INFO] [Thread-168662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:20.152 [DEBUG] [Thread-168662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] client lang: <none>
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] server lang: <none>
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] kex follows: False
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] Compression: none
2026-04-11T10:58:20.153 [DEBUG] [Thread-168662] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:58:20.174 [DEBUG] [Thread-168662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:58:20.175 [DEBUG] [Thread-168662] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:58:20.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:58:20.176 [DEBUG] [Thread-168662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:58:20.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:58:20.180 [DEBUG] [Thread-168662] [transport.py] [_log()] userauth is OK
2026-04-11T10:58:20.181 [DEBUG] [Thread-168662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:58:20.181 [DEBUG] [Thread-168662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:58:20.181 [DEBUG] [Thread-168662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:58:20.181 [DEBUG] [Thread-168662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:58:20.220 [INFO] [Thread-168662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:58:20.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:58:21.009 [DEBUG] [Thread-168662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:58:21.010 [DEBUG] [Thread-168662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:58:21.010 [DEBUG] [Thread-168662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:58:21.052 [DEBUG] [Thread-168662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:58:21.052 [DEBUG] [Thread-168662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:58:21.057 [DEBUG] [Thread-168662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:58:21.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:58:21.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:58:21.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:58:21.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:58:21.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:58:21.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:58:21.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:58:21.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:58:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:58:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.373384 -999.00  +12.80  14.95     97  +12.30 1 3 1 3 1   888    0 0.44 0.28 ----- 9.6 14.9 72.9 19.4 13.9 -0.1 14.0 -0.1 13.9 -0.3 14.1 -0.4
2026-04-11T10:58:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:58:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:58:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.373384
2026-04-11T10:58:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:58:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:58:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:58:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:58:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:58:21.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:57:50', tmtdew=0.12953, humidity=99.0799, cloud=0.0, wind=21.6655, temperature=13.2347, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:57:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:58:21.097 [DEBUG] [Thread-168662] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:58:21.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:58:21.191 [DEBUG] [Thread-168665] [transport.py] [_log()] starting thread (client mode): 0xae5f0d60
2026-04-11T10:58:21.191 [DEBUG] [Thread-168665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:58:21.208 [DEBUG] [Thread-168665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:58:21.208 [INFO] [Thread-168665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:58:21.216 [DEBUG] [Thread-168665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:58:21.216 [DEBUG] [Thread-168665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:58:21.217 [DEBUG] [Thread-168665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:58:21.217 [DEBUG] [Thread-168665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:21.217 [DEBUG] [Thread-168665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:21.217 [DEBUG] [Thread-168665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:21.217 [DEBUG] [Thread-168665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] client lang: <none>
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] server lang: <none>
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] kex follows: False
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] Compression: none
2026-04-11T10:58:21.218 [DEBUG] [Thread-168665] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:58:21.278 [DEBUG] [Thread-168665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:58:21.279 [DEBUG] [Thread-168665] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:58:21.280 [DEBUG] [Thread-168665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:58:21.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:58:21.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:58:21.339 [DEBUG] [Thread-168665] [transport.py] [_log()] userauth is OK
2026-04-11T10:58:21.339 [DEBUG] [Thread-168665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:58:21.339 [DEBUG] [Thread-168665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:58:21.339 [DEBUG] [Thread-168665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:58:21.340 [DEBUG] [Thread-168665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:58:21.360 [INFO] [Thread-168665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:58:21.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:58:21.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:58:22.201 [DEBUG] [Thread-168665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:58:22.202 [DEBUG] [Thread-168665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:58:22.252 [DEBUG] [Thread-168665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:58:22.252 [DEBUG] [Thread-168665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:58:22.264 [DEBUG] [Thread-168665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:58:22.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:58:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T10:58:22.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-04-11T10:58:22.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:58:22.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:58:22.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:58:22.309 [DEBUG] [Thread-168665] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:58:32.723 [DEBUG] [Thread-168667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:40.791 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:40.793 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:47.775 [DEBUG] [Thread-168668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:58:52.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:58:52.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:58:52.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-04-11T10:58:53.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 58, 26), 0.059645, 99.5731, 0.0, 16.0218, 12.8505, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:58:53.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:58:26
2026-04-11T10:58:54.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:58:54.171 [DEBUG] [Thread-168669] [transport.py] [_log()] starting thread (client mode): 0xae5157e0
2026-04-11T10:58:54.171 [DEBUG] [Thread-168669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:58:54.193 [DEBUG] [Thread-168669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:58:54.193 [INFO] [Thread-168669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] client lang: <none>
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] server lang: <none>
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] kex follows: False
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] Compression: none
2026-04-11T10:58:54.195 [DEBUG] [Thread-168669] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:58:54.215 [DEBUG] [Thread-168669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:58:54.216 [DEBUG] [Thread-168669] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:58:54.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:58:54.217 [DEBUG] [Thread-168669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:58:54.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:58:54.221 [DEBUG] [Thread-168669] [transport.py] [_log()] userauth is OK
2026-04-11T10:58:54.221 [DEBUG] [Thread-168669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:58:54.221 [DEBUG] [Thread-168669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:58:54.221 [DEBUG] [Thread-168669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:58:54.221 [DEBUG] [Thread-168669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:58:54.255 [INFO] [Thread-168669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:58:54.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:58:55.104 [DEBUG] [Thread-168669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:58:55.104 [DEBUG] [Thread-168669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:58:55.105 [DEBUG] [Thread-168669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:58:55.146 [DEBUG] [Thread-168669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:58:55.146 [DEBUG] [Thread-168669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:58:55.151 [DEBUG] [Thread-168669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:58:55.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:58:55.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:58:55.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:58:55.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:58:55.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:58:55.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:58:55.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:58:55.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:58:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:58:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.373731 -999.00  +12.90  12.77     97  +12.40 1 3 1 3 1   888    0 0.44 0.07 ----- 10.4 12.8 60.8 17.5 14.0 -0.3 14.0 -0.2 13.9 -0.3 14.2 -0.3
2026-04-11T10:58:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:58:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:58:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.373731
2026-04-11T10:58:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:58:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:58:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:58:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:58:55.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:58:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:58:26', tmtdew=0.059645, humidity=99.5731, cloud=0.0, wind=16.0218, temperature=12.8505, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:58:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:58:55.189 [DEBUG] [Thread-168669] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:58:55.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:58:55.284 [DEBUG] [Thread-168672] [transport.py] [_log()] starting thread (client mode): 0xae5e6b30
2026-04-11T10:58:55.284 [DEBUG] [Thread-168672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:58:55.300 [DEBUG] [Thread-168672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:58:55.300 [INFO] [Thread-168672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:58:55.308 [DEBUG] [Thread-168672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:58:55.308 [DEBUG] [Thread-168672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:58:55.308 [DEBUG] [Thread-168672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:58:55.308 [DEBUG] [Thread-168672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] client lang: <none>
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] server lang: <none>
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] kex follows: False
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:58:55.309 [DEBUG] [Thread-168672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:58:55.310 [DEBUG] [Thread-168672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:58:55.310 [DEBUG] [Thread-168672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:58:55.310 [DEBUG] [Thread-168672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:58:55.310 [DEBUG] [Thread-168672] [transport.py] [_log()] Compression: none
2026-04-11T10:58:55.310 [DEBUG] [Thread-168672] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:58:55.366 [DEBUG] [Thread-168672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:58:55.367 [DEBUG] [Thread-168672] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:58:55.367 [DEBUG] [Thread-168672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:58:55.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:58:55.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:58:55.423 [DEBUG] [Thread-168672] [transport.py] [_log()] userauth is OK
2026-04-11T10:58:55.423 [DEBUG] [Thread-168672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:58:55.423 [DEBUG] [Thread-168672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:58:55.423 [DEBUG] [Thread-168672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:58:55.424 [DEBUG] [Thread-168672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:58:55.444 [INFO] [Thread-168672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:58:55.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:58:55.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:58:56.337 [DEBUG] [Thread-168672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:58:56.338 [DEBUG] [Thread-168672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:58:56.385 [DEBUG] [Thread-168672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:58:56.386 [DEBUG] [Thread-168672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:58:56.395 [DEBUG] [Thread-168672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:58:56.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:58:56.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-04-11T10:58:56.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:58:56.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:58:56.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:58:56.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:58:56.433 [DEBUG] [Thread-168672] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:59:00.836 [DEBUG] [Thread-168674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:59:02.812 [DEBUG] [Thread-168675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:59:17.861 [DEBUG] [Thread-168676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:59:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T10:59:26.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T10:59:26.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-04-11T10:59:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 59, 1), 0.10965, 99.5731, 0.0, 15.9858, 12.9337, 2, 2, 2, 2, 0, 0),)
2026-04-11T10:59:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:59:01
2026-04-11T10:59:28.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T10:59:28.286 [DEBUG] [Thread-168677] [transport.py] [_log()] starting thread (client mode): 0xb0f8d900
2026-04-11T10:59:28.286 [DEBUG] [Thread-168677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:59:28.309 [DEBUG] [Thread-168677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T10:59:28.309 [INFO] [Thread-168677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T10:59:28.311 [DEBUG] [Thread-168677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] client lang: <none>
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] server lang: <none>
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] kex follows: False
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] Compression: none
2026-04-11T10:59:28.312 [DEBUG] [Thread-168677] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:59:28.331 [DEBUG] [Thread-168677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:59:28.332 [DEBUG] [Thread-168677] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:59:28.332 [DEBUG] [Thread-168677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T10:59:28.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T10:59:28.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:59:28.335 [DEBUG] [Thread-168677] [transport.py] [_log()] userauth is OK
2026-04-11T10:59:28.336 [DEBUG] [Thread-168677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:59:28.336 [DEBUG] [Thread-168677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:59:28.336 [DEBUG] [Thread-168677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T10:59:28.336 [DEBUG] [Thread-168677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:59:28.361 [INFO] [Thread-168677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:59:28.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:59:29.127 [DEBUG] [Thread-168677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:59:29.127 [DEBUG] [Thread-168677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:59:29.128 [DEBUG] [Thread-168677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T10:59:29.169 [DEBUG] [Thread-168677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:59:29.169 [DEBUG] [Thread-168677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:59:29.174 [DEBUG] [Thread-168677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:59:29.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:59:29.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T10:59:29.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T10:59:29.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T10:59:29.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:59:29.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T10:59:29.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:59:29.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:59:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T10:59:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.374079 -999.00  +12.80  11.43     97  +12.40 1 3 1 3 1   888    0 0.44 0.36 ----- 11.9 11.4 115.4 18.8 14.0 -0.6 14.1 -0.1 13.9 -0.5 14.2 -0.5
2026-04-11T10:59:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T10:59:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T10:59:29.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.374079
2026-04-11T10:59:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T10:59:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T10:59:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T10:59:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T10:59:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T10:59:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:59:01', tmtdew=0.10965, humidity=99.5731, cloud=0.0, wind=15.9858, temperature=12.9337, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:58:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T10:59:29.210 [DEBUG] [Thread-168677] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:59:29.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T10:59:29.310 [DEBUG] [Thread-168680] [transport.py] [_log()] starting thread (client mode): 0xb0f8c0d0
2026-04-11T10:59:29.310 [DEBUG] [Thread-168680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T10:59:29.325 [DEBUG] [Thread-168680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T10:59:29.326 [INFO] [Thread-168680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:59:29.333 [DEBUG] [Thread-168680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] client lang: <none>
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] server lang: <none>
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] kex follows: False
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] Compression: none
2026-04-11T10:59:29.334 [DEBUG] [Thread-168680] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T10:59:29.394 [DEBUG] [Thread-168680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T10:59:29.395 [DEBUG] [Thread-168680] [transport.py] [_log()] Switch to new keys ...
2026-04-11T10:59:29.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T10:59:29.396 [DEBUG] [Thread-168680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T10:59:29.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T10:59:29.454 [DEBUG] [Thread-168680] [transport.py] [_log()] userauth is OK
2026-04-11T10:59:29.455 [DEBUG] [Thread-168680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T10:59:29.455 [DEBUG] [Thread-168680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T10:59:29.455 [DEBUG] [Thread-168680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T10:59:29.455 [DEBUG] [Thread-168680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T10:59:29.474 [INFO] [Thread-168680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T10:59:29.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T10:59:29.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T10:59:30.362 [DEBUG] [Thread-168680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T10:59:30.362 [DEBUG] [Thread-168680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T10:59:30.410 [DEBUG] [Thread-168680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T10:59:30.411 [DEBUG] [Thread-168680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T10:59:30.420 [DEBUG] [Thread-168680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T10:59:30.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T10:59:30.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-04-11T10:59:30.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T10:59:30.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T10:59:30.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T10:59:30.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T10:59:30.460 [DEBUG] [Thread-168680] [transport.py] [_log()] EOF in transport thread
2026-04-11T10:59:32.899 [DEBUG] [Thread-168682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:59:40.934 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:59:40.936 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T10:59:47.951 [DEBUG] [Thread-168683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:00.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:00:00.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:00:00.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-04-11T11:00:00.869 [DEBUG] [Thread-168684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 10, 59, 37), 0.13979, 99.0135, 0.0, 26.9222, 13.2679, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:00:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 10:59:37
2026-04-11T11:00:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:00:02.248 [DEBUG] [Thread-168685] [transport.py] [_log()] starting thread (client mode): 0xb0f6c130
2026-04-11T11:00:02.248 [DEBUG] [Thread-168685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:00:02.270 [DEBUG] [Thread-168685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:00:02.270 [INFO] [Thread-168685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] client lang: <none>
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] server lang: <none>
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] kex follows: False
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:00:02.274 [DEBUG] [Thread-168685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:00:02.275 [DEBUG] [Thread-168685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:00:02.275 [DEBUG] [Thread-168685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:00:02.275 [DEBUG] [Thread-168685] [transport.py] [_log()] Compression: none
2026-04-11T11:00:02.275 [DEBUG] [Thread-168685] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:00:02.295 [DEBUG] [Thread-168685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:00:02.296 [DEBUG] [Thread-168685] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:00:02.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:00:02.297 [DEBUG] [Thread-168685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:00:02.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:00:02.302 [DEBUG] [Thread-168685] [transport.py] [_log()] userauth is OK
2026-04-11T11:00:02.302 [DEBUG] [Thread-168685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:00:02.302 [DEBUG] [Thread-168685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:00:02.302 [DEBUG] [Thread-168685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:00:02.302 [DEBUG] [Thread-168685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:00:02.323 [INFO] [Thread-168685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:00:02.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:00:02.986 [DEBUG] [Thread-168687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:03.185 [DEBUG] [Thread-168685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:00:03.185 [DEBUG] [Thread-168685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:00:03.185 [DEBUG] [Thread-168685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:00:03.228 [DEBUG] [Thread-168685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:00:03.228 [DEBUG] [Thread-168685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:00:03.233 [DEBUG] [Thread-168685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:00:03.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:00:03.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:00:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:00:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:00:03.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:00:03.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:00:03.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:00:03.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:00:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:00:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.374426 -999.00  +12.80  12.92     97  +12.40 1 3 1 3 1   888    0 0.44 0.11 ----- 12.4 12.9 101.1 18.5 13.9 -0.8 14.0 -0.2 13.9 -0.3 14.2 -0.5
2026-04-11T11:00:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:00:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:00:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.374426
2026-04-11T11:00:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:00:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:00:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:00:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:00:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:00:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T10:59:37', tmtdew=0.13979, humidity=99.0135, cloud=0.0, wind=26.9222, temperature=13.2679, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T08:59:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:00:03.258 [DEBUG] [Thread-168685] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:00:03.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:00:03.351 [DEBUG] [Thread-168689] [transport.py] [_log()] starting thread (client mode): 0xae5e7100
2026-04-11T11:00:03.351 [DEBUG] [Thread-168689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:00:03.366 [DEBUG] [Thread-168689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:00:03.367 [INFO] [Thread-168689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] client lang: <none>
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] server lang: <none>
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] kex follows: False
2026-04-11T11:00:03.374 [DEBUG] [Thread-168689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:00:03.375 [DEBUG] [Thread-168689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:00:03.375 [DEBUG] [Thread-168689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:00:03.375 [DEBUG] [Thread-168689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:00:03.375 [DEBUG] [Thread-168689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:00:03.375 [DEBUG] [Thread-168689] [transport.py] [_log()] Compression: none
2026-04-11T11:00:03.375 [DEBUG] [Thread-168689] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:00:03.435 [DEBUG] [Thread-168689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:00:03.435 [DEBUG] [Thread-168689] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:00:03.436 [DEBUG] [Thread-168689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:00:03.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:00:03.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:00:03.494 [DEBUG] [Thread-168689] [transport.py] [_log()] userauth is OK
2026-04-11T11:00:03.494 [DEBUG] [Thread-168689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:00:03.495 [DEBUG] [Thread-168689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:00:03.495 [DEBUG] [Thread-168689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:00:03.495 [DEBUG] [Thread-168689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:00:03.513 [INFO] [Thread-168689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:00:03.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:00:03.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:00:04.400 [DEBUG] [Thread-168689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:00:04.400 [DEBUG] [Thread-168689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:00:04.448 [DEBUG] [Thread-168689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:00:04.448 [DEBUG] [Thread-168689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:00:04.458 [DEBUG] [Thread-168689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:00:04.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:00:04.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:00:04.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:00:04.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:00:04.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:00:04.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:00:04.495 [DEBUG] [Thread-168689] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:00:18.027 [DEBUG] [Thread-168691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:33.079 [DEBUG] [Thread-168692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:00:34.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:00:34.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-04-11T11:00:35.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 0, 12), 0.114765, 99.5399, 0.0, 19.4616, 12.8508, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:00:35.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:00:12
2026-04-11T11:00:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:00:36.509 [DEBUG] [Thread-168693] [transport.py] [_log()] starting thread (client mode): 0xa795ff10
2026-04-11T11:00:36.509 [DEBUG] [Thread-168693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:00:36.526 [DEBUG] [Thread-168693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:00:36.526 [INFO] [Thread-168693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] client lang: <none>
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] server lang: <none>
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] kex follows: False
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] Compression: none
2026-04-11T11:00:36.529 [DEBUG] [Thread-168693] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:00:36.546 [DEBUG] [Thread-168693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:00:36.547 [DEBUG] [Thread-168693] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:00:36.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:00:36.548 [DEBUG] [Thread-168693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:00:36.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:00:36.551 [DEBUG] [Thread-168693] [transport.py] [_log()] userauth is OK
2026-04-11T11:00:36.551 [DEBUG] [Thread-168693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:00:36.551 [DEBUG] [Thread-168693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:00:36.551 [DEBUG] [Thread-168693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:00:36.551 [DEBUG] [Thread-168693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:00:36.576 [INFO] [Thread-168693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:00:36.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:00:37.334 [DEBUG] [Thread-168693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:00:37.334 [DEBUG] [Thread-168693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:00:37.334 [DEBUG] [Thread-168693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:00:37.375 [DEBUG] [Thread-168693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:00:37.376 [DEBUG] [Thread-168693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:00:37.379 [DEBUG] [Thread-168693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:00:37.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:00:37.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:00:37.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:00:37.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:00:37.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:00:37.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:00:37.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:00:37.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:00:37.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:00:37.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.375120 -999.00  +12.70  16.22     97  +12.30 1 3 1 3 1   888    0 0.46 0.59 ----- 16.7 16.2 118.2 19.6 13.9 -0.7 14.0 -0.1 13.9 -0.5 14.2 -0.5
2026-04-11T11:00:37.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:00:37.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:00:37.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.375120
2026-04-11T11:00:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:00:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:00:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:00:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:00:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:00:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:00:12', tmtdew=0.114765, humidity=99.5399, cloud=0.0, wind=19.4616, temperature=12.8508, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:00:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:00:37.408 [DEBUG] [Thread-168693] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:00:37.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:00:37.501 [DEBUG] [Thread-168696] [transport.py] [_log()] starting thread (client mode): 0xa795ffd0
2026-04-11T11:00:37.501 [DEBUG] [Thread-168696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:00:37.516 [DEBUG] [Thread-168696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:00:37.516 [INFO] [Thread-168696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] client lang: <none>
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] server lang: <none>
2026-04-11T11:00:37.526 [DEBUG] [Thread-168696] [transport.py] [_log()] kex follows: False
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] Compression: none
2026-04-11T11:00:37.527 [DEBUG] [Thread-168696] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:00:37.583 [DEBUG] [Thread-168696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:00:37.583 [DEBUG] [Thread-168696] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:00:37.584 [DEBUG] [Thread-168696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:00:37.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:00:37.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:00:37.642 [DEBUG] [Thread-168696] [transport.py] [_log()] userauth is OK
2026-04-11T11:00:37.642 [DEBUG] [Thread-168696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:00:37.642 [DEBUG] [Thread-168696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:00:37.642 [DEBUG] [Thread-168696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:00:37.642 [DEBUG] [Thread-168696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:00:37.661 [INFO] [Thread-168696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:00:37.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:00:37.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:00:38.484 [DEBUG] [Thread-168696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:00:38.484 [DEBUG] [Thread-168696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:00:38.532 [DEBUG] [Thread-168696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:00:38.533 [DEBUG] [Thread-168696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:00:38.542 [DEBUG] [Thread-168696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:00:38.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:00:38.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:00: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-04-11T11:00:38.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:00:38.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:00:38.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:00:38.578 [DEBUG] [Thread-168696] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:00:41.079 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:41.080 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:00:48.114 [DEBUG] [Thread-168698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:00.903 [DEBUG] [Thread-168699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:03.163 [DEBUG] [Thread-168700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:01:08.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:01:08.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:01:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 0, 48), 0.12953, 99.0798, 0.0, 23.0062, 13.2347, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:01:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:00:48
2026-04-11T11:01:10.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:01:10.505 [DEBUG] [Thread-168701] [transport.py] [_log()] starting thread (client mode): 0xae52d900
2026-04-11T11:01:10.505 [DEBUG] [Thread-168701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:01:10.525 [DEBUG] [Thread-168701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:01:10.526 [INFO] [Thread-168701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] client lang: <none>
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] server lang: <none>
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] kex follows: False
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] Compression: none
2026-04-11T11:01:10.529 [DEBUG] [Thread-168701] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:01:10.546 [DEBUG] [Thread-168701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:01:10.547 [DEBUG] [Thread-168701] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:01:10.547 [DEBUG] [Thread-168701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:01:10.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:01:10.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:01:10.548 [DEBUG] [Thread-168701] [transport.py] [_log()] userauth is OK
2026-04-11T11:01:10.548 [DEBUG] [Thread-168701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:01:10.548 [DEBUG] [Thread-168701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:01:10.548 [DEBUG] [Thread-168701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:01:10.548 [DEBUG] [Thread-168701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:01:10.563 [INFO] [Thread-168701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:01:10.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:01:11.315 [DEBUG] [Thread-168701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:01:11.315 [DEBUG] [Thread-168701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:01:11.316 [DEBUG] [Thread-168701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:01:11.356 [DEBUG] [Thread-168701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:01:11.356 [DEBUG] [Thread-168701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:01:11.358 [DEBUG] [Thread-168701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:01:11.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:01:11.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:01:11.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:01:11.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:01:11.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:01:11.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:01:11.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:01:11.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:01:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:01:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.375467 -999.00  +12.70  18.22     97  +12.30 1 3 1 3 1   888    0 0.44 0.36 ----- 16.0 18.2 118.4 24.8 13.9 -0.5 14.0 -0.4 13.9 -0.7 14.1 -0.6
2026-04-11T11:01:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:01:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:01:11.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.375467
2026-04-11T11:01:11.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:01:11.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:01:11.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:01:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:01:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:01:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:00:48', tmtdew=0.12953, humidity=99.0798, cloud=0.0, wind=23.0062, temperature=13.2347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:00:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:01:11.381 [DEBUG] [Thread-168701] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:01:11.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:01:11.477 [DEBUG] [Thread-168704] [transport.py] [_log()] starting thread (client mode): 0xae5143d0
2026-04-11T11:01:11.477 [DEBUG] [Thread-168704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:01:11.492 [DEBUG] [Thread-168704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:01:11.492 [INFO] [Thread-168704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:01:11.501 [DEBUG] [Thread-168704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] client lang: <none>
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] server lang: <none>
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] kex follows: False
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:01:11.502 [DEBUG] [Thread-168704] [transport.py] [_log()] Compression: none
2026-04-11T11:01:11.503 [DEBUG] [Thread-168704] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:01:11.557 [DEBUG] [Thread-168704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:01:11.558 [DEBUG] [Thread-168704] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:01:11.558 [DEBUG] [Thread-168704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:01:11.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:01:11.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:01:11.614 [DEBUG] [Thread-168704] [transport.py] [_log()] userauth is OK
2026-04-11T11:01:11.614 [DEBUG] [Thread-168704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:01:11.614 [DEBUG] [Thread-168704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:01:11.614 [DEBUG] [Thread-168704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:01:11.614 [DEBUG] [Thread-168704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:01:11.636 [INFO] [Thread-168704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:01:11.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:01:11.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:01:12.476 [DEBUG] [Thread-168704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:01:12.476 [DEBUG] [Thread-168704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:01:12.524 [DEBUG] [Thread-168704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:01:12.524 [DEBUG] [Thread-168704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:01:12.533 [DEBUG] [Thread-168704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:01:12.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:01:12.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-04-11T11:01:12.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:01:12.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:01:12.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:01:12.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:01:12.569 [DEBUG] [Thread-168704] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:01:18.201 [DEBUG] [Thread-168706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:33.254 [DEBUG] [Thread-168707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:41.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:41.227 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:01:42.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:01:42.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:01:42.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:01:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 1, 23), 0.059655, 99.5731, 0.0, 15.7212, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:01:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:01:23
2026-04-11T11:01:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:01:44.402 [DEBUG] [Thread-168708] [transport.py] [_log()] starting thread (client mode): 0xae52cdc0
2026-04-11T11:01:44.402 [DEBUG] [Thread-168708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:01:44.423 [DEBUG] [Thread-168708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:01:44.423 [INFO] [Thread-168708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] client lang: <none>
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] server lang: <none>
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] kex follows: False
2026-04-11T11:01:44.426 [DEBUG] [Thread-168708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:01:44.427 [DEBUG] [Thread-168708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:01:44.427 [DEBUG] [Thread-168708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:01:44.427 [DEBUG] [Thread-168708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:01:44.427 [DEBUG] [Thread-168708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:01:44.427 [DEBUG] [Thread-168708] [transport.py] [_log()] Compression: none
2026-04-11T11:01:44.427 [DEBUG] [Thread-168708] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:01:44.444 [DEBUG] [Thread-168708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:01:44.445 [DEBUG] [Thread-168708] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:01:44.445 [DEBUG] [Thread-168708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:01:44.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:01:44.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:01:44.448 [DEBUG] [Thread-168708] [transport.py] [_log()] userauth is OK
2026-04-11T11:01:44.448 [DEBUG] [Thread-168708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:01:44.448 [DEBUG] [Thread-168708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:01:44.448 [DEBUG] [Thread-168708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:01:44.448 [DEBUG] [Thread-168708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:01:44.482 [INFO] [Thread-168708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:01:44.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:01:45.265 [DEBUG] [Thread-168708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:01:45.265 [DEBUG] [Thread-168708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:01:45.266 [DEBUG] [Thread-168708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:01:45.306 [DEBUG] [Thread-168708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:01:45.306 [DEBUG] [Thread-168708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:01:45.310 [DEBUG] [Thread-168708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:01:45.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:01:45.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:01:45.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:01:45.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:01:45.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:01:45.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:01:45.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:01:45.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:01:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:01:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.375815 -999.00  +12.70  15.62     97  +12.30 1 3 1 3 1   888    0 0.44 0.37 ----- 14.2 15.6 114.8 22.1 13.8 -0.6 14.0 -0.4 13.8 -0.7 14.1 -0.5
2026-04-11T11:01:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:01:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:01:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.375815
2026-04-11T11:01:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:01:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:01:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:01:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:01:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:01:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:01:23', tmtdew=0.059655, humidity=99.5731, cloud=0.0, wind=15.7212, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:01:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:01:45.336 [DEBUG] [Thread-168708] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:01:45.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:01:45.432 [DEBUG] [Thread-168711] [transport.py] [_log()] starting thread (client mode): 0xb0f8e440
2026-04-11T11:01:45.432 [DEBUG] [Thread-168711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:01:45.446 [DEBUG] [Thread-168711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:01:45.447 [INFO] [Thread-168711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:01:45.454 [DEBUG] [Thread-168711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:01:45.455 [DEBUG] [Thread-168711] [transport.py] [_log()] client lang: <none>
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] server lang: <none>
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] kex follows: False
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:01:45.456 [DEBUG] [Thread-168711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:01:45.457 [DEBUG] [Thread-168711] [transport.py] [_log()] Compression: none
2026-04-11T11:01:45.457 [DEBUG] [Thread-168711] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:01:45.515 [DEBUG] [Thread-168711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:01:45.515 [DEBUG] [Thread-168711] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:01:45.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:01:45.516 [DEBUG] [Thread-168711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:01:45.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:01:45.575 [DEBUG] [Thread-168711] [transport.py] [_log()] userauth is OK
2026-04-11T11:01:45.575 [DEBUG] [Thread-168711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:01:45.575 [DEBUG] [Thread-168711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:01:45.575 [DEBUG] [Thread-168711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:01:45.575 [DEBUG] [Thread-168711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:01:45.594 [INFO] [Thread-168711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:01:45.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:01:45.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:01:46.419 [DEBUG] [Thread-168711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:01:46.420 [DEBUG] [Thread-168711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:01:46.467 [DEBUG] [Thread-168711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:01:46.468 [DEBUG] [Thread-168711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:01:46.477 [DEBUG] [Thread-168711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:01:46.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:01:46.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-04-11T11:01:46.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-04-11T11:01:46.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:01:46.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:01:46.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:01:46.515 [DEBUG] [Thread-168711] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:01:48.294 [DEBUG] [Thread-168713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:00.937 [DEBUG] [Thread-168714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:03.350 [DEBUG] [Thread-168715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:16.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:02:16.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:02:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:02:17.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 1, 59), 0.10709, 99.5897, 0.0, 14.1865, 12.9337, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:02:17.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:01:59
2026-04-11T11:02:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:02:18.318 [DEBUG] [Thread-168716] [transport.py] [_log()] starting thread (client mode): 0xa795ea10
2026-04-11T11:02:18.318 [DEBUG] [Thread-168716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:02:18.339 [DEBUG] [Thread-168716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:02:18.339 [INFO] [Thread-168716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] client lang: <none>
2026-04-11T11:02:18.343 [DEBUG] [Thread-168716] [transport.py] [_log()] server lang: <none>
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] kex follows: False
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] Compression: none
2026-04-11T11:02:18.344 [DEBUG] [Thread-168716] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:02:18.364 [DEBUG] [Thread-168716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:02:18.365 [DEBUG] [Thread-168716] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:02:18.365 [DEBUG] [Thread-168716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:02:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:02:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:02:18.367 [DEBUG] [Thread-168716] [transport.py] [_log()] userauth is OK
2026-04-11T11:02:18.368 [DEBUG] [Thread-168716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:02:18.368 [DEBUG] [Thread-168716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:02:18.368 [DEBUG] [Thread-168716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:02:18.368 [DEBUG] [Thread-168716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:02:18.387 [DEBUG] [Thread-168718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:18.390 [INFO] [Thread-168716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:02:18.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:02:19.161 [DEBUG] [Thread-168716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:02:19.162 [DEBUG] [Thread-168716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:02:19.162 [DEBUG] [Thread-168716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:02:19.202 [DEBUG] [Thread-168716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:02:19.202 [DEBUG] [Thread-168716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:02:19.206 [DEBUG] [Thread-168716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:02:19.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:02:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:02:19.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:02:19.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:02:19.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:02:19.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:02:19.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:02:19.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:02:19.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:02:19.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.376162 -999.00  +12.70  14.00     97  +12.30 1 3 1 3 1   888    0 0.44 0.15 ----- 11.3 14.0 74.0 19.8 13.8 -0.3 14.0 -0.4 13.9 -0.6 14.1 -0.5
2026-04-11T11:02:19.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:02:19.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:02:19.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.376162
2026-04-11T11:02:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:02:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:02:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:02:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:02:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:02:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:01:59', tmtdew=0.10709, humidity=99.5897, cloud=0.0, wind=14.1865, temperature=12.9337, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:01:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:02:19.235 [DEBUG] [Thread-168716] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:02:19.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:02:19.329 [DEBUG] [Thread-168720] [transport.py] [_log()] starting thread (client mode): 0xae5157e0
2026-04-11T11:02:19.329 [DEBUG] [Thread-168720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:02:19.343 [DEBUG] [Thread-168720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:02:19.343 [INFO] [Thread-168720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:02:19.351 [DEBUG] [Thread-168720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:02:19.351 [DEBUG] [Thread-168720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] client lang: <none>
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] server lang: <none>
2026-04-11T11:02:19.352 [DEBUG] [Thread-168720] [transport.py] [_log()] kex follows: False
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] Compression: none
2026-04-11T11:02:19.353 [DEBUG] [Thread-168720] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:02:19.411 [DEBUG] [Thread-168720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:02:19.412 [DEBUG] [Thread-168720] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:02:19.412 [DEBUG] [Thread-168720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:02:19.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:02:19.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:02:19.471 [DEBUG] [Thread-168720] [transport.py] [_log()] userauth is OK
2026-04-11T11:02:19.471 [DEBUG] [Thread-168720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:02:19.471 [DEBUG] [Thread-168720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:02:19.471 [DEBUG] [Thread-168720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:02:19.471 [DEBUG] [Thread-168720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:02:19.490 [INFO] [Thread-168720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:02:19.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:02:19.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:02:20.324 [DEBUG] [Thread-168720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:02:20.324 [DEBUG] [Thread-168720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:02:20.372 [DEBUG] [Thread-168720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:02:20.373 [DEBUG] [Thread-168720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:02:20.382 [DEBUG] [Thread-168720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:02:20.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:02:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:02:20.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:02:20.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:02:20.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:02:20.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:02:20.421 [DEBUG] [Thread-168720] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:02:33.422 [DEBUG] [Thread-168722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:41.369 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:41.370 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:48.482 [DEBUG] [Thread-168723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:02:50.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:02:50.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:02:50.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:02:51.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 2, 34), 0.10906, 99.2125, 0.0, 19.1254, 13.3342, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:02:51.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:02:34
2026-04-11T11:02:52.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:02:52.287 [DEBUG] [Thread-168724] [transport.py] [_log()] starting thread (client mode): 0xae5a4e80
2026-04-11T11:02:52.287 [DEBUG] [Thread-168724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:02:52.310 [DEBUG] [Thread-168724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:02:52.310 [INFO] [Thread-168724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:52.311 [DEBUG] [Thread-168724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] client lang: <none>
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] server lang: <none>
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] kex follows: False
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] Compression: none
2026-04-11T11:02:52.312 [DEBUG] [Thread-168724] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:02:52.331 [DEBUG] [Thread-168724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:02:52.332 [DEBUG] [Thread-168724] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:02:52.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:02:52.333 [DEBUG] [Thread-168724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:02:52.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:02:52.337 [DEBUG] [Thread-168724] [transport.py] [_log()] userauth is OK
2026-04-11T11:02:52.337 [DEBUG] [Thread-168724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:02:52.337 [DEBUG] [Thread-168724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:02:52.337 [DEBUG] [Thread-168724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:02:52.337 [DEBUG] [Thread-168724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:02:52.363 [INFO] [Thread-168724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:02:52.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:02:53.108 [DEBUG] [Thread-168724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:02:53.108 [DEBUG] [Thread-168724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:02:53.109 [DEBUG] [Thread-168724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:02:53.150 [DEBUG] [Thread-168724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:02:53.150 [DEBUG] [Thread-168724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:02:53.156 [DEBUG] [Thread-168724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:02:53.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:02:53.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:02:53.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:02:53.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:02:53.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:02:53.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:02:53.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:02:53.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:02:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:02:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.376509 -999.00  +12.70  13.20     97  +12.30 1 3 1 3 1   888    0 0.42 -0.15 ----- 15.1 13.2 106.0 18.6 13.8 -0.7 13.9 -0.3 13.9 -0.5 14.1 -0.5
2026-04-11T11:02:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:02:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:02:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.376509
2026-04-11T11:02:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:02:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:02:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:02:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:02:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:02:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:02:34', tmtdew=0.10906, humidity=99.2125, cloud=0.0, wind=19.1254, temperature=13.3342, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:02:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:02:53.195 [DEBUG] [Thread-168724] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:02:53.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:02:53.288 [DEBUG] [Thread-168727] [transport.py] [_log()] starting thread (client mode): 0xb0fb6e30
2026-04-11T11:02:53.288 [DEBUG] [Thread-168727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:02:53.304 [DEBUG] [Thread-168727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:02:53.304 [INFO] [Thread-168727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:02:53.312 [DEBUG] [Thread-168727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:02:53.321 [DEBUG] [Thread-168727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:02:53.321 [DEBUG] [Thread-168727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:02:53.321 [DEBUG] [Thread-168727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:53.321 [DEBUG] [Thread-168727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] client lang: <none>
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] server lang: <none>
2026-04-11T11:02:53.322 [DEBUG] [Thread-168727] [transport.py] [_log()] kex follows: False
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] Compression: none
2026-04-11T11:02:53.323 [DEBUG] [Thread-168727] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:02:53.375 [DEBUG] [Thread-168727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:02:53.376 [DEBUG] [Thread-168727] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:02:53.376 [DEBUG] [Thread-168727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:02:53.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:02:53.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:02:53.435 [DEBUG] [Thread-168727] [transport.py] [_log()] userauth is OK
2026-04-11T11:02:53.436 [DEBUG] [Thread-168727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:02:53.436 [DEBUG] [Thread-168727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:02:53.436 [DEBUG] [Thread-168727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:02:53.436 [DEBUG] [Thread-168727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:02:53.461 [INFO] [Thread-168727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:02:53.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:02:53.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:02:54.355 [DEBUG] [Thread-168727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:02:54.356 [DEBUG] [Thread-168727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:02:54.403 [DEBUG] [Thread-168727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:02:54.403 [DEBUG] [Thread-168727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:02:54.411 [DEBUG] [Thread-168727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:02:54.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:02:54.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:02:54.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:02:54.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:02:54.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:02:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:02:54.443 [DEBUG] [Thread-168727] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:03:00.992 [DEBUG] [Thread-168729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:03.524 [DEBUG] [Thread-168730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:18.572 [DEBUG] [Thread-168731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:03:24.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:03:24.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-04-11T11:03:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 3, 10), 0.107095, 99.5897, 0.0, 17.7145, 12.9502, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:03:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:03:10
2026-04-11T11:03:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:03:26.264 [DEBUG] [Thread-168732] [transport.py] [_log()] starting thread (client mode): 0xa79b4f70
2026-04-11T11:03:26.265 [DEBUG] [Thread-168732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:03:26.287 [DEBUG] [Thread-168732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:03:26.288 [INFO] [Thread-168732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:03:26.291 [DEBUG] [Thread-168732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:03:26.291 [DEBUG] [Thread-168732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:03:26.291 [DEBUG] [Thread-168732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:03:26.291 [DEBUG] [Thread-168732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:03:26.291 [DEBUG] [Thread-168732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:03:26.291 [DEBUG] [Thread-168732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] client lang: <none>
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] server lang: <none>
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] kex follows: False
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] Compression: none
2026-04-11T11:03:26.292 [DEBUG] [Thread-168732] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:03:26.310 [DEBUG] [Thread-168732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:03:26.311 [DEBUG] [Thread-168732] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:03:26.311 [DEBUG] [Thread-168732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:03:26.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:03:26.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:03:26.313 [DEBUG] [Thread-168732] [transport.py] [_log()] userauth is OK
2026-04-11T11:03:26.314 [DEBUG] [Thread-168732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:03:26.314 [DEBUG] [Thread-168732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:03:26.314 [DEBUG] [Thread-168732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:03:26.314 [DEBUG] [Thread-168732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:03:26.351 [INFO] [Thread-168732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:03:26.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:03:27.137 [DEBUG] [Thread-168732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:03:27.137 [DEBUG] [Thread-168732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:03:27.137 [DEBUG] [Thread-168732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:03:27.178 [DEBUG] [Thread-168732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:03:27.178 [DEBUG] [Thread-168732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:03:27.182 [DEBUG] [Thread-168732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:03:27.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:03:27.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:03:27.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:03:27.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:03:27.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:03:27.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:03:27.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:03:27.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:03:27.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:03:27.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.376856 -999.00  +12.70  16.45     97  +12.20 1 3 1 3 1   888    0 0.43 -0.22 ----- 16.9 16.4 112.9 22.8 13.8 -0.7 13.9 -0.4 13.9 -0.5 14.1 -0.5
2026-04-11T11:03:27.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:03:27.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:03:27.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.376856
2026-04-11T11:03:27.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:03:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:03:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:03:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:03:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:03:27.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:03:10', tmtdew=0.107095, humidity=99.5897, cloud=0.0, wind=17.7145, temperature=12.9502, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:02:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:03:27.209 [DEBUG] [Thread-168732] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:03:27.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:03:27.301 [DEBUG] [Thread-168735] [transport.py] [_log()] starting thread (client mode): 0xa791f2b0
2026-04-11T11:03:27.301 [DEBUG] [Thread-168735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:03:27.316 [DEBUG] [Thread-168735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:03:27.317 [INFO] [Thread-168735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:03:27.324 [DEBUG] [Thread-168735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:03:27.324 [DEBUG] [Thread-168735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:03:27.324 [DEBUG] [Thread-168735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:03:27.324 [DEBUG] [Thread-168735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:03:27.324 [DEBUG] [Thread-168735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] client lang: <none>
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] server lang: <none>
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] kex follows: False
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] Compression: none
2026-04-11T11:03:27.325 [DEBUG] [Thread-168735] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:03:27.383 [DEBUG] [Thread-168735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:03:27.383 [DEBUG] [Thread-168735] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:03:27.384 [DEBUG] [Thread-168735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:03:27.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:03:27.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:03:27.439 [DEBUG] [Thread-168735] [transport.py] [_log()] userauth is OK
2026-04-11T11:03:27.439 [DEBUG] [Thread-168735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:03:27.439 [DEBUG] [Thread-168735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:03:27.439 [DEBUG] [Thread-168735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:03:27.439 [DEBUG] [Thread-168735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:03:27.458 [INFO] [Thread-168735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:03:27.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:03:27.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:03:28.341 [DEBUG] [Thread-168735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:03:28.342 [DEBUG] [Thread-168735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:03:28.391 [DEBUG] [Thread-168735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:03:28.391 [DEBUG] [Thread-168735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:03:28.401 [DEBUG] [Thread-168735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:03:28.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:03: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-04-11T11:03:28.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:03:28.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:03:28.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:03:28.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:03:28.438 [DEBUG] [Thread-168735] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:03:33.606 [DEBUG] [Thread-168737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:41.510 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:41.511 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:48.669 [DEBUG] [Thread-168738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:03:58.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:03:58.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:03:58.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-04-11T11:03:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 3, 45), 0.12955, 99.0798, 0.0, 21.5244, 13.2678, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:03:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:03:45
2026-04-11T11:04:00.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:04:00.263 [DEBUG] [Thread-168739] [transport.py] [_log()] starting thread (client mode): 0xae5e6410
2026-04-11T11:04:00.264 [DEBUG] [Thread-168739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:04:00.278 [DEBUG] [Thread-168739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:04:00.278 [INFO] [Thread-168739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] client lang: <none>
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] server lang: <none>
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] kex follows: False
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:04:00.282 [DEBUG] [Thread-168739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:04:00.283 [DEBUG] [Thread-168739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:04:00.283 [DEBUG] [Thread-168739] [transport.py] [_log()] Compression: none
2026-04-11T11:04:00.283 [DEBUG] [Thread-168739] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:04:00.301 [DEBUG] [Thread-168739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:04:00.302 [DEBUG] [Thread-168739] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:04:00.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:04:00.304 [DEBUG] [Thread-168739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:04:00.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:04:00.306 [DEBUG] [Thread-168739] [transport.py] [_log()] userauth is OK
2026-04-11T11:04:00.307 [DEBUG] [Thread-168739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:04:00.307 [DEBUG] [Thread-168739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:04:00.307 [DEBUG] [Thread-168739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:04:00.307 [DEBUG] [Thread-168739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:04:00.332 [INFO] [Thread-168739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:04:00.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:04:01.043 [DEBUG] [Thread-168741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:04:01.116 [DEBUG] [Thread-168739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:04:01.116 [DEBUG] [Thread-168739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:04:01.117 [DEBUG] [Thread-168739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:04:01.157 [DEBUG] [Thread-168739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:04:01.158 [DEBUG] [Thread-168739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:04:01.162 [DEBUG] [Thread-168739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:04:01.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:04:01.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:04:01.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:04:01.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:04:01.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:04:01.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:04:01.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:04:01.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:04:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:04:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.377203 -999.00  +12.70  13.36     97  +12.20 1 3 1 3 1   888    0 0.44 0.24 ----- 15.8 13.4 84.1 22.5 13.7 -0.9 13.9 -0.3 13.8 -0.6 14.1 -0.6
2026-04-11T11:04:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:04:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:04:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.377203
2026-04-11T11:04:01.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:04:01.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:04:01.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:04:01.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:04:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:04:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:03:45', tmtdew=0.12955, humidity=99.0798, cloud=0.0, wind=21.5244, temperature=13.2678, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:03:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:04:01.190 [DEBUG] [Thread-168739] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:04:01.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:04:01.284 [DEBUG] [Thread-168743] [transport.py] [_log()] starting thread (client mode): 0xb0fcc9a0
2026-04-11T11:04:01.284 [DEBUG] [Thread-168743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:04:01.299 [DEBUG] [Thread-168743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:04:01.300 [INFO] [Thread-168743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:04:01.307 [DEBUG] [Thread-168743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:04:01.307 [DEBUG] [Thread-168743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:04:01.307 [DEBUG] [Thread-168743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:04:01.307 [DEBUG] [Thread-168743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:01.307 [DEBUG] [Thread-168743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] client lang: <none>
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] server lang: <none>
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] kex follows: False
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] Compression: none
2026-04-11T11:04:01.308 [DEBUG] [Thread-168743] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:04:01.375 [DEBUG] [Thread-168743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:04:01.376 [DEBUG] [Thread-168743] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:04:01.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:04:01.377 [DEBUG] [Thread-168743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:04:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:04:01.434 [DEBUG] [Thread-168743] [transport.py] [_log()] userauth is OK
2026-04-11T11:04:01.435 [DEBUG] [Thread-168743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:04:01.437 [DEBUG] [Thread-168743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:04:01.437 [DEBUG] [Thread-168743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:04:01.437 [DEBUG] [Thread-168743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:04:01.454 [INFO] [Thread-168743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:04:01.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:04:01.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:04:02.385 [DEBUG] [Thread-168743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:04:02.385 [DEBUG] [Thread-168743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:04:02.433 [DEBUG] [Thread-168743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:04:02.433 [DEBUG] [Thread-168743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:04:02.443 [DEBUG] [Thread-168743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:04:02.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:04: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')
2026-04-11T11:04:02.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:04:02.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:04:02.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:04:02.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:04:02.480 [DEBUG] [Thread-168743] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:04:03.708 [DEBUG] [Thread-168745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:04:18.762 [DEBUG] [Thread-168746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:04:32.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:04:32.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:04:32.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-04-11T11:04:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 4, 20), 0.06221, 99.5565, 0.0, 17.591, 12.8673, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:04:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:04:20
2026-04-11T11:04:33.804 [DEBUG] [Thread-168747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:04:34.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:04:34.289 [DEBUG] [Thread-168748] [transport.py] [_log()] starting thread (client mode): 0xa791ef80
2026-04-11T11:04:34.289 [DEBUG] [Thread-168748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:04:34.309 [DEBUG] [Thread-168748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:04:34.310 [INFO] [Thread-168748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] client lang: <none>
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] server lang: <none>
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] kex follows: False
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] Compression: none
2026-04-11T11:04:34.313 [DEBUG] [Thread-168748] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:04:34.331 [DEBUG] [Thread-168748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:04:34.332 [DEBUG] [Thread-168748] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:04:34.332 [DEBUG] [Thread-168748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:04:34.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:04:34.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:04:34.334 [DEBUG] [Thread-168748] [transport.py] [_log()] userauth is OK
2026-04-11T11:04:34.335 [DEBUG] [Thread-168748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:04:34.335 [DEBUG] [Thread-168748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:04:34.335 [DEBUG] [Thread-168748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:04:34.335 [DEBUG] [Thread-168748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:04:34.374 [INFO] [Thread-168748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:04:34.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:04:35.169 [DEBUG] [Thread-168748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:04:35.169 [DEBUG] [Thread-168748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:04:35.170 [DEBUG] [Thread-168748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:04:35.211 [DEBUG] [Thread-168748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:04:35.211 [DEBUG] [Thread-168748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:04:35.214 [DEBUG] [Thread-168748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:04:35.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:04:35.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:04:35.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:04:35.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:04:35.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:04:35.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:04:35.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:04:35.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.377898 -999.00  +12.70  16.29     97  +12.20 1 3 1 3 1   888    0 0.44 0.06 ----- 13.9 16.3 116.0 18.8 13.7 -0.2 13.8 -0.4 13.8 -0.5 14.0 -0.5
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.377898
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:04:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:04:20', tmtdew=0.06221, humidity=99.5565, cloud=0.0, wind=17.591, temperature=12.8673, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:04:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:04:35.237 [DEBUG] [Thread-168748] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:04:35.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:04:35.318 [DEBUG] [Thread-168751] [transport.py] [_log()] starting thread (client mode): 0xa791e410
2026-04-11T11:04:35.318 [DEBUG] [Thread-168751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:04:35.333 [DEBUG] [Thread-168751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:04:35.334 [INFO] [Thread-168751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:04:35.341 [DEBUG] [Thread-168751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:04:35.341 [DEBUG] [Thread-168751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] client lang: <none>
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] server lang: <none>
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] kex follows: False
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:04:35.342 [DEBUG] [Thread-168751] [transport.py] [_log()] Compression: none
2026-04-11T11:04:35.343 [DEBUG] [Thread-168751] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:04:35.399 [DEBUG] [Thread-168751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:04:35.399 [DEBUG] [Thread-168751] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:04:35.400 [DEBUG] [Thread-168751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:04:35.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:04:35.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:04:35.455 [DEBUG] [Thread-168751] [transport.py] [_log()] userauth is OK
2026-04-11T11:04:35.455 [DEBUG] [Thread-168751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:04:35.455 [DEBUG] [Thread-168751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:04:35.455 [DEBUG] [Thread-168751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:04:35.455 [DEBUG] [Thread-168751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:04:35.474 [INFO] [Thread-168751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:04:35.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:04:35.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:04:36.392 [DEBUG] [Thread-168751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:04:36.392 [DEBUG] [Thread-168751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:04:36.440 [DEBUG] [Thread-168751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:04:36.441 [DEBUG] [Thread-168751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:04:36.450 [DEBUG] [Thread-168751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:04:36.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:04:36.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:04:36.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-04-11T11:04:36.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:04:36.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:04:36.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:04:36.487 [DEBUG] [Thread-168751] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:04:41.655 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:04:41.656 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:04:48.843 [DEBUG] [Thread-168753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:01.082 [DEBUG] [Thread-168754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:03.898 [DEBUG] [Thread-168755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:05:06.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:05: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-04-11T11:05:07.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 4, 56), 0.117265, 99.5237, 0.0, 16.9207, 12.7844, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:05:07.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:04:56
2026-04-11T11:05:08.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:05:08.336 [DEBUG] [Thread-168756] [transport.py] [_log()] starting thread (client mode): 0xa79508b0
2026-04-11T11:05:08.336 [DEBUG] [Thread-168756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:05:08.361 [DEBUG] [Thread-168756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:05:08.361 [INFO] [Thread-168756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:05:08.364 [DEBUG] [Thread-168756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:05:08.364 [DEBUG] [Thread-168756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] client lang: <none>
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] server lang: <none>
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] kex follows: False
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] Compression: none
2026-04-11T11:05:08.365 [DEBUG] [Thread-168756] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:05:08.382 [DEBUG] [Thread-168756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:05:08.383 [DEBUG] [Thread-168756] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:05:08.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:05:08.384 [DEBUG] [Thread-168756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:05:08.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:05:08.386 [DEBUG] [Thread-168756] [transport.py] [_log()] userauth is OK
2026-04-11T11:05:08.386 [DEBUG] [Thread-168756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:05:08.386 [DEBUG] [Thread-168756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:05:08.387 [DEBUG] [Thread-168756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:05:08.387 [DEBUG] [Thread-168756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:05:08.412 [INFO] [Thread-168756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:05:08.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:05:09.646 [DEBUG] [Thread-168756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:05:09.646 [DEBUG] [Thread-168756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:05:09.647 [DEBUG] [Thread-168756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:05:09.687 [DEBUG] [Thread-168756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:05:09.688 [DEBUG] [Thread-168756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:05:09.691 [DEBUG] [Thread-168756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:05:09.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:05:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:05:09.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:05:09.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:05:09.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:05:09.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:05:09.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:05:09.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:05:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:05:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.378245 -999.00  +12.70  18.99     97  +12.20 1 3 1 3 1   888    0 0.44 0.19 ----- 14.8 19.0 123.8 25.9 13.7 -0.5 13.9 -0.2 13.8 -0.3 14.1 -0.5
2026-04-11T11:05:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:05:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:05:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.378245
2026-04-11T11:05:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:05:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:05:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:05:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:05:09.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:05:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:04:56', tmtdew=0.117265, humidity=99.5237, cloud=0.0, wind=16.9207, temperature=12.7844, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:04:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:05:09.723 [DEBUG] [Thread-168756] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:05:09.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:05:09.815 [DEBUG] [Thread-168759] [transport.py] [_log()] starting thread (client mode): 0xa7953910
2026-04-11T11:05:09.815 [DEBUG] [Thread-168759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:05:09.829 [DEBUG] [Thread-168759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:05:09.829 [INFO] [Thread-168759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] client lang: <none>
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] server lang: <none>
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] kex follows: False
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:05:09.837 [DEBUG] [Thread-168759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:05:09.838 [DEBUG] [Thread-168759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:05:09.838 [DEBUG] [Thread-168759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:05:09.838 [DEBUG] [Thread-168759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:05:09.838 [DEBUG] [Thread-168759] [transport.py] [_log()] Compression: none
2026-04-11T11:05:09.838 [DEBUG] [Thread-168759] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:05:09.893 [DEBUG] [Thread-168759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:05:09.894 [DEBUG] [Thread-168759] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:05:09.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:05:09.895 [DEBUG] [Thread-168759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:05:09.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:05:09.955 [DEBUG] [Thread-168759] [transport.py] [_log()] userauth is OK
2026-04-11T11:05:09.955 [DEBUG] [Thread-168759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:05:09.955 [DEBUG] [Thread-168759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:05:09.955 [DEBUG] [Thread-168759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:05:09.955 [DEBUG] [Thread-168759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:05:09.974 [INFO] [Thread-168759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:05:09.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:05:09.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:05:10.776 [DEBUG] [Thread-168759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:05:10.777 [DEBUG] [Thread-168759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:05:10.824 [DEBUG] [Thread-168759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:05:10.824 [DEBUG] [Thread-168759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:05:10.833 [DEBUG] [Thread-168759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:05:10.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:05:10.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-04-11T11:05:10.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:05:10.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:05:10.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:05:10.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:05:10.869 [DEBUG] [Thread-168759] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:05:18.936 [DEBUG] [Thread-168761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:33.993 [DEBUG] [Thread-168762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:40.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:05:40.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:05:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:05:41.796 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:41.797 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:05:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 5, 32), 0.114725, 99.5402, 0.0, 18.2614, 12.8341, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:05:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:05:32
2026-04-11T11:05:42.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:05:42.721 [DEBUG] [Thread-168763] [transport.py] [_log()] starting thread (client mode): 0xb0f6f8e0
2026-04-11T11:05:42.721 [DEBUG] [Thread-168763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:05:42.744 [DEBUG] [Thread-168763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:05:42.744 [INFO] [Thread-168763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] client lang: <none>
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] server lang: <none>
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] kex follows: False
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:05:42.748 [DEBUG] [Thread-168763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:05:42.749 [DEBUG] [Thread-168763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:05:42.749 [DEBUG] [Thread-168763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:05:42.749 [DEBUG] [Thread-168763] [transport.py] [_log()] Compression: none
2026-04-11T11:05:42.749 [DEBUG] [Thread-168763] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:05:42.770 [DEBUG] [Thread-168763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:05:42.770 [DEBUG] [Thread-168763] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:05:42.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:05:42.771 [DEBUG] [Thread-168763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:05:42.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:05:42.775 [DEBUG] [Thread-168763] [transport.py] [_log()] userauth is OK
2026-04-11T11:05:42.776 [DEBUG] [Thread-168763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:05:42.776 [DEBUG] [Thread-168763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:05:42.776 [DEBUG] [Thread-168763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:05:42.776 [DEBUG] [Thread-168763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:05:42.812 [INFO] [Thread-168763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:05:42.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:05:43.622 [DEBUG] [Thread-168763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:05:43.623 [DEBUG] [Thread-168763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:05:43.623 [DEBUG] [Thread-168763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:05:43.667 [DEBUG] [Thread-168763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:05:43.667 [DEBUG] [Thread-168763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:05:43.674 [DEBUG] [Thread-168763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:05:43.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:05:43.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:05:43.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:05:43.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:05:43.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:05:43.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:05:43.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:05:43.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:05:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:05:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.378592 -999.00  +12.70  13.66     97  +12.30 1 3 1 3 1   888    0 0.45 0.23 ----- 13.4 13.7 133.6 19.1 13.8 -0.4 13.9 -0.2 13.8 -0.4 14.0 -0.5
2026-04-11T11:05:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:05:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:05:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.378592
2026-04-11T11:05:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:05:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:05:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:05:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:05:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:05:43.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:05:32', tmtdew=0.114725, humidity=99.5402, cloud=0.0, wind=18.2614, temperature=12.8341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:05:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:05:43.728 [DEBUG] [Thread-168763] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:05:43.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:05:43.821 [DEBUG] [Thread-168766] [transport.py] [_log()] starting thread (client mode): 0xa791c850
2026-04-11T11:05:43.821 [DEBUG] [Thread-168766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:05:43.837 [DEBUG] [Thread-168766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:05:43.837 [INFO] [Thread-168766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] client lang: <none>
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] server lang: <none>
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] kex follows: False
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:05:43.845 [DEBUG] [Thread-168766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:05:43.846 [DEBUG] [Thread-168766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:05:43.846 [DEBUG] [Thread-168766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:05:43.846 [DEBUG] [Thread-168766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:05:43.846 [DEBUG] [Thread-168766] [transport.py] [_log()] Compression: none
2026-04-11T11:05:43.846 [DEBUG] [Thread-168766] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:05:43.903 [DEBUG] [Thread-168766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:05:43.904 [DEBUG] [Thread-168766] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:05:43.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:05:43.905 [DEBUG] [Thread-168766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:05:43.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:05:43.965 [DEBUG] [Thread-168766] [transport.py] [_log()] userauth is OK
2026-04-11T11:05:43.965 [DEBUG] [Thread-168766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:05:43.965 [DEBUG] [Thread-168766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:05:43.965 [DEBUG] [Thread-168766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:05:43.965 [DEBUG] [Thread-168766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:05:43.985 [INFO] [Thread-168766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:05:43.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:05:43.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:05:44.805 [DEBUG] [Thread-168766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:05:44.806 [DEBUG] [Thread-168766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:05:44.854 [DEBUG] [Thread-168766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:05:44.855 [DEBUG] [Thread-168766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:05:44.864 [DEBUG] [Thread-168766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:05:44.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:05:44.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-04-11T11:05:44.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-04-11T11:05:44.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:05:44.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:05:44.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:05:44.909 [DEBUG] [Thread-168766] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:05:49.031 [DEBUG] [Thread-168768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:01.116 [DEBUG] [Thread-168769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:04.091 [DEBUG] [Thread-168770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:14.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:06:14.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:06:14.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-04-11T11:06:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 6, 7), 0.112165, 99.5568, 0.0, 17.6969, 12.8341, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:06:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:06:07
2026-04-11T11:06:16.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:06:16.757 [DEBUG] [Thread-168771] [transport.py] [_log()] starting thread (client mode): 0xae51b550
2026-04-11T11:06:16.757 [DEBUG] [Thread-168771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:06:16.778 [DEBUG] [Thread-168771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:06:16.779 [INFO] [Thread-168771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] client lang: <none>
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] server lang: <none>
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] kex follows: False
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:06:16.782 [DEBUG] [Thread-168771] [transport.py] [_log()] Compression: none
2026-04-11T11:06:16.783 [DEBUG] [Thread-168771] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:06:16.800 [DEBUG] [Thread-168771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:06:16.801 [DEBUG] [Thread-168771] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:06:16.801 [DEBUG] [Thread-168771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:06:16.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:06:16.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:06:16.804 [DEBUG] [Thread-168771] [transport.py] [_log()] userauth is OK
2026-04-11T11:06:16.804 [DEBUG] [Thread-168771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:06:16.805 [DEBUG] [Thread-168771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:06:16.805 [DEBUG] [Thread-168771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:06:16.805 [DEBUG] [Thread-168771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:06:16.829 [INFO] [Thread-168771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:06:16.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:06:17.670 [DEBUG] [Thread-168771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:06:17.671 [DEBUG] [Thread-168771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:06:17.671 [DEBUG] [Thread-168771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:06:17.713 [DEBUG] [Thread-168771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:06:17.713 [DEBUG] [Thread-168771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:06:17.715 [DEBUG] [Thread-168771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:06:17.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:06:17.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:06:17.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:06:17.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:06:17.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:06:17.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:06:17.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:06:17.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:06:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:06:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.378940 -999.00  +12.70  13.24     97  +12.20 1 3 1 3 1   888    0 0.45 0.20 ----- 13.9 13.2 107.0 17.8 13.8 -0.7 13.9 -0.3 13.8 -0.3 14.0 -0.5
2026-04-11T11:06:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:06:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:06:17.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.378940
2026-04-11T11:06:17.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:06:17.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:06:17.742 [DEBUG] [Thread-168771] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:06:17.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:06:17.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:06:17.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:06:17.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:06:07', tmtdew=0.112165, humidity=99.5568, cloud=0.0, wind=17.6969, temperature=12.8341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:05:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:06:17.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:06:17.844 [DEBUG] [Thread-168774] [transport.py] [_log()] starting thread (client mode): 0xb0f6ec80
2026-04-11T11:06:17.844 [DEBUG] [Thread-168774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:06:17.859 [DEBUG] [Thread-168774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:06:17.859 [INFO] [Thread-168774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] client lang: <none>
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] server lang: <none>
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] kex follows: False
2026-04-11T11:06:17.867 [DEBUG] [Thread-168774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:06:17.868 [DEBUG] [Thread-168774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:06:17.868 [DEBUG] [Thread-168774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:06:17.868 [DEBUG] [Thread-168774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:06:17.868 [DEBUG] [Thread-168774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:06:17.868 [DEBUG] [Thread-168774] [transport.py] [_log()] Compression: none
2026-04-11T11:06:17.868 [DEBUG] [Thread-168774] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:06:17.927 [DEBUG] [Thread-168774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:06:17.928 [DEBUG] [Thread-168774] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:06:17.929 [DEBUG] [Thread-168774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:06:17.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:06:17.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:06:17.987 [DEBUG] [Thread-168774] [transport.py] [_log()] userauth is OK
2026-04-11T11:06:17.988 [DEBUG] [Thread-168774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:06:17.988 [DEBUG] [Thread-168774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:06:17.988 [DEBUG] [Thread-168774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:06:17.988 [DEBUG] [Thread-168774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:06:18.011 [INFO] [Thread-168774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:06:18.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:06:18.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:06:18.861 [DEBUG] [Thread-168774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:06:18.862 [DEBUG] [Thread-168774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:06:18.909 [DEBUG] [Thread-168774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:06:18.910 [DEBUG] [Thread-168774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:06:18.919 [DEBUG] [Thread-168774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:06:18.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:06:18.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-04-11T11:06:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:06:18.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:06:18.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:06:18.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:06:18.955 [DEBUG] [Thread-168774] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:06:19.124 [DEBUG] [Thread-168776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:34.178 [DEBUG] [Thread-168777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:41.938 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:41.940 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:48.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:06:48.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:06:48.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-04-11T11:06:49.215 [DEBUG] [Thread-168778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:06:50.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 6, 7), 0.112165, 99.5568, 0.0, 17.6969, 12.8341, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:06:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:06:07
2026-04-11T11:06:50.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:06:50.770 [DEBUG] [Thread-168779] [transport.py] [_log()] starting thread (client mode): 0xb0f6c5e0
2026-04-11T11:06:50.771 [DEBUG] [Thread-168779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:06:50.790 [DEBUG] [Thread-168779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:06:50.790 [INFO] [Thread-168779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:06:50.793 [DEBUG] [Thread-168779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] client lang: <none>
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] server lang: <none>
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] kex follows: False
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:06:50.794 [DEBUG] [Thread-168779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:06:50.795 [DEBUG] [Thread-168779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:06:50.795 [DEBUG] [Thread-168779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:06:50.795 [DEBUG] [Thread-168779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:06:50.795 [DEBUG] [Thread-168779] [transport.py] [_log()] Compression: none
2026-04-11T11:06:50.795 [DEBUG] [Thread-168779] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:06:50.815 [DEBUG] [Thread-168779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:06:50.816 [DEBUG] [Thread-168779] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:06:50.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:06:50.817 [DEBUG] [Thread-168779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:06:50.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:06:50.819 [DEBUG] [Thread-168779] [transport.py] [_log()] userauth is OK
2026-04-11T11:06:50.819 [DEBUG] [Thread-168779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:06:50.819 [DEBUG] [Thread-168779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:06:50.819 [DEBUG] [Thread-168779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:06:50.819 [DEBUG] [Thread-168779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:06:50.854 [INFO] [Thread-168779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:06:50.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:06:51.666 [DEBUG] [Thread-168779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:06:51.666 [DEBUG] [Thread-168779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:06:51.667 [DEBUG] [Thread-168779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:06:51.706 [DEBUG] [Thread-168779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:06:51.706 [DEBUG] [Thread-168779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:06:51.709 [DEBUG] [Thread-168779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:06:51.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:06:51.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:06:51.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:06:51.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:06:51.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:06:51.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:06:51.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:06:51.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:06:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:06:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.379287 -999.00  +12.70  17.12     97  +12.20 1 3 1 3 1   888    0 0.45 0.52 ----- 16.4 17.1 120.7 20.3 13.8 -0.7 13.9 -0.2 13.8 -0.5 14.0 -0.3
2026-04-11T11:06:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:06:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:06:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.379287
2026-04-11T11:06:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:06:51.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:06:51.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:06:51.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:06:51.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:06:51.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:06:07', tmtdew=0.112165, humidity=99.5568, cloud=0.0, wind=17.6969, temperature=12.8341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:06:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:06:51.731 [DEBUG] [Thread-168779] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:06:51.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:06:51.835 [DEBUG] [Thread-168782] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ae0
2026-04-11T11:06:51.836 [DEBUG] [Thread-168782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:06:51.851 [DEBUG] [Thread-168782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:06:51.851 [INFO] [Thread-168782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:06:51.858 [DEBUG] [Thread-168782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] client lang: <none>
2026-04-11T11:06:51.859 [DEBUG] [Thread-168782] [transport.py] [_log()] server lang: <none>
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] kex follows: False
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] Compression: none
2026-04-11T11:06:51.860 [DEBUG] [Thread-168782] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:06:51.919 [DEBUG] [Thread-168782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:06:51.920 [DEBUG] [Thread-168782] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:06:51.920 [DEBUG] [Thread-168782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:06:51.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:06:51.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:06:51.975 [DEBUG] [Thread-168782] [transport.py] [_log()] userauth is OK
2026-04-11T11:06:51.975 [DEBUG] [Thread-168782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:06:51.975 [DEBUG] [Thread-168782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:06:51.976 [DEBUG] [Thread-168782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:06:51.976 [DEBUG] [Thread-168782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:06:51.995 [INFO] [Thread-168782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:06:51.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:06:51.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:06:52.843 [DEBUG] [Thread-168782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:06:52.844 [DEBUG] [Thread-168782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:06:52.891 [DEBUG] [Thread-168782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:06:52.891 [DEBUG] [Thread-168782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:06:52.901 [DEBUG] [Thread-168782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:06:52.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:06:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:06: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-04-11T11:06:52.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:06:52.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:06:52.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:06:52.938 [DEBUG] [Thread-168782] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:07:01.144 [DEBUG] [Thread-168784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:04.252 [DEBUG] [Thread-168785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:19.315 [DEBUG] [Thread-168786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:22.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:07:22.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:07:22.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-04-11T11:07:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 6, 43), 0.1192, 99.1468, 0.0, 23.1826, 13.3014, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:07:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:06:43
2026-04-11T11:07:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:07:24.921 [DEBUG] [Thread-168787] [transport.py] [_log()] starting thread (client mode): 0xa7951ed0
2026-04-11T11:07:24.921 [DEBUG] [Thread-168787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:07:24.942 [DEBUG] [Thread-168787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:07:24.943 [INFO] [Thread-168787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:07:24.946 [DEBUG] [Thread-168787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] client lang: <none>
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] server lang: <none>
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] kex follows: False
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:07:24.947 [DEBUG] [Thread-168787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:07:24.948 [DEBUG] [Thread-168787] [transport.py] [_log()] Compression: none
2026-04-11T11:07:24.948 [DEBUG] [Thread-168787] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:07:24.968 [DEBUG] [Thread-168787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:07:24.969 [DEBUG] [Thread-168787] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:07:24.969 [DEBUG] [Thread-168787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:07:24.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:07:24.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:07:24.974 [DEBUG] [Thread-168787] [transport.py] [_log()] userauth is OK
2026-04-11T11:07:24.974 [DEBUG] [Thread-168787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:07:24.974 [DEBUG] [Thread-168787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:07:24.974 [DEBUG] [Thread-168787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:07:24.974 [DEBUG] [Thread-168787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:07:24.996 [INFO] [Thread-168787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:07:24.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:07:25.812 [DEBUG] [Thread-168787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:07:25.812 [DEBUG] [Thread-168787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:07:25.812 [DEBUG] [Thread-168787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:07:25.854 [DEBUG] [Thread-168787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:07:25.855 [DEBUG] [Thread-168787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:07:25.859 [DEBUG] [Thread-168787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:07:25.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:07:25.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:07:25.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:07:25.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:07:25.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:07:25.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:07:25.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:07:25.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:07:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:07:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.379634 -999.00  +12.70  13.36     97  +12.20 1 3 1 3 1   888    0 0.46 0.82 ----- 13.8 13.4 69.4 22.6 13.8 -0.5 13.9 -0.0 13.8 -0.3 14.0 -0.3
2026-04-11T11:07:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:07:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:07:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.379634
2026-04-11T11:07:25.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:07:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:07:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:07:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:07:25.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:07:25.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:06:43', tmtdew=0.1192, humidity=99.1468, cloud=0.0, wind=23.1826, temperature=13.3014, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:06:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:07:25.896 [DEBUG] [Thread-168787] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:07:25.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:07:25.988 [DEBUG] [Thread-168790] [transport.py] [_log()] starting thread (client mode): 0xae51beb0
2026-04-11T11:07:25.988 [DEBUG] [Thread-168790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:07:26.003 [DEBUG] [Thread-168790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:07:26.003 [INFO] [Thread-168790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:07:26.011 [DEBUG] [Thread-168790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:07:26.011 [DEBUG] [Thread-168790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:07:26.012 [DEBUG] [Thread-168790] [transport.py] [_log()] client lang: <none>
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] server lang: <none>
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] kex follows: False
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] Compression: none
2026-04-11T11:07:26.013 [DEBUG] [Thread-168790] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:07:26.072 [DEBUG] [Thread-168790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:07:26.073 [DEBUG] [Thread-168790] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:07:26.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:07:26.074 [DEBUG] [Thread-168790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:07:26.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:07:26.131 [DEBUG] [Thread-168790] [transport.py] [_log()] userauth is OK
2026-04-11T11:07:26.132 [DEBUG] [Thread-168790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:07:26.132 [DEBUG] [Thread-168790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:07:26.132 [DEBUG] [Thread-168790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:07:26.132 [DEBUG] [Thread-168790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:07:26.151 [INFO] [Thread-168790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:07:26.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:07:26.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:07:26.999 [DEBUG] [Thread-168790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:07:26.999 [DEBUG] [Thread-168790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:07:27.048 [DEBUG] [Thread-168790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:07:27.048 [DEBUG] [Thread-168790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:07:27.058 [DEBUG] [Thread-168790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:07:27.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:07:27.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-04-11T11:07:27.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:07:27.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:07:27.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:07:27.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:07:27.107 [DEBUG] [Thread-168790] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:07:34.353 [DEBUG] [Thread-168792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:42.080 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:42.081 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:49.403 [DEBUG] [Thread-168793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:07:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:07:57.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:07:57.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-04-11T11:07:58.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 7, 18), 0.05961, 99.5733, 0.0, 17.3095, 12.8507, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:07:58.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:07:18
2026-04-11T11:07:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:07:59.182 [DEBUG] [Thread-168794] [transport.py] [_log()] starting thread (client mode): 0xb0f8c160
2026-04-11T11:07:59.183 [DEBUG] [Thread-168794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:07:59.203 [DEBUG] [Thread-168794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:07:59.203 [INFO] [Thread-168794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:07:59.207 [DEBUG] [Thread-168794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] client lang: <none>
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] server lang: <none>
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] kex follows: False
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] Compression: none
2026-04-11T11:07:59.208 [DEBUG] [Thread-168794] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:07:59.224 [DEBUG] [Thread-168794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:07:59.224 [DEBUG] [Thread-168794] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:07:59.224 [DEBUG] [Thread-168794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:07:59.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:07:59.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:07:59.225 [DEBUG] [Thread-168794] [transport.py] [_log()] userauth is OK
2026-04-11T11:07:59.225 [DEBUG] [Thread-168794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:07:59.225 [DEBUG] [Thread-168794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:07:59.225 [DEBUG] [Thread-168794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:07:59.225 [DEBUG] [Thread-168794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:07:59.240 [INFO] [Thread-168794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:07:59.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:07:59.996 [DEBUG] [Thread-168794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:07:59.997 [DEBUG] [Thread-168794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:07:59.997 [DEBUG] [Thread-168794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:08:00.041 [DEBUG] [Thread-168794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:08:00.041 [DEBUG] [Thread-168794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:08:00.048 [DEBUG] [Thread-168794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:08:00.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:08:00.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:08:00.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:08:00.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:08:00.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:08:00.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:08:00.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:08:00.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:08:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:08:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.379981 -999.00  +12.70  12.46     97  +12.30 1 3 1 3 1   888    0 0.46 0.65 ----- 21.3 12.5 89.0 22.2 13.8 -0.4 13.9 -0.1 13.9 -0.4 14.1 -0.4
2026-04-11T11:08:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:08:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:08:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.379981
2026-04-11T11:08:00.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:08:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:08:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:08:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:08:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:08:00.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:07:18', tmtdew=0.05961, humidity=99.5733, cloud=0.0, wind=17.3095, temperature=12.8507, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:07:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:08:00.084 [DEBUG] [Thread-168794] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:08:00.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:08:00.189 [DEBUG] [Thread-168797] [transport.py] [_log()] starting thread (client mode): 0xae516020
2026-04-11T11:08:00.189 [DEBUG] [Thread-168797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:08:00.204 [DEBUG] [Thread-168797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:08:00.204 [INFO] [Thread-168797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:08:00.211 [DEBUG] [Thread-168797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:08:00.211 [DEBUG] [Thread-168797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] client lang: <none>
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] server lang: <none>
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] kex follows: False
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] Compression: none
2026-04-11T11:08:00.212 [DEBUG] [Thread-168797] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:08:00.271 [DEBUG] [Thread-168797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:08:00.272 [DEBUG] [Thread-168797] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:08:00.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:08:00.273 [DEBUG] [Thread-168797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:08:00.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:08:00.327 [DEBUG] [Thread-168797] [transport.py] [_log()] userauth is OK
2026-04-11T11:08:00.327 [DEBUG] [Thread-168797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:08:00.327 [DEBUG] [Thread-168797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:08:00.328 [DEBUG] [Thread-168797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:08:00.328 [DEBUG] [Thread-168797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:08:00.346 [INFO] [Thread-168797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:08:00.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:08:00.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:08:01.184 [DEBUG] [Thread-168799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:08:01.185 [DEBUG] [Thread-168797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:08:01.185 [DEBUG] [Thread-168797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:08:01.233 [DEBUG] [Thread-168797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:08:01.233 [DEBUG] [Thread-168797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:08:01.242 [DEBUG] [Thread-168797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:08:01.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:08:01.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-04-11T11:08:01.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-04-11T11:08:01.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:08:01.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:08:01.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:08:01.278 [DEBUG] [Thread-168797] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:08:04.438 [DEBUG] [Thread-168800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:08:19.492 [DEBUG] [Thread-168801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:08:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:08:31.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:08:31.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-04-11T11:08:32.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 7, 54), 0.114735, 99.5401, 0.0, 18.121, 12.8509, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:08:32.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:07:54
2026-04-11T11:08:33.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:08:33.337 [DEBUG] [Thread-168802] [transport.py] [_log()] starting thread (client mode): 0xa79531c0
2026-04-11T11:08:33.337 [DEBUG] [Thread-168802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:08:33.358 [DEBUG] [Thread-168802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:08:33.358 [INFO] [Thread-168802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:08:33.361 [DEBUG] [Thread-168802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:08:33.362 [DEBUG] [Thread-168802] [transport.py] [_log()] client lang: <none>
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] server lang: <none>
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] kex follows: False
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] Compression: none
2026-04-11T11:08:33.363 [DEBUG] [Thread-168802] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:08:33.374 [DEBUG] [Thread-168802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:08:33.375 [DEBUG] [Thread-168802] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:08:33.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:08:33.376 [DEBUG] [Thread-168802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:08:33.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:08:33.378 [DEBUG] [Thread-168802] [transport.py] [_log()] userauth is OK
2026-04-11T11:08:33.378 [DEBUG] [Thread-168802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:08:33.378 [DEBUG] [Thread-168802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:08:33.379 [DEBUG] [Thread-168802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:08:33.379 [DEBUG] [Thread-168802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:08:33.403 [INFO] [Thread-168802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:08:33.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:08:34.168 [DEBUG] [Thread-168802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:08:34.168 [DEBUG] [Thread-168802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:08:34.169 [DEBUG] [Thread-168802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:08:34.209 [DEBUG] [Thread-168802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:08:34.209 [DEBUG] [Thread-168802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:08:34.213 [DEBUG] [Thread-168802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:08:34.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:08:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:08:34.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:08:34.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:08:34.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:08:34.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:08:34.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:08:34.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:08:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:08:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.380328 -999.00  +12.70  13.71     97  +12.30 1 3 1 3 1   888    0 0.45 0.53 ----- 11.8 13.7 122.8 19.6 13.8 -0.2 13.9 -0.2 13.8 -0.3 14.0 -0.2
2026-04-11T11:08:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:08:34.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:08:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.380328
2026-04-11T11:08:34.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:08:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:08:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:08:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:08:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:08:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:07:54', tmtdew=0.114735, humidity=99.5401, cloud=0.0, wind=18.121, temperature=12.8509, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:07:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:08:34.241 [DEBUG] [Thread-168802] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:08:34.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:08:34.335 [DEBUG] [Thread-168805] [transport.py] [_log()] starting thread (client mode): 0xae5143d0
2026-04-11T11:08:34.335 [DEBUG] [Thread-168805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:08:34.350 [DEBUG] [Thread-168805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:08:34.350 [INFO] [Thread-168805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:08:34.358 [DEBUG] [Thread-168805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:08:34.358 [DEBUG] [Thread-168805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:08:34.358 [DEBUG] [Thread-168805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] client lang: <none>
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] server lang: <none>
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] kex follows: False
2026-04-11T11:08:34.359 [DEBUG] [Thread-168805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:08:34.360 [DEBUG] [Thread-168805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:08:34.360 [DEBUG] [Thread-168805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:08:34.360 [DEBUG] [Thread-168805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:08:34.360 [DEBUG] [Thread-168805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:08:34.360 [DEBUG] [Thread-168805] [transport.py] [_log()] Compression: none
2026-04-11T11:08:34.360 [DEBUG] [Thread-168805] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:08:34.420 [DEBUG] [Thread-168805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:08:34.420 [DEBUG] [Thread-168805] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:08:34.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:08:34.421 [DEBUG] [Thread-168805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:08:34.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:08:34.479 [DEBUG] [Thread-168805] [transport.py] [_log()] userauth is OK
2026-04-11T11:08:34.480 [DEBUG] [Thread-168805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:08:34.480 [DEBUG] [Thread-168805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:08:34.480 [DEBUG] [Thread-168805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:08:34.480 [DEBUG] [Thread-168805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:08:34.499 [INFO] [Thread-168805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:08:34.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:08:34.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:08:34.534 [DEBUG] [Thread-168807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:08:35.299 [DEBUG] [Thread-168805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:08:35.300 [DEBUG] [Thread-168805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:08:35.348 [DEBUG] [Thread-168805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:08:35.349 [DEBUG] [Thread-168805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:08:35.359 [DEBUG] [Thread-168805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:08:35.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:08:35.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-04-11T11:08:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:08:35.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:08:35.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:08:35.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:08:35.398 [DEBUG] [Thread-168805] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:08:42.220 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:08:42.221 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:08:49.589 [DEBUG] [Thread-168808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:01.228 [DEBUG] [Thread-168809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:04.627 [DEBUG] [Thread-168810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:05.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:09:05.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:09:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:09:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 8, 30), 0.114735, 99.5401, 0.0, 19.4616, 12.8509, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:09:06.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:08:30
2026-04-11T11:09:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:09:07.384 [DEBUG] [Thread-168811] [transport.py] [_log()] starting thread (client mode): 0xae5f06a0
2026-04-11T11:09:07.384 [DEBUG] [Thread-168811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:09:07.396 [DEBUG] [Thread-168811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:09:07.396 [INFO] [Thread-168811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:07.399 [DEBUG] [Thread-168811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] client lang: <none>
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] server lang: <none>
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] kex follows: False
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] Compression: none
2026-04-11T11:09:07.400 [DEBUG] [Thread-168811] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:09:07.418 [DEBUG] [Thread-168811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:09:07.419 [DEBUG] [Thread-168811] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:09:07.420 [DEBUG] [Thread-168811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:09:07.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:09:07.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:09:07.422 [DEBUG] [Thread-168811] [transport.py] [_log()] userauth is OK
2026-04-11T11:09:07.422 [DEBUG] [Thread-168811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:09:07.422 [DEBUG] [Thread-168811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:09:07.422 [DEBUG] [Thread-168811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:09:07.422 [DEBUG] [Thread-168811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:09:07.446 [INFO] [Thread-168811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:09:07.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:09:08.219 [DEBUG] [Thread-168811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:09:08.219 [DEBUG] [Thread-168811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:09:08.220 [DEBUG] [Thread-168811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:09:08.261 [DEBUG] [Thread-168811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:09:08.261 [DEBUG] [Thread-168811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:09:08.264 [DEBUG] [Thread-168811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:09:08.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:09:08.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:09:08.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:09:08.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:09:08.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:09:08.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:09:08.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:09:08.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:09:08.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:09:08.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.381023 -999.00  +12.70  10.87     97  +12.30 1 3 1 3 1   888    0 0.45 0.15 ----- 11.9 10.9 90.6 18.0 13.8 -0.1 13.9 -0.2 13.8 -0.5 14.0 -0.2
2026-04-11T11:09:08.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:09:08.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:09:08.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.381023
2026-04-11T11:09:08.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:09:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:09:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:09:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:09:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:09:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:08:30', tmtdew=0.114735, humidity=99.5401, cloud=0.0, wind=19.4616, temperature=12.8509, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:08:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:09:08.293 [DEBUG] [Thread-168811] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:09:08.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:09:08.390 [DEBUG] [Thread-168814] [transport.py] [_log()] starting thread (client mode): 0xb0fcfeb0
2026-04-11T11:09:08.390 [DEBUG] [Thread-168814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:09:08.405 [DEBUG] [Thread-168814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:09:08.405 [INFO] [Thread-168814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:08.413 [DEBUG] [Thread-168814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] client lang: <none>
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] server lang: <none>
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] kex follows: False
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:09:08.414 [DEBUG] [Thread-168814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:09:08.415 [DEBUG] [Thread-168814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:09:08.415 [DEBUG] [Thread-168814] [transport.py] [_log()] Compression: none
2026-04-11T11:09:08.415 [DEBUG] [Thread-168814] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:09:08.476 [DEBUG] [Thread-168814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:09:08.476 [DEBUG] [Thread-168814] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:09:08.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:09:08.478 [DEBUG] [Thread-168814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:09:08.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:09:08.535 [DEBUG] [Thread-168814] [transport.py] [_log()] userauth is OK
2026-04-11T11:09:08.536 [DEBUG] [Thread-168814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:09:08.536 [DEBUG] [Thread-168814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:09:08.536 [DEBUG] [Thread-168814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:09:08.536 [DEBUG] [Thread-168814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:09:08.557 [INFO] [Thread-168814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:09:08.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:09:08.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:09:09.379 [DEBUG] [Thread-168814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:09:09.379 [DEBUG] [Thread-168814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:09:09.427 [DEBUG] [Thread-168814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:09:09.428 [DEBUG] [Thread-168814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:09:09.437 [DEBUG] [Thread-168814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:09:09.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:09:09.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-04-11T11:09:09.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-04-11T11:09:09.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:09:09.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:09:09.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:09:09.475 [DEBUG] [Thread-168814] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:09:19.665 [DEBUG] [Thread-168816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:34.723 [DEBUG] [Thread-168817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:39.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:09:39.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:09:39.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-04-11T11:09:40.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 9, 6), 0.104505, 99.6064, 0.0, 19.8497, 12.9172, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:09:40.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:09:06
2026-04-11T11:09:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:09:41.376 [DEBUG] [Thread-168818] [transport.py] [_log()] starting thread (client mode): 0xae519330
2026-04-11T11:09:41.376 [DEBUG] [Thread-168818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:09:41.396 [DEBUG] [Thread-168818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:09:41.396 [INFO] [Thread-168818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] client lang: <none>
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] server lang: <none>
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] kex follows: False
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:09:41.398 [DEBUG] [Thread-168818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:09:41.399 [DEBUG] [Thread-168818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:09:41.399 [DEBUG] [Thread-168818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:09:41.399 [DEBUG] [Thread-168818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:09:41.399 [DEBUG] [Thread-168818] [transport.py] [_log()] Compression: none
2026-04-11T11:09:41.399 [DEBUG] [Thread-168818] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:09:41.416 [DEBUG] [Thread-168818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:09:41.416 [DEBUG] [Thread-168818] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:09:41.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:09:41.417 [DEBUG] [Thread-168818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:09:41.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:09:41.419 [DEBUG] [Thread-168818] [transport.py] [_log()] userauth is OK
2026-04-11T11:09:41.419 [DEBUG] [Thread-168818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:09:41.419 [DEBUG] [Thread-168818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:09:41.419 [DEBUG] [Thread-168818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:09:41.419 [DEBUG] [Thread-168818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:09:41.437 [INFO] [Thread-168818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:09:41.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:09:42.254 [DEBUG] [Thread-168818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:09:42.254 [DEBUG] [Thread-168818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:09:42.255 [DEBUG] [Thread-168818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:09:42.295 [DEBUG] [Thread-168818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:09:42.295 [DEBUG] [Thread-168818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:09:42.298 [DEBUG] [Thread-168818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:09:42.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:09:42.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:09:42.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:09:42.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:09:42.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:09:42.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:09:42.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:09:42.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:09:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:09:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.381370 -999.00  +12.80  10.03     97  +12.30 1 3 1 3 1   888    0 0.44 -0.10 ----- 10.4 10.0 113.7 18.7 13.9 -0.0 13.9 -0.0 13.8 -0.2 14.1 -0.1
2026-04-11T11:09:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:09:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:09:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.381370
2026-04-11T11:09:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:09:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:09:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:09:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:09:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:09:42.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:09:06', tmtdew=0.104505, humidity=99.6064, cloud=0.0, wind=19.8497, temperature=12.9172, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:09:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:09:42.323 [DEBUG] [Thread-168818] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:09:42.362 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:42.362 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:09:42.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:09:42.417 [DEBUG] [Thread-168821] [transport.py] [_log()] starting thread (client mode): 0xb0fb64d0
2026-04-11T11:09:42.417 [DEBUG] [Thread-168821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:09:42.431 [DEBUG] [Thread-168821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:09:42.431 [INFO] [Thread-168821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] client lang: <none>
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] server lang: <none>
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] kex follows: False
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:09:42.439 [DEBUG] [Thread-168821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:09:42.440 [DEBUG] [Thread-168821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:09:42.440 [DEBUG] [Thread-168821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:09:42.440 [DEBUG] [Thread-168821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:09:42.440 [DEBUG] [Thread-168821] [transport.py] [_log()] Compression: none
2026-04-11T11:09:42.440 [DEBUG] [Thread-168821] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:09:42.498 [DEBUG] [Thread-168821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:09:42.498 [DEBUG] [Thread-168821] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:09:42.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:09:42.499 [DEBUG] [Thread-168821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:09:42.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:09:42.557 [DEBUG] [Thread-168821] [transport.py] [_log()] userauth is OK
2026-04-11T11:09:42.557 [DEBUG] [Thread-168821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:09:42.557 [DEBUG] [Thread-168821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:09:42.557 [DEBUG] [Thread-168821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:09:42.558 [DEBUG] [Thread-168821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:09:42.580 [INFO] [Thread-168821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:09:42.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:09:42.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:09:43.419 [DEBUG] [Thread-168821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:09:43.419 [DEBUG] [Thread-168821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:09:43.467 [DEBUG] [Thread-168821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:09:43.467 [DEBUG] [Thread-168821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:09:43.476 [DEBUG] [Thread-168821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:09:43.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:09:43.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-04-11T11:09:43.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-04-11T11:09:43.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:09:43.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:09:43.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:09:43.511 [DEBUG] [Thread-168821] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:09:49.758 [DEBUG] [Thread-168823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:01.262 [DEBUG] [Thread-168824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:04.821 [DEBUG] [Thread-168825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:10:13.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:10:13.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-04-11T11:10:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 9, 41), 0.12438, 99.1133, 0.0, 22.4064, 13.3343, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:10:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:09:41
2026-04-11T11:10:15.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:10:15.333 [DEBUG] [Thread-168826] [transport.py] [_log()] starting thread (client mode): 0xae514190
2026-04-11T11:10:15.333 [DEBUG] [Thread-168826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:10:15.353 [DEBUG] [Thread-168826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:10:15.353 [INFO] [Thread-168826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:10:15.356 [DEBUG] [Thread-168826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] client lang: <none>
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] server lang: <none>
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] kex follows: False
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:10:15.357 [DEBUG] [Thread-168826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:10:15.358 [DEBUG] [Thread-168826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:10:15.358 [DEBUG] [Thread-168826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:10:15.358 [DEBUG] [Thread-168826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:10:15.358 [DEBUG] [Thread-168826] [transport.py] [_log()] Compression: none
2026-04-11T11:10:15.358 [DEBUG] [Thread-168826] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:10:15.376 [DEBUG] [Thread-168826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:10:15.376 [DEBUG] [Thread-168826] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:10:15.377 [DEBUG] [Thread-168826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:10:15.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:10:15.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:10:15.379 [DEBUG] [Thread-168826] [transport.py] [_log()] userauth is OK
2026-04-11T11:10:15.379 [DEBUG] [Thread-168826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:10:15.379 [DEBUG] [Thread-168826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:10:15.379 [DEBUG] [Thread-168826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:10:15.379 [DEBUG] [Thread-168826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:10:15.414 [INFO] [Thread-168826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:10:15.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:10:16.540 [DEBUG] [Thread-168826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:10:16.540 [DEBUG] [Thread-168826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:10:16.540 [DEBUG] [Thread-168826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:10:16.581 [DEBUG] [Thread-168826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:10:16.581 [DEBUG] [Thread-168826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:10:16.585 [DEBUG] [Thread-168826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:10:16.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:10:16.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:10:16.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:10:16.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:10:16.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:10:16.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:10:16.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:10:16.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:10:16.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:10:16.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.381717 -999.00  +12.80  10.97     97  +12.40 1 3 1 3 1   888    0 0.44 0.07 ----- 12.4 11.0 115.5 14.3 13.9 -0.3 14.0 -0.2 13.9 -0.3 14.1 -0.2
2026-04-11T11:10:16.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:10:16.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:10:16.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.381717
2026-04-11T11:10:16.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:10:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:10:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:10:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:10:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:10:16.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:09:41', tmtdew=0.12438, humidity=99.1133, cloud=0.0, wind=22.4064, temperature=13.3343, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:09:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:10:16.639 [DEBUG] [Thread-168826] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:10:16.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:10:16.735 [DEBUG] [Thread-168829] [transport.py] [_log()] starting thread (client mode): 0xb0fb7070
2026-04-11T11:10:16.735 [DEBUG] [Thread-168829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:10:16.751 [DEBUG] [Thread-168829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:10:16.751 [INFO] [Thread-168829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:10:16.759 [DEBUG] [Thread-168829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] client lang: <none>
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] server lang: <none>
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] kex follows: False
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] Compression: none
2026-04-11T11:10:16.760 [DEBUG] [Thread-168829] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:10:16.820 [DEBUG] [Thread-168829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:10:16.820 [DEBUG] [Thread-168829] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:10:16.821 [DEBUG] [Thread-168829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:10:16.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:10:16.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:10:16.879 [DEBUG] [Thread-168829] [transport.py] [_log()] userauth is OK
2026-04-11T11:10:16.880 [DEBUG] [Thread-168829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:10:16.880 [DEBUG] [Thread-168829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:10:16.880 [DEBUG] [Thread-168829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:10:16.880 [DEBUG] [Thread-168829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:10:16.900 [INFO] [Thread-168829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:10:16.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:10:17.741 [DEBUG] [Thread-168829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:10:17.741 [DEBUG] [Thread-168829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:10:17.789 [DEBUG] [Thread-168829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:10:17.790 [DEBUG] [Thread-168829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:10:17.799 [DEBUG] [Thread-168829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:10:17.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:10:17.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-04-11T11:10:17.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-04-11T11:10:17.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:10:17.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:10:17.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:10:17.834 [DEBUG] [Thread-168829] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:10:19.858 [DEBUG] [Thread-168831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:34.912 [DEBUG] [Thread-168832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:42.505 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:42.506 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:47.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:10:47.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:10:47.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-04-11T11:10:49.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 10, 17), 0.057075, 99.5898, 0.0, 13.639, 12.8837, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:10:49.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:10:17
2026-04-11T11:10:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:10:49.634 [DEBUG] [Thread-168833] [transport.py] [_log()] starting thread (client mode): 0xae5a5330
2026-04-11T11:10:49.635 [DEBUG] [Thread-168833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:10:49.655 [DEBUG] [Thread-168833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:10:49.655 [INFO] [Thread-168833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] client lang: <none>
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] server lang: <none>
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] kex follows: False
2026-04-11T11:10:49.658 [DEBUG] [Thread-168833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:10:49.659 [DEBUG] [Thread-168833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:10:49.659 [DEBUG] [Thread-168833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:10:49.659 [DEBUG] [Thread-168833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:10:49.659 [DEBUG] [Thread-168833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:10:49.659 [DEBUG] [Thread-168833] [transport.py] [_log()] Compression: none
2026-04-11T11:10:49.659 [DEBUG] [Thread-168833] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:10:49.677 [DEBUG] [Thread-168833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:10:49.677 [DEBUG] [Thread-168833] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:10:49.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:10:49.678 [DEBUG] [Thread-168833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:10:49.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:10:49.680 [DEBUG] [Thread-168833] [transport.py] [_log()] userauth is OK
2026-04-11T11:10:49.681 [DEBUG] [Thread-168833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:10:49.681 [DEBUG] [Thread-168833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:10:49.681 [DEBUG] [Thread-168833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:10:49.681 [DEBUG] [Thread-168833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:10:49.704 [INFO] [Thread-168833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:10:49.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:10:49.950 [DEBUG] [Thread-168835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:10:50.481 [DEBUG] [Thread-168833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:10:50.481 [DEBUG] [Thread-168833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:10:50.481 [DEBUG] [Thread-168833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:10:50.522 [DEBUG] [Thread-168833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:10:50.522 [DEBUG] [Thread-168833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:10:50.524 [DEBUG] [Thread-168833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:10:50.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:10:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:10:50.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:10:50.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:10:50.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:10:50.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:10:50.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:10:50.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:10:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:10:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.382064 -999.00  +12.80  13.62     97  +12.40 1 3 1 3 1   888    0 0.43 -0.24 ----- 11.8 13.6 115.2 20.7 13.9 -0.7 14.0 -0.1 13.9 -0.3 14.2 -0.2
2026-04-11T11:10:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:10:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:10:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.382064
2026-04-11T11:10:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:10:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:10:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:10:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:10:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:10:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:10:17', tmtdew=0.057075, humidity=99.5898, cloud=0.0, wind=13.639, temperature=12.8837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:10:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:10:50.550 [DEBUG] [Thread-168833] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:10:50.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:10:50.645 [DEBUG] [Thread-168837] [transport.py] [_log()] starting thread (client mode): 0xae5e46a0
2026-04-11T11:10:50.645 [DEBUG] [Thread-168837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:10:50.659 [DEBUG] [Thread-168837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:10:50.660 [INFO] [Thread-168837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:10:50.667 [DEBUG] [Thread-168837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:10:50.668 [DEBUG] [Thread-168837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] client lang: <none>
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] server lang: <none>
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] kex follows: False
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:10:50.669 [DEBUG] [Thread-168837] [transport.py] [_log()] Compression: none
2026-04-11T11:10:50.670 [DEBUG] [Thread-168837] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:10:50.729 [DEBUG] [Thread-168837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:10:50.730 [DEBUG] [Thread-168837] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:10:50.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:10:50.732 [DEBUG] [Thread-168837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:10:50.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:10:50.792 [DEBUG] [Thread-168837] [transport.py] [_log()] userauth is OK
2026-04-11T11:10:50.793 [DEBUG] [Thread-168837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:10:50.793 [DEBUG] [Thread-168837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:10:50.793 [DEBUG] [Thread-168837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:10:50.793 [DEBUG] [Thread-168837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:10:50.815 [INFO] [Thread-168837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:10:50.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:10:50.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:10:51.641 [DEBUG] [Thread-168837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:10:51.642 [DEBUG] [Thread-168837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:10:51.690 [DEBUG] [Thread-168837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:10:51.690 [DEBUG] [Thread-168837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:10:51.700 [DEBUG] [Thread-168837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:10:51.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:10:51.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-04-11T11:10:51.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-04-11T11:10:51.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:10:51.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:10:51.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:10:51.737 [DEBUG] [Thread-168837] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:11:01.296 [DEBUG] [Thread-168839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:04.988 [DEBUG] [Thread-168840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:20.043 [DEBUG] [Thread-168841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:11:21.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:11:21.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-04-11T11:11:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 10, 52), 0.11415, 99.1795, 0.0, 23.6412, 13.3675, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:11:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:10:52
2026-04-11T11:11:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:11:23.555 [DEBUG] [Thread-168842] [transport.py] [_log()] starting thread (client mode): 0xae516c20
2026-04-11T11:11:23.555 [DEBUG] [Thread-168842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:11:23.575 [DEBUG] [Thread-168842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:11:23.575 [INFO] [Thread-168842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:11:23.578 [DEBUG] [Thread-168842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:11:23.578 [DEBUG] [Thread-168842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:11:23.578 [DEBUG] [Thread-168842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] client lang: <none>
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] server lang: <none>
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] kex follows: False
2026-04-11T11:11:23.579 [DEBUG] [Thread-168842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:11:23.580 [DEBUG] [Thread-168842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:11:23.580 [DEBUG] [Thread-168842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:11:23.580 [DEBUG] [Thread-168842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:11:23.580 [DEBUG] [Thread-168842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:11:23.580 [DEBUG] [Thread-168842] [transport.py] [_log()] Compression: none
2026-04-11T11:11:23.580 [DEBUG] [Thread-168842] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:11:23.594 [DEBUG] [Thread-168842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:11:23.595 [DEBUG] [Thread-168842] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:11:23.595 [DEBUG] [Thread-168842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:11:23.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:11:23.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:11:23.637 [DEBUG] [Thread-168842] [transport.py] [_log()] userauth is OK
2026-04-11T11:11:23.637 [DEBUG] [Thread-168842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:11:23.637 [DEBUG] [Thread-168842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:11:23.637 [DEBUG] [Thread-168842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:11:23.637 [DEBUG] [Thread-168842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:11:23.657 [INFO] [Thread-168842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:11:23.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:11:24.420 [DEBUG] [Thread-168842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:11:24.420 [DEBUG] [Thread-168842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:11:24.421 [DEBUG] [Thread-168842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:11:24.461 [DEBUG] [Thread-168842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:11:24.461 [DEBUG] [Thread-168842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:11:24.465 [DEBUG] [Thread-168842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:11:24.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:11:24.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:11:24.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:11:24.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:11:24.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:11:24.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:11:24.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:11:24.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:11:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:11:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.382412 -999.00  +12.70  14.44     97  +12.30 1 3 1 3 1   888    0 0.43 -0.26 ----- 15.7 14.4 120.3 21.9 13.9 -0.2 14.0 -0.2 13.9 -0.2 14.2 -0.3
2026-04-11T11:11:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:11:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:11:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.382412
2026-04-11T11:11:24.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:11:24.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:11:24.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:11:24.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:11:24.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:11:24.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:10:52', tmtdew=0.11415, humidity=99.1795, cloud=0.0, wind=23.6412, temperature=13.3675, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:10:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:11:24.493 [DEBUG] [Thread-168842] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:11:24.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:11:24.587 [DEBUG] [Thread-168845] [transport.py] [_log()] starting thread (client mode): 0xb0fb6b30
2026-04-11T11:11:24.587 [DEBUG] [Thread-168845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:11:24.603 [DEBUG] [Thread-168845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:11:24.603 [INFO] [Thread-168845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:11:24.611 [DEBUG] [Thread-168845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:11:24.611 [DEBUG] [Thread-168845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:11:24.611 [DEBUG] [Thread-168845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:11:24.611 [DEBUG] [Thread-168845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:24.611 [DEBUG] [Thread-168845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:24.611 [DEBUG] [Thread-168845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] client lang: <none>
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] server lang: <none>
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] kex follows: False
2026-04-11T11:11:24.612 [DEBUG] [Thread-168845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:11:24.613 [DEBUG] [Thread-168845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:11:24.613 [DEBUG] [Thread-168845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:11:24.613 [DEBUG] [Thread-168845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:11:24.613 [DEBUG] [Thread-168845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:11:24.613 [DEBUG] [Thread-168845] [transport.py] [_log()] Compression: none
2026-04-11T11:11:24.613 [DEBUG] [Thread-168845] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:11:24.672 [DEBUG] [Thread-168845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:11:24.672 [DEBUG] [Thread-168845] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:11:24.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:11:24.674 [DEBUG] [Thread-168845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:11:24.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:11:24.728 [DEBUG] [Thread-168845] [transport.py] [_log()] userauth is OK
2026-04-11T11:11:24.728 [DEBUG] [Thread-168845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:11:24.728 [DEBUG] [Thread-168845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:11:24.728 [DEBUG] [Thread-168845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:11:24.728 [DEBUG] [Thread-168845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:11:24.748 [INFO] [Thread-168845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:11:24.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:11:24.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:11:25.605 [DEBUG] [Thread-168845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:11:25.605 [DEBUG] [Thread-168845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:11:25.653 [DEBUG] [Thread-168845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:11:25.654 [DEBUG] [Thread-168845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:11:25.663 [DEBUG] [Thread-168845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:11:25.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:11:25.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-04-11T11:11:25.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-04-11T11:11:25.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:11:25.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:11:25.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:11:25.700 [DEBUG] [Thread-168845] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:11:35.079 [DEBUG] [Thread-168847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:42.647 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:42.648 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:50.129 [DEBUG] [Thread-168848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:11:55.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:11:55.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:11:55.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-04-11T11:11:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 11, 28), 0.10196, 99.6229, 0.0, 17.4154, 12.9503, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:11:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:11:28
2026-04-11T11:11:57.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:11:57.542 [DEBUG] [Thread-168849] [transport.py] [_log()] starting thread (client mode): 0xae5a7580
2026-04-11T11:11:57.542 [DEBUG] [Thread-168849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:11:57.563 [DEBUG] [Thread-168849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:11:57.563 [INFO] [Thread-168849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] client lang: <none>
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] server lang: <none>
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] kex follows: False
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] Compression: none
2026-04-11T11:11:57.566 [DEBUG] [Thread-168849] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:11:57.584 [DEBUG] [Thread-168849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:11:57.585 [DEBUG] [Thread-168849] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:11:57.585 [DEBUG] [Thread-168849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:11:57.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:11:57.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:11:57.587 [DEBUG] [Thread-168849] [transport.py] [_log()] userauth is OK
2026-04-11T11:11:57.587 [DEBUG] [Thread-168849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:11:57.587 [DEBUG] [Thread-168849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:11:57.587 [DEBUG] [Thread-168849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:11:57.588 [DEBUG] [Thread-168849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:11:57.622 [INFO] [Thread-168849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:11:57.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:11:58.456 [DEBUG] [Thread-168849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:11:58.456 [DEBUG] [Thread-168849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:11:58.457 [DEBUG] [Thread-168849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:11:58.497 [DEBUG] [Thread-168849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:11:58.497 [DEBUG] [Thread-168849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:11:58.501 [DEBUG] [Thread-168849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:11:58.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:11:58.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:11:58.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:11:58.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:11:58.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:11:58.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:11:58.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:11:58.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:11:58.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:11:58.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.382759 -999.00  +12.80  12.12     97  +12.30 1 3 1 3 1   888    0 0.45 0.27 ----- 12.8 12.1 99.1 16.4 13.9 -0.2 14.0 -0.2 13.9 -0.3 14.2 -0.2
2026-04-11T11:11:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:11:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:11:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.382759
2026-04-11T11:11:58.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:11:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:11:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:11:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:11:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:11:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:11:28', tmtdew=0.10196, humidity=99.6229, cloud=0.0, wind=17.4154, temperature=12.9503, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:11:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:11:58.530 [DEBUG] [Thread-168849] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:11:58.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:11:58.624 [DEBUG] [Thread-168852] [transport.py] [_log()] starting thread (client mode): 0xa79b7a90
2026-04-11T11:11:58.624 [DEBUG] [Thread-168852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:11:58.639 [DEBUG] [Thread-168852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:11:58.639 [INFO] [Thread-168852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] client lang: <none>
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] server lang: <none>
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] kex follows: False
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:11:58.647 [DEBUG] [Thread-168852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:11:58.648 [DEBUG] [Thread-168852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:11:58.648 [DEBUG] [Thread-168852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:11:58.648 [DEBUG] [Thread-168852] [transport.py] [_log()] Compression: none
2026-04-11T11:11:58.648 [DEBUG] [Thread-168852] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:11:58.703 [DEBUG] [Thread-168852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:11:58.704 [DEBUG] [Thread-168852] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:11:58.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:11:58.705 [DEBUG] [Thread-168852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:11:58.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:11:58.760 [DEBUG] [Thread-168852] [transport.py] [_log()] userauth is OK
2026-04-11T11:11:58.761 [DEBUG] [Thread-168852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:11:58.761 [DEBUG] [Thread-168852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:11:58.761 [DEBUG] [Thread-168852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:11:58.761 [DEBUG] [Thread-168852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:11:58.780 [INFO] [Thread-168852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:11:58.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:11:58.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:11:59.608 [DEBUG] [Thread-168852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:11:59.608 [DEBUG] [Thread-168852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:11:59.656 [DEBUG] [Thread-168852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:11:59.656 [DEBUG] [Thread-168852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:11:59.665 [DEBUG] [Thread-168852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:11:59.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:11:59.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-04-11T11:11:59.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-04-11T11:11:59.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:11:59.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:11:59.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:11:59.701 [DEBUG] [Thread-168852] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:12:01.333 [DEBUG] [Thread-168854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:12:05.164 [DEBUG] [Thread-168855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:12:20.226 [DEBUG] [Thread-168856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:12:29.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:12:29.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:12:29.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-04-11T11:12:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 12, 3), 0.1122, 99.5566, 0.0, 19.2676, 12.9006, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:12:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:12:03
2026-04-11T11:12:31.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:12:31.497 [DEBUG] [Thread-168857] [transport.py] [_log()] starting thread (client mode): 0xb0f8df90
2026-04-11T11:12:31.497 [DEBUG] [Thread-168857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:12:31.518 [DEBUG] [Thread-168857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:12:31.518 [INFO] [Thread-168857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:12:31.521 [DEBUG] [Thread-168857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] client lang: <none>
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] server lang: <none>
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] kex follows: False
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] Compression: none
2026-04-11T11:12:31.522 [DEBUG] [Thread-168857] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:12:31.541 [DEBUG] [Thread-168857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:12:31.542 [DEBUG] [Thread-168857] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:12:31.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:12:31.543 [DEBUG] [Thread-168857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:12:31.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:12:31.545 [DEBUG] [Thread-168857] [transport.py] [_log()] userauth is OK
2026-04-11T11:12:31.546 [DEBUG] [Thread-168857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:12:31.546 [DEBUG] [Thread-168857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:12:31.546 [DEBUG] [Thread-168857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:12:31.546 [DEBUG] [Thread-168857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:12:31.570 [INFO] [Thread-168857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:12:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:12:32.336 [DEBUG] [Thread-168857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:12:32.336 [DEBUG] [Thread-168857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:12:32.337 [DEBUG] [Thread-168857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:12:32.377 [DEBUG] [Thread-168857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:12:32.377 [DEBUG] [Thread-168857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:12:32.381 [DEBUG] [Thread-168857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:12:32.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:12:32.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:12:32.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:12:32.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:12:32.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:12:32.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:12:32.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:12:32.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:12:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:12:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.383106 -999.00  +12.80  12.60     97  +12.30 1 3 1 3 1   888    0 0.46 0.82 ----- 11.1 12.6 90.3 22.9 13.9 -0.1 14.0 -0.1 13.9 -0.2 14.2 -0.4
2026-04-11T11:12:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:12:32.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:12:32.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.383106
2026-04-11T11:12:32.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:12:32.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:12:32.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:12:32.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:12:32.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:12:32.406 [DEBUG] [Thread-168857] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:12:32.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:12:03', tmtdew=0.1122, humidity=99.5566, cloud=0.0, wind=19.2676, temperature=12.9006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:11:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:12:32.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:12:32.515 [DEBUG] [Thread-168860] [transport.py] [_log()] starting thread (client mode): 0xb0fb47c0
2026-04-11T11:12:32.515 [DEBUG] [Thread-168860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:12:32.530 [DEBUG] [Thread-168860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:12:32.530 [INFO] [Thread-168860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:12:32.538 [DEBUG] [Thread-168860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:12:32.539 [DEBUG] [Thread-168860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] client lang: <none>
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] server lang: <none>
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] kex follows: False
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:12:32.540 [DEBUG] [Thread-168860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:12:32.541 [DEBUG] [Thread-168860] [transport.py] [_log()] Compression: none
2026-04-11T11:12:32.541 [DEBUG] [Thread-168860] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:12:32.596 [DEBUG] [Thread-168860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:12:32.596 [DEBUG] [Thread-168860] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:12:32.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:12:32.598 [DEBUG] [Thread-168860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:12:32.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:12:32.656 [DEBUG] [Thread-168860] [transport.py] [_log()] userauth is OK
2026-04-11T11:12:32.656 [DEBUG] [Thread-168860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:12:32.656 [DEBUG] [Thread-168860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:12:32.656 [DEBUG] [Thread-168860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:12:32.657 [DEBUG] [Thread-168860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:12:32.675 [INFO] [Thread-168860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:12:32.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:12:32.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:12:33.477 [DEBUG] [Thread-168860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:12:33.477 [DEBUG] [Thread-168860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:12:33.525 [DEBUG] [Thread-168860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:12:33.525 [DEBUG] [Thread-168860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:12:33.534 [DEBUG] [Thread-168860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:12:33.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:12:33.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-04-11T11:12:33.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-04-11T11:12:33.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:12:33.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:12:33.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:12:33.572 [DEBUG] [Thread-168860] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:12:35.274 [DEBUG] [Thread-168862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:12:42.789 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:12:42.790 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:12:50.326 [DEBUG] [Thread-168863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:01.366 [DEBUG] [Thread-168864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:03.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:13:03.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:13:03.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:13:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 12, 39), 0.11416, 99.1794, 0.0, 21.4891, 13.3674, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:13:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:12:39
2026-04-11T11:13:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:13:05.358 [DEBUG] [Thread-168865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:05.382 [DEBUG] [Thread-168866] [transport.py] [_log()] starting thread (client mode): 0xae5e7520
2026-04-11T11:13:05.382 [DEBUG] [Thread-168866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:13:05.402 [DEBUG] [Thread-168866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:13:05.402 [INFO] [Thread-168866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:13:05.405 [DEBUG] [Thread-168866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] client lang: <none>
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] server lang: <none>
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] kex follows: False
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] Compression: none
2026-04-11T11:13:05.406 [DEBUG] [Thread-168866] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:13:05.424 [DEBUG] [Thread-168866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:13:05.424 [DEBUG] [Thread-168866] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:13:05.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:13:05.425 [DEBUG] [Thread-168866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:13:05.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:13:05.427 [DEBUG] [Thread-168866] [transport.py] [_log()] userauth is OK
2026-04-11T11:13:05.427 [DEBUG] [Thread-168866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:13:05.427 [DEBUG] [Thread-168866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:13:05.428 [DEBUG] [Thread-168866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:13:05.428 [DEBUG] [Thread-168866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:13:05.463 [INFO] [Thread-168866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:13:05.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:13:06.241 [DEBUG] [Thread-168866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:13:06.241 [DEBUG] [Thread-168866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:13:06.242 [DEBUG] [Thread-168866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:13:06.283 [DEBUG] [Thread-168866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:13:06.283 [DEBUG] [Thread-168866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:13:06.287 [DEBUG] [Thread-168866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:13:06.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:13:06.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:13:06.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:13:06.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:13:06.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:13:06.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:13:06.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:13:06.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:13:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:13:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.383801 -999.00  +12.80  13.22     97  +12.40 1 3 1 3 1   888    0 0.47 0.73 ----- 8.4 13.2 122.0 17.4 14.0 -0.0 14.0 -0.3 13.9 -0.2 14.2 -0.4
2026-04-11T11:13:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:13:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:13:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.383801
2026-04-11T11:13:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:13:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:13:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:13:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:13:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:13:06.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:12:39', tmtdew=0.11416, humidity=99.1794, cloud=0.0, wind=21.4891, temperature=13.3674, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:12:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:13:06.317 [DEBUG] [Thread-168866] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:13:06.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:13:06.408 [DEBUG] [Thread-168869] [transport.py] [_log()] starting thread (client mode): 0xae5e6350
2026-04-11T11:13:06.409 [DEBUG] [Thread-168869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:13:06.423 [DEBUG] [Thread-168869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:13:06.424 [INFO] [Thread-168869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:13:06.431 [DEBUG] [Thread-168869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:13:06.431 [DEBUG] [Thread-168869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] client lang: <none>
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] server lang: <none>
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] kex follows: False
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] Compression: none
2026-04-11T11:13:06.432 [DEBUG] [Thread-168869] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:13:06.493 [DEBUG] [Thread-168869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:13:06.493 [DEBUG] [Thread-168869] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:13:06.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:13:06.494 [DEBUG] [Thread-168869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:13:06.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:13:06.553 [DEBUG] [Thread-168869] [transport.py] [_log()] userauth is OK
2026-04-11T11:13:06.553 [DEBUG] [Thread-168869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:13:06.554 [DEBUG] [Thread-168869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:13:06.554 [DEBUG] [Thread-168869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:13:06.554 [DEBUG] [Thread-168869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:13:06.574 [INFO] [Thread-168869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:13:06.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:13:06.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:13:07.446 [DEBUG] [Thread-168869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:13:07.447 [DEBUG] [Thread-168869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:13:07.495 [DEBUG] [Thread-168869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:13:07.495 [DEBUG] [Thread-168869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:13:07.504 [DEBUG] [Thread-168869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:13:07.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:13:07.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-04-11T11:13:07.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-04-11T11:13:07.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:13:07.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:13:07.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:13:07.540 [DEBUG] [Thread-168869] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:13:20.394 [DEBUG] [Thread-168871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:35.445 [DEBUG] [Thread-168872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:37.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:13:37.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:13:37.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-04-11T11:13:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 13, 14), 0.107085, 99.5897, 0.0, 19.8504, 12.8671, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:13:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:13:14
2026-04-11T11:13:39.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:13:39.433 [DEBUG] [Thread-168873] [transport.py] [_log()] starting thread (client mode): 0xae5a4490
2026-04-11T11:13:39.433 [DEBUG] [Thread-168873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:13:39.452 [DEBUG] [Thread-168873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:13:39.452 [INFO] [Thread-168873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] client lang: <none>
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] server lang: <none>
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] kex follows: False
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] Compression: none
2026-04-11T11:13:39.455 [DEBUG] [Thread-168873] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:13:39.463 [DEBUG] [Thread-168873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:13:39.464 [DEBUG] [Thread-168873] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:13:39.464 [DEBUG] [Thread-168873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:13:39.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:13:39.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:13:39.465 [DEBUG] [Thread-168873] [transport.py] [_log()] userauth is OK
2026-04-11T11:13:39.465 [DEBUG] [Thread-168873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:13:39.466 [DEBUG] [Thread-168873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:13:39.466 [DEBUG] [Thread-168873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:13:39.466 [DEBUG] [Thread-168873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:13:39.478 [INFO] [Thread-168873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:13:39.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:13:40.264 [DEBUG] [Thread-168873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:13:40.265 [DEBUG] [Thread-168873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:13:40.265 [DEBUG] [Thread-168873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:13:40.306 [DEBUG] [Thread-168873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:13:40.306 [DEBUG] [Thread-168873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:13:40.310 [DEBUG] [Thread-168873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:13:40.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:13:40.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:13:40.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:13:40.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:13:40.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:13:40.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:13:40.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:13:40.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:13:40.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:13:40.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.384148 -999.00  +12.80  12.66     97  +12.40 1 3 1 3 1   888    0 0.46 0.36 ----- 12.9 12.7 116.6 22.1 14.0 -0.4 14.0 -0.0 14.0 -0.3 14.2 -0.2
2026-04-11T11:13:40.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:13:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:13:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.384148
2026-04-11T11:13:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:13:40.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:13:40.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:13:40.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:13:40.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:13:40.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:13:14', tmtdew=0.107085, humidity=99.5897, cloud=0.0, wind=19.8504, temperature=12.8671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:13:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:13:40.338 [DEBUG] [Thread-168873] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:13:40.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:13:40.431 [DEBUG] [Thread-168876] [transport.py] [_log()] starting thread (client mode): 0xb0f8de40
2026-04-11T11:13:40.431 [DEBUG] [Thread-168876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:13:40.446 [DEBUG] [Thread-168876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:13:40.446 [INFO] [Thread-168876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] client lang: <none>
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] server lang: <none>
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] kex follows: False
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:13:40.454 [DEBUG] [Thread-168876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:13:40.455 [DEBUG] [Thread-168876] [transport.py] [_log()] Compression: none
2026-04-11T11:13:40.455 [DEBUG] [Thread-168876] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:13:40.512 [DEBUG] [Thread-168876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:13:40.512 [DEBUG] [Thread-168876] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:13:40.513 [DEBUG] [Thread-168876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:13:40.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:13:40.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:13:40.568 [DEBUG] [Thread-168876] [transport.py] [_log()] userauth is OK
2026-04-11T11:13:40.568 [DEBUG] [Thread-168876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:13:40.569 [DEBUG] [Thread-168876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:13:40.569 [DEBUG] [Thread-168876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:13:40.569 [DEBUG] [Thread-168876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:13:40.588 [INFO] [Thread-168876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:13:40.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:13:40.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:13:41.439 [DEBUG] [Thread-168876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:13:41.440 [DEBUG] [Thread-168876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:13:41.488 [DEBUG] [Thread-168876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:13:41.488 [DEBUG] [Thread-168876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:13:41.498 [DEBUG] [Thread-168876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:13:41.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:13:41.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-04-11T11:13:41.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-04-11T11:13:41.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:13:41.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:13:41.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:13:41.535 [DEBUG] [Thread-168876] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:13:42.928 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:42.930 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:13:50.482 [DEBUG] [Thread-168878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:01.403 [DEBUG] [Thread-168879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:05.530 [DEBUG] [Thread-168880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:11.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:14:11.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:14:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:14:12.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 13, 50), 0.11404, 99.1802, 0.0, 19.6898, 13.3348, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:14:12.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:13:50
2026-04-11T11:14:13.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:14:13.355 [DEBUG] [Thread-168881] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ba0
2026-04-11T11:14:13.356 [DEBUG] [Thread-168881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:14:13.376 [DEBUG] [Thread-168881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:14:13.376 [INFO] [Thread-168881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:14:13.379 [DEBUG] [Thread-168881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] client lang: <none>
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] server lang: <none>
2026-04-11T11:14:13.380 [DEBUG] [Thread-168881] [transport.py] [_log()] kex follows: False
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] Compression: none
2026-04-11T11:14:13.381 [DEBUG] [Thread-168881] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:14:13.400 [DEBUG] [Thread-168881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:14:13.400 [DEBUG] [Thread-168881] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:14:13.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:14:13.401 [DEBUG] [Thread-168881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:14:13.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:14:13.404 [DEBUG] [Thread-168881] [transport.py] [_log()] userauth is OK
2026-04-11T11:14:13.404 [DEBUG] [Thread-168881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:14:13.404 [DEBUG] [Thread-168881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:14:13.404 [DEBUG] [Thread-168881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:14:13.404 [DEBUG] [Thread-168881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:14:13.428 [INFO] [Thread-168881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:14:13.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:14:14.181 [DEBUG] [Thread-168881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:14:14.181 [DEBUG] [Thread-168881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:14:14.182 [DEBUG] [Thread-168881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:14:14.222 [DEBUG] [Thread-168881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:14:14.223 [DEBUG] [Thread-168881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:14:14.226 [DEBUG] [Thread-168881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:14:14.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:14:14.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:14:14.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:14:14.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:14:14.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:14:14.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:14:14.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:14:14.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:14:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:14:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.384495 -999.00  +12.80  13.69     97  +12.40 1 3 1 3 1   888    0 0.45 0.33 ----- 12.0 13.7 123.0 15.7 14.0 -0.5 14.1 -0.1 14.0 -0.2 14.2 -0.1
2026-04-11T11:14:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:14:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:14:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.384495
2026-04-11T11:14:14.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:14:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:14:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:14:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:14:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:14:14.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:13:50', tmtdew=0.11404, humidity=99.1802, cloud=0.0, wind=19.6898, temperature=13.3348, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:13:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:14:14.256 [DEBUG] [Thread-168881] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:14:14.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:14:14.362 [DEBUG] [Thread-168884] [transport.py] [_log()] starting thread (client mode): 0xb0fb43d0
2026-04-11T11:14:14.362 [DEBUG] [Thread-168884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:14:14.378 [DEBUG] [Thread-168884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:14:14.378 [INFO] [Thread-168884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:14.386 [DEBUG] [Thread-168884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] client lang: <none>
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] server lang: <none>
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] kex follows: False
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] Compression: none
2026-04-11T11:14:14.387 [DEBUG] [Thread-168884] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:14:14.449 [DEBUG] [Thread-168884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:14:14.449 [DEBUG] [Thread-168884] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:14:14.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:14:14.451 [DEBUG] [Thread-168884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:14:14.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:14:14.508 [DEBUG] [Thread-168884] [transport.py] [_log()] userauth is OK
2026-04-11T11:14:14.508 [DEBUG] [Thread-168884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:14:14.509 [DEBUG] [Thread-168884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:14:14.509 [DEBUG] [Thread-168884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:14:14.509 [DEBUG] [Thread-168884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:14:14.528 [INFO] [Thread-168884] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:14:14.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:14:14.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:14:15.362 [DEBUG] [Thread-168884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:14:15.362 [DEBUG] [Thread-168884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:14:15.410 [DEBUG] [Thread-168884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:14:15.410 [DEBUG] [Thread-168884] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:14:15.420 [DEBUG] [Thread-168884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:14:15.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:14:15.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-04-11T11:14:15.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:14:15.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:14:15.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:14:15.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:14:15.457 [DEBUG] [Thread-168884] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:14:20.569 [DEBUG] [Thread-168886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:35.623 [DEBUG] [Thread-168887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:43.070 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:43.071 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:14:45.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:14:45.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:14:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:14:46.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 14, 25), 0.10702, 99.5901, 0.0, 14.7863, 12.9505, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:14:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:14:25
2026-04-11T11:14:47.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:14:47.266 [DEBUG] [Thread-168888] [transport.py] [_log()] starting thread (client mode): 0xa79b4d00
2026-04-11T11:14:47.266 [DEBUG] [Thread-168888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:14:47.286 [DEBUG] [Thread-168888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:14:47.286 [INFO] [Thread-168888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] client lang: <none>
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] server lang: <none>
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] kex follows: False
2026-04-11T11:14:47.288 [DEBUG] [Thread-168888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:14:47.289 [DEBUG] [Thread-168888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:14:47.289 [DEBUG] [Thread-168888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:14:47.289 [DEBUG] [Thread-168888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:14:47.289 [DEBUG] [Thread-168888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:14:47.289 [DEBUG] [Thread-168888] [transport.py] [_log()] Compression: none
2026-04-11T11:14:47.289 [DEBUG] [Thread-168888] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:14:47.309 [DEBUG] [Thread-168888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:14:47.310 [DEBUG] [Thread-168888] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:14:47.310 [DEBUG] [Thread-168888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:14:47.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:14:47.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:14:47.313 [DEBUG] [Thread-168888] [transport.py] [_log()] userauth is OK
2026-04-11T11:14:47.313 [DEBUG] [Thread-168888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:14:47.313 [DEBUG] [Thread-168888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:14:47.313 [DEBUG] [Thread-168888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:14:47.313 [DEBUG] [Thread-168888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:14:47.336 [INFO] [Thread-168888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:14:47.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:14:48.120 [DEBUG] [Thread-168888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:14:48.120 [DEBUG] [Thread-168888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:14:48.121 [DEBUG] [Thread-168888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:14:48.161 [DEBUG] [Thread-168888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:14:48.161 [DEBUG] [Thread-168888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:14:48.164 [DEBUG] [Thread-168888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:14:48.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:14:48.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:14:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:14:48.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:14:48.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:14:48.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:14:48.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:14:48.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:14:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:14:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.384842 -999.00  +12.90  11.03     97  +12.40 1 3 1 3 1   888    0 0.46 0.36 ----- 11.6 11.0 109.2 14.1 14.0 -0.7 14.1 -0.0 14.1 -0.2 14.3 -0.1
2026-04-11T11:14:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:14:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:14:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.384842
2026-04-11T11:14:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:14:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:14:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:14:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:14:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:14:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:14:25', tmtdew=0.10702, humidity=99.5901, cloud=0.0, wind=14.7863, temperature=12.9505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:14:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:14:48.187 [DEBUG] [Thread-168888] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:14:48.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:14:48.288 [DEBUG] [Thread-168891] [transport.py] [_log()] starting thread (client mode): 0xae5a68c0
2026-04-11T11:14:48.288 [DEBUG] [Thread-168891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:14:48.302 [DEBUG] [Thread-168891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:14:48.302 [INFO] [Thread-168891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] client lang: <none>
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] server lang: <none>
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] kex follows: False
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:14:48.310 [DEBUG] [Thread-168891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:14:48.311 [DEBUG] [Thread-168891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:14:48.311 [DEBUG] [Thread-168891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:14:48.311 [DEBUG] [Thread-168891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:14:48.311 [DEBUG] [Thread-168891] [transport.py] [_log()] Compression: none
2026-04-11T11:14:48.311 [DEBUG] [Thread-168891] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:14:48.368 [DEBUG] [Thread-168891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:14:48.369 [DEBUG] [Thread-168891] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:14:48.369 [DEBUG] [Thread-168891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:14:48.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:14:48.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:14:48.424 [DEBUG] [Thread-168891] [transport.py] [_log()] userauth is OK
2026-04-11T11:14:48.424 [DEBUG] [Thread-168891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:14:48.425 [DEBUG] [Thread-168891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:14:48.425 [DEBUG] [Thread-168891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:14:48.425 [DEBUG] [Thread-168891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:14:48.444 [INFO] [Thread-168891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:14:48.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:14:48.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:14:49.310 [DEBUG] [Thread-168891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:14:49.310 [DEBUG] [Thread-168891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:14:49.358 [DEBUG] [Thread-168891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:14:49.358 [DEBUG] [Thread-168891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:14:49.368 [DEBUG] [Thread-168891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:14:49.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:14:49.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-04-11T11:14:49.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-04-11T11:14:49.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:14:49.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:14:49.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:14:49.404 [DEBUG] [Thread-168891] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:14:50.661 [DEBUG] [Thread-168893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:01.458 [DEBUG] [Thread-168894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:05.724 [DEBUG] [Thread-168895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:15:19.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:15:19.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-04-11T11:15:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 15), 0.057035, 99.59, 0.0, 18.4201, 12.9505, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:15:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:15:00
2026-04-11T11:15:20.762 [DEBUG] [Thread-168896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:15:21.252 [DEBUG] [Thread-168897] [transport.py] [_log()] starting thread (client mode): 0xa79b55a0
2026-04-11T11:15:21.252 [DEBUG] [Thread-168897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:15:21.271 [DEBUG] [Thread-168897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:15:21.271 [INFO] [Thread-168897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:21.275 [DEBUG] [Thread-168897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] client lang: <none>
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] server lang: <none>
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] kex follows: False
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] Compression: none
2026-04-11T11:15:21.276 [DEBUG] [Thread-168897] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:15:21.294 [DEBUG] [Thread-168897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:15:21.295 [DEBUG] [Thread-168897] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:15:21.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:15:21.296 [DEBUG] [Thread-168897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:15:21.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:15:21.298 [DEBUG] [Thread-168897] [transport.py] [_log()] userauth is OK
2026-04-11T11:15:21.298 [DEBUG] [Thread-168897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:15:21.299 [DEBUG] [Thread-168897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:15:21.299 [DEBUG] [Thread-168897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:15:21.299 [DEBUG] [Thread-168897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:15:21.337 [INFO] [Thread-168897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:15:21.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:15:22.616 [DEBUG] [Thread-168897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:15:22.616 [DEBUG] [Thread-168897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:15:22.617 [DEBUG] [Thread-168897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:15:22.657 [DEBUG] [Thread-168897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:15:22.658 [DEBUG] [Thread-168897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:15:22.661 [DEBUG] [Thread-168897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:15:22.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:15:22.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:15:22.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:15:22.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:15:22.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:15:22.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:15:22.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:15:22.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:15:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:15:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.385189 -999.00  +12.80   8.35     97  +12.40 1 3 1 3 1   888    0 0.45 0.24 ----- 13.2 8.3 106.3 15.8 14.1 -0.1 14.1 -0.2 14.0 -0.3 14.2 -0.2
2026-04-11T11:15:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:15:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:15:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.385189
2026-04-11T11:15:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:15:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:15:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:15:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:15:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:15:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:15:00', tmtdew=0.057035, humidity=99.59, cloud=0.0, wind=18.4201, temperature=12.9505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:14:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:15:22.725 [DEBUG] [Thread-168897] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:15:22.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:15:22.819 [DEBUG] [Thread-168900] [transport.py] [_log()] starting thread (client mode): 0xb0f8df90
2026-04-11T11:15:22.820 [DEBUG] [Thread-168900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:15:22.836 [DEBUG] [Thread-168900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:15:22.837 [INFO] [Thread-168900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:15:22.857 [DEBUG] [Thread-168900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:15:22.857 [DEBUG] [Thread-168900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:15:22.857 [DEBUG] [Thread-168900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:15:22.857 [DEBUG] [Thread-168900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:22.857 [DEBUG] [Thread-168900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] client lang: <none>
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] server lang: <none>
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] kex follows: False
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] Compression: none
2026-04-11T11:15:22.858 [DEBUG] [Thread-168900] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:15:22.904 [DEBUG] [Thread-168900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:15:22.904 [DEBUG] [Thread-168900] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:15:22.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:15:22.906 [DEBUG] [Thread-168900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:15:22.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:15:22.960 [DEBUG] [Thread-168900] [transport.py] [_log()] userauth is OK
2026-04-11T11:15:22.960 [DEBUG] [Thread-168900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:15:22.960 [DEBUG] [Thread-168900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:15:22.961 [DEBUG] [Thread-168900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:15:22.961 [DEBUG] [Thread-168900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:15:22.985 [INFO] [Thread-168900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:15:22.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:15:22.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:15:23.821 [DEBUG] [Thread-168900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:15:23.822 [DEBUG] [Thread-168900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:15:23.870 [DEBUG] [Thread-168900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:15:23.870 [DEBUG] [Thread-168900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:15:23.879 [DEBUG] [Thread-168900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:15:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:15:23.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-04-11T11:15:23.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:15:23.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:15:23.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:15:23.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:15:23.917 [DEBUG] [Thread-168900] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:15:35.804 [DEBUG] [Thread-168902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:43.212 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:43.213 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:50.865 [DEBUG] [Thread-168903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:15:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:15:53.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:15:53.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-04-11T11:15:55.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 15, 36), 0.12944, 99.0806, 0.0, 22.3006, 13.3015, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:15:55.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:15:36
2026-04-11T11:15:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:15:55.784 [DEBUG] [Thread-168904] [transport.py] [_log()] starting thread (client mode): 0xa7952b90
2026-04-11T11:15:55.785 [DEBUG] [Thread-168904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:15:55.805 [DEBUG] [Thread-168904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:15:55.805 [INFO] [Thread-168904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:15:55.808 [DEBUG] [Thread-168904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:15:55.808 [DEBUG] [Thread-168904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:15:55.808 [DEBUG] [Thread-168904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:15:55.808 [DEBUG] [Thread-168904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:55.808 [DEBUG] [Thread-168904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:55.808 [DEBUG] [Thread-168904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] client lang: <none>
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] server lang: <none>
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] kex follows: False
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] Compression: none
2026-04-11T11:15:55.809 [DEBUG] [Thread-168904] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:15:55.827 [DEBUG] [Thread-168904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:15:55.827 [DEBUG] [Thread-168904] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:15:55.828 [DEBUG] [Thread-168904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:15:55.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:15:55.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:15:55.830 [DEBUG] [Thread-168904] [transport.py] [_log()] userauth is OK
2026-04-11T11:15:55.830 [DEBUG] [Thread-168904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:15:55.830 [DEBUG] [Thread-168904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:15:55.830 [DEBUG] [Thread-168904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:15:55.830 [DEBUG] [Thread-168904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:15:55.857 [INFO] [Thread-168904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:15:55.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:15:56.643 [DEBUG] [Thread-168904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:15:56.643 [DEBUG] [Thread-168904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:15:56.644 [DEBUG] [Thread-168904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:15:56.684 [DEBUG] [Thread-168904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:15:56.684 [DEBUG] [Thread-168904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:15:56.686 [DEBUG] [Thread-168904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:15:56.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:15:56.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:15:56.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:15:56.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:15:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:15:56.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:15:56.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.385537 -999.00  +12.80  10.74     97  +12.40 1 3 1 3 1   888    0 0.46 0.51 ----- 13.2 10.7 107.1 14.8 14.1 -0.8 14.1 -0.0 14.0 -0.3 14.3 -0.2
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.385537
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:15:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:15:56.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:15:36', tmtdew=0.12944, humidity=99.0806, cloud=0.0, wind=22.3006, temperature=13.3015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:15:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:15:56.707 [DEBUG] [Thread-168904] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:15:56.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:15:56.793 [DEBUG] [Thread-168907] [transport.py] [_log()] starting thread (client mode): 0xae52c040
2026-04-11T11:15:56.793 [DEBUG] [Thread-168907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:15:56.808 [DEBUG] [Thread-168907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:15:56.808 [INFO] [Thread-168907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:15:56.816 [DEBUG] [Thread-168907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:15:56.816 [DEBUG] [Thread-168907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:15:56.816 [DEBUG] [Thread-168907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:15:56.816 [DEBUG] [Thread-168907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:56.816 [DEBUG] [Thread-168907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:15:56.816 [DEBUG] [Thread-168907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] client lang: <none>
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] server lang: <none>
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] kex follows: False
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] Compression: none
2026-04-11T11:15:56.817 [DEBUG] [Thread-168907] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:15:56.877 [DEBUG] [Thread-168907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:15:56.877 [DEBUG] [Thread-168907] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:15:56.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:15:56.879 [DEBUG] [Thread-168907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:15:56.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:15:56.938 [DEBUG] [Thread-168907] [transport.py] [_log()] userauth is OK
2026-04-11T11:15:56.938 [DEBUG] [Thread-168907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:15:56.938 [DEBUG] [Thread-168907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:15:56.939 [DEBUG] [Thread-168907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:15:56.939 [DEBUG] [Thread-168907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:15:56.959 [INFO] [Thread-168907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:15:56.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:15:56.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:15:57.801 [DEBUG] [Thread-168907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:15:57.801 [DEBUG] [Thread-168907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:15:57.848 [DEBUG] [Thread-168907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:15:57.849 [DEBUG] [Thread-168907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:15:57.858 [DEBUG] [Thread-168907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:15:57.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:15:57.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-04-11T11:15:57.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:15:57.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:15:57.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:15:57.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:15:57.892 [DEBUG] [Thread-168907] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:16:01.501 [DEBUG] [Thread-168909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:16:05.899 [DEBUG] [Thread-168910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:16:20.947 [DEBUG] [Thread-168911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:16:27.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:16:27.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:16:27.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-04-11T11:16:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 16, 12), 0.06466, 99.5406, 0.0, 19.9202, 12.8178, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:16:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:16:12
2026-04-11T11:16:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:16:29.769 [DEBUG] [Thread-168912] [transport.py] [_log()] starting thread (client mode): 0xa79b5b10
2026-04-11T11:16:29.769 [DEBUG] [Thread-168912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:16:29.789 [DEBUG] [Thread-168912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:16:29.789 [INFO] [Thread-168912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:16:29.792 [DEBUG] [Thread-168912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:16:29.792 [DEBUG] [Thread-168912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] client lang: <none>
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] server lang: <none>
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] kex follows: False
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] Compression: none
2026-04-11T11:16:29.793 [DEBUG] [Thread-168912] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:16:29.810 [DEBUG] [Thread-168912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:16:29.811 [DEBUG] [Thread-168912] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:16:29.811 [DEBUG] [Thread-168912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:16:29.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:16:29.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:16:29.813 [DEBUG] [Thread-168912] [transport.py] [_log()] userauth is OK
2026-04-11T11:16:29.813 [DEBUG] [Thread-168912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:16:29.813 [DEBUG] [Thread-168912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:16:29.814 [DEBUG] [Thread-168912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:16:29.814 [DEBUG] [Thread-168912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:16:29.831 [INFO] [Thread-168912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:16:30.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:16:30.626 [DEBUG] [Thread-168912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:16:30.627 [DEBUG] [Thread-168912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:16:30.627 [DEBUG] [Thread-168912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:16:30.628 [DEBUG] [Thread-168912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:16:30.628 [DEBUG] [Thread-168912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:16:30.631 [DEBUG] [Thread-168912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:16:30.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:16:30.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:16:30.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:16:30.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:16:30.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:16:30.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:16:30.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:16:30.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:16:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:16:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.385884 -999.00  +12.80   9.70     97  +12.40 1 3 1 3 1   888    0 0.46 0.67 ----- 11.0 9.7 112.2 17.6 14.0 -0.5 14.1 -0.2 14.1 -0.2 14.3 -0.2
2026-04-11T11:16:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:16:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:16:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.385884
2026-04-11T11:16:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:16:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:16:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:16:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:16:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:16:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:16:12', tmtdew=0.06466, humidity=99.5406, cloud=0.0, wind=19.9202, temperature=12.8178, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:15:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:16:30.659 [DEBUG] [Thread-168912] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:16:30.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:16:30.752 [DEBUG] [Thread-168915] [transport.py] [_log()] starting thread (client mode): 0xa795f040
2026-04-11T11:16:30.752 [DEBUG] [Thread-168915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:16:30.768 [DEBUG] [Thread-168915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:16:30.768 [INFO] [Thread-168915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] client lang: <none>
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] server lang: <none>
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] kex follows: False
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:16:30.776 [DEBUG] [Thread-168915] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:16:30.777 [DEBUG] [Thread-168915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:16:30.777 [DEBUG] [Thread-168915] [transport.py] [_log()] Compression: none
2026-04-11T11:16:30.777 [DEBUG] [Thread-168915] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:16:30.834 [DEBUG] [Thread-168915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:16:30.834 [DEBUG] [Thread-168915] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:16:30.835 [DEBUG] [Thread-168915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:16:30.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:16:30.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:16:30.891 [DEBUG] [Thread-168915] [transport.py] [_log()] userauth is OK
2026-04-11T11:16:30.891 [DEBUG] [Thread-168915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:16:30.891 [DEBUG] [Thread-168915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:16:30.892 [DEBUG] [Thread-168915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:16:30.892 [DEBUG] [Thread-168915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:16:30.916 [INFO] [Thread-168915] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:16:30.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:16:30.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:16:31.748 [DEBUG] [Thread-168915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:16:31.748 [DEBUG] [Thread-168915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:16:31.796 [DEBUG] [Thread-168915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:16:31.796 [DEBUG] [Thread-168915] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:16:31.807 [DEBUG] [Thread-168915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:16:31.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:16:31.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:16:31.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-04-11T11:16:31.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:16:31.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:16:31.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:16:31.850 [DEBUG] [Thread-168915] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:16:35.988 [DEBUG] [Thread-168917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:16:43.355 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:16:43.356 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:16:51.040 [DEBUG] [Thread-168918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:01.533 [DEBUG] [Thread-168919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:17:01.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:17:01.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:17:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 16, 48), 0.13948, 99.0154, 0.0, 22.1947, 13.2028, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:17:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:16:48
2026-04-11T11:17:03.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:17:03.685 [DEBUG] [Thread-168920] [transport.py] [_log()] starting thread (client mode): 0xa795e560
2026-04-11T11:17:03.685 [DEBUG] [Thread-168920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:17:03.706 [DEBUG] [Thread-168920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:17:03.707 [INFO] [Thread-168920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:17:03.710 [DEBUG] [Thread-168920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:17:03.710 [DEBUG] [Thread-168920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] client lang: <none>
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] server lang: <none>
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] kex follows: False
2026-04-11T11:17:03.711 [DEBUG] [Thread-168920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:17:03.712 [DEBUG] [Thread-168920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:17:03.712 [DEBUG] [Thread-168920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:17:03.712 [DEBUG] [Thread-168920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:17:03.712 [DEBUG] [Thread-168920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:17:03.712 [DEBUG] [Thread-168920] [transport.py] [_log()] Compression: none
2026-04-11T11:17:03.712 [DEBUG] [Thread-168920] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:17:03.728 [DEBUG] [Thread-168920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:17:03.728 [DEBUG] [Thread-168920] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:17:03.729 [DEBUG] [Thread-168920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:17:03.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:17:03.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:17:03.731 [DEBUG] [Thread-168920] [transport.py] [_log()] userauth is OK
2026-04-11T11:17:03.731 [DEBUG] [Thread-168920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:17:03.731 [DEBUG] [Thread-168920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:17:03.731 [DEBUG] [Thread-168920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:17:03.732 [DEBUG] [Thread-168920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:17:03.755 [INFO] [Thread-168920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:17:03.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:17:04.558 [DEBUG] [Thread-168920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:17:04.558 [DEBUG] [Thread-168920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:17:04.559 [DEBUG] [Thread-168920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:17:04.599 [DEBUG] [Thread-168920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:17:04.599 [DEBUG] [Thread-168920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:17:04.603 [DEBUG] [Thread-168920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:17:04.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:17:04.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:17:04.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:17:04.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:17:04.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:17:04.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:17:04.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:17:04.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:17:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:17:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.386231 -999.00  +12.90  12.76     97  +12.40 1 3 1 3 1   888    0 0.47 0.69 ----- 11.3 12.8 118.2 16.2 14.1 -0.3 14.2 -0.2 14.0 -0.1 14.3 -0.2
2026-04-11T11:17:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:17:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:17:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.386231
2026-04-11T11:17:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:17:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:17:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:17:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:17:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:17:04.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:16:48', tmtdew=0.13948, humidity=99.0154, cloud=0.0, wind=22.1947, temperature=13.2028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:16:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:17:04.631 [DEBUG] [Thread-168920] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:17:04.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:17:04.729 [DEBUG] [Thread-168923] [transport.py] [_log()] starting thread (client mode): 0xa795cfa0
2026-04-11T11:17:04.729 [DEBUG] [Thread-168923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:17:04.748 [DEBUG] [Thread-168923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:17:04.749 [INFO] [Thread-168923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:17:04.756 [DEBUG] [Thread-168923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:17:04.757 [DEBUG] [Thread-168923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:17:04.757 [DEBUG] [Thread-168923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:17:04.757 [DEBUG] [Thread-168923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:04.757 [DEBUG] [Thread-168923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:04.757 [DEBUG] [Thread-168923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:04.757 [DEBUG] [Thread-168923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] client lang: <none>
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] server lang: <none>
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] kex follows: False
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:17:04.758 [DEBUG] [Thread-168923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:17:04.759 [DEBUG] [Thread-168923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:17:04.759 [DEBUG] [Thread-168923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:17:04.759 [DEBUG] [Thread-168923] [transport.py] [_log()] Compression: none
2026-04-11T11:17:04.759 [DEBUG] [Thread-168923] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:17:04.818 [DEBUG] [Thread-168923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:17:04.819 [DEBUG] [Thread-168923] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:17:04.819 [DEBUG] [Thread-168923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:17:04.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:17:04.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:17:04.877 [DEBUG] [Thread-168923] [transport.py] [_log()] userauth is OK
2026-04-11T11:17:04.877 [DEBUG] [Thread-168923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:17:04.877 [DEBUG] [Thread-168923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:17:04.878 [DEBUG] [Thread-168923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:17:04.878 [DEBUG] [Thread-168923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:17:04.897 [INFO] [Thread-168923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:17:04.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:17:04.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:17:05.780 [DEBUG] [Thread-168923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:17:05.781 [DEBUG] [Thread-168923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:17:05.828 [DEBUG] [Thread-168923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:17:05.828 [DEBUG] [Thread-168923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:17:05.837 [DEBUG] [Thread-168923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:17:05.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:17:05.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:17:05.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-04-11T11:17:05.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:17:05.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:17:05.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:17:05.875 [DEBUG] [Thread-168923] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:17:06.078 [DEBUG] [Thread-168925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:21.132 [DEBUG] [Thread-168926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:35.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:17:35.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:17:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:17:36.169 [DEBUG] [Thread-168927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:37.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 17, 23), 0.10694, 99.5906, 0.0, 18.1033, 12.9009, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:17:37.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:17:23
2026-04-11T11:17:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:17:37.706 [DEBUG] [Thread-168928] [transport.py] [_log()] starting thread (client mode): 0xa795f910
2026-04-11T11:17:37.706 [DEBUG] [Thread-168928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:17:37.726 [DEBUG] [Thread-168928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:17:37.727 [INFO] [Thread-168928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:17:37.730 [DEBUG] [Thread-168928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:17:37.731 [DEBUG] [Thread-168928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] client lang: <none>
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] server lang: <none>
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] kex follows: False
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:17:37.732 [DEBUG] [Thread-168928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:17:37.733 [DEBUG] [Thread-168928] [transport.py] [_log()] Compression: none
2026-04-11T11:17:37.733 [DEBUG] [Thread-168928] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:17:37.748 [DEBUG] [Thread-168928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:17:37.748 [DEBUG] [Thread-168928] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:17:37.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:17:37.749 [DEBUG] [Thread-168928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:17:37.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:17:37.751 [DEBUG] [Thread-168928] [transport.py] [_log()] userauth is OK
2026-04-11T11:17:37.751 [DEBUG] [Thread-168928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:17:37.751 [DEBUG] [Thread-168928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:17:37.752 [DEBUG] [Thread-168928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:17:37.752 [DEBUG] [Thread-168928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:17:37.766 [INFO] [Thread-168928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:17:37.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:17:38.505 [DEBUG] [Thread-168928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:17:38.506 [DEBUG] [Thread-168928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:17:38.506 [DEBUG] [Thread-168928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:17:38.547 [DEBUG] [Thread-168928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:17:38.548 [DEBUG] [Thread-168928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:17:38.552 [DEBUG] [Thread-168928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:17:38.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:17:38.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:17:38.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:17:38.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:17:38.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:17:38.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:17:38.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:17:38.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:17:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:17:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.386925 -999.00  +12.90  11.61     97  +12.40 1 3 1 3 1   888    0 0.48 1.26 ----- 13.9 11.6 97.9 20.1 14.1 -0.3 14.1 0.1 14.1 -0.2 14.3 -0.2
2026-04-11T11:17:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:17:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:17:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.386925
2026-04-11T11:17:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:17:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:17:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:17:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:17:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:17:38.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:17:23', tmtdew=0.10694, humidity=99.5906, cloud=0.0, wind=18.1033, temperature=12.9009, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:17:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:17:38.580 [DEBUG] [Thread-168928] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:17:38.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:17:38.671 [DEBUG] [Thread-168931] [transport.py] [_log()] starting thread (client mode): 0xa795df90
2026-04-11T11:17:38.671 [DEBUG] [Thread-168931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:17:38.685 [DEBUG] [Thread-168931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:17:38.685 [INFO] [Thread-168931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:17:38.693 [DEBUG] [Thread-168931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:17:38.693 [DEBUG] [Thread-168931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] client lang: <none>
2026-04-11T11:17:38.694 [DEBUG] [Thread-168931] [transport.py] [_log()] server lang: <none>
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] kex follows: False
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] Compression: none
2026-04-11T11:17:38.695 [DEBUG] [Thread-168931] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:17:38.751 [DEBUG] [Thread-168931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:17:38.752 [DEBUG] [Thread-168931] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:17:38.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:17:38.754 [DEBUG] [Thread-168931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:17:38.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:17:38.812 [DEBUG] [Thread-168931] [transport.py] [_log()] userauth is OK
2026-04-11T11:17:38.812 [DEBUG] [Thread-168931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:17:38.813 [DEBUG] [Thread-168931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:17:38.813 [DEBUG] [Thread-168931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:17:38.813 [DEBUG] [Thread-168931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:17:38.836 [INFO] [Thread-168931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:17:38.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:17:38.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:17:39.668 [DEBUG] [Thread-168931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:17:39.668 [DEBUG] [Thread-168931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:17:39.716 [DEBUG] [Thread-168931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:17:39.716 [DEBUG] [Thread-168931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:17:39.726 [DEBUG] [Thread-168931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:17:39.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11: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')
2026-04-11T11:17:39.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-04-11T11:17:39.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:17:39.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:17:39.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:17:39.768 [DEBUG] [Thread-168931] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:17:43.495 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:43.496 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:17:51.208 [DEBUG] [Thread-168933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:01.562 [DEBUG] [Thread-168934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:06.263 [DEBUG] [Thread-168935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:18:09.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:18:09.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-04-11T11:18:11.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 17, 59), 0.10438, 99.6072, 0.0, 18.6149, 12.9509, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:18:11.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:17:59
2026-04-11T11:18:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:18:11.718 [DEBUG] [Thread-168936] [transport.py] [_log()] starting thread (client mode): 0xa795d660
2026-04-11T11:18:11.719 [DEBUG] [Thread-168936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:18:11.743 [DEBUG] [Thread-168936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:18:11.743 [INFO] [Thread-168936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:18:11.746 [DEBUG] [Thread-168936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:18:11.746 [DEBUG] [Thread-168936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:18:11.746 [DEBUG] [Thread-168936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:18:11.746 [DEBUG] [Thread-168936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] client lang: <none>
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] server lang: <none>
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] kex follows: False
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] Compression: none
2026-04-11T11:18:11.747 [DEBUG] [Thread-168936] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:18:11.756 [DEBUG] [Thread-168936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:18:11.757 [DEBUG] [Thread-168936] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:18:11.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:18:11.758 [DEBUG] [Thread-168936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:18:11.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:18:11.760 [DEBUG] [Thread-168936] [transport.py] [_log()] userauth is OK
2026-04-11T11:18:11.760 [DEBUG] [Thread-168936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:18:11.760 [DEBUG] [Thread-168936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:18:11.760 [DEBUG] [Thread-168936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:18:11.760 [DEBUG] [Thread-168936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:18:11.784 [INFO] [Thread-168936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:18:11.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:18:12.615 [DEBUG] [Thread-168936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:18:12.615 [DEBUG] [Thread-168936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:18:12.616 [DEBUG] [Thread-168936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:18:12.656 [DEBUG] [Thread-168936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:18:12.656 [DEBUG] [Thread-168936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:18:12.658 [DEBUG] [Thread-168936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:18:12.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:18:12.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:18:12.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:18:12.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:18:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:18:12.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:18:12.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:18:12.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:18:12.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:18:12.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.387273 -999.00  +12.90  13.89     97  +12.40 1 3 1 3 1   888    0 0.48 1.39 ----- 15.1 13.9 123.4 16.2 14.1 -0.4 14.2 -0.0 14.1 -0.2 14.4 -0.2
2026-04-11T11:18:12.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:18:12.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:18:12.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.387273
2026-04-11T11:18:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:18:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:18:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:18:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:18:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:18:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:17:59', tmtdew=0.10438, humidity=99.6072, cloud=0.0, wind=18.6149, temperature=12.9509, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:17:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:18:12.681 [DEBUG] [Thread-168936] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:18:12.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:18:12.779 [DEBUG] [Thread-168939] [transport.py] [_log()] starting thread (client mode): 0xa795e770
2026-04-11T11:18:12.779 [DEBUG] [Thread-168939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:18:12.794 [DEBUG] [Thread-168939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:18:12.794 [INFO] [Thread-168939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:12.801 [DEBUG] [Thread-168939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] client lang: <none>
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] server lang: <none>
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] kex follows: False
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] Compression: none
2026-04-11T11:18:12.802 [DEBUG] [Thread-168939] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:18:12.860 [DEBUG] [Thread-168939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:18:12.861 [DEBUG] [Thread-168939] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:18:12.861 [DEBUG] [Thread-168939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:18:12.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:18:12.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:18:12.916 [DEBUG] [Thread-168939] [transport.py] [_log()] userauth is OK
2026-04-11T11:18:12.916 [DEBUG] [Thread-168939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:18:12.916 [DEBUG] [Thread-168939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:18:12.916 [DEBUG] [Thread-168939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:18:12.916 [DEBUG] [Thread-168939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:18:12.935 [INFO] [Thread-168939] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:18:12.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:18:12.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:18:13.752 [DEBUG] [Thread-168939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:18:13.752 [DEBUG] [Thread-168939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:18:13.799 [DEBUG] [Thread-168939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:18:13.800 [DEBUG] [Thread-168939] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:18:13.808 [DEBUG] [Thread-168939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:18:13.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:18:13.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-04-11T11:18:13.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-04-11T11:18:13.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:18:13.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:18:13.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:18:13.843 [DEBUG] [Thread-168939] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:18:21.298 [DEBUG] [Thread-168941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:36.361 [DEBUG] [Thread-168942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:43.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:43.639 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:18:43.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:18:43.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:18:43.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-04-11T11:18:45.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 18, 34), 0.10883, 99.214, 0.0, 22.7592, 13.4678, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:18:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:18:34
2026-04-11T11:18:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:18:45.724 [DEBUG] [Thread-168943] [transport.py] [_log()] starting thread (client mode): 0xa795d180
2026-04-11T11:18:45.724 [DEBUG] [Thread-168943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:18:45.744 [DEBUG] [Thread-168943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:18:45.744 [INFO] [Thread-168943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:18:45.747 [DEBUG] [Thread-168943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] client lang: <none>
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] server lang: <none>
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] kex follows: False
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] Compression: none
2026-04-11T11:18:45.748 [DEBUG] [Thread-168943] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:18:45.767 [DEBUG] [Thread-168943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:18:45.768 [DEBUG] [Thread-168943] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:18:45.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:18:45.769 [DEBUG] [Thread-168943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:18:45.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:18:45.771 [DEBUG] [Thread-168943] [transport.py] [_log()] userauth is OK
2026-04-11T11:18:45.771 [DEBUG] [Thread-168943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:18:45.771 [DEBUG] [Thread-168943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:18:45.771 [DEBUG] [Thread-168943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:18:45.772 [DEBUG] [Thread-168943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:18:45.796 [INFO] [Thread-168943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:18:45.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:18:46.629 [DEBUG] [Thread-168943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:18:46.629 [DEBUG] [Thread-168943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:18:46.629 [DEBUG] [Thread-168943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:18:46.670 [DEBUG] [Thread-168943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:18:46.670 [DEBUG] [Thread-168943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:18:46.673 [DEBUG] [Thread-168943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:18:46.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:18:46.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:18:46.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:18:46.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:18:46.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:18:46.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:18:46.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:18:46.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:18:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:18:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.387620 -999.00  +12.90  12.11     97  +12.40 1 3 1 3 1   888    0 0.50 1.73 ----- 11.3 12.1 70.3 17.3 14.1 0.1 14.2 -0.1 14.1 -0.4 14.4 -0.2
2026-04-11T11:18:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:18:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:18:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.387620
2026-04-11T11:18:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:18:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:18:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:18:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:18:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:18:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:18:34', tmtdew=0.10883, humidity=99.214, cloud=0.0, wind=22.7592, temperature=13.4678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:18:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:18:46.701 [DEBUG] [Thread-168943] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:18:46.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:18:46.795 [DEBUG] [Thread-168946] [transport.py] [_log()] starting thread (client mode): 0xa795ce50
2026-04-11T11:18:46.795 [DEBUG] [Thread-168946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:18:46.810 [DEBUG] [Thread-168946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:18:46.810 [INFO] [Thread-168946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:18:46.817 [DEBUG] [Thread-168946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] client lang: <none>
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] server lang: <none>
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] kex follows: False
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] Compression: none
2026-04-11T11:18:46.818 [DEBUG] [Thread-168946] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:18:46.874 [DEBUG] [Thread-168946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:18:46.875 [DEBUG] [Thread-168946] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:18:46.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:18:46.876 [DEBUG] [Thread-168946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:18:46.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:18:46.935 [DEBUG] [Thread-168946] [transport.py] [_log()] userauth is OK
2026-04-11T11:18:46.935 [DEBUG] [Thread-168946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:18:46.935 [DEBUG] [Thread-168946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:18:46.935 [DEBUG] [Thread-168946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:18:46.935 [DEBUG] [Thread-168946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:18:46.954 [INFO] [Thread-168946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:18:46.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:18:46.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:18:47.802 [DEBUG] [Thread-168946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:18:47.802 [DEBUG] [Thread-168946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:18:47.851 [DEBUG] [Thread-168946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:18:47.852 [DEBUG] [Thread-168946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:18:47.860 [DEBUG] [Thread-168946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:18:47.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:18:47.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-04-11T11:18:47.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-04-11T11:18:47.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:18:47.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:18:47.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:18:47.894 [DEBUG] [Thread-168946] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:18:51.401 [DEBUG] [Thread-168948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:01.604 [DEBUG] [Thread-168949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:06.453 [DEBUG] [Thread-168950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:17.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:19:17.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:19:17.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-04-11T11:19:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 19, 10), 0.10444, 99.6068, 0.0, 17.8034, 12.9838, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:19:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:19:10
2026-04-11T11:19:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:19:19.750 [DEBUG] [Thread-168951] [transport.py] [_log()] starting thread (client mode): 0xa795e590
2026-04-11T11:19:19.750 [DEBUG] [Thread-168951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:19:19.771 [DEBUG] [Thread-168951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:19:19.772 [INFO] [Thread-168951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] client lang: <none>
2026-04-11T11:19:19.773 [DEBUG] [Thread-168951] [transport.py] [_log()] server lang: <none>
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] kex follows: False
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] Compression: none
2026-04-11T11:19:19.774 [DEBUG] [Thread-168951] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:19:19.783 [DEBUG] [Thread-168951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:19:19.784 [DEBUG] [Thread-168951] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:19:19.784 [DEBUG] [Thread-168951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:19:19.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:19:19.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:19:19.786 [DEBUG] [Thread-168951] [transport.py] [_log()] userauth is OK
2026-04-11T11:19:19.787 [DEBUG] [Thread-168951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:19:19.787 [DEBUG] [Thread-168951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:19:19.787 [DEBUG] [Thread-168951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:19:19.787 [DEBUG] [Thread-168951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:19:19.806 [INFO] [Thread-168951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:19:19.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:19:20.593 [DEBUG] [Thread-168951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:19:20.593 [DEBUG] [Thread-168951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:19:20.594 [DEBUG] [Thread-168951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:19:20.634 [DEBUG] [Thread-168951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:19:20.634 [DEBUG] [Thread-168951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:19:20.638 [DEBUG] [Thread-168951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:19:20.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:19:20.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:19:20.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:19:20.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:19:20.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:19:20.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:19:20.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:19:20.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:19:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:19:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.387967 -999.00  +12.90   8.94     97  +12.50 1 3 1 3 1   888    0 0.48 1.34 ----- 8.1 8.9 99.6 15.8 14.2 -0.1 14.2 -0.1 14.1 -0.1 14.4 -0.4
2026-04-11T11:19:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:19:20.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:19:20.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.387967
2026-04-11T11:19:20.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:19:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:19:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:19:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:19:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:19:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:19:10', tmtdew=0.10444, humidity=99.6068, cloud=0.0, wind=17.8034, temperature=12.9838, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:18:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:19:20.666 [DEBUG] [Thread-168951] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:19:20.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:19:20.778 [DEBUG] [Thread-168954] [transport.py] [_log()] starting thread (client mode): 0xa795f790
2026-04-11T11:19:20.778 [DEBUG] [Thread-168954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:19:20.793 [DEBUG] [Thread-168954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:19:20.793 [INFO] [Thread-168954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:20.801 [DEBUG] [Thread-168954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] client lang: <none>
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] server lang: <none>
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] kex follows: False
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] Compression: none
2026-04-11T11:19:20.802 [DEBUG] [Thread-168954] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:19:20.861 [DEBUG] [Thread-168954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:19:20.861 [DEBUG] [Thread-168954] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:19:20.862 [DEBUG] [Thread-168954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:19:20.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:19:20.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:19:20.918 [DEBUG] [Thread-168954] [transport.py] [_log()] userauth is OK
2026-04-11T11:19:20.918 [DEBUG] [Thread-168954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:19:20.918 [DEBUG] [Thread-168954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:19:20.918 [DEBUG] [Thread-168954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:19:20.918 [DEBUG] [Thread-168954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:19:20.937 [INFO] [Thread-168954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:19:20.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:19:20.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:19:21.490 [DEBUG] [Thread-168956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:21.768 [DEBUG] [Thread-168954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:19:21.768 [DEBUG] [Thread-168954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:19:21.816 [DEBUG] [Thread-168954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:19:21.816 [DEBUG] [Thread-168954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:19:21.826 [DEBUG] [Thread-168954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:19:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:19:21.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-04-11T11:19:21.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-04-11T11:19:21.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:19:21.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:19:21.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:19:21.862 [DEBUG] [Thread-168954] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:19:36.535 [DEBUG] [Thread-168957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:43.778 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:43.779 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:51.573 [DEBUG] [Thread-168958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:19:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:19:51.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:19:51.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:19:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 19, 45), 0.10888, 99.2137, 0.0, 23.2531, 13.4676, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:19:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:19:45
2026-04-11T11:19:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:19:53.677 [DEBUG] [Thread-168959] [transport.py] [_log()] starting thread (client mode): 0xa795f640
2026-04-11T11:19:53.678 [DEBUG] [Thread-168959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:19:53.691 [DEBUG] [Thread-168959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:19:53.691 [INFO] [Thread-168959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:19:53.694 [DEBUG] [Thread-168959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] client lang: <none>
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] server lang: <none>
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] kex follows: False
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] Compression: none
2026-04-11T11:19:53.695 [DEBUG] [Thread-168959] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:19:53.713 [DEBUG] [Thread-168959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:19:53.714 [DEBUG] [Thread-168959] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:19:53.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:19:53.716 [DEBUG] [Thread-168959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:19:53.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:19:53.718 [DEBUG] [Thread-168959] [transport.py] [_log()] userauth is OK
2026-04-11T11:19:53.718 [DEBUG] [Thread-168959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:19:53.718 [DEBUG] [Thread-168959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:19:53.719 [DEBUG] [Thread-168959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:19:53.719 [DEBUG] [Thread-168959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:19:53.744 [INFO] [Thread-168959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:19:53.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:19:54.512 [DEBUG] [Thread-168959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:19:54.512 [DEBUG] [Thread-168959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:19:54.513 [DEBUG] [Thread-168959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:19:54.553 [DEBUG] [Thread-168959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:19:54.553 [DEBUG] [Thread-168959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:19:54.557 [DEBUG] [Thread-168959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:19:54.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:19:54.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:19:54.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:19:54.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:19:54.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:19:54.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:19:54.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:19:54.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:19:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:19:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.388314 -999.00  +12.90  17.29     97  +12.50 1 3 1 3 1   888    0 0.47 1.01 ----- 16.4 17.3 76.0 20.7 14.2 -0.4 14.2 -0.1 14.2 -0.2 14.4 -0.3
2026-04-11T11:19:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:19:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:19:54.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.388314
2026-04-11T11:19:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:19:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:19:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:19:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:19:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:19:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:19:45', tmtdew=0.10888, humidity=99.2137, cloud=0.0, wind=23.2531, temperature=13.4676, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:19:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:19:54.583 [DEBUG] [Thread-168959] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:19:54.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:19:54.678 [DEBUG] [Thread-168962] [transport.py] [_log()] starting thread (client mode): 0xa795f040
2026-04-11T11:19:54.678 [DEBUG] [Thread-168962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:19:54.693 [DEBUG] [Thread-168962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:19:54.693 [INFO] [Thread-168962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] client lang: <none>
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] server lang: <none>
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] kex follows: False
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:19:54.701 [DEBUG] [Thread-168962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:19:54.702 [DEBUG] [Thread-168962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:19:54.702 [DEBUG] [Thread-168962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:19:54.702 [DEBUG] [Thread-168962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:19:54.702 [DEBUG] [Thread-168962] [transport.py] [_log()] Compression: none
2026-04-11T11:19:54.702 [DEBUG] [Thread-168962] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:19:54.759 [DEBUG] [Thread-168962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:19:54.759 [DEBUG] [Thread-168962] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:19:54.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:19:54.761 [DEBUG] [Thread-168962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:19:54.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:19:54.815 [DEBUG] [Thread-168962] [transport.py] [_log()] userauth is OK
2026-04-11T11:19:54.815 [DEBUG] [Thread-168962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:19:54.816 [DEBUG] [Thread-168962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:19:54.816 [DEBUG] [Thread-168962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:19:54.816 [DEBUG] [Thread-168962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:19:54.835 [INFO] [Thread-168962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:19:54.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:19:54.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:19:55.662 [DEBUG] [Thread-168962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:19:55.662 [DEBUG] [Thread-168962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:19:55.710 [DEBUG] [Thread-168962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:19:55.711 [DEBUG] [Thread-168962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:19:55.720 [DEBUG] [Thread-168962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:19:55.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:19:55.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-04-11T11:19:55.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-04-11T11:19:55.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:19:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:19:55.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:19:55.757 [DEBUG] [Thread-168962] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:20:01.635 [DEBUG] [Thread-168964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:06.610 [DEBUG] [Thread-168965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:21.659 [DEBUG] [Thread-168966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:25.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:20:25.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:20:25.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-04-11T11:20:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 19, 45), 0.10888, 99.2137, 0.0, 23.2531, 13.4676, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:20:27.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:19:45
2026-04-11T11:20:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:20:27.710 [DEBUG] [Thread-168967] [transport.py] [_log()] starting thread (client mode): 0xa795f610
2026-04-11T11:20:27.711 [DEBUG] [Thread-168967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:20:27.732 [DEBUG] [Thread-168967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:20:27.732 [INFO] [Thread-168967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:20:27.735 [DEBUG] [Thread-168967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:20:27.735 [DEBUG] [Thread-168967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:20:27.735 [DEBUG] [Thread-168967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:20:27.735 [DEBUG] [Thread-168967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:20:27.735 [DEBUG] [Thread-168967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] client lang: <none>
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] server lang: <none>
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] kex follows: False
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] Compression: none
2026-04-11T11:20:27.736 [DEBUG] [Thread-168967] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:20:27.753 [DEBUG] [Thread-168967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:20:27.753 [DEBUG] [Thread-168967] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:20:27.754 [DEBUG] [Thread-168967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:20:27.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:20:27.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:20:27.755 [DEBUG] [Thread-168967] [transport.py] [_log()] userauth is OK
2026-04-11T11:20:27.755 [DEBUG] [Thread-168967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:20:27.756 [DEBUG] [Thread-168967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:20:27.756 [DEBUG] [Thread-168967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:20:27.756 [DEBUG] [Thread-168967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:20:27.777 [INFO] [Thread-168967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:20:27.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:20:28.596 [DEBUG] [Thread-168967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:20:28.596 [DEBUG] [Thread-168967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:20:28.596 [DEBUG] [Thread-168967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:20:28.637 [DEBUG] [Thread-168967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:20:28.637 [DEBUG] [Thread-168967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:20:28.640 [DEBUG] [Thread-168967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:20:28.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:20:28.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:20:28.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:20:28.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:20:28.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:20:28.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:20:28.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:20:28.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:20:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:20:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.388661 -999.00  +12.90  15.81     97  +12.40 1 3 1 3 1   888    0 0.47 0.85 ----- 11.4 15.8 94.7 22.4 14.2 0.0 14.2 -0.2 14.2 -0.6 14.4 -0.2
2026-04-11T11:20:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:20:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:20:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.388661
2026-04-11T11:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:20:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:19:45', tmtdew=0.10888, humidity=99.2137, cloud=0.0, wind=23.2531, temperature=13.4676, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:19:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:20:28.668 [DEBUG] [Thread-168967] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:20:28.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:20:28.763 [DEBUG] [Thread-168970] [transport.py] [_log()] starting thread (client mode): 0xa795e8f0
2026-04-11T11:20:28.763 [DEBUG] [Thread-168970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:20:28.777 [DEBUG] [Thread-168970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:20:28.778 [INFO] [Thread-168970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:20:28.785 [DEBUG] [Thread-168970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:20:28.786 [DEBUG] [Thread-168970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:20:28.786 [DEBUG] [Thread-168970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:20:28.786 [DEBUG] [Thread-168970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:20:28.786 [DEBUG] [Thread-168970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:20:28.786 [DEBUG] [Thread-168970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] client lang: <none>
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] server lang: <none>
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] kex follows: False
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] Compression: none
2026-04-11T11:20:28.787 [DEBUG] [Thread-168970] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:20:28.845 [DEBUG] [Thread-168970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:20:28.845 [DEBUG] [Thread-168970] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:20:28.846 [DEBUG] [Thread-168970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:20:28.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:20:28.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:20:28.900 [DEBUG] [Thread-168970] [transport.py] [_log()] userauth is OK
2026-04-11T11:20:28.900 [DEBUG] [Thread-168970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:20:28.900 [DEBUG] [Thread-168970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:20:28.901 [DEBUG] [Thread-168970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:20:28.901 [DEBUG] [Thread-168970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:20:28.920 [INFO] [Thread-168970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:20:28.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:20:28.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:20:29.795 [DEBUG] [Thread-168970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:20:29.796 [DEBUG] [Thread-168970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:20:29.844 [DEBUG] [Thread-168970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:20:29.844 [DEBUG] [Thread-168970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:20:29.854 [DEBUG] [Thread-168970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:20:29.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:20:29.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:20:29.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:20:29.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:20:29.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:20:29.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:20:29.890 [DEBUG] [Thread-168970] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:20:36.692 [DEBUG] [Thread-168972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:43.919 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:43.921 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:51.747 [DEBUG] [Thread-168973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:20:59.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:20:59.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:20:59.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:21:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 20, 20), 0.101895, 99.6233, 0.0, 18.562, 12.9671, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:21:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:20:20
2026-04-11T11:21:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:21:01.680 [DEBUG] [Thread-168974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:21:01.808 [DEBUG] [Thread-168975] [transport.py] [_log()] starting thread (client mode): 0xa79b6290
2026-04-11T11:21:01.808 [DEBUG] [Thread-168975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:21:01.829 [DEBUG] [Thread-168975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:21:01.829 [INFO] [Thread-168975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] client lang: <none>
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] server lang: <none>
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] kex follows: False
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] Compression: none
2026-04-11T11:21:01.832 [DEBUG] [Thread-168975] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:21:01.847 [DEBUG] [Thread-168975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:21:01.848 [DEBUG] [Thread-168975] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:21:01.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:21:01.848 [DEBUG] [Thread-168975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:21:01.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:21:01.851 [DEBUG] [Thread-168975] [transport.py] [_log()] userauth is OK
2026-04-11T11:21:01.851 [DEBUG] [Thread-168975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:21:01.851 [DEBUG] [Thread-168975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:21:01.851 [DEBUG] [Thread-168975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:21:01.851 [DEBUG] [Thread-168975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:21:01.887 [INFO] [Thread-168975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:21:01.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:21:02.705 [DEBUG] [Thread-168975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:21:02.705 [DEBUG] [Thread-168975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:21:02.705 [DEBUG] [Thread-168975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:21:02.746 [DEBUG] [Thread-168975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:21:02.746 [DEBUG] [Thread-168975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:21:02.749 [DEBUG] [Thread-168975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:21:02.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:21:02.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:21:02.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:21:02.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:21:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:21:02.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:21:02.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:21:02.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:21:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:21:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.389009 -999.00  +12.90  17.99     97  +12.40 1 3 1 3 1   888    0 0.47 0.70 ----- 19.2 18.0 55.6 22.3 14.2 -0.5 14.2 -0.3 14.2 0.0 14.4 -0.4
2026-04-11T11:21:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:21:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:21:02.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.389009
2026-04-11T11:21:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:21:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:21:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:21:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:21:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:21:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:20:20', tmtdew=0.101895, humidity=99.6233, cloud=0.0, wind=18.562, temperature=12.9671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:20:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:21:02.781 [DEBUG] [Thread-168975] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:21:02.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:21:02.876 [DEBUG] [Thread-168978] [transport.py] [_log()] starting thread (client mode): 0xa79b6320
2026-04-11T11:21:02.876 [DEBUG] [Thread-168978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:21:02.891 [DEBUG] [Thread-168978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:21:02.891 [INFO] [Thread-168978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:21:02.900 [DEBUG] [Thread-168978] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:21:02.900 [DEBUG] [Thread-168978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:21:02.900 [DEBUG] [Thread-168978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:21:02.900 [DEBUG] [Thread-168978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:02.900 [DEBUG] [Thread-168978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:02.900 [DEBUG] [Thread-168978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] client lang: <none>
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] server lang: <none>
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] kex follows: False
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:21:02.901 [DEBUG] [Thread-168978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:21:02.902 [DEBUG] [Thread-168978] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:21:02.902 [DEBUG] [Thread-168978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:21:02.902 [DEBUG] [Thread-168978] [transport.py] [_log()] Compression: none
2026-04-11T11:21:02.902 [DEBUG] [Thread-168978] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:21:02.960 [DEBUG] [Thread-168978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:21:02.961 [DEBUG] [Thread-168978] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:21:02.961 [DEBUG] [Thread-168978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:21:02.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:21:02.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:21:03.020 [DEBUG] [Thread-168978] [transport.py] [_log()] userauth is OK
2026-04-11T11:21:03.020 [DEBUG] [Thread-168978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:21:03.020 [DEBUG] [Thread-168978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:21:03.021 [DEBUG] [Thread-168978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:21:03.021 [DEBUG] [Thread-168978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:21:03.051 [INFO] [Thread-168978] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:21:03.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:21:03.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:21:03.914 [DEBUG] [Thread-168978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:21:03.915 [DEBUG] [Thread-168978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:21:03.963 [DEBUG] [Thread-168978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:21:03.963 [DEBUG] [Thread-168978] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:21:03.973 [DEBUG] [Thread-168978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:21:03.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:21:03.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:21:03.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-04-11T11:21:04.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:21:04.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:21:04.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:21:04.010 [DEBUG] [Thread-168978] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:21:06.783 [DEBUG] [Thread-168980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:21:21.833 [DEBUG] [Thread-168981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:21:34.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:21:34.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:21:34.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-04-11T11:21:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 20, 57), 0.10446, 99.6067, 0.0, 18.6685, 12.9671, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:21:35.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:20:57
2026-04-11T11:21:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:21:35.888 [DEBUG] [Thread-168982] [transport.py] [_log()] starting thread (client mode): 0xa79b4130
2026-04-11T11:21:35.888 [DEBUG] [Thread-168982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:21:35.910 [DEBUG] [Thread-168982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:21:35.911 [INFO] [Thread-168982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] client lang: <none>
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] server lang: <none>
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] kex follows: False
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:21:35.912 [DEBUG] [Thread-168982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:21:35.913 [DEBUG] [Thread-168982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:21:35.913 [DEBUG] [Thread-168982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:21:35.913 [DEBUG] [Thread-168982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:21:35.913 [DEBUG] [Thread-168982] [transport.py] [_log()] Compression: none
2026-04-11T11:21:35.913 [DEBUG] [Thread-168982] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:21:35.921 [DEBUG] [Thread-168982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:21:35.922 [DEBUG] [Thread-168982] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:21:35.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:21:35.923 [DEBUG] [Thread-168982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:21:35.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:21:35.924 [DEBUG] [Thread-168982] [transport.py] [_log()] userauth is OK
2026-04-11T11:21:35.924 [DEBUG] [Thread-168982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:21:35.925 [DEBUG] [Thread-168982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:21:35.925 [DEBUG] [Thread-168982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:21:35.925 [DEBUG] [Thread-168982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:21:35.960 [INFO] [Thread-168982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:21:35.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:21:36.774 [DEBUG] [Thread-168982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:21:36.774 [DEBUG] [Thread-168982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:21:36.774 [DEBUG] [Thread-168982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:21:36.815 [DEBUG] [Thread-168982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:21:36.816 [DEBUG] [Thread-168982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:21:36.819 [DEBUG] [Thread-168982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:21:36.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:21:36.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:21:36.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:21:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:21:36.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:21:36.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:21:36.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:21:36.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:21:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:21:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.389703 -999.00  +12.90  11.74     97  +12.40 1 3 1 3 1   888    0 0.47 1.12 ----- 16.1 11.7 125.8 20.0 14.1 -0.4 14.2 -0.2 14.2 -0.7 14.4 -0.2
2026-04-11T11:21:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:21:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:21:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.389703
2026-04-11T11:21:36.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:21:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:21:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:21:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:21:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:21:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:20:57', tmtdew=0.10446, humidity=99.6067, cloud=0.0, wind=18.6685, temperature=12.9671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:21:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:21:36.850 [DEBUG] [Thread-168982] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:21:36.869 [DEBUG] [Thread-168985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:21:36.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:21:36.957 [DEBUG] [Thread-168986] [transport.py] [_log()] starting thread (client mode): 0xa795f9a0
2026-04-11T11:21:36.957 [DEBUG] [Thread-168986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:21:36.972 [DEBUG] [Thread-168986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:21:36.972 [INFO] [Thread-168986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:21:36.980 [DEBUG] [Thread-168986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:21:36.980 [DEBUG] [Thread-168986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:21:36.980 [DEBUG] [Thread-168986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] client lang: <none>
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] server lang: <none>
2026-04-11T11:21:36.981 [DEBUG] [Thread-168986] [transport.py] [_log()] kex follows: False
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] Compression: none
2026-04-11T11:21:36.982 [DEBUG] [Thread-168986] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:21:37.039 [DEBUG] [Thread-168986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:21:37.039 [DEBUG] [Thread-168986] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:21:37.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:21:37.041 [DEBUG] [Thread-168986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:21:37.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:21:37.095 [DEBUG] [Thread-168986] [transport.py] [_log()] userauth is OK
2026-04-11T11:21:37.095 [DEBUG] [Thread-168986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:21:37.096 [DEBUG] [Thread-168986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:21:37.096 [DEBUG] [Thread-168986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:21:37.096 [DEBUG] [Thread-168986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:21:37.120 [INFO] [Thread-168986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:21:37.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:21:37.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:21:37.942 [DEBUG] [Thread-168986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:21:37.942 [DEBUG] [Thread-168986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:21:37.991 [DEBUG] [Thread-168986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:21:37.991 [DEBUG] [Thread-168986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:21:38.000 [DEBUG] [Thread-168986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:21:38.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:21:38.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-04-11T11:21:38.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-04-11T11:21:38.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:21:38.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:21:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:21:38.034 [DEBUG] [Thread-168986] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:21:44.061 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:21:44.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:21:51.919 [DEBUG] [Thread-168988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:01.732 [DEBUG] [Thread-168989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:06.957 [DEBUG] [Thread-168990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:08.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:22:08.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:22:08.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-04-11T11:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 21, 32), 0.1096, 99.5735, 0.0, 20.6266, 12.9671, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:21:32
2026-04-11T11:22:09.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:22:09.913 [DEBUG] [Thread-168991] [transport.py] [_log()] starting thread (client mode): 0xa795cf40
2026-04-11T11:22:09.914 [DEBUG] [Thread-168991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:22:09.929 [DEBUG] [Thread-168991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:22:09.930 [INFO] [Thread-168991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:22:09.932 [DEBUG] [Thread-168991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] client lang: <none>
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] server lang: <none>
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] kex follows: False
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] Compression: none
2026-04-11T11:22:09.933 [DEBUG] [Thread-168991] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:22:09.951 [DEBUG] [Thread-168991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:22:09.952 [DEBUG] [Thread-168991] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:22:09.952 [DEBUG] [Thread-168991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:22:09.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:22:09.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:22:09.954 [DEBUG] [Thread-168991] [transport.py] [_log()] userauth is OK
2026-04-11T11:22:09.955 [DEBUG] [Thread-168991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:22:09.955 [DEBUG] [Thread-168991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:22:09.955 [DEBUG] [Thread-168991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:22:09.955 [DEBUG] [Thread-168991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:22:09.976 [INFO] [Thread-168991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:22:09.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:22:10.779 [DEBUG] [Thread-168991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:22:10.779 [DEBUG] [Thread-168991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:22:10.780 [DEBUG] [Thread-168991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:22:10.820 [DEBUG] [Thread-168991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:22:10.820 [DEBUG] [Thread-168991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:22:10.823 [DEBUG] [Thread-168991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:22:10.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:22:10.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:22:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:22:10.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:22:10.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:22:10.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:22:10.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:22:10.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:22:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:22:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.390050 -999.00  +12.90  12.02     97  +12.40 1 3 1 3 1   888    0 0.48 1.51 ----- 10.4 12.0 101.2 19.0 14.1 -0.1 14.2 -0.2 14.2 -0.2 14.4 -0.7
2026-04-11T11:22:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:22:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:22:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.390050
2026-04-11T11:22:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:22:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:22:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:22:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:22:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:22:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:21:32', tmtdew=0.1096, humidity=99.5735, cloud=0.0, wind=20.6266, temperature=12.9671, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:21:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:22:10.847 [DEBUG] [Thread-168991] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:22:10.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:22:10.940 [DEBUG] [Thread-168994] [transport.py] [_log()] starting thread (client mode): 0xa795f250
2026-04-11T11:22:10.940 [DEBUG] [Thread-168994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:22:10.955 [DEBUG] [Thread-168994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:22:10.955 [INFO] [Thread-168994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:22:10.963 [DEBUG] [Thread-168994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:22:10.963 [DEBUG] [Thread-168994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] client lang: <none>
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] server lang: <none>
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] kex follows: False
2026-04-11T11:22:10.964 [DEBUG] [Thread-168994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:22:10.965 [DEBUG] [Thread-168994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:22:10.965 [DEBUG] [Thread-168994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:22:10.965 [DEBUG] [Thread-168994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:22:10.965 [DEBUG] [Thread-168994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:22:10.965 [DEBUG] [Thread-168994] [transport.py] [_log()] Compression: none
2026-04-11T11:22:10.965 [DEBUG] [Thread-168994] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:22:11.021 [DEBUG] [Thread-168994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:22:11.021 [DEBUG] [Thread-168994] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:22:11.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:22:11.022 [DEBUG] [Thread-168994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:22:11.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:22:11.078 [DEBUG] [Thread-168994] [transport.py] [_log()] userauth is OK
2026-04-11T11:22:11.078 [DEBUG] [Thread-168994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:22:11.078 [DEBUG] [Thread-168994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:22:11.078 [DEBUG] [Thread-168994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:22:11.078 [DEBUG] [Thread-168994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:22:11.100 [INFO] [Thread-168994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:22:11.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:22:11.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:22:11.942 [DEBUG] [Thread-168994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:22:11.943 [DEBUG] [Thread-168994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:22:11.991 [DEBUG] [Thread-168994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:22:11.991 [DEBUG] [Thread-168994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:22:12.001 [DEBUG] [Thread-168994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:22:12.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:22:12.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-04-11T11:22:12.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:22:12.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:22:12.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:22:12.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:22:12.039 [DEBUG] [Thread-168994] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:22:21.993 [DEBUG] [Thread-168996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:37.044 [DEBUG] [Thread-168997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:22:42.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:22: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-04-11T11:22:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 22, 8), 0.1096, 99.5735, 0.0, 19.8504, 12.9836, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:22:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:22:08
2026-04-11T11:22:43.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:22:43.949 [DEBUG] [Thread-168998] [transport.py] [_log()] starting thread (client mode): 0xa79b55a0
2026-04-11T11:22:43.949 [DEBUG] [Thread-168998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:22:43.964 [DEBUG] [Thread-168998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:22:43.964 [INFO] [Thread-168998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] client lang: <none>
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] server lang: <none>
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] kex follows: False
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] Compression: none
2026-04-11T11:22:43.967 [DEBUG] [Thread-168998] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:22:43.987 [DEBUG] [Thread-168998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:22:43.987 [DEBUG] [Thread-168998] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:22:43.988 [DEBUG] [Thread-168998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:22:43.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:22:43.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:22:43.990 [DEBUG] [Thread-168998] [transport.py] [_log()] userauth is OK
2026-04-11T11:22:43.990 [DEBUG] [Thread-168998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:22:43.990 [DEBUG] [Thread-168998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:22:43.990 [DEBUG] [Thread-168998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:22:43.990 [DEBUG] [Thread-168998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:22:44.010 [INFO] [Thread-168998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:22:44.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:22:44.201 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:44.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:22:44.734 [DEBUG] [Thread-168998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:22:44.734 [DEBUG] [Thread-168998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:22:44.735 [DEBUG] [Thread-168998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:22:44.775 [DEBUG] [Thread-168998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:22:44.776 [DEBUG] [Thread-168998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:22:44.779 [DEBUG] [Thread-168998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:22:44.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:22:44.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:22:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:22:44.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:22:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:22:44.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:22:44.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:22:44.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:22:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:22:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.390398 -999.00  +12.90  11.64     97  +12.40 1 3 1 3 1   888    0 0.50 1.57 ----- 15.0 11.6 117.3 19.4 14.2 0.0 14.2 -0.1 14.2 -0.2 14.4 -0.2
2026-04-11T11:22:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:22:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:22:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.390398
2026-04-11T11:22:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:22:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:22:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:22:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:22:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:22:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:22:08', tmtdew=0.1096, humidity=99.5735, cloud=0.0, wind=19.8504, temperature=12.9836, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:22:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:22:44.808 [DEBUG] [Thread-168998] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:22:44.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:22:44.901 [DEBUG] [Thread-169001] [transport.py] [_log()] starting thread (client mode): 0xa79b6380
2026-04-11T11:22:44.901 [DEBUG] [Thread-169001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:22:44.915 [DEBUG] [Thread-169001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:22:44.915 [INFO] [Thread-169001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] client lang: <none>
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] server lang: <none>
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] kex follows: False
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] Compression: none
2026-04-11T11:22:44.923 [DEBUG] [Thread-169001] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:22:44.984 [DEBUG] [Thread-169001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:22:44.985 [DEBUG] [Thread-169001] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:22:44.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:22:44.986 [DEBUG] [Thread-169001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:22:44.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:22:45.043 [DEBUG] [Thread-169001] [transport.py] [_log()] userauth is OK
2026-04-11T11:22:45.043 [DEBUG] [Thread-169001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:22:45.044 [DEBUG] [Thread-169001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:22:45.044 [DEBUG] [Thread-169001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:22:45.044 [DEBUG] [Thread-169001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:22:45.068 [INFO] [Thread-169001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:22:45.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:22:45.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:22:45.886 [DEBUG] [Thread-169001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:22:45.887 [DEBUG] [Thread-169001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:22:45.935 [DEBUG] [Thread-169001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:22:45.935 [DEBUG] [Thread-169001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:22:45.945 [DEBUG] [Thread-169001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:22:45.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:22:45.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:22:45.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:22:45.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:22:45.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:22:45.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:22:45.982 [DEBUG] [Thread-169001] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:22:52.083 [DEBUG] [Thread-169003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:01.785 [DEBUG] [Thread-169004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:07.137 [DEBUG] [Thread-169005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:23:15.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:23:15.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-04-11T11:23:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 22, 43), 0.11922, 99.1468, 0.0, 24.5585, 13.4009, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:23:17.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:22:43
2026-04-11T11:23:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:23:17.911 [DEBUG] [Thread-169006] [transport.py] [_log()] starting thread (client mode): 0xa795f880
2026-04-11T11:23:17.911 [DEBUG] [Thread-169006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:23:17.931 [DEBUG] [Thread-169006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:23:17.932 [INFO] [Thread-169006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:23:17.935 [DEBUG] [Thread-169006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:23:17.935 [DEBUG] [Thread-169006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:23:17.935 [DEBUG] [Thread-169006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:23:17.935 [DEBUG] [Thread-169006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:17.935 [DEBUG] [Thread-169006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:17.935 [DEBUG] [Thread-169006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] client lang: <none>
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] server lang: <none>
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] kex follows: False
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:23:17.936 [DEBUG] [Thread-169006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:23:17.937 [DEBUG] [Thread-169006] [transport.py] [_log()] Compression: none
2026-04-11T11:23:17.937 [DEBUG] [Thread-169006] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:23:17.946 [DEBUG] [Thread-169006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:23:17.946 [DEBUG] [Thread-169006] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:23:17.947 [DEBUG] [Thread-169006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:23:17.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:23:17.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:23:17.949 [DEBUG] [Thread-169006] [transport.py] [_log()] userauth is OK
2026-04-11T11:23:17.949 [DEBUG] [Thread-169006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:23:17.949 [DEBUG] [Thread-169006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:23:17.949 [DEBUG] [Thread-169006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:23:17.949 [DEBUG] [Thread-169006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:23:17.968 [INFO] [Thread-169006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:23:17.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:23:18.774 [DEBUG] [Thread-169006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:23:18.775 [DEBUG] [Thread-169006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:23:18.775 [DEBUG] [Thread-169006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:23:18.815 [DEBUG] [Thread-169006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:23:18.816 [DEBUG] [Thread-169006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:23:18.819 [DEBUG] [Thread-169006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:23:18.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:23:18.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:23:18.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:23:18.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:23:18.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:23:18.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:23:18.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:23:18.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:23:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:23:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.390745 -999.00  +12.90  17.93     97  +12.50 1 3 1 3 1   888    0 0.48 1.31 ----- 10.4 17.9 72.8 20.5 14.2 -0.3 14.2 -0.1 14.2 -0.2 14.4 -0.1
2026-04-11T11:23:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:23:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:23:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.390745
2026-04-11T11:23:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:23:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:23:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:23:18.847 [DEBUG] [Thread-169006] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:23:18.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:23:18.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:23:18.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:22:43', tmtdew=0.11922, humidity=99.1468, cloud=0.0, wind=24.5585, temperature=13.4009, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:22:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:23: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-04-11T11:23:18.940 [DEBUG] [Thread-169009] [transport.py] [_log()] starting thread (client mode): 0xa795c3a0
2026-04-11T11:23:18.940 [DEBUG] [Thread-169009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:23:18.955 [DEBUG] [Thread-169009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:23:18.955 [INFO] [Thread-169009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:23:18.962 [DEBUG] [Thread-169009] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] client lang: <none>
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] server lang: <none>
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] kex follows: False
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] Compression: none
2026-04-11T11:23:18.963 [DEBUG] [Thread-169009] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:23:19.023 [DEBUG] [Thread-169009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:23:19.024 [DEBUG] [Thread-169009] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:23:19.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:23:19.025 [DEBUG] [Thread-169009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:23:19.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:23:19.085 [DEBUG] [Thread-169009] [transport.py] [_log()] userauth is OK
2026-04-11T11:23:19.085 [DEBUG] [Thread-169009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:23:19.085 [DEBUG] [Thread-169009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:23:19.085 [DEBUG] [Thread-169009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:23:19.085 [DEBUG] [Thread-169009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:23:19.110 [INFO] [Thread-169009] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:23:19.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:23:19.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:23:20.022 [DEBUG] [Thread-169009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:23:20.023 [DEBUG] [Thread-169009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:23:20.070 [DEBUG] [Thread-169009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:23:20.070 [DEBUG] [Thread-169009] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:23:20.079 [DEBUG] [Thread-169009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:23:20.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:23:20.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:23:20.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:23:20.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:23:20.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:23:20.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:23:20.116 [DEBUG] [Thread-169009] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:23:22.175 [DEBUG] [Thread-169011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:37.225 [DEBUG] [Thread-169012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:44.345 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:44.346 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:23:50.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:23:50.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:23:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 23, 19), 0.10705, 99.59, 0.0, 17.9622, 12.967, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:23:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:23:19
2026-04-11T11:23:51.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:23:51.939 [DEBUG] [Thread-169013] [transport.py] [_log()] starting thread (client mode): 0xa795d180
2026-04-11T11:23:51.939 [DEBUG] [Thread-169013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:23:51.961 [DEBUG] [Thread-169013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:23:51.961 [INFO] [Thread-169013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:23:51.964 [DEBUG] [Thread-169013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:23:51.964 [DEBUG] [Thread-169013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] client lang: <none>
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] server lang: <none>
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] kex follows: False
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:23:51.965 [DEBUG] [Thread-169013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:23:51.966 [DEBUG] [Thread-169013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:23:51.966 [DEBUG] [Thread-169013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:23:51.966 [DEBUG] [Thread-169013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:23:51.966 [DEBUG] [Thread-169013] [transport.py] [_log()] Compression: none
2026-04-11T11:23:51.966 [DEBUG] [Thread-169013] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:23:51.984 [DEBUG] [Thread-169013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:23:51.985 [DEBUG] [Thread-169013] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:23:51.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:23:51.986 [DEBUG] [Thread-169013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:23:51.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:23:51.988 [DEBUG] [Thread-169013] [transport.py] [_log()] userauth is OK
2026-04-11T11:23:51.988 [DEBUG] [Thread-169013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:23:51.988 [DEBUG] [Thread-169013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:23:51.988 [DEBUG] [Thread-169013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:23:51.989 [DEBUG] [Thread-169013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:23:52.004 [INFO] [Thread-169013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:23:52.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:23:52.261 [DEBUG] [Thread-169015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:23:52.807 [DEBUG] [Thread-169013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:23:52.808 [DEBUG] [Thread-169013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:23:52.808 [DEBUG] [Thread-169013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:23:52.849 [DEBUG] [Thread-169013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:23:52.849 [DEBUG] [Thread-169013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:23:52.853 [DEBUG] [Thread-169013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:23:52.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:23:52.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:23:52.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:23:52.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:23:52.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:23:52.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:23:52.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:23:52.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:23:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:23:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.391092 -999.00  +12.90  12.67     97  +12.50 1 3 1 3 1   888    0 0.47 0.94 ----- 13.3 12.7 79.1 21.8 14.2 -0.2 14.2 -0.1 14.2 -0.3 14.5 -0.0
2026-04-11T11:23:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:23:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:23:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.391092
2026-04-11T11:23:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:23:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:23:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:23:52.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:23:52.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:23:52.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:23:19', tmtdew=0.10705, humidity=99.59, cloud=0.0, wind=17.9622, temperature=12.967, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:23:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:23:52.880 [DEBUG] [Thread-169013] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:23:52.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:23:52.973 [DEBUG] [Thread-169017] [transport.py] [_log()] starting thread (client mode): 0xa795fbe0
2026-04-11T11:23:52.974 [DEBUG] [Thread-169017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:23:52.988 [DEBUG] [Thread-169017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:23:52.989 [INFO] [Thread-169017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:23:52.996 [DEBUG] [Thread-169017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] client lang: <none>
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] server lang: <none>
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] kex follows: False
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:23:52.997 [DEBUG] [Thread-169017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:23:52.998 [DEBUG] [Thread-169017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:23:52.998 [DEBUG] [Thread-169017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:23:52.998 [DEBUG] [Thread-169017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:23:52.998 [DEBUG] [Thread-169017] [transport.py] [_log()] Compression: none
2026-04-11T11:23:52.998 [DEBUG] [Thread-169017] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:23:53.058 [DEBUG] [Thread-169017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:23:53.059 [DEBUG] [Thread-169017] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:23:53.059 [DEBUG] [Thread-169017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:23:53.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:23:53.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:23:53.118 [DEBUG] [Thread-169017] [transport.py] [_log()] userauth is OK
2026-04-11T11:23:53.118 [DEBUG] [Thread-169017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:23:53.119 [DEBUG] [Thread-169017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:23:53.119 [DEBUG] [Thread-169017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:23:53.119 [DEBUG] [Thread-169017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:23:53.146 [INFO] [Thread-169017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:23:53.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:23:53.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:23:53.963 [DEBUG] [Thread-169017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:23:53.963 [DEBUG] [Thread-169017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:23:54.011 [DEBUG] [Thread-169017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:23:54.011 [DEBUG] [Thread-169017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:23:54.021 [DEBUG] [Thread-169017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:23:54.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:23:54.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-04-11T11:23:54.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-04-11T11:23:54.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:23:54.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:23:54.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:23:54.060 [DEBUG] [Thread-169017] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:24:01.848 [DEBUG] [Thread-169019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:07.298 [DEBUG] [Thread-169020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:22.354 [DEBUG] [Thread-169021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:24.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:24:24.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:24:24.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:24:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 23, 54), 0.12436, 99.1135, 0.0, 22.8298, 13.3676, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:24:25.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:23:54
2026-04-11T11:24:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:24:25.909 [DEBUG] [Thread-169022] [transport.py] [_log()] starting thread (client mode): 0xa79b51e0
2026-04-11T11:24:25.910 [DEBUG] [Thread-169022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:24:25.931 [DEBUG] [Thread-169022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:24:25.931 [INFO] [Thread-169022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] client lang: <none>
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] server lang: <none>
2026-04-11T11:24:25.935 [DEBUG] [Thread-169022] [transport.py] [_log()] kex follows: False
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] Compression: none
2026-04-11T11:24:25.936 [DEBUG] [Thread-169022] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:24:25.953 [DEBUG] [Thread-169022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:24:25.954 [DEBUG] [Thread-169022] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:24:25.954 [DEBUG] [Thread-169022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:24:25.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:24:25.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:24:25.957 [DEBUG] [Thread-169022] [transport.py] [_log()] userauth is OK
2026-04-11T11:24:25.957 [DEBUG] [Thread-169022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:24:25.957 [DEBUG] [Thread-169022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:24:25.957 [DEBUG] [Thread-169022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:24:25.957 [DEBUG] [Thread-169022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:24:25.975 [INFO] [Thread-169022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:24:25.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:24:26.756 [DEBUG] [Thread-169022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:24:26.756 [DEBUG] [Thread-169022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:24:26.756 [DEBUG] [Thread-169022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:24:26.797 [DEBUG] [Thread-169022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:24:26.797 [DEBUG] [Thread-169022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:24:26.800 [DEBUG] [Thread-169022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:24:26.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:24:26.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:24:26.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:24:26.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:24:26.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:24:26.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:24:26.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:24:26.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:24:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:24:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.391439 -999.00  +13.00   9.37     97  +12.50 1 3 1 3 1   888    0 0.48 0.92 ----- 9.3 9.4 72.3 22.5 14.2 -0.3 14.3 -0.1 14.2 -0.2 14.4 -0.2
2026-04-11T11:24:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:24:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:24:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.391439
2026-04-11T11:24:26.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:24:26.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:24:26.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:24:26.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:24:26.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:24:26.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:23:54', tmtdew=0.12436, humidity=99.1135, cloud=0.0, wind=22.8298, temperature=13.3676, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:23:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:24:26.831 [DEBUG] [Thread-169022] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:24: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-04-11T11:24:26.925 [DEBUG] [Thread-169025] [transport.py] [_log()] starting thread (client mode): 0xa79b7b20
2026-04-11T11:24:26.925 [DEBUG] [Thread-169025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:24:26.943 [DEBUG] [Thread-169025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:24:26.943 [INFO] [Thread-169025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:24:26.950 [DEBUG] [Thread-169025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] client lang: <none>
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] server lang: <none>
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] kex follows: False
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:24:26.951 [DEBUG] [Thread-169025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:24:26.952 [DEBUG] [Thread-169025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:24:26.952 [DEBUG] [Thread-169025] [transport.py] [_log()] Compression: none
2026-04-11T11:24:26.952 [DEBUG] [Thread-169025] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:24:27.011 [DEBUG] [Thread-169025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:24:27.011 [DEBUG] [Thread-169025] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:24:27.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:24:27.013 [DEBUG] [Thread-169025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:24:27.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:24:27.077 [DEBUG] [Thread-169025] [transport.py] [_log()] userauth is OK
2026-04-11T11:24:27.077 [DEBUG] [Thread-169025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:24:27.077 [DEBUG] [Thread-169025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:24:27.077 [DEBUG] [Thread-169025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:24:27.078 [DEBUG] [Thread-169025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:24:27.104 [INFO] [Thread-169025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:24: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-04-11T11:24:27.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:24:27.951 [DEBUG] [Thread-169025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:24:27.952 [DEBUG] [Thread-169025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:24:27.999 [DEBUG] [Thread-169025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:24:28.000 [DEBUG] [Thread-169025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:24:28.008 [DEBUG] [Thread-169025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:24:28.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:24:28.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-04-11T11:24:28.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:24:28.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:24:28.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:24:28.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:24:28.043 [DEBUG] [Thread-169025] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:24:37.390 [DEBUG] [Thread-169027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:44.490 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:44.491 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:52.443 [DEBUG] [Thread-169028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:24:58.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:24:58.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:24: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-04-11T11:24:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 24, 29), 0.059625, 99.5733, 0.0, 18.7207, 12.967, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:24:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:24:29
2026-04-11T11:24:59.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:24:59.972 [DEBUG] [Thread-169029] [transport.py] [_log()] starting thread (client mode): 0xa795c130
2026-04-11T11:24:59.972 [DEBUG] [Thread-169029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:24:59.993 [DEBUG] [Thread-169029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:24:59.993 [INFO] [Thread-169029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] client lang: <none>
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] server lang: <none>
2026-04-11T11:24:59.996 [DEBUG] [Thread-169029] [transport.py] [_log()] kex follows: False
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] Compression: none
2026-04-11T11:24:59.997 [DEBUG] [Thread-169029] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:25:00.013 [DEBUG] [Thread-169029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:25:00.014 [DEBUG] [Thread-169029] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:25:00.014 [DEBUG] [Thread-169029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:25:00.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:25:00.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:25:00.016 [DEBUG] [Thread-169029] [transport.py] [_log()] userauth is OK
2026-04-11T11:25:00.016 [DEBUG] [Thread-169029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:25:00.017 [DEBUG] [Thread-169029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:25:00.017 [DEBUG] [Thread-169029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:25:00.017 [DEBUG] [Thread-169029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:25:00.052 [INFO] [Thread-169029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:25:00.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:25:00.888 [DEBUG] [Thread-169029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:25:00.888 [DEBUG] [Thread-169029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:25:00.889 [DEBUG] [Thread-169029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:25:00.929 [DEBUG] [Thread-169029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:25:00.929 [DEBUG] [Thread-169029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:25:00.931 [DEBUG] [Thread-169029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:25:00.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:25:00.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:25:00.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:25:00.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:25:00.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:25:00.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:25:00.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.391786 -999.00  +12.90  14.46     97  +12.50 1 3 1 3 1   888    0 0.47 0.58 ----- 11.8 14.5 94.8 23.0 14.2 0.0 14.3 0.0 14.2 -0.4 14.4 -0.1
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.391786
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:25:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:24:29', tmtdew=0.059625, humidity=99.5733, cloud=0.0, wind=18.7207, temperature=12.967, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:24:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:25:00.952 [DEBUG] [Thread-169029] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:25:01.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:25:01.037 [DEBUG] [Thread-169032] [transport.py] [_log()] starting thread (client mode): 0xa795d1e0
2026-04-11T11:25:01.037 [DEBUG] [Thread-169032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:25:01.051 [DEBUG] [Thread-169032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:25:01.052 [INFO] [Thread-169032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:25:01.059 [DEBUG] [Thread-169032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] client lang: <none>
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] server lang: <none>
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] kex follows: False
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] Compression: none
2026-04-11T11:25:01.060 [DEBUG] [Thread-169032] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:25:01.121 [DEBUG] [Thread-169032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:25:01.122 [DEBUG] [Thread-169032] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:25:01.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:25:01.123 [DEBUG] [Thread-169032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:25:01.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:25:01.179 [DEBUG] [Thread-169032] [transport.py] [_log()] userauth is OK
2026-04-11T11:25:01.179 [DEBUG] [Thread-169032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:25:01.179 [DEBUG] [Thread-169032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:25:01.179 [DEBUG] [Thread-169032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:25:01.179 [DEBUG] [Thread-169032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:25:01.205 [INFO] [Thread-169032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:25:01.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:25:01.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:25:01.911 [DEBUG] [Thread-169034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:25:02.104 [DEBUG] [Thread-169032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:25:02.104 [DEBUG] [Thread-169032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:25:02.154 [DEBUG] [Thread-169032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:25:02.154 [DEBUG] [Thread-169032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:25:02.163 [DEBUG] [Thread-169032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:25:02.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:25:02.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-04-11T11:25:02.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:25:02.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:25:02.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:25:02.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:25:02.206 [DEBUG] [Thread-169032] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:25:07.479 [DEBUG] [Thread-169035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:25:22.533 [DEBUG] [Thread-169036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:25:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:25:32.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:25:32.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-04-11T11:25:33.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 25, 5), 0.064755, 99.5401, 0.0, 17.239, 12.9504, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:25:33.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:25:05
2026-04-11T11:25:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:25:34.109 [DEBUG] [Thread-169037] [transport.py] [_log()] starting thread (client mode): 0xa795f010
2026-04-11T11:25:34.109 [DEBUG] [Thread-169037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:25:34.130 [DEBUG] [Thread-169037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:25:34.130 [INFO] [Thread-169037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:25:34.133 [DEBUG] [Thread-169037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] client lang: <none>
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] server lang: <none>
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] kex follows: False
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:25:34.134 [DEBUG] [Thread-169037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:25:34.135 [DEBUG] [Thread-169037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:25:34.135 [DEBUG] [Thread-169037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:25:34.135 [DEBUG] [Thread-169037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:25:34.135 [DEBUG] [Thread-169037] [transport.py] [_log()] Compression: none
2026-04-11T11:25:34.135 [DEBUG] [Thread-169037] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:25:34.154 [DEBUG] [Thread-169037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:25:34.155 [DEBUG] [Thread-169037] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:25:34.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:25:34.156 [DEBUG] [Thread-169037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:25:34.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:25:34.158 [DEBUG] [Thread-169037] [transport.py] [_log()] userauth is OK
2026-04-11T11:25:34.158 [DEBUG] [Thread-169037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:25:34.158 [DEBUG] [Thread-169037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:25:34.159 [DEBUG] [Thread-169037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:25:34.159 [DEBUG] [Thread-169037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:25:34.181 [INFO] [Thread-169037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:25:34.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:25:34.952 [DEBUG] [Thread-169037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:25:34.952 [DEBUG] [Thread-169037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:25:34.953 [DEBUG] [Thread-169037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:25:34.993 [DEBUG] [Thread-169037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:25:34.993 [DEBUG] [Thread-169037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:25:34.997 [DEBUG] [Thread-169037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:25:35.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:25:35.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:25:35.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:25:35.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:25:35.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:25:35.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:25:35.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:25:35.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:25:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:25:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.392481 -999.00  +12.90  10.27     97  +12.50 1 3 1 3 1   888    0 0.46 0.30 ----- 15.1 10.3 112.8 18.1 14.2 -0.4 14.3 -0.2 14.2 -0.3 14.5 -0.4
2026-04-11T11:25:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:25:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:25:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.392481
2026-04-11T11:25:35.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:25:35.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:25:35.023 [DEBUG] [Thread-169037] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:25:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:25:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:25:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:25:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:25:05', tmtdew=0.064755, humidity=99.5401, cloud=0.0, wind=17.239, temperature=12.9504, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:25:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:25:35.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:25:35.116 [DEBUG] [Thread-169040] [transport.py] [_log()] starting thread (client mode): 0xa79b63b0
2026-04-11T11:25:35.117 [DEBUG] [Thread-169040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:25:35.132 [DEBUG] [Thread-169040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:25:35.132 [INFO] [Thread-169040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:25:35.140 [DEBUG] [Thread-169040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:25:35.140 [DEBUG] [Thread-169040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:25:35.140 [DEBUG] [Thread-169040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:25:35.140 [DEBUG] [Thread-169040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:25:35.140 [DEBUG] [Thread-169040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:25:35.140 [DEBUG] [Thread-169040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] client lang: <none>
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] server lang: <none>
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] kex follows: False
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] Compression: none
2026-04-11T11:25:35.141 [DEBUG] [Thread-169040] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:25:35.198 [DEBUG] [Thread-169040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:25:35.199 [DEBUG] [Thread-169040] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:25:35.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:25:35.200 [DEBUG] [Thread-169040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:25:35.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:25:35.258 [DEBUG] [Thread-169040] [transport.py] [_log()] userauth is OK
2026-04-11T11:25:35.258 [DEBUG] [Thread-169040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:25:35.258 [DEBUG] [Thread-169040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:25:35.259 [DEBUG] [Thread-169040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:25:35.259 [DEBUG] [Thread-169040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:25:35.278 [INFO] [Thread-169040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:25:35.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:25:35.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:25:36.090 [DEBUG] [Thread-169040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:25:36.090 [DEBUG] [Thread-169040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:25:36.138 [DEBUG] [Thread-169040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:25:36.138 [DEBUG] [Thread-169040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:25:36.147 [DEBUG] [Thread-169040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:25:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:25:36.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-04-11T11:25:36.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-04-11T11:25:36.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:25:36.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:25:36.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:25:36.184 [DEBUG] [Thread-169040] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:25:37.570 [DEBUG] [Thread-169042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:25:44.640 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:25:44.641 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:25:52.615 [DEBUG] [Thread-169043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:01.975 [DEBUG] [Thread-169044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:06.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:26:06.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:26:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:26:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 25, 40), 0.11413, 99.1797, 0.0, 21.7361, 13.467, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:26:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:25:40
2026-04-11T11:26:07.652 [DEBUG] [Thread-169045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:26:07.990 [DEBUG] [Thread-169046] [transport.py] [_log()] starting thread (client mode): 0xe6a3b730
2026-04-11T11:26:07.990 [DEBUG] [Thread-169046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:26:08.011 [DEBUG] [Thread-169046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:26:08.011 [INFO] [Thread-169046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] client lang: <none>
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] server lang: <none>
2026-04-11T11:26:08.014 [DEBUG] [Thread-169046] [transport.py] [_log()] kex follows: False
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] Compression: none
2026-04-11T11:26:08.015 [DEBUG] [Thread-169046] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:26:08.023 [DEBUG] [Thread-169046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:26:08.024 [DEBUG] [Thread-169046] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:26:08.024 [DEBUG] [Thread-169046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:26:08.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:26:08.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:26:08.026 [DEBUG] [Thread-169046] [transport.py] [_log()] userauth is OK
2026-04-11T11:26:08.026 [DEBUG] [Thread-169046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:26:08.026 [DEBUG] [Thread-169046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:26:08.026 [DEBUG] [Thread-169046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:26:08.026 [DEBUG] [Thread-169046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:26:08.044 [INFO] [Thread-169046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:26:08.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:26:08.811 [DEBUG] [Thread-169046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:26:08.811 [DEBUG] [Thread-169046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:26:08.811 [DEBUG] [Thread-169046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:26:08.852 [DEBUG] [Thread-169046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:26:08.852 [DEBUG] [Thread-169046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:26:08.856 [DEBUG] [Thread-169046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:26:08.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:26:08.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:26:08.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:26:08.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:26:08.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:26:08.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:26:08.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:26:08.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:26:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:26:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.392828 -999.00  +12.90  13.56     97  +12.50 1 3 1 3 1   888    0 0.46 0.26 ----- 12.1 13.6 124.2 19.6 14.3 -0.3 14.3 -0.1 14.2 -0.5 14.5 -0.2
2026-04-11T11:26:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:26:08.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:26:08.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.392828
2026-04-11T11:26:08.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:26:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:26:08.883 [DEBUG] [Thread-169046] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:26:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:26:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:26:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:26:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:25:40', tmtdew=0.11413, humidity=99.1797, cloud=0.0, wind=21.7361, temperature=13.467, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:25:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:26:08.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:26:08.973 [DEBUG] [Thread-169049] [transport.py] [_log()] starting thread (client mode): 0xae52f6a0
2026-04-11T11:26:08.973 [DEBUG] [Thread-169049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:26:08.989 [DEBUG] [Thread-169049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:26:08.989 [INFO] [Thread-169049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] client lang: <none>
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] server lang: <none>
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] kex follows: False
2026-04-11T11:26:08.997 [DEBUG] [Thread-169049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:26:08.998 [DEBUG] [Thread-169049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:26:08.998 [DEBUG] [Thread-169049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:26:08.998 [DEBUG] [Thread-169049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:26:08.998 [DEBUG] [Thread-169049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:26:08.998 [DEBUG] [Thread-169049] [transport.py] [_log()] Compression: none
2026-04-11T11:26:08.998 [DEBUG] [Thread-169049] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:26:09.056 [DEBUG] [Thread-169049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:26:09.057 [DEBUG] [Thread-169049] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:26:09.058 [DEBUG] [Thread-169049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:26:09.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:26:09.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:26:09.113 [DEBUG] [Thread-169049] [transport.py] [_log()] userauth is OK
2026-04-11T11:26:09.113 [DEBUG] [Thread-169049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:26:09.113 [DEBUG] [Thread-169049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:26:09.113 [DEBUG] [Thread-169049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:26:09.114 [DEBUG] [Thread-169049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:26:09.132 [INFO] [Thread-169049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:26:09.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:26:09.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:26:09.970 [DEBUG] [Thread-169049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:26:09.970 [DEBUG] [Thread-169049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:26:10.018 [DEBUG] [Thread-169049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:26:10.018 [DEBUG] [Thread-169049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:26:10.028 [DEBUG] [Thread-169049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:26:10.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:26:10.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:26:10.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-04-11T11:26:10.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:26:10.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:26:10.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:26:10.071 [DEBUG] [Thread-169049] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:26:22.689 [DEBUG] [Thread-169051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:37.741 [DEBUG] [Thread-169052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:40.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:26:40.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:26:40.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-04-11T11:26:41.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 26, 16), 0.05195, 99.623, 0.0, 17.627, 13.0332, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:26:41.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:26:16
2026-04-11T11:26:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:26:41.857 [DEBUG] [Thread-169053] [transport.py] [_log()] starting thread (client mode): 0xa79b6a70
2026-04-11T11:26:41.857 [DEBUG] [Thread-169053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:26:41.877 [DEBUG] [Thread-169053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:26:41.877 [INFO] [Thread-169053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] client lang: <none>
2026-04-11T11:26:41.881 [DEBUG] [Thread-169053] [transport.py] [_log()] server lang: <none>
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] kex follows: False
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] Compression: none
2026-04-11T11:26:41.882 [DEBUG] [Thread-169053] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:26:41.902 [DEBUG] [Thread-169053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:26:41.902 [DEBUG] [Thread-169053] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:26:41.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:26:41.903 [DEBUG] [Thread-169053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:26:41.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:26:41.906 [DEBUG] [Thread-169053] [transport.py] [_log()] userauth is OK
2026-04-11T11:26:41.906 [DEBUG] [Thread-169053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:26:41.906 [DEBUG] [Thread-169053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:26:41.906 [DEBUG] [Thread-169053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:26:41.906 [DEBUG] [Thread-169053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:26:41.929 [INFO] [Thread-169053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:26:41.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:26:42.705 [DEBUG] [Thread-169053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:26:42.705 [DEBUG] [Thread-169053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:26:42.706 [DEBUG] [Thread-169053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:26:42.746 [DEBUG] [Thread-169053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:26:42.746 [DEBUG] [Thread-169053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:26:42.749 [DEBUG] [Thread-169053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:26:42.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:26:42.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:26:42.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:26:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:26:42.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:26:42.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:26:42.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:26:42.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:26:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:26:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.393175 -999.00  +12.90  14.64     97  +12.50 1 3 1 3 1   888    0 0.44 -0.15 ----- 10.3 14.6 126.0 20.8 14.2 -0.7 14.3 -0.2 14.2 -0.2 14.5 -0.1
2026-04-11T11:26:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:26:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:26:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.393175
2026-04-11T11:26:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:26:42.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:26:42.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:26:42.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:26:42.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:26:42.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:26:16', tmtdew=0.05195, humidity=99.623, cloud=0.0, wind=17.627, temperature=13.0332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:26:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:26:42.773 [DEBUG] [Thread-169053] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:26:42.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:26:42.868 [DEBUG] [Thread-169056] [transport.py] [_log()] starting thread (client mode): 0xae52e0b0
2026-04-11T11:26:42.868 [DEBUG] [Thread-169056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:26:42.885 [DEBUG] [Thread-169056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:26:42.886 [INFO] [Thread-169056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:26:42.893 [DEBUG] [Thread-169056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] client lang: <none>
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] server lang: <none>
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] kex follows: False
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] Compression: none
2026-04-11T11:26:42.894 [DEBUG] [Thread-169056] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:26:42.951 [DEBUG] [Thread-169056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:26:42.951 [DEBUG] [Thread-169056] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:26:42.952 [DEBUG] [Thread-169056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:26:42.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:26:42.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:26:43.007 [DEBUG] [Thread-169056] [transport.py] [_log()] userauth is OK
2026-04-11T11:26:43.008 [DEBUG] [Thread-169056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:26:43.008 [DEBUG] [Thread-169056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:26:43.008 [DEBUG] [Thread-169056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:26:43.008 [DEBUG] [Thread-169056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:26:43.027 [INFO] [Thread-169056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:26:43.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:26:43.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:26:43.860 [DEBUG] [Thread-169056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:26:43.860 [DEBUG] [Thread-169056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:26:43.908 [DEBUG] [Thread-169056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:26:43.908 [DEBUG] [Thread-169056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:26:43.916 [DEBUG] [Thread-169056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:26:43.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:26:43.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-04-11T11:26: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-04-11T11:26:43.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:26:43.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:26:43.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:26:43.950 [DEBUG] [Thread-169056] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:26:44.780 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:44.781 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:26:52.780 [DEBUG] [Thread-169058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:02.037 [DEBUG] [Thread-169059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:07.833 [DEBUG] [Thread-169060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:27:13.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:27:13.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-04-11T11:27:15.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 26, 51), 0.10902, 99.2128, 0.0, 23.8176, 13.5665, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:27:15.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:26:51
2026-04-11T11:27:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:27:15.894 [DEBUG] [Thread-169061] [transport.py] [_log()] starting thread (client mode): 0xae52dc00
2026-04-11T11:27:15.894 [DEBUG] [Thread-169061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:27:15.914 [DEBUG] [Thread-169061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:27:15.915 [INFO] [Thread-169061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:27:15.917 [DEBUG] [Thread-169061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] client lang: <none>
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] server lang: <none>
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] kex follows: False
2026-04-11T11:27:15.918 [DEBUG] [Thread-169061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:27:15.919 [DEBUG] [Thread-169061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:27:15.919 [DEBUG] [Thread-169061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:27:15.919 [DEBUG] [Thread-169061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:27:15.919 [DEBUG] [Thread-169061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:27:15.919 [DEBUG] [Thread-169061] [transport.py] [_log()] Compression: none
2026-04-11T11:27:15.919 [DEBUG] [Thread-169061] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:27:15.937 [DEBUG] [Thread-169061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:27:15.938 [DEBUG] [Thread-169061] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:27:15.939 [DEBUG] [Thread-169061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:27:15.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:27:15.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:27:15.941 [DEBUG] [Thread-169061] [transport.py] [_log()] userauth is OK
2026-04-11T11:27:15.942 [DEBUG] [Thread-169061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:27:15.942 [DEBUG] [Thread-169061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:27:15.942 [DEBUG] [Thread-169061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:27:15.942 [DEBUG] [Thread-169061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:27:15.963 [INFO] [Thread-169061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:27:15.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:27:16.748 [DEBUG] [Thread-169061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:27:16.748 [DEBUG] [Thread-169061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:27:16.748 [DEBUG] [Thread-169061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:27:16.790 [DEBUG] [Thread-169061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:27:16.790 [DEBUG] [Thread-169061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:27:16.793 [DEBUG] [Thread-169061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:27:16.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:27:16.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:27:16.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:27:16.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:27:16.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:27:16.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:27:16.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:27:16.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:27:16.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:27:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.393523 -999.00  +12.90  13.23     97  +12.50 1 3 1 3 1   888    0 0.43 -0.55 ----- 12.6 13.2 79.9 17.7 14.3 -0.2 14.3 -0.2 14.3 -0.3 14.4 -0.2
2026-04-11T11:27:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:27:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:27:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.393523
2026-04-11T11:27:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:27:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:27:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:27:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:27:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:27:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:26:51', tmtdew=0.10902, humidity=99.2128, cloud=0.0, wind=23.8176, temperature=13.5665, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:26:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:27:16.820 [DEBUG] [Thread-169061] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:27:16.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:27:16.913 [DEBUG] [Thread-169064] [transport.py] [_log()] starting thread (client mode): 0xae52dc30
2026-04-11T11:27:16.913 [DEBUG] [Thread-169064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:27:16.932 [DEBUG] [Thread-169064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:27:16.932 [INFO] [Thread-169064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:27:16.940 [DEBUG] [Thread-169064] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:27:16.941 [DEBUG] [Thread-169064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:27:16.941 [DEBUG] [Thread-169064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:27:16.941 [DEBUG] [Thread-169064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:16.941 [DEBUG] [Thread-169064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:16.941 [DEBUG] [Thread-169064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] client lang: <none>
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] server lang: <none>
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] kex follows: False
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] Compression: none
2026-04-11T11:27:16.942 [DEBUG] [Thread-169064] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:27:16.999 [DEBUG] [Thread-169064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:27:17.000 [DEBUG] [Thread-169064] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:27:17.001 [DEBUG] [Thread-169064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:27:17.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:27:17.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:27:17.059 [DEBUG] [Thread-169064] [transport.py] [_log()] userauth is OK
2026-04-11T11:27:17.059 [DEBUG] [Thread-169064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:27:17.060 [DEBUG] [Thread-169064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:27:17.060 [DEBUG] [Thread-169064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:27:17.060 [DEBUG] [Thread-169064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:27:17.084 [INFO] [Thread-169064] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:27:17.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:27:17.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:27:17.967 [DEBUG] [Thread-169064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:27:17.967 [DEBUG] [Thread-169064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:27:18.021 [DEBUG] [Thread-169064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:27:18.021 [DEBUG] [Thread-169064] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:27:18.033 [DEBUG] [Thread-169064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:27:18.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:27:18.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-04-11T11:27:18.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-04-11T11:27:18.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:27:18.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:27:18.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:27:18.081 [DEBUG] [Thread-169064] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:27:22.872 [DEBUG] [Thread-169066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:37.928 [DEBUG] [Thread-169067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:44.922 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:44.923 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:27:48.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:27:48.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:27:48.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-04-11T11:27:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 27, 27), 0.10708, 99.5898, 0.0, 17.0266, 12.9835, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:27:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:27:27
2026-04-11T11:27:49.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:27:49.926 [DEBUG] [Thread-169068] [transport.py] [_log()] starting thread (client mode): 0xae52c3a0
2026-04-11T11:27:49.926 [DEBUG] [Thread-169068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:27:49.947 [DEBUG] [Thread-169068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:27:49.948 [INFO] [Thread-169068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:27:49.950 [DEBUG] [Thread-169068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] client lang: <none>
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] server lang: <none>
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] kex follows: False
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] Compression: none
2026-04-11T11:27:49.951 [DEBUG] [Thread-169068] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:27:49.970 [DEBUG] [Thread-169068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:27:49.971 [DEBUG] [Thread-169068] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:27:49.971 [DEBUG] [Thread-169068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:27:49.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:27:49.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:27:49.974 [DEBUG] [Thread-169068] [transport.py] [_log()] userauth is OK
2026-04-11T11:27:49.974 [DEBUG] [Thread-169068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:27:49.974 [DEBUG] [Thread-169068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:27:49.974 [DEBUG] [Thread-169068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:27:49.974 [DEBUG] [Thread-169068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:27:50.010 [INFO] [Thread-169068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:27:50.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:27:50.776 [DEBUG] [Thread-169068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:27:50.776 [DEBUG] [Thread-169068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:27:50.777 [DEBUG] [Thread-169068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:27:50.817 [DEBUG] [Thread-169068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:27:50.817 [DEBUG] [Thread-169068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:27:50.819 [DEBUG] [Thread-169068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:27:50.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:27:50.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:27:50.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:27:50.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:27:50.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:27:50.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:27:50.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:27:50.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:27:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:27:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.393870 -999.00  +13.00  13.45     97  +12.50 1 3 1 3 1   888    0 0.43 -0.59 ----- 13.7 13.4 75.4 17.5 14.2 -0.1 14.3 0.0 14.3 -0.2 14.5 -0.1
2026-04-11T11:27:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:27:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:27:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.393870
2026-04-11T11:27:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:27:50.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:27:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:27:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:27:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:27:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:27:27', tmtdew=0.10708, humidity=99.5898, cloud=0.0, wind=17.0266, temperature=12.9835, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:27:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:27:50.846 [DEBUG] [Thread-169068] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:27:50.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:27:50.944 [DEBUG] [Thread-169071] [transport.py] [_log()] starting thread (client mode): 0xae52e860
2026-04-11T11:27:50.944 [DEBUG] [Thread-169071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:27:50.959 [DEBUG] [Thread-169071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:27:50.959 [INFO] [Thread-169071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:27:50.967 [DEBUG] [Thread-169071] [transport.py] [_log()] client lang: <none>
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] server lang: <none>
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] kex follows: False
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] Compression: none
2026-04-11T11:27:50.968 [DEBUG] [Thread-169071] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:27:51.028 [DEBUG] [Thread-169071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:27:51.029 [DEBUG] [Thread-169071] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:27:51.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:27:51.030 [DEBUG] [Thread-169071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:27:51.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:27:51.086 [DEBUG] [Thread-169071] [transport.py] [_log()] userauth is OK
2026-04-11T11:27:51.087 [DEBUG] [Thread-169071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:27:51.087 [DEBUG] [Thread-169071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:27:51.087 [DEBUG] [Thread-169071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:27:51.087 [DEBUG] [Thread-169071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:27:51.106 [INFO] [Thread-169071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:27:51.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:27:51.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:27:51.940 [DEBUG] [Thread-169071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:27:51.940 [DEBUG] [Thread-169071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:27:51.987 [DEBUG] [Thread-169071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:27:51.988 [DEBUG] [Thread-169071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:27:51.996 [DEBUG] [Thread-169071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:27:52.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:27:52.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-04-11T11:27:52.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:27:52.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:27:52.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:27:52.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:27:52.032 [DEBUG] [Thread-169071] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:27:52.963 [DEBUG] [Thread-169073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:02.092 [DEBUG] [Thread-169074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:08.020 [DEBUG] [Thread-169075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:28:22.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:28:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:28:23.058 [DEBUG] [Thread-169076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:23.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 28, 2), 0.104515, 99.6063, 0.0, 16.0564, 13.0, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:28:23.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:28:02
2026-04-11T11:28:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:28:23.862 [DEBUG] [Thread-169077] [transport.py] [_log()] starting thread (client mode): 0xae52d2d0
2026-04-11T11:28:23.863 [DEBUG] [Thread-169077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:28:23.883 [DEBUG] [Thread-169077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:28:23.883 [INFO] [Thread-169077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:23.884 [DEBUG] [Thread-169077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] client lang: <none>
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] server lang: <none>
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] kex follows: False
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] Compression: none
2026-04-11T11:28:23.885 [DEBUG] [Thread-169077] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:28:23.893 [DEBUG] [Thread-169077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:28:23.893 [DEBUG] [Thread-169077] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:28:23.894 [DEBUG] [Thread-169077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:28:23.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:28:23.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:28:23.896 [DEBUG] [Thread-169077] [transport.py] [_log()] userauth is OK
2026-04-11T11:28:23.896 [DEBUG] [Thread-169077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:28:23.896 [DEBUG] [Thread-169077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:28:23.896 [DEBUG] [Thread-169077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:28:23.896 [DEBUG] [Thread-169077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:28:23.920 [INFO] [Thread-169077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:28:23.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:28:24.732 [DEBUG] [Thread-169077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:28:24.732 [DEBUG] [Thread-169077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:28:24.733 [DEBUG] [Thread-169077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:28:24.773 [DEBUG] [Thread-169077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:28:24.773 [DEBUG] [Thread-169077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:28:24.776 [DEBUG] [Thread-169077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:28:24.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:28:24.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:28:24.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:28:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:28:24.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:28:24.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:28:24.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:28:24.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:28:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:28:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.394217 -999.00  +12.90  12.56     97  +12.50 1 3 1 3 1   888    0 0.42 -0.53 ----- 10.5 12.6 116.3 19.8 14.2 -0.2 14.3 -0.1 14.3 -0.5 14.5 -0.4
2026-04-11T11:28:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:28:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:28:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.394217
2026-04-11T11:28:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:28:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:28:24.802 [DEBUG] [Thread-169077] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:28:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:28:24.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:28:24.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:28:24.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:28:02', tmtdew=0.104515, humidity=99.6063, cloud=0.0, wind=16.0564, temperature=13.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:27:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:28:24.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:28:24.903 [DEBUG] [Thread-169080] [transport.py] [_log()] starting thread (client mode): 0xae52c7f0
2026-04-11T11:28:24.903 [DEBUG] [Thread-169080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:28:24.919 [DEBUG] [Thread-169080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:28:24.919 [INFO] [Thread-169080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] client lang: <none>
2026-04-11T11:28:24.927 [DEBUG] [Thread-169080] [transport.py] [_log()] server lang: <none>
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] kex follows: False
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] Compression: none
2026-04-11T11:28:24.928 [DEBUG] [Thread-169080] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:28:24.990 [DEBUG] [Thread-169080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:28:24.990 [DEBUG] [Thread-169080] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:28:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:28:24.992 [DEBUG] [Thread-169080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:28:24.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:28:25.045 [DEBUG] [Thread-169080] [transport.py] [_log()] userauth is OK
2026-04-11T11:28:25.045 [DEBUG] [Thread-169080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:28:25.045 [DEBUG] [Thread-169080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:28:25.045 [DEBUG] [Thread-169080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:28:25.046 [DEBUG] [Thread-169080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:28:25.069 [INFO] [Thread-169080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:28:25.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:28:25.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:28:25.902 [DEBUG] [Thread-169080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:28:25.903 [DEBUG] [Thread-169080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:28:25.950 [DEBUG] [Thread-169080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:28:25.950 [DEBUG] [Thread-169080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:28:25.959 [DEBUG] [Thread-169080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:28:25.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:28:25.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:28:25.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-04-11T11:28:25.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:28:25.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:28:25.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:28:25.997 [DEBUG] [Thread-169080] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:28:38.092 [DEBUG] [Thread-169082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:45.065 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:45.066 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:53.144 [DEBUG] [Thread-169083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:28:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:28:55.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:28:55.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-04-11T11:28:57.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 28, 38), 0.10904, 99.2126, 0.0, 23.0062, 13.4338, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:28:57.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:28:38
2026-04-11T11:28:57.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:28:57.807 [DEBUG] [Thread-169084] [transport.py] [_log()] starting thread (client mode): 0xae52e320
2026-04-11T11:28:57.807 [DEBUG] [Thread-169084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:28:57.826 [DEBUG] [Thread-169084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:28:57.826 [INFO] [Thread-169084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:28:57.828 [DEBUG] [Thread-169084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] client lang: <none>
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] server lang: <none>
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] kex follows: False
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] Compression: none
2026-04-11T11:28:57.829 [DEBUG] [Thread-169084] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:28:57.848 [DEBUG] [Thread-169084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:28:57.848 [DEBUG] [Thread-169084] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:28:57.849 [DEBUG] [Thread-169084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:28:57.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:28:57.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:28:57.851 [DEBUG] [Thread-169084] [transport.py] [_log()] userauth is OK
2026-04-11T11:28:57.851 [DEBUG] [Thread-169084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:28:57.851 [DEBUG] [Thread-169084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:28:57.851 [DEBUG] [Thread-169084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:28:57.851 [DEBUG] [Thread-169084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:28:57.871 [INFO] [Thread-169084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:28:57.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:28:58.680 [DEBUG] [Thread-169084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:28:58.680 [DEBUG] [Thread-169084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:28:58.680 [DEBUG] [Thread-169084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:28:58.721 [DEBUG] [Thread-169084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:28:58.721 [DEBUG] [Thread-169084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:28:58.725 [DEBUG] [Thread-169084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:28:58.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:28:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:28:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:28:58.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:28:58.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:28:58.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:28:58.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:28:58.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:28:58.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:28:58.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.394564 -999.00  +12.90  14.44     97  +12.50 1 3 1 3 1   888    0 0.42 -0.87 ----- 10.6 14.4 86.4 17.9 14.3 -0.4 14.3 -0.2 14.3 -0.3 14.5 -0.2
2026-04-11T11:28:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:28:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:28:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.394564
2026-04-11T11:28:58.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:28:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:28:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:28:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:28:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:28:58.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:28:38', tmtdew=0.10904, humidity=99.2126, cloud=0.0, wind=23.0062, temperature=13.4338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:28:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:28:58.752 [DEBUG] [Thread-169084] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:28:58.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:28:58.846 [DEBUG] [Thread-169087] [transport.py] [_log()] starting thread (client mode): 0xae52c040
2026-04-11T11:28:58.846 [DEBUG] [Thread-169087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:28:58.861 [DEBUG] [Thread-169087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:28:58.861 [INFO] [Thread-169087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:28:58.870 [DEBUG] [Thread-169087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:28:58.871 [DEBUG] [Thread-169087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] client lang: <none>
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] server lang: <none>
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] kex follows: False
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:28:58.872 [DEBUG] [Thread-169087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:28:58.873 [DEBUG] [Thread-169087] [transport.py] [_log()] Compression: none
2026-04-11T11:28:58.873 [DEBUG] [Thread-169087] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:28:58.929 [DEBUG] [Thread-169087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:28:58.930 [DEBUG] [Thread-169087] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:28:58.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:28:58.932 [DEBUG] [Thread-169087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:28:58.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:28:58.989 [DEBUG] [Thread-169087] [transport.py] [_log()] userauth is OK
2026-04-11T11:28:58.989 [DEBUG] [Thread-169087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:28:58.989 [DEBUG] [Thread-169087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:28:58.989 [DEBUG] [Thread-169087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:28:58.989 [DEBUG] [Thread-169087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:28:59.008 [INFO] [Thread-169087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:28:59.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:28:59.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:28:59.823 [DEBUG] [Thread-169087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:28:59.823 [DEBUG] [Thread-169087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:28:59.875 [DEBUG] [Thread-169087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:28:59.875 [DEBUG] [Thread-169087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:28:59.887 [DEBUG] [Thread-169087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:28:59.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:28:59.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-04-11T11:28:59.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-04-11T11:28:59.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:28:59.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:28:59.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:28:59.931 [DEBUG] [Thread-169087] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:29:02.144 [DEBUG] [Thread-169089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:29:08.178 [DEBUG] [Thread-169090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:29:23.231 [DEBUG] [Thread-169091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:29:29.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:29:29.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:29:29.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-04-11T11:29:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 29, 13), 0.107085, 99.5897, 0.0, 15.2978, 12.9669, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:29:31.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:29:13
2026-04-11T11:29:31.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:29:31.943 [DEBUG] [Thread-169092] [transport.py] [_log()] starting thread (client mode): 0xae52f700
2026-04-11T11:29:31.944 [DEBUG] [Thread-169092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:29:31.963 [DEBUG] [Thread-169092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:29:31.963 [INFO] [Thread-169092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:29:31.965 [DEBUG] [Thread-169092] [transport.py] [_log()] client lang: <none>
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] server lang: <none>
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] kex follows: False
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] Compression: none
2026-04-11T11:29:31.966 [DEBUG] [Thread-169092] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:29:31.976 [DEBUG] [Thread-169092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:29:31.976 [DEBUG] [Thread-169092] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:29:31.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:29:31.977 [DEBUG] [Thread-169092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:29:31.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:29:31.980 [DEBUG] [Thread-169092] [transport.py] [_log()] userauth is OK
2026-04-11T11:29:31.980 [DEBUG] [Thread-169092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:29:31.980 [DEBUG] [Thread-169092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:29:31.980 [DEBUG] [Thread-169092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:29:31.980 [DEBUG] [Thread-169092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:29:32.000 [INFO] [Thread-169092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:29:32.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:29:32.779 [DEBUG] [Thread-169092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:29:32.779 [DEBUG] [Thread-169092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:29:32.779 [DEBUG] [Thread-169092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:29:32.822 [DEBUG] [Thread-169092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:29:32.822 [DEBUG] [Thread-169092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:29:32.824 [DEBUG] [Thread-169092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:29:32.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:29:32.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:29:32.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:29:32.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:29:32.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:29:32.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:29:32.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.394911 -999.00  +12.90  15.12     97  +12.50 1 3 1 3 1   888    0 0.42 -0.76 ----- 18.7 15.1 94.9 20.0 14.2 -0.3 14.3 -0.1 14.3 -0.3 14.5 -0.1
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.394911
2026-04-11T11:29:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:29:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:29:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:29:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:29:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:29:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:29:13', tmtdew=0.107085, humidity=99.5897, cloud=0.0, wind=15.2978, temperature=12.9669, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:28:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:29:32.845 [DEBUG] [Thread-169092] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:29:32.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:29:32.930 [DEBUG] [Thread-169095] [transport.py] [_log()] starting thread (client mode): 0xae52f640
2026-04-11T11:29:32.931 [DEBUG] [Thread-169095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:29:32.945 [DEBUG] [Thread-169095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:29:32.945 [INFO] [Thread-169095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:29:32.953 [DEBUG] [Thread-169095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] client lang: <none>
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] server lang: <none>
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] kex follows: False
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] Compression: none
2026-04-11T11:29:32.954 [DEBUG] [Thread-169095] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:29:33.011 [DEBUG] [Thread-169095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:29:33.012 [DEBUG] [Thread-169095] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:29:33.012 [DEBUG] [Thread-169095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:29:33.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:29:33.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:29:33.068 [DEBUG] [Thread-169095] [transport.py] [_log()] userauth is OK
2026-04-11T11:29:33.068 [DEBUG] [Thread-169095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:29:33.068 [DEBUG] [Thread-169095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:29:33.068 [DEBUG] [Thread-169095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:29:33.069 [DEBUG] [Thread-169095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:29:33.095 [INFO] [Thread-169095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:29:33.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:29:33.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:29:33.913 [DEBUG] [Thread-169095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:29:33.914 [DEBUG] [Thread-169095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:29:33.962 [DEBUG] [Thread-169095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:29:33.963 [DEBUG] [Thread-169095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:29:33.973 [DEBUG] [Thread-169095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:29:33.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:29:33.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:29:33.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-04-11T11:29:34.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:29:34.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:29:34.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:29:34.010 [DEBUG] [Thread-169095] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:29:38.268 [DEBUG] [Thread-169097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:29:45.205 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:29:45.206 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:29:53.321 [DEBUG] [Thread-169098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:02.191 [DEBUG] [Thread-169099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:04.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:30:04.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:30:04.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-04-11T11:30:05.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 29, 49), 0.11931, 99.1463, 0.0, 17.573, 13.5, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:30:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:29:49
2026-04-11T11:30:05.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:30:05.902 [DEBUG] [Thread-169100] [transport.py] [_log()] starting thread (client mode): 0xae52fe50
2026-04-11T11:30:05.902 [DEBUG] [Thread-169100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:30:05.922 [DEBUG] [Thread-169100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:30:05.923 [INFO] [Thread-169100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:30:05.926 [DEBUG] [Thread-169100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] client lang: <none>
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] server lang: <none>
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] kex follows: False
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] Compression: none
2026-04-11T11:30:05.927 [DEBUG] [Thread-169100] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:30:05.945 [DEBUG] [Thread-169100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:30:05.945 [DEBUG] [Thread-169100] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:30:05.946 [DEBUG] [Thread-169100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:30:05.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:30:05.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:30:05.948 [DEBUG] [Thread-169100] [transport.py] [_log()] userauth is OK
2026-04-11T11:30:05.948 [DEBUG] [Thread-169100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:30:05.949 [DEBUG] [Thread-169100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:30:05.949 [DEBUG] [Thread-169100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:30:05.949 [DEBUG] [Thread-169100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:30:05.972 [INFO] [Thread-169100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:30:05.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:30:07.067 [DEBUG] [Thread-169100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:30:07.067 [DEBUG] [Thread-169100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:30:07.068 [DEBUG] [Thread-169100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:30:07.108 [DEBUG] [Thread-169100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:30:07.109 [DEBUG] [Thread-169100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:30:07.112 [DEBUG] [Thread-169100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:30:07.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:30:07.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:30:07.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:30:07.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:30:07.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:30:07.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:30:07.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:30:07.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:30:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:30:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.395606 -999.00  +13.00   9.27     97  +12.60 1 3 1 3 1   888    0 0.40 -1.34 ----- 11.8 9.3 106.3 16.4 14.3 -0.3 14.3 0.0 14.3 -0.4 14.5 -0.2
2026-04-11T11:30:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:30:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:30:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.395606
2026-04-11T11:30:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:30:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:30:07.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:30:07.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:30:07.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:30:07.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:29:49', tmtdew=0.11931, humidity=99.1463, cloud=0.0, wind=17.573, temperature=13.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:29:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:30:07.145 [DEBUG] [Thread-169100] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:30:07.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:30:07.238 [DEBUG] [Thread-169103] [transport.py] [_log()] starting thread (client mode): 0xae52dcc0
2026-04-11T11:30:07.239 [DEBUG] [Thread-169103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:30:07.256 [DEBUG] [Thread-169103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:30:07.256 [INFO] [Thread-169103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:30:07.264 [DEBUG] [Thread-169103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:30:07.264 [DEBUG] [Thread-169103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] client lang: <none>
2026-04-11T11:30:07.265 [DEBUG] [Thread-169103] [transport.py] [_log()] server lang: <none>
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] kex follows: False
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:30:07.266 [DEBUG] [Thread-169103] [transport.py] [_log()] Compression: none
2026-04-11T11:30:07.267 [DEBUG] [Thread-169103] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:30:07.329 [DEBUG] [Thread-169103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:30:07.329 [DEBUG] [Thread-169103] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:30:07.330 [DEBUG] [Thread-169103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:30:07.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:30:07.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:30:07.387 [DEBUG] [Thread-169103] [transport.py] [_log()] userauth is OK
2026-04-11T11:30:07.388 [DEBUG] [Thread-169103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:30:07.388 [DEBUG] [Thread-169103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:30:07.388 [DEBUG] [Thread-169103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:30:07.388 [DEBUG] [Thread-169103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:30:07.406 [INFO] [Thread-169103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:30:07.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:30:07.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:30:08.243 [DEBUG] [Thread-169103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:30:08.243 [DEBUG] [Thread-169103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:30:08.291 [DEBUG] [Thread-169103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:30:08.291 [DEBUG] [Thread-169103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:30:08.301 [DEBUG] [Thread-169103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:30:08.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:30:08.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-04-11T11:30:08.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-04-11T11:30:08.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:30:08.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:30:08.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:30:08.335 [DEBUG] [Thread-169103] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:30:08.360 [DEBUG] [Thread-169105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:23.410 [DEBUG] [Thread-169106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:38.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:30:38.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:30:38.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-04-11T11:30:38.446 [DEBUG] [Thread-169107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 30, 24), 0.0994, 99.6395, 0.0, 13.8514, 13.0832, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:30:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:30:24
2026-04-11T11:30:40.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:30:40.216 [DEBUG] [Thread-169108] [transport.py] [_log()] starting thread (client mode): 0xae52c9d0
2026-04-11T11:30:40.216 [DEBUG] [Thread-169108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:30:40.238 [DEBUG] [Thread-169108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:30:40.238 [INFO] [Thread-169108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:30:40.241 [DEBUG] [Thread-169108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:30:40.241 [DEBUG] [Thread-169108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:30:40.241 [DEBUG] [Thread-169108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:30:40.241 [DEBUG] [Thread-169108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] client lang: <none>
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] server lang: <none>
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] kex follows: False
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] Compression: none
2026-04-11T11:30:40.242 [DEBUG] [Thread-169108] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:30:40.260 [DEBUG] [Thread-169108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:30:40.260 [DEBUG] [Thread-169108] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:30:40.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:30:40.262 [DEBUG] [Thread-169108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:30:40.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:30:40.263 [DEBUG] [Thread-169108] [transport.py] [_log()] userauth is OK
2026-04-11T11:30:40.264 [DEBUG] [Thread-169108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:30:40.264 [DEBUG] [Thread-169108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:30:40.264 [DEBUG] [Thread-169108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:30:40.264 [DEBUG] [Thread-169108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:30:40.289 [INFO] [Thread-169108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:30:40.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:30:41.090 [DEBUG] [Thread-169108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:30:41.090 [DEBUG] [Thread-169108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:30:41.091 [DEBUG] [Thread-169108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:30:41.131 [DEBUG] [Thread-169108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:30:41.131 [DEBUG] [Thread-169108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:30:41.135 [DEBUG] [Thread-169108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:30:41.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:30:41.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:30:41.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:30:41.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:30:41.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:30:41.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:30:41.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:30:41.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:30:41.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:30:41.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.395953 -999.00  +13.00   9.76     97  +12.60 1 3 1 3 1   888    0 0.40 -1.18 ----- 8.9 9.8 113.6 20.0 14.3 -0.2 14.4 -0.2 14.3 -0.2 14.5 -0.3
2026-04-11T11:30:41.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:30:41.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:30:41.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.395953
2026-04-11T11:30:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:30:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:30:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:30:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:30:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:30:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:30:24', tmtdew=0.0994, humidity=99.6395, cloud=0.0, wind=13.8514, temperature=13.0832, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:30:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:30:41.163 [DEBUG] [Thread-169108] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:30:41.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:30:41.256 [DEBUG] [Thread-169111] [transport.py] [_log()] starting thread (client mode): 0xae52dc30
2026-04-11T11:30:41.256 [DEBUG] [Thread-169111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:30:41.271 [DEBUG] [Thread-169111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:30:41.271 [INFO] [Thread-169111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:30:41.279 [DEBUG] [Thread-169111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:30:41.279 [DEBUG] [Thread-169111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:30:41.279 [DEBUG] [Thread-169111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:30:41.279 [DEBUG] [Thread-169111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:41.279 [DEBUG] [Thread-169111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] client lang: <none>
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] server lang: <none>
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] kex follows: False
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] Compression: none
2026-04-11T11:30:41.280 [DEBUG] [Thread-169111] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:30:41.338 [DEBUG] [Thread-169111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:30:41.339 [DEBUG] [Thread-169111] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:30:41.339 [DEBUG] [Thread-169111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:30:41.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:30:41.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:30:41.395 [DEBUG] [Thread-169111] [transport.py] [_log()] userauth is OK
2026-04-11T11:30:41.395 [DEBUG] [Thread-169111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:30:41.395 [DEBUG] [Thread-169111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:30:41.396 [DEBUG] [Thread-169111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:30:41.396 [DEBUG] [Thread-169111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:30:41.416 [INFO] [Thread-169111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:30:41.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:30:41.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:30:42.268 [DEBUG] [Thread-169111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:30:42.268 [DEBUG] [Thread-169111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:30:42.319 [DEBUG] [Thread-169111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:30:42.320 [DEBUG] [Thread-169111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:30:42.329 [DEBUG] [Thread-169111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:30:42.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:30:42.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:30:42.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:30:42.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:30:42.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:30:42.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:30:42.367 [DEBUG] [Thread-169111] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:30:45.347 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:45.348 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:30:53.486 [DEBUG] [Thread-169113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:02.258 [DEBUG] [Thread-169114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:08.533 [DEBUG] [Thread-169115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:12.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:31:12.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:31:12.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-04-11T11:31:13.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 31), 0.049335, 99.6399, 0.0, 17.5734, 13.0666, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:31:13.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:31:00
2026-04-11T11:31:14.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:31:14.254 [DEBUG] [Thread-169116] [transport.py] [_log()] starting thread (client mode): 0xa79b4400
2026-04-11T11:31:14.254 [DEBUG] [Thread-169116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:31:14.273 [DEBUG] [Thread-169116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:31:14.273 [INFO] [Thread-169116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:31:14.276 [DEBUG] [Thread-169116] [transport.py] [_log()] client lang: <none>
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] server lang: <none>
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] kex follows: False
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] Compression: none
2026-04-11T11:31:14.277 [DEBUG] [Thread-169116] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:31:14.288 [DEBUG] [Thread-169116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:31:14.288 [DEBUG] [Thread-169116] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:31:14.289 [DEBUG] [Thread-169116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:31:14.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:31:14.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:31:14.292 [DEBUG] [Thread-169116] [transport.py] [_log()] userauth is OK
2026-04-11T11:31:14.292 [DEBUG] [Thread-169116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:31:14.292 [DEBUG] [Thread-169116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:31:14.292 [DEBUG] [Thread-169116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:31:14.293 [DEBUG] [Thread-169116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:31:14.318 [INFO] [Thread-169116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:31:14.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:31:15.116 [DEBUG] [Thread-169116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:31:15.116 [DEBUG] [Thread-169116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:31:15.116 [DEBUG] [Thread-169116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:31:15.157 [DEBUG] [Thread-169116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:31:15.157 [DEBUG] [Thread-169116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:31:15.159 [DEBUG] [Thread-169116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:31:15.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:31:15.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:31:15.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:31:15.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:31:15.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:31:15.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:31:15.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:31:15.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:31:15.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:31:15.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.396300 -999.00  +13.00  14.99     97  +12.60 1 3 1 3 1   888    0 0.39 -1.72 ----- 15.1 15.0 56.6 17.6 14.3 0.1 14.4 -0.1 14.3 -0.3 14.6 -0.1
2026-04-11T11:31:15.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.396300
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:31:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:31:00', tmtdew=0.049335, humidity=99.6399, cloud=0.0, wind=17.5734, temperature=13.0666, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:30:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:31:15.178 [DEBUG] [Thread-169116] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:31:15.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:31:15.260 [DEBUG] [Thread-169119] [transport.py] [_log()] starting thread (client mode): 0xa79b4b20
2026-04-11T11:31:15.260 [DEBUG] [Thread-169119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:31:15.276 [DEBUG] [Thread-169119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:31:15.276 [INFO] [Thread-169119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:31:15.283 [DEBUG] [Thread-169119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] client lang: <none>
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] server lang: <none>
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] kex follows: False
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] Compression: none
2026-04-11T11:31:15.284 [DEBUG] [Thread-169119] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:31:15.340 [DEBUG] [Thread-169119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:31:15.340 [DEBUG] [Thread-169119] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:31:15.341 [DEBUG] [Thread-169119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:31:15.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:31:15.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:31:15.397 [DEBUG] [Thread-169119] [transport.py] [_log()] userauth is OK
2026-04-11T11:31:15.397 [DEBUG] [Thread-169119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:31:15.398 [DEBUG] [Thread-169119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:31:15.398 [DEBUG] [Thread-169119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:31:15.398 [DEBUG] [Thread-169119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:31:15.413 [INFO] [Thread-169119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:31:15.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:31:15.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:31:16.255 [DEBUG] [Thread-169119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:31:16.255 [DEBUG] [Thread-169119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:31:16.303 [DEBUG] [Thread-169119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:31:16.303 [DEBUG] [Thread-169119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:31:16.313 [DEBUG] [Thread-169119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:31:16.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:31:16.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-04-11T11:31:16.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-04-11T11:31:16.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:31:16.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:31:16.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:31:16.350 [DEBUG] [Thread-169119] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:31:23.572 [DEBUG] [Thread-169121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:38.633 [DEBUG] [Thread-169122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:45.489 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:45.490 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:31:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:31:46.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:31:46.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:31:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 31, 36), 0.10383, 99.2464, 0.0, 22.7945, 13.5336, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:31:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:31:36
2026-04-11T11:31:48.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:31:48.166 [DEBUG] [Thread-169123] [transport.py] [_log()] starting thread (client mode): 0xa79b4130
2026-04-11T11:31:48.166 [DEBUG] [Thread-169123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:31:48.187 [DEBUG] [Thread-169123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:31:48.188 [INFO] [Thread-169123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] client lang: <none>
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] server lang: <none>
2026-04-11T11:31:48.191 [DEBUG] [Thread-169123] [transport.py] [_log()] kex follows: False
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] Compression: none
2026-04-11T11:31:48.192 [DEBUG] [Thread-169123] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:31:48.210 [DEBUG] [Thread-169123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:31:48.211 [DEBUG] [Thread-169123] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:31:48.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:31:48.212 [DEBUG] [Thread-169123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:31:48.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:31:48.214 [DEBUG] [Thread-169123] [transport.py] [_log()] userauth is OK
2026-04-11T11:31:48.214 [DEBUG] [Thread-169123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:31:48.214 [DEBUG] [Thread-169123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:31:48.214 [DEBUG] [Thread-169123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:31:48.214 [DEBUG] [Thread-169123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:31:48.237 [INFO] [Thread-169123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:31:48.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:31:48.987 [DEBUG] [Thread-169123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:31:48.988 [DEBUG] [Thread-169123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:31:48.988 [DEBUG] [Thread-169123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:31:49.029 [DEBUG] [Thread-169123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:31:49.029 [DEBUG] [Thread-169123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:31:49.033 [DEBUG] [Thread-169123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:31:49.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:31:49.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:31:49.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:31:49.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:31:49.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:31:49.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:31:49.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:31:49.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:31:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:31:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.396647 -999.00  +13.10   8.74     97  +12.70 1 3 1 3 1   888    0 0.37 -2.03 ----- 8.7 8.7 106.6 19.0 14.3 -0.6 14.4 -0.1 14.3 -0.2 14.6 -0.3
2026-04-11T11:31:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:31:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:31:49.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.396647
2026-04-11T11:31:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:31:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:31:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:31:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:31:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:31:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:31:36', tmtdew=0.10383, humidity=99.2464, cloud=0.0, wind=22.7945, temperature=13.5336, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:31:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:31:49.059 [DEBUG] [Thread-169123] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:31:49.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:31:49.154 [DEBUG] [Thread-169126] [transport.py] [_log()] starting thread (client mode): 0xae52c9a0
2026-04-11T11:31:49.154 [DEBUG] [Thread-169126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:31:49.172 [DEBUG] [Thread-169126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:31:49.172 [INFO] [Thread-169126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:31:49.180 [DEBUG] [Thread-169126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] client lang: <none>
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] server lang: <none>
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] kex follows: False
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:31:49.181 [DEBUG] [Thread-169126] [transport.py] [_log()] Compression: none
2026-04-11T11:31:49.182 [DEBUG] [Thread-169126] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:31:49.237 [DEBUG] [Thread-169126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:31:49.237 [DEBUG] [Thread-169126] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:31:49.238 [DEBUG] [Thread-169126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:31:49.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:31:49.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:31:49.294 [DEBUG] [Thread-169126] [transport.py] [_log()] userauth is OK
2026-04-11T11:31:49.294 [DEBUG] [Thread-169126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:31:49.294 [DEBUG] [Thread-169126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:31:49.295 [DEBUG] [Thread-169126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:31:49.295 [DEBUG] [Thread-169126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:31:49.314 [INFO] [Thread-169126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:31:49.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:31:49.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:31:50.159 [DEBUG] [Thread-169126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:31:50.159 [DEBUG] [Thread-169126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:31:50.207 [DEBUG] [Thread-169126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:31:50.207 [DEBUG] [Thread-169126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:31:50.217 [DEBUG] [Thread-169126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:31:50.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:31:50.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-04-11T11:31:50.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-04-11T11:31:50.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:31:50.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:31:50.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:31:50.258 [DEBUG] [Thread-169126] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:31:53.674 [DEBUG] [Thread-169128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:02.312 [DEBUG] [Thread-169129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:08.736 [DEBUG] [Thread-169130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:20.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:32:20.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:32:20.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-04-11T11:32:21.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 32, 12), 0.05191, 99.6232, 0.0, 18.315, 13.0502, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:32:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:32:12
2026-04-11T11:32:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:32:22.052 [DEBUG] [Thread-169131] [transport.py] [_log()] starting thread (client mode): 0xae52c640
2026-04-11T11:32:22.052 [DEBUG] [Thread-169131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:32:22.072 [DEBUG] [Thread-169131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:32:22.072 [INFO] [Thread-169131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] client lang: <none>
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] server lang: <none>
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] kex follows: False
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:32:22.075 [DEBUG] [Thread-169131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:32:22.076 [DEBUG] [Thread-169131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:32:22.076 [DEBUG] [Thread-169131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:32:22.076 [DEBUG] [Thread-169131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:32:22.076 [DEBUG] [Thread-169131] [transport.py] [_log()] Compression: none
2026-04-11T11:32:22.076 [DEBUG] [Thread-169131] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:32:22.096 [DEBUG] [Thread-169131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:32:22.096 [DEBUG] [Thread-169131] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:32:22.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:32:22.097 [DEBUG] [Thread-169131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:32:22.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:32:22.100 [DEBUG] [Thread-169131] [transport.py] [_log()] userauth is OK
2026-04-11T11:32:22.100 [DEBUG] [Thread-169131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:32:22.100 [DEBUG] [Thread-169131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:32:22.100 [DEBUG] [Thread-169131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:32:22.100 [DEBUG] [Thread-169131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:32:22.124 [INFO] [Thread-169131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:32:22.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:32:22.919 [DEBUG] [Thread-169131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:32:22.920 [DEBUG] [Thread-169131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:32:22.920 [DEBUG] [Thread-169131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:32:22.961 [DEBUG] [Thread-169131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:32:22.961 [DEBUG] [Thread-169131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:32:22.965 [DEBUG] [Thread-169131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:32:22.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:32:22.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:32:22.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:32:22.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:32:22.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:32:22.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:32:22.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:32:22.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:32:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:32:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.396995 -999.00  +13.10  10.17     97  +12.70 1 3 1 3 1   888    0 0.36 -2.41 ----- 7.9 10.2 69.4 19.6 14.4 -0.1 14.4 -0.1 14.4 -0.3 14.6 0.0
2026-04-11T11:32:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:32:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:32:22.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.396995
2026-04-11T11:32:22.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:32:22.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:32:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:32:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:32:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:32:22.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:32:12', tmtdew=0.05191, humidity=99.6232, cloud=0.0, wind=18.315, temperature=13.0502, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:31:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:32:22.993 [DEBUG] [Thread-169131] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:32:23.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:32:23.088 [DEBUG] [Thread-169134] [transport.py] [_log()] starting thread (client mode): 0xae52c4f0
2026-04-11T11:32:23.088 [DEBUG] [Thread-169134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:32:23.103 [DEBUG] [Thread-169134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:32:23.104 [INFO] [Thread-169134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:32:23.111 [DEBUG] [Thread-169134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:32:23.111 [DEBUG] [Thread-169134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:32:23.111 [DEBUG] [Thread-169134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] client lang: <none>
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] server lang: <none>
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] kex follows: False
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] Compression: none
2026-04-11T11:32:23.112 [DEBUG] [Thread-169134] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:32:23.170 [DEBUG] [Thread-169134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:32:23.171 [DEBUG] [Thread-169134] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:32:23.171 [DEBUG] [Thread-169134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:32:23.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:32:23.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:32:23.229 [DEBUG] [Thread-169134] [transport.py] [_log()] userauth is OK
2026-04-11T11:32:23.229 [DEBUG] [Thread-169134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:32:23.229 [DEBUG] [Thread-169134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:32:23.229 [DEBUG] [Thread-169134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:32:23.230 [DEBUG] [Thread-169134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:32:23.249 [INFO] [Thread-169134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:32:23.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:32:23.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:32:23.775 [DEBUG] [Thread-169136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:24.076 [DEBUG] [Thread-169134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:32:24.077 [DEBUG] [Thread-169134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:32:24.125 [DEBUG] [Thread-169134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:32:24.125 [DEBUG] [Thread-169134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:32:24.134 [DEBUG] [Thread-169134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:32:24.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:32:24.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-04-11T11:32:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:32:24.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:32:24.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:32:24.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:32:24.173 [DEBUG] [Thread-169134] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:32:38.831 [DEBUG] [Thread-169137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:45.630 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:45.631 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:53.868 [DEBUG] [Thread-169138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:32:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:32:54.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:32:54.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-04-11T11:32:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 32, 47), 0.10385, 99.2462, 0.0, 21.0658, 13.5003, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:32:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:32:47
2026-04-11T11:32:55.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:32:56.050 [DEBUG] [Thread-169139] [transport.py] [_log()] starting thread (client mode): 0xa79b5f30
2026-04-11T11:32:56.050 [DEBUG] [Thread-169139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:32:56.070 [DEBUG] [Thread-169139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:32:56.071 [INFO] [Thread-169139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] client lang: <none>
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] server lang: <none>
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] kex follows: False
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:32:56.074 [DEBUG] [Thread-169139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:32:56.075 [DEBUG] [Thread-169139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:32:56.075 [DEBUG] [Thread-169139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:32:56.075 [DEBUG] [Thread-169139] [transport.py] [_log()] Compression: none
2026-04-11T11:32:56.075 [DEBUG] [Thread-169139] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:32:56.092 [DEBUG] [Thread-169139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:32:56.092 [DEBUG] [Thread-169139] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:32:56.093 [DEBUG] [Thread-169139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:32:56.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:32:56.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:32:56.095 [DEBUG] [Thread-169139] [transport.py] [_log()] userauth is OK
2026-04-11T11:32:56.095 [DEBUG] [Thread-169139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:32:56.095 [DEBUG] [Thread-169139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:32:56.095 [DEBUG] [Thread-169139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:32:56.095 [DEBUG] [Thread-169139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:32:56.118 [INFO] [Thread-169139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:32:56.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:32:56.931 [DEBUG] [Thread-169139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:32:56.931 [DEBUG] [Thread-169139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:32:56.932 [DEBUG] [Thread-169139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:32:56.972 [DEBUG] [Thread-169139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:32:56.972 [DEBUG] [Thread-169139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:32:56.976 [DEBUG] [Thread-169139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:32:56.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:32:56.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:32:56.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:32:56.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:32:57.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:32:57.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:32:57.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:32:57.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:32:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:32:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.397342 -999.00  +13.10   9.94     97  +12.70 1 3 1 3 1   888    0 0.35 -2.90 ----- 15.9 9.9 89.0 15.5 14.4 0.0 14.5 -0.3 14.4 0.0 14.6 -0.2
2026-04-11T11:32:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:32:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:32:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.397342
2026-04-11T11:32:57.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:32:57.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:32:57.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:32:57.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:32:57.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:32:57.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:32:47', tmtdew=0.10385, humidity=99.2462, cloud=0.0, wind=21.0658, temperature=13.5003, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:32:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:32:57.006 [DEBUG] [Thread-169139] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:32:57.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:32:57.099 [DEBUG] [Thread-169142] [transport.py] [_log()] starting thread (client mode): 0xa79b6290
2026-04-11T11:32:57.099 [DEBUG] [Thread-169142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:32:57.114 [DEBUG] [Thread-169142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:32:57.114 [INFO] [Thread-169142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] client lang: <none>
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] server lang: <none>
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] kex follows: False
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:32:57.122 [DEBUG] [Thread-169142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:32:57.123 [DEBUG] [Thread-169142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:32:57.123 [DEBUG] [Thread-169142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:32:57.123 [DEBUG] [Thread-169142] [transport.py] [_log()] Compression: none
2026-04-11T11:32:57.123 [DEBUG] [Thread-169142] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:32:57.180 [DEBUG] [Thread-169142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:32:57.181 [DEBUG] [Thread-169142] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:32:57.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:32:57.182 [DEBUG] [Thread-169142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:32:57.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:32:57.237 [DEBUG] [Thread-169142] [transport.py] [_log()] userauth is OK
2026-04-11T11:32:57.237 [DEBUG] [Thread-169142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:32:57.237 [DEBUG] [Thread-169142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:32:57.237 [DEBUG] [Thread-169142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:32:57.238 [DEBUG] [Thread-169142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:32:57.256 [INFO] [Thread-169142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:32:57.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:32:57.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:32:58.068 [DEBUG] [Thread-169142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:32:58.069 [DEBUG] [Thread-169142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:32:58.118 [DEBUG] [Thread-169142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:32:58.118 [DEBUG] [Thread-169142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:32:58.127 [DEBUG] [Thread-169142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:32:58.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:32:58.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-04-11T11:32:58.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-04-11T11:32:58.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:32:58.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:32:58.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:32:58.161 [DEBUG] [Thread-169142] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:33:02.357 [DEBUG] [Thread-169144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:33:08.903 [DEBUG] [Thread-169145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:33:23.964 [DEBUG] [Thread-169146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:33:28.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:33:28.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:33:28.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-04-11T11:33:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 32, 47), 0.10385, 99.2462, 0.0, 21.0658, 13.5003, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:33:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:32:47
2026-04-11T11:33:29.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:33:30.016 [DEBUG] [Thread-169147] [transport.py] [_log()] starting thread (client mode): 0xae52c5b0
2026-04-11T11:33:30.016 [DEBUG] [Thread-169147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:33:30.037 [DEBUG] [Thread-169147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:33:30.037 [INFO] [Thread-169147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] client lang: <none>
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] server lang: <none>
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] kex follows: False
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] Compression: none
2026-04-11T11:33:30.039 [DEBUG] [Thread-169147] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:33:30.057 [DEBUG] [Thread-169147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:33:30.057 [DEBUG] [Thread-169147] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:33:30.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:33:30.058 [DEBUG] [Thread-169147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:33:30.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:33:30.060 [DEBUG] [Thread-169147] [transport.py] [_log()] userauth is OK
2026-04-11T11:33:30.061 [DEBUG] [Thread-169147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:33:30.061 [DEBUG] [Thread-169147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:33:30.061 [DEBUG] [Thread-169147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:33:30.061 [DEBUG] [Thread-169147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:33:30.083 [INFO] [Thread-169147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:33:30.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:33:30.875 [DEBUG] [Thread-169147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:33:30.875 [DEBUG] [Thread-169147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:33:30.875 [DEBUG] [Thread-169147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:33:30.916 [DEBUG] [Thread-169147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:33:30.916 [DEBUG] [Thread-169147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:33:30.920 [DEBUG] [Thread-169147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:33:30.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:33:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:33:30.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:33:30.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:33:30.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:33:30.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:33:30.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:33:30.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:33:30.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:33:30.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.397689 -999.00  +13.20  14.48     97  +12.80 1 3 1 3 1   888    0 0.33 -3.45 ----- 18.2 14.5 68.6 21.1 14.4 -0.1 14.4 -0.1 14.4 -0.3 14.7 -0.1
2026-04-11T11:33:30.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:33:30.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:33:30.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.397689
2026-04-11T11:33:30.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:33:30.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:33:30.947 [DEBUG] [Thread-169147] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:33:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:33:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:33:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:33:30.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:32:47', tmtdew=0.10385, humidity=99.2462, cloud=0.0, wind=21.0658, temperature=13.5003, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:32:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:33:31.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:33:31.042 [DEBUG] [Thread-169150] [transport.py] [_log()] starting thread (client mode): 0xae52ca30
2026-04-11T11:33:31.042 [DEBUG] [Thread-169150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:33:31.055 [DEBUG] [Thread-169150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:33:31.056 [INFO] [Thread-169150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] client lang: <none>
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] server lang: <none>
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] kex follows: False
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:33:31.064 [DEBUG] [Thread-169150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:33:31.065 [DEBUG] [Thread-169150] [transport.py] [_log()] Compression: none
2026-04-11T11:33:31.065 [DEBUG] [Thread-169150] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:33:31.125 [DEBUG] [Thread-169150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:33:31.126 [DEBUG] [Thread-169150] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:33:31.126 [DEBUG] [Thread-169150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:33:31.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:33:31.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:33:31.183 [DEBUG] [Thread-169150] [transport.py] [_log()] userauth is OK
2026-04-11T11:33:31.184 [DEBUG] [Thread-169150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:33:31.184 [DEBUG] [Thread-169150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:33:31.184 [DEBUG] [Thread-169150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:33:31.184 [DEBUG] [Thread-169150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:33:31.201 [INFO] [Thread-169150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:33:31.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:33:31.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:33:32.015 [DEBUG] [Thread-169150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:33:32.015 [DEBUG] [Thread-169150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:33:32.063 [DEBUG] [Thread-169150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:33:32.063 [DEBUG] [Thread-169150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:33:32.072 [DEBUG] [Thread-169150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:33:32.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:33:32.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:33:32.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:33:32.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:33:32.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:33:32.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:33:32.107 [DEBUG] [Thread-169150] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:33:39.004 [DEBUG] [Thread-169152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:33:45.771 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:33:45.773 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:33:54.066 [DEBUG] [Thread-169153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:34:02.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:34:02.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-04-11T11:34:02.412 [DEBUG] [Thread-169154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 33, 22), 0.10449, 99.6065, 0.0, 19.003, 13.1002, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:34:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:33:22
2026-04-11T11:34:03.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:34:03.985 [DEBUG] [Thread-169155] [transport.py] [_log()] starting thread (client mode): 0xae52e6b0
2026-04-11T11:34:03.985 [DEBUG] [Thread-169155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:34:04.004 [DEBUG] [Thread-169155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:34:04.004 [INFO] [Thread-169155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] client lang: <none>
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] server lang: <none>
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] kex follows: False
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] Compression: none
2026-04-11T11:34:04.007 [DEBUG] [Thread-169155] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:34:04.016 [DEBUG] [Thread-169155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:34:04.016 [DEBUG] [Thread-169155] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:34:04.016 [DEBUG] [Thread-169155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:34:04.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:34:04.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:34:04.018 [DEBUG] [Thread-169155] [transport.py] [_log()] userauth is OK
2026-04-11T11:34:04.018 [DEBUG] [Thread-169155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:34:04.018 [DEBUG] [Thread-169155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:34:04.018 [DEBUG] [Thread-169155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:34:04.018 [DEBUG] [Thread-169155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:34:04.036 [INFO] [Thread-169155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:34:04.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:34:04.816 [DEBUG] [Thread-169155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:34:04.816 [DEBUG] [Thread-169155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:34:04.816 [DEBUG] [Thread-169155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:34:04.857 [DEBUG] [Thread-169155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:34:04.858 [DEBUG] [Thread-169155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:34:04.861 [DEBUG] [Thread-169155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:34:04.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:34:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:34:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:34:04.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:34:04.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:34:04.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:34:04.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:34:04.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:34:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:34:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.398384 -999.00  +13.10  12.10     97  +12.70 1 3 1 3 1   888    0 0.31 -3.56 ----- 8.8 12.1 70.0 17.3 14.4 -0.6 14.5 -0.1 14.4 -0.3 14.7 -0.1
2026-04-11T11:34:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:34:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:34:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.398384
2026-04-11T11:34:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:34:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:34:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:34:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:34:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:34:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:33:22', tmtdew=0.10449, humidity=99.6065, cloud=0.0, wind=19.003, temperature=13.1002, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:33:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:34:04.888 [DEBUG] [Thread-169155] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:34:04.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:34:04.982 [DEBUG] [Thread-169158] [transport.py] [_log()] starting thread (client mode): 0xae52e410
2026-04-11T11:34:04.982 [DEBUG] [Thread-169158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:34:04.997 [DEBUG] [Thread-169158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:34:04.997 [INFO] [Thread-169158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:34:05.004 [DEBUG] [Thread-169158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:34:05.004 [DEBUG] [Thread-169158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] client lang: <none>
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] server lang: <none>
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] kex follows: False
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] Compression: none
2026-04-11T11:34:05.005 [DEBUG] [Thread-169158] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:34:05.063 [DEBUG] [Thread-169158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:34:05.063 [DEBUG] [Thread-169158] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:34:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:34:05.064 [DEBUG] [Thread-169158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:34:05.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:34:05.122 [DEBUG] [Thread-169158] [transport.py] [_log()] userauth is OK
2026-04-11T11:34:05.122 [DEBUG] [Thread-169158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:34:05.122 [DEBUG] [Thread-169158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:34:05.123 [DEBUG] [Thread-169158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:34:05.123 [DEBUG] [Thread-169158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:34:05.142 [INFO] [Thread-169158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:34:05.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:34:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:34:05.978 [DEBUG] [Thread-169158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:34:05.978 [DEBUG] [Thread-169158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:34:06.026 [DEBUG] [Thread-169158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:34:06.026 [DEBUG] [Thread-169158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:34:06.037 [DEBUG] [Thread-169158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:34:06.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:34:06.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-04-11T11:34:06.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-04-11T11:34:06.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:34:06.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:34:06.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:34:06.074 [DEBUG] [Thread-169158] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:34:09.104 [DEBUG] [Thread-169160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:24.158 [DEBUG] [Thread-169161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:36.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:34:36.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:34:36.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-04-11T11:34:37.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 33, 58), 0.1045, 99.6065, 0.0, 15.3508, 13.1333, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:34:37.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:33:58
2026-04-11T11:34:37.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:34:37.998 [DEBUG] [Thread-169162] [transport.py] [_log()] starting thread (client mode): 0xa795d8a0
2026-04-11T11:34:37.999 [DEBUG] [Thread-169162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:34:38.015 [DEBUG] [Thread-169162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:34:38.015 [INFO] [Thread-169162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:34:38.018 [DEBUG] [Thread-169162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] client lang: <none>
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] server lang: <none>
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] kex follows: False
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] Compression: none
2026-04-11T11:34:38.019 [DEBUG] [Thread-169162] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:34:38.036 [DEBUG] [Thread-169162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:34:38.037 [DEBUG] [Thread-169162] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:34:38.037 [DEBUG] [Thread-169162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:34:38.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:34:38.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:34:38.040 [DEBUG] [Thread-169162] [transport.py] [_log()] userauth is OK
2026-04-11T11:34:38.040 [DEBUG] [Thread-169162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:34:38.040 [DEBUG] [Thread-169162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:34:38.040 [DEBUG] [Thread-169162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:34:38.040 [DEBUG] [Thread-169162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:34:38.064 [INFO] [Thread-169162] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:34:38.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:34:38.838 [DEBUG] [Thread-169162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:34:38.838 [DEBUG] [Thread-169162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:34:38.838 [DEBUG] [Thread-169162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:34:38.879 [DEBUG] [Thread-169162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:34:38.879 [DEBUG] [Thread-169162] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:34:38.883 [DEBUG] [Thread-169162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:34:38.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:34:38.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:34:38.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:34:38.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:34:38.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:34:38.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:34:38.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:34:38.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:34:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:34:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.398731 -999.00  +13.10  16.04     97  +12.70 1 3 1 3 1   888    0 0.31 -4.10 ----- 18.1 16.0 70.6 22.4 14.4 0.0 14.5 -0.1 14.5 -0.2 14.7 -0.1
2026-04-11T11:34:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:34:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:34:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.398731
2026-04-11T11:34:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:34:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:34:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:34:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:34:38.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:34:38.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:33:58', tmtdew=0.1045, humidity=99.6065, cloud=0.0, wind=15.3508, temperature=13.1333, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:34:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:34:38.912 [DEBUG] [Thread-169162] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:34:38.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:34:39.007 [DEBUG] [Thread-169165] [transport.py] [_log()] starting thread (client mode): 0xa795d090
2026-04-11T11:34:39.007 [DEBUG] [Thread-169165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:34:39.021 [DEBUG] [Thread-169165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:34:39.022 [INFO] [Thread-169165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:34:39.029 [DEBUG] [Thread-169165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:34:39.029 [DEBUG] [Thread-169165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:34:39.029 [DEBUG] [Thread-169165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:34:39.029 [DEBUG] [Thread-169165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:39.029 [DEBUG] [Thread-169165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:34:39.029 [DEBUG] [Thread-169165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] client lang: <none>
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] server lang: <none>
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] kex follows: False
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] Compression: none
2026-04-11T11:34:39.030 [DEBUG] [Thread-169165] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:34:39.086 [DEBUG] [Thread-169165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:34:39.087 [DEBUG] [Thread-169165] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:34:39.088 [DEBUG] [Thread-169165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:34:39.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:34:39.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:34:39.143 [DEBUG] [Thread-169165] [transport.py] [_log()] userauth is OK
2026-04-11T11:34:39.143 [DEBUG] [Thread-169165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:34:39.143 [DEBUG] [Thread-169165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:34:39.144 [DEBUG] [Thread-169165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:34:39.144 [DEBUG] [Thread-169165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:34:39.163 [INFO] [Thread-169165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:34:39.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:34:39.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:34:39.197 [DEBUG] [Thread-169167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:39.985 [DEBUG] [Thread-169165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:34:39.985 [DEBUG] [Thread-169165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:34:40.033 [DEBUG] [Thread-169165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:34:40.033 [DEBUG] [Thread-169165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:34:40.043 [DEBUG] [Thread-169165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:34:40.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:34:40.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-04-11T11:34:40.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-04-11T11:34:40.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:34:40.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:34:40.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:34:40.079 [DEBUG] [Thread-169165] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:34:45.914 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:45.915 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:34:54.252 [DEBUG] [Thread-169168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:02.465 [DEBUG] [Thread-169169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:09.290 [DEBUG] [Thread-169170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:35:10.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:35:10.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-04-11T11:35:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 34, 34), 0.11414, 99.1798, 0.0, 22.8298, 13.5334, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:35:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:34:34
2026-04-11T11:35:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:35:12.003 [DEBUG] [Thread-169171] [transport.py] [_log()] starting thread (client mode): 0xae52e1a0
2026-04-11T11:35:12.003 [DEBUG] [Thread-169171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:35:12.026 [DEBUG] [Thread-169171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:35:12.026 [INFO] [Thread-169171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:35:12.029 [DEBUG] [Thread-169171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] client lang: <none>
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] server lang: <none>
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] kex follows: False
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] Compression: none
2026-04-11T11:35:12.030 [DEBUG] [Thread-169171] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:35:12.045 [DEBUG] [Thread-169171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:35:12.045 [DEBUG] [Thread-169171] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:35:12.046 [DEBUG] [Thread-169171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:35:12.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:35:12.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:35:12.047 [DEBUG] [Thread-169171] [transport.py] [_log()] userauth is OK
2026-04-11T11:35:12.047 [DEBUG] [Thread-169171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:35:12.047 [DEBUG] [Thread-169171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:35:12.047 [DEBUG] [Thread-169171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:35:12.047 [DEBUG] [Thread-169171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:35:12.060 [INFO] [Thread-169171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:35:12.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:35:13.276 [DEBUG] [Thread-169171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:35:13.276 [DEBUG] [Thread-169171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:35:13.277 [DEBUG] [Thread-169171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:35:13.317 [DEBUG] [Thread-169171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:35:13.318 [DEBUG] [Thread-169171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:35:13.321 [DEBUG] [Thread-169171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:35:13.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:35:13.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:35:13.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:35:13.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:35:13.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:35:13.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:35:13.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:35:13.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:35:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:35:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.399078 -999.00  +13.10  11.43     97  +12.70 1 3 1 3 1   888    0 0.32 -3.91 ----- 12.3 11.4 62.1 23.0 14.5 -0.4 14.5 -0.4 14.5 -0.4 14.7 -0.0
2026-04-11T11:35:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:35:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:35:13.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.399078
2026-04-11T11:35:13.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:35:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:35:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:35:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:35:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:35:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:34:34', tmtdew=0.11414, humidity=99.1798, cloud=0.0, wind=22.8298, temperature=13.5334, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:34:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:35:13.352 [DEBUG] [Thread-169171] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:35:13.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:35:13.448 [DEBUG] [Thread-169174] [transport.py] [_log()] starting thread (client mode): 0xae52dc00
2026-04-11T11:35:13.448 [DEBUG] [Thread-169174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:35:13.462 [DEBUG] [Thread-169174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:35:13.462 [INFO] [Thread-169174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:35:13.470 [DEBUG] [Thread-169174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:13.471 [DEBUG] [Thread-169174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] client lang: <none>
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] server lang: <none>
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] kex follows: False
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:35:13.472 [DEBUG] [Thread-169174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:35:13.473 [DEBUG] [Thread-169174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:35:13.473 [DEBUG] [Thread-169174] [transport.py] [_log()] Compression: none
2026-04-11T11:35:13.473 [DEBUG] [Thread-169174] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:35:13.531 [DEBUG] [Thread-169174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:35:13.532 [DEBUG] [Thread-169174] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:35:13.533 [DEBUG] [Thread-169174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:35:13.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:35:13.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:35:13.592 [DEBUG] [Thread-169174] [transport.py] [_log()] userauth is OK
2026-04-11T11:35:13.592 [DEBUG] [Thread-169174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:35:13.592 [DEBUG] [Thread-169174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:35:13.592 [DEBUG] [Thread-169174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:35:13.592 [DEBUG] [Thread-169174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:35:13.613 [INFO] [Thread-169174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:35:13.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:35:13.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:35:14.439 [DEBUG] [Thread-169174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:35:14.439 [DEBUG] [Thread-169174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:35:14.488 [DEBUG] [Thread-169174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:35:14.488 [DEBUG] [Thread-169174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:35:14.497 [DEBUG] [Thread-169174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:35:14.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:35:14.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-04-11T11:35:14.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-04-11T11:35:14.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:35:14.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:35:14.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:35:14.533 [DEBUG] [Thread-169174] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:35:24.324 [DEBUG] [Thread-169176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:39.376 [DEBUG] [Thread-169177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:44.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:35:44.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:35:44.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-04-11T11:35:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 35, 9), 0.109635, 99.5732, 0.0, 17.2213, 13.0501, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:35:45.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:35:09
2026-04-11T11:35:46.054 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:46.055 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:35:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:35:46.553 [DEBUG] [Thread-169178] [transport.py] [_log()] starting thread (client mode): 0xa79b5630
2026-04-11T11:35:46.553 [DEBUG] [Thread-169178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:35:46.573 [DEBUG] [Thread-169178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:35:46.573 [INFO] [Thread-169178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] client lang: <none>
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] server lang: <none>
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] kex follows: False
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:35:46.576 [DEBUG] [Thread-169178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:35:46.577 [DEBUG] [Thread-169178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:35:46.577 [DEBUG] [Thread-169178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:35:46.577 [DEBUG] [Thread-169178] [transport.py] [_log()] Compression: none
2026-04-11T11:35:46.577 [DEBUG] [Thread-169178] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:35:46.593 [DEBUG] [Thread-169178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:35:46.594 [DEBUG] [Thread-169178] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:35:46.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:35:46.595 [DEBUG] [Thread-169178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:35:46.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:35:46.596 [DEBUG] [Thread-169178] [transport.py] [_log()] userauth is OK
2026-04-11T11:35:46.596 [DEBUG] [Thread-169178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:35:46.597 [DEBUG] [Thread-169178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:35:46.597 [DEBUG] [Thread-169178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:35:46.597 [DEBUG] [Thread-169178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:35:46.621 [INFO] [Thread-169178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:35:46.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:35:47.395 [DEBUG] [Thread-169178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:35:47.396 [DEBUG] [Thread-169178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:35:47.396 [DEBUG] [Thread-169178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:35:47.436 [DEBUG] [Thread-169178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:35:47.436 [DEBUG] [Thread-169178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:35:47.439 [DEBUG] [Thread-169178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:35:47.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:35:47.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:35:47.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:35:47.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:35:47.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:35:47.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:35:47.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:35:47.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:35:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:35:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.399425 -999.00  +13.10  13.46     97  +12.70 1 3 1 3 1   888    0 0.33 -3.37 ----- 9.0 13.5 83.8 19.5 14.4 -0.8 14.6 -0.1 14.4 -0.1 14.7 -0.1
2026-04-11T11:35:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:35:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:35:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.399425
2026-04-11T11:35:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:35:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:35:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:35:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:35:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:35:47.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:35:09', tmtdew=0.109635, humidity=99.5732, cloud=0.0, wind=17.2213, temperature=13.0501, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:35:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:35:47.469 [DEBUG] [Thread-169178] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:35:47.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:35:47.563 [DEBUG] [Thread-169181] [transport.py] [_log()] starting thread (client mode): 0xa79b4e50
2026-04-11T11:35:47.564 [DEBUG] [Thread-169181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:35:47.578 [DEBUG] [Thread-169181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:35:47.578 [INFO] [Thread-169181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:35:47.586 [DEBUG] [Thread-169181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:35:47.586 [DEBUG] [Thread-169181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:35:47.586 [DEBUG] [Thread-169181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:35:47.586 [DEBUG] [Thread-169181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:47.586 [DEBUG] [Thread-169181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] client lang: <none>
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] server lang: <none>
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] kex follows: False
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] Compression: none
2026-04-11T11:35:47.587 [DEBUG] [Thread-169181] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:35:47.646 [DEBUG] [Thread-169181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:35:47.647 [DEBUG] [Thread-169181] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:35:47.647 [DEBUG] [Thread-169181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:35:47.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:35:47.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:35:47.701 [DEBUG] [Thread-169181] [transport.py] [_log()] userauth is OK
2026-04-11T11:35:47.702 [DEBUG] [Thread-169181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:35:47.702 [DEBUG] [Thread-169181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:35:47.702 [DEBUG] [Thread-169181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:35:47.702 [DEBUG] [Thread-169181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:35:47.724 [INFO] [Thread-169181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:35:47.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:35:47.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:35:48.561 [DEBUG] [Thread-169181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:35:48.561 [DEBUG] [Thread-169181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:35:48.610 [DEBUG] [Thread-169181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:35:48.610 [DEBUG] [Thread-169181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:35:48.619 [DEBUG] [Thread-169181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:35:48.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:35:48.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-04-11T11:35:48.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:35:48.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:35:48.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:35:48.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:35:48.656 [DEBUG] [Thread-169181] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:35:54.414 [DEBUG] [Thread-169183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:02.515 [DEBUG] [Thread-169184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:09.466 [DEBUG] [Thread-169185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:36:18.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:36:18.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-04-11T11:36:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 35, 45), 0.11927, 99.1465, 0.0, 17.6436, 13.5002, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:36:20.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:35:45
2026-04-11T11:36:20.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:36:20.571 [DEBUG] [Thread-169186] [transport.py] [_log()] starting thread (client mode): 0xa79b59f0
2026-04-11T11:36:20.571 [DEBUG] [Thread-169186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:36:20.591 [DEBUG] [Thread-169186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:36:20.591 [INFO] [Thread-169186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] client lang: <none>
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] server lang: <none>
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] kex follows: False
2026-04-11T11:36:20.594 [DEBUG] [Thread-169186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:36:20.595 [DEBUG] [Thread-169186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:36:20.595 [DEBUG] [Thread-169186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:36:20.595 [DEBUG] [Thread-169186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:36:20.595 [DEBUG] [Thread-169186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:36:20.595 [DEBUG] [Thread-169186] [transport.py] [_log()] Compression: none
2026-04-11T11:36:20.595 [DEBUG] [Thread-169186] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:36:20.611 [DEBUG] [Thread-169186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:36:20.611 [DEBUG] [Thread-169186] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:36:20.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:36:20.612 [DEBUG] [Thread-169186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:36:20.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:36:20.614 [DEBUG] [Thread-169186] [transport.py] [_log()] userauth is OK
2026-04-11T11:36:20.614 [DEBUG] [Thread-169186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:36:20.614 [DEBUG] [Thread-169186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:36:20.614 [DEBUG] [Thread-169186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:36:20.614 [DEBUG] [Thread-169186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:36:20.639 [INFO] [Thread-169186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:36:20.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:36:21.460 [DEBUG] [Thread-169186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:36:21.460 [DEBUG] [Thread-169186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:36:21.461 [DEBUG] [Thread-169186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:36:21.502 [DEBUG] [Thread-169186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:36:21.502 [DEBUG] [Thread-169186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:36:21.505 [DEBUG] [Thread-169186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:36:21.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:36:21.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:36:21.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:36:21.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:36:21.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:36:21.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:36:21.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:36:21.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:36:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:36:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.399772 -999.00  +13.10  10.61     97  +12.70 1 3 1 3 1   888    0 0.32 -3.57 ----- 10.5 10.6 79.3 19.4 14.5 -0.3 14.6 0.1 14.5 -0.2 14.7 0.1
2026-04-11T11:36:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:36:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:36:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.399772
2026-04-11T11:36:21.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:36:21.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:36:21.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:36:21.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:36:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:36:21.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:35:45', tmtdew=0.11927, humidity=99.1465, cloud=0.0, wind=17.6436, temperature=13.5002, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:35:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:36:21.530 [DEBUG] [Thread-169186] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:36:21.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:36:21.631 [DEBUG] [Thread-169189] [transport.py] [_log()] starting thread (client mode): 0xa79b5a80
2026-04-11T11:36:21.631 [DEBUG] [Thread-169189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:36:21.646 [DEBUG] [Thread-169189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:36:21.646 [INFO] [Thread-169189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:36:21.654 [DEBUG] [Thread-169189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:36:21.654 [DEBUG] [Thread-169189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:36:21.654 [DEBUG] [Thread-169189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:36:21.654 [DEBUG] [Thread-169189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:21.654 [DEBUG] [Thread-169189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] client lang: <none>
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] server lang: <none>
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] kex follows: False
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] Compression: none
2026-04-11T11:36:21.655 [DEBUG] [Thread-169189] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:36:21.714 [DEBUG] [Thread-169189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:36:21.714 [DEBUG] [Thread-169189] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:36:21.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:36:21.715 [DEBUG] [Thread-169189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:36:21.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:36:21.773 [DEBUG] [Thread-169189] [transport.py] [_log()] userauth is OK
2026-04-11T11:36:21.774 [DEBUG] [Thread-169189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:36:21.774 [DEBUG] [Thread-169189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:36:21.774 [DEBUG] [Thread-169189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:36:21.774 [DEBUG] [Thread-169189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:36:21.793 [INFO] [Thread-169189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:36:21.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:36:21.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:36:22.612 [DEBUG] [Thread-169189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:36:22.612 [DEBUG] [Thread-169189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:36:22.660 [DEBUG] [Thread-169189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:36:22.660 [DEBUG] [Thread-169189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:36:22.669 [DEBUG] [Thread-169189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:36:22.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:36:22.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-04-11T11:36:22.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-04-11T11:36:22.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:36:22.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:36:22.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:36:22.707 [DEBUG] [Thread-169189] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:36:24.504 [DEBUG] [Thread-169191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:39.557 [DEBUG] [Thread-169192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:46.197 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:46.198 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:52.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:36:52.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:36:52.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-04-11T11:36:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 36, 21), 0.04682, 99.6561, 0.0, 16.8509, 13.0998, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:36:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:36:21
2026-04-11T11:36:54.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:36:54.534 [DEBUG] [Thread-169193] [transport.py] [_log()] starting thread (client mode): 0xae52f280
2026-04-11T11:36:54.534 [DEBUG] [Thread-169193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:36:54.555 [DEBUG] [Thread-169193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:36:54.555 [INFO] [Thread-169193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:54.559 [DEBUG] [Thread-169193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] client lang: <none>
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] server lang: <none>
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] kex follows: False
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] Compression: none
2026-04-11T11:36:54.560 [DEBUG] [Thread-169193] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:36:54.582 [DEBUG] [Thread-169193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:36:54.582 [DEBUG] [Thread-169193] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:36:54.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:36:54.584 [DEBUG] [Thread-169193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:36:54.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:36:54.586 [DEBUG] [Thread-169193] [transport.py] [_log()] userauth is OK
2026-04-11T11:36:54.586 [DEBUG] [Thread-169193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:36:54.586 [DEBUG] [Thread-169193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:36:54.586 [DEBUG] [Thread-169193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:36:54.586 [DEBUG] [Thread-169193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:36:54.594 [DEBUG] [Thread-169195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:36:54.604 [INFO] [Thread-169193] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:36:54.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:36:55.411 [DEBUG] [Thread-169193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:36:55.411 [DEBUG] [Thread-169193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:36:55.412 [DEBUG] [Thread-169193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:36:55.452 [DEBUG] [Thread-169193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:36:55.453 [DEBUG] [Thread-169193] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:36:55.456 [DEBUG] [Thread-169193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:36:55.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:36:55.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:36:55.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:36:55.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:36:55.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:36:55.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:36:55.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:36:55.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.400120 -999.00  +13.10   8.26     97  +12.70 1 3 1 3 1   888    0 0.33 -3.48 ----- 7.0 8.3 93.4 15.3 14.5 -0.1 14.6 0.0 14.5 0.0 14.8 0.3
2026-04-11T11:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.400120
2026-04-11T11:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:36:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:36:21', tmtdew=0.04682, humidity=99.6561, cloud=0.0, wind=16.8509, temperature=13.0998, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:36:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:36:55.482 [DEBUG] [Thread-169193] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:36:55.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:36:55.577 [DEBUG] [Thread-169197] [transport.py] [_log()] starting thread (client mode): 0xa795f2b0
2026-04-11T11:36:55.577 [DEBUG] [Thread-169197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:36:55.592 [DEBUG] [Thread-169197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:36:55.592 [INFO] [Thread-169197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] client lang: <none>
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] server lang: <none>
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] kex follows: False
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] Compression: none
2026-04-11T11:36:55.600 [DEBUG] [Thread-169197] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:36:55.657 [DEBUG] [Thread-169197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:36:55.658 [DEBUG] [Thread-169197] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:36:55.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:36:55.659 [DEBUG] [Thread-169197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:36:55.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:36:55.713 [DEBUG] [Thread-169197] [transport.py] [_log()] userauth is OK
2026-04-11T11:36:55.713 [DEBUG] [Thread-169197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:36:55.714 [DEBUG] [Thread-169197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:36:55.714 [DEBUG] [Thread-169197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:36:55.714 [DEBUG] [Thread-169197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:36:55.732 [INFO] [Thread-169197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:36:55.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:36:55.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:36:56.551 [DEBUG] [Thread-169197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:36:56.551 [DEBUG] [Thread-169197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:36:56.599 [DEBUG] [Thread-169197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:36:56.600 [DEBUG] [Thread-169197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:36:56.610 [DEBUG] [Thread-169197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:36:56.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:36:56.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:36:56.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-04-11T11:36:56.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:36:56.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:36:56.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:36:56.655 [DEBUG] [Thread-169197] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:37:02.568 [DEBUG] [Thread-169199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:37:09.630 [DEBUG] [Thread-169200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:37:24.684 [DEBUG] [Thread-169201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:37:26.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:37:26.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:37:26.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-04-11T11:37:27.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 36, 57), 0.049385, 99.6395, 0.0, 14.6099, 13.1164, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:37:27.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:36:57
2026-04-11T11:37:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:37:28.522 [DEBUG] [Thread-169202] [transport.py] [_log()] starting thread (client mode): 0xa795d4e0
2026-04-11T11:37:28.522 [DEBUG] [Thread-169202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:37:28.542 [DEBUG] [Thread-169202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:37:28.542 [INFO] [Thread-169202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:37:28.545 [DEBUG] [Thread-169202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:37:28.545 [DEBUG] [Thread-169202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:37:28.545 [DEBUG] [Thread-169202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] client lang: <none>
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] server lang: <none>
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] kex follows: False
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:37:28.546 [DEBUG] [Thread-169202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:37:28.547 [DEBUG] [Thread-169202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:37:28.547 [DEBUG] [Thread-169202] [transport.py] [_log()] Compression: none
2026-04-11T11:37:28.547 [DEBUG] [Thread-169202] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:37:28.565 [DEBUG] [Thread-169202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:37:28.565 [DEBUG] [Thread-169202] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:37:28.566 [DEBUG] [Thread-169202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:37:28.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:37:28.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:37:28.568 [DEBUG] [Thread-169202] [transport.py] [_log()] userauth is OK
2026-04-11T11:37:28.568 [DEBUG] [Thread-169202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:37:28.569 [DEBUG] [Thread-169202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:37:28.569 [DEBUG] [Thread-169202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:37:28.569 [DEBUG] [Thread-169202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:37:28.593 [INFO] [Thread-169202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:37:28.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:37:29.368 [DEBUG] [Thread-169202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:37:29.368 [DEBUG] [Thread-169202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:37:29.369 [DEBUG] [Thread-169202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:37:29.410 [DEBUG] [Thread-169202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:37:29.410 [DEBUG] [Thread-169202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:37:29.413 [DEBUG] [Thread-169202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:37:29.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:37:29.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:37:29.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:37:29.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:37:29.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:37:29.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:37:29.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:37:29.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.400467 -999.00  +13.20   8.11     97  +12.80 1 3 1 3 1   888    0 0.34 -2.97 ----- 14.4 8.1 132.0 15.7 14.6 0.0 14.7 0.1 14.6 0.1 14.8 0.0
2026-04-11T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.400467
2026-04-11T11:37:29.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:37:29.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:37:29.432 [DEBUG] [Thread-169202] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:37:29.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:37:29.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:37:29.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:37:29.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:36:57', tmtdew=0.049385, humidity=99.6395, cloud=0.0, wind=14.6099, temperature=13.1164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:36:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:37:29.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:37:29.525 [DEBUG] [Thread-169205] [transport.py] [_log()] starting thread (client mode): 0xa795dbd0
2026-04-11T11:37:29.525 [DEBUG] [Thread-169205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:37:29.541 [DEBUG] [Thread-169205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:37:29.541 [INFO] [Thread-169205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] client lang: <none>
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] server lang: <none>
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] kex follows: False
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] Compression: none
2026-04-11T11:37:29.549 [DEBUG] [Thread-169205] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:37:29.609 [DEBUG] [Thread-169205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:37:29.609 [DEBUG] [Thread-169205] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:37:29.610 [DEBUG] [Thread-169205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:37:29.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:37:29.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:37:29.677 [DEBUG] [Thread-169205] [transport.py] [_log()] userauth is OK
2026-04-11T11:37:29.677 [DEBUG] [Thread-169205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:37:29.677 [DEBUG] [Thread-169205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:37:29.678 [DEBUG] [Thread-169205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:37:29.678 [DEBUG] [Thread-169205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:37:29.696 [INFO] [Thread-169205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:37:29.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:37:29.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:37:30.537 [DEBUG] [Thread-169205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:37:30.538 [DEBUG] [Thread-169205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:37:30.585 [DEBUG] [Thread-169205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:37:30.585 [DEBUG] [Thread-169205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:37:30.595 [DEBUG] [Thread-169205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:37:30.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:37:30.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-04-11T11:37:30.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-04-11T11:37:30.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:37:30.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:37:30.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:37:30.632 [DEBUG] [Thread-169205] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:37:39.719 [DEBUG] [Thread-169207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:37:46.338 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:37:46.339 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:37:54.770 [DEBUG] [Thread-169208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:00.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:38:00.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:38:00.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-04-11T11:38:01.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 37, 33), 0.046825, 99.6561, 0.0, 16.2504, 13.1164, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:38:01.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:37:33
2026-04-11T11:38:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:38:02.484 [DEBUG] [Thread-169209] [transport.py] [_log()] starting thread (client mode): 0xa795dab0
2026-04-11T11:38:02.484 [DEBUG] [Thread-169209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:38:02.503 [DEBUG] [Thread-169209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:38:02.504 [INFO] [Thread-169209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:38:02.506 [DEBUG] [Thread-169209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] client lang: <none>
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] server lang: <none>
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] kex follows: False
2026-04-11T11:38:02.507 [DEBUG] [Thread-169209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:38:02.508 [DEBUG] [Thread-169209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:38:02.508 [DEBUG] [Thread-169209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:38:02.508 [DEBUG] [Thread-169209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:38:02.508 [DEBUG] [Thread-169209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:38:02.508 [DEBUG] [Thread-169209] [transport.py] [_log()] Compression: none
2026-04-11T11:38:02.508 [DEBUG] [Thread-169209] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:38:02.527 [DEBUG] [Thread-169209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:38:02.528 [DEBUG] [Thread-169209] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:38:02.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:38:02.529 [DEBUG] [Thread-169209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:38:02.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:38:02.531 [DEBUG] [Thread-169209] [transport.py] [_log()] userauth is OK
2026-04-11T11:38:02.532 [DEBUG] [Thread-169209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:38:02.532 [DEBUG] [Thread-169209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:38:02.532 [DEBUG] [Thread-169209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:38:02.532 [DEBUG] [Thread-169209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:38:02.552 [INFO] [Thread-169209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:38:02.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:38:02.625 [DEBUG] [Thread-169211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:03.344 [DEBUG] [Thread-169209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:38:03.344 [DEBUG] [Thread-169209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:38:03.345 [DEBUG] [Thread-169209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:38:03.385 [DEBUG] [Thread-169209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:38:03.385 [DEBUG] [Thread-169209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:38:03.389 [DEBUG] [Thread-169209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:38:03.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:38:03.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:38:03.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:38:03.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:38:03.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:38:03.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:38:03.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:38:03.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:38:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:38:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.401161 -999.00  +13.10  19.50     97  +12.70 1 3 1 3 1   888    0 0.35 -2.75 ----- 20.2 19.5 63.2 21.6 14.6 -0.4 14.7 0.1 14.6 0.1 14.8 -0.2
2026-04-11T11:38:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:38:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:38:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.401161
2026-04-11T11:38:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:38:03.415 [DEBUG] [Thread-169209] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:38:03.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:38:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:38:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:38:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:38:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:37:33', tmtdew=0.046825, humidity=99.6561, cloud=0.0, wind=16.2504, temperature=13.1164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:37:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:38:03.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:38:03.521 [DEBUG] [Thread-169213] [transport.py] [_log()] starting thread (client mode): 0xa795cb20
2026-04-11T11:38:03.521 [DEBUG] [Thread-169213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:38:03.536 [DEBUG] [Thread-169213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:38:03.536 [INFO] [Thread-169213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:38:03.543 [DEBUG] [Thread-169213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] client lang: <none>
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] server lang: <none>
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] kex follows: False
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] Compression: none
2026-04-11T11:38:03.544 [DEBUG] [Thread-169213] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:38:03.600 [DEBUG] [Thread-169213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:38:03.601 [DEBUG] [Thread-169213] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:38:03.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:38:03.602 [DEBUG] [Thread-169213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:38:03.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:38:03.656 [DEBUG] [Thread-169213] [transport.py] [_log()] userauth is OK
2026-04-11T11:38:03.657 [DEBUG] [Thread-169213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:38:03.657 [DEBUG] [Thread-169213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:38:03.657 [DEBUG] [Thread-169213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:38:03.657 [DEBUG] [Thread-169213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:38:03.675 [INFO] [Thread-169213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:38:03.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:38:03.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:38:04.532 [DEBUG] [Thread-169213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:38:04.533 [DEBUG] [Thread-169213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:38:04.581 [DEBUG] [Thread-169213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:38:04.581 [DEBUG] [Thread-169213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:38:04.591 [DEBUG] [Thread-169213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:38:04.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:38:04.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-04-11T11:38:04.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:38:04.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:38:04.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:38:04.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:38:04.629 [DEBUG] [Thread-169213] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:38:09.808 [DEBUG] [Thread-169215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:24.864 [DEBUG] [Thread-169216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:34.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:38:34.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:38:34.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:38:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 38, 8), 0.04939, 99.6395, 0.0, 16.268, 13.1164, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:38:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:38:08
2026-04-11T11:38:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:38:36.491 [DEBUG] [Thread-169217] [transport.py] [_log()] starting thread (client mode): 0xa795db10
2026-04-11T11:38:36.491 [DEBUG] [Thread-169217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:38:36.510 [DEBUG] [Thread-169217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:38:36.510 [INFO] [Thread-169217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] client lang: <none>
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] server lang: <none>
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] kex follows: False
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] Compression: none
2026-04-11T11:38:36.512 [DEBUG] [Thread-169217] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:38:36.520 [DEBUG] [Thread-169217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:38:36.520 [DEBUG] [Thread-169217] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:38:36.520 [DEBUG] [Thread-169217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:38:36.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:38:36.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:38:36.522 [DEBUG] [Thread-169217] [transport.py] [_log()] userauth is OK
2026-04-11T11:38:36.522 [DEBUG] [Thread-169217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:38:36.522 [DEBUG] [Thread-169217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:38:36.522 [DEBUG] [Thread-169217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:38:36.522 [DEBUG] [Thread-169217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:38:36.544 [INFO] [Thread-169217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:38:36.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:38:37.288 [DEBUG] [Thread-169217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:38:37.288 [DEBUG] [Thread-169217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:38:37.289 [DEBUG] [Thread-169217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:38:37.329 [DEBUG] [Thread-169217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:38:37.329 [DEBUG] [Thread-169217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:38:37.332 [DEBUG] [Thread-169217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:38:37.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:38:37.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:38:37.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:38:37.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:38:37.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:38:37.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:38:37.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:38:37.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:38:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:38:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.401509 -999.00  +13.10  16.86     97  +12.70 1 3 1 3 1   888    0 0.34 -2.73 ----- 9.5 16.9 77.1 20.9 14.6 0.3 14.7 -0.1 14.6 0.1 14.8 -0.2
2026-04-11T11:38:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:38:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:38:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.401509
2026-04-11T11:38:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:38:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:38:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:38:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:38:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:38:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:38:08', tmtdew=0.04939, humidity=99.6395, cloud=0.0, wind=16.268, temperature=13.1164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:38:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:38:37.359 [DEBUG] [Thread-169217] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:38:37.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:38:37.458 [DEBUG] [Thread-169220] [transport.py] [_log()] starting thread (client mode): 0xa795d960
2026-04-11T11:38:37.458 [DEBUG] [Thread-169220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:38:37.473 [DEBUG] [Thread-169220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:38:37.474 [INFO] [Thread-169220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:38:37.481 [DEBUG] [Thread-169220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] client lang: <none>
2026-04-11T11:38:37.482 [DEBUG] [Thread-169220] [transport.py] [_log()] server lang: <none>
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] kex follows: False
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:38:37.483 [DEBUG] [Thread-169220] [transport.py] [_log()] Compression: none
2026-04-11T11:38:37.484 [DEBUG] [Thread-169220] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:38:37.540 [DEBUG] [Thread-169220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:38:37.540 [DEBUG] [Thread-169220] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:38:37.541 [DEBUG] [Thread-169220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:38:37.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:38:37.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:38:37.596 [DEBUG] [Thread-169220] [transport.py] [_log()] userauth is OK
2026-04-11T11:38:37.596 [DEBUG] [Thread-169220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:38:37.596 [DEBUG] [Thread-169220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:38:37.596 [DEBUG] [Thread-169220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:38:37.596 [DEBUG] [Thread-169220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:38:37.612 [INFO] [Thread-169220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:38: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-04-11T11:38:37.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:38:38.427 [DEBUG] [Thread-169220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:38:38.427 [DEBUG] [Thread-169220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:38:38.475 [DEBUG] [Thread-169220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:38:38.476 [DEBUG] [Thread-169220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:38:38.485 [DEBUG] [Thread-169220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:38:38.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:38:38.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-04-11T11:38:38.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-04-11T11:38:38.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:38:38.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:38:38.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:38:38.522 [DEBUG] [Thread-169220] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:38:39.900 [DEBUG] [Thread-169222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:46.479 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:46.481 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:38:54.956 [DEBUG] [Thread-169223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:02.674 [DEBUG] [Thread-169224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:08.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:39:08.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:39:08.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-04-11T11:39:09.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 38, 43), 0.09866, 99.2798, 0.0, 18.2434, 13.6332, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:39:09.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:38:43
2026-04-11T11:39:09.994 [DEBUG] [Thread-169225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:39:10.342 [DEBUG] [Thread-169226] [transport.py] [_log()] starting thread (client mode): 0xa79b43a0
2026-04-11T11:39:10.342 [DEBUG] [Thread-169226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:39:10.363 [DEBUG] [Thread-169226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:39:10.363 [INFO] [Thread-169226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] client lang: <none>
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] server lang: <none>
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] kex follows: False
2026-04-11T11:39:10.366 [DEBUG] [Thread-169226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:39:10.367 [DEBUG] [Thread-169226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:39:10.367 [DEBUG] [Thread-169226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:39:10.367 [DEBUG] [Thread-169226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:39:10.367 [DEBUG] [Thread-169226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:39:10.367 [DEBUG] [Thread-169226] [transport.py] [_log()] Compression: none
2026-04-11T11:39:10.367 [DEBUG] [Thread-169226] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:39:10.382 [DEBUG] [Thread-169226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:39:10.382 [DEBUG] [Thread-169226] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:39:10.382 [DEBUG] [Thread-169226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:39:10.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:39:10.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:39:10.384 [DEBUG] [Thread-169226] [transport.py] [_log()] userauth is OK
2026-04-11T11:39:10.384 [DEBUG] [Thread-169226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:39:10.384 [DEBUG] [Thread-169226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:39:10.384 [DEBUG] [Thread-169226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:39:10.384 [DEBUG] [Thread-169226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:39:10.400 [INFO] [Thread-169226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:39:10.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:39:11.193 [DEBUG] [Thread-169226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:39:11.193 [DEBUG] [Thread-169226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:39:11.194 [DEBUG] [Thread-169226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:39:11.234 [DEBUG] [Thread-169226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:39:11.234 [DEBUG] [Thread-169226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:39:11.237 [DEBUG] [Thread-169226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:39:11.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:39:11.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:39:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:39:11.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:39:11.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:39:11.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:39:11.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:39:11.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:39:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:39:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.401856 -999.00  +13.20   7.70     97  +12.80 1 3 1 3 1   888    0 0.35 -2.71 ----- 9.6 7.7 86.9 14.4 14.6 0.3 14.7 0.2 14.6 0.1 14.9 0.3
2026-04-11T11:39:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:39:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:39:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.401856
2026-04-11T11:39:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:39:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:39:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:39:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:39:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:39:11.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:38:43', tmtdew=0.09866, humidity=99.2798, cloud=0.0, wind=18.2434, temperature=13.6332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:38:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:39:11.265 [DEBUG] [Thread-169226] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:39:11.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:39:11.360 [DEBUG] [Thread-169229] [transport.py] [_log()] starting thread (client mode): 0xa79b4f40
2026-04-11T11:39:11.361 [DEBUG] [Thread-169229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:39:11.376 [DEBUG] [Thread-169229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:39:11.376 [INFO] [Thread-169229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:11.384 [DEBUG] [Thread-169229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] client lang: <none>
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] server lang: <none>
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] kex follows: False
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] Compression: none
2026-04-11T11:39:11.385 [DEBUG] [Thread-169229] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:39:11.444 [DEBUG] [Thread-169229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:39:11.445 [DEBUG] [Thread-169229] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:39:11.445 [DEBUG] [Thread-169229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:39:11.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:39:11.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:39:11.504 [DEBUG] [Thread-169229] [transport.py] [_log()] userauth is OK
2026-04-11T11:39:11.504 [DEBUG] [Thread-169229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:39:11.504 [DEBUG] [Thread-169229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:39:11.504 [DEBUG] [Thread-169229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:39:11.504 [DEBUG] [Thread-169229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:39:11.523 [INFO] [Thread-169229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:39:11.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:39:11.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:39:12.376 [DEBUG] [Thread-169229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:39:12.376 [DEBUG] [Thread-169229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:39:12.424 [DEBUG] [Thread-169229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:39:12.424 [DEBUG] [Thread-169229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:39:12.434 [DEBUG] [Thread-169229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:39:12.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:39:12.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-04-11T11:39:12.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:39:12.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:39:12.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:39:12.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:39:12.471 [DEBUG] [Thread-169229] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:39:25.033 [DEBUG] [Thread-169231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:40.082 [DEBUG] [Thread-169232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:39:42.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:39:42.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-04-11T11:39:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 39, 19), 0.09933, 99.6399, 0.0, 14.8039, 13.2163, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:39:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:39:19
2026-04-11T11:39:44.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:39:44.278 [DEBUG] [Thread-169233] [transport.py] [_log()] starting thread (client mode): 0xa79b5a50
2026-04-11T11:39:44.278 [DEBUG] [Thread-169233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:39:44.298 [DEBUG] [Thread-169233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:39:44.298 [INFO] [Thread-169233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:44.301 [DEBUG] [Thread-169233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] client lang: <none>
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] server lang: <none>
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] kex follows: False
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] Compression: none
2026-04-11T11:39:44.302 [DEBUG] [Thread-169233] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:39:44.322 [DEBUG] [Thread-169233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:39:44.322 [DEBUG] [Thread-169233] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:39:44.323 [DEBUG] [Thread-169233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:39:44.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:39:44.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:39:44.325 [DEBUG] [Thread-169233] [transport.py] [_log()] userauth is OK
2026-04-11T11:39:44.325 [DEBUG] [Thread-169233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:39:44.325 [DEBUG] [Thread-169233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:39:44.325 [DEBUG] [Thread-169233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:39:44.325 [DEBUG] [Thread-169233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:39:44.362 [INFO] [Thread-169233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:39:44.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:39:45.159 [DEBUG] [Thread-169233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:39:45.160 [DEBUG] [Thread-169233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:39:45.160 [DEBUG] [Thread-169233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:39:45.202 [DEBUG] [Thread-169233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:39:45.202 [DEBUG] [Thread-169233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:39:45.205 [DEBUG] [Thread-169233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:39:45.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:39:45.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:39:45.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:39:45.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:39:45.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:39:45.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:39:45.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:39:45.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.402203 -999.00  +13.20  17.24     97  +12.80 1 3 1 3 1   888    0 0.34 -2.75 ----- 15.4 17.2 66.6 22.5 14.7 -0.4 14.8 0.2 14.6 0.2 14.9 0.0
2026-04-11T11:39:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:39:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:39:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.402203
2026-04-11T11:39:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:39:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:39:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:39:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:39:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:39:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:39:19', tmtdew=0.09933, humidity=99.6399, cloud=0.0, wind=14.8039, temperature=13.2163, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:39:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:39:45.229 [DEBUG] [Thread-169233] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:39: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-04-11T11:39:45.324 [DEBUG] [Thread-169236] [transport.py] [_log()] starting thread (client mode): 0xa795ea70
2026-04-11T11:39:45.324 [DEBUG] [Thread-169236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:39:45.344 [DEBUG] [Thread-169236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:39:45.344 [INFO] [Thread-169236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:39:45.352 [DEBUG] [Thread-169236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:39:45.352 [DEBUG] [Thread-169236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:39:45.352 [DEBUG] [Thread-169236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:39:45.352 [DEBUG] [Thread-169236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:45.352 [DEBUG] [Thread-169236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] client lang: <none>
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] server lang: <none>
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] kex follows: False
2026-04-11T11:39:45.353 [DEBUG] [Thread-169236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:39:45.354 [DEBUG] [Thread-169236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:39:45.354 [DEBUG] [Thread-169236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:39:45.354 [DEBUG] [Thread-169236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:39:45.354 [DEBUG] [Thread-169236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:39:45.354 [DEBUG] [Thread-169236] [transport.py] [_log()] Compression: none
2026-04-11T11:39:45.354 [DEBUG] [Thread-169236] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:39:45.412 [DEBUG] [Thread-169236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:39:45.413 [DEBUG] [Thread-169236] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:39:45.414 [DEBUG] [Thread-169236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:39:45.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:39:45.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:39:45.471 [DEBUG] [Thread-169236] [transport.py] [_log()] userauth is OK
2026-04-11T11:39:45.472 [DEBUG] [Thread-169236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:39:45.472 [DEBUG] [Thread-169236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:39:45.473 [DEBUG] [Thread-169236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:39:45.473 [DEBUG] [Thread-169236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:39:45.493 [INFO] [Thread-169236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:39:45.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:39:45.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:39:46.343 [DEBUG] [Thread-169236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:39:46.343 [DEBUG] [Thread-169236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:39:46.391 [DEBUG] [Thread-169236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:39:46.391 [DEBUG] [Thread-169236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:39:46.401 [DEBUG] [Thread-169236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:39:46.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:39:46.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-04-11T11:39:46.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-04-11T11:39:46.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:39:46.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:39:46.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:39:46.438 [DEBUG] [Thread-169236] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:39:46.623 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:46.625 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:39:55.119 [DEBUG] [Thread-169238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:02.729 [DEBUG] [Thread-169239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:10.171 [DEBUG] [Thread-169240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:40:16.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:40:16.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:40:17.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 39, 54), 0.09356, 99.3127, 0.0, 18.1375, 13.6994, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:40:17.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:39:54
2026-04-11T11:40:18.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:40:18.312 [DEBUG] [Thread-169241] [transport.py] [_log()] starting thread (client mode): 0xa795cd60
2026-04-11T11:40:18.312 [DEBUG] [Thread-169241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:40:18.335 [DEBUG] [Thread-169241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:40:18.335 [INFO] [Thread-169241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] client lang: <none>
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] server lang: <none>
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] kex follows: False
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] Compression: none
2026-04-11T11:40:18.338 [DEBUG] [Thread-169241] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:40:18.355 [DEBUG] [Thread-169241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:40:18.356 [DEBUG] [Thread-169241] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:40:18.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:40:18.358 [DEBUG] [Thread-169241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:40:18.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:40:18.360 [DEBUG] [Thread-169241] [transport.py] [_log()] userauth is OK
2026-04-11T11:40:18.360 [DEBUG] [Thread-169241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:40:18.360 [DEBUG] [Thread-169241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:40:18.361 [DEBUG] [Thread-169241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:40:18.361 [DEBUG] [Thread-169241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:40:18.381 [INFO] [Thread-169241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:40:18.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:40:19.700 [DEBUG] [Thread-169241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:40:19.700 [DEBUG] [Thread-169241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:40:19.701 [DEBUG] [Thread-169241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:40:19.741 [DEBUG] [Thread-169241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:40:19.741 [DEBUG] [Thread-169241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:40:19.745 [DEBUG] [Thread-169241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:40:19.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:40:19.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:40:19.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:40:19.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:40:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:40:19.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:40:19.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:40:19.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:40:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:40:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.402550 -999.00  +13.20   9.46     97  +12.80 1 3 1 3 1   888    0 0.34 -2.60 ----- 16.5 9.5 101.1 19.0 14.7 0.2 14.8 0.3 14.7 0.3 15.0 0.4
2026-04-11T11:40:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:40:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:40:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.402550
2026-04-11T11:40:19.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:40:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:40:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:40:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:40:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:40:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:39:54', tmtdew=0.09356, humidity=99.3127, cloud=0.0, wind=18.1375, temperature=13.6994, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:39:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:40:19.775 [DEBUG] [Thread-169241] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:40:19.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:40:19.869 [DEBUG] [Thread-169244] [transport.py] [_log()] starting thread (client mode): 0xa79b5930
2026-04-11T11:40:19.869 [DEBUG] [Thread-169244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:40:19.883 [DEBUG] [Thread-169244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:40:19.884 [INFO] [Thread-169244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:40:19.893 [DEBUG] [Thread-169244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:40:19.893 [DEBUG] [Thread-169244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:40:19.893 [DEBUG] [Thread-169244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:40:19.893 [DEBUG] [Thread-169244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:19.893 [DEBUG] [Thread-169244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] client lang: <none>
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] server lang: <none>
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] kex follows: False
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] Compression: none
2026-04-11T11:40:19.894 [DEBUG] [Thread-169244] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:40:19.954 [DEBUG] [Thread-169244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:40:19.955 [DEBUG] [Thread-169244] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:40:19.955 [DEBUG] [Thread-169244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:40:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:40:19.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:40:20.012 [DEBUG] [Thread-169244] [transport.py] [_log()] userauth is OK
2026-04-11T11:40:20.012 [DEBUG] [Thread-169244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:40:20.012 [DEBUG] [Thread-169244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:40:20.012 [DEBUG] [Thread-169244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:40:20.012 [DEBUG] [Thread-169244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:40:20.031 [INFO] [Thread-169244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:40:20.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:40:20.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:40:20.853 [DEBUG] [Thread-169244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:40:20.854 [DEBUG] [Thread-169244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:40:20.904 [DEBUG] [Thread-169244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:40:20.904 [DEBUG] [Thread-169244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:40:20.914 [DEBUG] [Thread-169244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:40:20.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:40:20.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:40:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:40:20.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:40:20.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:40:20.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:40:20.951 [DEBUG] [Thread-169244] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:40:25.211 [DEBUG] [Thread-169246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:40.262 [DEBUG] [Thread-169247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:46.767 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:46.768 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:40:50.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:40:50.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:40:50.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:40:52.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 40, 30), 0.099345, 99.6398, 0.0, 15.9505, 13.2994, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:40:52.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:40:30
2026-04-11T11:40:52.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:40:52.781 [DEBUG] [Thread-169248] [transport.py] [_log()] starting thread (client mode): 0xae52f400
2026-04-11T11:40:52.781 [DEBUG] [Thread-169248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:40:52.802 [DEBUG] [Thread-169248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:40:52.802 [INFO] [Thread-169248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:40:52.805 [DEBUG] [Thread-169248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:40:52.805 [DEBUG] [Thread-169248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] client lang: <none>
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] server lang: <none>
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] kex follows: False
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:40:52.806 [DEBUG] [Thread-169248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:40:52.807 [DEBUG] [Thread-169248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:40:52.807 [DEBUG] [Thread-169248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:40:52.807 [DEBUG] [Thread-169248] [transport.py] [_log()] Compression: none
2026-04-11T11:40:52.807 [DEBUG] [Thread-169248] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:40:52.826 [DEBUG] [Thread-169248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:40:52.827 [DEBUG] [Thread-169248] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:40:52.827 [DEBUG] [Thread-169248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:40:52.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:40:52.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:40:52.830 [DEBUG] [Thread-169248] [transport.py] [_log()] userauth is OK
2026-04-11T11:40:52.830 [DEBUG] [Thread-169248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:40:52.830 [DEBUG] [Thread-169248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:40:52.830 [DEBUG] [Thread-169248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:40:52.830 [DEBUG] [Thread-169248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:40:52.848 [INFO] [Thread-169248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:40:52.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:40:53.627 [DEBUG] [Thread-169248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:40:53.627 [DEBUG] [Thread-169248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:40:53.627 [DEBUG] [Thread-169248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:40:53.668 [DEBUG] [Thread-169248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:40:53.668 [DEBUG] [Thread-169248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:40:53.672 [DEBUG] [Thread-169248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:40:53.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:40:53.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:40:53.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:40:53.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:40:53.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:40:53.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:40:53.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:40:53.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:40:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:40:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.402897 -999.00  +13.20  15.24     97  +12.80 1 3 1 3 1   888    0 0.33 -2.84 ----- 15.5 15.2 65.0 22.7 14.7 -1.1 14.8 0.1 14.7 0.0 15.0 0.3
2026-04-11T11:40:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:40:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:40:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.402897
2026-04-11T11:40:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:40:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:40:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:40:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:40:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:40:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:40:30', tmtdew=0.099345, humidity=99.6398, cloud=0.0, wind=15.9505, temperature=13.2994, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:40:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:40:53.701 [DEBUG] [Thread-169248] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:40:53.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:40:53.794 [DEBUG] [Thread-169251] [transport.py] [_log()] starting thread (client mode): 0xae52fe20
2026-04-11T11:40:53.794 [DEBUG] [Thread-169251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:40:53.809 [DEBUG] [Thread-169251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:40:53.809 [INFO] [Thread-169251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:40:53.816 [DEBUG] [Thread-169251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] client lang: <none>
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] server lang: <none>
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] kex follows: False
2026-04-11T11:40:53.817 [DEBUG] [Thread-169251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:40:53.818 [DEBUG] [Thread-169251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:40:53.818 [DEBUG] [Thread-169251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:40:53.818 [DEBUG] [Thread-169251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:40:53.818 [DEBUG] [Thread-169251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:40:53.818 [DEBUG] [Thread-169251] [transport.py] [_log()] Compression: none
2026-04-11T11:40:53.818 [DEBUG] [Thread-169251] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:40:53.875 [DEBUG] [Thread-169251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:40:53.876 [DEBUG] [Thread-169251] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:40:53.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:40:53.877 [DEBUG] [Thread-169251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:40:53.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:40:53.931 [DEBUG] [Thread-169251] [transport.py] [_log()] userauth is OK
2026-04-11T11:40:53.931 [DEBUG] [Thread-169251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:40:53.931 [DEBUG] [Thread-169251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:40:53.931 [DEBUG] [Thread-169251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:40:53.931 [DEBUG] [Thread-169251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:40:53.950 [INFO] [Thread-169251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:40:53.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:40:53.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:40:54.779 [DEBUG] [Thread-169251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:40:54.780 [DEBUG] [Thread-169251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:40:54.828 [DEBUG] [Thread-169251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:40:54.829 [DEBUG] [Thread-169251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:40:54.838 [DEBUG] [Thread-169251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:40:54.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:40:54.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:40:54.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:40:54.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:40:54.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:40:54.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:40:54.878 [DEBUG] [Thread-169251] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:40:55.300 [DEBUG] [Thread-169253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:02.773 [DEBUG] [Thread-169254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:10.359 [DEBUG] [Thread-169255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:41:24.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:41:24.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-04-11T11:41:25.398 [DEBUG] [Thread-169256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 41, 5), 0.094225, 99.6729, 0.0, 17.4676, 13.2994, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:41:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:41:05
2026-04-11T11:41:26.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:41:26.696 [DEBUG] [Thread-169257] [transport.py] [_log()] starting thread (client mode): 0xa79b59f0
2026-04-11T11:41:26.696 [DEBUG] [Thread-169257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:41:26.718 [DEBUG] [Thread-169257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:41:26.718 [INFO] [Thread-169257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:41:26.720 [DEBUG] [Thread-169257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] client lang: <none>
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] server lang: <none>
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] kex follows: False
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] Compression: none
2026-04-11T11:41:26.721 [DEBUG] [Thread-169257] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:41:26.737 [DEBUG] [Thread-169257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:41:26.738 [DEBUG] [Thread-169257] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:41:26.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:41:26.739 [DEBUG] [Thread-169257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:41:26.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:41:26.741 [DEBUG] [Thread-169257] [transport.py] [_log()] userauth is OK
2026-04-11T11:41:26.741 [DEBUG] [Thread-169257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:41:26.741 [DEBUG] [Thread-169257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:41:26.741 [DEBUG] [Thread-169257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:41:26.741 [DEBUG] [Thread-169257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:41:26.776 [INFO] [Thread-169257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:41:26.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:41:27.545 [DEBUG] [Thread-169257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:41:27.545 [DEBUG] [Thread-169257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:41:27.546 [DEBUG] [Thread-169257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:41:27.586 [DEBUG] [Thread-169257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:41:27.586 [DEBUG] [Thread-169257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:41:27.590 [DEBUG] [Thread-169257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:41:27.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:41:27.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:41:27.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:41:27.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:41:27.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:41:27.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:41:27.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:41:27.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:41:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:41:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.403245 -999.00  +13.20  14.86     97  +12.80 1 3 1 3 1   888    0 0.33 -3.11 ----- 10.8 14.9 92.5 23.5 14.8 0.4 14.8 0.1 14.8 -0.2 15.0 -0.2
2026-04-11T11:41:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:41:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:41:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.403245
2026-04-11T11:41:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:41:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:41:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:41:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:41:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:41:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:41:05', tmtdew=0.094225, humidity=99.6729, cloud=0.0, wind=17.4676, temperature=13.2994, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:40:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:41:27.620 [DEBUG] [Thread-169257] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:41:27.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:41:27.715 [DEBUG] [Thread-169260] [transport.py] [_log()] starting thread (client mode): 0xa795e620
2026-04-11T11:41:27.715 [DEBUG] [Thread-169260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:41:27.732 [DEBUG] [Thread-169260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:41:27.732 [INFO] [Thread-169260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] client lang: <none>
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] server lang: <none>
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] kex follows: False
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:41:27.740 [DEBUG] [Thread-169260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:41:27.741 [DEBUG] [Thread-169260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:41:27.741 [DEBUG] [Thread-169260] [transport.py] [_log()] Compression: none
2026-04-11T11:41:27.741 [DEBUG] [Thread-169260] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:41:27.802 [DEBUG] [Thread-169260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:41:27.802 [DEBUG] [Thread-169260] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:41:27.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:41:27.804 [DEBUG] [Thread-169260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:41:27.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:41:27.858 [DEBUG] [Thread-169260] [transport.py] [_log()] userauth is OK
2026-04-11T11:41:27.858 [DEBUG] [Thread-169260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:41:27.858 [DEBUG] [Thread-169260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:41:27.858 [DEBUG] [Thread-169260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:41:27.858 [DEBUG] [Thread-169260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:41:27.873 [INFO] [Thread-169260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:41:27.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:41:27.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:41:28.700 [DEBUG] [Thread-169260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:41:28.700 [DEBUG] [Thread-169260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:41:28.749 [DEBUG] [Thread-169260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:41:28.749 [DEBUG] [Thread-169260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:41:28.758 [DEBUG] [Thread-169260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:41:28.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:41:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:41:28.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-04-11T11:41:28.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:41:28.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:41:28.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:41:28.796 [DEBUG] [Thread-169260] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:41:40.438 [DEBUG] [Thread-169262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:46.908 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:46.909 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:55.489 [DEBUG] [Thread-169263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:41:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:41:58.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:41: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-04-11T11:42:00.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 41, 41), 0.10386, 99.2462, 0.0, 22.3358, 13.7988, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:42:00.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:41:41
2026-04-11T11:42:00.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:42:00.600 [DEBUG] [Thread-169264] [transport.py] [_log()] starting thread (client mode): 0xa79b6500
2026-04-11T11:42:00.600 [DEBUG] [Thread-169264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:42:00.620 [DEBUG] [Thread-169264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:42:00.620 [INFO] [Thread-169264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:42:00.623 [DEBUG] [Thread-169264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] client lang: <none>
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] server lang: <none>
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] kex follows: False
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] Compression: none
2026-04-11T11:42:00.624 [DEBUG] [Thread-169264] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:42:00.644 [DEBUG] [Thread-169264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:42:00.644 [DEBUG] [Thread-169264] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:42:00.645 [DEBUG] [Thread-169264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:42:00.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:42:00.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:42:00.647 [DEBUG] [Thread-169264] [transport.py] [_log()] userauth is OK
2026-04-11T11:42:00.647 [DEBUG] [Thread-169264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:42:00.647 [DEBUG] [Thread-169264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:42:00.647 [DEBUG] [Thread-169264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:42:00.647 [DEBUG] [Thread-169264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:42:00.684 [INFO] [Thread-169264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:42:00.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:42:01.513 [DEBUG] [Thread-169264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:42:01.513 [DEBUG] [Thread-169264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:42:01.514 [DEBUG] [Thread-169264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:42:01.554 [DEBUG] [Thread-169264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:42:01.554 [DEBUG] [Thread-169264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:42:01.557 [DEBUG] [Thread-169264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:42:01.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:42:01.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:42:01.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:42:01.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:42:01.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:42:01.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:42:01.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:42:01.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:42:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:42:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.403592 -999.00  +13.10  16.65     97  +12.70 1 3 1 3 1   888    0 0.33 -2.97 ----- 11.4 16.6 62.0 18.7 14.8 0.3 14.8 -0.1 14.8 -0.3 15.0 0.0
2026-04-11T11:42:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:42:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:42:01.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.403592
2026-04-11T11:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:42:01.575 [DEBUG] [Thread-169264] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:42:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:42:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:42:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:41:41', tmtdew=0.10386, humidity=99.2462, cloud=0.0, wind=22.3358, temperature=13.7988, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:41:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:42:01.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:42:01.669 [DEBUG] [Thread-169267] [transport.py] [_log()] starting thread (client mode): 0xa79b6530
2026-04-11T11:42:01.669 [DEBUG] [Thread-169267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:42:01.689 [DEBUG] [Thread-169267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:42:01.689 [INFO] [Thread-169267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:42:01.697 [DEBUG] [Thread-169267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:01.698 [DEBUG] [Thread-169267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] client lang: <none>
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] server lang: <none>
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] kex follows: False
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] Compression: none
2026-04-11T11:42:01.699 [DEBUG] [Thread-169267] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:42:01.758 [DEBUG] [Thread-169267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:42:01.759 [DEBUG] [Thread-169267] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:42:01.760 [DEBUG] [Thread-169267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:42:01.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:42:01.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:42:01.818 [DEBUG] [Thread-169267] [transport.py] [_log()] userauth is OK
2026-04-11T11:42:01.819 [DEBUG] [Thread-169267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:42:01.819 [DEBUG] [Thread-169267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:42:01.819 [DEBUG] [Thread-169267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:42:01.819 [DEBUG] [Thread-169267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:42:01.839 [INFO] [Thread-169267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:42:01.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:42:01.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:42:02.754 [DEBUG] [Thread-169267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:42:02.754 [DEBUG] [Thread-169267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:42:02.801 [DEBUG] [Thread-169267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:42:02.802 [DEBUG] [Thread-169267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:42:02.807 [DEBUG] [Thread-169269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:42:02.812 [DEBUG] [Thread-169267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:42:02.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:42:02.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:42: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') -> 00000000
2026-04-11T11:42:02.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:42:02.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:42:02.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:42:02.847 [DEBUG] [Thread-169267] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:42:10.527 [DEBUG] [Thread-169270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:42:25.580 [DEBUG] [Thread-169271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:42:32.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:42:32.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:42:32.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-04-11T11:42:34.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 42, 16), 0.051935, 99.6231, 0.0, 17.68, 13.2328, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:42:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:42:16
2026-04-11T11:42:34.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:42:34.733 [DEBUG] [Thread-169272] [transport.py] [_log()] starting thread (client mode): 0xae52fcd0
2026-04-11T11:42:34.733 [DEBUG] [Thread-169272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:42:34.754 [DEBUG] [Thread-169272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:42:34.755 [INFO] [Thread-169272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:42:34.758 [DEBUG] [Thread-169272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:42:34.758 [DEBUG] [Thread-169272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:42:34.758 [DEBUG] [Thread-169272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] client lang: <none>
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] server lang: <none>
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] kex follows: False
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] Compression: none
2026-04-11T11:42:34.759 [DEBUG] [Thread-169272] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:42:34.775 [DEBUG] [Thread-169272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:42:34.776 [DEBUG] [Thread-169272] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:42:34.777 [DEBUG] [Thread-169272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:42:34.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:42:34.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:42:34.779 [DEBUG] [Thread-169272] [transport.py] [_log()] userauth is OK
2026-04-11T11:42:34.779 [DEBUG] [Thread-169272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:42:34.779 [DEBUG] [Thread-169272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:42:34.779 [DEBUG] [Thread-169272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:42:34.780 [DEBUG] [Thread-169272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:42:34.797 [INFO] [Thread-169272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:42:34.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:42:35.572 [DEBUG] [Thread-169272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:42:35.572 [DEBUG] [Thread-169272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:42:35.572 [DEBUG] [Thread-169272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:42:35.613 [DEBUG] [Thread-169272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:42:35.614 [DEBUG] [Thread-169272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:42:35.617 [DEBUG] [Thread-169272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:42:35.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:42:35.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:42:35.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:42:35.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:42:35.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:42:35.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:42:35.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:42:35.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:42:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:42:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.404286 -999.00  +13.40   9.08     97  +13.00 1 3 1 3 1   888    0 0.33 -2.87 ----- 12.7 9.1 121.1 13.5 14.9 0.5 15.0 1.0 15.0 0.9 15.2 0.9
2026-04-11T11:42:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:42:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:42:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.404286
2026-04-11T11:42:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:42:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:42:35.645 [DEBUG] [Thread-169272] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:42:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:42:35.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:42:35.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:42:35.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:42:16', tmtdew=0.051935, humidity=99.6231, cloud=0.0, wind=17.68, temperature=13.2328, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:42:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:42:35.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:42:35.742 [DEBUG] [Thread-169275] [transport.py] [_log()] starting thread (client mode): 0xae52ff70
2026-04-11T11:42:35.742 [DEBUG] [Thread-169275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:42:35.757 [DEBUG] [Thread-169275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:42:35.757 [INFO] [Thread-169275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:42:35.764 [DEBUG] [Thread-169275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] client lang: <none>
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] server lang: <none>
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] kex follows: False
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:42:35.765 [DEBUG] [Thread-169275] [transport.py] [_log()] Compression: none
2026-04-11T11:42:35.766 [DEBUG] [Thread-169275] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:42:35.823 [DEBUG] [Thread-169275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:42:35.823 [DEBUG] [Thread-169275] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:42:35.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:42:35.825 [DEBUG] [Thread-169275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:42:35.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:42:35.882 [DEBUG] [Thread-169275] [transport.py] [_log()] userauth is OK
2026-04-11T11:42:35.883 [DEBUG] [Thread-169275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:42:35.883 [DEBUG] [Thread-169275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:42:35.883 [DEBUG] [Thread-169275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:42:35.883 [DEBUG] [Thread-169275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:42:35.901 [INFO] [Thread-169275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:42:35.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:42:35.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:42:36.723 [DEBUG] [Thread-169275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:42:36.724 [DEBUG] [Thread-169275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:42:36.771 [DEBUG] [Thread-169275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:42:36.771 [DEBUG] [Thread-169275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:42:36.780 [DEBUG] [Thread-169275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:42:36.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:42:36.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-04-11T11:42:36.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-04-11T11:42:36.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:42:36.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:42:36.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:42:36.817 [DEBUG] [Thread-169275] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:42:40.619 [DEBUG] [Thread-169277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:42:47.050 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:42:47.051 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:42:55.681 [DEBUG] [Thread-169278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:02.845 [DEBUG] [Thread-169279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:06.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:43:06.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:43:06.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:43:08.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 42, 52), 0.10389, 99.246, 0.0, 17.8553, 13.865, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:43:08.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:42:52
2026-04-11T11:43:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:43:08.638 [DEBUG] [Thread-169280] [transport.py] [_log()] starting thread (client mode): 0xa795d330
2026-04-11T11:43:08.638 [DEBUG] [Thread-169280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:43:08.658 [DEBUG] [Thread-169280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:43:08.658 [INFO] [Thread-169280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] client lang: <none>
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] server lang: <none>
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] kex follows: False
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] Compression: none
2026-04-11T11:43:08.661 [DEBUG] [Thread-169280] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:43:08.676 [DEBUG] [Thread-169280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:43:08.676 [DEBUG] [Thread-169280] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:43:08.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:43:08.677 [DEBUG] [Thread-169280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:43:08.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:43:08.677 [DEBUG] [Thread-169280] [transport.py] [_log()] userauth is OK
2026-04-11T11:43:08.677 [DEBUG] [Thread-169280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:43:08.677 [DEBUG] [Thread-169280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:43:08.678 [DEBUG] [Thread-169280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:43:08.678 [DEBUG] [Thread-169280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:43:08.690 [INFO] [Thread-169280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:43:08.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:43:09.533 [DEBUG] [Thread-169280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:43:09.533 [DEBUG] [Thread-169280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:43:09.534 [DEBUG] [Thread-169280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:43:09.574 [DEBUG] [Thread-169280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:43:09.574 [DEBUG] [Thread-169280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:43:09.578 [DEBUG] [Thread-169280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:43:09.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:43:09.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:43:09.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:43:09.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:43:09.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:43:09.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:43:09.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:43:09.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:43:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:43:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.404633 -999.00  +13.40  11.48     97  +13.00 1 3 1 3 1   888    0 0.34 -2.76 ----- 13.4 11.5 79.9 20.5 15.1 1.1 15.1 0.8 15.1 0.8 15.3 0.4
2026-04-11T11:43:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:43:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:43:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.404633
2026-04-11T11:43:09.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:43:09.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:43:09.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:43:09.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:43:09.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:43:09.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:42:52', tmtdew=0.10389, humidity=99.246, cloud=0.0, wind=17.8553, temperature=13.865, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:42:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:43:09.604 [DEBUG] [Thread-169280] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:43:09.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:43:09.697 [DEBUG] [Thread-169283] [transport.py] [_log()] starting thread (client mode): 0xa795e080
2026-04-11T11:43:09.698 [DEBUG] [Thread-169283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:43:09.713 [DEBUG] [Thread-169283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:43:09.713 [INFO] [Thread-169283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:43:09.720 [DEBUG] [Thread-169283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] client lang: <none>
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] server lang: <none>
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] kex follows: False
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] Compression: none
2026-04-11T11:43:09.721 [DEBUG] [Thread-169283] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:43:09.777 [DEBUG] [Thread-169283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:43:09.778 [DEBUG] [Thread-169283] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:43:09.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:43:09.779 [DEBUG] [Thread-169283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:43:09.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:43:09.833 [DEBUG] [Thread-169283] [transport.py] [_log()] userauth is OK
2026-04-11T11:43:09.834 [DEBUG] [Thread-169283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:43:09.834 [DEBUG] [Thread-169283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:43:09.834 [DEBUG] [Thread-169283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:43:09.834 [DEBUG] [Thread-169283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:43:09.854 [INFO] [Thread-169283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:43:09.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:43:09.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:43:10.689 [DEBUG] [Thread-169283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:43:10.689 [DEBUG] [Thread-169283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:43:10.718 [DEBUG] [Thread-169285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:10.737 [DEBUG] [Thread-169283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:43:10.737 [DEBUG] [Thread-169283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:43:10.746 [DEBUG] [Thread-169283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:43:10.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:43: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')
2026-04-11T11:43:10.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-04-11T11:43:10.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:43:10.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:43:10.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:43:10.781 [DEBUG] [Thread-169283] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:43:25.780 [DEBUG] [Thread-169286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:40.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:43:40.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:43:40.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-04-11T11:43:40.816 [DEBUG] [Thread-169287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 43, 27), 0.051945, 99.623, 0.0, 15.3155, 13.3991, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:43:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:43:27
2026-04-11T11:43:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:43:42.603 [DEBUG] [Thread-169288] [transport.py] [_log()] starting thread (client mode): 0xa795f5b0
2026-04-11T11:43:42.603 [DEBUG] [Thread-169288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:43:42.624 [DEBUG] [Thread-169288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:43:42.624 [INFO] [Thread-169288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:43:42.627 [DEBUG] [Thread-169288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] client lang: <none>
2026-04-11T11:43:42.628 [DEBUG] [Thread-169288] [transport.py] [_log()] server lang: <none>
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] kex follows: False
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] Compression: none
2026-04-11T11:43:42.629 [DEBUG] [Thread-169288] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:43:42.649 [DEBUG] [Thread-169288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:43:42.650 [DEBUG] [Thread-169288] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:43:42.651 [DEBUG] [Thread-169288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:43:42.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:43:42.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:43:42.653 [DEBUG] [Thread-169288] [transport.py] [_log()] userauth is OK
2026-04-11T11:43:42.653 [DEBUG] [Thread-169288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:43:42.653 [DEBUG] [Thread-169288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:43:42.653 [DEBUG] [Thread-169288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:43:42.653 [DEBUG] [Thread-169288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:43:42.688 [INFO] [Thread-169288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:43:42.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:43:43.434 [DEBUG] [Thread-169288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:43:43.434 [DEBUG] [Thread-169288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:43:43.435 [DEBUG] [Thread-169288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:43:43.475 [DEBUG] [Thread-169288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:43:43.476 [DEBUG] [Thread-169288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:43:43.479 [DEBUG] [Thread-169288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:43:43.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:43:43.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:43:43.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:43:43.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:43:43.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:43:43.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:43:43.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:43:43.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:43:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:43:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.404981 -999.00  +13.20  17.80     97  +12.80 1 3 1 3 1   888    0 0.33 -2.82 ----- 11.5 17.8 70.6 23.9 15.1 0.3 15.1 -0.1 15.0 -0.2 15.3 -0.1
2026-04-11T11:43:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:43:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:43:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.404981
2026-04-11T11:43:43.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:43:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:43:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:43:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:43:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:43:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:43:27', tmtdew=0.051945, humidity=99.623, cloud=0.0, wind=15.3155, temperature=13.3991, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:43:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:43:43.506 [DEBUG] [Thread-169288] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:43:43.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:43:43.600 [DEBUG] [Thread-169291] [transport.py] [_log()] starting thread (client mode): 0xae52c910
2026-04-11T11:43:43.600 [DEBUG] [Thread-169291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:43:43.615 [DEBUG] [Thread-169291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:43:43.615 [INFO] [Thread-169291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:43:43.622 [DEBUG] [Thread-169291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] client lang: <none>
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] server lang: <none>
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] kex follows: False
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] Compression: none
2026-04-11T11:43:43.623 [DEBUG] [Thread-169291] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:43:43.681 [DEBUG] [Thread-169291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:43:43.682 [DEBUG] [Thread-169291] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:43:43.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:43:43.683 [DEBUG] [Thread-169291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:43:43.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:43:43.737 [DEBUG] [Thread-169291] [transport.py] [_log()] userauth is OK
2026-04-11T11:43:43.738 [DEBUG] [Thread-169291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:43:43.738 [DEBUG] [Thread-169291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:43:43.738 [DEBUG] [Thread-169291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:43:43.738 [DEBUG] [Thread-169291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:43:43.758 [INFO] [Thread-169291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:43:43.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:43:43.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:43:44.647 [DEBUG] [Thread-169291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:43:44.648 [DEBUG] [Thread-169291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:43:44.696 [DEBUG] [Thread-169291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:43:44.696 [DEBUG] [Thread-169291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:43:44.706 [DEBUG] [Thread-169291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:43:44.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:43:44.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-04-11T11:43:44.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-04-11T11:43:44.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:43:44.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:43:44.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:43:44.743 [DEBUG] [Thread-169291] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:43:47.189 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:47.190 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:43:55.850 [DEBUG] [Thread-169293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:02.892 [DEBUG] [Thread-169294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:10.911 [DEBUG] [Thread-169295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:14.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:44:14.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:44:14.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-04-11T11:44:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 44, 2), 0.049375, 99.6396, 0.0, 15.9505, 13.4322, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:44:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:44:02
2026-04-11T11:44:16.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:44:16.534 [DEBUG] [Thread-169296] [transport.py] [_log()] starting thread (client mode): 0xa79b6980
2026-04-11T11:44:16.534 [DEBUG] [Thread-169296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:44:16.555 [DEBUG] [Thread-169296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:44:16.555 [INFO] [Thread-169296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:16.558 [DEBUG] [Thread-169296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] client lang: <none>
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] server lang: <none>
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] kex follows: False
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] Compression: none
2026-04-11T11:44:16.559 [DEBUG] [Thread-169296] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:44:16.576 [DEBUG] [Thread-169296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:44:16.577 [DEBUG] [Thread-169296] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:44:16.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:44:16.578 [DEBUG] [Thread-169296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:44:16.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:44:16.580 [DEBUG] [Thread-169296] [transport.py] [_log()] userauth is OK
2026-04-11T11:44:16.580 [DEBUG] [Thread-169296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:44:16.580 [DEBUG] [Thread-169296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:44:16.581 [DEBUG] [Thread-169296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:44:16.581 [DEBUG] [Thread-169296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:44:16.599 [INFO] [Thread-169296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:44:16.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:44:17.439 [DEBUG] [Thread-169296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:44:17.440 [DEBUG] [Thread-169296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:44:17.440 [DEBUG] [Thread-169296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:44:17.480 [DEBUG] [Thread-169296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:44:17.480 [DEBUG] [Thread-169296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:44:17.483 [DEBUG] [Thread-169296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:44:17.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:44:17.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:44:17.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:44:17.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:44:17.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:44:17.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:44:17.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:44:17.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:44:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:44:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.405328 -999.00  +13.30  10.48     97  +12.90 1 3 1 3 1   888    0 0.33 -2.81 ----- 9.9 10.5 120.8 20.7 15.0 0.3 15.1 0.3 15.0 0.1 15.3 0.1
2026-04-11T11:44:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:44:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:44:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.405328
2026-04-11T11:44:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:44:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:44:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:44:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:44:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:44:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:44:02', tmtdew=0.049375, humidity=99.6396, cloud=0.0, wind=15.9505, temperature=13.4322, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:43:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:44:17.510 [DEBUG] [Thread-169296] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:44:17.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:44:17.603 [DEBUG] [Thread-169299] [transport.py] [_log()] starting thread (client mode): 0xa79b44f0
2026-04-11T11:44:17.603 [DEBUG] [Thread-169299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:44:17.617 [DEBUG] [Thread-169299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:44:17.617 [INFO] [Thread-169299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] client lang: <none>
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] server lang: <none>
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] kex follows: False
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:44:17.627 [DEBUG] [Thread-169299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:44:17.628 [DEBUG] [Thread-169299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:44:17.628 [DEBUG] [Thread-169299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:44:17.628 [DEBUG] [Thread-169299] [transport.py] [_log()] Compression: none
2026-04-11T11:44:17.628 [DEBUG] [Thread-169299] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:44:17.685 [DEBUG] [Thread-169299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:44:17.685 [DEBUG] [Thread-169299] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:44:17.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:44:17.686 [DEBUG] [Thread-169299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:44:17.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:44:17.741 [DEBUG] [Thread-169299] [transport.py] [_log()] userauth is OK
2026-04-11T11:44:17.741 [DEBUG] [Thread-169299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:44:17.741 [DEBUG] [Thread-169299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:44:17.741 [DEBUG] [Thread-169299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:44:17.741 [DEBUG] [Thread-169299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:44:17.763 [INFO] [Thread-169299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:44:17.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:44:17.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:44:18.618 [DEBUG] [Thread-169299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:44:18.618 [DEBUG] [Thread-169299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:44:18.666 [DEBUG] [Thread-169299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:44:18.666 [DEBUG] [Thread-169299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:44:18.676 [DEBUG] [Thread-169299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:44:18.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:44:18.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:44:18.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:44:18.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:44:18.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:44:18.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:44:18.713 [DEBUG] [Thread-169299] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:44:25.953 [DEBUG] [Thread-169301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:41.016 [DEBUG] [Thread-169302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:47.331 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:47.332 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:44:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:44:48.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:44:48.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-04-11T11:44:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 44, 38), 0.09362, 99.3122, 0.0, 21.8419, 13.9644, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:44:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:44:38
2026-04-11T11:44:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:44:50.725 [DEBUG] [Thread-169303] [transport.py] [_log()] starting thread (client mode): 0xa795e320
2026-04-11T11:44:50.725 [DEBUG] [Thread-169303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:44:50.746 [DEBUG] [Thread-169303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:44:50.746 [INFO] [Thread-169303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:44:50.749 [DEBUG] [Thread-169303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:44:50.749 [DEBUG] [Thread-169303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:44:50.749 [DEBUG] [Thread-169303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] client lang: <none>
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] server lang: <none>
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] kex follows: False
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:44:50.750 [DEBUG] [Thread-169303] [transport.py] [_log()] Compression: none
2026-04-11T11:44:50.751 [DEBUG] [Thread-169303] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:44:50.767 [DEBUG] [Thread-169303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:44:50.767 [DEBUG] [Thread-169303] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:44:50.768 [DEBUG] [Thread-169303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:44:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:44:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:44:50.770 [DEBUG] [Thread-169303] [transport.py] [_log()] userauth is OK
2026-04-11T11:44:50.770 [DEBUG] [Thread-169303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:44:50.770 [DEBUG] [Thread-169303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:44:50.770 [DEBUG] [Thread-169303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:44:50.771 [DEBUG] [Thread-169303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:44:50.794 [INFO] [Thread-169303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:44:50.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:44:51.604 [DEBUG] [Thread-169303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:44:51.604 [DEBUG] [Thread-169303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:44:51.605 [DEBUG] [Thread-169303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:44:51.645 [DEBUG] [Thread-169303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:44:51.646 [DEBUG] [Thread-169303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:44:51.649 [DEBUG] [Thread-169303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:44:51.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:44:51.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:44:51.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:44:51.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:44:51.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:44:51.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:44:51.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:44:51.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:44:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:44:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.405675 -999.00  +13.30   9.38     97  +12.90 1 3 1 3 1   888    0 0.33 -3.03 ----- 16.1 9.4 99.9 15.8 15.1 0.3 15.2 0.4 15.1 0.4 15.3 0.1
2026-04-11T11:44:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:44:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:44:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.405675
2026-04-11T11:44:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:44:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:44:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:44:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:44:51.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:44:51.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:44:38', tmtdew=0.09362, humidity=99.3122, cloud=0.0, wind=21.8419, temperature=13.9644, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:44:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:44:51.677 [DEBUG] [Thread-169303] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:44:51.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:44:51.781 [DEBUG] [Thread-169306] [transport.py] [_log()] starting thread (client mode): 0xa79b54e0
2026-04-11T11:44:51.781 [DEBUG] [Thread-169306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:44:51.796 [DEBUG] [Thread-169306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:44:51.796 [INFO] [Thread-169306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] client lang: <none>
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] server lang: <none>
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] kex follows: False
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:44:51.804 [DEBUG] [Thread-169306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:44:51.805 [DEBUG] [Thread-169306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:44:51.805 [DEBUG] [Thread-169306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:44:51.805 [DEBUG] [Thread-169306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:44:51.805 [DEBUG] [Thread-169306] [transport.py] [_log()] Compression: none
2026-04-11T11:44:51.805 [DEBUG] [Thread-169306] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:44:51.864 [DEBUG] [Thread-169306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:44:51.865 [DEBUG] [Thread-169306] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:44:51.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:44:51.866 [DEBUG] [Thread-169306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:44:51.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:44:51.921 [DEBUG] [Thread-169306] [transport.py] [_log()] userauth is OK
2026-04-11T11:44:51.921 [DEBUG] [Thread-169306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:44:51.921 [DEBUG] [Thread-169306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:44:51.921 [DEBUG] [Thread-169306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:44:51.921 [DEBUG] [Thread-169306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:44:51.940 [INFO] [Thread-169306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:44:51.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:44:51.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:44:52.770 [DEBUG] [Thread-169306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:44:52.771 [DEBUG] [Thread-169306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:44:52.819 [DEBUG] [Thread-169306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:44:52.819 [DEBUG] [Thread-169306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:44:52.829 [DEBUG] [Thread-169306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:44:52.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:44:52.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:44:52.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-04-11T11:44:52.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:44:52.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:44:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:44:52.866 [DEBUG] [Thread-169306] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:44:56.054 [DEBUG] [Thread-169308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:02.938 [DEBUG] [Thread-169309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:11.118 [DEBUG] [Thread-169310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:22.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:45:22.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:45:22.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-04-11T11:45:24.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 45, 14), 0.1071, 99.5898, 0.0, 14.0454, 13.399, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:45:24.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:45:14
2026-04-11T11:45:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:45:24.800 [DEBUG] [Thread-169311] [transport.py] [_log()] starting thread (client mode): 0xae52cc10
2026-04-11T11:45:24.800 [DEBUG] [Thread-169311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:45:24.818 [DEBUG] [Thread-169311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:45:24.819 [INFO] [Thread-169311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:45:24.822 [DEBUG] [Thread-169311] [transport.py] [_log()] client lang: <none>
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] server lang: <none>
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] kex follows: False
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] Compression: none
2026-04-11T11:45:24.823 [DEBUG] [Thread-169311] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:45:24.842 [DEBUG] [Thread-169311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:45:24.843 [DEBUG] [Thread-169311] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:45:24.844 [DEBUG] [Thread-169311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:45:24.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:45:24.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:45:24.846 [DEBUG] [Thread-169311] [transport.py] [_log()] userauth is OK
2026-04-11T11:45:24.847 [DEBUG] [Thread-169311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:45:24.847 [DEBUG] [Thread-169311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:45:24.847 [DEBUG] [Thread-169311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:45:24.847 [DEBUG] [Thread-169311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:45:24.866 [INFO] [Thread-169311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:45:24.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:45:25.687 [DEBUG] [Thread-169311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:45:25.688 [DEBUG] [Thread-169311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:45:25.688 [DEBUG] [Thread-169311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:45:25.729 [DEBUG] [Thread-169311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:45:25.729 [DEBUG] [Thread-169311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:45:25.733 [DEBUG] [Thread-169311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:45:25.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:45:25.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:45:25.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:45:25.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:45:25.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:45:25.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:45:25.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:45:25.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:45:25.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:45:25.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.406022 -999.00  +13.40   9.41     97  +12.90 1 3 1 3 1   888    0 0.33 -2.99 ----- 8.3 9.4 94.6 14.3 15.1 0.5 15.2 0.2 15.2 0.2 15.4 0.5
2026-04-11T11:45:25.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:45:25.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:45:25.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.406022
2026-04-11T11:45:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:45:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:45:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:45:25.761 [DEBUG] [Thread-169311] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:45:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:45:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:45:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:45:14', tmtdew=0.1071, humidity=99.5898, cloud=0.0, wind=14.0454, temperature=13.399, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:44:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:45:25.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:45:25.849 [DEBUG] [Thread-169314] [transport.py] [_log()] starting thread (client mode): 0xa79b7c40
2026-04-11T11:45:25.850 [DEBUG] [Thread-169314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:45:25.864 [DEBUG] [Thread-169314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:45:25.864 [INFO] [Thread-169314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] client lang: <none>
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] server lang: <none>
2026-04-11T11:45:25.872 [DEBUG] [Thread-169314] [transport.py] [_log()] kex follows: False
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] Compression: none
2026-04-11T11:45:25.873 [DEBUG] [Thread-169314] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:45:25.937 [DEBUG] [Thread-169314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:45:25.938 [DEBUG] [Thread-169314] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:45:25.938 [DEBUG] [Thread-169314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:45:25.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:45:25.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:45:25.996 [DEBUG] [Thread-169314] [transport.py] [_log()] userauth is OK
2026-04-11T11:45:25.997 [DEBUG] [Thread-169314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:45:25.997 [DEBUG] [Thread-169314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:45:25.997 [DEBUG] [Thread-169314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:45:25.997 [DEBUG] [Thread-169314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:45:26.016 [INFO] [Thread-169314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:45:26.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:45:26.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:45:26.155 [DEBUG] [Thread-169316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:26.899 [DEBUG] [Thread-169314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:45:26.900 [DEBUG] [Thread-169314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:45:26.947 [DEBUG] [Thread-169314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:45:26.947 [DEBUG] [Thread-169314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:45:26.958 [DEBUG] [Thread-169314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:45:26.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:45:26.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-04-11T11:45:26.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-04-11T11:45:26.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:45:26.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:45:26.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:45:26.998 [DEBUG] [Thread-169314] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:45:41.206 [DEBUG] [Thread-169317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:47.473 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:47.474 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:56.243 [DEBUG] [Thread-169318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:45:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:45:57.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:45:57.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-04-11T11:45:58.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 45, 49), 0.11933, 99.1464, 0.0, 23.747, 13.7985, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:45:58.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:45:49
2026-04-11T11:45:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:45:58.872 [DEBUG] [Thread-169319] [transport.py] [_log()] starting thread (client mode): 0xae5e48e0
2026-04-11T11:45:58.873 [DEBUG] [Thread-169319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:45:58.892 [DEBUG] [Thread-169319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:45:58.892 [INFO] [Thread-169319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] client lang: <none>
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] server lang: <none>
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] kex follows: False
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] Compression: none
2026-04-11T11:45:58.895 [DEBUG] [Thread-169319] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:45:58.912 [DEBUG] [Thread-169319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:45:58.913 [DEBUG] [Thread-169319] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:45:58.913 [DEBUG] [Thread-169319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:45:58.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:45:58.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:45:58.916 [DEBUG] [Thread-169319] [transport.py] [_log()] userauth is OK
2026-04-11T11:45:58.916 [DEBUG] [Thread-169319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:45:58.916 [DEBUG] [Thread-169319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:45:58.917 [DEBUG] [Thread-169319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:45:58.917 [DEBUG] [Thread-169319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:45:58.941 [INFO] [Thread-169319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:45:58.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:45:59.709 [DEBUG] [Thread-169319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:45:59.710 [DEBUG] [Thread-169319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:45:59.710 [DEBUG] [Thread-169319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:45:59.751 [DEBUG] [Thread-169319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:45:59.751 [DEBUG] [Thread-169319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:45:59.753 [DEBUG] [Thread-169319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:45:59.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:45:59.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:45:59.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:45:59.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:45:59.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:45:59.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:45:59.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:45:59.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:45:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:45:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.406370 -999.00  +13.40   9.94     97  +13.00 1 3 1 3 1   888    0 0.32 -3.21 ----- 13.6 9.9 81.4 18.0 15.1 0.3 15.2 0.1 15.2 -0.1 15.4 0.4
2026-04-11T11:45:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:45:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.406370
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:45:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:45:49', tmtdew=0.11933, humidity=99.1464, cloud=0.0, wind=23.747, temperature=13.7985, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:45:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:45:59.765 [DEBUG] [Thread-169319] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:45:59.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:45:59.854 [DEBUG] [Thread-169322] [transport.py] [_log()] starting thread (client mode): 0xae5e44f0
2026-04-11T11:45:59.854 [DEBUG] [Thread-169322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:45:59.872 [DEBUG] [Thread-169322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:45:59.872 [INFO] [Thread-169322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] client lang: <none>
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] server lang: <none>
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] kex follows: False
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] Compression: none
2026-04-11T11:45:59.879 [DEBUG] [Thread-169322] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:45:59.934 [DEBUG] [Thread-169322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:45:59.934 [DEBUG] [Thread-169322] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:45:59.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:45:59.934 [DEBUG] [Thread-169322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:45:59.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:45:59.991 [DEBUG] [Thread-169322] [transport.py] [_log()] userauth is OK
2026-04-11T11:45:59.991 [DEBUG] [Thread-169322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:45:59.992 [DEBUG] [Thread-169322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:45:59.992 [DEBUG] [Thread-169322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:45:59.992 [DEBUG] [Thread-169322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:46:00.010 [INFO] [Thread-169322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:46:00.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:46:00.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:46:00.846 [DEBUG] [Thread-169322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:46:00.846 [DEBUG] [Thread-169322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:46:00.894 [DEBUG] [Thread-169322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:46:00.894 [DEBUG] [Thread-169322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:46:00.905 [DEBUG] [Thread-169322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:46:00.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:46:00.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-04-11T11:46:00.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:46:00.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:46:00.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:46:00.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:46:00.942 [DEBUG] [Thread-169322] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:46:02.976 [DEBUG] [Thread-169324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:46:11.278 [DEBUG] [Thread-169325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:46:26.330 [DEBUG] [Thread-169326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:46:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:46:30.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:46:30.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:46:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 46, 24), 0.099385, 99.6395, 0.0, 15.0685, 13.399, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:46:32.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:46:24
2026-04-11T11:46:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:46:32.795 [DEBUG] [Thread-169327] [transport.py] [_log()] starting thread (client mode): 0xae52e770
2026-04-11T11:46:32.795 [DEBUG] [Thread-169327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:46:32.815 [DEBUG] [Thread-169327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:46:32.815 [INFO] [Thread-169327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] client lang: <none>
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] server lang: <none>
2026-04-11T11:46:32.818 [DEBUG] [Thread-169327] [transport.py] [_log()] kex follows: False
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] Compression: none
2026-04-11T11:46:32.819 [DEBUG] [Thread-169327] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:46:32.833 [DEBUG] [Thread-169327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:46:32.833 [DEBUG] [Thread-169327] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:46:32.833 [DEBUG] [Thread-169327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:46:32.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:46:32.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:46:32.877 [DEBUG] [Thread-169327] [transport.py] [_log()] userauth is OK
2026-04-11T11:46:32.877 [DEBUG] [Thread-169327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:46:32.877 [DEBUG] [Thread-169327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:46:32.877 [DEBUG] [Thread-169327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:46:32.877 [DEBUG] [Thread-169327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:46:32.901 [INFO] [Thread-169327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:46:32.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:46:33.701 [DEBUG] [Thread-169327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:46:33.701 [DEBUG] [Thread-169327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:46:33.702 [DEBUG] [Thread-169327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:46:33.742 [DEBUG] [Thread-169327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:46:33.742 [DEBUG] [Thread-169327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:46:33.746 [DEBUG] [Thread-169327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:46:33.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:46:33.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:46:33.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:46:33.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:46:33.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:46:33.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:46:33.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:46:33.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:46:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:46:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.407064 -999.00  +13.50   9.30     97  +13.10 1 3 1 3 1   888    0 0.34 -2.93 ----- 17.0 9.3 120.2 16.2 15.3 0.2 15.3 0.4 15.2 0.1 15.5 -0.1
2026-04-11T11:46:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:46:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:46:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.407064
2026-04-11T11:46:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:46:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:46:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:46:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:46:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:46:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:46:24', tmtdew=0.099385, humidity=99.6395, cloud=0.0, wind=15.0685, temperature=13.399, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:46:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:46:33.776 [DEBUG] [Thread-169327] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:46:33.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:46:33.868 [DEBUG] [Thread-169330] [transport.py] [_log()] starting thread (client mode): 0xa79b7d60
2026-04-11T11:46:33.868 [DEBUG] [Thread-169330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:46:33.883 [DEBUG] [Thread-169330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:46:33.883 [INFO] [Thread-169330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:46:33.891 [DEBUG] [Thread-169330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:46:33.891 [DEBUG] [Thread-169330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:46:33.891 [DEBUG] [Thread-169330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:46:33.891 [DEBUG] [Thread-169330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:46:33.891 [DEBUG] [Thread-169330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:46:33.891 [DEBUG] [Thread-169330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] client lang: <none>
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] server lang: <none>
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] kex follows: False
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:46:33.892 [DEBUG] [Thread-169330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:46:33.893 [DEBUG] [Thread-169330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:46:33.893 [DEBUG] [Thread-169330] [transport.py] [_log()] Compression: none
2026-04-11T11:46:33.893 [DEBUG] [Thread-169330] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:46:33.948 [DEBUG] [Thread-169330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:46:33.949 [DEBUG] [Thread-169330] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:46:33.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:46:33.950 [DEBUG] [Thread-169330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:46:33.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:46:34.004 [DEBUG] [Thread-169330] [transport.py] [_log()] userauth is OK
2026-04-11T11:46:34.004 [DEBUG] [Thread-169330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:46:34.004 [DEBUG] [Thread-169330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:46:34.004 [DEBUG] [Thread-169330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:46:34.004 [DEBUG] [Thread-169330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:46:34.022 [INFO] [Thread-169330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:46:34.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:46:34.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:46:34.848 [DEBUG] [Thread-169330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:46:34.849 [DEBUG] [Thread-169330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:46:34.897 [DEBUG] [Thread-169330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:46:34.897 [DEBUG] [Thread-169330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:46:34.906 [DEBUG] [Thread-169330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:46:34.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:46:34.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:46:34.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-04-11T11:46:34.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:46:34.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:46:34.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:46:34.943 [DEBUG] [Thread-169330] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:46:41.369 [DEBUG] [Thread-169332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:46:47.614 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:46:47.615 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:46:56.433 [DEBUG] [Thread-169333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:03.021 [DEBUG] [Thread-169334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:04.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:47:04.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:47:04.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-04-11T11:47:06.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 46, 24), 0.099385, 99.6395, 0.0, 15.0685, 13.399, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:47:06.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:46:24
2026-04-11T11:47:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:47:06.836 [DEBUG] [Thread-169335] [transport.py] [_log()] starting thread (client mode): 0xae52f6a0
2026-04-11T11:47:06.836 [DEBUG] [Thread-169335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:47:06.856 [DEBUG] [Thread-169335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:47:06.856 [INFO] [Thread-169335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] client lang: <none>
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] server lang: <none>
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] kex follows: False
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:47:06.857 [DEBUG] [Thread-169335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:47:06.858 [DEBUG] [Thread-169335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:47:06.858 [DEBUG] [Thread-169335] [transport.py] [_log()] Compression: none
2026-04-11T11:47:06.858 [DEBUG] [Thread-169335] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:47:06.866 [DEBUG] [Thread-169335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:47:06.866 [DEBUG] [Thread-169335] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:47:06.866 [DEBUG] [Thread-169335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:47:06.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:47:06.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:47:06.872 [DEBUG] [Thread-169335] [transport.py] [_log()] userauth is OK
2026-04-11T11:47:06.872 [DEBUG] [Thread-169335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:47:06.872 [DEBUG] [Thread-169335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:47:06.872 [DEBUG] [Thread-169335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:47:06.872 [DEBUG] [Thread-169335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:47:06.891 [INFO] [Thread-169335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:47:06.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:47:07.687 [DEBUG] [Thread-169335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:47:07.687 [DEBUG] [Thread-169335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:47:07.687 [DEBUG] [Thread-169335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:47:07.730 [DEBUG] [Thread-169335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:47:07.730 [DEBUG] [Thread-169335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:47:07.734 [DEBUG] [Thread-169335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:47:07.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:47:07.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:47:07.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:47:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:47:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:47:07.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:47:07.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:47:07.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:47:07.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:47:07.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.407411 -999.00  +13.30  15.35     97  +12.90 1 3 1 3 1   888    0 0.33 -2.79 ----- 14.9 15.3 57.4 29.7 15.2 -0.2 15.2 -0.7 15.2 -0.3 15.4 -0.3
2026-04-11T11:47:07.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:47:07.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:47:07.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.407411
2026-04-11T11:47:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:47:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:47:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:47:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:47:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:47:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:46:24', tmtdew=0.099385, humidity=99.6395, cloud=0.0, wind=15.0685, temperature=13.399, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:46:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:47:07.752 [DEBUG] [Thread-169335] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:47:07.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:47:07.848 [DEBUG] [Thread-169338] [transport.py] [_log()] starting thread (client mode): 0xae52d5a0
2026-04-11T11:47:07.848 [DEBUG] [Thread-169338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:47:07.862 [DEBUG] [Thread-169338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:47:07.862 [INFO] [Thread-169338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:47:07.869 [DEBUG] [Thread-169338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:47:07.869 [DEBUG] [Thread-169338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] client lang: <none>
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] server lang: <none>
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] kex follows: False
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] Compression: none
2026-04-11T11:47:07.870 [DEBUG] [Thread-169338] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:47:07.926 [DEBUG] [Thread-169338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:47:07.927 [DEBUG] [Thread-169338] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:47:07.928 [DEBUG] [Thread-169338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:47:07.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:47:07.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:47:07.988 [DEBUG] [Thread-169338] [transport.py] [_log()] userauth is OK
2026-04-11T11:47:07.988 [DEBUG] [Thread-169338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:47:07.988 [DEBUG] [Thread-169338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:47:07.988 [DEBUG] [Thread-169338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:47:07.988 [DEBUG] [Thread-169338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:47:08.007 [INFO] [Thread-169338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:47:08.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:47:08.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:47:08.852 [DEBUG] [Thread-169338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:47:08.852 [DEBUG] [Thread-169338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:47:08.900 [DEBUG] [Thread-169338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:47:08.900 [DEBUG] [Thread-169338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:47:08.909 [DEBUG] [Thread-169338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:47:08.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:47: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-04-11T11:47:08.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-04-11T11:47:08.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:47:08.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:47:08.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:47:08.945 [DEBUG] [Thread-169338] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:47:11.470 [DEBUG] [Thread-169340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:26.531 [DEBUG] [Thread-169341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:38.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:47:38.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:47:38.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-04-11T11:47:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 46, 24), 0.049385, 99.6395, 0.0, 16.8685, 13.399, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:47:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:46:24
2026-04-11T11:47:40.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:47:40.850 [DEBUG] [Thread-169342] [transport.py] [_log()] starting thread (client mode): 0xa79b4e50
2026-04-11T11:47:40.850 [DEBUG] [Thread-169342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:47:40.868 [DEBUG] [Thread-169342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:47:40.869 [INFO] [Thread-169342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] client lang: <none>
2026-04-11T11:47:40.872 [DEBUG] [Thread-169342] [transport.py] [_log()] server lang: <none>
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] kex follows: False
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] Compression: none
2026-04-11T11:47:40.873 [DEBUG] [Thread-169342] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:47:40.887 [DEBUG] [Thread-169342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:47:40.888 [DEBUG] [Thread-169342] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:47:40.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:47:40.889 [DEBUG] [Thread-169342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:47:40.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:47:40.892 [DEBUG] [Thread-169342] [transport.py] [_log()] userauth is OK
2026-04-11T11:47:40.892 [DEBUG] [Thread-169342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:47:40.892 [DEBUG] [Thread-169342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:47:40.892 [DEBUG] [Thread-169342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:47:40.892 [DEBUG] [Thread-169342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:47:40.926 [INFO] [Thread-169342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:47:40.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:47:41.568 [DEBUG] [Thread-169344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:41.686 [DEBUG] [Thread-169342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:47:41.686 [DEBUG] [Thread-169342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:47:41.687 [DEBUG] [Thread-169342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:47:41.727 [DEBUG] [Thread-169342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:47:41.727 [DEBUG] [Thread-169342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:47:41.730 [DEBUG] [Thread-169342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:47:41.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:47:41.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:47:41.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:47:41.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:47:41.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:47:41.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:47:41.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:47:41.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:47:41.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:47:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.407758 -999.00  +13.30  10.24     97  +12.90 1 3 1 3 1   888    0 0.35 -2.01 ----- 13.8 10.2 90.5 26.2 15.2 0.1 15.2 0.1 15.2 -0.3 15.4 0.1
2026-04-11T11:47:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:47:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:47:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.407758
2026-04-11T11:47:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:47:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:47:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:47:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:47:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:47:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:46:24', tmtdew=0.049385, humidity=99.6395, cloud=0.0, wind=16.8685, temperature=13.399, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:47:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:47:41.758 [DEBUG] [Thread-169342] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:47:41.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:47:41.851 [DEBUG] [Thread-169346] [transport.py] [_log()] starting thread (client mode): 0xb39c6020
2026-04-11T11:47:41.851 [DEBUG] [Thread-169346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:47:41.866 [DEBUG] [Thread-169346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:47:41.866 [INFO] [Thread-169346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:47:41.874 [DEBUG] [Thread-169346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:47:41.874 [DEBUG] [Thread-169346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:47:41.874 [DEBUG] [Thread-169346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:47:41.874 [DEBUG] [Thread-169346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:41.874 [DEBUG] [Thread-169346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:47:41.874 [DEBUG] [Thread-169346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] client lang: <none>
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] server lang: <none>
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] kex follows: False
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:47:41.875 [DEBUG] [Thread-169346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:47:41.876 [DEBUG] [Thread-169346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:47:41.876 [DEBUG] [Thread-169346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:47:41.876 [DEBUG] [Thread-169346] [transport.py] [_log()] Compression: none
2026-04-11T11:47:41.876 [DEBUG] [Thread-169346] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:47:41.932 [DEBUG] [Thread-169346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:47:41.933 [DEBUG] [Thread-169346] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:47:41.934 [DEBUG] [Thread-169346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:47:41.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:47:41.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:47:41.991 [DEBUG] [Thread-169346] [transport.py] [_log()] userauth is OK
2026-04-11T11:47:41.992 [DEBUG] [Thread-169346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:47:41.992 [DEBUG] [Thread-169346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:47:41.992 [DEBUG] [Thread-169346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:47:41.992 [DEBUG] [Thread-169346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:47:42.014 [INFO] [Thread-169346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:47:42.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:47:42.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:47:42.859 [DEBUG] [Thread-169346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:47:42.860 [DEBUG] [Thread-169346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:47:42.908 [DEBUG] [Thread-169346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:47:42.909 [DEBUG] [Thread-169346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:47:42.918 [DEBUG] [Thread-169346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:47:42.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:47:42.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-04-11T11:47:42.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:47:42.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:47:42.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:47:42.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:47:42.955 [DEBUG] [Thread-169346] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:47:47.756 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:47.757 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:47:56.606 [DEBUG] [Thread-169348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:03.062 [DEBUG] [Thread-169349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:11.657 [DEBUG] [Thread-169350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:12.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:48:12.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:48:12.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-04-11T11:48:14.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 47, 36), 0.10908, 99.2126, 0.0, 22.7592, 13.9643, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:48:14.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:47:36
2026-04-11T11:48:14.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:48:14.860 [DEBUG] [Thread-169351] [transport.py] [_log()] starting thread (client mode): 0xb39c4bb0
2026-04-11T11:48:14.861 [DEBUG] [Thread-169351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:48:14.880 [DEBUG] [Thread-169351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:48:14.880 [INFO] [Thread-169351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] client lang: <none>
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] server lang: <none>
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] kex follows: False
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] Compression: none
2026-04-11T11:48:14.882 [DEBUG] [Thread-169351] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:48:14.892 [DEBUG] [Thread-169351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:48:14.892 [DEBUG] [Thread-169351] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:48:14.893 [DEBUG] [Thread-169351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:48:14.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:48:14.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:48:14.894 [DEBUG] [Thread-169351] [transport.py] [_log()] userauth is OK
2026-04-11T11:48:14.894 [DEBUG] [Thread-169351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:48:14.895 [DEBUG] [Thread-169351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:48:14.895 [DEBUG] [Thread-169351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:48:14.895 [DEBUG] [Thread-169351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:48:14.913 [INFO] [Thread-169351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:48:14.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:48:15.678 [DEBUG] [Thread-169351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:48:15.678 [DEBUG] [Thread-169351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:48:15.679 [DEBUG] [Thread-169351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:48:15.719 [DEBUG] [Thread-169351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:48:15.719 [DEBUG] [Thread-169351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:48:15.723 [DEBUG] [Thread-169351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:48:15.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:48:15.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:48:15.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:48:15.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:48:15.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:48:15.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:48:15.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:48:15.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:48:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:48:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.408106 -999.00  +13.40  10.04     97  +13.00 1 3 1 3 1   888    0 0.36 -1.79 ----- 10.7 10.0 73.8 18.1 15.2 0.1 15.2 0.0 15.2 -0.2 15.4 -0.1
2026-04-11T11:48:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:48:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:48:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.408106
2026-04-11T11:48:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:48:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:48:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:48:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:48:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:48:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:47:36', tmtdew=0.10908, humidity=99.2126, cloud=0.0, wind=22.7592, temperature=13.9643, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:47:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:48:15.752 [DEBUG] [Thread-169351] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:48:15.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:48:15.844 [DEBUG] [Thread-169354] [transport.py] [_log()] starting thread (client mode): 0xb39c5420
2026-04-11T11:48:15.844 [DEBUG] [Thread-169354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:48:15.859 [DEBUG] [Thread-169354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:48:15.859 [INFO] [Thread-169354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:15.866 [DEBUG] [Thread-169354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] client lang: <none>
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] server lang: <none>
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] kex follows: False
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] Compression: none
2026-04-11T11:48:15.867 [DEBUG] [Thread-169354] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:48:15.927 [DEBUG] [Thread-169354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:48:15.928 [DEBUG] [Thread-169354] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:48:15.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:48:15.929 [DEBUG] [Thread-169354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:48:15.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:48:15.989 [DEBUG] [Thread-169354] [transport.py] [_log()] userauth is OK
2026-04-11T11:48:15.990 [DEBUG] [Thread-169354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:48:15.990 [DEBUG] [Thread-169354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:48:15.990 [DEBUG] [Thread-169354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:48:15.990 [DEBUG] [Thread-169354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:48:16.015 [INFO] [Thread-169354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:48:16.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:48:16.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:48:16.829 [DEBUG] [Thread-169354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:48:16.829 [DEBUG] [Thread-169354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:48:16.877 [DEBUG] [Thread-169354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:48:16.877 [DEBUG] [Thread-169354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:48:16.887 [DEBUG] [Thread-169354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:48:16.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:48:16.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:48:16.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-04-11T11:48:16.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:48:16.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:48:16.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:48:16.927 [DEBUG] [Thread-169354] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:48:26.695 [DEBUG] [Thread-169356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:41.756 [DEBUG] [Thread-169357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:46.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:48:46.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:48:46.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:48:47.897 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:47.898 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:48:48.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 48, 11), 0.049395, 99.6395, 0.0, 16.0571, 13.4487, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:48:48.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:48:11
2026-04-11T11:48:48.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:48:48.741 [DEBUG] [Thread-169358] [transport.py] [_log()] starting thread (client mode): 0xae5e47c0
2026-04-11T11:48:48.741 [DEBUG] [Thread-169358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:48:48.761 [DEBUG] [Thread-169358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:48:48.762 [INFO] [Thread-169358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] client lang: <none>
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] server lang: <none>
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] kex follows: False
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] Compression: none
2026-04-11T11:48:48.764 [DEBUG] [Thread-169358] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:48:48.776 [DEBUG] [Thread-169358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:48:48.776 [DEBUG] [Thread-169358] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:48:48.777 [DEBUG] [Thread-169358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:48:48.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:48:48.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:48:48.780 [DEBUG] [Thread-169358] [transport.py] [_log()] userauth is OK
2026-04-11T11:48:48.780 [DEBUG] [Thread-169358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:48:48.780 [DEBUG] [Thread-169358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:48:48.780 [DEBUG] [Thread-169358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:48:48.780 [DEBUG] [Thread-169358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:48:48.795 [INFO] [Thread-169358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:48:48.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:48:49.590 [DEBUG] [Thread-169358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:48:49.590 [DEBUG] [Thread-169358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:48:49.591 [DEBUG] [Thread-169358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:48:49.631 [DEBUG] [Thread-169358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:48:49.631 [DEBUG] [Thread-169358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:48:49.634 [DEBUG] [Thread-169358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:48:49.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:48:49.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:48:49.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:48:49.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:48:49.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:48:49.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:48:49.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:48:49.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:48:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:48:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.408453 -999.00  +13.30  20.78     97  +12.90 1 3 1 3 1   888    0 0.37 -1.47 ----- 20.5 20.8 75.4 25.0 15.1 -0.1 15.2 -1.0 15.2 -1.0 15.3 -0.8
2026-04-11T11:48:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:48:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:48:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.408453
2026-04-11T11:48:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:48:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:48:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:48:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:48:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:48:49.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:48:11', tmtdew=0.049395, humidity=99.6395, cloud=0.0, wind=16.0571, temperature=13.4487, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:48:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:48:49.660 [DEBUG] [Thread-169358] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:48:49.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:48:49.753 [DEBUG] [Thread-169361] [transport.py] [_log()] starting thread (client mode): 0xae5e7400
2026-04-11T11:48:49.754 [DEBUG] [Thread-169361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:48:49.769 [DEBUG] [Thread-169361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:48:49.769 [INFO] [Thread-169361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:48:49.776 [DEBUG] [Thread-169361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:48:49.776 [DEBUG] [Thread-169361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] client lang: <none>
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] server lang: <none>
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] kex follows: False
2026-04-11T11:48:49.777 [DEBUG] [Thread-169361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:48:49.778 [DEBUG] [Thread-169361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:48:49.778 [DEBUG] [Thread-169361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:48:49.778 [DEBUG] [Thread-169361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:48:49.778 [DEBUG] [Thread-169361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:48:49.778 [DEBUG] [Thread-169361] [transport.py] [_log()] Compression: none
2026-04-11T11:48:49.778 [DEBUG] [Thread-169361] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:48:49.835 [DEBUG] [Thread-169361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:48:49.836 [DEBUG] [Thread-169361] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:48:49.837 [DEBUG] [Thread-169361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:48:49.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:48:49.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:48:49.895 [DEBUG] [Thread-169361] [transport.py] [_log()] userauth is OK
2026-04-11T11:48:49.895 [DEBUG] [Thread-169361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:48:49.895 [DEBUG] [Thread-169361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:48:49.895 [DEBUG] [Thread-169361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:48:49.896 [DEBUG] [Thread-169361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:48:49.915 [INFO] [Thread-169361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:48:49.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:48:49.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:48:50.831 [DEBUG] [Thread-169361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:48:50.832 [DEBUG] [Thread-169361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:48:50.879 [DEBUG] [Thread-169361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:48:50.879 [DEBUG] [Thread-169361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:48:50.888 [DEBUG] [Thread-169361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:48:50.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:48:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:48:50.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-04-11T11:48:50.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:48:50.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:48:50.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:48:50.921 [DEBUG] [Thread-169361] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:48:56.793 [DEBUG] [Thread-169363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:03.100 [DEBUG] [Thread-169364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:11.843 [DEBUG] [Thread-169365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:49:20.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:49:20.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-04-11T11:49:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 48, 46), 0.09879, 99.2789, 0.0, 16.7969, 13.9642, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:49:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:48:46
2026-04-11T11:49:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:49:22.804 [DEBUG] [Thread-169366] [transport.py] [_log()] starting thread (client mode): 0xb39c5f90
2026-04-11T11:49:22.804 [DEBUG] [Thread-169366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:49:22.825 [DEBUG] [Thread-169366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:49:22.825 [INFO] [Thread-169366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] client lang: <none>
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] server lang: <none>
2026-04-11T11:49:22.829 [DEBUG] [Thread-169366] [transport.py] [_log()] kex follows: False
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] Compression: none
2026-04-11T11:49:22.830 [DEBUG] [Thread-169366] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:49:22.847 [DEBUG] [Thread-169366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:49:22.847 [DEBUG] [Thread-169366] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:49:22.848 [DEBUG] [Thread-169366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:49:22.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:49:22.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:49:22.850 [DEBUG] [Thread-169366] [transport.py] [_log()] userauth is OK
2026-04-11T11:49:22.850 [DEBUG] [Thread-169366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:49:22.851 [DEBUG] [Thread-169366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:49:22.851 [DEBUG] [Thread-169366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:49:22.851 [DEBUG] [Thread-169366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:49:22.872 [INFO] [Thread-169366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:49:22.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:49:23.623 [DEBUG] [Thread-169366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:49:23.623 [DEBUG] [Thread-169366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:49:23.624 [DEBUG] [Thread-169366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:49:23.664 [DEBUG] [Thread-169366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:49:23.664 [DEBUG] [Thread-169366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:49:23.668 [DEBUG] [Thread-169366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:49:23.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:49:23.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:49:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:49:23.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:49:23.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:49:23.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:49:23.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:49:23.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:49:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:49:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.408800 -999.00  +13.30  22.67     97  +12.90 1 3 1 3 1   888    0 0.37 -1.44 ----- 22.6 22.7 58.0 26.1 15.1 0.1 15.1 -0.8 15.1 -0.6 15.3 -0.4
2026-04-11T11:49:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:49:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:49:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.408800
2026-04-11T11:49:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:49:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:49:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:49:23.696 [DEBUG] [Thread-169366] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:49:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:49:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:49:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:48:46', tmtdew=0.09879, humidity=99.2789, cloud=0.0, wind=16.7969, temperature=13.9642, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:48:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:49:23.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:49:23.789 [DEBUG] [Thread-169369] [transport.py] [_log()] starting thread (client mode): 0xb39c7a00
2026-04-11T11:49:23.790 [DEBUG] [Thread-169369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:49:23.804 [DEBUG] [Thread-169369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:49:23.804 [INFO] [Thread-169369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:49:23.812 [DEBUG] [Thread-169369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:49:23.812 [DEBUG] [Thread-169369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:49:23.812 [DEBUG] [Thread-169369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:49:23.812 [DEBUG] [Thread-169369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:23.812 [DEBUG] [Thread-169369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] client lang: <none>
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] server lang: <none>
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] kex follows: False
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] Compression: none
2026-04-11T11:49:23.813 [DEBUG] [Thread-169369] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:49:23.871 [DEBUG] [Thread-169369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:49:23.871 [DEBUG] [Thread-169369] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:49:23.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:49:23.872 [DEBUG] [Thread-169369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:49:23.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:49:23.927 [DEBUG] [Thread-169369] [transport.py] [_log()] userauth is OK
2026-04-11T11:49:23.927 [DEBUG] [Thread-169369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:49:23.927 [DEBUG] [Thread-169369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:49:23.927 [DEBUG] [Thread-169369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:49:23.927 [DEBUG] [Thread-169369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:49:23.946 [INFO] [Thread-169369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:49:23.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:49:23.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:49:24.787 [DEBUG] [Thread-169369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:49:24.787 [DEBUG] [Thread-169369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:49:24.835 [DEBUG] [Thread-169369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:49:24.835 [DEBUG] [Thread-169369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:49:24.845 [DEBUG] [Thread-169369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:49:24.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:49:24.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-04-11T11:49:24.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-04-11T11:49:24.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:49:24.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:49:24.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:49:24.882 [DEBUG] [Thread-169369] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:49:26.880 [DEBUG] [Thread-169371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:41.934 [DEBUG] [Thread-169372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:48.044 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:48.045 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:54.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:49:54.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:49:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:49:56.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 49, 22), 0.046825, 99.656, 0.0, 18.7567, 13.4487, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:49:56.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:49:22
2026-04-11T11:49:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:49:56.757 [DEBUG] [Thread-169373] [transport.py] [_log()] starting thread (client mode): 0xb39c49d0
2026-04-11T11:49:56.757 [DEBUG] [Thread-169373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:49:56.779 [DEBUG] [Thread-169373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:49:56.779 [INFO] [Thread-169373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] client lang: <none>
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] server lang: <none>
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] kex follows: False
2026-04-11T11:49:56.783 [DEBUG] [Thread-169373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:49:56.784 [DEBUG] [Thread-169373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:49:56.784 [DEBUG] [Thread-169373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:49:56.784 [DEBUG] [Thread-169373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:49:56.784 [DEBUG] [Thread-169373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:49:56.784 [DEBUG] [Thread-169373] [transport.py] [_log()] Compression: none
2026-04-11T11:49:56.784 [DEBUG] [Thread-169373] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:49:56.799 [DEBUG] [Thread-169373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:49:56.799 [DEBUG] [Thread-169373] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:49:56.800 [DEBUG] [Thread-169373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:49:56.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:49:56.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:49:56.802 [DEBUG] [Thread-169373] [transport.py] [_log()] userauth is OK
2026-04-11T11:49:56.802 [DEBUG] [Thread-169373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:49:56.802 [DEBUG] [Thread-169373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:49:56.802 [DEBUG] [Thread-169373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:49:56.802 [DEBUG] [Thread-169373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:49:56.820 [INFO] [Thread-169373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:49:56.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:49:56.975 [DEBUG] [Thread-169375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:49:57.592 [DEBUG] [Thread-169373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:49:57.592 [DEBUG] [Thread-169373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:49:57.593 [DEBUG] [Thread-169373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:49:57.633 [DEBUG] [Thread-169373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:49:57.633 [DEBUG] [Thread-169373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:49:57.637 [DEBUG] [Thread-169373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:49:57.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:49:57.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:49:57.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:49:57.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:49:57.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:49:57.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:49:57.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:49:57.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:49:57.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:49:57.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.409147 -999.00  +13.20  19.44     97  +12.80 1 3 1 3 1   888    0 0.37 -1.32 ----- 16.9 19.4 66.8 22.8 15.0 0.3 15.0 -0.7 15.1 -0.6 15.3 -0.4
2026-04-11T11:49:57.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:49:57.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:49:57.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.409147
2026-04-11T11:49:57.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:49:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:49:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:49:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:49:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:49:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:49:22', tmtdew=0.046825, humidity=99.656, cloud=0.0, wind=18.7567, temperature=13.4487, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:49:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:49:57.668 [DEBUG] [Thread-169373] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:49:57.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:49:57.764 [DEBUG] [Thread-169377] [transport.py] [_log()] starting thread (client mode): 0xae5e7ac0
2026-04-11T11:49:57.764 [DEBUG] [Thread-169377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:49:57.778 [DEBUG] [Thread-169377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:49:57.778 [INFO] [Thread-169377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] client lang: <none>
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] server lang: <none>
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] kex follows: False
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:49:57.789 [DEBUG] [Thread-169377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:49:57.790 [DEBUG] [Thread-169377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:49:57.790 [DEBUG] [Thread-169377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:49:57.790 [DEBUG] [Thread-169377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:49:57.790 [DEBUG] [Thread-169377] [transport.py] [_log()] Compression: none
2026-04-11T11:49:57.790 [DEBUG] [Thread-169377] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:49:57.846 [DEBUG] [Thread-169377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:49:57.846 [DEBUG] [Thread-169377] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:49:57.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:49:57.847 [DEBUG] [Thread-169377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:49:57.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:49:57.902 [DEBUG] [Thread-169377] [transport.py] [_log()] userauth is OK
2026-04-11T11:49:57.903 [DEBUG] [Thread-169377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:49:57.903 [DEBUG] [Thread-169377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:49:57.903 [DEBUG] [Thread-169377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:49:57.903 [DEBUG] [Thread-169377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:49:57.925 [INFO] [Thread-169377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:49:57.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:49:57.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:49:58.809 [DEBUG] [Thread-169377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:49:58.809 [DEBUG] [Thread-169377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:49:58.857 [DEBUG] [Thread-169377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:49:58.858 [DEBUG] [Thread-169377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:49:58.867 [DEBUG] [Thread-169377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:49:58.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:49:58.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:49:58.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-04-11T11:49:58.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:49:58.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:49:58.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:49:58.909 [DEBUG] [Thread-169377] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:50:03.146 [DEBUG] [Thread-169379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:50:12.009 [DEBUG] [Thread-169380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:50:27.067 [DEBUG] [Thread-169381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:50:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:50:28.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:50:28.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:50:30.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 49, 57), 0.04683, 99.656, 0.0, 15.4566, 13.4819, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:50:30.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:49:57
2026-04-11T11:50:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:50:30.775 [DEBUG] [Thread-169382] [transport.py] [_log()] starting thread (client mode): 0xae5e7670
2026-04-11T11:50:30.775 [DEBUG] [Thread-169382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:50:30.797 [DEBUG] [Thread-169382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:50:30.797 [INFO] [Thread-169382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] client lang: <none>
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] server lang: <none>
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] kex follows: False
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:50:30.799 [DEBUG] [Thread-169382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:50:30.800 [DEBUG] [Thread-169382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:50:30.800 [DEBUG] [Thread-169382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:50:30.800 [DEBUG] [Thread-169382] [transport.py] [_log()] Compression: none
2026-04-11T11:50:30.800 [DEBUG] [Thread-169382] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:50:30.816 [DEBUG] [Thread-169382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:50:30.817 [DEBUG] [Thread-169382] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:50:30.817 [DEBUG] [Thread-169382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:50:30.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:50:30.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:50:30.819 [DEBUG] [Thread-169382] [transport.py] [_log()] userauth is OK
2026-04-11T11:50:30.819 [DEBUG] [Thread-169382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:50:30.819 [DEBUG] [Thread-169382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:50:30.819 [DEBUG] [Thread-169382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:50:30.819 [DEBUG] [Thread-169382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:50:30.836 [INFO] [Thread-169382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:50:30.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:50:31.573 [DEBUG] [Thread-169382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:50:31.573 [DEBUG] [Thread-169382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:50:31.574 [DEBUG] [Thread-169382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:50:31.614 [DEBUG] [Thread-169382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:50:31.614 [DEBUG] [Thread-169382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:50:31.617 [DEBUG] [Thread-169382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:50:31.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:50:31.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:50:31.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:50:31.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:50:31.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:50:31.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:50:31.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.409842 -999.00  +13.30  23.17     97  +12.90 1 3 1 3 1   888    0 0.37 -1.23 ----- 15.5 23.2 69.8 25.1 15.1 -0.3 15.1 -0.2 15.0 -0.3 15.3 -0.4
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.409842
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:50:31.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:49:57', tmtdew=0.04683, humidity=99.656, cloud=0.0, wind=15.4566, temperature=13.4819, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:50:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:50:31.633 [DEBUG] [Thread-169382] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:50:31.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:50:31.730 [DEBUG] [Thread-169385] [transport.py] [_log()] starting thread (client mode): 0xae5e7550
2026-04-11T11:50:31.730 [DEBUG] [Thread-169385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:50:31.745 [DEBUG] [Thread-169385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:50:31.745 [INFO] [Thread-169385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:50:31.759 [DEBUG] [Thread-169385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:50:31.759 [DEBUG] [Thread-169385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:50:31.759 [DEBUG] [Thread-169385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] client lang: <none>
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] server lang: <none>
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] kex follows: False
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] Compression: none
2026-04-11T11:50:31.760 [DEBUG] [Thread-169385] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:50:31.820 [DEBUG] [Thread-169385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:50:31.820 [DEBUG] [Thread-169385] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:50:31.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:50:31.821 [DEBUG] [Thread-169385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:50:31.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:50:31.882 [DEBUG] [Thread-169385] [transport.py] [_log()] userauth is OK
2026-04-11T11:50:31.883 [DEBUG] [Thread-169385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:50:31.883 [DEBUG] [Thread-169385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:50:31.883 [DEBUG] [Thread-169385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:50:31.883 [DEBUG] [Thread-169385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:50:31.904 [INFO] [Thread-169385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:50:31.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:50:31.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:50:32.738 [DEBUG] [Thread-169385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:50:32.738 [DEBUG] [Thread-169385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:50:32.786 [DEBUG] [Thread-169385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:50:32.786 [DEBUG] [Thread-169385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:50:32.794 [DEBUG] [Thread-169385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:50:32.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:50:32.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-04-11T11:50:32.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-04-11T11:50:32.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:50:32.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:50:32.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:50:32.827 [DEBUG] [Thread-169385] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:50:42.108 [DEBUG] [Thread-169387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:50:48.185 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:50:48.186 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:50:57.161 [DEBUG] [Thread-169388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:51:02.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:51:02.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-04-11T11:51:03.192 [DEBUG] [Thread-169389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 50, 33), 0.0494, 99.6394, 0.0, 16.0916, 13.4487, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:51:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:50:33
2026-04-11T11:51:04.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:51:04.673 [DEBUG] [Thread-169390] [transport.py] [_log()] starting thread (client mode): 0xb39c6950
2026-04-11T11:51:04.673 [DEBUG] [Thread-169390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:51:04.693 [DEBUG] [Thread-169390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:51:04.694 [INFO] [Thread-169390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:04.697 [DEBUG] [Thread-169390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] client lang: <none>
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] server lang: <none>
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] kex follows: False
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] Compression: none
2026-04-11T11:51:04.698 [DEBUG] [Thread-169390] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:51:04.719 [DEBUG] [Thread-169390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:51:04.719 [DEBUG] [Thread-169390] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:51:04.720 [DEBUG] [Thread-169390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:51:04.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:51:04.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:51:04.722 [DEBUG] [Thread-169390] [transport.py] [_log()] userauth is OK
2026-04-11T11:51:04.722 [DEBUG] [Thread-169390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:51:04.722 [DEBUG] [Thread-169390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:51:04.722 [DEBUG] [Thread-169390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:51:04.722 [DEBUG] [Thread-169390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:51:04.746 [INFO] [Thread-169390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:51:04.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:51:05.556 [DEBUG] [Thread-169390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:51:05.556 [DEBUG] [Thread-169390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:51:05.557 [DEBUG] [Thread-169390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:51:05.597 [DEBUG] [Thread-169390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:51:05.597 [DEBUG] [Thread-169390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:51:05.601 [DEBUG] [Thread-169390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:51:05.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:51:05.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:51:05.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:51:05.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:51:05.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:51:05.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:51:05.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:51:05.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:51:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:51:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.410189 -999.00  +13.20  19.42     97  +12.70 1 3 1 3 1   888    0 0.38 -0.91 ----- 16.6 19.4 61.0 25.6 14.9 -1.5 15.0 -0.7 14.9 -0.9 15.1 -0.4
2026-04-11T11:51:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:51:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:51:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.410189
2026-04-11T11:51:05.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:51:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:51:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:51:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:51:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:51:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:50:33', tmtdew=0.0494, humidity=99.6394, cloud=0.0, wind=16.0916, temperature=13.4487, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:50:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:51:05.627 [DEBUG] [Thread-169390] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:51:05.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:51:05.714 [DEBUG] [Thread-169393] [transport.py] [_log()] starting thread (client mode): 0xae52c4f0
2026-04-11T11:51:05.715 [DEBUG] [Thread-169393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:51:05.729 [DEBUG] [Thread-169393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:51:05.730 [INFO] [Thread-169393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:51:05.737 [DEBUG] [Thread-169393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:51:05.737 [DEBUG] [Thread-169393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:51:05.737 [DEBUG] [Thread-169393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:51:05.737 [DEBUG] [Thread-169393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] client lang: <none>
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] server lang: <none>
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] kex follows: False
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] Compression: none
2026-04-11T11:51:05.738 [DEBUG] [Thread-169393] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:51:05.795 [DEBUG] [Thread-169393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:51:05.795 [DEBUG] [Thread-169393] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:51:05.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:51:05.796 [DEBUG] [Thread-169393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:51:05.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:51:05.851 [DEBUG] [Thread-169393] [transport.py] [_log()] userauth is OK
2026-04-11T11:51:05.851 [DEBUG] [Thread-169393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:51:05.851 [DEBUG] [Thread-169393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:51:05.852 [DEBUG] [Thread-169393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:51:05.852 [DEBUG] [Thread-169393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:51:05.877 [INFO] [Thread-169393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:51:05.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:51:05.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:51:06.729 [DEBUG] [Thread-169393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:51:06.729 [DEBUG] [Thread-169393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:51:06.777 [DEBUG] [Thread-169393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:51:06.777 [DEBUG] [Thread-169393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:51:06.786 [DEBUG] [Thread-169393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:51:06.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:51:06.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-04-11T11:51:06.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-04-11T11:51:06.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:51:06.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:51:06.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:51:06.824 [DEBUG] [Thread-169393] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:51:12.200 [DEBUG] [Thread-169395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:27.253 [DEBUG] [Thread-169396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:36.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:51:36.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:51:36.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-04-11T11:51:38.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 51, 8), 0.0494, 99.6394, 0.0, 15.439, 13.4321, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:51:38.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:51:08
2026-04-11T11:51:38.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:51:38.730 [DEBUG] [Thread-169397] [transport.py] [_log()] starting thread (client mode): 0xb39c6320
2026-04-11T11:51:38.730 [DEBUG] [Thread-169397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:51:38.749 [DEBUG] [Thread-169397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:51:38.750 [INFO] [Thread-169397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:38.752 [DEBUG] [Thread-169397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] client lang: <none>
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] server lang: <none>
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] kex follows: False
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] Compression: none
2026-04-11T11:51:38.753 [DEBUG] [Thread-169397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:51:38.772 [DEBUG] [Thread-169397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:51:38.773 [DEBUG] [Thread-169397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:51:38.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:51:38.774 [DEBUG] [Thread-169397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:51:38.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:51:38.776 [DEBUG] [Thread-169397] [transport.py] [_log()] userauth is OK
2026-04-11T11:51:38.776 [DEBUG] [Thread-169397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:51:38.776 [DEBUG] [Thread-169397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:51:38.776 [DEBUG] [Thread-169397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:51:38.776 [DEBUG] [Thread-169397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:51:38.801 [INFO] [Thread-169397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:51:38.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:51:39.668 [DEBUG] [Thread-169397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:51:39.668 [DEBUG] [Thread-169397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:51:39.669 [DEBUG] [Thread-169397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:51:39.709 [DEBUG] [Thread-169397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:51:39.709 [DEBUG] [Thread-169397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:51:39.713 [DEBUG] [Thread-169397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:51:39.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:51:39.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:51:39.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:51:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:51:39.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:51:39.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:51:39.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:51:39.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:51:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:51:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.410536 -999.00  +13.20  14.91     97  +12.80 1 3 1 3 1   888    0 0.39 -0.93 ----- 21.0 14.9 59.5 25.2 14.8 -0.1 14.9 -0.6 14.9 -0.8 15.1 -0.3
2026-04-11T11:51:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:51:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:51:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.410536
2026-04-11T11:51:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:51:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:51:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:51:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:51:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:51:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:51:08', tmtdew=0.0494, humidity=99.6394, cloud=0.0, wind=15.439, temperature=13.4321, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:51:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:51:39.740 [DEBUG] [Thread-169397] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:51:39.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:51:39.842 [DEBUG] [Thread-169400] [transport.py] [_log()] starting thread (client mode): 0xb39c6170
2026-04-11T11:51:39.843 [DEBUG] [Thread-169400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:51:39.857 [DEBUG] [Thread-169400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:51:39.858 [INFO] [Thread-169400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:51:39.865 [DEBUG] [Thread-169400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:51:39.865 [DEBUG] [Thread-169400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] client lang: <none>
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] server lang: <none>
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] kex follows: False
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] Compression: none
2026-04-11T11:51:39.866 [DEBUG] [Thread-169400] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:51:39.924 [DEBUG] [Thread-169400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:51:39.925 [DEBUG] [Thread-169400] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:51:39.926 [DEBUG] [Thread-169400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:51:39.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:51:39.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:51:39.984 [DEBUG] [Thread-169400] [transport.py] [_log()] userauth is OK
2026-04-11T11:51:39.984 [DEBUG] [Thread-169400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:51:39.984 [DEBUG] [Thread-169400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:51:39.984 [DEBUG] [Thread-169400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:51:39.984 [DEBUG] [Thread-169400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:51:40.009 [INFO] [Thread-169400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:51:40.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:51:40.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:51:40.820 [DEBUG] [Thread-169400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:51:40.821 [DEBUG] [Thread-169400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:51:40.870 [DEBUG] [Thread-169400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:51:40.870 [DEBUG] [Thread-169400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:51:40.880 [DEBUG] [Thread-169400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:51:40.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:51: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-04-11T11:51:40.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-04-11T11:51:40.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:51:40.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:51:40.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:51:40.917 [DEBUG] [Thread-169400] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:51:42.290 [DEBUG] [Thread-169402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:48.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:48.327 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:51:57.343 [DEBUG] [Thread-169403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:03.228 [DEBUG] [Thread-169404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:52:10.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:52:10.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:52:12.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 51, 44), 0.09881, 99.2788, 0.0, 17.7494, 13.8647, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:52:12.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:51:44
2026-04-11T11:52:12.380 [DEBUG] [Thread-169405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:12.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:52:12.765 [DEBUG] [Thread-169406] [transport.py] [_log()] starting thread (client mode): 0xae5e6500
2026-04-11T11:52:12.765 [DEBUG] [Thread-169406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:52:12.786 [DEBUG] [Thread-169406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:52:12.787 [INFO] [Thread-169406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:52:12.790 [DEBUG] [Thread-169406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:52:12.790 [DEBUG] [Thread-169406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:52:12.790 [DEBUG] [Thread-169406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:52:12.790 [DEBUG] [Thread-169406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] client lang: <none>
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] server lang: <none>
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] kex follows: False
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:52:12.791 [DEBUG] [Thread-169406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:52:12.792 [DEBUG] [Thread-169406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:52:12.792 [DEBUG] [Thread-169406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:52:12.792 [DEBUG] [Thread-169406] [transport.py] [_log()] Compression: none
2026-04-11T11:52:12.792 [DEBUG] [Thread-169406] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:52:12.811 [DEBUG] [Thread-169406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:52:12.811 [DEBUG] [Thread-169406] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:52:12.812 [DEBUG] [Thread-169406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:52:12.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:52:12.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:52:12.814 [DEBUG] [Thread-169406] [transport.py] [_log()] userauth is OK
2026-04-11T11:52:12.814 [DEBUG] [Thread-169406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:52:12.814 [DEBUG] [Thread-169406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:52:12.814 [DEBUG] [Thread-169406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:52:12.814 [DEBUG] [Thread-169406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:52:12.837 [INFO] [Thread-169406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:52:12.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:52:13.633 [DEBUG] [Thread-169406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:52:13.633 [DEBUG] [Thread-169406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:52:13.634 [DEBUG] [Thread-169406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:52:13.674 [DEBUG] [Thread-169406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:52:13.674 [DEBUG] [Thread-169406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:52:13.678 [DEBUG] [Thread-169406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:52:13.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:52:13.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:52:13.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:52:13.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:52:13.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:52:13.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:52:13.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:52:13.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:52:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:52:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.410883 -999.00  +13.30  11.07     97  +12.90 1 3 1 3 1   888    0 0.39 -0.55 ----- 17.5 11.1 95.5 24.8 14.8 0.0 14.9 -0.1 14.9 -0.4 15.1 -0.3
2026-04-11T11:52:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:52:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:52:13.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.410883
2026-04-11T11:52:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:52:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:52:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:52:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:52:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:52:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:51:44', tmtdew=0.09881, humidity=99.2788, cloud=0.0, wind=17.7494, temperature=13.8647, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:51:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:52:13.706 [DEBUG] [Thread-169406] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:52:13.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:52:13.799 [DEBUG] [Thread-169409] [transport.py] [_log()] starting thread (client mode): 0xae5e7880
2026-04-11T11:52:13.799 [DEBUG] [Thread-169409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:52:13.814 [DEBUG] [Thread-169409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:52:13.814 [INFO] [Thread-169409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:13.822 [DEBUG] [Thread-169409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] client lang: <none>
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] server lang: <none>
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] kex follows: False
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] Compression: none
2026-04-11T11:52:13.823 [DEBUG] [Thread-169409] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:52:13.880 [DEBUG] [Thread-169409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:52:13.881 [DEBUG] [Thread-169409] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:52:13.882 [DEBUG] [Thread-169409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:52:13.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:52:13.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:52:13.940 [DEBUG] [Thread-169409] [transport.py] [_log()] userauth is OK
2026-04-11T11:52:13.941 [DEBUG] [Thread-169409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:52:13.941 [DEBUG] [Thread-169409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:52:13.941 [DEBUG] [Thread-169409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:52:13.941 [DEBUG] [Thread-169409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:52:13.960 [INFO] [Thread-169409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:52:13.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:52:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:52:14.787 [DEBUG] [Thread-169409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:52:14.788 [DEBUG] [Thread-169409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:52:14.836 [DEBUG] [Thread-169409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:52:14.836 [DEBUG] [Thread-169409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:52:14.846 [DEBUG] [Thread-169409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:52:14.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:52:14.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-04-11T11:52:14.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:52:14.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:52:14.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:52:14.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:52:14.884 [DEBUG] [Thread-169409] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:52:27.416 [DEBUG] [Thread-169411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:42.469 [DEBUG] [Thread-169412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:44.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:52:44.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:52:44.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:52:46.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 52, 19), 0.091695, 99.6891, 0.0, 17.6623, 13.3655, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:52:46.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:52:19
2026-04-11T11:52:46.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:52:46.720 [DEBUG] [Thread-169413] [transport.py] [_log()] starting thread (client mode): 0xae52f220
2026-04-11T11:52:46.720 [DEBUG] [Thread-169413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:52:46.740 [DEBUG] [Thread-169413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:52:46.740 [INFO] [Thread-169413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:52:46.743 [DEBUG] [Thread-169413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:52:46.743 [DEBUG] [Thread-169413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] client lang: <none>
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] server lang: <none>
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] kex follows: False
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:52:46.744 [DEBUG] [Thread-169413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:52:46.745 [DEBUG] [Thread-169413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:52:46.745 [DEBUG] [Thread-169413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:52:46.745 [DEBUG] [Thread-169413] [transport.py] [_log()] Compression: none
2026-04-11T11:52:46.745 [DEBUG] [Thread-169413] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:52:46.764 [DEBUG] [Thread-169413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:52:46.764 [DEBUG] [Thread-169413] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:52:46.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:52:46.765 [DEBUG] [Thread-169413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:52:46.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:52:46.767 [DEBUG] [Thread-169413] [transport.py] [_log()] userauth is OK
2026-04-11T11:52:46.767 [DEBUG] [Thread-169413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:52:46.768 [DEBUG] [Thread-169413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:52:46.768 [DEBUG] [Thread-169413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:52:46.768 [DEBUG] [Thread-169413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:52:46.784 [INFO] [Thread-169413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:52:46.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:52:47.568 [DEBUG] [Thread-169413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:52:47.569 [DEBUG] [Thread-169413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:52:47.569 [DEBUG] [Thread-169413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:52:47.609 [DEBUG] [Thread-169413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:52:47.610 [DEBUG] [Thread-169413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:52:47.613 [DEBUG] [Thread-169413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:52:47.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:52:47.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:52:47.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:52:47.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:52:47.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:52:47.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:52:47.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:52:47.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:52:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:52:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.411231 -999.00  +13.20  17.12     97  +12.80 1 3 1 3 1   888    0 0.41 -0.08 ----- 18.1 17.1 69.6 20.5 14.9 -0.2 14.9 -0.2 14.8 -0.5 15.1 -0.5
2026-04-11T11:52:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:52:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:52:47.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.411231
2026-04-11T11:52:47.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:52:47.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:52:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:52:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:52:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:52:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:52:19', tmtdew=0.091695, humidity=99.6891, cloud=0.0, wind=17.6623, temperature=13.3655, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:52:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:52:47.639 [DEBUG] [Thread-169413] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:52:47.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:52:47.740 [DEBUG] [Thread-169416] [transport.py] [_log()] starting thread (client mode): 0xb39c61a0
2026-04-11T11:52:47.740 [DEBUG] [Thread-169416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:52:47.754 [DEBUG] [Thread-169416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:52:47.754 [INFO] [Thread-169416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] client lang: <none>
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] server lang: <none>
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] kex follows: False
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:52:47.762 [DEBUG] [Thread-169416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:52:47.763 [DEBUG] [Thread-169416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:52:47.763 [DEBUG] [Thread-169416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:52:47.763 [DEBUG] [Thread-169416] [transport.py] [_log()] Compression: none
2026-04-11T11:52:47.763 [DEBUG] [Thread-169416] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:52:47.819 [DEBUG] [Thread-169416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:52:47.820 [DEBUG] [Thread-169416] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:52:47.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:52:47.821 [DEBUG] [Thread-169416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:52:47.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:52:47.876 [DEBUG] [Thread-169416] [transport.py] [_log()] userauth is OK
2026-04-11T11:52:47.877 [DEBUG] [Thread-169416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:52:47.877 [DEBUG] [Thread-169416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:52:47.877 [DEBUG] [Thread-169416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:52:47.877 [DEBUG] [Thread-169416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:52:47.900 [INFO] [Thread-169416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:52:47.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:52:47.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:52:48.468 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:48.471 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:52:48.719 [DEBUG] [Thread-169416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:52:48.719 [DEBUG] [Thread-169416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:52:48.767 [DEBUG] [Thread-169416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:52:48.768 [DEBUG] [Thread-169416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:52:48.777 [DEBUG] [Thread-169416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:52:48.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:52:48.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-04-11T11:52:48.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:52:48.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:52:48.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:52:48.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:52:48.814 [DEBUG] [Thread-169416] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:52:57.506 [DEBUG] [Thread-169418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:03.272 [DEBUG] [Thread-169419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:12.559 [DEBUG] [Thread-169420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:18.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:53:18.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:53:18.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-04-11T11:53:20.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 52, 55), 0.09683, 99.656, 0.0, 17.9269, 13.3821, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:53:20.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:52:55
2026-04-11T11:53:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:53:20.627 [DEBUG] [Thread-169421] [transport.py] [_log()] starting thread (client mode): 0xb39c7940
2026-04-11T11:53:20.627 [DEBUG] [Thread-169421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:53:20.648 [DEBUG] [Thread-169421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:53:20.648 [INFO] [Thread-169421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:53:20.652 [DEBUG] [Thread-169421] [transport.py] [_log()] client lang: <none>
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] server lang: <none>
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] kex follows: False
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] Compression: none
2026-04-11T11:53:20.653 [DEBUG] [Thread-169421] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:53:20.672 [DEBUG] [Thread-169421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:53:20.673 [DEBUG] [Thread-169421] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:53:20.673 [DEBUG] [Thread-169421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:53:20.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:53:20.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:53:20.677 [DEBUG] [Thread-169421] [transport.py] [_log()] userauth is OK
2026-04-11T11:53:20.677 [DEBUG] [Thread-169421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:53:20.677 [DEBUG] [Thread-169421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:53:20.677 [DEBUG] [Thread-169421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:53:20.677 [DEBUG] [Thread-169421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:53:20.695 [INFO] [Thread-169421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:53:20.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:53:21.450 [DEBUG] [Thread-169421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:53:21.451 [DEBUG] [Thread-169421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:53:21.451 [DEBUG] [Thread-169421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:53:21.491 [DEBUG] [Thread-169421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:53:21.491 [DEBUG] [Thread-169421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:53:21.495 [DEBUG] [Thread-169421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:53:21.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:53:21.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:53:21.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:53:21.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:53:21.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:53:21.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:53:21.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:53:21.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:53:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:53:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.411578 -999.00  +13.20  12.54     97  +12.80 1 3 1 3 1   888    0 0.41 0.10 ----- 10.8 12.5 73.7 22.5 14.8 0.0 14.9 -0.6 14.8 -0.6 15.1 -0.1
2026-04-11T11:53:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:53:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:53:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.411578
2026-04-11T11:53:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:53:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:53:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:53:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:53:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:53:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:52:55', tmtdew=0.09683, humidity=99.656, cloud=0.0, wind=17.9269, temperature=13.3821, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:52:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:53:21.526 [DEBUG] [Thread-169421] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:53:21.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:53:21.618 [DEBUG] [Thread-169424] [transport.py] [_log()] starting thread (client mode): 0xb39c7970
2026-04-11T11:53:21.619 [DEBUG] [Thread-169424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:53:21.633 [DEBUG] [Thread-169424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:53:21.633 [INFO] [Thread-169424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:53:21.640 [DEBUG] [Thread-169424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:53:21.640 [DEBUG] [Thread-169424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:53:21.640 [DEBUG] [Thread-169424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] client lang: <none>
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] server lang: <none>
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] kex follows: False
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] Compression: none
2026-04-11T11:53:21.641 [DEBUG] [Thread-169424] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:53:21.697 [DEBUG] [Thread-169424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:53:21.698 [DEBUG] [Thread-169424] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:53:21.698 [DEBUG] [Thread-169424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:53:21.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:53:21.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:53:21.753 [DEBUG] [Thread-169424] [transport.py] [_log()] userauth is OK
2026-04-11T11:53:21.753 [DEBUG] [Thread-169424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:53:21.753 [DEBUG] [Thread-169424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:53:21.754 [DEBUG] [Thread-169424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:53:21.754 [DEBUG] [Thread-169424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:53:21.772 [INFO] [Thread-169424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:53:21.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:53:21.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:53:22.586 [DEBUG] [Thread-169424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:53:22.587 [DEBUG] [Thread-169424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:53:22.634 [DEBUG] [Thread-169424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:53:22.634 [DEBUG] [Thread-169424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:53:22.644 [DEBUG] [Thread-169424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:53:22.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:53:22.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-04-11T11:53:22.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-04-11T11:53:22.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:53:22.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:53:22.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:53:22.681 [DEBUG] [Thread-169424] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:53:27.595 [DEBUG] [Thread-169426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:42.654 [DEBUG] [Thread-169427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:48.611 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:48.612 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:53:52.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:53:52.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:53:52.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-04-11T11:53:53.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 53, 30), 0.094265, 99.6726, 0.0, 18.5972, 13.3655, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:53:53.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:53:30
2026-04-11T11:53:54.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:53:54.542 [DEBUG] [Thread-169428] [transport.py] [_log()] starting thread (client mode): 0xae5e74c0
2026-04-11T11:53:54.542 [DEBUG] [Thread-169428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:53:54.561 [DEBUG] [Thread-169428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:53:54.561 [INFO] [Thread-169428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] client lang: <none>
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] server lang: <none>
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] kex follows: False
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] Compression: none
2026-04-11T11:53:54.563 [DEBUG] [Thread-169428] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:53:54.576 [DEBUG] [Thread-169428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:53:54.576 [DEBUG] [Thread-169428] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:53:54.577 [DEBUG] [Thread-169428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:53:54.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:53:54.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:53:54.579 [DEBUG] [Thread-169428] [transport.py] [_log()] userauth is OK
2026-04-11T11:53:54.579 [DEBUG] [Thread-169428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:53:54.579 [DEBUG] [Thread-169428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:53:54.579 [DEBUG] [Thread-169428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:53:54.579 [DEBUG] [Thread-169428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:53:54.603 [INFO] [Thread-169428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:53:54.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:53:55.389 [DEBUG] [Thread-169428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:53:55.389 [DEBUG] [Thread-169428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:53:55.390 [DEBUG] [Thread-169428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:53:55.430 [DEBUG] [Thread-169428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:53:55.431 [DEBUG] [Thread-169428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:53:55.434 [DEBUG] [Thread-169428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:53:55.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:53:55.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:53:55.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:53:55.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:53:55.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:53:55.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:53:55.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:53:55.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:53:55.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:53:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.411925 -999.00  +13.30  12.92     97  +12.90 1 3 1 3 1   888    0 0.42 0.08 ----- 15.7 12.9 76.8 22.9 14.8 -0.1 15.0 -0.3 14.9 -0.4 15.1 -0.3
2026-04-11T11:53:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:53:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:53:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.411925
2026-04-11T11:53:55.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:53:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:53:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:53:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:53:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:53:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:53:30', tmtdew=0.094265, humidity=99.6726, cloud=0.0, wind=18.5972, temperature=13.3655, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:53:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:53:55.460 [DEBUG] [Thread-169428] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:53:55.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:53:57.689 [DEBUG] [Thread-169431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:03.314 [DEBUG] [Thread-169432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:12.741 [DEBUG] [Thread-169433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:27.776 [DEBUG] [Thread-169434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:42.811 [DEBUG] [Thread-169435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:48.752 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:48.753 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:54:57.846 [DEBUG] [Thread-169436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:03.368 [DEBUG] [Thread-169437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:12.881 [DEBUG] [Thread-169438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:27.917 [DEBUG] [Thread-169439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:42.953 [DEBUG] [Thread-169440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:48.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:48.896 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:55:57.993 [DEBUG] [Thread-169441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:03.406 [DEBUG] [Thread-169442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:07.935 [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-04-11T11:56:13.033 [DEBUG] [Thread-169443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:28.069 [DEBUG] [Thread-169444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:37.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:56:37.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:56:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:56:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 56, 28), 0.099405, 99.6394, 0.0, 18.6862, 13.3489, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:56:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:56:28
2026-04-11T11:56:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:56:39.786 [DEBUG] [Thread-169445] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-11T11:56:39.786 [DEBUG] [Thread-169445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:56:39.805 [DEBUG] [Thread-169445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:56:39.805 [INFO] [Thread-169445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:56:39.808 [DEBUG] [Thread-169445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] client lang: <none>
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] server lang: <none>
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] kex follows: False
2026-04-11T11:56:39.809 [DEBUG] [Thread-169445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:56:39.810 [DEBUG] [Thread-169445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:56:39.810 [DEBUG] [Thread-169445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:56:39.810 [DEBUG] [Thread-169445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:56:39.810 [DEBUG] [Thread-169445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:56:39.810 [DEBUG] [Thread-169445] [transport.py] [_log()] Compression: none
2026-04-11T11:56:39.810 [DEBUG] [Thread-169445] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:56:39.828 [DEBUG] [Thread-169445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:56:39.828 [DEBUG] [Thread-169445] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:56:39.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:56:39.830 [DEBUG] [Thread-169445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:56:39.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:56:39.832 [DEBUG] [Thread-169445] [transport.py] [_log()] userauth is OK
2026-04-11T11:56:39.832 [DEBUG] [Thread-169445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:56:39.832 [DEBUG] [Thread-169445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:56:39.832 [DEBUG] [Thread-169445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:56:39.832 [DEBUG] [Thread-169445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:56:39.849 [INFO] [Thread-169445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:56:39.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:56:40.490 [DEBUG] [Thread-169445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:56:40.490 [DEBUG] [Thread-169445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:56:40.490 [DEBUG] [Thread-169445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:56:40.531 [DEBUG] [Thread-169445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:56:40.531 [DEBUG] [Thread-169445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:56:40.535 [DEBUG] [Thread-169445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:56:40.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:56:40.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:56:40.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:56:40.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:56:40.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:56:40.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:56:40.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:56:40.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:56:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:56:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.414008 -999.00  +13.30  11.10     97  +12.90 1 3 1 3 1   888    0 0.43 0.61 ----- 13.1 11.1 68.2 21.4 14.9 -0.2 14.9 -0.4 14.8 -0.5 15.1 -0.1
2026-04-11T11:56:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:56:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:56:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.414008
2026-04-11T11:56:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:56:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:56:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:56:40.559 [DEBUG] [Thread-169445] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:56:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:56:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:56:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:56:28', tmtdew=0.099405, humidity=99.6394, cloud=0.0, wind=18.6862, temperature=13.3489, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:56:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:56:40.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:56:40.655 [DEBUG] [Thread-169448] [transport.py] [_log()] starting thread (client mode): 0xb39c6080
2026-04-11T11:56:40.656 [DEBUG] [Thread-169448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:56:40.671 [DEBUG] [Thread-169448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:56:40.671 [INFO] [Thread-169448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:56:40.678 [DEBUG] [Thread-169448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] client lang: <none>
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] server lang: <none>
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] kex follows: False
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] Compression: none
2026-04-11T11:56:40.679 [DEBUG] [Thread-169448] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:56:40.739 [DEBUG] [Thread-169448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:56:40.740 [DEBUG] [Thread-169448] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:56:40.741 [DEBUG] [Thread-169448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:56:40.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:56:40.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:56:40.795 [DEBUG] [Thread-169448] [transport.py] [_log()] userauth is OK
2026-04-11T11:56:40.795 [DEBUG] [Thread-169448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:56:40.795 [DEBUG] [Thread-169448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:56:40.796 [DEBUG] [Thread-169448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:56:40.796 [DEBUG] [Thread-169448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:56:40.815 [INFO] [Thread-169448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:56:40.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:56:40.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:56:41.612 [DEBUG] [Thread-169448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:56:41.612 [DEBUG] [Thread-169448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:56:41.660 [DEBUG] [Thread-169448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:56:41.660 [DEBUG] [Thread-169448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:56:41.670 [DEBUG] [Thread-169448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:56:41.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:56: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-04-11T11:56:41.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-04-11T11:56:41.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:56:41.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:56:41.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:56:41.708 [DEBUG] [Thread-169448] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:56:43.108 [DEBUG] [Thread-169450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:49.037 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:49.038 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:56:58.160 [DEBUG] [Thread-169451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:03.449 [DEBUG] [Thread-169452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:57:11.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:57:11.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-04-11T11:57:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 57, 3), 0.099405, 99.6394, 0.0, 17.8571, 13.3655, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:57:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:57:03
2026-04-11T11:57:13.202 [DEBUG] [Thread-169453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:13.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:57:13.554 [DEBUG] [Thread-169454] [transport.py] [_log()] starting thread (client mode): 0xae5e4850
2026-04-11T11:57:13.554 [DEBUG] [Thread-169454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:57:13.574 [DEBUG] [Thread-169454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:57:13.574 [INFO] [Thread-169454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:57:13.577 [DEBUG] [Thread-169454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] client lang: <none>
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] server lang: <none>
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] kex follows: False
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] Compression: none
2026-04-11T11:57:13.578 [DEBUG] [Thread-169454] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:57:13.595 [DEBUG] [Thread-169454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:57:13.596 [DEBUG] [Thread-169454] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:57:13.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:57:13.597 [DEBUG] [Thread-169454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:57:13.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:57:13.599 [DEBUG] [Thread-169454] [transport.py] [_log()] userauth is OK
2026-04-11T11:57:13.599 [DEBUG] [Thread-169454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:57:13.600 [DEBUG] [Thread-169454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:57:13.600 [DEBUG] [Thread-169454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:57:13.600 [DEBUG] [Thread-169454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:57:13.616 [INFO] [Thread-169454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:57:13.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:57:14.252 [DEBUG] [Thread-169454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:57:14.252 [DEBUG] [Thread-169454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:57:14.253 [DEBUG] [Thread-169454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:57:14.293 [DEBUG] [Thread-169454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:57:14.293 [DEBUG] [Thread-169454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:57:14.297 [DEBUG] [Thread-169454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:57:14.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:57:14.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:57:14.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:57:14.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:57:14.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:57:14.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:57:14.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:57:14.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:57:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:57:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.414355 -999.00  +13.40   7.98     97  +13.00 1 3 1 3 1   888    0 0.42 0.58 ----- 11.8 8.0 124.0 19.1 14.8 -0.1 14.9 -0.3 14.8 -0.3 15.1 -0.2
2026-04-11T11:57:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:57:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:57:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.414355
2026-04-11T11:57:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:57:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:57:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:57:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:57:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:57:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:57:03', tmtdew=0.099405, humidity=99.6394, cloud=0.0, wind=17.8571, temperature=13.3655, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:56:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:57:14.324 [DEBUG] [Thread-169454] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:57:14.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:57:14.419 [DEBUG] [Thread-169457] [transport.py] [_log()] starting thread (client mode): 0xb39c64a0
2026-04-11T11:57:14.419 [DEBUG] [Thread-169457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:57:14.434 [DEBUG] [Thread-169457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:57:14.434 [INFO] [Thread-169457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:14.443 [DEBUG] [Thread-169457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] client lang: <none>
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] server lang: <none>
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] kex follows: False
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:57:14.444 [DEBUG] [Thread-169457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:57:14.445 [DEBUG] [Thread-169457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:57:14.445 [DEBUG] [Thread-169457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:57:14.445 [DEBUG] [Thread-169457] [transport.py] [_log()] Compression: none
2026-04-11T11:57:14.445 [DEBUG] [Thread-169457] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:57:14.501 [DEBUG] [Thread-169457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:57:14.501 [DEBUG] [Thread-169457] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:57:14.502 [DEBUG] [Thread-169457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:57:14.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:57:14.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:57:14.560 [DEBUG] [Thread-169457] [transport.py] [_log()] userauth is OK
2026-04-11T11:57:14.560 [DEBUG] [Thread-169457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:57:14.561 [DEBUG] [Thread-169457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:57:14.561 [DEBUG] [Thread-169457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:57:14.561 [DEBUG] [Thread-169457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:57:14.580 [INFO] [Thread-169457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:57:14.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:57:14.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:57:15.407 [DEBUG] [Thread-169457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:57:15.407 [DEBUG] [Thread-169457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:57:15.455 [DEBUG] [Thread-169457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:57:15.455 [DEBUG] [Thread-169457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:57:15.465 [DEBUG] [Thread-169457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:57:15.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:57:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T11:57:15.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:57:15.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:57:15.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:57:15.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:57:15.502 [DEBUG] [Thread-169457] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:57:28.243 [DEBUG] [Thread-169459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:43.302 [DEBUG] [Thread-169460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:57:45.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:57:45.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-04-11T11:57:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 57, 39), 0.10396, 99.2456, 0.0, 16.5852, 13.9642, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:57:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:57:39
2026-04-11T11:57:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:57:47.548 [DEBUG] [Thread-169461] [transport.py] [_log()] starting thread (client mode): 0xa79b70d0
2026-04-11T11:57:47.549 [DEBUG] [Thread-169461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:57:47.569 [DEBUG] [Thread-169461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:57:47.570 [INFO] [Thread-169461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:47.573 [DEBUG] [Thread-169461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] client lang: <none>
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] server lang: <none>
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] kex follows: False
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] Compression: none
2026-04-11T11:57:47.574 [DEBUG] [Thread-169461] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:57:47.592 [DEBUG] [Thread-169461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:57:47.593 [DEBUG] [Thread-169461] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:57:47.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:57:47.594 [DEBUG] [Thread-169461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:57:47.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:57:47.596 [DEBUG] [Thread-169461] [transport.py] [_log()] userauth is OK
2026-04-11T11:57:47.596 [DEBUG] [Thread-169461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:57:47.596 [DEBUG] [Thread-169461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:57:47.596 [DEBUG] [Thread-169461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:57:47.596 [DEBUG] [Thread-169461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:57:47.621 [INFO] [Thread-169461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:57:47.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:57:48.246 [DEBUG] [Thread-169461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:57:48.247 [DEBUG] [Thread-169461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:57:48.256 [DEBUG] [Thread-169461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:57:48.289 [DEBUG] [Thread-169461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:57:48.290 [DEBUG] [Thread-169461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:57:48.293 [DEBUG] [Thread-169461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:57:48.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:57:48.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:57:48.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:57:48.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:57:48.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:57:48.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:57:48.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:57:48.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:57:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:57:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.414703 -999.00  +13.40  13.92     97  +13.00 1 3 1 3 1   888    0 0.42 0.49 ----- 15.2 13.9 93.9 19.0 14.9 -0.5 15.0 -0.3 14.8 -0.6 15.1 -0.1
2026-04-11T11:57:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:57:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:57:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.414703
2026-04-11T11:57:48.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:57:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:57:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:57:48.321 [DEBUG] [Thread-169461] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:57:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:57:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:57:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:57:39', tmtdew=0.10396, humidity=99.2456, cloud=0.0, wind=16.5852, temperature=13.9642, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:57:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:57:48.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:57:48.417 [DEBUG] [Thread-169464] [transport.py] [_log()] starting thread (client mode): 0xae5e5a20
2026-04-11T11:57:48.417 [DEBUG] [Thread-169464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:57:48.431 [DEBUG] [Thread-169464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:57:48.431 [INFO] [Thread-169464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:57:48.439 [DEBUG] [Thread-169464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:57:48.439 [DEBUG] [Thread-169464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:57:48.439 [DEBUG] [Thread-169464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:57:48.439 [DEBUG] [Thread-169464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] client lang: <none>
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] server lang: <none>
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] kex follows: False
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] Compression: none
2026-04-11T11:57:48.440 [DEBUG] [Thread-169464] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:57:48.500 [DEBUG] [Thread-169464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:57:48.501 [DEBUG] [Thread-169464] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:57:48.501 [DEBUG] [Thread-169464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:57:48.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:57:48.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:57:48.557 [DEBUG] [Thread-169464] [transport.py] [_log()] userauth is OK
2026-04-11T11:57:48.557 [DEBUG] [Thread-169464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:57:48.557 [DEBUG] [Thread-169464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:57:48.557 [DEBUG] [Thread-169464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:57:48.558 [DEBUG] [Thread-169464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:57:48.576 [INFO] [Thread-169464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:57:48.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:57:48.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:57:49.178 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:49.179 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:57:49.411 [DEBUG] [Thread-169464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:57:49.411 [DEBUG] [Thread-169464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:57:49.459 [DEBUG] [Thread-169464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:57:49.459 [DEBUG] [Thread-169464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:57:49.468 [DEBUG] [Thread-169464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:57:49.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:57:49.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-04-11T11:57:49.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-04-11T11:57:49.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:57:49.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:57:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:57:49.507 [DEBUG] [Thread-169464] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:57:58.339 [DEBUG] [Thread-169466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:03.494 [DEBUG] [Thread-169467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:13.402 [DEBUG] [Thread-169468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:19.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:58:19.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:58:19.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-04-11T11:58:20.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 57, 39), 0.10396, 99.2456, 0.0, 16.5852, 13.9642, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:58:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:57:39
2026-04-11T11:58:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:58:21.501 [DEBUG] [Thread-169469] [transport.py] [_log()] starting thread (client mode): 0xa795e2c0
2026-04-11T11:58:21.501 [DEBUG] [Thread-169469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:58:21.522 [DEBUG] [Thread-169469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:58:21.522 [INFO] [Thread-169469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] client lang: <none>
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] server lang: <none>
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] kex follows: False
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] Compression: none
2026-04-11T11:58:21.525 [DEBUG] [Thread-169469] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:58:21.542 [DEBUG] [Thread-169469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:58:21.543 [DEBUG] [Thread-169469] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:58:21.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:58:21.544 [DEBUG] [Thread-169469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:58:21.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:58:21.547 [DEBUG] [Thread-169469] [transport.py] [_log()] userauth is OK
2026-04-11T11:58:21.547 [DEBUG] [Thread-169469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:58:21.547 [DEBUG] [Thread-169469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:58:21.547 [DEBUG] [Thread-169469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:58:21.547 [DEBUG] [Thread-169469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:58:21.569 [INFO] [Thread-169469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:58:21.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:58:22.196 [DEBUG] [Thread-169469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:58:22.196 [DEBUG] [Thread-169469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:58:22.197 [DEBUG] [Thread-169469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:58:22.237 [DEBUG] [Thread-169469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:58:22.237 [DEBUG] [Thread-169469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:58:22.241 [DEBUG] [Thread-169469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:58:22.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:58:22.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:58:22.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:58:22.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:58:22.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:58:22.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:58:22.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:58:22.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.415050 -999.00  +13.40  18.01     97  +12.90 1 3 1 3 1   888    0 0.44 0.77 ----- 10.8 18.0 72.0 21.7 14.9 -0.3 15.0 0.1 14.9 -0.1 15.1 -0.0
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.415050
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:58:22.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:57:39', tmtdew=0.10396, humidity=99.2456, cloud=0.0, wind=16.5852, temperature=13.9642, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:57:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:58:22.266 [DEBUG] [Thread-169469] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:58:22.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:58:22.350 [DEBUG] [Thread-169472] [transport.py] [_log()] starting thread (client mode): 0xa795f820
2026-04-11T11:58:22.350 [DEBUG] [Thread-169472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:58:22.373 [DEBUG] [Thread-169472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:58:22.373 [INFO] [Thread-169472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:58:22.380 [DEBUG] [Thread-169472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:58:22.380 [DEBUG] [Thread-169472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:58:22.380 [DEBUG] [Thread-169472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] client lang: <none>
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] server lang: <none>
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] kex follows: False
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:58:22.381 [DEBUG] [Thread-169472] [transport.py] [_log()] Compression: none
2026-04-11T11:58:22.382 [DEBUG] [Thread-169472] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:58:22.441 [DEBUG] [Thread-169472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:58:22.442 [DEBUG] [Thread-169472] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:58:22.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:58:22.443 [DEBUG] [Thread-169472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:58:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:58:22.501 [DEBUG] [Thread-169472] [transport.py] [_log()] userauth is OK
2026-04-11T11:58:22.501 [DEBUG] [Thread-169472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:58:22.501 [DEBUG] [Thread-169472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:58:22.502 [DEBUG] [Thread-169472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:58:22.502 [DEBUG] [Thread-169472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:58:22.521 [INFO] [Thread-169472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:58:22.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:58:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:58:23.397 [DEBUG] [Thread-169472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:58:23.397 [DEBUG] [Thread-169472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:58:23.446 [DEBUG] [Thread-169472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:58:23.446 [DEBUG] [Thread-169472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:58:23.459 [DEBUG] [Thread-169472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:58:23.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:58:23.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-04-11T11:58:23.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-04-11T11:58:23.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:58:23.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:58:23.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:58:23.500 [DEBUG] [Thread-169472] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:58:28.441 [DEBUG] [Thread-169474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:43.490 [DEBUG] [Thread-169475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:49.320 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:49.321 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:58:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:58:53.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:58:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T11:58:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 58, 15), 0.10455, 99.6062, 0.0, 15.1567, 13.4324, 2, 2, 0, 2, 0, 0),)
2026-04-11T11:58:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:58:15
2026-04-11T11:58:55.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:58:55.529 [DEBUG] [Thread-169476] [transport.py] [_log()] starting thread (client mode): 0xb39c6410
2026-04-11T11:58:55.529 [DEBUG] [Thread-169476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:58:55.549 [DEBUG] [Thread-169476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:58:55.549 [INFO] [Thread-169476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] client lang: <none>
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] server lang: <none>
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] kex follows: False
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] Compression: none
2026-04-11T11:58:55.552 [DEBUG] [Thread-169476] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:58:55.570 [DEBUG] [Thread-169476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:58:55.571 [DEBUG] [Thread-169476] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:58:55.571 [DEBUG] [Thread-169476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:58:55.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:58:55.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:58:55.573 [DEBUG] [Thread-169476] [transport.py] [_log()] userauth is OK
2026-04-11T11:58:55.573 [DEBUG] [Thread-169476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:58:55.574 [DEBUG] [Thread-169476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:58:55.574 [DEBUG] [Thread-169476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:58:55.574 [DEBUG] [Thread-169476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:58:55.598 [INFO] [Thread-169476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:58:55.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:58:56.236 [DEBUG] [Thread-169476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:58:56.236 [DEBUG] [Thread-169476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:58:56.237 [DEBUG] [Thread-169476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:58:56.277 [DEBUG] [Thread-169476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:58:56.277 [DEBUG] [Thread-169476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:58:56.281 [DEBUG] [Thread-169476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:58:56.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:58:56.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:58:56.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:58:56.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:58:56.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:58:56.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:58:56.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:58:56.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:58:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:58:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.415744 -999.00  +13.40  19.28     97  +13.00 1 3 1 3 1   888    0 0.43 0.54 ----- 14.7 19.3 66.4 22.0 15.0 0.0 15.0 0.2 14.9 0.2 15.1 -0.2
2026-04-11T11:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.415744
2026-04-11T11:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:58:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:58:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:58:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:58:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:58:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:58:15', tmtdew=0.10455, humidity=99.6062, cloud=0.0, wind=15.1567, temperature=13.4324, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:58:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:58:56.309 [DEBUG] [Thread-169476] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:58:56.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:58:56.402 [DEBUG] [Thread-169479] [transport.py] [_log()] starting thread (client mode): 0xa79b6a40
2026-04-11T11:58:56.402 [DEBUG] [Thread-169479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:58:56.417 [DEBUG] [Thread-169479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:58:56.417 [INFO] [Thread-169479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:58:56.424 [DEBUG] [Thread-169479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] client lang: <none>
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] server lang: <none>
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] kex follows: False
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] Compression: none
2026-04-11T11:58:56.425 [DEBUG] [Thread-169479] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:58:56.484 [DEBUG] [Thread-169479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:58:56.485 [DEBUG] [Thread-169479] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:58:56.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:58:56.486 [DEBUG] [Thread-169479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:58:56.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:58:56.540 [DEBUG] [Thread-169479] [transport.py] [_log()] userauth is OK
2026-04-11T11:58:56.541 [DEBUG] [Thread-169479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:58:56.541 [DEBUG] [Thread-169479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:58:56.541 [DEBUG] [Thread-169479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:58:56.541 [DEBUG] [Thread-169479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:58:56.561 [INFO] [Thread-169479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:58:56.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:58:56.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:58:57.395 [DEBUG] [Thread-169479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:58:57.395 [DEBUG] [Thread-169479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:58:57.443 [DEBUG] [Thread-169479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:58:57.443 [DEBUG] [Thread-169479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:58:57.451 [DEBUG] [Thread-169479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:58:57.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:58:57.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-04-11T11:58:57.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-04-11T11:58:57.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:58:57.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:58:57.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:58:57.486 [DEBUG] [Thread-169479] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:58:58.526 [DEBUG] [Thread-169481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:03.536 [DEBUG] [Thread-169482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:13.579 [DEBUG] [Thread-169483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:27.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T11:59:27.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T11:59:27.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-04-11T11:59:28.618 [DEBUG] [Thread-169484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:28.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 58, 51), 0.10396, 99.2456, 0.0, 21.8419, 13.931, 2, 2, 2, 2, 0, 0),)
2026-04-11T11:59:28.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:58:51
2026-04-11T11:59:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T11:59:29.454 [DEBUG] [Thread-169485] [transport.py] [_log()] starting thread (client mode): 0xae5e5a20
2026-04-11T11:59:29.454 [DEBUG] [Thread-169485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:59:29.474 [DEBUG] [Thread-169485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T11:59:29.475 [INFO] [Thread-169485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] client lang: <none>
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] server lang: <none>
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] kex follows: False
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] Compression: none
2026-04-11T11:59:29.478 [DEBUG] [Thread-169485] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:59:29.496 [DEBUG] [Thread-169485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:59:29.496 [DEBUG] [Thread-169485] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:59:29.496 [DEBUG] [Thread-169485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T11:59:29.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T11:59:29.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:59:29.497 [DEBUG] [Thread-169485] [transport.py] [_log()] userauth is OK
2026-04-11T11:59:29.497 [DEBUG] [Thread-169485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:59:29.497 [DEBUG] [Thread-169485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:59:29.497 [DEBUG] [Thread-169485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T11:59:29.497 [DEBUG] [Thread-169485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:59:29.506 [INFO] [Thread-169485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:59:29.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:59:30.151 [DEBUG] [Thread-169485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:59:30.152 [DEBUG] [Thread-169485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:59:30.153 [DEBUG] [Thread-169485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T11:59:30.192 [DEBUG] [Thread-169485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:59:30.193 [DEBUG] [Thread-169485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:59:30.196 [DEBUG] [Thread-169485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:59:30.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:59:30.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T11:59:30.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T11:59:30.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T11:59:30.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:59:30.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T11:59:30.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:59:30.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:59:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T11:59:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.416092 -999.00  +13.30  18.32     97  +12.90 1 3 1 3 1   888    0 0.43 0.51 ----- 9.5 18.3 65.0 25.4 14.9 -0.2 15.0 -0.3 14.9 -0.7 15.1 0.0
2026-04-11T11:59:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T11:59:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T11:59:30.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.416092
2026-04-11T11:59:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T11:59:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T11:59:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T11:59:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T11:59:30.226 [DEBUG] [Thread-169485] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:59:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T11:59:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:58:51', tmtdew=0.10396, humidity=99.2456, cloud=0.0, wind=21.8419, temperature=13.931, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:59:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T11:59:30.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T11:59:30.309 [DEBUG] [Thread-169488] [transport.py] [_log()] starting thread (client mode): 0xe6a3b1f0
2026-04-11T11:59:30.309 [DEBUG] [Thread-169488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T11:59:30.324 [DEBUG] [Thread-169488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T11:59:30.324 [INFO] [Thread-169488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T11:59:30.332 [DEBUG] [Thread-169488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T11:59:30.333 [DEBUG] [Thread-169488] [transport.py] [_log()] client lang: <none>
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] server lang: <none>
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] kex follows: False
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T11:59:30.334 [DEBUG] [Thread-169488] [transport.py] [_log()] Compression: none
2026-04-11T11:59:30.335 [DEBUG] [Thread-169488] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T11:59:30.395 [DEBUG] [Thread-169488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T11:59:30.396 [DEBUG] [Thread-169488] [transport.py] [_log()] Switch to new keys ...
2026-04-11T11:59:30.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T11:59:30.397 [DEBUG] [Thread-169488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T11:59:30.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T11:59:30.453 [DEBUG] [Thread-169488] [transport.py] [_log()] userauth is OK
2026-04-11T11:59:30.453 [DEBUG] [Thread-169488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T11:59:30.453 [DEBUG] [Thread-169488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T11:59:30.454 [DEBUG] [Thread-169488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T11:59:30.454 [DEBUG] [Thread-169488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T11:59:30.479 [INFO] [Thread-169488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T11:59:30.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T11:59:30.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T11:59:31.290 [DEBUG] [Thread-169488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T11:59:31.290 [DEBUG] [Thread-169488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T11:59:31.338 [DEBUG] [Thread-169488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T11:59:31.338 [DEBUG] [Thread-169488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T11:59:31.347 [DEBUG] [Thread-169488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T11:59:31.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T11:59:31.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-04-11T11:59:31.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T11:59:31.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T11:59:31.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T11:59:31.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T11:59:31.385 [DEBUG] [Thread-169488] [transport.py] [_log()] EOF in transport thread
2026-04-11T11:59:43.655 [DEBUG] [Thread-169490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:49.461 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:49.463 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T11:59:58.709 [DEBUG] [Thread-169491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:01.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:00:01.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:00:01.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-04-11T12:00:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 11, 59, 27), 0.10455, 99.6062, 0.0, 15.7925, 13.4989, 2, 2, 2, 2, 0, 0),)
2026-04-11T12:00:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 11:59:27
2026-04-11T12:00:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:00:03.265 [DEBUG] [Thread-169492] [transport.py] [_log()] starting thread (client mode): 0xa795fd90
2026-04-11T12:00:03.266 [DEBUG] [Thread-169492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:00:03.287 [DEBUG] [Thread-169492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:00:03.287 [INFO] [Thread-169492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] client lang: <none>
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] server lang: <none>
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] kex follows: False
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] Compression: none
2026-04-11T12:00:03.289 [DEBUG] [Thread-169492] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:00:03.308 [DEBUG] [Thread-169492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:00:03.309 [DEBUG] [Thread-169492] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:00:03.309 [DEBUG] [Thread-169492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:00:03.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:00:03.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:00:03.311 [DEBUG] [Thread-169492] [transport.py] [_log()] userauth is OK
2026-04-11T12:00:03.311 [DEBUG] [Thread-169492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:00:03.311 [DEBUG] [Thread-169492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:00:03.311 [DEBUG] [Thread-169492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:00:03.311 [DEBUG] [Thread-169492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:00:03.325 [INFO] [Thread-169492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:00:03.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:00:03.583 [DEBUG] [Thread-169494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:08.476 [DEBUG] [Thread-169492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:00:08.476 [DEBUG] [Thread-169492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:00:08.476 [DEBUG] [Thread-169492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:00:08.517 [DEBUG] [Thread-169492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:00:08.517 [DEBUG] [Thread-169492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:00:08.521 [DEBUG] [Thread-169492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:00:08.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:00:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:00:08.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:00:08.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:00:08.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:00:08.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:00:08.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:00:08.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:00:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:00:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.416439 -999.00  +13.30  10.21     97  +12.90 1 3 1 3 1   888    0 0.43 0.71 ----- 12.6 10.2 77.3 19.8 14.9 -0.2 15.0 -0.4 14.9 -0.4 15.2 0.0
2026-04-11T12:00:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:00:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:00:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.416439
2026-04-11T12:00:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:00:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:00:08.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:00:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:00:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:00:08.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T11:59:27', tmtdew=0.10455, humidity=99.6062, cloud=0.0, wind=15.7925, temperature=13.4989, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T09:59:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:00:08.549 [DEBUG] [Thread-169492] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:00:08.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:00:08.642 [DEBUG] [Thread-169496] [transport.py] [_log()] starting thread (client mode): 0xa79b60e0
2026-04-11T12:00:08.642 [DEBUG] [Thread-169496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:00:08.657 [DEBUG] [Thread-169496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:00:08.657 [INFO] [Thread-169496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:08.665 [DEBUG] [Thread-169496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] client lang: <none>
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] server lang: <none>
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] kex follows: False
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] Compression: none
2026-04-11T12:00:08.666 [DEBUG] [Thread-169496] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:00:08.724 [DEBUG] [Thread-169496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:00:08.725 [DEBUG] [Thread-169496] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:00:08.725 [DEBUG] [Thread-169496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:00:08.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:00:08.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:00:08.781 [DEBUG] [Thread-169496] [transport.py] [_log()] userauth is OK
2026-04-11T12:00:08.781 [DEBUG] [Thread-169496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:00:08.781 [DEBUG] [Thread-169496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:00:08.781 [DEBUG] [Thread-169496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:00:08.781 [DEBUG] [Thread-169496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:00:08.800 [INFO] [Thread-169496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:00:08.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:00:08.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:00:09.650 [DEBUG] [Thread-169496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:00:09.651 [DEBUG] [Thread-169496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:00:09.698 [DEBUG] [Thread-169496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:00:09.698 [DEBUG] [Thread-169496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:00:09.708 [DEBUG] [Thread-169496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:00:09.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:00:09.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:00:09.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-04-11T12:00:09.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:00:09.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:00:09.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:00:09.744 [DEBUG] [Thread-169496] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:00:13.748 [DEBUG] [Thread-169498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:28.800 [DEBUG] [Thread-169499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:39.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:00:39.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:00:39.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:00:41.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 0, 2), 0.10198, 99.6228, 0.0, 17.7858, 13.4824, 2, 2, 2, 2, 0, 0),)
2026-04-11T12:00:41.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:00:02
2026-04-11T12:00:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:00:41.643 [DEBUG] [Thread-169500] [transport.py] [_log()] starting thread (client mode): 0xa795d360
2026-04-11T12:00:41.643 [DEBUG] [Thread-169500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:00:41.662 [DEBUG] [Thread-169500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:00:41.663 [INFO] [Thread-169500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] client lang: <none>
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] server lang: <none>
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] kex follows: False
2026-04-11T12:00:41.666 [DEBUG] [Thread-169500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:00:41.667 [DEBUG] [Thread-169500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:00:41.667 [DEBUG] [Thread-169500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:00:41.667 [DEBUG] [Thread-169500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:00:41.667 [DEBUG] [Thread-169500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:00:41.667 [DEBUG] [Thread-169500] [transport.py] [_log()] Compression: none
2026-04-11T12:00:41.667 [DEBUG] [Thread-169500] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:00:41.682 [DEBUG] [Thread-169500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:00:41.683 [DEBUG] [Thread-169500] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:00:41.683 [DEBUG] [Thread-169500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:00:41.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:00:41.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:00:41.725 [DEBUG] [Thread-169500] [transport.py] [_log()] userauth is OK
2026-04-11T12:00:41.725 [DEBUG] [Thread-169500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:00:41.725 [DEBUG] [Thread-169500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:00:41.725 [DEBUG] [Thread-169500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:00:41.725 [DEBUG] [Thread-169500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:00:41.751 [INFO] [Thread-169500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:00:41.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:00:42.388 [DEBUG] [Thread-169500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:00:42.388 [DEBUG] [Thread-169500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:00:42.388 [DEBUG] [Thread-169500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:00:42.429 [DEBUG] [Thread-169500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:00:42.430 [DEBUG] [Thread-169500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:00:42.433 [DEBUG] [Thread-169500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:00:42.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:00:42.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:00:42.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:00:42.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:00:42.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:00:42.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:00:42.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:00:42.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:00:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:00:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.416786 -999.00  +13.30  16.39     97  +12.90 1 3 1 3 1   888    0 0.43 0.66 ----- 16.4 16.4 119.0 22.9 14.9 0.1 15.0 -0.3 14.9 -0.4 15.1 -0.3
2026-04-11T12:00:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:00:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:00:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.416786
2026-04-11T12:00:42.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:00:42.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:00:42.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:00:42.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:00:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:00:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:00:02', tmtdew=0.10198, humidity=99.6228, cloud=0.0, wind=17.7858, temperature=13.4824, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:00:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:00:42.462 [DEBUG] [Thread-169500] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:00:42.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:00:42.545 [DEBUG] [Thread-169503] [transport.py] [_log()] starting thread (client mode): 0xa795c220
2026-04-11T12:00:42.545 [DEBUG] [Thread-169503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:00:42.563 [DEBUG] [Thread-169503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:00:42.563 [INFO] [Thread-169503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] client lang: <none>
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] server lang: <none>
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] kex follows: False
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:00:42.571 [DEBUG] [Thread-169503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:00:42.572 [DEBUG] [Thread-169503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:00:42.572 [DEBUG] [Thread-169503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:00:42.572 [DEBUG] [Thread-169503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:00:42.572 [DEBUG] [Thread-169503] [transport.py] [_log()] Compression: none
2026-04-11T12:00:42.572 [DEBUG] [Thread-169503] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:00:42.633 [DEBUG] [Thread-169503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:00:42.634 [DEBUG] [Thread-169503] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:00:42.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:00:42.635 [DEBUG] [Thread-169503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:00:42.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:00:42.689 [DEBUG] [Thread-169503] [transport.py] [_log()] userauth is OK
2026-04-11T12:00:42.689 [DEBUG] [Thread-169503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:00:42.689 [DEBUG] [Thread-169503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:00:42.689 [DEBUG] [Thread-169503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:00:42.689 [DEBUG] [Thread-169503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:00:42.708 [INFO] [Thread-169503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:00:42.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:00:42.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:00:43.533 [DEBUG] [Thread-169503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:00:43.533 [DEBUG] [Thread-169503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:00:43.582 [DEBUG] [Thread-169503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:00:43.583 [DEBUG] [Thread-169503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:00:43.592 [DEBUG] [Thread-169503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:00:43.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:00:43.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-04-11T12:00:43.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:00:43.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:00:43.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:00:43.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:00:43.630 [DEBUG] [Thread-169503] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:00:43.849 [DEBUG] [Thread-169505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:49.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:49.604 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:00:58.896 [DEBUG] [Thread-169506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:03.617 [DEBUG] [Thread-169507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:13.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:01:13.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:01: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-04-11T12:01:13.932 [DEBUG] [Thread-169508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 0, 38), 0.11939, 99.1461, 0.0, 21.7008, 13.8647, 2, 2, 2, 2, 0, 0),)
2026-04-11T12:01:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:00:38
2026-04-11T12:01:15.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:01:15.504 [DEBUG] [Thread-169509] [transport.py] [_log()] starting thread (client mode): 0xae52f5b0
2026-04-11T12:01:15.504 [DEBUG] [Thread-169509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:01:15.526 [DEBUG] [Thread-169509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:01:15.527 [INFO] [Thread-169509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:01:15.530 [DEBUG] [Thread-169509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] client lang: <none>
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] server lang: <none>
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] kex follows: False
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:01:15.531 [DEBUG] [Thread-169509] [transport.py] [_log()] Compression: none
2026-04-11T12:01:15.532 [DEBUG] [Thread-169509] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:01:15.554 [DEBUG] [Thread-169509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:01:15.555 [DEBUG] [Thread-169509] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:01:15.555 [DEBUG] [Thread-169509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:01:15.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:01:15.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:01:15.558 [DEBUG] [Thread-169509] [transport.py] [_log()] userauth is OK
2026-04-11T12:01:15.558 [DEBUG] [Thread-169509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:01:15.558 [DEBUG] [Thread-169509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:01:15.558 [DEBUG] [Thread-169509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:01:15.558 [DEBUG] [Thread-169509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:01:15.581 [INFO] [Thread-169509] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:01:15.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:01:16.225 [DEBUG] [Thread-169509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:01:16.225 [DEBUG] [Thread-169509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:01:16.225 [DEBUG] [Thread-169509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:01:16.266 [DEBUG] [Thread-169509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:01:16.266 [DEBUG] [Thread-169509] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:01:16.270 [DEBUG] [Thread-169509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:01:16.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:01:16.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:01:16.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:01:16.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:01:16.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:01:16.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:01:16.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:01:16.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:01:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:01:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.417133 -999.00  +13.30   9.89     97  +12.90 1 3 1 3 1   888    0 0.43 0.60 ----- 14.3 9.9 134.5 20.9 14.8 -0.4 14.9 0.0 14.9 -0.2 15.1 0.1
2026-04-11T12:01:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:01:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:01:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.417133
2026-04-11T12:01:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:01:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:01:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:01:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:01:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:01:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:00:38', tmtdew=0.11939, humidity=99.1461, cloud=0.0, wind=21.7008, temperature=13.8647, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:00:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:01:16.296 [DEBUG] [Thread-169509] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:01:16.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:01:28.973 [DEBUG] [Thread-169512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:44.032 [DEBUG] [Thread-169513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:49.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:49.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:01:59.068 [DEBUG] [Thread-169514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:03.661 [DEBUG] [Thread-169515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:14.106 [DEBUG] [Thread-169516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:29.142 [DEBUG] [Thread-169517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:44.181 [DEBUG] [Thread-169518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:49.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:49.886 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:02:59.216 [DEBUG] [Thread-169519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:03.710 [DEBUG] [Thread-169520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:14.254 [DEBUG] [Thread-169521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:29.295 [DEBUG] [Thread-169522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:30.303 [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-04-11T12:03:44.333 [DEBUG] [Thread-169523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:50.027 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:50.028 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:03:59.369 [DEBUG] [Thread-169524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:00.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:04:00.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:04:00.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-04-11T12:04:01.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 3, 35), 0.09367, 99.3119, 0.0, 21.5597, 14.0968, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:04:01.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:03:35
2026-04-11T12:04:02.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:04:02.313 [DEBUG] [Thread-169525] [transport.py] [_log()] starting thread (client mode): 0xae5b3220
2026-04-11T12:04:02.313 [DEBUG] [Thread-169525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:04:02.333 [DEBUG] [Thread-169525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:04:02.333 [INFO] [Thread-169525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:02.336 [DEBUG] [Thread-169525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] client lang: <none>
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] server lang: <none>
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] kex follows: False
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] Compression: none
2026-04-11T12:04:02.337 [DEBUG] [Thread-169525] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:04:02.351 [DEBUG] [Thread-169525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:04:02.352 [DEBUG] [Thread-169525] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:04:02.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:04:02.353 [DEBUG] [Thread-169525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:04:02.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:04:02.355 [DEBUG] [Thread-169525] [transport.py] [_log()] userauth is OK
2026-04-11T12:04:02.355 [DEBUG] [Thread-169525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:04:02.355 [DEBUG] [Thread-169525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:04:02.355 [DEBUG] [Thread-169525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:04:02.355 [DEBUG] [Thread-169525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:04:02.372 [INFO] [Thread-169525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:04:02.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:04:03.026 [DEBUG] [Thread-169525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:04:03.026 [DEBUG] [Thread-169525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:04:03.027 [DEBUG] [Thread-169525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:04:03.067 [DEBUG] [Thread-169525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:04:03.067 [DEBUG] [Thread-169525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:04:03.071 [DEBUG] [Thread-169525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:04:03.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:04:03.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:04:03.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:04:03.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:04:03.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:04:03.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:04:03.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:04:03.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:04:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:04:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.419216 -999.00  +13.50  20.89     97  +13.00 1 3 1 3 1   888    0 0.43 0.57 ----- 21.0 20.9 59.8 22.2 15.0 0.4 15.1 0.3 15.1 0.3 15.2 -0.1
2026-04-11T12:04:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:04:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:04:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.419216
2026-04-11T12:04:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:04:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:04:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:04:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:04:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:04:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:03:35', tmtdew=0.09367, humidity=99.3119, cloud=0.0, wind=21.5597, temperature=14.0968, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:03:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:04:03.098 [DEBUG] [Thread-169525] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:04:03.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:04:03.193 [DEBUG] [Thread-169528] [transport.py] [_log()] starting thread (client mode): 0xae5b1300
2026-04-11T12:04:03.193 [DEBUG] [Thread-169528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:04:03.208 [DEBUG] [Thread-169528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:04:03.208 [INFO] [Thread-169528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:04:03.216 [DEBUG] [Thread-169528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:04:03.216 [DEBUG] [Thread-169528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:04:03.216 [DEBUG] [Thread-169528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:04:03.216 [DEBUG] [Thread-169528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:03.216 [DEBUG] [Thread-169528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:03.216 [DEBUG] [Thread-169528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] client lang: <none>
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] server lang: <none>
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] kex follows: False
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] Compression: none
2026-04-11T12:04:03.217 [DEBUG] [Thread-169528] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:04:03.274 [DEBUG] [Thread-169528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:04:03.274 [DEBUG] [Thread-169528] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:04:03.275 [DEBUG] [Thread-169528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:04:03.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:04:03.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:04:03.330 [DEBUG] [Thread-169528] [transport.py] [_log()] userauth is OK
2026-04-11T12:04:03.331 [DEBUG] [Thread-169528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:04:03.331 [DEBUG] [Thread-169528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:04:03.331 [DEBUG] [Thread-169528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:04:03.331 [DEBUG] [Thread-169528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:04:03.349 [INFO] [Thread-169528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:04: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-04-11T12:04:03.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:04:03.762 [DEBUG] [Thread-169530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:04.130 [DEBUG] [Thread-169528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:04:04.130 [DEBUG] [Thread-169528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:04:04.178 [DEBUG] [Thread-169528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:04:04.179 [DEBUG] [Thread-169528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:04:04.188 [DEBUG] [Thread-169528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:04:04.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:04: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')
2026-04-11T12:04:04.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:04:04.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:04:04.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:04:04.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:04:04.225 [DEBUG] [Thread-169528] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:04:14.403 [DEBUG] [Thread-169531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:29.459 [DEBUG] [Thread-169532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:04:34.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:04:34.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-04-11T12:04:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 4, 10), 0.099405, 99.6394, 0.0, 18.8971, 13.4987, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:04:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:04:10
2026-04-11T12:04:36.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:04:36.244 [DEBUG] [Thread-169533] [transport.py] [_log()] starting thread (client mode): 0xae5b0af0
2026-04-11T12:04:36.244 [DEBUG] [Thread-169533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:04:36.263 [DEBUG] [Thread-169533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:04:36.263 [INFO] [Thread-169533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:04:36.266 [DEBUG] [Thread-169533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:04:36.266 [DEBUG] [Thread-169533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] client lang: <none>
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] server lang: <none>
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] kex follows: False
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] Compression: none
2026-04-11T12:04:36.267 [DEBUG] [Thread-169533] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:04:36.283 [DEBUG] [Thread-169533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:04:36.284 [DEBUG] [Thread-169533] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:04:36.285 [DEBUG] [Thread-169533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:04:36.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:04:36.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:04:36.287 [DEBUG] [Thread-169533] [transport.py] [_log()] userauth is OK
2026-04-11T12:04:36.287 [DEBUG] [Thread-169533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:04:36.287 [DEBUG] [Thread-169533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:04:36.287 [DEBUG] [Thread-169533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:04:36.287 [DEBUG] [Thread-169533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:04:36.324 [INFO] [Thread-169533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:04:36.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:04:36.980 [DEBUG] [Thread-169533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:04:36.980 [DEBUG] [Thread-169533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:04:36.981 [DEBUG] [Thread-169533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:04:37.021 [DEBUG] [Thread-169533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:04:37.021 [DEBUG] [Thread-169533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:04:37.025 [DEBUG] [Thread-169533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:04:37.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:04:37.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:04:37.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:04:37.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:04:37.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:04:37.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:04:37.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:04:37.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:04:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:04:37.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.419564 -999.00  +13.40  17.85     97  +12.90 1 3 1 3 1   888    0 0.43 0.62 ----- 19.1 17.9 65.4 22.8 15.1 0.8 15.1 -0.1 15.0 0.2 15.3 0.2
2026-04-11T12:04:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:04:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:04:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.419564
2026-04-11T12:04:37.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:04:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:04:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:04:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:04:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:04:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:04:10', tmtdew=0.099405, humidity=99.6394, cloud=0.0, wind=18.8971, temperature=13.4987, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:04:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:04:37.054 [DEBUG] [Thread-169533] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:04:37.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:04:37.148 [DEBUG] [Thread-169536] [transport.py] [_log()] starting thread (client mode): 0xae5e4430
2026-04-11T12:04:37.148 [DEBUG] [Thread-169536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:04:37.163 [DEBUG] [Thread-169536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:04:37.163 [INFO] [Thread-169536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:04:37.171 [DEBUG] [Thread-169536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] client lang: <none>
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] server lang: <none>
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] kex follows: False
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] Compression: none
2026-04-11T12:04:37.172 [DEBUG] [Thread-169536] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:04:37.233 [DEBUG] [Thread-169536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:04:37.233 [DEBUG] [Thread-169536] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:04:37.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:04:37.234 [DEBUG] [Thread-169536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:04:37.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:04:37.290 [DEBUG] [Thread-169536] [transport.py] [_log()] userauth is OK
2026-04-11T12:04:37.290 [DEBUG] [Thread-169536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:04:37.290 [DEBUG] [Thread-169536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:04:37.291 [DEBUG] [Thread-169536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:04:37.291 [DEBUG] [Thread-169536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:04:37.316 [INFO] [Thread-169536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:04:37.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:04:37.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:04:38.164 [DEBUG] [Thread-169536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:04:38.164 [DEBUG] [Thread-169536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:04:38.212 [DEBUG] [Thread-169536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:04:38.212 [DEBUG] [Thread-169536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:04:38.221 [DEBUG] [Thread-169536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:04:38.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:04: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')
2026-04-11T12:04:38.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:04:38.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:04:38.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:04:38.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:04:38.259 [DEBUG] [Thread-169536] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:04:44.498 [DEBUG] [Thread-169538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:50.171 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:50.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:04:59.560 [DEBUG] [Thread-169539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:03.831 [DEBUG] [Thread-169540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:08.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:05:08.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:05:08.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-04-11T12:05:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 4, 46), 0.09881, 99.2788, 0.0, 21.0658, 13.9973, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:05:09.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:04:46
2026-04-11T12:05:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:05:10.113 [DEBUG] [Thread-169541] [transport.py] [_log()] starting thread (client mode): 0xae5b21d0
2026-04-11T12:05:10.113 [DEBUG] [Thread-169541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:05:10.129 [DEBUG] [Thread-169541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:05:10.129 [INFO] [Thread-169541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:05:10.130 [DEBUG] [Thread-169541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:05:10.137 [DEBUG] [Thread-169541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] client lang: <none>
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] server lang: <none>
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] kex follows: False
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] Compression: none
2026-04-11T12:05:10.138 [DEBUG] [Thread-169541] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:05:10.153 [DEBUG] [Thread-169541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:05:10.153 [DEBUG] [Thread-169541] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:05:10.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:05:10.154 [DEBUG] [Thread-169541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:05:10.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:05:10.156 [DEBUG] [Thread-169541] [transport.py] [_log()] userauth is OK
2026-04-11T12:05:10.156 [DEBUG] [Thread-169541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:05:10.156 [DEBUG] [Thread-169541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:05:10.156 [DEBUG] [Thread-169541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:05:10.156 [DEBUG] [Thread-169541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:05:10.182 [INFO] [Thread-169541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:05:10.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:05:12.367 [DEBUG] [Thread-169541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:05:12.368 [DEBUG] [Thread-169541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:05:12.368 [DEBUG] [Thread-169541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:05:12.408 [DEBUG] [Thread-169541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:05:12.408 [DEBUG] [Thread-169541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:05:12.411 [DEBUG] [Thread-169541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:05:12.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:05:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:05:12.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:05:12.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:05:13.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:05:13.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:05:13.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:05:13.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:05:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:05:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.419911 -999.00  +13.30  19.21     97  +12.90 1 3 1 3 1   888    0 0.43 0.82 ----- 18.2 19.2 64.4 22.5 15.0 0.6 15.0 -0.7 15.1 -0.8 15.2 0.2
2026-04-11T12:05:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:05:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:05:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.419911
2026-04-11T12:05:13.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:05:13.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:05:13.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:05:13.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:05:13.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:05:13.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:04:46', tmtdew=0.09881, humidity=99.2788, cloud=0.0, wind=21.0658, temperature=13.9973, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:04:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:05:13.595 [DEBUG] [Thread-169541] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:05:13.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:05:13.690 [DEBUG] [Thread-169544] [transport.py] [_log()] starting thread (client mode): 0xae5b3c40
2026-04-11T12:05:13.690 [DEBUG] [Thread-169544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:05:13.704 [DEBUG] [Thread-169544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:05:13.705 [INFO] [Thread-169544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:05:13.712 [DEBUG] [Thread-169544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:05:13.712 [DEBUG] [Thread-169544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:05:13.712 [DEBUG] [Thread-169544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:05:13.712 [DEBUG] [Thread-169544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:13.712 [DEBUG] [Thread-169544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] client lang: <none>
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] server lang: <none>
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] kex follows: False
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:05:13.713 [DEBUG] [Thread-169544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:05:13.714 [DEBUG] [Thread-169544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:05:13.714 [DEBUG] [Thread-169544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:05:13.714 [DEBUG] [Thread-169544] [transport.py] [_log()] Compression: none
2026-04-11T12:05:13.714 [DEBUG] [Thread-169544] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:05:13.770 [DEBUG] [Thread-169544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:05:13.770 [DEBUG] [Thread-169544] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:05:13.771 [DEBUG] [Thread-169544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:05:13.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:05:13.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:05:13.827 [DEBUG] [Thread-169544] [transport.py] [_log()] userauth is OK
2026-04-11T12:05:13.828 [DEBUG] [Thread-169544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:05:13.828 [DEBUG] [Thread-169544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:05:13.828 [DEBUG] [Thread-169544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:05:13.828 [DEBUG] [Thread-169544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:05:13.852 [INFO] [Thread-169544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:05:13.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:05:13.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:05:14.599 [DEBUG] [Thread-169546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:14.676 [DEBUG] [Thread-169544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:05:14.676 [DEBUG] [Thread-169544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:05:14.726 [DEBUG] [Thread-169544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:05:14.727 [DEBUG] [Thread-169544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:05:14.741 [DEBUG] [Thread-169544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:05:14.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:05:14.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:05:14.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:05:14.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:05:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:05:14.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:05:14.778 [DEBUG] [Thread-169544] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:05:29.644 [DEBUG] [Thread-169547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:44.681 [DEBUG] [Thread-169548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:05:44.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:05:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:05:46.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 5, 21), 0.09169, 99.6891, 0.0, 13.8514, 13.5984, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:05:46.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:05:21
2026-04-11T12:05:46.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:05:46.625 [DEBUG] [Thread-169549] [transport.py] [_log()] starting thread (client mode): 0xae5b3a60
2026-04-11T12:05:46.625 [DEBUG] [Thread-169549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:05:46.645 [DEBUG] [Thread-169549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:05:46.645 [INFO] [Thread-169549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:05:46.647 [DEBUG] [Thread-169549] [transport.py] [_log()] client lang: <none>
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] server lang: <none>
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] kex follows: False
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] Compression: none
2026-04-11T12:05:46.648 [DEBUG] [Thread-169549] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:05:46.657 [DEBUG] [Thread-169549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:05:46.658 [DEBUG] [Thread-169549] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:05:46.658 [DEBUG] [Thread-169549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:05:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:05:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:05:46.660 [DEBUG] [Thread-169549] [transport.py] [_log()] userauth is OK
2026-04-11T12:05:46.660 [DEBUG] [Thread-169549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:05:46.660 [DEBUG] [Thread-169549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:05:46.661 [DEBUG] [Thread-169549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:05:46.661 [DEBUG] [Thread-169549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:05:46.679 [INFO] [Thread-169549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:05:46.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:05:47.293 [DEBUG] [Thread-169549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:05:47.293 [DEBUG] [Thread-169549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:05:47.294 [DEBUG] [Thread-169549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:05:47.334 [DEBUG] [Thread-169549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:05:47.334 [DEBUG] [Thread-169549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:05:47.337 [DEBUG] [Thread-169549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:05:47.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:05:47.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:05:47.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:05:47.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:05:47.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:05:47.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:05:47.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:05:47.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:05:47.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:05:47.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.420605 -999.00  +13.50   7.62     97  +13.10 1 3 1 3 1   888    0 0.45 1.21 ----- 9.9 7.6 89.1 22.5 15.1 0.7 15.0 0.3 15.0 0.1 15.3 0.5
2026-04-11T12:05:47.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:05:47.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:05:47.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.420605
2026-04-11T12:05:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:05:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:05:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:05:47.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:05:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:05:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:05:21', tmtdew=0.09169, humidity=99.6891, cloud=0.0, wind=13.8514, temperature=13.5984, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:05:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:05:47.363 [DEBUG] [Thread-169549] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:05:47.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:05:47.453 [DEBUG] [Thread-169552] [transport.py] [_log()] starting thread (client mode): 0xae5e4400
2026-04-11T12:05:47.454 [DEBUG] [Thread-169552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:05:47.468 [DEBUG] [Thread-169552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:05:47.468 [INFO] [Thread-169552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:05:47.476 [DEBUG] [Thread-169552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:05:47.476 [DEBUG] [Thread-169552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:05:47.476 [DEBUG] [Thread-169552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:05:47.476 [DEBUG] [Thread-169552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] client lang: <none>
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] server lang: <none>
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] kex follows: False
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:05:47.477 [DEBUG] [Thread-169552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:05:47.478 [DEBUG] [Thread-169552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:05:47.478 [DEBUG] [Thread-169552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:05:47.478 [DEBUG] [Thread-169552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:05:47.478 [DEBUG] [Thread-169552] [transport.py] [_log()] Compression: none
2026-04-11T12:05:47.478 [DEBUG] [Thread-169552] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:05:47.535 [DEBUG] [Thread-169552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:05:47.536 [DEBUG] [Thread-169552] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:05:47.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:05:47.538 [DEBUG] [Thread-169552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:05:47.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:05:47.594 [DEBUG] [Thread-169552] [transport.py] [_log()] userauth is OK
2026-04-11T12:05:47.594 [DEBUG] [Thread-169552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:05:47.594 [DEBUG] [Thread-169552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:05:47.594 [DEBUG] [Thread-169552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:05:47.595 [DEBUG] [Thread-169552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:05:47.619 [INFO] [Thread-169552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:05:47.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:05:47.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:05:48.471 [DEBUG] [Thread-169552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:05:48.471 [DEBUG] [Thread-169552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:05:48.519 [DEBUG] [Thread-169552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:05:48.520 [DEBUG] [Thread-169552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:05:48.529 [DEBUG] [Thread-169552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:05:48.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:05:48.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:05:48.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-04-11T12:05:48.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:05:48.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:05:48.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:05:48.567 [DEBUG] [Thread-169552] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:05:50.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:50.326 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:05:59.718 [DEBUG] [Thread-169554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:03.880 [DEBUG] [Thread-169555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:14.761 [DEBUG] [Thread-169556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:06:18.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:06:18.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-04-11T12:06:19.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 5, 57), 0.09168, 99.6891, 0.0, 17.7152, 13.6481, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:06:19.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:05:57
2026-04-11T12:06:20.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:06:20.381 [DEBUG] [Thread-169557] [transport.py] [_log()] starting thread (client mode): 0xa79b6740
2026-04-11T12:06:20.381 [DEBUG] [Thread-169557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:06:20.399 [DEBUG] [Thread-169557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:06:20.399 [INFO] [Thread-169557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:06:20.401 [DEBUG] [Thread-169557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] client lang: <none>
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] server lang: <none>
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] kex follows: False
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] Compression: none
2026-04-11T12:06:20.402 [DEBUG] [Thread-169557] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:06:20.417 [DEBUG] [Thread-169557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:06:20.417 [DEBUG] [Thread-169557] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:06:20.418 [DEBUG] [Thread-169557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:06:20.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:06:20.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:06:20.420 [DEBUG] [Thread-169557] [transport.py] [_log()] userauth is OK
2026-04-11T12:06:20.420 [DEBUG] [Thread-169557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:06:20.420 [DEBUG] [Thread-169557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:06:20.420 [DEBUG] [Thread-169557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:06:20.420 [DEBUG] [Thread-169557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:06:20.444 [INFO] [Thread-169557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:06:20.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:06:21.043 [DEBUG] [Thread-169557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:06:21.043 [DEBUG] [Thread-169557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:06:21.044 [DEBUG] [Thread-169557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:06:21.084 [DEBUG] [Thread-169557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:06:21.084 [DEBUG] [Thread-169557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:06:21.088 [DEBUG] [Thread-169557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:06:21.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:06:21.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:06:21.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:06:21.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:06:21.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:06:21.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:06:21.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:06:21.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:06:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:06:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.420953 -999.00  +13.40  21.64     97  +13.00 1 3 1 3 1   888    0 0.45 1.05 ----- 17.2 21.6 54.4 26.0 15.1 0.5 15.1 -0.4 15.1 -0.2 15.3 0.1
2026-04-11T12:06:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:06:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:06:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.420953
2026-04-11T12:06:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:06:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:06:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:06:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:06:21.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:06:21.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:05:57', tmtdew=0.09168, humidity=99.6891, cloud=0.0, wind=17.7152, temperature=13.6481, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:06:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:06:21.118 [DEBUG] [Thread-169557] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:06:21.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:06:21.211 [DEBUG] [Thread-169560] [transport.py] [_log()] starting thread (client mode): 0xae5b32b0
2026-04-11T12:06:21.211 [DEBUG] [Thread-169560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:06:21.226 [DEBUG] [Thread-169560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:06:21.226 [INFO] [Thread-169560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] client lang: <none>
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] server lang: <none>
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] kex follows: False
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:06:21.234 [DEBUG] [Thread-169560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:06:21.235 [DEBUG] [Thread-169560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:06:21.235 [DEBUG] [Thread-169560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:06:21.235 [DEBUG] [Thread-169560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:06:21.235 [DEBUG] [Thread-169560] [transport.py] [_log()] Compression: none
2026-04-11T12:06:21.235 [DEBUG] [Thread-169560] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:06:21.294 [DEBUG] [Thread-169560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:06:21.295 [DEBUG] [Thread-169560] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:06:21.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:06:21.296 [DEBUG] [Thread-169560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:06:21.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:06:21.350 [DEBUG] [Thread-169560] [transport.py] [_log()] userauth is OK
2026-04-11T12:06:21.350 [DEBUG] [Thread-169560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:06:21.351 [DEBUG] [Thread-169560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:06:21.351 [DEBUG] [Thread-169560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:06:21.351 [DEBUG] [Thread-169560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:06:21.369 [INFO] [Thread-169560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:06:21.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:06:21.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:06:22.183 [DEBUG] [Thread-169560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:06:22.184 [DEBUG] [Thread-169560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:06:22.231 [DEBUG] [Thread-169560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:06:22.231 [DEBUG] [Thread-169560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:06:22.241 [DEBUG] [Thread-169560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:06:22.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:06:22.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-04-11T12:06:22.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-04-11T12:06:22.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:06:22.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:06:22.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:06:22.278 [DEBUG] [Thread-169560] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:06:29.799 [DEBUG] [Thread-169562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:44.851 [DEBUG] [Thread-169563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:50.466 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:50.467 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:06:52.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:06:52.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:06:52.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-04-11T12:06:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 6, 33), 0.094255, 99.6725, 0.0, 17.2742, 13.6481, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:06:53.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:06:33
2026-04-11T12:06:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:06:54.140 [DEBUG] [Thread-169564] [transport.py] [_log()] starting thread (client mode): 0xa79b4a00
2026-04-11T12:06:54.140 [DEBUG] [Thread-169564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:06:54.160 [DEBUG] [Thread-169564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:06:54.160 [INFO] [Thread-169564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] client lang: <none>
2026-04-11T12:06:54.161 [DEBUG] [Thread-169564] [transport.py] [_log()] server lang: <none>
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] kex follows: False
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] Compression: none
2026-04-11T12:06:54.162 [DEBUG] [Thread-169564] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:06:54.174 [DEBUG] [Thread-169564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:06:54.175 [DEBUG] [Thread-169564] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:06:54.175 [DEBUG] [Thread-169564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:06:54.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:06:54.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:06:54.177 [DEBUG] [Thread-169564] [transport.py] [_log()] userauth is OK
2026-04-11T12:06:54.178 [DEBUG] [Thread-169564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:06:54.178 [DEBUG] [Thread-169564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:06:54.178 [DEBUG] [Thread-169564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:06:54.178 [DEBUG] [Thread-169564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:06:54.203 [INFO] [Thread-169564] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:06:54.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:06:54.817 [DEBUG] [Thread-169564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:06:54.817 [DEBUG] [Thread-169564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:06:54.817 [DEBUG] [Thread-169564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:06:54.858 [DEBUG] [Thread-169564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:06:54.858 [DEBUG] [Thread-169564] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:06:54.862 [DEBUG] [Thread-169564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:06:54.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:06:54.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:06:54.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:06:54.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:06:54.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:06:54.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:06:54.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:06:54.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:06:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:06:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.421300 -999.00  +13.30  21.70     97  +12.90 1 3 1 3 1   888    0 0.45 0.97 ----- 21.4 21.7 58.3 25.9 15.1 -0.1 15.1 -0.6 15.1 -0.7 15.2 0.1
2026-04-11T12:06:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:06:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:06:54.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.421300
2026-04-11T12:06:54.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:06:54.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:06:54.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:06:54.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:06:54.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:06:54.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:06:33', tmtdew=0.094255, humidity=99.6725, cloud=0.0, wind=17.2742, temperature=13.6481, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:06:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:06:54.881 [DEBUG] [Thread-169564] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:06:54.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:06:54.975 [DEBUG] [Thread-169567] [transport.py] [_log()] starting thread (client mode): 0xa79b5060
2026-04-11T12:06:54.975 [DEBUG] [Thread-169567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:06:54.991 [DEBUG] [Thread-169567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:06:54.992 [INFO] [Thread-169567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:06:55.001 [DEBUG] [Thread-169567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:06:55.002 [DEBUG] [Thread-169567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:06:55.002 [DEBUG] [Thread-169567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:06:55.002 [DEBUG] [Thread-169567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:55.002 [DEBUG] [Thread-169567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] client lang: <none>
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] server lang: <none>
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] kex follows: False
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] Compression: none
2026-04-11T12:06:55.003 [DEBUG] [Thread-169567] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:06:55.058 [DEBUG] [Thread-169567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:06:55.058 [DEBUG] [Thread-169567] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:06:55.059 [DEBUG] [Thread-169567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:06:55.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:06:55.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:06:55.114 [DEBUG] [Thread-169567] [transport.py] [_log()] userauth is OK
2026-04-11T12:06:55.115 [DEBUG] [Thread-169567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:06:55.115 [DEBUG] [Thread-169567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:06:55.115 [DEBUG] [Thread-169567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:06:55.115 [DEBUG] [Thread-169567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:06:55.140 [INFO] [Thread-169567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:06:55.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:06:55.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:06:55.949 [DEBUG] [Thread-169567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:06:55.949 [DEBUG] [Thread-169567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:06:56.000 [DEBUG] [Thread-169567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:06:56.001 [DEBUG] [Thread-169567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:06:56.010 [DEBUG] [Thread-169567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:06:56.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:06:56.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:06:56.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-04-11T12:06:56.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:06:56.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:06:56.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:06:56.047 [DEBUG] [Thread-169567] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:06:59.886 [DEBUG] [Thread-169569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:03.934 [DEBUG] [Thread-169570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:14.935 [DEBUG] [Thread-169571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:07:26.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:07:26.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-04-11T12:07:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 7, 8), 0.09168, 99.6891, 0.0, 17.9622, 13.6316, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:07:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:07:08
2026-04-11T12:07:27.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:07:27.892 [DEBUG] [Thread-169572] [transport.py] [_log()] starting thread (client mode): 0xa795c820
2026-04-11T12:07:27.892 [DEBUG] [Thread-169572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:07:27.905 [DEBUG] [Thread-169572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:07:27.905 [INFO] [Thread-169572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] client lang: <none>
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] server lang: <none>
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] kex follows: False
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] Compression: none
2026-04-11T12:07:27.909 [DEBUG] [Thread-169572] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:07:27.918 [DEBUG] [Thread-169572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:07:27.918 [DEBUG] [Thread-169572] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:07:27.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:07:27.919 [DEBUG] [Thread-169572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:07:27.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:07:27.921 [DEBUG] [Thread-169572] [transport.py] [_log()] userauth is OK
2026-04-11T12:07:27.921 [DEBUG] [Thread-169572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:07:27.921 [DEBUG] [Thread-169572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:07:27.921 [DEBUG] [Thread-169572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:07:27.921 [DEBUG] [Thread-169572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:07:27.943 [INFO] [Thread-169572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:07:27.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:07:28.551 [DEBUG] [Thread-169572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:07:28.552 [DEBUG] [Thread-169572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:07:28.552 [DEBUG] [Thread-169572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:07:28.593 [DEBUG] [Thread-169572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:07:28.594 [DEBUG] [Thread-169572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:07:28.597 [DEBUG] [Thread-169572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:07:28.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:07:28.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:07:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:07:28.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:07:28.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:07:28.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:07:28.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:07:28.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:07:28.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:07:28.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.421647 -999.00  +13.50  20.40     97  +13.00 1 3 1 3 1   888    0 0.44 1.08 ----- 19.8 20.4 74.6 24.3 15.0 0.1 15.1 0.0 15.1 0.1 15.2 0.0
2026-04-11T12:07:28.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:07:28.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:07:28.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.421647
2026-04-11T12:07:28.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:07:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:07:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:07:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:07:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:07:28.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:07:08', tmtdew=0.09168, humidity=99.6891, cloud=0.0, wind=17.9622, temperature=13.6316, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:07:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:07:28.629 [DEBUG] [Thread-169572] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:07:28.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:07:28.724 [DEBUG] [Thread-169575] [transport.py] [_log()] starting thread (client mode): 0xa795c970
2026-04-11T12:07:28.724 [DEBUG] [Thread-169575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:07:28.739 [DEBUG] [Thread-169575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:07:28.740 [INFO] [Thread-169575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:07:28.747 [DEBUG] [Thread-169575] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] client lang: <none>
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] server lang: <none>
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] kex follows: False
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] Compression: none
2026-04-11T12:07:28.748 [DEBUG] [Thread-169575] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:07:28.806 [DEBUG] [Thread-169575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:07:28.807 [DEBUG] [Thread-169575] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:07:28.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:07:28.808 [DEBUG] [Thread-169575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:07:28.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:07:28.862 [DEBUG] [Thread-169575] [transport.py] [_log()] userauth is OK
2026-04-11T12:07:28.862 [DEBUG] [Thread-169575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:07:28.862 [DEBUG] [Thread-169575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:07:28.863 [DEBUG] [Thread-169575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:07:28.863 [DEBUG] [Thread-169575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:07:28.881 [INFO] [Thread-169575] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:07:28.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:07:28.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:07:29.737 [DEBUG] [Thread-169575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:07:29.737 [DEBUG] [Thread-169575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:07:29.785 [DEBUG] [Thread-169575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:07:29.785 [DEBUG] [Thread-169575] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:07:29.795 [DEBUG] [Thread-169575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:07:29.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:07: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')
2026-04-11T12:07:29.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-04-11T12:07:29.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:07:29.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:07:29.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:07:29.831 [DEBUG] [Thread-169575] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:07:29.971 [DEBUG] [Thread-169577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:45.024 [DEBUG] [Thread-169578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:50.613 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:50.614 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:07:59.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:07:59.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:07:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:08:00.060 [DEBUG] [Thread-169579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:08:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 7, 43), 0.08851, 99.3451, 0.0, 18.8431, 14.1963, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:08:01.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:07:43
2026-04-11T12:08:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:08:01.680 [DEBUG] [Thread-169580] [transport.py] [_log()] starting thread (client mode): 0xa795f790
2026-04-11T12:08:01.680 [DEBUG] [Thread-169580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:08:01.701 [DEBUG] [Thread-169580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:08:01.701 [INFO] [Thread-169580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:08:01.704 [DEBUG] [Thread-169580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:08:01.704 [DEBUG] [Thread-169580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:08:01.704 [DEBUG] [Thread-169580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:08:01.704 [DEBUG] [Thread-169580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:01.704 [DEBUG] [Thread-169580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:01.704 [DEBUG] [Thread-169580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] client lang: <none>
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] server lang: <none>
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] kex follows: False
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:08:01.705 [DEBUG] [Thread-169580] [transport.py] [_log()] Compression: none
2026-04-11T12:08:01.706 [DEBUG] [Thread-169580] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:08:01.720 [DEBUG] [Thread-169580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:08:01.721 [DEBUG] [Thread-169580] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:08:01.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:08:01.723 [DEBUG] [Thread-169580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:08:01.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:08:01.725 [DEBUG] [Thread-169580] [transport.py] [_log()] userauth is OK
2026-04-11T12:08:01.725 [DEBUG] [Thread-169580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:08:01.725 [DEBUG] [Thread-169580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:08:01.725 [DEBUG] [Thread-169580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:08:01.726 [DEBUG] [Thread-169580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:08:01.748 [INFO] [Thread-169580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:08:01.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:08:02.310 [DEBUG] [Thread-169580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:08:02.310 [DEBUG] [Thread-169580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:08:02.311 [DEBUG] [Thread-169580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:08:02.351 [DEBUG] [Thread-169580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:08:02.351 [DEBUG] [Thread-169580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:08:02.355 [DEBUG] [Thread-169580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:08:02.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:08:02.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:08:02.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:08:02.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:08:02.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:08:02.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:08:02.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:08:02.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:08:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:08:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.421994 -999.00  +13.50  16.73     97  +13.00 1 3 1 3 1   888    0 0.45 1.15 ----- 17.6 16.7 59.2 21.9 15.0 0.1 15.1 0.1 15.1 -0.1 15.3 0.4
2026-04-11T12:08:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:08:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:08:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.421994
2026-04-11T12:08:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:08:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:08:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:08:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:08:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:08:02.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:07:43', tmtdew=0.08851, humidity=99.3451, cloud=0.0, wind=18.8431, temperature=14.1963, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:07:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:08:02.386 [DEBUG] [Thread-169580] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:08:02.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:08:02.478 [DEBUG] [Thread-169583] [transport.py] [_log()] starting thread (client mode): 0xae5b0250
2026-04-11T12:08:02.478 [DEBUG] [Thread-169583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:08:02.492 [DEBUG] [Thread-169583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:08:02.493 [INFO] [Thread-169583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] client lang: <none>
2026-04-11T12:08:02.500 [DEBUG] [Thread-169583] [transport.py] [_log()] server lang: <none>
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] kex follows: False
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] Compression: none
2026-04-11T12:08:02.501 [DEBUG] [Thread-169583] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:08:02.563 [DEBUG] [Thread-169583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:08:02.563 [DEBUG] [Thread-169583] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:08:02.564 [DEBUG] [Thread-169583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:08:02.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:08:02.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:08:02.622 [DEBUG] [Thread-169583] [transport.py] [_log()] userauth is OK
2026-04-11T12:08:02.622 [DEBUG] [Thread-169583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:08:02.622 [DEBUG] [Thread-169583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:08:02.622 [DEBUG] [Thread-169583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:08:02.622 [DEBUG] [Thread-169583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:08:02.641 [INFO] [Thread-169583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:08:02.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:08:02.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:08:03.483 [DEBUG] [Thread-169583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:08:03.484 [DEBUG] [Thread-169583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:08:03.534 [DEBUG] [Thread-169583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:08:03.535 [DEBUG] [Thread-169583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:08:03.544 [DEBUG] [Thread-169583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:08:03.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:08:03.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-04-11T12:08:03.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-04-11T12:08:03.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:08:03.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:08:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:08:03.581 [DEBUG] [Thread-169583] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:08:03.983 [DEBUG] [Thread-169585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:08:15.098 [DEBUG] [Thread-169586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:08:30.153 [DEBUG] [Thread-169587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:08:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:08:33.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:08:33.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:08:34.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 8, 19), 0.094255, 99.6725, 0.0, 18.121, 13.6481, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:08:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:08:19
2026-04-11T12:08:35.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:08:35.417 [DEBUG] [Thread-169588] [transport.py] [_log()] starting thread (client mode): 0xa79b5690
2026-04-11T12:08:35.417 [DEBUG] [Thread-169588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:08:35.436 [DEBUG] [Thread-169588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:08:35.437 [INFO] [Thread-169588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] client lang: <none>
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] server lang: <none>
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] kex follows: False
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:08:35.440 [DEBUG] [Thread-169588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:08:35.441 [DEBUG] [Thread-169588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:08:35.441 [DEBUG] [Thread-169588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:08:35.441 [DEBUG] [Thread-169588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:08:35.441 [DEBUG] [Thread-169588] [transport.py] [_log()] Compression: none
2026-04-11T12:08:35.441 [DEBUG] [Thread-169588] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:08:35.457 [DEBUG] [Thread-169588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:08:35.458 [DEBUG] [Thread-169588] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:08:35.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:08:35.459 [DEBUG] [Thread-169588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:08:35.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:08:35.461 [DEBUG] [Thread-169588] [transport.py] [_log()] userauth is OK
2026-04-11T12:08:35.461 [DEBUG] [Thread-169588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:08:35.461 [DEBUG] [Thread-169588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:08:35.461 [DEBUG] [Thread-169588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:08:35.461 [DEBUG] [Thread-169588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:08:35.485 [INFO] [Thread-169588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:08:35.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:08:36.077 [DEBUG] [Thread-169588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:08:36.077 [DEBUG] [Thread-169588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:08:36.078 [DEBUG] [Thread-169588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:08:36.118 [DEBUG] [Thread-169588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:08:36.118 [DEBUG] [Thread-169588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:08:36.120 [DEBUG] [Thread-169588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:08:36.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:08:36.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:08:36.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:08:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:08:36.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:08:36.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:08:36.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.422341 -999.00  +13.40  17.29     97  +13.00 1 3 1 3 1   888    0 0.45 1.07 ----- 17.0 17.3 76.8 24.3 15.0 0.2 15.0 -0.3 15.1 -0.3 15.3 0.3
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.422341
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:08:36.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:08:19', tmtdew=0.094255, humidity=99.6725, cloud=0.0, wind=18.121, temperature=13.6481, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:08:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:08:36.138 [DEBUG] [Thread-169588] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:08:36.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:08:36.219 [DEBUG] [Thread-169591] [transport.py] [_log()] starting thread (client mode): 0xa79b7160
2026-04-11T12:08:36.219 [DEBUG] [Thread-169591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:08:36.234 [DEBUG] [Thread-169591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:08:36.234 [INFO] [Thread-169591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:08:36.241 [DEBUG] [Thread-169591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] client lang: <none>
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] server lang: <none>
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] kex follows: False
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] Compression: none
2026-04-11T12:08:36.242 [DEBUG] [Thread-169591] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:08:36.296 [DEBUG] [Thread-169591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:08:36.297 [DEBUG] [Thread-169591] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:08:36.297 [DEBUG] [Thread-169591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:08:36.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:08:36.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:08:36.353 [DEBUG] [Thread-169591] [transport.py] [_log()] userauth is OK
2026-04-11T12:08:36.353 [DEBUG] [Thread-169591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:08:36.353 [DEBUG] [Thread-169591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:08:36.353 [DEBUG] [Thread-169591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:08:36.353 [DEBUG] [Thread-169591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:08:36.371 [INFO] [Thread-169591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:08:36.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:08:36.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:08:37.198 [DEBUG] [Thread-169591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:08:37.198 [DEBUG] [Thread-169591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:08:37.246 [DEBUG] [Thread-169591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:08:37.247 [DEBUG] [Thread-169591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:08:37.256 [DEBUG] [Thread-169591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:08:37.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:08:37.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-04-11T12:08:37.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-04-11T12:08:37.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:08:37.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:08:37.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:08:37.293 [DEBUG] [Thread-169591] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:08:45.192 [DEBUG] [Thread-169593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:08:50.756 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:08:50.758 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:00.246 [DEBUG] [Thread-169594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:04.037 [DEBUG] [Thread-169595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:07.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:09:07.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:09:07.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-04-11T12:09:08.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 8, 54), 0.08852, 99.3451, 0.0, 24.4879, 14.13, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:09:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:08:54
2026-04-11T12:09:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:09:09.138 [DEBUG] [Thread-169596] [transport.py] [_log()] starting thread (client mode): 0xae52c340
2026-04-11T12:09:09.138 [DEBUG] [Thread-169596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:09:09.158 [DEBUG] [Thread-169596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:09:09.158 [INFO] [Thread-169596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:09:09.160 [DEBUG] [Thread-169596] [transport.py] [_log()] client lang: <none>
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] server lang: <none>
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] kex follows: False
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] Compression: none
2026-04-11T12:09:09.161 [DEBUG] [Thread-169596] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:09:09.176 [DEBUG] [Thread-169596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:09:09.177 [DEBUG] [Thread-169596] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:09:09.177 [DEBUG] [Thread-169596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:09:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:09:09.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:09:09.179 [DEBUG] [Thread-169596] [transport.py] [_log()] userauth is OK
2026-04-11T12:09:09.179 [DEBUG] [Thread-169596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:09:09.179 [DEBUG] [Thread-169596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:09:09.180 [DEBUG] [Thread-169596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:09:09.180 [DEBUG] [Thread-169596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:09:09.198 [INFO] [Thread-169596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:09:09.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:09:09.826 [DEBUG] [Thread-169596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:09:09.826 [DEBUG] [Thread-169596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:09:09.826 [DEBUG] [Thread-169596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:09:09.867 [DEBUG] [Thread-169596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:09:09.867 [DEBUG] [Thread-169596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:09:09.871 [DEBUG] [Thread-169596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:09:09.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:09:09.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:09:09.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:09:09.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:09:09.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:09:09.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:09:09.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:09:09.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:09:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:09:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.422689 -999.00  +13.40  23.08     97  +13.00 1 3 1 3 1   888    0 0.46 1.24 ----- 23.2 23.1 58.0 27.5 15.1 0.6 15.1 -0.3 15.1 -0.4 15.3 -0.1
2026-04-11T12:09:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:09:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:09:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.422689
2026-04-11T12:09:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:09:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:09:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:09:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:09:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:09:09.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:08:54', tmtdew=0.08852, humidity=99.3451, cloud=0.0, wind=24.4879, temperature=14.13, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:08:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:09:09.898 [DEBUG] [Thread-169596] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:09:09.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:09:09.991 [DEBUG] [Thread-169599] [transport.py] [_log()] starting thread (client mode): 0xae5e7b50
2026-04-11T12:09:09.991 [DEBUG] [Thread-169599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:09:10.006 [DEBUG] [Thread-169599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:09:10.006 [INFO] [Thread-169599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] client lang: <none>
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] server lang: <none>
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] kex follows: False
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:09:10.014 [DEBUG] [Thread-169599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:09:10.015 [DEBUG] [Thread-169599] [transport.py] [_log()] Compression: none
2026-04-11T12:09:10.015 [DEBUG] [Thread-169599] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:09:10.073 [DEBUG] [Thread-169599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:09:10.074 [DEBUG] [Thread-169599] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:09:10.074 [DEBUG] [Thread-169599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:09:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:09:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:09:10.131 [DEBUG] [Thread-169599] [transport.py] [_log()] userauth is OK
2026-04-11T12:09:10.131 [DEBUG] [Thread-169599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:09:10.131 [DEBUG] [Thread-169599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:09:10.131 [DEBUG] [Thread-169599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:09:10.132 [DEBUG] [Thread-169599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:09:10.151 [INFO] [Thread-169599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:09:10.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:09:10.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:09:10.932 [DEBUG] [Thread-169599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:09:10.932 [DEBUG] [Thread-169599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:09:10.980 [DEBUG] [Thread-169599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:09:10.980 [DEBUG] [Thread-169599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:09:10.989 [DEBUG] [Thread-169599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:09:10.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:09:10.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-04-11T12:09:11.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-04-11T12:09:11.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:09:11.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:09:11.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:09:11.028 [DEBUG] [Thread-169599] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:09:15.287 [DEBUG] [Thread-169601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:30.346 [DEBUG] [Thread-169602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:41.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:09:41.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:09:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:09:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 9, 30), 0.04683, 99.656, 0.0, 20.5729, 13.5816, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:09:42.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:09:30
2026-04-11T12:09:42.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:09:42.895 [DEBUG] [Thread-169603] [transport.py] [_log()] starting thread (client mode): 0xa79b7c10
2026-04-11T12:09:42.895 [DEBUG] [Thread-169603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:09:42.915 [DEBUG] [Thread-169603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:09:42.915 [INFO] [Thread-169603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] client lang: <none>
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] server lang: <none>
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] kex follows: False
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] Compression: none
2026-04-11T12:09:42.919 [DEBUG] [Thread-169603] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:09:42.928 [DEBUG] [Thread-169603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:09:42.928 [DEBUG] [Thread-169603] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:09:42.928 [DEBUG] [Thread-169603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:09:42.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:09:42.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:09:42.930 [DEBUG] [Thread-169603] [transport.py] [_log()] userauth is OK
2026-04-11T12:09:42.930 [DEBUG] [Thread-169603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:09:42.930 [DEBUG] [Thread-169603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:09:42.930 [DEBUG] [Thread-169603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:09:42.930 [DEBUG] [Thread-169603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:09:42.943 [INFO] [Thread-169603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:09:42.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:09:43.536 [DEBUG] [Thread-169603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:09:43.536 [DEBUG] [Thread-169603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:09:43.537 [DEBUG] [Thread-169603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:09:43.577 [DEBUG] [Thread-169603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:09:43.577 [DEBUG] [Thread-169603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:09:43.578 [DEBUG] [Thread-169603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:09:43.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:09:43.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:09:43.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:09:43.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:09:43.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:09:43.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:09:43.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.423036 -999.00  +13.40  24.49     97  +12.90 1 3 1 3 1   888    0 0.46 1.34 ----- 27.6 24.5 60.8 29.5 15.0 0.6 14.9 -0.5 15.0 -0.6 15.2 0.0
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.423036
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:09:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:09:30', tmtdew=0.04683, humidity=99.656, cloud=0.0, wind=20.5729, temperature=13.5816, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:09:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:09:43.595 [DEBUG] [Thread-169603] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:09:43.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:09:43.676 [DEBUG] [Thread-169606] [transport.py] [_log()] starting thread (client mode): 0xae5b0130
2026-04-11T12:09:43.676 [DEBUG] [Thread-169606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:09:43.691 [DEBUG] [Thread-169606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:09:43.691 [INFO] [Thread-169606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:09:43.698 [DEBUG] [Thread-169606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:09:43.699 [DEBUG] [Thread-169606] [transport.py] [_log()] client lang: <none>
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] server lang: <none>
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] kex follows: False
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:09:43.700 [DEBUG] [Thread-169606] [transport.py] [_log()] Compression: none
2026-04-11T12:09:43.701 [DEBUG] [Thread-169606] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:09:43.759 [DEBUG] [Thread-169606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:09:43.759 [DEBUG] [Thread-169606] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:09:43.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:09:43.761 [DEBUG] [Thread-169606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:09:43.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:09:43.818 [DEBUG] [Thread-169606] [transport.py] [_log()] userauth is OK
2026-04-11T12:09:43.818 [DEBUG] [Thread-169606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:09:43.819 [DEBUG] [Thread-169606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:09:43.819 [DEBUG] [Thread-169606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:09:43.819 [DEBUG] [Thread-169606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:09:43.843 [INFO] [Thread-169606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:09:43.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:09:43.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:09:44.670 [DEBUG] [Thread-169606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:09:44.670 [DEBUG] [Thread-169606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:09:44.722 [DEBUG] [Thread-169606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:09:44.722 [DEBUG] [Thread-169606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:09:44.731 [DEBUG] [Thread-169606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:09:44.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:09:44.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:09:44.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:09:44.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:09:44.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:09:44.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:09:44.768 [DEBUG] [Thread-169606] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:09:45.386 [DEBUG] [Thread-169608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:50.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:09:50.900 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:00.441 [DEBUG] [Thread-169609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:04.090 [DEBUG] [Thread-169610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:14.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:10:14.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:10:14.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-04-11T12:10:15.482 [DEBUG] [Thread-169611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 10, 5), 0.049405, 99.6394, 0.0, 19.2499, 13.5816, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:10:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:10:05
2026-04-11T12:10:16.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:10:16.581 [DEBUG] [Thread-169612] [transport.py] [_log()] starting thread (client mode): 0xae5e6c50
2026-04-11T12:10:16.581 [DEBUG] [Thread-169612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:10:16.600 [DEBUG] [Thread-169612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:10:16.600 [INFO] [Thread-169612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] client lang: <none>
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] server lang: <none>
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] kex follows: False
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:10:16.603 [DEBUG] [Thread-169612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:10:16.604 [DEBUG] [Thread-169612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:10:16.604 [DEBUG] [Thread-169612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:10:16.604 [DEBUG] [Thread-169612] [transport.py] [_log()] Compression: none
2026-04-11T12:10:16.604 [DEBUG] [Thread-169612] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:10:16.624 [DEBUG] [Thread-169612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:10:16.624 [DEBUG] [Thread-169612] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:10:16.625 [DEBUG] [Thread-169612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:10:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:10:16.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:10:16.627 [DEBUG] [Thread-169612] [transport.py] [_log()] userauth is OK
2026-04-11T12:10:16.627 [DEBUG] [Thread-169612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:10:16.627 [DEBUG] [Thread-169612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:10:16.627 [DEBUG] [Thread-169612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:10:16.627 [DEBUG] [Thread-169612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:10:16.642 [INFO] [Thread-169612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:10:16.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:10:19.188 [DEBUG] [Thread-169612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:10:19.188 [DEBUG] [Thread-169612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:10:19.188 [DEBUG] [Thread-169612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:10:19.229 [DEBUG] [Thread-169612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:10:19.229 [DEBUG] [Thread-169612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:10:19.232 [DEBUG] [Thread-169612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:10:19.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:10:19.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:10:19.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:10:19.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:10:19.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:10:19.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:10:19.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:10:19.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:10:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:10:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.423730 -999.00  +13.50  20.40     97  +13.10 1 3 1 3 1   888    0 0.45 1.16 ----- 21.9 20.4 61.4 25.9 15.1 1.0 15.1 0.0 15.0 0.0 15.3 0.7
2026-04-11T12:10:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:10:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:10:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.423730
2026-04-11T12:10:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:10:19.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:10:19.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:10:19.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:10:19.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:10:19.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:10:05', tmtdew=0.049405, humidity=99.6394, cloud=0.0, wind=19.2499, temperature=13.5816, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:10:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:10:19.263 [DEBUG] [Thread-169612] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:10:19.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:10:19.356 [DEBUG] [Thread-169615] [transport.py] [_log()] starting thread (client mode): 0xa795f850
2026-04-11T12:10:19.356 [DEBUG] [Thread-169615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:10:19.371 [DEBUG] [Thread-169615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:10:19.371 [INFO] [Thread-169615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:19.378 [DEBUG] [Thread-169615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] client lang: <none>
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] server lang: <none>
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] kex follows: False
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] Compression: none
2026-04-11T12:10:19.379 [DEBUG] [Thread-169615] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:10:19.438 [DEBUG] [Thread-169615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:10:19.439 [DEBUG] [Thread-169615] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:10:19.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:10:19.440 [DEBUG] [Thread-169615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:10:19.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:10:19.494 [DEBUG] [Thread-169615] [transport.py] [_log()] userauth is OK
2026-04-11T12:10:19.494 [DEBUG] [Thread-169615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:10:19.495 [DEBUG] [Thread-169615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:10:19.495 [DEBUG] [Thread-169615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:10:19.495 [DEBUG] [Thread-169615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:10:19.513 [INFO] [Thread-169615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:10:19.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:10:19.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:10:20.348 [DEBUG] [Thread-169615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:10:20.349 [DEBUG] [Thread-169615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:10:20.397 [DEBUG] [Thread-169615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:10:20.397 [DEBUG] [Thread-169615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:10:20.406 [DEBUG] [Thread-169615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:10:20.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:10:20.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:10:20.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-04-11T12:10:20.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:10:20.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:10:20.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:10:20.443 [DEBUG] [Thread-169615] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:10:30.519 [DEBUG] [Thread-169617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:45.571 [DEBUG] [Thread-169618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:10:50.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:10:50.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-04-11T12:10:51.041 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:51.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:10:51.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 10, 40), 0.08852, 99.3451, 0.0, 23.0414, 14.0968, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:10:51.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:10:40
2026-04-11T12:10:52.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:10:52.343 [DEBUG] [Thread-169619] [transport.py] [_log()] starting thread (client mode): 0xa79b59f0
2026-04-11T12:10:52.343 [DEBUG] [Thread-169619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:10:52.362 [DEBUG] [Thread-169619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:10:52.362 [INFO] [Thread-169619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] client lang: <none>
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] server lang: <none>
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] kex follows: False
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] Compression: none
2026-04-11T12:10:52.364 [DEBUG] [Thread-169619] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:10:52.374 [DEBUG] [Thread-169619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:10:52.374 [DEBUG] [Thread-169619] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:10:52.374 [DEBUG] [Thread-169619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:10:52.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:10:52.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:10:52.376 [DEBUG] [Thread-169619] [transport.py] [_log()] userauth is OK
2026-04-11T12:10:52.376 [DEBUG] [Thread-169619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:10:52.376 [DEBUG] [Thread-169619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:10:52.376 [DEBUG] [Thread-169619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:10:52.376 [DEBUG] [Thread-169619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:10:52.394 [INFO] [Thread-169619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:10:52.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:10:53.110 [DEBUG] [Thread-169619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:10:53.111 [DEBUG] [Thread-169619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:10:53.111 [DEBUG] [Thread-169619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:10:53.151 [DEBUG] [Thread-169619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:10:53.151 [DEBUG] [Thread-169619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:10:53.154 [DEBUG] [Thread-169619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:10:53.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:10:53.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:10:53.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:10:53.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:10:53.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:10:53.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:10:53.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:10:53.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:10:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:10:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.424077 -999.00  +13.50  23.81     97  +13.00 1 3 1 3 1   888    0 0.47 1.14 ----- 24.7 23.8 62.0 28.3 15.1 0.8 15.1 -0.2 15.1 -0.0 15.3 0.9
2026-04-11T12:10:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:10:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:10:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.424077
2026-04-11T12:10:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:10:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:10:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:10:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:10:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:10:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:10:40', tmtdew=0.08852, humidity=99.3451, cloud=0.0, wind=23.0414, temperature=14.0968, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:10:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:10:53.183 [DEBUG] [Thread-169619] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:10:53.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:10:53.269 [DEBUG] [Thread-169622] [transport.py] [_log()] starting thread (client mode): 0xa795cb80
2026-04-11T12:10:53.270 [DEBUG] [Thread-169622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:10:53.285 [DEBUG] [Thread-169622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:10:53.285 [INFO] [Thread-169622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:53.293 [DEBUG] [Thread-169622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] client lang: <none>
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] server lang: <none>
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] kex follows: False
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:10:53.294 [DEBUG] [Thread-169622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:10:53.295 [DEBUG] [Thread-169622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:10:53.295 [DEBUG] [Thread-169622] [transport.py] [_log()] Compression: none
2026-04-11T12:10:53.295 [DEBUG] [Thread-169622] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:10:53.351 [DEBUG] [Thread-169622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:10:53.351 [DEBUG] [Thread-169622] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:10:53.352 [DEBUG] [Thread-169622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:10:53.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:10:53.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:10:53.410 [DEBUG] [Thread-169622] [transport.py] [_log()] userauth is OK
2026-04-11T12:10:53.411 [DEBUG] [Thread-169622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:10:53.411 [DEBUG] [Thread-169622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:10:53.419 [DEBUG] [Thread-169622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:10:53.420 [DEBUG] [Thread-169622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:10:53.446 [INFO] [Thread-169622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:10:53.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:10:53.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:10:54.259 [DEBUG] [Thread-169622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:10:54.259 [DEBUG] [Thread-169622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:10:54.307 [DEBUG] [Thread-169622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:10:54.307 [DEBUG] [Thread-169622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:10:54.317 [DEBUG] [Thread-169622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:10:54.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:10:54.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:10:54.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-04-11T12:10:54.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:10:54.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:10:54.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:10:54.359 [DEBUG] [Thread-169622] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:11:00.611 [DEBUG] [Thread-169624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:04.148 [DEBUG] [Thread-169625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:15.663 [DEBUG] [Thread-169626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:11:24.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:11:24.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-04-11T12:11:25.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 11, 16), 0.096835, 99.656, 0.0, 22.4611, 13.6318, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:11:25.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:11:16
2026-04-11T12:11:26.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:11:26.204 [DEBUG] [Thread-169627] [transport.py] [_log()] starting thread (client mode): 0xae5e68c0
2026-04-11T12:11:26.204 [DEBUG] [Thread-169627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:11:26.225 [DEBUG] [Thread-169627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:11:26.225 [INFO] [Thread-169627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] client lang: <none>
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] server lang: <none>
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] kex follows: False
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:11:26.228 [DEBUG] [Thread-169627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:11:26.229 [DEBUG] [Thread-169627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:11:26.229 [DEBUG] [Thread-169627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:11:26.229 [DEBUG] [Thread-169627] [transport.py] [_log()] Compression: none
2026-04-11T12:11:26.229 [DEBUG] [Thread-169627] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:11:26.238 [DEBUG] [Thread-169627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:11:26.238 [DEBUG] [Thread-169627] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:11:26.239 [DEBUG] [Thread-169627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:11:26.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:11:26.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:11:26.241 [DEBUG] [Thread-169627] [transport.py] [_log()] userauth is OK
2026-04-11T12:11:26.241 [DEBUG] [Thread-169627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:11:26.241 [DEBUG] [Thread-169627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:11:26.241 [DEBUG] [Thread-169627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:11:26.241 [DEBUG] [Thread-169627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:11:26.265 [INFO] [Thread-169627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:11:26.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:11:26.992 [DEBUG] [Thread-169627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:11:26.992 [DEBUG] [Thread-169627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:11:26.993 [DEBUG] [Thread-169627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:11:27.033 [DEBUG] [Thread-169627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:11:27.034 [DEBUG] [Thread-169627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:11:27.037 [DEBUG] [Thread-169627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:11:27.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:11:27.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:11:27.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:11:27.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:11:27.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:11:27.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:11:27.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:11:27.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:11:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:11:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.424077 -999.00  +13.50  23.81     97  +13.00 1 3 1 3 1   888    0 0.47 1.14 ----- 24.7 23.8 62.0 28.3 15.1 0.8 15.1 -0.2 15.1 -0.0 15.3 0.9
2026-04-11T12:11:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:11:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:11:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.424077
2026-04-11T12:11:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:11:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:11:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:11:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:11:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:11:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:11:16', tmtdew=0.096835, humidity=99.656, cloud=0.0, wind=22.4611, temperature=13.6318, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:10:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:11:27.059 [DEBUG] [Thread-169627] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:11:27.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:11:27.153 [DEBUG] [Thread-169630] [transport.py] [_log()] starting thread (client mode): 0xae52c8b0
2026-04-11T12:11:27.153 [DEBUG] [Thread-169630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:11:27.168 [DEBUG] [Thread-169630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:11:27.168 [INFO] [Thread-169630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:11:27.176 [DEBUG] [Thread-169630] [transport.py] [_log()] client lang: <none>
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] server lang: <none>
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] kex follows: False
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] Compression: none
2026-04-11T12:11:27.177 [DEBUG] [Thread-169630] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:11:27.237 [DEBUG] [Thread-169630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:11:27.238 [DEBUG] [Thread-169630] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:11:27.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:11:27.239 [DEBUG] [Thread-169630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:11:27.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:11:27.293 [DEBUG] [Thread-169630] [transport.py] [_log()] userauth is OK
2026-04-11T12:11:27.293 [DEBUG] [Thread-169630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:11:27.294 [DEBUG] [Thread-169630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:11:27.294 [DEBUG] [Thread-169630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:11:27.294 [DEBUG] [Thread-169630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:11:27.312 [INFO] [Thread-169630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:11:27.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:11:27.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:11:28.172 [DEBUG] [Thread-169630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:11:28.172 [DEBUG] [Thread-169630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:11:28.219 [DEBUG] [Thread-169630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:11:28.219 [DEBUG] [Thread-169630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:11:28.228 [DEBUG] [Thread-169630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:11:28.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:11:28.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:11:28.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-04-11T12:11:28.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:11:28.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:11:28.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:11:28.261 [DEBUG] [Thread-169630] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:11:30.699 [DEBUG] [Thread-169632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:45.749 [DEBUG] [Thread-169633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:51.182 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:51.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:11:58.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:11:58.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:11:58.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:11:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 11, 51), 0.09881, 99.2788, 0.0, 20.8188, 14.0637, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:11:59.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:11:51
2026-04-11T12:11:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:12:00.097 [DEBUG] [Thread-169634] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T12:12:00.097 [DEBUG] [Thread-169634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:12:00.118 [DEBUG] [Thread-169634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:12:00.118 [INFO] [Thread-169634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:12:00.119 [DEBUG] [Thread-169634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] client lang: <none>
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] server lang: <none>
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] kex follows: False
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:12:00.120 [DEBUG] [Thread-169634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:12:00.121 [DEBUG] [Thread-169634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:12:00.121 [DEBUG] [Thread-169634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:12:00.121 [DEBUG] [Thread-169634] [transport.py] [_log()] Compression: none
2026-04-11T12:12:00.121 [DEBUG] [Thread-169634] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:12:00.131 [DEBUG] [Thread-169634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:12:00.132 [DEBUG] [Thread-169634] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:12:00.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:12:00.133 [DEBUG] [Thread-169634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:12:00.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:12:00.136 [DEBUG] [Thread-169634] [transport.py] [_log()] userauth is OK
2026-04-11T12:12:00.136 [DEBUG] [Thread-169634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:12:00.136 [DEBUG] [Thread-169634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:12:00.137 [DEBUG] [Thread-169634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:12:00.137 [DEBUG] [Thread-169634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:12:00.160 [INFO] [Thread-169634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:12:00.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:12:00.788 [DEBUG] [Thread-169636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:12:00.893 [DEBUG] [Thread-169634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:12:00.894 [DEBUG] [Thread-169634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:12:00.894 [DEBUG] [Thread-169634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:12:00.935 [DEBUG] [Thread-169634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:12:00.935 [DEBUG] [Thread-169634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:12:00.938 [DEBUG] [Thread-169634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:12:00.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:12:00.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:12:00.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:12:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:12:00.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:12:00.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:12:00.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:12:00.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:12:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:12:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.424425 -999.00  +13.30  28.63     97  +12.80 1 3 1 3 1   888    0 0.46 1.19 ----- 25.5 28.6 56.0 30.2 15.1 0.7 15.0 -0.2 15.1 -0.3 15.3 0.3
2026-04-11T12:12:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:12:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:12:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.424425
2026-04-11T12:12:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:12:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:12:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:12:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:12:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:12:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:11:51', tmtdew=0.09881, humidity=99.2788, cloud=0.0, wind=20.8188, temperature=14.0637, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:11:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:12:00.957 [DEBUG] [Thread-169634] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:12:01.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:12:01.047 [DEBUG] [Thread-169638] [transport.py] [_log()] starting thread (client mode): 0xb39c6020
2026-04-11T12:12:01.047 [DEBUG] [Thread-169638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:12:01.062 [DEBUG] [Thread-169638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:12:01.062 [INFO] [Thread-169638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] client lang: <none>
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] server lang: <none>
2026-04-11T12:12:01.069 [DEBUG] [Thread-169638] [transport.py] [_log()] kex follows: False
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] Compression: none
2026-04-11T12:12:01.070 [DEBUG] [Thread-169638] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:12:01.124 [DEBUG] [Thread-169638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:12:01.124 [DEBUG] [Thread-169638] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:12:01.125 [DEBUG] [Thread-169638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:12:01.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:12:01.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:12:01.181 [DEBUG] [Thread-169638] [transport.py] [_log()] userauth is OK
2026-04-11T12:12:01.182 [DEBUG] [Thread-169638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:12:01.182 [DEBUG] [Thread-169638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:12:01.182 [DEBUG] [Thread-169638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:12:01.182 [DEBUG] [Thread-169638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:12:01.201 [INFO] [Thread-169638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:12:01.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:12:01.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:12:02.086 [DEBUG] [Thread-169638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:12:02.086 [DEBUG] [Thread-169638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:12:02.134 [DEBUG] [Thread-169638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:12:02.134 [DEBUG] [Thread-169638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:12:02.143 [DEBUG] [Thread-169638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:12:02.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:12:02.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-04-11T12:12:02.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-04-11T12:12:02.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:12:02.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:12:02.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:12:02.180 [DEBUG] [Thread-169638] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:12:04.192 [DEBUG] [Thread-169640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:12:15.828 [DEBUG] [Thread-169641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:12:30.881 [DEBUG] [Thread-169642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:12:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:12:32.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:12:32.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-04-11T12:12:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 11, 51), 0.09881, 99.2788, 0.0, 20.8188, 14.0637, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:12:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:11:51
2026-04-11T12:12:33.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:12:34.031 [DEBUG] [Thread-169643] [transport.py] [_log()] starting thread (client mode): 0xa79b5360
2026-04-11T12:12:34.031 [DEBUG] [Thread-169643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:12:34.051 [DEBUG] [Thread-169643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:12:34.052 [INFO] [Thread-169643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:12:34.054 [DEBUG] [Thread-169643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] client lang: <none>
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] server lang: <none>
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] kex follows: False
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] Compression: none
2026-04-11T12:12:34.055 [DEBUG] [Thread-169643] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:12:34.072 [DEBUG] [Thread-169643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:12:34.072 [DEBUG] [Thread-169643] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:12:34.073 [DEBUG] [Thread-169643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:12:34.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:12:34.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:12:34.117 [DEBUG] [Thread-169643] [transport.py] [_log()] userauth is OK
2026-04-11T12:12:34.118 [DEBUG] [Thread-169643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:12:34.118 [DEBUG] [Thread-169643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:12:34.118 [DEBUG] [Thread-169643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:12:34.118 [DEBUG] [Thread-169643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:12:34.138 [INFO] [Thread-169643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:12:34.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:12:34.859 [DEBUG] [Thread-169643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:12:34.859 [DEBUG] [Thread-169643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:12:34.860 [DEBUG] [Thread-169643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:12:34.900 [DEBUG] [Thread-169643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:12:34.900 [DEBUG] [Thread-169643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:12:34.903 [DEBUG] [Thread-169643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:12:34.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:12:34.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:12:34.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:12:34.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:12:34.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:12:34.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:12:34.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:12:34.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:12:34.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:12:34.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.424772 -999.00  +13.30  26.23     97  +12.90 1 3 1 3 1   888    0 0.45 1.30 ----- 24.7 26.2 61.2 31.0 15.1 0.8 15.1 -0.1 15.1 -0.1 15.3 0.4
2026-04-11T12:12:34.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:12:34.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:12:34.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.424772
2026-04-11T12:12:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:12:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:12:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:12:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:12:34.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:12:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:11:51', tmtdew=0.09881, humidity=99.2788, cloud=0.0, wind=20.8188, temperature=14.0637, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:11:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:12:34.932 [DEBUG] [Thread-169643] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:12:35.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:12:35.026 [DEBUG] [Thread-169646] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T12:12:35.026 [DEBUG] [Thread-169646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:12:35.046 [DEBUG] [Thread-169646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:12:35.047 [INFO] [Thread-169646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:12:35.054 [DEBUG] [Thread-169646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:12:35.054 [DEBUG] [Thread-169646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:12:35.054 [DEBUG] [Thread-169646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] client lang: <none>
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] server lang: <none>
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] kex follows: False
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] Compression: none
2026-04-11T12:12:35.055 [DEBUG] [Thread-169646] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:12:35.114 [DEBUG] [Thread-169646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:12:35.114 [DEBUG] [Thread-169646] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:12:35.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:12:35.116 [DEBUG] [Thread-169646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:12:35.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:12:35.170 [DEBUG] [Thread-169646] [transport.py] [_log()] userauth is OK
2026-04-11T12:12:35.170 [DEBUG] [Thread-169646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:12:35.170 [DEBUG] [Thread-169646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:12:35.170 [DEBUG] [Thread-169646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:12:35.171 [DEBUG] [Thread-169646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:12:35.194 [INFO] [Thread-169646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:12:35.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:12:35.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:12:36.022 [DEBUG] [Thread-169646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:12:36.022 [DEBUG] [Thread-169646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:12:36.070 [DEBUG] [Thread-169646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:12:36.070 [DEBUG] [Thread-169646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:12:36.085 [DEBUG] [Thread-169646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:12:36.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:12: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-04-11T12:12:36.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-04-11T12:12:36.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:12:36.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:12:36.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:12:36.122 [DEBUG] [Thread-169646] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:12:45.917 [DEBUG] [Thread-169648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:12:51.324 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:12:51.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:00.976 [DEBUG] [Thread-169649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:04.243 [DEBUG] [Thread-169650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:06.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:13:06.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:13:06.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-04-11T12:13:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 12, 27), 0.10712, 99.5896, 0.0, 25.6378, 13.4658, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:13:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:12:27
2026-04-11T12:13:07.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:13:08.100 [DEBUG] [Thread-169651] [transport.py] [_log()] starting thread (client mode): 0xae52f0a0
2026-04-11T12:13:08.101 [DEBUG] [Thread-169651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:13:08.120 [DEBUG] [Thread-169651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:13:08.120 [INFO] [Thread-169651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] client lang: <none>
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] server lang: <none>
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] kex follows: False
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:13:08.123 [DEBUG] [Thread-169651] [transport.py] [_log()] Compression: none
2026-04-11T12:13:08.124 [DEBUG] [Thread-169651] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:13:08.137 [DEBUG] [Thread-169651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:13:08.137 [DEBUG] [Thread-169651] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:13:08.138 [DEBUG] [Thread-169651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:13:08.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:13:08.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:13:08.140 [DEBUG] [Thread-169651] [transport.py] [_log()] userauth is OK
2026-04-11T12:13:08.140 [DEBUG] [Thread-169651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:13:08.140 [DEBUG] [Thread-169651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:13:08.140 [DEBUG] [Thread-169651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:13:08.140 [DEBUG] [Thread-169651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:13:08.160 [INFO] [Thread-169651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:13:08.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:13:08.914 [DEBUG] [Thread-169651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:13:08.914 [DEBUG] [Thread-169651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:13:08.914 [DEBUG] [Thread-169651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:13:08.955 [DEBUG] [Thread-169651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:13:08.955 [DEBUG] [Thread-169651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:13:08.959 [DEBUG] [Thread-169651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:13:08.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:13:08.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:13:08.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:13:08.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:13:08.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:13:08.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:13:08.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:13:08.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:13:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:13:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.425466 -999.00  +13.40  23.04     97  +12.90 1 3 1 3 1   888    0 0.46 1.32 ----- 25.8 23.0 53.2 27.4 15.2 0.9 15.1 -0.1 15.1 0.0 15.4 0.7
2026-04-11T12:13:08.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:13:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:13:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.425466
2026-04-11T12:13:08.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:13:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:13:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:13:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:13:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:13:08.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:12:27', tmtdew=0.10712, humidity=99.5896, cloud=0.0, wind=25.6378, temperature=13.4658, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:12:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:13:08.989 [DEBUG] [Thread-169651] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:13:09.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:13:09.075 [DEBUG] [Thread-169654] [transport.py] [_log()] starting thread (client mode): 0xb39c5660
2026-04-11T12:13:09.075 [DEBUG] [Thread-169654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:13:09.089 [DEBUG] [Thread-169654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:13:09.089 [INFO] [Thread-169654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:13:09.097 [DEBUG] [Thread-169654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:13:09.097 [DEBUG] [Thread-169654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:13:09.097 [DEBUG] [Thread-169654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:13:09.097 [DEBUG] [Thread-169654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:09.097 [DEBUG] [Thread-169654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] client lang: <none>
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] server lang: <none>
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] kex follows: False
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] Compression: none
2026-04-11T12:13:09.098 [DEBUG] [Thread-169654] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:13:09.159 [DEBUG] [Thread-169654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:13:09.160 [DEBUG] [Thread-169654] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:13:09.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:13:09.161 [DEBUG] [Thread-169654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:13:09.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:13:09.218 [DEBUG] [Thread-169654] [transport.py] [_log()] userauth is OK
2026-04-11T12:13:09.219 [DEBUG] [Thread-169654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:13:09.228 [DEBUG] [Thread-169654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:13:09.228 [DEBUG] [Thread-169654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:13:09.228 [DEBUG] [Thread-169654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:13:09.247 [INFO] [Thread-169654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:13:09.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:13:09.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:13:10.096 [DEBUG] [Thread-169654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:13:10.096 [DEBUG] [Thread-169654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:13:10.144 [DEBUG] [Thread-169654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:13:10.144 [DEBUG] [Thread-169654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:13:10.154 [DEBUG] [Thread-169654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:13:10.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:13:10.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-04-11T12:13:10.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-04-11T12:13:10.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:13:10.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:13:10.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:13:10.190 [DEBUG] [Thread-169654] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:13:16.014 [DEBUG] [Thread-169656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:31.075 [DEBUG] [Thread-169657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:40.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:13:40.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:13:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:13:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 13, 2), 0.10198, 99.6228, 0.0, 24.2971, 13.5321, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:13:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:13:02
2026-04-11T12:13:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:13:42.178 [DEBUG] [Thread-169658] [transport.py] [_log()] starting thread (client mode): 0xb39c6860
2026-04-11T12:13:42.178 [DEBUG] [Thread-169658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:13:42.197 [DEBUG] [Thread-169658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:13:42.197 [INFO] [Thread-169658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:13:42.200 [DEBUG] [Thread-169658] [transport.py] [_log()] client lang: <none>
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] server lang: <none>
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] kex follows: False
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] Compression: none
2026-04-11T12:13:42.201 [DEBUG] [Thread-169658] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:13:42.218 [DEBUG] [Thread-169658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:13:42.219 [DEBUG] [Thread-169658] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:13:42.219 [DEBUG] [Thread-169658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:13:42.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:13:42.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:13:42.221 [DEBUG] [Thread-169658] [transport.py] [_log()] userauth is OK
2026-04-11T12:13:42.221 [DEBUG] [Thread-169658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:13:42.221 [DEBUG] [Thread-169658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:13:42.221 [DEBUG] [Thread-169658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:13:42.222 [DEBUG] [Thread-169658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:13:42.235 [INFO] [Thread-169658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:13:42.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:13:42.982 [DEBUG] [Thread-169658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:13:42.982 [DEBUG] [Thread-169658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:13:42.983 [DEBUG] [Thread-169658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:13:43.023 [DEBUG] [Thread-169658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:13:43.023 [DEBUG] [Thread-169658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:13:43.027 [DEBUG] [Thread-169658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:13:43.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:13:43.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:13:43.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:13:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:13:43.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:13:43.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:13:43.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.425814 -999.00  +13.20  23.23     97  +12.80 1 3 1 3 1   888    0 0.46 1.17 ----- 22.8 23.2 47.4 31.9 15.2 0.9 15.1 0.1 15.1 0.1 15.3 0.5
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.425814
2026-04-11T12:13:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:13:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:13:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:13:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:13:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:13:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:13:02', tmtdew=0.10198, humidity=99.6228, cloud=0.0, wind=24.2971, temperature=13.5321, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:13:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:13:43.049 [DEBUG] [Thread-169658] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:13:43.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:13:43.132 [DEBUG] [Thread-169661] [transport.py] [_log()] starting thread (client mode): 0xb39c6c20
2026-04-11T12:13:43.132 [DEBUG] [Thread-169661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:13:43.146 [DEBUG] [Thread-169661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:13:43.147 [INFO] [Thread-169661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:43.157 [DEBUG] [Thread-169661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] client lang: <none>
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] server lang: <none>
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] kex follows: False
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:13:43.158 [DEBUG] [Thread-169661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:13:43.159 [DEBUG] [Thread-169661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:13:43.159 [DEBUG] [Thread-169661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:13:43.159 [DEBUG] [Thread-169661] [transport.py] [_log()] Compression: none
2026-04-11T12:13:43.159 [DEBUG] [Thread-169661] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:13:43.215 [DEBUG] [Thread-169661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:13:43.216 [DEBUG] [Thread-169661] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:13:43.216 [DEBUG] [Thread-169661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:13:43.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:13:43.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:13:43.275 [DEBUG] [Thread-169661] [transport.py] [_log()] userauth is OK
2026-04-11T12:13:43.275 [DEBUG] [Thread-169661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:13:43.276 [DEBUG] [Thread-169661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:13:43.276 [DEBUG] [Thread-169661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:13:43.276 [DEBUG] [Thread-169661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:13:43.296 [INFO] [Thread-169661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:13:43.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:13:43.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:13:44.100 [DEBUG] [Thread-169661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:13:44.100 [DEBUG] [Thread-169661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:13:44.148 [DEBUG] [Thread-169661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:13:44.148 [DEBUG] [Thread-169661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:13:44.158 [DEBUG] [Thread-169661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:13:44.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:13:44.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-04-11T12:13:44.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:13:44.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:13:44.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:13:44.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:13:44.195 [DEBUG] [Thread-169661] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:13:46.108 [DEBUG] [Thread-169663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:51.466 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:13:51.467 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:01.161 [DEBUG] [Thread-169664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:04.295 [DEBUG] [Thread-169665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:14.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:14:14.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:14:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:14:15.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 13, 38), 0.10396, 99.2456, 0.0, 25.6874, 14.0968, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:14:15.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:13:38
2026-04-11T12:14:15.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:14:15.988 [DEBUG] [Thread-169666] [transport.py] [_log()] starting thread (client mode): 0xb39c5d20
2026-04-11T12:14:15.988 [DEBUG] [Thread-169666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:14:16.010 [DEBUG] [Thread-169666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:14:16.010 [INFO] [Thread-169666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:14:16.012 [DEBUG] [Thread-169666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:14:16.012 [DEBUG] [Thread-169666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:14:16.012 [DEBUG] [Thread-169666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:14:16.012 [DEBUG] [Thread-169666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:16.012 [DEBUG] [Thread-169666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] client lang: <none>
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] server lang: <none>
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] kex follows: False
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:14:16.013 [DEBUG] [Thread-169666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:14:16.014 [DEBUG] [Thread-169666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:14:16.014 [DEBUG] [Thread-169666] [transport.py] [_log()] Compression: none
2026-04-11T12:14:16.014 [DEBUG] [Thread-169666] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:14:16.035 [DEBUG] [Thread-169666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:14:16.036 [DEBUG] [Thread-169666] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:14:16.037 [DEBUG] [Thread-169666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:14:16.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:14:16.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:14:16.039 [DEBUG] [Thread-169666] [transport.py] [_log()] userauth is OK
2026-04-11T12:14:16.039 [DEBUG] [Thread-169666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:14:16.039 [DEBUG] [Thread-169666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:14:16.039 [DEBUG] [Thread-169666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:14:16.039 [DEBUG] [Thread-169666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:14:16.065 [INFO] [Thread-169666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:14:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:14:16.199 [DEBUG] [Thread-169668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:16.820 [DEBUG] [Thread-169666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:14:16.821 [DEBUG] [Thread-169666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:14:16.821 [DEBUG] [Thread-169666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:14:16.862 [DEBUG] [Thread-169666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:14:16.862 [DEBUG] [Thread-169666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:14:16.867 [DEBUG] [Thread-169666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:14:16.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:14:16.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:14:16.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:14:16.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:14:16.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:14:16.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:14:16.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:14:16.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.426508 -999.00  +13.50  23.68     97  +13.10 1 3 1 3 1   888    0 0.45 0.78 ----- 27.2 23.7 54.4 31.6 15.3 1.3 15.3 0.7 15.2 0.7 15.4 0.7
2026-04-11T12:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.426508
2026-04-11T12:14:16.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:14:16.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:14:16.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:14:16.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:14:16.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:14:16.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:13:38', tmtdew=0.10396, humidity=99.2456, cloud=0.0, wind=25.6874, temperature=14.0968, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:14:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:14:16.894 [DEBUG] [Thread-169666] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:14:16.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:14:16.987 [DEBUG] [Thread-169670] [transport.py] [_log()] starting thread (client mode): 0xa79b5ba0
2026-04-11T12:14:16.987 [DEBUG] [Thread-169670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:14:17.002 [DEBUG] [Thread-169670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:14:17.002 [INFO] [Thread-169670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:14:17.011 [DEBUG] [Thread-169670] [transport.py] [_log()] client lang: <none>
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] server lang: <none>
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] kex follows: False
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] Compression: none
2026-04-11T12:14:17.012 [DEBUG] [Thread-169670] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:14:17.069 [DEBUG] [Thread-169670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:14:17.070 [DEBUG] [Thread-169670] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:14:17.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:14:17.071 [DEBUG] [Thread-169670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:14:17.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:14:17.126 [DEBUG] [Thread-169670] [transport.py] [_log()] userauth is OK
2026-04-11T12:14:17.127 [DEBUG] [Thread-169670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:14:17.127 [DEBUG] [Thread-169670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:14:17.127 [DEBUG] [Thread-169670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:14:17.127 [DEBUG] [Thread-169670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:14:17.145 [INFO] [Thread-169670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:14:17.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:14:17.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:14:17.968 [DEBUG] [Thread-169670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:14:17.968 [DEBUG] [Thread-169670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:14:18.020 [DEBUG] [Thread-169670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:14:18.020 [DEBUG] [Thread-169670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:14:18.032 [DEBUG] [Thread-169670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:14:18.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:14:18.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:14:18.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-04-11T12:14:18.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:14:18.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:14:18.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:14:18.075 [DEBUG] [Thread-169670] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:14:31.239 [DEBUG] [Thread-169672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:46.304 [DEBUG] [Thread-169673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:48.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:14:48.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:14:48.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:14:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 14, 13), 0.05198, 99.6228, 0.0, 24.8616, 13.4984, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:14:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:14:13
2026-04-11T12:14:49.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:14:49.880 [DEBUG] [Thread-169674] [transport.py] [_log()] starting thread (client mode): 0xa79b7880
2026-04-11T12:14:49.880 [DEBUG] [Thread-169674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:14:49.899 [DEBUG] [Thread-169674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:14:49.900 [INFO] [Thread-169674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] client lang: <none>
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] server lang: <none>
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] kex follows: False
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] Compression: none
2026-04-11T12:14:49.902 [DEBUG] [Thread-169674] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:14:49.923 [DEBUG] [Thread-169674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:14:49.923 [DEBUG] [Thread-169674] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:14:49.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:14:49.925 [DEBUG] [Thread-169674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:14:49.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:14:49.927 [DEBUG] [Thread-169674] [transport.py] [_log()] userauth is OK
2026-04-11T12:14:49.927 [DEBUG] [Thread-169674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:14:49.927 [DEBUG] [Thread-169674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:14:49.927 [DEBUG] [Thread-169674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:14:49.927 [DEBUG] [Thread-169674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:14:49.958 [INFO] [Thread-169674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:14:49.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:14:50.701 [DEBUG] [Thread-169674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:14:50.701 [DEBUG] [Thread-169674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:14:50.702 [DEBUG] [Thread-169674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:14:50.742 [DEBUG] [Thread-169674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:14:50.743 [DEBUG] [Thread-169674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:14:50.747 [DEBUG] [Thread-169674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:14:50.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:14:50.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:14:50.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:14:50.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:14:50.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:14:50.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:14:50.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:14:50.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:14:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:14:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.426855 -999.00  +13.40  25.50     97  +13.00 1 3 1 3 1   888    0 0.45 0.62 ----- 27.6 25.5 54.2 29.1 15.4 1.0 15.2 0.3 15.2 0.2 15.5 0.5
2026-04-11T12:14:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:14:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:14:50.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.426855
2026-04-11T12:14:50.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:14:50.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:14:50.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:14:50.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:14:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:14:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:14:13', tmtdew=0.05198, humidity=99.6228, cloud=0.0, wind=24.8616, temperature=13.4984, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:14:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:14:50.781 [DEBUG] [Thread-169674] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:14:50.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:14:50.874 [DEBUG] [Thread-169677] [transport.py] [_log()] starting thread (client mode): 0xb39c7e80
2026-04-11T12:14:50.874 [DEBUG] [Thread-169677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:14:50.889 [DEBUG] [Thread-169677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:14:50.889 [INFO] [Thread-169677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:14:50.897 [DEBUG] [Thread-169677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:14:50.897 [DEBUG] [Thread-169677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] client lang: <none>
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] server lang: <none>
2026-04-11T12:14:50.898 [DEBUG] [Thread-169677] [transport.py] [_log()] kex follows: False
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] Compression: none
2026-04-11T12:14:50.899 [DEBUG] [Thread-169677] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:14:50.962 [DEBUG] [Thread-169677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:14:50.963 [DEBUG] [Thread-169677] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:14:50.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:14:50.964 [DEBUG] [Thread-169677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:14:50.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:14:51.018 [DEBUG] [Thread-169677] [transport.py] [_log()] userauth is OK
2026-04-11T12:14:51.018 [DEBUG] [Thread-169677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:14:51.019 [DEBUG] [Thread-169677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:14:51.019 [DEBUG] [Thread-169677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:14:51.019 [DEBUG] [Thread-169677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:14:51.037 [INFO] [Thread-169677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:14:51.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:14:51.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:14:51.606 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:51.608 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:14:51.898 [DEBUG] [Thread-169677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:14:51.898 [DEBUG] [Thread-169677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:14:51.946 [DEBUG] [Thread-169677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:14:51.946 [DEBUG] [Thread-169677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:14:51.956 [DEBUG] [Thread-169677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:14:51.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:14:51.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:14:51.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:14:51.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:14:51.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:14:51.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:14:51.992 [DEBUG] [Thread-169677] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:15:01.339 [DEBUG] [Thread-169679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:04.344 [DEBUG] [Thread-169680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:16.378 [DEBUG] [Thread-169681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:22.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:15:22.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:15:22.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:15:23.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 14, 49), 0.0885, 99.3451, 0.0, 22.9003, 14.2626, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:15:23.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:14:49
2026-04-11T12:15:23.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:15:23.880 [DEBUG] [Thread-169682] [transport.py] [_log()] starting thread (client mode): 0xae52fa00
2026-04-11T12:15:23.880 [DEBUG] [Thread-169682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:15:23.901 [DEBUG] [Thread-169682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:15:23.901 [INFO] [Thread-169682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] client lang: <none>
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] server lang: <none>
2026-04-11T12:15:23.903 [DEBUG] [Thread-169682] [transport.py] [_log()] kex follows: False
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] Compression: none
2026-04-11T12:15:23.904 [DEBUG] [Thread-169682] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:15:23.914 [DEBUG] [Thread-169682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:15:23.914 [DEBUG] [Thread-169682] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:15:23.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:15:23.915 [DEBUG] [Thread-169682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:15:23.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:15:23.917 [DEBUG] [Thread-169682] [transport.py] [_log()] userauth is OK
2026-04-11T12:15:23.917 [DEBUG] [Thread-169682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:15:23.917 [DEBUG] [Thread-169682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:15:23.917 [DEBUG] [Thread-169682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:15:23.917 [DEBUG] [Thread-169682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:15:23.942 [INFO] [Thread-169682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:15:23.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:15:25.025 [DEBUG] [Thread-169682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:15:25.025 [DEBUG] [Thread-169682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:15:25.025 [DEBUG] [Thread-169682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:15:25.066 [DEBUG] [Thread-169682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:15:25.067 [DEBUG] [Thread-169682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:15:25.070 [DEBUG] [Thread-169682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:15:25.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:15:25.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:15:25.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:15:25.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:15:25.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:15:25.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:15:25.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:15:25.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:15:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:15:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.427203 -999.00  +13.20  23.74     97  +12.80 1 3 1 3 1   888    0 0.45 0.80 ----- 23.8 23.7 47.6 31.4 15.3 0.8 15.2 0.0 15.2 0.3 15.4 1.1
2026-04-11T12:15:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:15:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:15:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.427203
2026-04-11T12:15:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:15:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:15:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:15:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:15:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:15:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:14:49', tmtdew=0.0885, humidity=99.3451, cloud=0.0, wind=22.9003, temperature=14.2626, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:15:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:15:25.100 [DEBUG] [Thread-169682] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:15:25.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:15:25.194 [DEBUG] [Thread-169685] [transport.py] [_log()] starting thread (client mode): 0xae52fd90
2026-04-11T12:15:25.194 [DEBUG] [Thread-169685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:15:25.210 [DEBUG] [Thread-169685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:15:25.210 [INFO] [Thread-169685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:15:25.217 [DEBUG] [Thread-169685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] client lang: <none>
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] server lang: <none>
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] kex follows: False
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] Compression: none
2026-04-11T12:15:25.218 [DEBUG] [Thread-169685] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:15:25.278 [DEBUG] [Thread-169685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:15:25.279 [DEBUG] [Thread-169685] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:15:25.280 [DEBUG] [Thread-169685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:15:25.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:15:25.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:15:25.338 [DEBUG] [Thread-169685] [transport.py] [_log()] userauth is OK
2026-04-11T12:15:25.338 [DEBUG] [Thread-169685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:15:25.339 [DEBUG] [Thread-169685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:15:25.339 [DEBUG] [Thread-169685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:15:25.339 [DEBUG] [Thread-169685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:15:25.357 [INFO] [Thread-169685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:15:25.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:15:25.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:15:26.184 [DEBUG] [Thread-169685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:15:26.184 [DEBUG] [Thread-169685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:15:26.232 [DEBUG] [Thread-169685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:15:26.232 [DEBUG] [Thread-169685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:15:26.241 [DEBUG] [Thread-169685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:15:26.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:15:26.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-04-11T12:15:26.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-04-11T12:15:26.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:15:26.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:15:26.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:15:26.278 [DEBUG] [Thread-169685] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:15:31.415 [DEBUG] [Thread-169687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:46.466 [DEBUG] [Thread-169688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:51.761 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:51.763 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:15:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:15:56.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:15:56.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-04-11T12:15:57.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 15, 24), 0.09168, 99.6891, 0.0, 21.3682, 13.8145, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:15:57.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:15:24
2026-04-11T12:15:57.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:15:58.139 [DEBUG] [Thread-169689] [transport.py] [_log()] starting thread (client mode): 0xb39c7340
2026-04-11T12:15:58.140 [DEBUG] [Thread-169689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:15:58.159 [DEBUG] [Thread-169689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:15:58.160 [INFO] [Thread-169689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:15:58.163 [DEBUG] [Thread-169689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] client lang: <none>
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] server lang: <none>
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] kex follows: False
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:15:58.169 [DEBUG] [Thread-169689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:15:58.170 [DEBUG] [Thread-169689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:15:58.170 [DEBUG] [Thread-169689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:15:58.170 [DEBUG] [Thread-169689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:15:58.170 [DEBUG] [Thread-169689] [transport.py] [_log()] Compression: none
2026-04-11T12:15:58.170 [DEBUG] [Thread-169689] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:15:58.187 [DEBUG] [Thread-169689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:15:58.188 [DEBUG] [Thread-169689] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:15:58.189 [DEBUG] [Thread-169689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:15:58.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:15:58.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:15:58.191 [DEBUG] [Thread-169689] [transport.py] [_log()] userauth is OK
2026-04-11T12:15:58.191 [DEBUG] [Thread-169689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:15:58.191 [DEBUG] [Thread-169689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:15:58.191 [DEBUG] [Thread-169689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:15:58.191 [DEBUG] [Thread-169689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:15:58.215 [INFO] [Thread-169689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:15:58.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:15:58.949 [DEBUG] [Thread-169689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:15:58.949 [DEBUG] [Thread-169689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:15:58.950 [DEBUG] [Thread-169689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:15:58.990 [DEBUG] [Thread-169689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:15:58.990 [DEBUG] [Thread-169689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:15:58.993 [DEBUG] [Thread-169689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:15:58.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:15:58.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:15:59.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:15:59.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:15:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:15:59.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:15:59.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:15:59.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:15:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:15:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.427203 -999.00  +13.20  23.74     97  +12.80 1 3 1 3 1   888    0 0.45 0.80 ----- 23.8 23.7 47.6 31.4 15.3 0.8 15.2 0.0 15.2 0.3 15.4 1.1
2026-04-11T12:15:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:15:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:15:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.427203
2026-04-11T12:15:59.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:15:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:15:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:15:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:15:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:15:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:15:24', tmtdew=0.09168, humidity=99.6891, cloud=0.0, wind=21.3682, temperature=13.8145, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:15:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:15:59.012 [DEBUG] [Thread-169689] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:15:59.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:15:59.105 [DEBUG] [Thread-169692] [transport.py] [_log()] starting thread (client mode): 0xa79b59f0
2026-04-11T12:15:59.105 [DEBUG] [Thread-169692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:15:59.120 [DEBUG] [Thread-169692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:15:59.120 [INFO] [Thread-169692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:15:59.127 [DEBUG] [Thread-169692] [transport.py] [_log()] client lang: <none>
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] server lang: <none>
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] kex follows: False
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] Compression: none
2026-04-11T12:15:59.128 [DEBUG] [Thread-169692] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:15:59.184 [DEBUG] [Thread-169692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:15:59.184 [DEBUG] [Thread-169692] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:15:59.184 [DEBUG] [Thread-169692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:15:59.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:15:59.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:15:59.241 [DEBUG] [Thread-169692] [transport.py] [_log()] userauth is OK
2026-04-11T12:15:59.241 [DEBUG] [Thread-169692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:15:59.241 [DEBUG] [Thread-169692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:15:59.241 [DEBUG] [Thread-169692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:15:59.241 [DEBUG] [Thread-169692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:15:59.255 [INFO] [Thread-169692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:15:59.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:15:59.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:16:00.058 [DEBUG] [Thread-169692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:16:00.058 [DEBUG] [Thread-169692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:16:00.108 [DEBUG] [Thread-169692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:16:00.109 [DEBUG] [Thread-169692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:16:00.120 [DEBUG] [Thread-169692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:16:00.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:16: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')
2026-04-11T12:16:00.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-04-11T12:16:00.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:16:00.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:16:00.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:16:00.164 [DEBUG] [Thread-169692] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:16:01.502 [DEBUG] [Thread-169694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:16:04.398 [DEBUG] [Thread-169695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:16:16.563 [DEBUG] [Thread-169696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:16:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:16:30.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:16:30.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:16:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 15, 59), 0.04173, 99.6887, 0.0, 23.873, 13.7139, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:16:31.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:15:59
2026-04-11T12:16:31.600 [DEBUG] [Thread-169697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:16:31.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:16:31.978 [DEBUG] [Thread-169698] [transport.py] [_log()] starting thread (client mode): 0xb39c6650
2026-04-11T12:16:31.978 [DEBUG] [Thread-169698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:16:31.997 [DEBUG] [Thread-169698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:16:31.997 [INFO] [Thread-169698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] client lang: <none>
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] server lang: <none>
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] kex follows: False
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:16:32.001 [DEBUG] [Thread-169698] [transport.py] [_log()] Compression: none
2026-04-11T12:16:32.002 [DEBUG] [Thread-169698] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:16:32.019 [DEBUG] [Thread-169698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:16:32.020 [DEBUG] [Thread-169698] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:16:32.020 [DEBUG] [Thread-169698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:16:32.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:16:32.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:16:32.022 [DEBUG] [Thread-169698] [transport.py] [_log()] userauth is OK
2026-04-11T12:16:32.022 [DEBUG] [Thread-169698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:16:32.022 [DEBUG] [Thread-169698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:16:32.023 [DEBUG] [Thread-169698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:16:32.023 [DEBUG] [Thread-169698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:16:32.046 [INFO] [Thread-169698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:16:32.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:16:32.813 [DEBUG] [Thread-169698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:16:32.813 [DEBUG] [Thread-169698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:16:32.813 [DEBUG] [Thread-169698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:16:32.855 [DEBUG] [Thread-169698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:16:32.855 [DEBUG] [Thread-169698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:16:32.857 [DEBUG] [Thread-169698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:16:32.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:16:32.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:16:32.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:16:32.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:16:32.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:16:32.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:16:32.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.427550 -999.00  +13.30  25.86     97  +12.90 1 3 1 3 1   888    0 0.44 0.74 ----- 22.1 25.9 54.4 30.7 15.4 1.0 15.3 -0.2 15.2 0.4 15.5 1.2
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.427550
2026-04-11T12:16:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:16:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:16:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:16:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:16:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:16:32.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:15:59', tmtdew=0.04173, humidity=99.6887, cloud=0.0, wind=23.873, temperature=13.7139, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:15:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:16:32.875 [DEBUG] [Thread-169698] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:16:32.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:16:32.967 [DEBUG] [Thread-169701] [transport.py] [_log()] starting thread (client mode): 0xb39c6380
2026-04-11T12:16:32.967 [DEBUG] [Thread-169701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:16:32.981 [DEBUG] [Thread-169701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:16:32.981 [INFO] [Thread-169701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:16:32.988 [DEBUG] [Thread-169701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:16:32.988 [DEBUG] [Thread-169701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:16:32.988 [DEBUG] [Thread-169701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:16:32.988 [DEBUG] [Thread-169701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:16:32.988 [DEBUG] [Thread-169701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:16:32.988 [DEBUG] [Thread-169701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] client lang: <none>
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] server lang: <none>
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] kex follows: False
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] Compression: none
2026-04-11T12:16:32.989 [DEBUG] [Thread-169701] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:16:33.045 [DEBUG] [Thread-169701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:16:33.046 [DEBUG] [Thread-169701] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:16:33.046 [DEBUG] [Thread-169701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:16:33.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:16:33.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:16:33.101 [DEBUG] [Thread-169701] [transport.py] [_log()] userauth is OK
2026-04-11T12:16:33.101 [DEBUG] [Thread-169701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:16:33.102 [DEBUG] [Thread-169701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:16:33.102 [DEBUG] [Thread-169701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:16:33.102 [DEBUG] [Thread-169701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:16:33.121 [INFO] [Thread-169701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:16:33.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:16:33.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:16:33.925 [DEBUG] [Thread-169701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:16:33.926 [DEBUG] [Thread-169701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:16:33.973 [DEBUG] [Thread-169701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:16:33.974 [DEBUG] [Thread-169701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:16:33.983 [DEBUG] [Thread-169701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:16:33.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:16:33.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:16:34.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-04-11T12:16:34.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:16:34.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:16:34.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:16:34.021 [DEBUG] [Thread-169701] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:16:46.638 [DEBUG] [Thread-169703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:16:51.905 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:16:51.906 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:01.691 [DEBUG] [Thread-169704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:04.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:17:04.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:17:04.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-04-11T12:17:04.463 [DEBUG] [Thread-169705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 16, 35), 0.08863, 99.3443, 0.0, 27.9806, 14.3616, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:17:05.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:16:35
2026-04-11T12:17:05.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:17:05.821 [DEBUG] [Thread-169706] [transport.py] [_log()] starting thread (client mode): 0xa795fb20
2026-04-11T12:17:05.821 [DEBUG] [Thread-169706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:17:05.841 [DEBUG] [Thread-169706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:17:05.841 [INFO] [Thread-169706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] client lang: <none>
2026-04-11T12:17:05.844 [DEBUG] [Thread-169706] [transport.py] [_log()] server lang: <none>
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] kex follows: False
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] Compression: none
2026-04-11T12:17:05.845 [DEBUG] [Thread-169706] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:17:05.853 [DEBUG] [Thread-169706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:17:05.854 [DEBUG] [Thread-169706] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:17:05.854 [DEBUG] [Thread-169706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:17:05.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:17:05.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:17:05.857 [DEBUG] [Thread-169706] [transport.py] [_log()] userauth is OK
2026-04-11T12:17:05.857 [DEBUG] [Thread-169706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:17:05.857 [DEBUG] [Thread-169706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:17:05.857 [DEBUG] [Thread-169706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:17:05.857 [DEBUG] [Thread-169706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:17:05.882 [INFO] [Thread-169706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:17:05.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:17:06.650 [DEBUG] [Thread-169706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:17:06.650 [DEBUG] [Thread-169706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:17:06.651 [DEBUG] [Thread-169706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:17:06.691 [DEBUG] [Thread-169706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:17:06.692 [DEBUG] [Thread-169706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:17:06.695 [DEBUG] [Thread-169706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:17:06.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:17:06.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:17:06.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:17:06.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:17:06.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:17:06.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:17:06.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:17:06.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:17:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:17:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.428244 -999.00  +13.80  24.37     97  +13.40 1 3 1 3 1   888    0 0.43 0.42 ----- 23.7 24.4 55.8 29.1 15.6 1.5 15.5 0.5 15.4 0.8 15.7 1.5
2026-04-11T12:17:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:17:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:17:06.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.428244
2026-04-11T12:17:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:17:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:17:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:17:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:17:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:17:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:16:35', tmtdew=0.08863, humidity=99.3443, cloud=0.0, wind=27.9806, temperature=14.3616, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:16:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:17:06.726 [DEBUG] [Thread-169706] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:17:06.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:17:06.818 [DEBUG] [Thread-169709] [transport.py] [_log()] starting thread (client mode): 0xa795ed40
2026-04-11T12:17:06.819 [DEBUG] [Thread-169709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:17:06.833 [DEBUG] [Thread-169709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:17:06.834 [INFO] [Thread-169709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:17:06.841 [DEBUG] [Thread-169709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:17:06.841 [DEBUG] [Thread-169709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:17:06.841 [DEBUG] [Thread-169709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] client lang: <none>
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] server lang: <none>
2026-04-11T12:17:06.842 [DEBUG] [Thread-169709] [transport.py] [_log()] kex follows: False
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] Compression: none
2026-04-11T12:17:06.843 [DEBUG] [Thread-169709] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:17:06.903 [DEBUG] [Thread-169709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:17:06.903 [DEBUG] [Thread-169709] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:17:06.904 [DEBUG] [Thread-169709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:17:06.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:17:06.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:17:06.962 [DEBUG] [Thread-169709] [transport.py] [_log()] userauth is OK
2026-04-11T12:17:06.962 [DEBUG] [Thread-169709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:17:06.962 [DEBUG] [Thread-169709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:17:06.963 [DEBUG] [Thread-169709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:17:06.963 [DEBUG] [Thread-169709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:17:06.981 [INFO] [Thread-169709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:17:06.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:17:06.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:17:07.814 [DEBUG] [Thread-169709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:17:07.814 [DEBUG] [Thread-169709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:17:07.862 [DEBUG] [Thread-169709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:17:07.862 [DEBUG] [Thread-169709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:17:07.871 [DEBUG] [Thread-169709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:17:07.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:17:07.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-04-11T12:17:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:17:07.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:17:07.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:17:07.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:17:07.904 [DEBUG] [Thread-169709] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:17:16.732 [DEBUG] [Thread-169711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:31.784 [DEBUG] [Thread-169712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:17:37.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:17: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-04-11T12:17:39.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 17, 10), 0.0943, 99.6722, 0.0, 22.2318, 13.8974, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:17:39.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:17:10
2026-04-11T12:17:39.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:17:39.688 [DEBUG] [Thread-169713] [transport.py] [_log()] starting thread (client mode): 0xae52c2e0
2026-04-11T12:17:39.688 [DEBUG] [Thread-169713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:17:39.709 [DEBUG] [Thread-169713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:17:39.710 [INFO] [Thread-169713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:17:39.713 [DEBUG] [Thread-169713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:17:39.714 [DEBUG] [Thread-169713] [transport.py] [_log()] client lang: <none>
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] server lang: <none>
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] kex follows: False
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] Compression: none
2026-04-11T12:17:39.715 [DEBUG] [Thread-169713] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:17:39.735 [DEBUG] [Thread-169713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:17:39.735 [DEBUG] [Thread-169713] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:17:39.736 [DEBUG] [Thread-169713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:17:39.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:17:39.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:17:39.738 [DEBUG] [Thread-169713] [transport.py] [_log()] userauth is OK
2026-04-11T12:17:39.738 [DEBUG] [Thread-169713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:17:39.738 [DEBUG] [Thread-169713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:17:39.738 [DEBUG] [Thread-169713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:17:39.738 [DEBUG] [Thread-169713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:17:39.763 [INFO] [Thread-169713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:17:39.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:17:40.481 [DEBUG] [Thread-169713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:17:40.482 [DEBUG] [Thread-169713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:17:40.482 [DEBUG] [Thread-169713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:17:40.523 [DEBUG] [Thread-169713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:17:40.523 [DEBUG] [Thread-169713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:17:40.526 [DEBUG] [Thread-169713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:17:40.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:17:40.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:17:40.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:17:40.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:17:40.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:17:40.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:17:40.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:17:40.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:17:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:17:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.428591 -999.00  +13.70  25.25     97  +13.30 1 3 1 3 1   888    0 0.44 0.47 ----- 23.7 25.2 58.0 30.8 15.6 1.0 15.6 0.2 15.4 0.4 15.8 0.9
2026-04-11T12:17:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:17:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:17:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.428591
2026-04-11T12:17:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:17:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:17:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:17:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:17:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:17:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:17:10', tmtdew=0.0943, humidity=99.6722, cloud=0.0, wind=22.2318, temperature=13.8974, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:17:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:17:40.555 [DEBUG] [Thread-169713] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:17:40.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:17:40.647 [DEBUG] [Thread-169716] [transport.py] [_log()] starting thread (client mode): 0xb39c6830
2026-04-11T12:17:40.647 [DEBUG] [Thread-169716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:17:40.663 [DEBUG] [Thread-169716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:17:40.663 [INFO] [Thread-169716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:17:40.670 [DEBUG] [Thread-169716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] client lang: <none>
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] server lang: <none>
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] kex follows: False
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] Compression: none
2026-04-11T12:17:40.671 [DEBUG] [Thread-169716] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:17:40.730 [DEBUG] [Thread-169716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:17:40.730 [DEBUG] [Thread-169716] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:17:40.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:17:40.732 [DEBUG] [Thread-169716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:17:40.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:17:40.786 [DEBUG] [Thread-169716] [transport.py] [_log()] userauth is OK
2026-04-11T12:17:40.786 [DEBUG] [Thread-169716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:17:40.786 [DEBUG] [Thread-169716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:17:40.787 [DEBUG] [Thread-169716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:17:40.787 [DEBUG] [Thread-169716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:17:40.806 [INFO] [Thread-169716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:17:40.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:17:40.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:17:41.648 [DEBUG] [Thread-169716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:17:41.648 [DEBUG] [Thread-169716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:17:41.696 [DEBUG] [Thread-169716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:17:41.696 [DEBUG] [Thread-169716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:17:41.705 [DEBUG] [Thread-169716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:17:41.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:17:41.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-04-11T12:17:41.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-04-11T12:17:41.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:17:41.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:17:41.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:17:41.743 [DEBUG] [Thread-169716] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:17:46.821 [DEBUG] [Thread-169718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:52.046 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:17:52.047 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:01.879 [DEBUG] [Thread-169719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:04.520 [DEBUG] [Thread-169720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:11.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:18:11.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:18:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:18:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 17, 46), 0.08344, 99.3776, 0.0, 25.0171, 14.4943, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:18:13.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:17:46
2026-04-11T12:18:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:18:13.562 [DEBUG] [Thread-169721] [transport.py] [_log()] starting thread (client mode): 0xb39c7400
2026-04-11T12:18:13.562 [DEBUG] [Thread-169721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:18:13.582 [DEBUG] [Thread-169721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:18:13.582 [INFO] [Thread-169721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:18:13.585 [DEBUG] [Thread-169721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] client lang: <none>
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] server lang: <none>
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] kex follows: False
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] Compression: none
2026-04-11T12:18:13.586 [DEBUG] [Thread-169721] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:18:13.604 [DEBUG] [Thread-169721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:18:13.604 [DEBUG] [Thread-169721] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:18:13.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:18:13.605 [DEBUG] [Thread-169721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:18:13.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:18:13.607 [DEBUG] [Thread-169721] [transport.py] [_log()] userauth is OK
2026-04-11T12:18:13.607 [DEBUG] [Thread-169721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:18:13.607 [DEBUG] [Thread-169721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:18:13.607 [DEBUG] [Thread-169721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:18:13.608 [DEBUG] [Thread-169721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:18:13.632 [INFO] [Thread-169721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:18:13.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:18:14.369 [DEBUG] [Thread-169721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:18:14.369 [DEBUG] [Thread-169721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:18:14.370 [DEBUG] [Thread-169721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:18:14.410 [DEBUG] [Thread-169721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:18:14.410 [DEBUG] [Thread-169721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:18:14.414 [DEBUG] [Thread-169721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:18:14.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:18:14.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:18:14.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:18:14.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:18:14.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:18:14.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:18:14.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:18:14.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:18:14.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:18:14.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.428591 -999.00  +13.70  25.25     97  +13.30 1 3 1 3 1   888    0 0.44 0.47 ----- 23.7 25.2 58.0 30.8 15.6 1.0 15.6 0.2 15.4 0.4 15.8 0.9
2026-04-11T12:18:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:18:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:18:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.428591
2026-04-11T12:18:14.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:18:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:18:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:18:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:18:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:18:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:17:46', tmtdew=0.08344, humidity=99.3776, cloud=0.0, wind=25.0171, temperature=14.4943, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:17:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:18:14.437 [DEBUG] [Thread-169721] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:18: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-04-11T12:18:14.532 [DEBUG] [Thread-169724] [transport.py] [_log()] starting thread (client mode): 0xa795e4a0
2026-04-11T12:18:14.532 [DEBUG] [Thread-169724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:18:14.547 [DEBUG] [Thread-169724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:18:14.547 [INFO] [Thread-169724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:18:14.555 [DEBUG] [Thread-169724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] client lang: <none>
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] server lang: <none>
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] kex follows: False
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] Compression: none
2026-04-11T12:18:14.556 [DEBUG] [Thread-169724] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:18:14.618 [DEBUG] [Thread-169724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:18:14.619 [DEBUG] [Thread-169724] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:18:14.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:18:14.620 [DEBUG] [Thread-169724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:18:14.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:18:14.674 [DEBUG] [Thread-169724] [transport.py] [_log()] userauth is OK
2026-04-11T12:18:14.675 [DEBUG] [Thread-169724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:18:14.675 [DEBUG] [Thread-169724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:18:14.675 [DEBUG] [Thread-169724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:18:14.675 [DEBUG] [Thread-169724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:18:14.694 [INFO] [Thread-169724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:18:14.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:18:14.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:18:15.547 [DEBUG] [Thread-169724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:18:15.547 [DEBUG] [Thread-169724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:18:15.597 [DEBUG] [Thread-169724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:18:15.597 [DEBUG] [Thread-169724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:18:15.606 [DEBUG] [Thread-169724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:18:15.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:18:15.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-04-11T12:18:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:18:15.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:18:15.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:18:15.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:18:15.643 [DEBUG] [Thread-169724] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:18:16.918 [DEBUG] [Thread-169726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:31.971 [DEBUG] [Thread-169727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:18:45.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:18:45.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:18:46.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 18, 21), 0.091705, 99.6889, 0.0, 21.3498, 14.0138, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:18:46.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:18:21
2026-04-11T12:18:47.008 [DEBUG] [Thread-169728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:47.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:18:47.482 [DEBUG] [Thread-169729] [transport.py] [_log()] starting thread (client mode): 0xa79b50c0
2026-04-11T12:18:47.482 [DEBUG] [Thread-169729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:18:47.502 [DEBUG] [Thread-169729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:18:47.502 [INFO] [Thread-169729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:18:47.505 [DEBUG] [Thread-169729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:18:47.505 [DEBUG] [Thread-169729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:18:47.505 [DEBUG] [Thread-169729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] client lang: <none>
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] server lang: <none>
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] kex follows: False
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:18:47.506 [DEBUG] [Thread-169729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:18:47.507 [DEBUG] [Thread-169729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:18:47.507 [DEBUG] [Thread-169729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:18:47.507 [DEBUG] [Thread-169729] [transport.py] [_log()] Compression: none
2026-04-11T12:18:47.507 [DEBUG] [Thread-169729] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:18:47.527 [DEBUG] [Thread-169729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:18:47.528 [DEBUG] [Thread-169729] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:18:47.529 [DEBUG] [Thread-169729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:18:47.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:18:47.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:18:47.531 [DEBUG] [Thread-169729] [transport.py] [_log()] userauth is OK
2026-04-11T12:18:47.531 [DEBUG] [Thread-169729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:18:47.531 [DEBUG] [Thread-169729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:18:47.531 [DEBUG] [Thread-169729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:18:47.531 [DEBUG] [Thread-169729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:18:47.554 [INFO] [Thread-169729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:18:47.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:18:48.289 [DEBUG] [Thread-169729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:18:48.289 [DEBUG] [Thread-169729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:18:48.290 [DEBUG] [Thread-169729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:18:48.330 [DEBUG] [Thread-169729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:18:48.331 [DEBUG] [Thread-169729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:18:48.334 [DEBUG] [Thread-169729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:18:48.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:18:48.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:18:48.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:18:48.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:18:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:18:48.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:18:48.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:18:48.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:18:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:18:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.429633 -999.00  +13.70  24.04     97  +13.30 1 3 1 3 1   888    0 0.43 0.20 ----- 20.9 24.0 66.6 29.9 15.7 1.6 15.7 0.7 15.6 0.8 15.8 0.9
2026-04-11T12:18:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:18:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:18:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.429633
2026-04-11T12:18:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:18:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:18:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:18:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:18:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:18:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:18:21', tmtdew=0.091705, humidity=99.6889, cloud=0.0, wind=21.3498, temperature=14.0138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:18:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:18:48.364 [DEBUG] [Thread-169729] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:18:48.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:18:48.447 [DEBUG] [Thread-169732] [transport.py] [_log()] starting thread (client mode): 0xa79b7940
2026-04-11T12:18:48.447 [DEBUG] [Thread-169732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:18:48.462 [DEBUG] [Thread-169732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:18:48.462 [INFO] [Thread-169732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] client lang: <none>
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] server lang: <none>
2026-04-11T12:18:48.470 [DEBUG] [Thread-169732] [transport.py] [_log()] kex follows: False
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] Compression: none
2026-04-11T12:18:48.471 [DEBUG] [Thread-169732] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:18:48.530 [DEBUG] [Thread-169732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:18:48.531 [DEBUG] [Thread-169732] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:18:48.532 [DEBUG] [Thread-169732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:18:48.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:18:48.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:18:48.586 [DEBUG] [Thread-169732] [transport.py] [_log()] userauth is OK
2026-04-11T12:18:48.586 [DEBUG] [Thread-169732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:18:48.586 [DEBUG] [Thread-169732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:18:48.586 [DEBUG] [Thread-169732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:18:48.586 [DEBUG] [Thread-169732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:18:48.605 [INFO] [Thread-169732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:18:48.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:18:48.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:18:49.472 [DEBUG] [Thread-169732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:18:49.472 [DEBUG] [Thread-169732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:18:49.520 [DEBUG] [Thread-169732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:18:49.520 [DEBUG] [Thread-169732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:18:49.529 [DEBUG] [Thread-169732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:18:49.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:18:49.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:18:49.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-04-11T12:18:49.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:18:49.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:18:49.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:18:49.566 [DEBUG] [Thread-169732] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:18:52.186 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:18:52.188 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:02.045 [DEBUG] [Thread-169734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:04.573 [DEBUG] [Thread-169735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:17.107 [DEBUG] [Thread-169736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:19.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:19:19.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:19:19.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-04-11T12:19:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 18, 57), 0.089125, 99.7054, 0.0, 20.997, 13.9469, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:19:20.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:18:57
2026-04-11T12:19:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:19:21.381 [DEBUG] [Thread-169737] [transport.py] [_log()] starting thread (client mode): 0xae52c760
2026-04-11T12:19:21.381 [DEBUG] [Thread-169737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:19:21.401 [DEBUG] [Thread-169737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:19:21.401 [INFO] [Thread-169737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:19:21.404 [DEBUG] [Thread-169737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:19:21.404 [DEBUG] [Thread-169737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:19:21.404 [DEBUG] [Thread-169737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:19:21.404 [DEBUG] [Thread-169737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:21.404 [DEBUG] [Thread-169737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:21.404 [DEBUG] [Thread-169737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] client lang: <none>
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] server lang: <none>
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] kex follows: False
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:19:21.405 [DEBUG] [Thread-169737] [transport.py] [_log()] Compression: none
2026-04-11T12:19:21.406 [DEBUG] [Thread-169737] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:19:21.424 [DEBUG] [Thread-169737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:19:21.425 [DEBUG] [Thread-169737] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:19:21.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:19:21.426 [DEBUG] [Thread-169737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:19:21.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:19:21.428 [DEBUG] [Thread-169737] [transport.py] [_log()] userauth is OK
2026-04-11T12:19:21.429 [DEBUG] [Thread-169737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:19:21.429 [DEBUG] [Thread-169737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:19:21.429 [DEBUG] [Thread-169737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:19:21.429 [DEBUG] [Thread-169737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:19:21.452 [INFO] [Thread-169737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:19:21.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:19:22.184 [DEBUG] [Thread-169737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:19:22.184 [DEBUG] [Thread-169737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:19:22.184 [DEBUG] [Thread-169737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:19:22.225 [DEBUG] [Thread-169737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:19:22.226 [DEBUG] [Thread-169737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:19:22.229 [DEBUG] [Thread-169737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:19:22.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:19:22.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:19:22.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:19:22.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:19:22.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:19:22.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:19:22.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:19:22.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:19:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:19:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.429980 -999.00  +13.70  24.49     97  +13.30 1 3 1 3 1   888    0 0.42 0.10 ----- 28.0 24.5 52.5 30.6 15.8 1.5 15.7 0.7 15.7 0.4 15.9 0.5
2026-04-11T12:19:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:19:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:19:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.429980
2026-04-11T12:19:22.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:19:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:19:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:19:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:19:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:19:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:18:57', tmtdew=0.089125, humidity=99.7054, cloud=0.0, wind=20.997, temperature=13.9469, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:19:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:19:22.255 [DEBUG] [Thread-169737] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:19:22.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:19:22.353 [DEBUG] [Thread-169740] [transport.py] [_log()] starting thread (client mode): 0xa79b75e0
2026-04-11T12:19:22.353 [DEBUG] [Thread-169740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:19:22.367 [DEBUG] [Thread-169740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:19:22.367 [INFO] [Thread-169740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:19:22.375 [DEBUG] [Thread-169740] [transport.py] [_log()] client lang: <none>
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] server lang: <none>
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] kex follows: False
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] Compression: none
2026-04-11T12:19:22.376 [DEBUG] [Thread-169740] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:19:22.434 [DEBUG] [Thread-169740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:19:22.435 [DEBUG] [Thread-169740] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:19:22.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:19:22.436 [DEBUG] [Thread-169740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:19:22.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:19:22.490 [DEBUG] [Thread-169740] [transport.py] [_log()] userauth is OK
2026-04-11T12:19:22.490 [DEBUG] [Thread-169740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:19:22.490 [DEBUG] [Thread-169740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:19:22.490 [DEBUG] [Thread-169740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:19:22.490 [DEBUG] [Thread-169740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:19:22.509 [INFO] [Thread-169740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:19:22.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:19:22.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:19:23.347 [DEBUG] [Thread-169740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:19:23.348 [DEBUG] [Thread-169740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:19:23.396 [DEBUG] [Thread-169740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:19:23.396 [DEBUG] [Thread-169740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:19:23.406 [DEBUG] [Thread-169740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:19:23.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:19:23.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-04-11T12:19:23.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-04-11T12:19:23.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:19:23.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:19:23.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:19:23.443 [DEBUG] [Thread-169740] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:19:32.149 [DEBUG] [Thread-169742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:47.202 [DEBUG] [Thread-169743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:52.328 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:52.329 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:19:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:19:53.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:19: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-04-11T12:19:54.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 19, 32), 0.08911, 99.7055, 0.0, 21.8084, 13.9967, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:19:54.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:19:32
2026-04-11T12:19:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:19:55.353 [DEBUG] [Thread-169744] [transport.py] [_log()] starting thread (client mode): 0xa795efe0
2026-04-11T12:19:55.353 [DEBUG] [Thread-169744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:19:55.371 [DEBUG] [Thread-169744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:19:55.371 [INFO] [Thread-169744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] client lang: <none>
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] server lang: <none>
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] kex follows: False
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] Compression: none
2026-04-11T12:19:55.375 [DEBUG] [Thread-169744] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:19:55.392 [DEBUG] [Thread-169744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:19:55.393 [DEBUG] [Thread-169744] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:19:55.394 [DEBUG] [Thread-169744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:19:55.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:19:55.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:19:55.396 [DEBUG] [Thread-169744] [transport.py] [_log()] userauth is OK
2026-04-11T12:19:55.396 [DEBUG] [Thread-169744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:19:55.396 [DEBUG] [Thread-169744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:19:55.397 [DEBUG] [Thread-169744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:19:55.397 [DEBUG] [Thread-169744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:19:55.415 [INFO] [Thread-169744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:19:55.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:19:56.159 [DEBUG] [Thread-169744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:19:56.160 [DEBUG] [Thread-169744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:19:56.160 [DEBUG] [Thread-169744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:19:56.200 [DEBUG] [Thread-169744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:19:56.200 [DEBUG] [Thread-169744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:19:56.204 [DEBUG] [Thread-169744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:19:56.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:19:56.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:19:56.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:19:56.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:19:56.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:19:56.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:19:56.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:19:56.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:19:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:19:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.430327 -999.00  +13.50  27.06     97  +13.00 1 3 1 3 1   888    0 0.42 0.07 ----- 27.5 27.1 72.6 29.3 15.6 0.3 15.7 0.1 15.6 -0.4 15.9 0.2
2026-04-11T12:19:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:19:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:19:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.430327
2026-04-11T12:19:56.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:19:56.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:19:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:19:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:19:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:19:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:19:32', tmtdew=0.08911, humidity=99.7055, cloud=0.0, wind=21.8084, temperature=13.9967, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:19:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:19:56.230 [DEBUG] [Thread-169744] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:19:56.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:19:56.324 [DEBUG] [Thread-169747] [transport.py] [_log()] starting thread (client mode): 0xb39c5ed0
2026-04-11T12:19:56.324 [DEBUG] [Thread-169747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:19:56.338 [DEBUG] [Thread-169747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:19:56.338 [INFO] [Thread-169747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] client lang: <none>
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] server lang: <none>
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] kex follows: False
2026-04-11T12:19:56.346 [DEBUG] [Thread-169747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:19:56.347 [DEBUG] [Thread-169747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:19:56.347 [DEBUG] [Thread-169747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:19:56.347 [DEBUG] [Thread-169747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:19:56.347 [DEBUG] [Thread-169747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:19:56.347 [DEBUG] [Thread-169747] [transport.py] [_log()] Compression: none
2026-04-11T12:19:56.347 [DEBUG] [Thread-169747] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:19:56.405 [DEBUG] [Thread-169747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:19:56.406 [DEBUG] [Thread-169747] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:19:56.407 [DEBUG] [Thread-169747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:19:56.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:19:56.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:19:56.462 [DEBUG] [Thread-169747] [transport.py] [_log()] userauth is OK
2026-04-11T12:19:56.462 [DEBUG] [Thread-169747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:19:56.462 [DEBUG] [Thread-169747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:19:56.462 [DEBUG] [Thread-169747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:19:56.462 [DEBUG] [Thread-169747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:19:56.480 [INFO] [Thread-169747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:19:56.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:19:56.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:19:57.287 [DEBUG] [Thread-169747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:19:57.288 [DEBUG] [Thread-169747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:19:57.336 [DEBUG] [Thread-169747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:19:57.336 [DEBUG] [Thread-169747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:19:57.346 [DEBUG] [Thread-169747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:19:57.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:19:57.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:19:57.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-04-11T12:19:57.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:19:57.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:19:57.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:19:57.380 [DEBUG] [Thread-169747] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:20:02.240 [DEBUG] [Thread-169749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:20:04.618 [DEBUG] [Thread-169750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:20:17.290 [DEBUG] [Thread-169751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:20:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:20:27.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:20:27.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-04-11T12:20:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 20, 8), 0.09945, 99.6392, 0.0, 22.7434, 13.8972, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:20:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:20:08
2026-04-11T12:20:29.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:20:29.248 [DEBUG] [Thread-169752] [transport.py] [_log()] starting thread (client mode): 0xae52e050
2026-04-11T12:20:29.248 [DEBUG] [Thread-169752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:20:29.267 [DEBUG] [Thread-169752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:20:29.267 [INFO] [Thread-169752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] client lang: <none>
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] server lang: <none>
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] kex follows: False
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] Compression: none
2026-04-11T12:20:29.269 [DEBUG] [Thread-169752] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:20:29.277 [DEBUG] [Thread-169752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:20:29.277 [DEBUG] [Thread-169752] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:20:29.277 [DEBUG] [Thread-169752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:20:29.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:20:29.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:20:29.278 [DEBUG] [Thread-169752] [transport.py] [_log()] userauth is OK
2026-04-11T12:20:29.278 [DEBUG] [Thread-169752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:20:29.278 [DEBUG] [Thread-169752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:20:29.278 [DEBUG] [Thread-169752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:20:29.278 [DEBUG] [Thread-169752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:20:29.310 [INFO] [Thread-169752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:20:29.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:20:30.590 [DEBUG] [Thread-169752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:20:30.590 [DEBUG] [Thread-169752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:20:30.591 [DEBUG] [Thread-169752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:20:30.631 [DEBUG] [Thread-169752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:20:30.631 [DEBUG] [Thread-169752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:20:30.635 [DEBUG] [Thread-169752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:20:30.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:20:30.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:20:30.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:20:30.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:20:30.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:20:30.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:20:30.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:20:30.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:20:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:20:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.430675 -999.00  +13.50  26.94     97  +13.10 1 3 1 3 1   888    0 0.43 0.25 ----- 25.9 26.9 66.0 31.2 15.5 0.0 15.6 0.4 15.6 0.0 15.8 0.2
2026-04-11T12:20:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:20:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:20:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.430675
2026-04-11T12:20:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:20:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:20:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:20:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:20:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:20:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:20:08', tmtdew=0.09945, humidity=99.6392, cloud=0.0, wind=22.7434, temperature=13.8972, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:20:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:20:30.666 [DEBUG] [Thread-169752] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:20:30.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:20:30.760 [DEBUG] [Thread-169755] [transport.py] [_log()] starting thread (client mode): 0xa79b7ee0
2026-04-11T12:20:30.760 [DEBUG] [Thread-169755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:20:30.774 [DEBUG] [Thread-169755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:20:30.774 [INFO] [Thread-169755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:20:30.782 [DEBUG] [Thread-169755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:20:30.782 [DEBUG] [Thread-169755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:20:30.782 [DEBUG] [Thread-169755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:20:30.782 [DEBUG] [Thread-169755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:20:30.782 [DEBUG] [Thread-169755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:20:30.782 [DEBUG] [Thread-169755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] client lang: <none>
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] server lang: <none>
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] kex follows: False
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] Compression: none
2026-04-11T12:20:30.783 [DEBUG] [Thread-169755] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:20:30.841 [DEBUG] [Thread-169755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:20:30.842 [DEBUG] [Thread-169755] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:20:30.842 [DEBUG] [Thread-169755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:20:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:20:30.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:20:30.898 [DEBUG] [Thread-169755] [transport.py] [_log()] userauth is OK
2026-04-11T12:20:30.898 [DEBUG] [Thread-169755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:20:30.898 [DEBUG] [Thread-169755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:20:30.899 [DEBUG] [Thread-169755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:20:30.899 [DEBUG] [Thread-169755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:20:30.917 [INFO] [Thread-169755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:20:30.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:20:30.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:20:31.734 [DEBUG] [Thread-169755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:20:31.734 [DEBUG] [Thread-169755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:20:31.782 [DEBUG] [Thread-169755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:20:31.782 [DEBUG] [Thread-169755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:20:31.791 [DEBUG] [Thread-169755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:20:31.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:20:31.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-04-11T12:20:31.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-04-11T12:20:31.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:20:31.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:20:31.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:20:31.825 [DEBUG] [Thread-169755] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:20:32.327 [DEBUG] [Thread-169757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:20:47.379 [DEBUG] [Thread-169758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:20:52.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:20:52.470 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:01.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:21:01.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:21:01.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-04-11T12:21:02.417 [DEBUG] [Thread-169759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 20, 43), 0.08868, 99.3439, 0.0, 26.6047, 14.5603, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:21:03.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:20:43
2026-04-11T12:21:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:21:03.728 [DEBUG] [Thread-169760] [transport.py] [_log()] starting thread (client mode): 0xae52fd30
2026-04-11T12:21:03.728 [DEBUG] [Thread-169760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:21:03.749 [DEBUG] [Thread-169760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:21:03.749 [INFO] [Thread-169760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:21:03.751 [DEBUG] [Thread-169760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] client lang: <none>
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] server lang: <none>
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] kex follows: False
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] Compression: none
2026-04-11T12:21:03.752 [DEBUG] [Thread-169760] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:21:03.768 [DEBUG] [Thread-169760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:21:03.769 [DEBUG] [Thread-169760] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:21:03.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:21:03.770 [DEBUG] [Thread-169760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:21:03.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:21:03.772 [DEBUG] [Thread-169760] [transport.py] [_log()] userauth is OK
2026-04-11T12:21:03.772 [DEBUG] [Thread-169760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:21:03.772 [DEBUG] [Thread-169760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:21:03.772 [DEBUG] [Thread-169760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:21:03.773 [DEBUG] [Thread-169760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:21:03.809 [INFO] [Thread-169760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:21:03.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:21:04.569 [DEBUG] [Thread-169760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:21:04.569 [DEBUG] [Thread-169760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:21:04.570 [DEBUG] [Thread-169760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:21:04.610 [DEBUG] [Thread-169760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:21:04.610 [DEBUG] [Thread-169760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:21:04.613 [DEBUG] [Thread-169760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:21:04.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:21:04.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:21:04.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:21:04.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:21:04.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:21:04.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:21:04.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:21:04.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:21:04.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:21:04.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.430675 -999.00  +13.50  26.94     97  +13.10 1 3 1 3 1   888    0 0.43 0.25 ----- 25.9 26.9 66.0 31.2 15.5 0.0 15.6 0.4 15.6 0.0 15.8 0.2
2026-04-11T12:21:04.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:21:04.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:21:04.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.430675
2026-04-11T12:21:04.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:21:04.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:21:04.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:21:04.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:21:04.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:21:04.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:20:43', tmtdew=0.08868, humidity=99.3439, cloud=0.0, wind=26.6047, temperature=14.5603, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:20:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:21:04.639 [DEBUG] [Thread-169760] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:21:04.673 [DEBUG] [Thread-169763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:04.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:21:04.724 [DEBUG] [Thread-169764] [transport.py] [_log()] starting thread (client mode): 0xb39c45b0
2026-04-11T12:21:04.724 [DEBUG] [Thread-169764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:21:04.738 [DEBUG] [Thread-169764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:21:04.738 [INFO] [Thread-169764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:21:04.746 [DEBUG] [Thread-169764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] client lang: <none>
2026-04-11T12:21:04.747 [DEBUG] [Thread-169764] [transport.py] [_log()] server lang: <none>
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] kex follows: False
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] Compression: none
2026-04-11T12:21:04.748 [DEBUG] [Thread-169764] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:21:04.804 [DEBUG] [Thread-169764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:21:04.804 [DEBUG] [Thread-169764] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:21:04.805 [DEBUG] [Thread-169764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:21:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:21:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:21:04.862 [DEBUG] [Thread-169764] [transport.py] [_log()] userauth is OK
2026-04-11T12:21:04.862 [DEBUG] [Thread-169764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:21:04.862 [DEBUG] [Thread-169764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:21:04.862 [DEBUG] [Thread-169764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:21:04.863 [DEBUG] [Thread-169764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:21:04.884 [INFO] [Thread-169764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:21:04.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:21:04.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:21:05.777 [DEBUG] [Thread-169764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:21:05.778 [DEBUG] [Thread-169764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:21:05.826 [DEBUG] [Thread-169764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:21:05.826 [DEBUG] [Thread-169764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:21:05.835 [DEBUG] [Thread-169764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:21:05.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:21:05.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-04-11T12:21: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-04-11T12:21:05.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:21:05.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:21:05.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:21:05.869 [DEBUG] [Thread-169764] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:21:17.454 [DEBUG] [Thread-169766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:32.505 [DEBUG] [Thread-169767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:21:35.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:21:35.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-04-11T12:21:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 21, 19), 0.099505, 99.6388, 0.0, 22.7434, 13.8304, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:21:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:21:19
2026-04-11T12:21:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:21:37.683 [DEBUG] [Thread-169768] [transport.py] [_log()] starting thread (client mode): 0xa795e560
2026-04-11T12:21:37.683 [DEBUG] [Thread-169768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:21:37.704 [DEBUG] [Thread-169768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:21:37.704 [INFO] [Thread-169768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:21:37.707 [DEBUG] [Thread-169768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:21:37.707 [DEBUG] [Thread-169768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:21:37.707 [DEBUG] [Thread-169768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:21:37.707 [DEBUG] [Thread-169768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:37.707 [DEBUG] [Thread-169768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] client lang: <none>
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] server lang: <none>
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] kex follows: False
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:21:37.708 [DEBUG] [Thread-169768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:21:37.709 [DEBUG] [Thread-169768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:21:37.709 [DEBUG] [Thread-169768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:21:37.709 [DEBUG] [Thread-169768] [transport.py] [_log()] Compression: none
2026-04-11T12:21:37.709 [DEBUG] [Thread-169768] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:21:37.727 [DEBUG] [Thread-169768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:21:37.728 [DEBUG] [Thread-169768] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:21:37.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:21:37.729 [DEBUG] [Thread-169768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:21:37.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:21:37.731 [DEBUG] [Thread-169768] [transport.py] [_log()] userauth is OK
2026-04-11T12:21:37.731 [DEBUG] [Thread-169768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:21:37.732 [DEBUG] [Thread-169768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:21:37.732 [DEBUG] [Thread-169768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:21:37.732 [DEBUG] [Thread-169768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:21:37.769 [INFO] [Thread-169768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:21:37.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:21:38.561 [DEBUG] [Thread-169768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:21:38.562 [DEBUG] [Thread-169768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:21:38.562 [DEBUG] [Thread-169768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:21:38.603 [DEBUG] [Thread-169768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:21:38.603 [DEBUG] [Thread-169768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:21:38.607 [DEBUG] [Thread-169768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:21:38.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:21:38.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:21:38.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:21:38.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:21:38.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:21:38.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:21:38.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:21:38.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:21:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:21:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.431022 -999.00  +13.70  21.10     97  +13.30 1 3 1 3 1   888    0 0.43 0.14 ----- 22.7 21.1 66.6 28.9 15.6 1.2 15.6 0.8 15.6 0.4 15.8 0.6
2026-04-11T12:21:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:21:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:21:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.431022
2026-04-11T12:21:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:21:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:21:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:21:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:21:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:21:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:21:19', tmtdew=0.099505, humidity=99.6388, cloud=0.0, wind=22.7434, temperature=13.8304, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:20:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:21:38.635 [DEBUG] [Thread-169768] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:21:38.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:21:38.730 [DEBUG] [Thread-169771] [transport.py] [_log()] starting thread (client mode): 0xae5e7c70
2026-04-11T12:21:38.730 [DEBUG] [Thread-169771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:21:38.745 [DEBUG] [Thread-169771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:21:38.745 [INFO] [Thread-169771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:21:38.753 [DEBUG] [Thread-169771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:21:38.753 [DEBUG] [Thread-169771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] client lang: <none>
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] server lang: <none>
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] kex follows: False
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] Compression: none
2026-04-11T12:21:38.754 [DEBUG] [Thread-169771] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:21:38.813 [DEBUG] [Thread-169771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:21:38.814 [DEBUG] [Thread-169771] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:21:38.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:21:38.815 [DEBUG] [Thread-169771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:21:38.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:21:38.870 [DEBUG] [Thread-169771] [transport.py] [_log()] userauth is OK
2026-04-11T12:21:38.870 [DEBUG] [Thread-169771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:21:38.870 [DEBUG] [Thread-169771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:21:38.870 [DEBUG] [Thread-169771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:21:38.870 [DEBUG] [Thread-169771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:21:38.890 [INFO] [Thread-169771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12: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-04-11T12:21:38.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:21:39.714 [DEBUG] [Thread-169771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:21:39.714 [DEBUG] [Thread-169771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:21:39.764 [DEBUG] [Thread-169771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:21:39.765 [DEBUG] [Thread-169771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:21:39.774 [DEBUG] [Thread-169771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:21:39.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:21:39.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-04-11T12:21:39.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:21:39.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:21:39.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:21:39.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:21:39.812 [DEBUG] [Thread-169771] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:21:47.542 [DEBUG] [Thread-169773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:52.612 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:21:52.613 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:02.596 [DEBUG] [Thread-169774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:04.730 [DEBUG] [Thread-169775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:22:09.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:22:09.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-04-11T12:22:11.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 21, 54), 0.0836, 99.3765, 0.0, 22.5828, 14.5931, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:22:11.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:21:54
2026-04-11T12:22:11.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:22:11.673 [DEBUG] [Thread-169776] [transport.py] [_log()] starting thread (client mode): 0xa79b75e0
2026-04-11T12:22:11.673 [DEBUG] [Thread-169776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:22:11.693 [DEBUG] [Thread-169776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:22:11.694 [INFO] [Thread-169776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:22:11.697 [DEBUG] [Thread-169776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] client lang: <none>
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] server lang: <none>
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] kex follows: False
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] Compression: none
2026-04-11T12:22:11.698 [DEBUG] [Thread-169776] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:22:11.716 [DEBUG] [Thread-169776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:22:11.717 [DEBUG] [Thread-169776] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:22:11.717 [DEBUG] [Thread-169776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:22:11.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:22:11.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:22:11.719 [DEBUG] [Thread-169776] [transport.py] [_log()] userauth is OK
2026-04-11T12:22:11.719 [DEBUG] [Thread-169776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:22:11.720 [DEBUG] [Thread-169776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:22:11.720 [DEBUG] [Thread-169776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:22:11.720 [DEBUG] [Thread-169776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:22:11.744 [INFO] [Thread-169776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:22:11.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:22:12.535 [DEBUG] [Thread-169776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:22:12.536 [DEBUG] [Thread-169776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:22:12.536 [DEBUG] [Thread-169776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:22:12.577 [DEBUG] [Thread-169776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:22:12.577 [DEBUG] [Thread-169776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:22:12.580 [DEBUG] [Thread-169776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:22:12.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:22:12.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:22:12.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:22:12.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:22:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:22:12.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:22:12.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:22:12.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:22:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:22:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.431369 -999.00  +13.80  22.28     97  +13.40 1 3 1 3 1   888    0 0.42 0.05 ----- 22.8 22.3 55.8 28.3 15.7 0.7 15.7 0.5 15.7 0.4 15.9 1.0
2026-04-11T12:22:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:22:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:22:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.431369
2026-04-11T12:22:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:22:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:22:12.595 [DEBUG] [Thread-169776] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:22:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:22:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:22:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:22:12.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:21:54', tmtdew=0.0836, humidity=99.3765, cloud=0.0, wind=22.5828, temperature=14.5931, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:21:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:22:12.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:22:12.686 [DEBUG] [Thread-169779] [transport.py] [_log()] starting thread (client mode): 0xa79b7ee0
2026-04-11T12:22:12.686 [DEBUG] [Thread-169779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:22:12.700 [DEBUG] [Thread-169779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:22:12.701 [INFO] [Thread-169779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:22:12.708 [DEBUG] [Thread-169779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] client lang: <none>
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] server lang: <none>
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] kex follows: False
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] Compression: none
2026-04-11T12:22:12.709 [DEBUG] [Thread-169779] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:22:12.765 [DEBUG] [Thread-169779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:22:12.765 [DEBUG] [Thread-169779] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:22:12.766 [DEBUG] [Thread-169779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:22:12.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:22:12.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:22:12.821 [DEBUG] [Thread-169779] [transport.py] [_log()] userauth is OK
2026-04-11T12:22:12.822 [DEBUG] [Thread-169779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:22:12.822 [DEBUG] [Thread-169779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:22:12.822 [DEBUG] [Thread-169779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:22:12.822 [DEBUG] [Thread-169779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:22:12.844 [INFO] [Thread-169779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:22:12.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:22:12.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:22:13.667 [DEBUG] [Thread-169779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:22:13.667 [DEBUG] [Thread-169779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:22:13.715 [DEBUG] [Thread-169779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:22:13.715 [DEBUG] [Thread-169779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:22:13.724 [DEBUG] [Thread-169779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:22:13.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:22:13.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-04-11T12:22:13.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-04-11T12:22:13.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:22:13.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:22:13.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:22:13.759 [DEBUG] [Thread-169779] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:22:17.631 [DEBUG] [Thread-169781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:32.685 [DEBUG] [Thread-169782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:43.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:22:43.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:22:43.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-04-11T12:22:45.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 22, 30), 0.094355, 99.6718, 0.0, 19.6733, 14.1298, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:22:45.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:22:30
2026-04-11T12:22:45.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:22:45.591 [DEBUG] [Thread-169783] [transport.py] [_log()] starting thread (client mode): 0xae52efe0
2026-04-11T12:22:45.591 [DEBUG] [Thread-169783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:22:45.613 [DEBUG] [Thread-169783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:22:45.613 [INFO] [Thread-169783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:22:45.616 [DEBUG] [Thread-169783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] client lang: <none>
2026-04-11T12:22:45.617 [DEBUG] [Thread-169783] [transport.py] [_log()] server lang: <none>
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] kex follows: False
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] Compression: none
2026-04-11T12:22:45.618 [DEBUG] [Thread-169783] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:22:45.636 [DEBUG] [Thread-169783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:22:45.637 [DEBUG] [Thread-169783] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:22:45.637 [DEBUG] [Thread-169783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:22:45.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:22:45.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:22:45.640 [DEBUG] [Thread-169783] [transport.py] [_log()] userauth is OK
2026-04-11T12:22:45.640 [DEBUG] [Thread-169783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:22:45.640 [DEBUG] [Thread-169783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:22:45.640 [DEBUG] [Thread-169783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:22:45.641 [DEBUG] [Thread-169783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:22:45.665 [INFO] [Thread-169783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:22:45.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:22:46.430 [DEBUG] [Thread-169783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:22:46.430 [DEBUG] [Thread-169783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:22:46.431 [DEBUG] [Thread-169783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:22:46.473 [DEBUG] [Thread-169783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:22:46.473 [DEBUG] [Thread-169783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:22:46.477 [DEBUG] [Thread-169783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:22:46.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:22:46.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:22:46.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:22:46.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:22:46.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:22:46.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:22:46.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:22:46.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:22:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:22:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.431716 -999.00  +13.80  13.83     97  +13.40 1 3 1 3 1   888    0 0.42 -0.15 ----- 21.2 13.8 96.6 28.1 15.7 0.4 15.8 0.2 15.8 0.6 16.0 0.9
2026-04-11T12:22:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:22:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:22:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.431716
2026-04-11T12:22:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:22:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:22:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:22:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:22:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:22:46.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:22:30', tmtdew=0.094355, humidity=99.6718, cloud=0.0, wind=19.6733, temperature=14.1298, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:21:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:22:46.512 [DEBUG] [Thread-169783] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:22:46.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:22:47.721 [DEBUG] [Thread-169786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:52.754 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:22:52.755 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:02.785 [DEBUG] [Thread-169787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:04.789 [DEBUG] [Thread-169788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:17.825 [DEBUG] [Thread-169789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:32.859 [DEBUG] [Thread-169790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:47.892 [DEBUG] [Thread-169791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:52.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:23:52.896 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:02.929 [DEBUG] [Thread-169792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:04.822 [DEBUG] [Thread-169793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:17.963 [DEBUG] [Thread-169794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:32.996 [DEBUG] [Thread-169795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:48.033 [DEBUG] [Thread-169796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:53.040 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:24:53.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:00.543 [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-04-11T12:25:03.072 [DEBUG] [Thread-169797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:04.860 [DEBUG] [Thread-169798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:18.107 [DEBUG] [Thread-169799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:25:30.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:25:30.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-04-11T12:25:31.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 24, 51), 0.07315, 99.4436, 0.0, 25.5816, 14.5936, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:25:31.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:24:51
2026-04-11T12:25:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:25:32.465 [DEBUG] [Thread-169800] [transport.py] [_log()] starting thread (client mode): 0xb39c5360
2026-04-11T12:25:32.465 [DEBUG] [Thread-169800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:25:32.485 [DEBUG] [Thread-169800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:25:32.485 [INFO] [Thread-169800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:25:32.488 [DEBUG] [Thread-169800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:25:32.488 [DEBUG] [Thread-169800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:25:32.488 [DEBUG] [Thread-169800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] client lang: <none>
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] server lang: <none>
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] kex follows: False
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:25:32.489 [DEBUG] [Thread-169800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:25:32.490 [DEBUG] [Thread-169800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:25:32.490 [DEBUG] [Thread-169800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:25:32.490 [DEBUG] [Thread-169800] [transport.py] [_log()] Compression: none
2026-04-11T12:25:32.490 [DEBUG] [Thread-169800] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:25:32.508 [DEBUG] [Thread-169800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:25:32.509 [DEBUG] [Thread-169800] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:25:32.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:25:32.510 [DEBUG] [Thread-169800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:25:32.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:25:32.512 [DEBUG] [Thread-169800] [transport.py] [_log()] userauth is OK
2026-04-11T12:25:32.513 [DEBUG] [Thread-169800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:25:32.513 [DEBUG] [Thread-169800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:25:32.513 [DEBUG] [Thread-169800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:25:32.513 [DEBUG] [Thread-169800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:25:32.536 [INFO] [Thread-169800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:25:32.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:25:33.149 [DEBUG] [Thread-169802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:33.652 [DEBUG] [Thread-169800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:25:33.652 [DEBUG] [Thread-169800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:25:33.653 [DEBUG] [Thread-169800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:25:33.693 [DEBUG] [Thread-169800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:25:33.693 [DEBUG] [Thread-169800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:25:33.697 [DEBUG] [Thread-169800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:25:33.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:25:33.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:25:33.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:25:33.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:25:33.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:25:33.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:25:33.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:25:33.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:25:33.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:25:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.433799 -999.00  +13.70  13.40     97  +13.30 1 3 1 3 1   888    0 0.41 -0.41 ----- 19.8 13.4 99.8 32.3 15.8 0.3 15.9 0.2 15.9 -0.0 16.1 0.7
2026-04-11T12:25:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:25:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:25:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.433799
2026-04-11T12:25:33.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:25:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:25:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:25:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:25:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:25:33.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:24:51', tmtdew=0.07315, humidity=99.4436, cloud=0.0, wind=25.5816, temperature=14.5936, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:24:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:25:33.728 [DEBUG] [Thread-169800] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:25:33.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:25:33.817 [DEBUG] [Thread-169804] [transport.py] [_log()] starting thread (client mode): 0xb39c4a60
2026-04-11T12:25:33.818 [DEBUG] [Thread-169804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:25:33.833 [DEBUG] [Thread-169804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:25:33.834 [INFO] [Thread-169804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:25:33.841 [DEBUG] [Thread-169804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:25:33.841 [DEBUG] [Thread-169804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] client lang: <none>
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] server lang: <none>
2026-04-11T12:25:33.842 [DEBUG] [Thread-169804] [transport.py] [_log()] kex follows: False
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] Compression: none
2026-04-11T12:25:33.843 [DEBUG] [Thread-169804] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:25:33.902 [DEBUG] [Thread-169804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:25:33.902 [DEBUG] [Thread-169804] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:25:33.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:25:33.904 [DEBUG] [Thread-169804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:25:33.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:25:33.957 [DEBUG] [Thread-169804] [transport.py] [_log()] userauth is OK
2026-04-11T12:25:33.957 [DEBUG] [Thread-169804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:25:33.957 [DEBUG] [Thread-169804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:25:33.958 [DEBUG] [Thread-169804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:25:33.958 [DEBUG] [Thread-169804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:25:33.977 [INFO] [Thread-169804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:25:33.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:25:33.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:25:34.862 [DEBUG] [Thread-169804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:25:34.862 [DEBUG] [Thread-169804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:25:34.911 [DEBUG] [Thread-169804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:25:34.911 [DEBUG] [Thread-169804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:25:34.920 [DEBUG] [Thread-169804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:25:34.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:25:34.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:25:34.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:25:34.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:25:34.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:25:34.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:25:34.958 [DEBUG] [Thread-169804] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:25:48.185 [DEBUG] [Thread-169806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:53.181 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:25:53.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:03.234 [DEBUG] [Thread-169807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:04.901 [DEBUG] [Thread-169808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:04.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:26:04.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:26:04.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-04-11T12:26:06.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 25, 27), 0.09174, 99.6887, 0.0, 24.1024, 13.9636, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:26:06.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:25:27
2026-04-11T12:26:06.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:26:06.794 [DEBUG] [Thread-169809] [transport.py] [_log()] starting thread (client mode): 0xae5b3f10
2026-04-11T12:26:06.794 [DEBUG] [Thread-169809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:26:06.814 [DEBUG] [Thread-169809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:26:06.814 [INFO] [Thread-169809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] client lang: <none>
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] server lang: <none>
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] kex follows: False
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] Compression: none
2026-04-11T12:26:06.816 [DEBUG] [Thread-169809] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:26:06.824 [DEBUG] [Thread-169809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:26:06.825 [DEBUG] [Thread-169809] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:26:06.825 [DEBUG] [Thread-169809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:26:06.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:26:06.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:26:06.827 [DEBUG] [Thread-169809] [transport.py] [_log()] userauth is OK
2026-04-11T12:26:06.827 [DEBUG] [Thread-169809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:26:06.827 [DEBUG] [Thread-169809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:26:06.827 [DEBUG] [Thread-169809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:26:06.827 [DEBUG] [Thread-169809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:26:06.862 [INFO] [Thread-169809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:26:06.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:26:07.666 [DEBUG] [Thread-169809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:26:07.666 [DEBUG] [Thread-169809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:26:07.667 [DEBUG] [Thread-169809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:26:07.708 [DEBUG] [Thread-169809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:26:07.708 [DEBUG] [Thread-169809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:26:07.710 [DEBUG] [Thread-169809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:26:07.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:26:07.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:26:07.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:26:07.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:26:07.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:26:07.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:26:07.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:26:07.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:26:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:26:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.434147 -999.00  +13.80  20.67     97  +13.30 1 3 1 3 1   888    0 0.40 -0.28 ----- 18.5 20.7 67.8 22.7 15.8 0.7 16.0 0.2 15.9 0.2 16.0 0.3
2026-04-11T12:26:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:26:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:26:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.434147
2026-04-11T12:26:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:26:07.736 [DEBUG] [Thread-169809] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:26:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:26:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:26:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:26:07.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:26:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:25:27', tmtdew=0.09174, humidity=99.6887, cloud=0.0, wind=24.1024, temperature=13.9636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:25:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:26:07.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:26:07.839 [DEBUG] [Thread-169812] [transport.py] [_log()] starting thread (client mode): 0xae52cd60
2026-04-11T12:26:07.839 [DEBUG] [Thread-169812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:26:07.853 [DEBUG] [Thread-169812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:26:07.853 [INFO] [Thread-169812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:26:07.860 [DEBUG] [Thread-169812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:26:07.860 [DEBUG] [Thread-169812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:26:07.860 [DEBUG] [Thread-169812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] client lang: <none>
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] server lang: <none>
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] kex follows: False
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:26:07.861 [DEBUG] [Thread-169812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:26:07.862 [DEBUG] [Thread-169812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:26:07.862 [DEBUG] [Thread-169812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:26:07.862 [DEBUG] [Thread-169812] [transport.py] [_log()] Compression: none
2026-04-11T12:26:07.862 [DEBUG] [Thread-169812] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:26:07.919 [DEBUG] [Thread-169812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:26:07.920 [DEBUG] [Thread-169812] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:26:07.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:26:07.921 [DEBUG] [Thread-169812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:26:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:26:07.978 [DEBUG] [Thread-169812] [transport.py] [_log()] userauth is OK
2026-04-11T12:26:07.979 [DEBUG] [Thread-169812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:26:07.979 [DEBUG] [Thread-169812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:26:07.979 [DEBUG] [Thread-169812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:26:07.979 [DEBUG] [Thread-169812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:26:08.002 [INFO] [Thread-169812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:26:08.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:26:08.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:26:08.841 [DEBUG] [Thread-169812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:26:08.841 [DEBUG] [Thread-169812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:26:08.890 [DEBUG] [Thread-169812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:26:08.890 [DEBUG] [Thread-169812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:26:08.900 [DEBUG] [Thread-169812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:26:08.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:26:08.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-04-11T12:26:08.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-04-11T12:26:08.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:26:08.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:26:08.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:26:08.939 [DEBUG] [Thread-169812] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:26:18.269 [DEBUG] [Thread-169814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:33.319 [DEBUG] [Thread-169815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:38.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:26:38.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:26:38.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-04-11T12:26:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 26, 2), 0.09432, 99.6721, 0.0, 20.6626, 13.9636, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:26:40.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:26:02
2026-04-11T12:26:40.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:26:40.818 [DEBUG] [Thread-169816] [transport.py] [_log()] starting thread (client mode): 0xa795efb0
2026-04-11T12:26:40.818 [DEBUG] [Thread-169816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:26:40.839 [DEBUG] [Thread-169816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:26:40.839 [INFO] [Thread-169816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] client lang: <none>
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] server lang: <none>
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] kex follows: False
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] Compression: none
2026-04-11T12:26:40.842 [DEBUG] [Thread-169816] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:26:40.860 [DEBUG] [Thread-169816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:26:40.860 [DEBUG] [Thread-169816] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:26:40.860 [DEBUG] [Thread-169816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:26:40.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:26:40.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:26:40.862 [DEBUG] [Thread-169816] [transport.py] [_log()] userauth is OK
2026-04-11T12:26:40.863 [DEBUG] [Thread-169816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:26:40.863 [DEBUG] [Thread-169816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:26:40.863 [DEBUG] [Thread-169816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:26:40.863 [DEBUG] [Thread-169816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:26:40.879 [INFO] [Thread-169816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:26:40.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:26:41.651 [DEBUG] [Thread-169816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:26:41.651 [DEBUG] [Thread-169816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:26:41.652 [DEBUG] [Thread-169816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:26:41.692 [DEBUG] [Thread-169816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:26:41.693 [DEBUG] [Thread-169816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:26:41.696 [DEBUG] [Thread-169816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:26:41.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:26:41.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:26:41.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:26:41.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:26:41.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:26:41.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:26:41.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:26:41.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:26:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:26:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.434494 -999.00  +13.90  15.72     97  +13.50 1 3 1 3 1   888    0 0.40 -0.38 ----- 11.1 15.7 66.8 26.5 15.8 0.1 16.0 0.2 15.8 -0.1 16.1 0.5
2026-04-11T12:26:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:26:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:26:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.434494
2026-04-11T12:26:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:26:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:26:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:26:41.723 [DEBUG] [Thread-169816] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:26:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:26:41.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:26:41.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:26:02', tmtdew=0.09432, humidity=99.6721, cloud=0.0, wind=20.6626, temperature=13.9636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:25:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:26:41.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:26:41.817 [DEBUG] [Thread-169819] [transport.py] [_log()] starting thread (client mode): 0xae5e76a0
2026-04-11T12:26:41.817 [DEBUG] [Thread-169819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:26:41.834 [DEBUG] [Thread-169819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:26:41.834 [INFO] [Thread-169819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:26:41.842 [DEBUG] [Thread-169819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:26:41.842 [DEBUG] [Thread-169819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:26:41.842 [DEBUG] [Thread-169819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] client lang: <none>
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] server lang: <none>
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] kex follows: False
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] Compression: none
2026-04-11T12:26:41.843 [DEBUG] [Thread-169819] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:26:41.901 [DEBUG] [Thread-169819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:26:41.902 [DEBUG] [Thread-169819] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:26:41.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:26:41.903 [DEBUG] [Thread-169819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:26:41.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:26:41.957 [DEBUG] [Thread-169819] [transport.py] [_log()] userauth is OK
2026-04-11T12:26:41.958 [DEBUG] [Thread-169819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:26:41.958 [DEBUG] [Thread-169819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:26:41.958 [DEBUG] [Thread-169819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:26:41.958 [DEBUG] [Thread-169819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:26:41.977 [INFO] [Thread-169819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:26:41.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:26:41.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:26:42.825 [DEBUG] [Thread-169819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:26:42.826 [DEBUG] [Thread-169819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:26:42.874 [DEBUG] [Thread-169819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:26:42.874 [DEBUG] [Thread-169819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:26:42.883 [DEBUG] [Thread-169819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:26:42.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:26:42.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:26:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:26:42.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:26:42.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:26:42.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:26:42.920 [DEBUG] [Thread-169819] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:26:48.362 [DEBUG] [Thread-169821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:53.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:26:53.324 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:03.417 [DEBUG] [Thread-169822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:04.929 [DEBUG] [Thread-169823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:12.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:27:12.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:27:12.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-04-11T12:27:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 26, 37), 0.08371, 99.3759, 0.0, 21.2774, 14.5263, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:27:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:26:37
2026-04-11T12:27:14.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:27:14.893 [DEBUG] [Thread-169824] [transport.py] [_log()] starting thread (client mode): 0xae5b3400
2026-04-11T12:27:14.893 [DEBUG] [Thread-169824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:27:14.913 [DEBUG] [Thread-169824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:27:14.913 [INFO] [Thread-169824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:27:14.916 [DEBUG] [Thread-169824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] client lang: <none>
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] server lang: <none>
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] kex follows: False
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] Compression: none
2026-04-11T12:27:14.917 [DEBUG] [Thread-169824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:27:14.926 [DEBUG] [Thread-169824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:27:14.926 [DEBUG] [Thread-169824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:27:14.927 [DEBUG] [Thread-169824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:27:14.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:27:14.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:27:14.929 [DEBUG] [Thread-169824] [transport.py] [_log()] userauth is OK
2026-04-11T12:27:14.929 [DEBUG] [Thread-169824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:27:14.929 [DEBUG] [Thread-169824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:27:14.929 [DEBUG] [Thread-169824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:27:14.929 [DEBUG] [Thread-169824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:27:14.953 [INFO] [Thread-169824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:27:14.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:27:15.715 [DEBUG] [Thread-169824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:27:15.715 [DEBUG] [Thread-169824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:27:15.715 [DEBUG] [Thread-169824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:27:15.756 [DEBUG] [Thread-169824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:27:15.756 [DEBUG] [Thread-169824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:27:15.759 [DEBUG] [Thread-169824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:27:15.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:27:15.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:27:15.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:27:15.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:27:15.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:27:15.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:27:15.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:27:15.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:27:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:27:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.435188 -999.00  +13.60  22.75     97  +13.20 1 3 1 3 1   888    0 0.40 -0.40 ----- 22.9 22.8 66.4 27.0 15.8 0.3 15.9 0.0 15.9 -0.3 16.0 0.1
2026-04-11T12:27:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:27:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:27:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.435188
2026-04-11T12:27:15.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:27:15.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:27:15.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:27:15.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:27:15.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:27:15.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:26:37', tmtdew=0.08371, humidity=99.3759, cloud=0.0, wind=21.2774, temperature=14.5263, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:26:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:27:15.783 [DEBUG] [Thread-169824] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:27:15.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:27:15.876 [DEBUG] [Thread-169827] [transport.py] [_log()] starting thread (client mode): 0xae52e140
2026-04-11T12:27:15.876 [DEBUG] [Thread-169827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:27:15.890 [DEBUG] [Thread-169827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:27:15.891 [INFO] [Thread-169827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:27:15.898 [DEBUG] [Thread-169827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:27:15.898 [DEBUG] [Thread-169827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:27:15.898 [DEBUG] [Thread-169827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:27:15.898 [DEBUG] [Thread-169827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:15.898 [DEBUG] [Thread-169827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] client lang: <none>
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] server lang: <none>
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] kex follows: False
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:27:15.899 [DEBUG] [Thread-169827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:27:15.900 [DEBUG] [Thread-169827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:27:15.900 [DEBUG] [Thread-169827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:27:15.900 [DEBUG] [Thread-169827] [transport.py] [_log()] Compression: none
2026-04-11T12:27:15.900 [DEBUG] [Thread-169827] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:27:15.955 [DEBUG] [Thread-169827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:27:15.956 [DEBUG] [Thread-169827] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:27:15.957 [DEBUG] [Thread-169827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:27:15.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:27:15.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:27:16.011 [DEBUG] [Thread-169827] [transport.py] [_log()] userauth is OK
2026-04-11T12:27:16.012 [DEBUG] [Thread-169827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:27:16.021 [DEBUG] [Thread-169827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:27:16.021 [DEBUG] [Thread-169827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:27:16.021 [DEBUG] [Thread-169827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:27:16.041 [INFO] [Thread-169827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:27:16.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:27:16.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:27:16.875 [DEBUG] [Thread-169827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:27:16.876 [DEBUG] [Thread-169827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:27:16.924 [DEBUG] [Thread-169827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:27:16.924 [DEBUG] [Thread-169827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:27:16.933 [DEBUG] [Thread-169827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:27:16.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:27:16.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:27:16.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-04-11T12:27:16.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:27:16.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:27:16.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:27:16.970 [DEBUG] [Thread-169827] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:27:18.454 [DEBUG] [Thread-169829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:33.508 [DEBUG] [Thread-169830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:46.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:27:46.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:27: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-04-11T12:27:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 27, 13), 0.04188, 99.6878, 0.0, 21.3329, 13.8796, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:27:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:27:13
2026-04-11T12:27:48.545 [DEBUG] [Thread-169831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:27:48.803 [DEBUG] [Thread-169832] [transport.py] [_log()] starting thread (client mode): 0xae52c6d0
2026-04-11T12:27:48.803 [DEBUG] [Thread-169832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:27:48.827 [DEBUG] [Thread-169832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:27:48.828 [INFO] [Thread-169832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:27:48.830 [DEBUG] [Thread-169832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] client lang: <none>
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] server lang: <none>
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] kex follows: False
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] Compression: none
2026-04-11T12:27:48.831 [DEBUG] [Thread-169832] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:27:48.851 [DEBUG] [Thread-169832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:27:48.852 [DEBUG] [Thread-169832] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:27:48.852 [DEBUG] [Thread-169832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:27:48.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:27:48.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:27:48.893 [DEBUG] [Thread-169832] [transport.py] [_log()] userauth is OK
2026-04-11T12:27:48.893 [DEBUG] [Thread-169832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:27:48.893 [DEBUG] [Thread-169832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:27:48.893 [DEBUG] [Thread-169832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:27:48.893 [DEBUG] [Thread-169832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:27:48.927 [INFO] [Thread-169832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:27:48.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:27:49.710 [DEBUG] [Thread-169832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:27:49.711 [DEBUG] [Thread-169832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:27:49.711 [DEBUG] [Thread-169832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:27:49.751 [DEBUG] [Thread-169832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:27:49.751 [DEBUG] [Thread-169832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:27:49.754 [DEBUG] [Thread-169832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:27:49.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:27:49.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:27:49.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:27:49.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:27:49.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:27:49.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:27:49.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:27:49.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:27:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:27:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.435536 -999.00  +13.70  24.34     97  +13.20 1 3 1 3 1   888    0 0.40 -0.41 ----- 24.1 24.3 59.8 28.3 15.8 0.5 15.8 0.0 15.8 -0.1 16.0 0.1
2026-04-11T12:27:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:27:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:27:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.435536
2026-04-11T12:27:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:27:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:27:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:27:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:27:49.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:27:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:27:13', tmtdew=0.04188, humidity=99.6878, cloud=0.0, wind=21.3329, temperature=13.8796, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:27:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:27:49.775 [DEBUG] [Thread-169832] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:27:49.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:27:49.867 [DEBUG] [Thread-169835] [transport.py] [_log()] starting thread (client mode): 0xae52fa60
2026-04-11T12:27:49.867 [DEBUG] [Thread-169835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:27:49.882 [DEBUG] [Thread-169835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:27:49.882 [INFO] [Thread-169835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:27:49.890 [DEBUG] [Thread-169835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:27:49.890 [DEBUG] [Thread-169835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:27:49.890 [DEBUG] [Thread-169835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:27:49.890 [DEBUG] [Thread-169835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:49.890 [DEBUG] [Thread-169835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:27:49.890 [DEBUG] [Thread-169835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] client lang: <none>
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] server lang: <none>
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] kex follows: False
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:27:49.891 [DEBUG] [Thread-169835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:27:49.892 [DEBUG] [Thread-169835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:27:49.892 [DEBUG] [Thread-169835] [transport.py] [_log()] Compression: none
2026-04-11T12:27:49.892 [DEBUG] [Thread-169835] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:27:49.950 [DEBUG] [Thread-169835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:27:49.950 [DEBUG] [Thread-169835] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:27:49.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:27:49.951 [DEBUG] [Thread-169835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:27:49.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:27:50.009 [DEBUG] [Thread-169835] [transport.py] [_log()] userauth is OK
2026-04-11T12:27:50.009 [DEBUG] [Thread-169835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:27:50.009 [DEBUG] [Thread-169835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:27:50.009 [DEBUG] [Thread-169835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:27:50.010 [DEBUG] [Thread-169835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:27:50.028 [INFO] [Thread-169835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:27:50.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:27:50.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:27:50.868 [DEBUG] [Thread-169835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:27:50.868 [DEBUG] [Thread-169835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:27:50.916 [DEBUG] [Thread-169835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:27:50.916 [DEBUG] [Thread-169835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:27:50.926 [DEBUG] [Thread-169835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:27:50.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:27:50.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:27:50.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:27:50.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:27:50.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:27:50.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:27:50.963 [DEBUG] [Thread-169835] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:27:53.464 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:27:53.465 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:03.581 [DEBUG] [Thread-169837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:04.972 [DEBUG] [Thread-169838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:18.634 [DEBUG] [Thread-169839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:20.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:28:20.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:28:20.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:28:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 27, 49), 0.08375, 99.3755, 0.0, 25.3699, 14.5924, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:28:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:27:49
2026-04-11T12:28:22.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:28:22.843 [DEBUG] [Thread-169840] [transport.py] [_log()] starting thread (client mode): 0xae5e5300
2026-04-11T12:28:22.843 [DEBUG] [Thread-169840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:28:22.858 [DEBUG] [Thread-169840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:28:22.858 [INFO] [Thread-169840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:28:22.861 [DEBUG] [Thread-169840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] client lang: <none>
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] server lang: <none>
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] kex follows: False
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] Compression: none
2026-04-11T12:28:22.862 [DEBUG] [Thread-169840] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:28:22.877 [DEBUG] [Thread-169840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:28:22.878 [DEBUG] [Thread-169840] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:28:22.878 [DEBUG] [Thread-169840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:28:22.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:28:22.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:28:22.881 [DEBUG] [Thread-169840] [transport.py] [_log()] userauth is OK
2026-04-11T12:28:22.881 [DEBUG] [Thread-169840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:28:22.881 [DEBUG] [Thread-169840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:28:22.881 [DEBUG] [Thread-169840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:28:22.881 [DEBUG] [Thread-169840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:28:22.905 [INFO] [Thread-169840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:28:22.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:28:23.672 [DEBUG] [Thread-169840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:28:23.672 [DEBUG] [Thread-169840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:28:23.673 [DEBUG] [Thread-169840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:28:23.713 [DEBUG] [Thread-169840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:28:23.713 [DEBUG] [Thread-169840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:28:23.717 [DEBUG] [Thread-169840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:28:23.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:28:23.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:28:23.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:28:23.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:28:23.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:28:23.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:28:23.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:28:23.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:28:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:28:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.435883 -999.00  +13.60  18.36     97  +13.10 1 3 1 3 1   888    0 0.42 0.03 ----- 18.8 18.4 51.5 28.6 15.7 -0.1 15.8 -0.2 15.8 -0.2 16.0 0.3
2026-04-11T12:28:23.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:28:23.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:28:23.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.435883
2026-04-11T12:28:23.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:28:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:28:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:28:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:28:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:28:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:27:49', tmtdew=0.08375, humidity=99.3755, cloud=0.0, wind=25.3699, temperature=14.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:27:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:28:23.740 [DEBUG] [Thread-169840] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:28:23.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:28:23.845 [DEBUG] [Thread-169843] [transport.py] [_log()] starting thread (client mode): 0xae5e6c50
2026-04-11T12:28:23.845 [DEBUG] [Thread-169843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:28:23.860 [DEBUG] [Thread-169843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:28:23.860 [INFO] [Thread-169843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:28:23.867 [DEBUG] [Thread-169843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:28:23.867 [DEBUG] [Thread-169843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:28:23.867 [DEBUG] [Thread-169843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] client lang: <none>
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] server lang: <none>
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] kex follows: False
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] Compression: none
2026-04-11T12:28:23.868 [DEBUG] [Thread-169843] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:28:23.931 [DEBUG] [Thread-169843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:28:23.932 [DEBUG] [Thread-169843] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:28:23.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:28:23.933 [DEBUG] [Thread-169843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:28:23.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:28:23.990 [DEBUG] [Thread-169843] [transport.py] [_log()] userauth is OK
2026-04-11T12:28:23.991 [DEBUG] [Thread-169843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:28:23.991 [DEBUG] [Thread-169843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:28:23.991 [DEBUG] [Thread-169843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:28:23.991 [DEBUG] [Thread-169843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:28:24.010 [INFO] [Thread-169843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:28:24.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:28:24.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:28:24.920 [DEBUG] [Thread-169843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:28:24.920 [DEBUG] [Thread-169843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:28:24.968 [DEBUG] [Thread-169843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:28:24.968 [DEBUG] [Thread-169843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:28:24.977 [DEBUG] [Thread-169843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:28:24.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:28:24.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-04-11T12:28:24.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-04-11T12:28:25.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:28:25.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:28:25.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:28:25.011 [DEBUG] [Thread-169843] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:28:33.670 [DEBUG] [Thread-169845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:48.728 [DEBUG] [Thread-169846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:53.606 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:53.607 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:28:55.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:28:55.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:28:55.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-04-11T12:28:56.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 28, 24), 0.04448, 99.671, 0.0, 22.0907, 13.9461, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:28:56.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:28:24
2026-04-11T12:28:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:28:56.765 [DEBUG] [Thread-169847] [transport.py] [_log()] starting thread (client mode): 0xb0f42620
2026-04-11T12:28:56.765 [DEBUG] [Thread-169847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:28:56.779 [DEBUG] [Thread-169847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:28:56.780 [INFO] [Thread-169847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] client lang: <none>
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] server lang: <none>
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] kex follows: False
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] Compression: none
2026-04-11T12:28:56.783 [DEBUG] [Thread-169847] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:28:56.798 [DEBUG] [Thread-169847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:28:56.799 [DEBUG] [Thread-169847] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:28:56.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:28:56.800 [DEBUG] [Thread-169847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:28:56.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:28:56.801 [DEBUG] [Thread-169847] [transport.py] [_log()] userauth is OK
2026-04-11T12:28:56.802 [DEBUG] [Thread-169847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:28:56.802 [DEBUG] [Thread-169847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:28:56.802 [DEBUG] [Thread-169847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:28:56.802 [DEBUG] [Thread-169847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:28:56.826 [INFO] [Thread-169847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:28:56.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:28:57.603 [DEBUG] [Thread-169847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:28:57.603 [DEBUG] [Thread-169847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:28:57.604 [DEBUG] [Thread-169847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:28:57.644 [DEBUG] [Thread-169847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:28:57.644 [DEBUG] [Thread-169847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:28:57.647 [DEBUG] [Thread-169847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:28:57.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:28:57.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:28:57.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:28:57.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:28:57.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:28:57.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:28:57.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:28:57.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:28:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:28:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.436230 -999.00  +13.80  17.90     97  +13.40 1 3 1 3 1   888    0 0.42 0.08 ----- 22.4 17.9 71.6 26.0 15.8 0.7 15.8 0.3 15.8 0.0 16.0 0.7
2026-04-11T12:28:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:28:57.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:28:57.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.436230
2026-04-11T12:28:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:28:57.674 [DEBUG] [Thread-169847] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:28:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:28:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:28:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:28:57.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:28:57.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:28:24', tmtdew=0.04448, humidity=99.671, cloud=0.0, wind=22.0907, temperature=13.9461, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:28:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:28:57.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:28:57.771 [DEBUG] [Thread-169850] [transport.py] [_log()] starting thread (client mode): 0xb0f41990
2026-04-11T12:28:57.771 [DEBUG] [Thread-169850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:28:57.785 [DEBUG] [Thread-169850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:28:57.785 [INFO] [Thread-169850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:28:57.793 [DEBUG] [Thread-169850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:28:57.793 [DEBUG] [Thread-169850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:28:57.793 [DEBUG] [Thread-169850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:28:57.793 [DEBUG] [Thread-169850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:57.793 [DEBUG] [Thread-169850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:28:57.793 [DEBUG] [Thread-169850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] client lang: <none>
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] server lang: <none>
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] kex follows: False
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] Compression: none
2026-04-11T12:28:57.794 [DEBUG] [Thread-169850] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:28:57.850 [DEBUG] [Thread-169850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:28:57.852 [DEBUG] [Thread-169850] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:28:57.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:28:57.852 [DEBUG] [Thread-169850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:28:57.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:28:57.907 [DEBUG] [Thread-169850] [transport.py] [_log()] userauth is OK
2026-04-11T12:28:57.907 [DEBUG] [Thread-169850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:28:57.907 [DEBUG] [Thread-169850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:28:57.908 [DEBUG] [Thread-169850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:28:57.908 [DEBUG] [Thread-169850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:28:57.930 [INFO] [Thread-169850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:28:57.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:28:57.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:28:58.734 [DEBUG] [Thread-169850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:28:58.734 [DEBUG] [Thread-169850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:28:58.782 [DEBUG] [Thread-169850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:28:58.782 [DEBUG] [Thread-169850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:28:58.792 [DEBUG] [Thread-169850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:28:58.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:28: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-04-11T12:28:58.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-04-11T12:28:58.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:28:58.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:28:58.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:28:58.828 [DEBUG] [Thread-169850] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:29:03.767 [DEBUG] [Thread-169852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:29:05.005 [DEBUG] [Thread-169853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:29:18.819 [DEBUG] [Thread-169854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:29:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:29:28.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:29:28.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-04-11T12:29:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 28, 59), 0.0919, 99.6876, 0.0, 19.4623, 13.9795, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:29:30.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:28:59
2026-04-11T12:29:30.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:29:30.704 [DEBUG] [Thread-169855] [transport.py] [_log()] starting thread (client mode): 0xae5e6440
2026-04-11T12:29:30.704 [DEBUG] [Thread-169855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:29:30.726 [DEBUG] [Thread-169855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:29:30.726 [INFO] [Thread-169855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:29:30.729 [DEBUG] [Thread-169855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:29:30.729 [DEBUG] [Thread-169855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:29:30.729 [DEBUG] [Thread-169855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] client lang: <none>
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] server lang: <none>
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] kex follows: False
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:29:30.730 [DEBUG] [Thread-169855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:29:30.731 [DEBUG] [Thread-169855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:29:30.731 [DEBUG] [Thread-169855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:29:30.731 [DEBUG] [Thread-169855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:29:30.731 [DEBUG] [Thread-169855] [transport.py] [_log()] Compression: none
2026-04-11T12:29:30.731 [DEBUG] [Thread-169855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:29:30.752 [DEBUG] [Thread-169855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:29:30.752 [DEBUG] [Thread-169855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:29:30.753 [DEBUG] [Thread-169855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:29:30.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:29:30.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:29:30.755 [DEBUG] [Thread-169855] [transport.py] [_log()] userauth is OK
2026-04-11T12:29:30.755 [DEBUG] [Thread-169855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:29:30.755 [DEBUG] [Thread-169855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:29:30.755 [DEBUG] [Thread-169855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:29:30.755 [DEBUG] [Thread-169855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:29:30.779 [INFO] [Thread-169855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:29:30.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:29:31.561 [DEBUG] [Thread-169855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:29:31.562 [DEBUG] [Thread-169855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:29:31.562 [DEBUG] [Thread-169855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:29:31.602 [DEBUG] [Thread-169855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:29:31.602 [DEBUG] [Thread-169855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:29:31.605 [DEBUG] [Thread-169855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:29:31.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:29:31.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:29:31.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:29:31.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:29:31.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:29:31.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:29:31.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:29:31.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:29:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:29:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.436577 -999.00  +13.90  18.93     97  +13.50 1 3 1 3 1   888    0 0.41 -0.12 ----- 19.6 18.9 64.6 27.0 15.8 0.0 15.8 0.3 15.8 -0.1 16.1 0.9
2026-04-11T12:29:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:29:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:29:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.436577
2026-04-11T12:29:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:29:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:29:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:29:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:29:31.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:29:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:28:59', tmtdew=0.0919, humidity=99.6876, cloud=0.0, wind=19.4623, temperature=13.9795, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:28:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:29:31.631 [DEBUG] [Thread-169855] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:29:31.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:29:31.726 [DEBUG] [Thread-169858] [transport.py] [_log()] starting thread (client mode): 0xae5e76a0
2026-04-11T12:29:31.726 [DEBUG] [Thread-169858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:29:31.742 [DEBUG] [Thread-169858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:29:31.742 [INFO] [Thread-169858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] client lang: <none>
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] server lang: <none>
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] kex follows: False
2026-04-11T12:29:31.749 [DEBUG] [Thread-169858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:29:31.750 [DEBUG] [Thread-169858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:29:31.750 [DEBUG] [Thread-169858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:29:31.750 [DEBUG] [Thread-169858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:29:31.750 [DEBUG] [Thread-169858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:29:31.750 [DEBUG] [Thread-169858] [transport.py] [_log()] Compression: none
2026-04-11T12:29:31.750 [DEBUG] [Thread-169858] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:29:31.809 [DEBUG] [Thread-169858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:29:31.809 [DEBUG] [Thread-169858] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:29:31.810 [DEBUG] [Thread-169858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:29:31.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:29:31.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:29:31.865 [DEBUG] [Thread-169858] [transport.py] [_log()] userauth is OK
2026-04-11T12:29:31.865 [DEBUG] [Thread-169858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:29:31.865 [DEBUG] [Thread-169858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:29:31.865 [DEBUG] [Thread-169858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:29:31.865 [DEBUG] [Thread-169858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:29:31.884 [INFO] [Thread-169858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:29:31.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:29:31.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:29:32.782 [DEBUG] [Thread-169858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:29:32.782 [DEBUG] [Thread-169858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:29:32.830 [DEBUG] [Thread-169858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:29:32.830 [DEBUG] [Thread-169858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:29:32.838 [DEBUG] [Thread-169858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:29:32.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:29:32.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-04-11T12:29:32.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-04-11T12:29:32.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:29:32.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:29:32.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:29:32.871 [DEBUG] [Thread-169858] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:29:33.856 [DEBUG] [Thread-169860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:29:48.918 [DEBUG] [Thread-169861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:29:53.748 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:29:53.749 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:02.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:30:02.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:30:02.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-04-11T12:30:03.952 [DEBUG] [Thread-169862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:04.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 29, 35), 0.08372, 99.3758, 0.0, 15.9149, 14.46, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:30:04.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:29:35
2026-04-11T12:30:04.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:30:04.694 [DEBUG] [Thread-169863] [transport.py] [_log()] starting thread (client mode): 0xae52ff70
2026-04-11T12:30:04.694 [DEBUG] [Thread-169863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:30:04.714 [DEBUG] [Thread-169863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:30:04.714 [INFO] [Thread-169863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] client lang: <none>
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] server lang: <none>
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] kex follows: False
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:30:04.717 [DEBUG] [Thread-169863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:30:04.718 [DEBUG] [Thread-169863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:30:04.718 [DEBUG] [Thread-169863] [transport.py] [_log()] Compression: none
2026-04-11T12:30:04.718 [DEBUG] [Thread-169863] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:30:04.734 [DEBUG] [Thread-169863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:30:04.734 [DEBUG] [Thread-169863] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:30:04.735 [DEBUG] [Thread-169863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:30:04.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:30:04.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:30:04.738 [DEBUG] [Thread-169863] [transport.py] [_log()] userauth is OK
2026-04-11T12:30:04.738 [DEBUG] [Thread-169863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:30:04.738 [DEBUG] [Thread-169863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:30:04.738 [DEBUG] [Thread-169863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:30:04.738 [DEBUG] [Thread-169863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:30:04.756 [INFO] [Thread-169863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:30:04.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:30:05.061 [DEBUG] [Thread-169865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:05.938 [DEBUG] [Thread-169863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:30:05.938 [DEBUG] [Thread-169863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:30:05.938 [DEBUG] [Thread-169863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:30:05.979 [DEBUG] [Thread-169863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:30:05.979 [DEBUG] [Thread-169863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:30:05.982 [DEBUG] [Thread-169863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:30:05.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:30:05.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:30:05.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:30:06.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:30:06.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:30:06.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:30:06.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:30:06.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:30:06.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:30:06.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.436924 -999.00  +14.00  19.56     97  +13.60 1 3 1 3 1   888    0 0.41 -0.33 ----- 20.1 19.6 59.2 24.8 15.9 0.9 15.8 0.0 15.9 0.0 16.1 0.9
2026-04-11T12:30:06.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:30:06.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:30:06.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.436924
2026-04-11T12:30:06.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:30:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:30:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:30:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:30:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:30:06.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:29:35', tmtdew=0.08372, humidity=99.3758, cloud=0.0, wind=15.9149, temperature=14.46, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:29:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:30:06.012 [DEBUG] [Thread-169863] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:30:06.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:30:06.105 [DEBUG] [Thread-169867] [transport.py] [_log()] starting thread (client mode): 0xae52e140
2026-04-11T12:30:06.105 [DEBUG] [Thread-169867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:30:06.120 [DEBUG] [Thread-169867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:30:06.120 [INFO] [Thread-169867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:30:06.127 [DEBUG] [Thread-169867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:30:06.128 [DEBUG] [Thread-169867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] client lang: <none>
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] server lang: <none>
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] kex follows: False
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:30:06.129 [DEBUG] [Thread-169867] [transport.py] [_log()] Compression: none
2026-04-11T12:30:06.130 [DEBUG] [Thread-169867] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:30:06.187 [DEBUG] [Thread-169867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:30:06.188 [DEBUG] [Thread-169867] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:30:06.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:30:06.189 [DEBUG] [Thread-169867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:30:06.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:30:06.243 [DEBUG] [Thread-169867] [transport.py] [_log()] userauth is OK
2026-04-11T12:30:06.243 [DEBUG] [Thread-169867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:30:06.243 [DEBUG] [Thread-169867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:30:06.243 [DEBUG] [Thread-169867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:30:06.243 [DEBUG] [Thread-169867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:30:06.261 [INFO] [Thread-169867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:30:06.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:30:06.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:30:07.109 [DEBUG] [Thread-169867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:30:07.109 [DEBUG] [Thread-169867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:30:07.157 [DEBUG] [Thread-169867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:30:07.157 [DEBUG] [Thread-169867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:30:07.167 [DEBUG] [Thread-169867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:30:07.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:30:07.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:30:07.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:30:07.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:30:07.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:30:07.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:30:07.204 [DEBUG] [Thread-169867] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:30:18.987 [DEBUG] [Thread-169869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:34.048 [DEBUG] [Thread-169870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:30:37.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:30:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:30:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 30, 11), 0.08411, 99.7377, 0.0, 19.1088, 14.1463, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:30:38.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:30:11
2026-04-11T12:30:38.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:30:39.073 [DEBUG] [Thread-169871] [transport.py] [_log()] starting thread (client mode): 0xae52fa00
2026-04-11T12:30:39.074 [DEBUG] [Thread-169871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:30:39.094 [DEBUG] [Thread-169871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:30:39.094 [INFO] [Thread-169871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:30:39.097 [DEBUG] [Thread-169871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:30:39.097 [DEBUG] [Thread-169871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:30:39.097 [DEBUG] [Thread-169871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] client lang: <none>
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] server lang: <none>
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] kex follows: False
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] Compression: none
2026-04-11T12:30:39.098 [DEBUG] [Thread-169871] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:30:39.115 [DEBUG] [Thread-169871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:30:39.115 [DEBUG] [Thread-169871] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:30:39.116 [DEBUG] [Thread-169871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:30:39.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:30:39.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:30:39.117 [DEBUG] [Thread-169871] [transport.py] [_log()] userauth is OK
2026-04-11T12:30:39.117 [DEBUG] [Thread-169871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:30:39.117 [DEBUG] [Thread-169871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:30:39.117 [DEBUG] [Thread-169871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:30:39.117 [DEBUG] [Thread-169871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:30:39.139 [INFO] [Thread-169871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:30:39.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:30:39.941 [DEBUG] [Thread-169871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:30:39.941 [DEBUG] [Thread-169871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:30:39.942 [DEBUG] [Thread-169871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:30:39.982 [DEBUG] [Thread-169871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:30:39.982 [DEBUG] [Thread-169871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:30:39.985 [DEBUG] [Thread-169871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:30:39.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:30:39.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:30:39.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:30:39.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:30:40.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:30:40.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:30:40.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:30:40.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:30:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:30:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.437272 -999.00  +14.00  19.63     97  +13.60 1 3 1 3 1   888    0 0.41 -0.37 ----- 18.9 19.6 65.2 23.2 15.9 0.7 15.9 0.2 15.9 -0.3 16.1 0.7
2026-04-11T12:30:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:30:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:30:40.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.437272
2026-04-11T12:30:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:30:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:30:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:30:40.007 [DEBUG] [Thread-169871] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:30:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:30:40.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:30:40.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:30:11', tmtdew=0.08411, humidity=99.7377, cloud=0.0, wind=19.1088, temperature=14.1463, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:29:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:30:40.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:30:40.106 [DEBUG] [Thread-169874] [transport.py] [_log()] starting thread (client mode): 0xb0f43700
2026-04-11T12:30:40.106 [DEBUG] [Thread-169874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:30:40.120 [DEBUG] [Thread-169874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:30:40.120 [INFO] [Thread-169874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:30:40.127 [DEBUG] [Thread-169874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] client lang: <none>
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] server lang: <none>
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] kex follows: False
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:30:40.128 [DEBUG] [Thread-169874] [transport.py] [_log()] Compression: none
2026-04-11T12:30:40.129 [DEBUG] [Thread-169874] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:30:40.187 [DEBUG] [Thread-169874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:30:40.187 [DEBUG] [Thread-169874] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:30:40.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:30:40.188 [DEBUG] [Thread-169874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:30:40.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:30:40.243 [DEBUG] [Thread-169874] [transport.py] [_log()] userauth is OK
2026-04-11T12:30:40.244 [DEBUG] [Thread-169874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:30:40.244 [DEBUG] [Thread-169874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:30:40.244 [DEBUG] [Thread-169874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:30:40.244 [DEBUG] [Thread-169874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:30:40.262 [INFO] [Thread-169874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:30:40.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:30:40.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:30:41.081 [DEBUG] [Thread-169874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:30:41.081 [DEBUG] [Thread-169874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:30:41.130 [DEBUG] [Thread-169874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:30:41.131 [DEBUG] [Thread-169874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:30:41.139 [DEBUG] [Thread-169874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:30:41.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:30:41.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-04-11T12:30:41.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-04-11T12:30:41.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:30:41.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:30:41.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:30:41.174 [DEBUG] [Thread-169874] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:30:49.086 [DEBUG] [Thread-169876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:53.891 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:30:53.892 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:04.139 [DEBUG] [Thread-169877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:05.095 [DEBUG] [Thread-169878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:11.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:31:11.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:31:11.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-04-11T12:31:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 30, 46), 0.07873, 99.4078, 0.0, 18.949, 14.5256, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:31:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:30:46
2026-04-11T12:31:12.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:31:13.031 [DEBUG] [Thread-169879] [transport.py] [_log()] starting thread (client mode): 0xae52c5b0
2026-04-11T12:31:13.031 [DEBUG] [Thread-169879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:31:13.051 [DEBUG] [Thread-169879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:31:13.051 [INFO] [Thread-169879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:31:13.055 [DEBUG] [Thread-169879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:31:13.055 [DEBUG] [Thread-169879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:31:13.055 [DEBUG] [Thread-169879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:31:13.055 [DEBUG] [Thread-169879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] client lang: <none>
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] server lang: <none>
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] kex follows: False
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:31:13.056 [DEBUG] [Thread-169879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:31:13.057 [DEBUG] [Thread-169879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:31:13.057 [DEBUG] [Thread-169879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:31:13.057 [DEBUG] [Thread-169879] [transport.py] [_log()] Compression: none
2026-04-11T12:31:13.057 [DEBUG] [Thread-169879] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:31:13.076 [DEBUG] [Thread-169879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:31:13.076 [DEBUG] [Thread-169879] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:31:13.077 [DEBUG] [Thread-169879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:31:13.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:31:13.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:31:13.079 [DEBUG] [Thread-169879] [transport.py] [_log()] userauth is OK
2026-04-11T12:31:13.079 [DEBUG] [Thread-169879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:31:13.079 [DEBUG] [Thread-169879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:31:13.079 [DEBUG] [Thread-169879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:31:13.079 [DEBUG] [Thread-169879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:31:13.104 [INFO] [Thread-169879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:31:13.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:31:13.898 [DEBUG] [Thread-169879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:31:13.898 [DEBUG] [Thread-169879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:31:13.899 [DEBUG] [Thread-169879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:31:13.939 [DEBUG] [Thread-169879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:31:13.939 [DEBUG] [Thread-169879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:31:13.943 [DEBUG] [Thread-169879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:31:13.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:31:13.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:31:13.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:31:13.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:31:13.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:31:13.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:31:13.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:31:13.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:31:13.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:31:13.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.437619 -999.00  +13.90  20.86     97  +13.50 1 3 1 3 1   888    0 0.41 -0.47 ----- 22.1 20.9 67.0 23.9 15.8 0.2 15.9 0.2 15.8 -0.5 16.1 0.4
2026-04-11T12:31:13.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:31:13.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:31:13.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.437619
2026-04-11T12:31:13.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:31:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:31:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:31:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:31:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:31:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:30:46', tmtdew=0.07873, humidity=99.4078, cloud=0.0, wind=18.949, temperature=14.5256, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:30:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:31:13.973 [DEBUG] [Thread-169879] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:31:14.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:31:14.074 [DEBUG] [Thread-169882] [transport.py] [_log()] starting thread (client mode): 0xae5e76a0
2026-04-11T12:31:14.074 [DEBUG] [Thread-169882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:31:14.088 [DEBUG] [Thread-169882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:31:14.089 [INFO] [Thread-169882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:31:14.096 [DEBUG] [Thread-169882] [transport.py] [_log()] client lang: <none>
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] server lang: <none>
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] kex follows: False
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] Compression: none
2026-04-11T12:31:14.097 [DEBUG] [Thread-169882] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:31:14.157 [DEBUG] [Thread-169882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:31:14.158 [DEBUG] [Thread-169882] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:31:14.158 [DEBUG] [Thread-169882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:31:14.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:31:14.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:31:14.213 [DEBUG] [Thread-169882] [transport.py] [_log()] userauth is OK
2026-04-11T12:31:14.213 [DEBUG] [Thread-169882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:31:14.213 [DEBUG] [Thread-169882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:31:14.213 [DEBUG] [Thread-169882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:31:14.213 [DEBUG] [Thread-169882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:31:14.232 [INFO] [Thread-169882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:31:14.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:31:14.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:31:15.079 [DEBUG] [Thread-169882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:31:15.080 [DEBUG] [Thread-169882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:31:15.127 [DEBUG] [Thread-169882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:31:15.127 [DEBUG] [Thread-169882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:31:15.136 [DEBUG] [Thread-169882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:31:15.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:31:15.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-04-11T12:31:15.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-04-11T12:31:15.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:31:15.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:31:15.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:31:15.173 [DEBUG] [Thread-169882] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:31:19.177 [DEBUG] [Thread-169884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:34.231 [DEBUG] [Thread-169885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:45.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:31:45.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:31:45.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-04-11T12:31:46.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 31, 21), 0.04195, 99.6873, 0.0, 15.6337, 13.9965, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:31:46.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:31:21
2026-04-11T12:31:46.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:31:47.048 [DEBUG] [Thread-169886] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-11T12:31:47.048 [DEBUG] [Thread-169886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:31:47.065 [DEBUG] [Thread-169886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:31:47.065 [INFO] [Thread-169886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] client lang: <none>
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] server lang: <none>
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] kex follows: False
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] Compression: none
2026-04-11T12:31:47.067 [DEBUG] [Thread-169886] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:31:47.078 [DEBUG] [Thread-169886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:31:47.078 [DEBUG] [Thread-169886] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:31:47.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:31:47.079 [DEBUG] [Thread-169886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:31:47.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:31:47.081 [DEBUG] [Thread-169886] [transport.py] [_log()] userauth is OK
2026-04-11T12:31:47.081 [DEBUG] [Thread-169886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:31:47.082 [DEBUG] [Thread-169886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:31:47.082 [DEBUG] [Thread-169886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:31:47.082 [DEBUG] [Thread-169886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:31:47.103 [INFO] [Thread-169886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:31:47.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:31:47.924 [DEBUG] [Thread-169886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:31:47.925 [DEBUG] [Thread-169886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:31:47.925 [DEBUG] [Thread-169886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:31:47.964 [DEBUG] [Thread-169886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:31:47.965 [DEBUG] [Thread-169886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:31:47.967 [DEBUG] [Thread-169886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:31:47.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:31:47.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:31:47.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:31:47.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:31:47.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:31:47.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:31:47.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:31:47.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:31:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:31:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.438313 -999.00  +13.80  17.09     97  +13.40 1 3 1 3 1   888    0 0.41 -0.37 ----- 18.3 17.1 45.6 20.6 15.7 0.4 15.8 -0.0 15.8 0.0 15.9 -0.1
2026-04-11T12:31:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:31:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:31:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.438313
2026-04-11T12:31:47.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:31:47.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:31:47.987 [DEBUG] [Thread-169886] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:31:47.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:31:47.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:31:47.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:31:47.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:31:21', tmtdew=0.04195, humidity=99.6873, cloud=0.0, wind=15.6337, temperature=13.9965, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:31:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:31:48.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:31:48.084 [DEBUG] [Thread-169889] [transport.py] [_log()] starting thread (client mode): 0xae52ed40
2026-04-11T12:31:48.084 [DEBUG] [Thread-169889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:31:48.098 [DEBUG] [Thread-169889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:31:48.099 [INFO] [Thread-169889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:31:48.106 [DEBUG] [Thread-169889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] client lang: <none>
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] server lang: <none>
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] kex follows: False
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] Compression: none
2026-04-11T12:31:48.107 [DEBUG] [Thread-169889] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:31:48.165 [DEBUG] [Thread-169889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:31:48.166 [DEBUG] [Thread-169889] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:31:48.166 [DEBUG] [Thread-169889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:31:48.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:31:48.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:31:48.222 [DEBUG] [Thread-169889] [transport.py] [_log()] userauth is OK
2026-04-11T12:31:48.223 [DEBUG] [Thread-169889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:31:48.223 [DEBUG] [Thread-169889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:31:48.223 [DEBUG] [Thread-169889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:31:48.223 [DEBUG] [Thread-169889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:31:48.241 [INFO] [Thread-169889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:31:48.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:31:48.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:31:49.114 [DEBUG] [Thread-169889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:31:49.114 [DEBUG] [Thread-169889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:31:49.162 [DEBUG] [Thread-169889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:31:49.163 [DEBUG] [Thread-169889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:31:49.172 [DEBUG] [Thread-169889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:31:49.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:31:49.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-04-11T12:31: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-04-11T12:31:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:31:49.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:31:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:31:49.209 [DEBUG] [Thread-169889] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:31:49.270 [DEBUG] [Thread-169891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:54.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:31:54.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:04.324 [DEBUG] [Thread-169892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:05.127 [DEBUG] [Thread-169893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:19.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:32:19.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:32:19.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:32:19.367 [DEBUG] [Thread-169894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:20.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 31, 57), 0.039365, 99.7039, 0.0, 17.5388, 13.9959, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:32:20.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:31:57
2026-04-11T12:32:20.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:32:21.030 [DEBUG] [Thread-169895] [transport.py] [_log()] starting thread (client mode): 0xae5b2b30
2026-04-11T12:32:21.030 [DEBUG] [Thread-169895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:32:21.042 [DEBUG] [Thread-169895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:32:21.042 [INFO] [Thread-169895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] client lang: <none>
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] server lang: <none>
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] kex follows: False
2026-04-11T12:32:21.046 [DEBUG] [Thread-169895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:32:21.047 [DEBUG] [Thread-169895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:32:21.047 [DEBUG] [Thread-169895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:32:21.047 [DEBUG] [Thread-169895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:32:21.047 [DEBUG] [Thread-169895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:32:21.047 [DEBUG] [Thread-169895] [transport.py] [_log()] Compression: none
2026-04-11T12:32:21.047 [DEBUG] [Thread-169895] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:32:21.065 [DEBUG] [Thread-169895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:32:21.066 [DEBUG] [Thread-169895] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:32:21.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:32:21.067 [DEBUG] [Thread-169895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:32:21.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:32:21.069 [DEBUG] [Thread-169895] [transport.py] [_log()] userauth is OK
2026-04-11T12:32:21.070 [DEBUG] [Thread-169895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:32:21.070 [DEBUG] [Thread-169895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:32:21.070 [DEBUG] [Thread-169895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:32:21.070 [DEBUG] [Thread-169895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:32:21.095 [INFO] [Thread-169895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:32:21.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:32:21.909 [DEBUG] [Thread-169895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:32:21.909 [DEBUG] [Thread-169895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:32:21.909 [DEBUG] [Thread-169895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:32:21.950 [DEBUG] [Thread-169895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:32:21.951 [DEBUG] [Thread-169895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:32:21.954 [DEBUG] [Thread-169895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:32:21.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:32:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:32:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:32:21.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:32:21.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:32:21.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:32:21.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:32:21.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:32:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:32:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.438661 -999.00  +14.00  16.28     97  +13.60 1 3 1 3 1   888    0 0.41 -0.54 ----- 16.8 16.3 65.6 19.7 15.7 0.2 15.8 -0.1 15.8 -0.3 15.9 0.2
2026-04-11T12:32:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:32:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:32:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.438661
2026-04-11T12:32:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:32:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:32:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:32:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:32:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:32:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:31:57', tmtdew=0.039365, humidity=99.7039, cloud=0.0, wind=17.5388, temperature=13.9959, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:31:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:32:21.979 [DEBUG] [Thread-169895] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:32:22.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:32:22.083 [DEBUG] [Thread-169898] [transport.py] [_log()] starting thread (client mode): 0xb39c5c90
2026-04-11T12:32:22.083 [DEBUG] [Thread-169898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:32:22.097 [DEBUG] [Thread-169898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:32:22.098 [INFO] [Thread-169898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:32:22.105 [DEBUG] [Thread-169898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:32:22.105 [DEBUG] [Thread-169898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:32:22.105 [DEBUG] [Thread-169898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:32:22.105 [DEBUG] [Thread-169898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:22.105 [DEBUG] [Thread-169898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:22.105 [DEBUG] [Thread-169898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] client lang: <none>
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] server lang: <none>
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] kex follows: False
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] Compression: none
2026-04-11T12:32:22.106 [DEBUG] [Thread-169898] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:32:22.164 [DEBUG] [Thread-169898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:32:22.164 [DEBUG] [Thread-169898] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:32:22.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:32:22.165 [DEBUG] [Thread-169898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:32:22.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:32:22.219 [DEBUG] [Thread-169898] [transport.py] [_log()] userauth is OK
2026-04-11T12:32:22.220 [DEBUG] [Thread-169898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:32:22.220 [DEBUG] [Thread-169898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:32:22.220 [DEBUG] [Thread-169898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:32:22.220 [DEBUG] [Thread-169898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:32:22.238 [INFO] [Thread-169898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:32:22.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:32:22.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:32:23.069 [DEBUG] [Thread-169898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:32:23.069 [DEBUG] [Thread-169898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:32:23.117 [DEBUG] [Thread-169898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:32:23.117 [DEBUG] [Thread-169898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:32:23.126 [DEBUG] [Thread-169898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:32:23.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:32:23.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:32:23.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:32:23.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:32:23.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:32:23.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:32:23.158 [DEBUG] [Thread-169898] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:32:34.407 [DEBUG] [Thread-169900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:49.459 [DEBUG] [Thread-169901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:53.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:32:53.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:32:53.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-04-11T12:32:54.173 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:54.174 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:32:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 32, 32), 0.039375, 99.7039, 0.0, 16.5863, 13.9793, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:32:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:32:32
2026-04-11T12:32:54.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:32:54.993 [DEBUG] [Thread-169902] [transport.py] [_log()] starting thread (client mode): 0xa795d930
2026-04-11T12:32:54.993 [DEBUG] [Thread-169902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:32:55.013 [DEBUG] [Thread-169902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:32:55.014 [INFO] [Thread-169902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:32:55.017 [DEBUG] [Thread-169902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:32:55.017 [DEBUG] [Thread-169902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:32:55.017 [DEBUG] [Thread-169902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] client lang: <none>
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] server lang: <none>
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] kex follows: False
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:32:55.018 [DEBUG] [Thread-169902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:32:55.019 [DEBUG] [Thread-169902] [transport.py] [_log()] Compression: none
2026-04-11T12:32:55.019 [DEBUG] [Thread-169902] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:32:55.035 [DEBUG] [Thread-169902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:32:55.036 [DEBUG] [Thread-169902] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:32:55.037 [DEBUG] [Thread-169902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:32:55.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:32:55.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:32:55.039 [DEBUG] [Thread-169902] [transport.py] [_log()] userauth is OK
2026-04-11T12:32:55.039 [DEBUG] [Thread-169902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:32:55.039 [DEBUG] [Thread-169902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:32:55.039 [DEBUG] [Thread-169902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:32:55.039 [DEBUG] [Thread-169902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:32:55.063 [INFO] [Thread-169902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:32:55.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:32:55.873 [DEBUG] [Thread-169902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:32:55.873 [DEBUG] [Thread-169902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:32:55.874 [DEBUG] [Thread-169902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:32:55.914 [DEBUG] [Thread-169902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:32:55.914 [DEBUG] [Thread-169902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:32:55.917 [DEBUG] [Thread-169902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:32:55.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:32:55.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:32:55.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:32:55.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:32:55.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:32:55.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:32:55.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:32:55.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:32:55.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:32:55.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.439008 -999.00  +14.00  16.48     97  +13.60 1 3 1 3 1   888    0 0.40 -0.84 ----- 19.1 16.5 65.6 22.1 15.7 -0.2 15.8 0.0 15.8 -0.4 15.9 -0.1
2026-04-11T12:32:55.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:32:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:32:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.439008
2026-04-11T12:32:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:32:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:32:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:32:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:32:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:32:55.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:32:32', tmtdew=0.039375, humidity=99.7039, cloud=0.0, wind=16.5863, temperature=13.9793, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:32:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:32:55.937 [DEBUG] [Thread-169902] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:32:56.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:32:56.030 [DEBUG] [Thread-169905] [transport.py] [_log()] starting thread (client mode): 0xae5e44c0
2026-04-11T12:32:56.030 [DEBUG] [Thread-169905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:32:56.044 [DEBUG] [Thread-169905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:32:56.045 [INFO] [Thread-169905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:32:56.052 [DEBUG] [Thread-169905] [transport.py] [_log()] client lang: <none>
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] server lang: <none>
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] kex follows: False
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] Compression: none
2026-04-11T12:32:56.053 [DEBUG] [Thread-169905] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:32:56.120 [DEBUG] [Thread-169905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:32:56.120 [DEBUG] [Thread-169905] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:32:56.121 [DEBUG] [Thread-169905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:32:56.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:32:56.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:32:56.176 [DEBUG] [Thread-169905] [transport.py] [_log()] userauth is OK
2026-04-11T12:32:56.177 [DEBUG] [Thread-169905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:32:56.177 [DEBUG] [Thread-169905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:32:56.177 [DEBUG] [Thread-169905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:32:56.177 [DEBUG] [Thread-169905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:32:56.196 [INFO] [Thread-169905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:32:56.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:32:56.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:32:57.050 [DEBUG] [Thread-169905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:32:57.050 [DEBUG] [Thread-169905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:32:57.098 [DEBUG] [Thread-169905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:32:57.098 [DEBUG] [Thread-169905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:32:57.108 [DEBUG] [Thread-169905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:32:57.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:32:57.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-04-11T12:32:57.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-04-11T12:32:57.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:32:57.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:32:57.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:32:57.145 [DEBUG] [Thread-169905] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:33:04.493 [DEBUG] [Thread-169907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:33:05.159 [DEBUG] [Thread-169908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:33:19.544 [DEBUG] [Thread-169909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:33:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:33:27.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:33:27.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-04-11T12:33:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 33, 8), 0.047125, 99.6541, 0.0, 15.475, 13.8798, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:33:28.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:33:08
2026-04-11T12:33:28.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:33:29.019 [DEBUG] [Thread-169910] [transport.py] [_log()] starting thread (client mode): 0xb39c67a0
2026-04-11T12:33:29.019 [DEBUG] [Thread-169910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:33:29.038 [DEBUG] [Thread-169910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:33:29.038 [INFO] [Thread-169910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:33:29.042 [DEBUG] [Thread-169910] [transport.py] [_log()] client lang: <none>
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] server lang: <none>
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] kex follows: False
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] Compression: none
2026-04-11T12:33:29.043 [DEBUG] [Thread-169910] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:33:29.061 [DEBUG] [Thread-169910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:33:29.061 [DEBUG] [Thread-169910] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:33:29.062 [DEBUG] [Thread-169910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:33:29.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:33:29.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:33:29.064 [DEBUG] [Thread-169910] [transport.py] [_log()] userauth is OK
2026-04-11T12:33:29.064 [DEBUG] [Thread-169910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:33:29.065 [DEBUG] [Thread-169910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:33:29.065 [DEBUG] [Thread-169910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:33:29.065 [DEBUG] [Thread-169910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:33:29.088 [INFO] [Thread-169910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:33:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:33:29.847 [DEBUG] [Thread-169910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:33:29.847 [DEBUG] [Thread-169910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:33:29.848 [DEBUG] [Thread-169910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:33:29.888 [DEBUG] [Thread-169910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:33:29.888 [DEBUG] [Thread-169910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:33:29.892 [DEBUG] [Thread-169910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:33:29.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:33:29.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:33:29.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:33:29.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:33:29.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:33:29.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:33:29.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:33:29.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:33:29.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:33:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.439355 -999.00  +13.90  18.95     97  +13.50 1 3 1 3 1   888    0 0.40 -0.95 ----- 21.3 18.9 64.0 22.6 15.7 0.2 15.8 -0.3 15.7 -0.4 15.9 0.2
2026-04-11T12:33:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:33:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:33:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.439355
2026-04-11T12:33:29.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:33:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:33:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:33:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:33:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:33:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:33:08', tmtdew=0.047125, humidity=99.6541, cloud=0.0, wind=15.475, temperature=13.8798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:32:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:33:29.923 [DEBUG] [Thread-169910] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:33:30.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:33:30.017 [DEBUG] [Thread-169913] [transport.py] [_log()] starting thread (client mode): 0xb39c7f70
2026-04-11T12:33:30.017 [DEBUG] [Thread-169913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:33:30.031 [DEBUG] [Thread-169913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:33:30.032 [INFO] [Thread-169913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:33:30.039 [DEBUG] [Thread-169913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:33:30.039 [DEBUG] [Thread-169913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:33:30.039 [DEBUG] [Thread-169913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] client lang: <none>
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] server lang: <none>
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] kex follows: False
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] Compression: none
2026-04-11T12:33:30.040 [DEBUG] [Thread-169913] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:33:30.097 [DEBUG] [Thread-169913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:33:30.098 [DEBUG] [Thread-169913] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:33:30.098 [DEBUG] [Thread-169913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:33:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:33:30.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:33:30.153 [DEBUG] [Thread-169913] [transport.py] [_log()] userauth is OK
2026-04-11T12:33:30.153 [DEBUG] [Thread-169913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:33:30.154 [DEBUG] [Thread-169913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:33:30.154 [DEBUG] [Thread-169913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:33:30.154 [DEBUG] [Thread-169913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:33:30.173 [INFO] [Thread-169913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:33:30.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:33:30.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:33:30.986 [DEBUG] [Thread-169913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:33:30.987 [DEBUG] [Thread-169913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:33:31.035 [DEBUG] [Thread-169913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:33:31.035 [DEBUG] [Thread-169913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:33:31.045 [DEBUG] [Thread-169913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:33:31.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:33:31.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-04-11T12:33:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:33:31.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:33:31.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:33:31.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:33:31.081 [DEBUG] [Thread-169913] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:33:34.582 [DEBUG] [Thread-169915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:33:49.632 [DEBUG] [Thread-169916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:33:54.315 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:33:54.316 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:34:01.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:34:01.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-04-11T12:34:02.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 33, 43), 0.08909, 99.3413, 0.0, 17.9258, 14.3928, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:34:02.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:33:43
2026-04-11T12:34:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:34:02.917 [DEBUG] [Thread-169917] [transport.py] [_log()] starting thread (client mode): 0xa79b69e0
2026-04-11T12:34:02.917 [DEBUG] [Thread-169917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:34:02.937 [DEBUG] [Thread-169917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:34:02.937 [INFO] [Thread-169917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:34:02.938 [DEBUG] [Thread-169917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] client lang: <none>
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] server lang: <none>
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] kex follows: False
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:34:02.939 [DEBUG] [Thread-169917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:34:02.940 [DEBUG] [Thread-169917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:34:02.940 [DEBUG] [Thread-169917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:34:02.940 [DEBUG] [Thread-169917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:34:02.940 [DEBUG] [Thread-169917] [transport.py] [_log()] Compression: none
2026-04-11T12:34:02.940 [DEBUG] [Thread-169917] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:34:02.950 [DEBUG] [Thread-169917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:34:02.950 [DEBUG] [Thread-169917] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:34:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:34:02.952 [DEBUG] [Thread-169917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:34:02.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:34:02.954 [DEBUG] [Thread-169917] [transport.py] [_log()] userauth is OK
2026-04-11T12:34:02.954 [DEBUG] [Thread-169917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:34:02.954 [DEBUG] [Thread-169917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:34:02.954 [DEBUG] [Thread-169917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:34:02.954 [DEBUG] [Thread-169917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:34:02.969 [INFO] [Thread-169917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:34:02.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:34:03.742 [DEBUG] [Thread-169917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:34:03.742 [DEBUG] [Thread-169917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:34:03.742 [DEBUG] [Thread-169917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:34:03.783 [DEBUG] [Thread-169917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:34:03.783 [DEBUG] [Thread-169917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:34:03.786 [DEBUG] [Thread-169917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:34:03.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:34:03.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:34:03.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:34:03.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:34:03.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:34:03.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:34:03.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:34:03.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:34:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:34:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.439702 -999.00  +13.70  20.84     97  +13.20 1 3 1 3 1   888    0 0.40 -0.79 ----- 23.4 20.8 64.0 23.8 15.7 -0.9 15.7 -0.6 15.6 -0.9 15.9 -0.1
2026-04-11T12:34:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:34:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:34:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.439702
2026-04-11T12:34:03.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:34:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:34:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:34:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:34:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:34:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:33:43', tmtdew=0.08909, humidity=99.3413, cloud=0.0, wind=17.9258, temperature=14.3928, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:33:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:34:03.813 [DEBUG] [Thread-169917] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:34:03.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:34:03.907 [DEBUG] [Thread-169920] [transport.py] [_log()] starting thread (client mode): 0xb39c7d30
2026-04-11T12:34:03.907 [DEBUG] [Thread-169920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:34:03.922 [DEBUG] [Thread-169920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:34:03.922 [INFO] [Thread-169920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:34:03.929 [DEBUG] [Thread-169920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] client lang: <none>
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] server lang: <none>
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] kex follows: False
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] Compression: none
2026-04-11T12:34:03.930 [DEBUG] [Thread-169920] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:34:03.992 [DEBUG] [Thread-169920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:34:03.993 [DEBUG] [Thread-169920] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:34:03.993 [DEBUG] [Thread-169920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:34:03.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:34:03.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:34:04.050 [DEBUG] [Thread-169920] [transport.py] [_log()] userauth is OK
2026-04-11T12:34:04.050 [DEBUG] [Thread-169920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:34:04.051 [DEBUG] [Thread-169920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:34:04.051 [DEBUG] [Thread-169920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:34:04.051 [DEBUG] [Thread-169920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:34:04.069 [INFO] [Thread-169920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:34:04.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:34:04.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:34:04.669 [DEBUG] [Thread-169922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:04.934 [DEBUG] [Thread-169920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:34:04.935 [DEBUG] [Thread-169920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:34:04.983 [DEBUG] [Thread-169920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:34:04.983 [DEBUG] [Thread-169920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:34:04.994 [DEBUG] [Thread-169920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:34:05.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:34:05.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-04-11T12:34:05.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-04-11T12:34:05.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:34:05.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:34:05.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:34:05.036 [DEBUG] [Thread-169920] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:34:05.194 [DEBUG] [Thread-169923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:19.729 [DEBUG] [Thread-169924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:34.767 [DEBUG] [Thread-169925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:35.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:34:35.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:34:35.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-04-11T12:34:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 34, 18), 0.03687, 99.7199, 0.0, 19.075, 13.9624, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:34:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:34:18
2026-04-11T12:34:36.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:34:36.828 [DEBUG] [Thread-169926] [transport.py] [_log()] starting thread (client mode): 0xae5e4040
2026-04-11T12:34:36.828 [DEBUG] [Thread-169926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:34:36.849 [DEBUG] [Thread-169926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:34:36.849 [INFO] [Thread-169926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:34:36.852 [DEBUG] [Thread-169926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:34:36.852 [DEBUG] [Thread-169926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:34:36.852 [DEBUG] [Thread-169926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:34:36.852 [DEBUG] [Thread-169926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:36.852 [DEBUG] [Thread-169926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:36.852 [DEBUG] [Thread-169926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] client lang: <none>
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] server lang: <none>
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] kex follows: False
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] Compression: none
2026-04-11T12:34:36.853 [DEBUG] [Thread-169926] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:34:36.870 [DEBUG] [Thread-169926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:34:36.870 [DEBUG] [Thread-169926] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:34:36.871 [DEBUG] [Thread-169926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:34:36.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:34:36.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:34:36.873 [DEBUG] [Thread-169926] [transport.py] [_log()] userauth is OK
2026-04-11T12:34:36.873 [DEBUG] [Thread-169926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:34:36.874 [DEBUG] [Thread-169926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:34:36.874 [DEBUG] [Thread-169926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:34:36.874 [DEBUG] [Thread-169926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:34:36.898 [INFO] [Thread-169926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:34:36.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:34:37.728 [DEBUG] [Thread-169926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:34:37.728 [DEBUG] [Thread-169926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:34:37.728 [DEBUG] [Thread-169926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:34:37.769 [DEBUG] [Thread-169926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:34:37.769 [DEBUG] [Thread-169926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:34:37.772 [DEBUG] [Thread-169926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:34:37.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:34:37.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:34:37.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:34:37.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:34:37.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:34:37.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:34:37.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:34:37.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:34:37.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:34:37.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.440049 -999.00  +13.60  21.87     97  +13.20 1 3 1 3 1   888    0 0.41 -0.59 ----- 19.6 21.9 59.4 27.4 15.5 0.1 15.6 -0.7 15.5 -1.1 15.8 -0.4
2026-04-11T12:34:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:34:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:34:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.440049
2026-04-11T12:34:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:34:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:34:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:34:37.795 [DEBUG] [Thread-169926] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:34:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:34:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:34:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:34:18', tmtdew=0.03687, humidity=99.7199, cloud=0.0, wind=19.075, temperature=13.9624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:33:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:34:37.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:34:37.888 [DEBUG] [Thread-169929] [transport.py] [_log()] starting thread (client mode): 0xa795c520
2026-04-11T12:34:37.889 [DEBUG] [Thread-169929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:34:37.903 [DEBUG] [Thread-169929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:34:37.903 [INFO] [Thread-169929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:34:37.910 [DEBUG] [Thread-169929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:34:37.911 [DEBUG] [Thread-169929] [transport.py] [_log()] client lang: <none>
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] server lang: <none>
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] kex follows: False
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:34:37.912 [DEBUG] [Thread-169929] [transport.py] [_log()] Compression: none
2026-04-11T12:34:37.913 [DEBUG] [Thread-169929] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:34:37.969 [DEBUG] [Thread-169929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:34:37.970 [DEBUG] [Thread-169929] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:34:37.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:34:37.971 [DEBUG] [Thread-169929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:34:37.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:34:38.027 [DEBUG] [Thread-169929] [transport.py] [_log()] userauth is OK
2026-04-11T12:34:38.027 [DEBUG] [Thread-169929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:34:38.027 [DEBUG] [Thread-169929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:34:38.027 [DEBUG] [Thread-169929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:34:38.027 [DEBUG] [Thread-169929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:34:38.046 [INFO] [Thread-169929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:34:38.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:34:38.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:34:38.862 [DEBUG] [Thread-169929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:34:38.862 [DEBUG] [Thread-169929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:34:38.910 [DEBUG] [Thread-169929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:34:38.910 [DEBUG] [Thread-169929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:34:38.919 [DEBUG] [Thread-169929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:34:38.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:34:38.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:34:38.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:34:38.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:34:38.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:34:38.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:34:38.959 [DEBUG] [Thread-169929] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:34:49.805 [DEBUG] [Thread-169931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:54.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:34:54.458 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:04.854 [DEBUG] [Thread-169932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:05.230 [DEBUG] [Thread-169933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:08.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:35:08.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:35:08.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:35:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 34, 54), 0.07892, 99.4067, 0.0, 15.2798, 14.3259, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:35:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:34:54
2026-04-11T12:35:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:35:10.808 [DEBUG] [Thread-169934] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-11T12:35:10.808 [DEBUG] [Thread-169934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:35:10.828 [DEBUG] [Thread-169934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:35:10.828 [INFO] [Thread-169934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] client lang: <none>
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] server lang: <none>
2026-04-11T12:35:10.831 [DEBUG] [Thread-169934] [transport.py] [_log()] kex follows: False
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] Compression: none
2026-04-11T12:35:10.832 [DEBUG] [Thread-169934] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:35:10.852 [DEBUG] [Thread-169934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:35:10.853 [DEBUG] [Thread-169934] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:35:10.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:35:10.854 [DEBUG] [Thread-169934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:35:10.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:35:10.856 [DEBUG] [Thread-169934] [transport.py] [_log()] userauth is OK
2026-04-11T12:35:10.856 [DEBUG] [Thread-169934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:35:10.856 [DEBUG] [Thread-169934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:35:10.856 [DEBUG] [Thread-169934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:35:10.856 [DEBUG] [Thread-169934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:35:10.880 [INFO] [Thread-169934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:35:10.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:35:12.131 [DEBUG] [Thread-169934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:35:12.131 [DEBUG] [Thread-169934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:35:12.131 [DEBUG] [Thread-169934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:35:12.172 [DEBUG] [Thread-169934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:35:12.173 [DEBUG] [Thread-169934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:35:12.176 [DEBUG] [Thread-169934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:35:12.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:35:12.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:35:12.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:35:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:35:12.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:35:12.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:35:12.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:35:12.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:35:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:35:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.440396 -999.00  +13.60  20.38     97  +13.10 1 3 1 3 1   888    0 0.42 -0.25 ----- 22.9 20.4 49.8 24.4 15.5 -0.1 15.6 -0.7 15.4 -0.7 15.7 0.2
2026-04-11T12:35:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:35:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:35:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.440396
2026-04-11T12:35:12.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:35:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:35:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:35:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:35:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:35:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:34:54', tmtdew=0.07892, humidity=99.4067, cloud=0.0, wind=15.2798, temperature=14.3259, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:34:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:35:12.236 [DEBUG] [Thread-169934] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:35:12.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:35:12.328 [DEBUG] [Thread-169937] [transport.py] [_log()] starting thread (client mode): 0xb39c7490
2026-04-11T12:35:12.328 [DEBUG] [Thread-169937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:35:12.343 [DEBUG] [Thread-169937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:35:12.343 [INFO] [Thread-169937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] client lang: <none>
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] server lang: <none>
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] kex follows: False
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:35:12.351 [DEBUG] [Thread-169937] [transport.py] [_log()] Compression: none
2026-04-11T12:35:12.352 [DEBUG] [Thread-169937] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:35:12.412 [DEBUG] [Thread-169937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:35:12.413 [DEBUG] [Thread-169937] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:35:12.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:35:12.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:35:12.415 [DEBUG] [Thread-169937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:35:12.472 [DEBUG] [Thread-169937] [transport.py] [_log()] userauth is OK
2026-04-11T12:35:12.472 [DEBUG] [Thread-169937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:35:12.473 [DEBUG] [Thread-169937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:35:12.473 [DEBUG] [Thread-169937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:35:12.473 [DEBUG] [Thread-169937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:35:12.489 [INFO] [Thread-169937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:35:12.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:35:12.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:35:13.330 [DEBUG] [Thread-169937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:35:13.330 [DEBUG] [Thread-169937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:35:13.379 [DEBUG] [Thread-169937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:35:13.379 [DEBUG] [Thread-169937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:35:13.388 [DEBUG] [Thread-169937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:35:13.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:35:13.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-04-11T12:35:13.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:35:13.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:35:13.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:35:13.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:35:13.426 [DEBUG] [Thread-169937] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:35:19.891 [DEBUG] [Thread-169939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:34.943 [DEBUG] [Thread-169940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:43.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:35:43.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:35:43.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-04-11T12:35:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 35, 30), 0.044675, 99.6699, 0.0, 16.7641, 13.6798, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:35:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:35:30
2026-04-11T12:35:45.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:35:45.310 [DEBUG] [Thread-169941] [transport.py] [_log()] starting thread (client mode): 0xb0f430d0
2026-04-11T12:35:45.310 [DEBUG] [Thread-169941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:35:45.331 [DEBUG] [Thread-169941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:35:45.331 [INFO] [Thread-169941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:35:45.334 [DEBUG] [Thread-169941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:35:45.334 [DEBUG] [Thread-169941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:35:45.334 [DEBUG] [Thread-169941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] client lang: <none>
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] server lang: <none>
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] kex follows: False
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] Compression: none
2026-04-11T12:35:45.335 [DEBUG] [Thread-169941] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:35:45.354 [DEBUG] [Thread-169941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:35:45.354 [DEBUG] [Thread-169941] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:35:45.355 [DEBUG] [Thread-169941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:35:45.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:35:45.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:35:45.357 [DEBUG] [Thread-169941] [transport.py] [_log()] userauth is OK
2026-04-11T12:35:45.357 [DEBUG] [Thread-169941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:35:45.357 [DEBUG] [Thread-169941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:35:45.357 [DEBUG] [Thread-169941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:35:45.357 [DEBUG] [Thread-169941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:35:45.382 [INFO] [Thread-169941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:35:45.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:35:46.204 [DEBUG] [Thread-169941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:35:46.205 [DEBUG] [Thread-169941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:35:46.205 [DEBUG] [Thread-169941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:35:46.246 [DEBUG] [Thread-169941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:35:46.246 [DEBUG] [Thread-169941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:35:46.250 [DEBUG] [Thread-169941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:35:46.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:35:46.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:35:46.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:35:46.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:35:46.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:35:46.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:35:46.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:35:46.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:35:46.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:35:46.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.441091 -999.00  +13.70  20.04     97  +13.20 1 3 1 3 1   888    0 0.43 0.25 ----- 21.1 20.0 52.4 23.8 15.5 -0.2 15.5 -1.1 15.4 -1.0 15.6 0.0
2026-04-11T12:35:46.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:35:46.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:35:46.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.441091
2026-04-11T12:35:46.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:35:46.276 [DEBUG] [Thread-169941] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:35:46.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:35:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:35:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:35:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:35:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:35:30', tmtdew=0.044675, humidity=99.6699, cloud=0.0, wind=16.7641, temperature=13.6798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:35:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:35:46.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:35:46.371 [DEBUG] [Thread-169944] [transport.py] [_log()] starting thread (client mode): 0xb0f43bb0
2026-04-11T12:35:46.371 [DEBUG] [Thread-169944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:35:46.385 [DEBUG] [Thread-169944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:35:46.385 [INFO] [Thread-169944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:46.393 [DEBUG] [Thread-169944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] client lang: <none>
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] server lang: <none>
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] kex follows: False
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:35:46.394 [DEBUG] [Thread-169944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:35:46.395 [DEBUG] [Thread-169944] [transport.py] [_log()] Compression: none
2026-04-11T12:35:46.395 [DEBUG] [Thread-169944] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:35:46.453 [DEBUG] [Thread-169944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:35:46.454 [DEBUG] [Thread-169944] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:35:46.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:35:46.456 [DEBUG] [Thread-169944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:35:46.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:35:46.513 [DEBUG] [Thread-169944] [transport.py] [_log()] userauth is OK
2026-04-11T12:35:46.513 [DEBUG] [Thread-169944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:35:46.513 [DEBUG] [Thread-169944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:35:46.513 [DEBUG] [Thread-169944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:35:46.513 [DEBUG] [Thread-169944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:35:46.532 [INFO] [Thread-169944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:35:46.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:35:46.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:35:47.371 [DEBUG] [Thread-169944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:35:47.371 [DEBUG] [Thread-169944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:35:47.419 [DEBUG] [Thread-169944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:35:47.419 [DEBUG] [Thread-169944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:35:47.429 [DEBUG] [Thread-169944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:35:47.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:35: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')
2026-04-11T12:35:47.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-04-11T12:35:47.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:35:47.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:35:47.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:35:47.465 [DEBUG] [Thread-169944] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:35:49.980 [DEBUG] [Thread-169946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:54.598 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:35:54.599 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:05.034 [DEBUG] [Thread-169947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:05.272 [DEBUG] [Thread-169948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:17.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:36:17.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:36:17.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-04-11T12:36:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 36, 5), 0.04725, 99.6533, 0.0, 18.5105, 13.713, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:36:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:36:05
2026-04-11T12:36:19.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:36:19.294 [DEBUG] [Thread-169949] [transport.py] [_log()] starting thread (client mode): 0xb39c7280
2026-04-11T12:36:19.294 [DEBUG] [Thread-169949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:36:19.315 [DEBUG] [Thread-169949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:36:19.315 [INFO] [Thread-169949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:36:19.318 [DEBUG] [Thread-169949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:36:19.318 [DEBUG] [Thread-169949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:36:19.318 [DEBUG] [Thread-169949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:36:19.318 [DEBUG] [Thread-169949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] client lang: <none>
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] server lang: <none>
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] kex follows: False
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:36:19.319 [DEBUG] [Thread-169949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:36:19.320 [DEBUG] [Thread-169949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:36:19.320 [DEBUG] [Thread-169949] [transport.py] [_log()] Compression: none
2026-04-11T12:36:19.320 [DEBUG] [Thread-169949] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:36:19.339 [DEBUG] [Thread-169949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:36:19.339 [DEBUG] [Thread-169949] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:36:19.340 [DEBUG] [Thread-169949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:36:19.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:36:19.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:36:19.342 [DEBUG] [Thread-169949] [transport.py] [_log()] userauth is OK
2026-04-11T12:36:19.342 [DEBUG] [Thread-169949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:36:19.342 [DEBUG] [Thread-169949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:36:19.343 [DEBUG] [Thread-169949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:36:19.343 [DEBUG] [Thread-169949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:36:19.367 [INFO] [Thread-169949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:36:19.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:36:20.073 [DEBUG] [Thread-169951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:20.202 [DEBUG] [Thread-169949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:36:20.203 [DEBUG] [Thread-169949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:36:20.204 [DEBUG] [Thread-169949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:36:20.244 [DEBUG] [Thread-169949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:36:20.244 [DEBUG] [Thread-169949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:36:20.249 [DEBUG] [Thread-169949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:36:20.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:36:20.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:36:20.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:36:20.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:36:20.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:36:20.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:36:20.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:36:20.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:36:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:36:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.441438 -999.00  +13.60  20.41     97  +13.10 1 3 1 3 1   888    0 0.43 0.26 ----- 23.0 20.4 58.0 24.8 15.4 -0.2 15.4 -0.8 15.3 -0.9 15.6 -0.1
2026-04-11T12:36:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:36:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:36:20.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.441438
2026-04-11T12:36:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:36:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:36:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:36:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:36:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:36:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:36:05', tmtdew=0.04725, humidity=99.6533, cloud=0.0, wind=18.5105, temperature=13.713, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:35:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:36:20.280 [DEBUG] [Thread-169949] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:36:20.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:36:20.375 [DEBUG] [Thread-169953] [transport.py] [_log()] starting thread (client mode): 0xae5b2b30
2026-04-11T12:36:20.375 [DEBUG] [Thread-169953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:36:20.390 [DEBUG] [Thread-169953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:36:20.390 [INFO] [Thread-169953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:36:20.398 [DEBUG] [Thread-169953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] client lang: <none>
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] server lang: <none>
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] kex follows: False
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] Compression: none
2026-04-11T12:36:20.399 [DEBUG] [Thread-169953] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:36:20.457 [DEBUG] [Thread-169953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:36:20.458 [DEBUG] [Thread-169953] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:36:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:36:20.459 [DEBUG] [Thread-169953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:36:20.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:36:20.513 [DEBUG] [Thread-169953] [transport.py] [_log()] userauth is OK
2026-04-11T12:36:20.513 [DEBUG] [Thread-169953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:36:20.514 [DEBUG] [Thread-169953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:36:20.514 [DEBUG] [Thread-169953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:36:20.514 [DEBUG] [Thread-169953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:36:20.532 [INFO] [Thread-169953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:36:20.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:36:20.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:36:21.315 [DEBUG] [Thread-169953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:36:21.316 [DEBUG] [Thread-169953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:36:21.364 [DEBUG] [Thread-169953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:36:21.365 [DEBUG] [Thread-169953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:36:21.375 [DEBUG] [Thread-169953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:36:21.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:36:21.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-04-11T12:36:21.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-04-11T12:36:21.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:36:21.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:36:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:36:21.412 [DEBUG] [Thread-169953] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:36:35.113 [DEBUG] [Thread-169955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:50.169 [DEBUG] [Thread-169956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:36:51.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:36:51.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:36:52.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 36, 40), 0.07901, 99.4063, 0.0, 18.3492, 14.2261, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:36:52.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:36:40
2026-04-11T12:36:53.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:36:53.246 [DEBUG] [Thread-169957] [transport.py] [_log()] starting thread (client mode): 0xae52f670
2026-04-11T12:36:53.246 [DEBUG] [Thread-169957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:36:53.266 [DEBUG] [Thread-169957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:36:53.266 [INFO] [Thread-169957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:36:53.270 [DEBUG] [Thread-169957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:36:53.270 [DEBUG] [Thread-169957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:36:53.270 [DEBUG] [Thread-169957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:36:53.270 [DEBUG] [Thread-169957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] client lang: <none>
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] server lang: <none>
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] kex follows: False
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:36:53.271 [DEBUG] [Thread-169957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:36:53.272 [DEBUG] [Thread-169957] [transport.py] [_log()] Compression: none
2026-04-11T12:36:53.272 [DEBUG] [Thread-169957] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:36:53.291 [DEBUG] [Thread-169957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:36:53.291 [DEBUG] [Thread-169957] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:36:53.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:36:53.293 [DEBUG] [Thread-169957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:36:53.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:36:53.295 [DEBUG] [Thread-169957] [transport.py] [_log()] userauth is OK
2026-04-11T12:36:53.295 [DEBUG] [Thread-169957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:36:53.295 [DEBUG] [Thread-169957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:36:53.295 [DEBUG] [Thread-169957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:36:53.295 [DEBUG] [Thread-169957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:36:53.312 [INFO] [Thread-169957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:36:53.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:36:54.077 [DEBUG] [Thread-169957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:36:54.078 [DEBUG] [Thread-169957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:36:54.078 [DEBUG] [Thread-169957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:36:54.119 [DEBUG] [Thread-169957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:36:54.119 [DEBUG] [Thread-169957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:36:54.122 [DEBUG] [Thread-169957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:36:54.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:36:54.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:36:54.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:36:54.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:36:54.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:36:54.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:36:54.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:36:54.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:36:54.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:36:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.441785 -999.00  +13.70  20.35     97  +13.30 1 3 1 3 1   888    0 0.43 0.10 ----- 19.0 20.4 61.2 23.7 15.4 0.0 15.4 -0.7 15.3 -0.6 15.5 -0.1
2026-04-11T12:36:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:36:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:36:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.441785
2026-04-11T12:36:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:36:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:36:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:36:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:36:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:36:54.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:36:40', tmtdew=0.07901, humidity=99.4063, cloud=0.0, wind=18.3492, temperature=14.2261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:36:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:36:54.150 [DEBUG] [Thread-169957] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:36:54.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:36:54.244 [DEBUG] [Thread-169960] [transport.py] [_log()] starting thread (client mode): 0xa795fbb0
2026-04-11T12:36:54.244 [DEBUG] [Thread-169960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:36:54.258 [DEBUG] [Thread-169960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:36:54.258 [INFO] [Thread-169960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:54.266 [DEBUG] [Thread-169960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] client lang: <none>
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] server lang: <none>
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] kex follows: False
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] Compression: none
2026-04-11T12:36:54.267 [DEBUG] [Thread-169960] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:36:54.325 [DEBUG] [Thread-169960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:36:54.325 [DEBUG] [Thread-169960] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:36:54.325 [DEBUG] [Thread-169960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:36:54.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:36:54.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:36:54.382 [DEBUG] [Thread-169960] [transport.py] [_log()] userauth is OK
2026-04-11T12:36:54.382 [DEBUG] [Thread-169960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:36:54.383 [DEBUG] [Thread-169960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:36:54.383 [DEBUG] [Thread-169960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:36:54.383 [DEBUG] [Thread-169960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:36:54.401 [INFO] [Thread-169960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:36:54.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:36:54.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:36:54.737 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:54.739 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:36:55.232 [DEBUG] [Thread-169960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:36:55.232 [DEBUG] [Thread-169960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:36:55.280 [DEBUG] [Thread-169960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:36:55.280 [DEBUG] [Thread-169960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:36:55.290 [DEBUG] [Thread-169960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:36:55.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:36:55.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:36:55.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-04-11T12:36:55.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:36:55.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:36:55.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:36:55.326 [DEBUG] [Thread-169960] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:37:05.201 [DEBUG] [Thread-169962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:05.315 [DEBUG] [Thread-169963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:20.253 [DEBUG] [Thread-169964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:37:25.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:37:25.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-04-11T12:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 37, 15), 0.089505, 99.7031, 0.0, 16.5157, 13.8631, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:37:15
2026-04-11T12:37:27.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:37:27.170 [DEBUG] [Thread-169965] [transport.py] [_log()] starting thread (client mode): 0xb39c64d0
2026-04-11T12:37:27.171 [DEBUG] [Thread-169965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:37:27.201 [DEBUG] [Thread-169965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:37:27.201 [INFO] [Thread-169965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:37:27.204 [DEBUG] [Thread-169965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] client lang: <none>
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] server lang: <none>
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] kex follows: False
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:37:27.205 [DEBUG] [Thread-169965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:37:27.206 [DEBUG] [Thread-169965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:37:27.206 [DEBUG] [Thread-169965] [transport.py] [_log()] Compression: none
2026-04-11T12:37:27.206 [DEBUG] [Thread-169965] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:37:27.227 [DEBUG] [Thread-169965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:37:27.228 [DEBUG] [Thread-169965] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:37:27.228 [DEBUG] [Thread-169965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:37:27.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:37:27.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:37:27.230 [DEBUG] [Thread-169965] [transport.py] [_log()] userauth is OK
2026-04-11T12:37:27.230 [DEBUG] [Thread-169965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:37:27.230 [DEBUG] [Thread-169965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:37:27.230 [DEBUG] [Thread-169965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:37:27.230 [DEBUG] [Thread-169965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:37:27.266 [INFO] [Thread-169965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:37:27.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:37:28.052 [DEBUG] [Thread-169965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:37:28.052 [DEBUG] [Thread-169965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:37:28.053 [DEBUG] [Thread-169965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:37:28.092 [DEBUG] [Thread-169965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:37:28.093 [DEBUG] [Thread-169965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:37:28.096 [DEBUG] [Thread-169965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:37:28.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:37:28.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:37:28.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:37:28.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:37:28.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:37:28.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:37:28.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:37:28.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:37:28.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:37:28.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.442133 -999.00  +13.60  20.92     97  +13.20 1 3 1 3 1   888    0 0.44 0.11 ----- 20.9 20.9 37.6 22.3 15.4 -0.2 15.4 -0.7 15.3 -0.6 15.6 -0.1
2026-04-11T12:37:28.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:37:28.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:37:28.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.442133
2026-04-11T12:37:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:37:28.115 [DEBUG] [Thread-169965] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:37:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:37:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:37:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:37:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:37:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:37:15', tmtdew=0.089505, humidity=99.7031, cloud=0.0, wind=16.5157, temperature=13.8631, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:36:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:37:28.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:37:28.221 [DEBUG] [Thread-169968] [transport.py] [_log()] starting thread (client mode): 0xae5b70d0
2026-04-11T12:37:28.221 [DEBUG] [Thread-169968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:37:28.237 [DEBUG] [Thread-169968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:37:28.237 [INFO] [Thread-169968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:37:28.245 [DEBUG] [Thread-169968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:37:28.245 [DEBUG] [Thread-169968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:37:28.245 [DEBUG] [Thread-169968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:37:28.245 [DEBUG] [Thread-169968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:37:28.245 [DEBUG] [Thread-169968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] client lang: <none>
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] server lang: <none>
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] kex follows: False
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] Compression: none
2026-04-11T12:37:28.246 [DEBUG] [Thread-169968] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:37:28.306 [DEBUG] [Thread-169968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:37:28.307 [DEBUG] [Thread-169968] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:37:28.308 [DEBUG] [Thread-169968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:37:28.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:37:28.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:37:28.362 [DEBUG] [Thread-169968] [transport.py] [_log()] userauth is OK
2026-04-11T12:37:28.363 [DEBUG] [Thread-169968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:37:28.363 [DEBUG] [Thread-169968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:37:28.363 [DEBUG] [Thread-169968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:37:28.363 [DEBUG] [Thread-169968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:37:28.383 [INFO] [Thread-169968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:37:28.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:37:28.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:37:29.234 [DEBUG] [Thread-169968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:37:29.234 [DEBUG] [Thread-169968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:37:29.282 [DEBUG] [Thread-169968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:37:29.282 [DEBUG] [Thread-169968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:37:29.291 [DEBUG] [Thread-169968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:37:29.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:37:29.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-04-11T12:37:29.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-04-11T12:37:29.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:37:29.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:37:29.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:37:29.328 [DEBUG] [Thread-169968] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:37:35.293 [DEBUG] [Thread-169970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:50.345 [DEBUG] [Thread-169971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:54.883 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:54.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:37:59.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:37:59.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:37:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:38:00.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 37, 51), 0.09456, 99.3062, 0.0, 18.455, 13.9936, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:38:00.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:37:51
2026-04-11T12:38:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:38:01.189 [DEBUG] [Thread-169972] [transport.py] [_log()] starting thread (client mode): 0xae5b6080
2026-04-11T12:38:01.189 [DEBUG] [Thread-169972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:38:01.210 [DEBUG] [Thread-169972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:38:01.211 [INFO] [Thread-169972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:38:01.211 [DEBUG] [Thread-169972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] client lang: <none>
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] server lang: <none>
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] kex follows: False
2026-04-11T12:38:01.212 [DEBUG] [Thread-169972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:38:01.213 [DEBUG] [Thread-169972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:38:01.213 [DEBUG] [Thread-169972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:38:01.213 [DEBUG] [Thread-169972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:38:01.213 [DEBUG] [Thread-169972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:38:01.213 [DEBUG] [Thread-169972] [transport.py] [_log()] Compression: none
2026-04-11T12:38:01.213 [DEBUG] [Thread-169972] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:38:01.233 [DEBUG] [Thread-169972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:38:01.234 [DEBUG] [Thread-169972] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:38:01.235 [DEBUG] [Thread-169972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:38:01.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:38:01.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:38:01.237 [DEBUG] [Thread-169972] [transport.py] [_log()] userauth is OK
2026-04-11T12:38:01.237 [DEBUG] [Thread-169972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:38:01.237 [DEBUG] [Thread-169972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:38:01.237 [DEBUG] [Thread-169972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:38:01.237 [DEBUG] [Thread-169972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:38:01.260 [INFO] [Thread-169972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:38:01.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:38:02.079 [DEBUG] [Thread-169972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:38:02.079 [DEBUG] [Thread-169972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:38:02.080 [DEBUG] [Thread-169972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:38:02.121 [DEBUG] [Thread-169972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:38:02.121 [DEBUG] [Thread-169972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:38:02.124 [DEBUG] [Thread-169972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:38:02.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:38:02.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:38:02.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:38:02.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:38:02.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:38:02.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:38:02.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:38:02.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:38:02.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:38:02.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.442480 -999.00  +13.60  20.07     97  +13.10 1 3 1 3 1   888    0 0.44 0.56 ----- 18.8 20.1 41.8 21.9 15.3 -0.3 15.4 -0.9 15.2 -1.1 15.5 0.2
2026-04-11T12:38:02.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:38:02.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:38:02.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.442480
2026-04-11T12:38:02.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:38:02.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:38:02.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:38:02.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:38:02.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:38:02.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:37:51', tmtdew=0.09456, humidity=99.3062, cloud=0.0, wind=18.455, temperature=13.9936, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:37:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:38:02.154 [DEBUG] [Thread-169972] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:38:02.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:38:02.247 [DEBUG] [Thread-169975] [transport.py] [_log()] starting thread (client mode): 0xae5b4f70
2026-04-11T12:38:02.247 [DEBUG] [Thread-169975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:38:02.262 [DEBUG] [Thread-169975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:38:02.262 [INFO] [Thread-169975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:38:02.270 [DEBUG] [Thread-169975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:38:02.270 [DEBUG] [Thread-169975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:38:02.270 [DEBUG] [Thread-169975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] client lang: <none>
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] server lang: <none>
2026-04-11T12:38:02.271 [DEBUG] [Thread-169975] [transport.py] [_log()] kex follows: False
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] Compression: none
2026-04-11T12:38:02.272 [DEBUG] [Thread-169975] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:38:02.328 [DEBUG] [Thread-169975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:38:02.328 [DEBUG] [Thread-169975] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:38:02.329 [DEBUG] [Thread-169975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:38:02.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:38:02.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:38:02.383 [DEBUG] [Thread-169975] [transport.py] [_log()] userauth is OK
2026-04-11T12:38:02.384 [DEBUG] [Thread-169975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:38:02.384 [DEBUG] [Thread-169975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:38:02.384 [DEBUG] [Thread-169975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:38:02.384 [DEBUG] [Thread-169975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:38:02.402 [INFO] [Thread-169975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:38:02.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:38:02.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:38:03.222 [DEBUG] [Thread-169975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:38:03.223 [DEBUG] [Thread-169975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:38:03.271 [DEBUG] [Thread-169975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:38:03.271 [DEBUG] [Thread-169975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:38:03.280 [DEBUG] [Thread-169975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:38:03.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:38:03.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-04-11T12:38: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') -> 00000000
2026-04-11T12:38:03.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:38:03.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:38:03.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:38:03.316 [DEBUG] [Thread-169975] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:38:05.354 [DEBUG] [Thread-169977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:38:05.382 [DEBUG] [Thread-169978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:38:20.435 [DEBUG] [Thread-169979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:38:33.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:38:33.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:38:33.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-04-11T12:38:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 38, 26), 0.04218, 99.686, 0.0, 16.3231, 13.6301, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:38:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:38:26
2026-04-11T12:38:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:38:35.163 [DEBUG] [Thread-169980] [transport.py] [_log()] starting thread (client mode): 0xae5b4130
2026-04-11T12:38:35.163 [DEBUG] [Thread-169980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:38:35.184 [DEBUG] [Thread-169980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:38:35.185 [INFO] [Thread-169980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:38:35.187 [DEBUG] [Thread-169980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] client lang: <none>
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] server lang: <none>
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] kex follows: False
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:38:35.188 [DEBUG] [Thread-169980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:38:35.189 [DEBUG] [Thread-169980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:38:35.189 [DEBUG] [Thread-169980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:38:35.189 [DEBUG] [Thread-169980] [transport.py] [_log()] Compression: none
2026-04-11T12:38:35.189 [DEBUG] [Thread-169980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:38:35.207 [DEBUG] [Thread-169980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:38:35.208 [DEBUG] [Thread-169980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:38:35.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:38:35.209 [DEBUG] [Thread-169980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:38:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:38:35.211 [DEBUG] [Thread-169980] [transport.py] [_log()] userauth is OK
2026-04-11T12:38:35.211 [DEBUG] [Thread-169980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:38:35.211 [DEBUG] [Thread-169980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:38:35.212 [DEBUG] [Thread-169980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:38:35.212 [DEBUG] [Thread-169980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:38:35.248 [INFO] [Thread-169980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:38:35.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:38:35.473 [DEBUG] [Thread-169982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:38:36.027 [DEBUG] [Thread-169980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:38:36.027 [DEBUG] [Thread-169980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:38:36.028 [DEBUG] [Thread-169980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:38:36.068 [DEBUG] [Thread-169980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:38:36.068 [DEBUG] [Thread-169980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:38:36.072 [DEBUG] [Thread-169980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:38:36.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:38:36.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:38:36.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:38:36.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:38:36.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:38:36.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:38:36.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:38:36.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:38:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:38:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.442827 -999.00  +13.60  21.59     97  +13.20 1 3 1 3 1   888    0 0.44 0.79 ----- 23.5 21.6 33.2 26.1 15.3 0.1 15.4 -0.3 15.3 -0.2 15.4 0.4
2026-04-11T12:38:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:38:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:38:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.442827
2026-04-11T12:38:36.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:38:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:38:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:38:36.100 [DEBUG] [Thread-169980] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:38:36.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:38:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:38:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:38:26', tmtdew=0.04218, humidity=99.686, cloud=0.0, wind=16.3231, temperature=13.6301, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:37:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:38:36.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:38:36.198 [DEBUG] [Thread-169984] [transport.py] [_log()] starting thread (client mode): 0xae5b5720
2026-04-11T12:38:36.198 [DEBUG] [Thread-169984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:38:36.213 [DEBUG] [Thread-169984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:38:36.214 [INFO] [Thread-169984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:38:36.221 [DEBUG] [Thread-169984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:38:36.221 [DEBUG] [Thread-169984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:38:36.221 [DEBUG] [Thread-169984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] client lang: <none>
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] server lang: <none>
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] kex follows: False
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] Compression: none
2026-04-11T12:38:36.222 [DEBUG] [Thread-169984] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:38:36.280 [DEBUG] [Thread-169984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:38:36.281 [DEBUG] [Thread-169984] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:38:36.281 [DEBUG] [Thread-169984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:38:36.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:38:36.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:38:36.338 [DEBUG] [Thread-169984] [transport.py] [_log()] userauth is OK
2026-04-11T12:38:36.339 [DEBUG] [Thread-169984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:38:36.339 [DEBUG] [Thread-169984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:38:36.339 [DEBUG] [Thread-169984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:38:36.339 [DEBUG] [Thread-169984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:38:36.357 [INFO] [Thread-169984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:38:36.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:38:36.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:38:37.171 [DEBUG] [Thread-169984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:38:37.172 [DEBUG] [Thread-169984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:38:37.219 [DEBUG] [Thread-169984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:38:37.219 [DEBUG] [Thread-169984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:38:37.229 [DEBUG] [Thread-169984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:38:37.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:38:37.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-04-11T12:38:37.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-04-11T12:38:37.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:38:37.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:38:37.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:38:37.266 [DEBUG] [Thread-169984] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:38:50.511 [DEBUG] [Thread-169986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:38:55.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:38:55.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:05.399 [DEBUG] [Thread-169987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:05.562 [DEBUG] [Thread-169988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:39:07.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:39:07.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-04-11T12:39:08.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 38, 26), 0.04218, 99.686, 0.0, 16.3231, 13.6301, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:39:08.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:38:26
2026-04-11T12:39:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:39:09.097 [DEBUG] [Thread-169989] [transport.py] [_log()] starting thread (client mode): 0xae5b7670
2026-04-11T12:39:09.097 [DEBUG] [Thread-169989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:39:09.117 [DEBUG] [Thread-169989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:39:09.118 [INFO] [Thread-169989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] client lang: <none>
2026-04-11T12:39:09.121 [DEBUG] [Thread-169989] [transport.py] [_log()] server lang: <none>
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] kex follows: False
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] Compression: none
2026-04-11T12:39:09.122 [DEBUG] [Thread-169989] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:39:09.139 [DEBUG] [Thread-169989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:39:09.140 [DEBUG] [Thread-169989] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:39:09.141 [DEBUG] [Thread-169989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:39:09.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:39:09.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:39:09.143 [DEBUG] [Thread-169989] [transport.py] [_log()] userauth is OK
2026-04-11T12:39:09.143 [DEBUG] [Thread-169989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:39:09.143 [DEBUG] [Thread-169989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:39:09.143 [DEBUG] [Thread-169989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:39:09.143 [DEBUG] [Thread-169989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:39:09.166 [INFO] [Thread-169989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:39:09.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:39:09.943 [DEBUG] [Thread-169989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:39:09.943 [DEBUG] [Thread-169989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:39:09.944 [DEBUG] [Thread-169989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:39:09.984 [DEBUG] [Thread-169989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:39:09.984 [DEBUG] [Thread-169989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:39:09.987 [DEBUG] [Thread-169989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:39:09.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:39:09.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:39:10.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:39:10.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:39:10.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:39:10.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:39:10.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:39:10.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:39:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:39:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.443174 -999.00  +13.60  20.61     97  +13.10 1 3 1 3 1   888    0 0.46 1.04 ----- 23.5 20.6 52.8 23.3 15.4 0.3 15.4 -0.2 15.2 -0.0 15.4 0.2
2026-04-11T12:39:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:39:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:39:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.443174
2026-04-11T12:39:10.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:39:10.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:39:10.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:39:10.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:39:10.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:39:10.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:38:26', tmtdew=0.04218, humidity=99.686, cloud=0.0, wind=16.3231, temperature=13.6301, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:38:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:39:10.011 [DEBUG] [Thread-169989] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:39:10.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:39:10.105 [DEBUG] [Thread-169992] [transport.py] [_log()] starting thread (client mode): 0xae5b66e0
2026-04-11T12:39:10.105 [DEBUG] [Thread-169992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:39:10.121 [DEBUG] [Thread-169992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:39:10.121 [INFO] [Thread-169992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:10.129 [DEBUG] [Thread-169992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] client lang: <none>
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] server lang: <none>
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] kex follows: False
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:39:10.130 [DEBUG] [Thread-169992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:39:10.131 [DEBUG] [Thread-169992] [transport.py] [_log()] Compression: none
2026-04-11T12:39:10.131 [DEBUG] [Thread-169992] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:39:10.187 [DEBUG] [Thread-169992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:39:10.188 [DEBUG] [Thread-169992] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:39:10.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:39:10.189 [DEBUG] [Thread-169992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:39:10.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:39:10.244 [DEBUG] [Thread-169992] [transport.py] [_log()] userauth is OK
2026-04-11T12:39:10.244 [DEBUG] [Thread-169992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:39:10.244 [DEBUG] [Thread-169992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:39:10.244 [DEBUG] [Thread-169992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:39:10.244 [DEBUG] [Thread-169992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:39:10.267 [INFO] [Thread-169992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:39:10.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:39:10.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:39:11.120 [DEBUG] [Thread-169992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:39:11.120 [DEBUG] [Thread-169992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:39:11.168 [DEBUG] [Thread-169992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:39:11.168 [DEBUG] [Thread-169992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:39:11.177 [DEBUG] [Thread-169992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:39:11.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:39:11.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-04-11T12:39:11.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:39:11.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:39:11.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:39:11.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:39:11.212 [DEBUG] [Thread-169992] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:39:20.597 [DEBUG] [Thread-169994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:35.651 [DEBUG] [Thread-169995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:39:41.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:39:41.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:39:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 39, 2), 0.04732, 99.6528, 0.0, 18.2459, 13.6135, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:39:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:39:02
2026-04-11T12:39:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:39:43.194 [DEBUG] [Thread-169996] [transport.py] [_log()] starting thread (client mode): 0xa79b57e0
2026-04-11T12:39:43.194 [DEBUG] [Thread-169996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:39:43.213 [DEBUG] [Thread-169996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:39:43.214 [INFO] [Thread-169996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] client lang: <none>
2026-04-11T12:39:43.218 [DEBUG] [Thread-169996] [transport.py] [_log()] server lang: <none>
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] kex follows: False
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] Compression: none
2026-04-11T12:39:43.219 [DEBUG] [Thread-169996] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:39:43.239 [DEBUG] [Thread-169996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:39:43.239 [DEBUG] [Thread-169996] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:39:43.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:39:43.241 [DEBUG] [Thread-169996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:39:43.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:39:43.243 [DEBUG] [Thread-169996] [transport.py] [_log()] userauth is OK
2026-04-11T12:39:43.243 [DEBUG] [Thread-169996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:39:43.243 [DEBUG] [Thread-169996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:39:43.244 [DEBUG] [Thread-169996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:39:43.244 [DEBUG] [Thread-169996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:39:43.264 [INFO] [Thread-169996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:39:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:39:44.074 [DEBUG] [Thread-169996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:39:44.075 [DEBUG] [Thread-169996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:39:44.075 [DEBUG] [Thread-169996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:39:44.116 [DEBUG] [Thread-169996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:39:44.116 [DEBUG] [Thread-169996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:39:44.120 [DEBUG] [Thread-169996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:39:44.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:39:44.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:39:44.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:39:44.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:39:44.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:39:44.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:39:44.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:39:44.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:39:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:39:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.443522 -999.00  +13.50  18.90     97  +13.00 1 3 1 3 1   888    0 0.47 1.27 ----- 18.9 18.9 53.0 28.4 15.4 0.2 15.4 -0.4 15.2 -0.3 15.4 0.7
2026-04-11T12:39:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:39:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:39:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.443522
2026-04-11T12:39:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:39:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:39:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:39:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:39:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:39:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:39:02', tmtdew=0.04732, humidity=99.6528, cloud=0.0, wind=18.2459, temperature=13.6135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:38:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:39:44.152 [DEBUG] [Thread-169996] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:39:44.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:39:44.245 [DEBUG] [Thread-169999] [transport.py] [_log()] starting thread (client mode): 0xa79b5450
2026-04-11T12:39:44.245 [DEBUG] [Thread-169999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:39:44.261 [DEBUG] [Thread-169999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:39:44.261 [INFO] [Thread-169999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] client lang: <none>
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] server lang: <none>
2026-04-11T12:39:44.269 [DEBUG] [Thread-169999] [transport.py] [_log()] kex follows: False
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] Compression: none
2026-04-11T12:39:44.270 [DEBUG] [Thread-169999] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:39:44.329 [DEBUG] [Thread-169999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:39:44.330 [DEBUG] [Thread-169999] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:39:44.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:39:44.331 [DEBUG] [Thread-169999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:39:44.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:39:44.385 [DEBUG] [Thread-169999] [transport.py] [_log()] userauth is OK
2026-04-11T12:39:44.386 [DEBUG] [Thread-169999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:39:44.386 [DEBUG] [Thread-169999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:39:44.386 [DEBUG] [Thread-169999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:39:44.386 [DEBUG] [Thread-169999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:39:44.405 [INFO] [Thread-169999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:39:44.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:39:44.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:39:45.212 [DEBUG] [Thread-169999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:39:45.213 [DEBUG] [Thread-169999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:39:45.261 [DEBUG] [Thread-169999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:39:45.261 [DEBUG] [Thread-169999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:39:45.270 [DEBUG] [Thread-169999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:39:45.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:39:45.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-04-11T12:39:45.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-04-11T12:39:45.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:39:45.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:39:45.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:39:45.308 [DEBUG] [Thread-169999] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:39:50.691 [DEBUG] [Thread-170001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:55.169 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:39:55.170 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:05.444 [DEBUG] [Thread-170002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:05.753 [DEBUG] [Thread-170003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:15.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:40:15.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:40:15.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-04-11T12:40:16.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 39, 37), 0.08427, 99.3724, 0.0, 23.112, 14.1594, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:40:16.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:39:37
2026-04-11T12:40:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:40:17.305 [DEBUG] [Thread-170004] [transport.py] [_log()] starting thread (client mode): 0xae5b6e30
2026-04-11T12:40:17.305 [DEBUG] [Thread-170004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:40:17.325 [DEBUG] [Thread-170004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:40:17.325 [INFO] [Thread-170004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] client lang: <none>
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] server lang: <none>
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] kex follows: False
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:40:17.326 [DEBUG] [Thread-170004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:40:17.327 [DEBUG] [Thread-170004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:40:17.327 [DEBUG] [Thread-170004] [transport.py] [_log()] Compression: none
2026-04-11T12:40:17.327 [DEBUG] [Thread-170004] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:40:17.335 [DEBUG] [Thread-170004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:40:17.335 [DEBUG] [Thread-170004] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:40:17.335 [DEBUG] [Thread-170004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:40:17.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:40:17.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:40:17.337 [DEBUG] [Thread-170004] [transport.py] [_log()] userauth is OK
2026-04-11T12:40:17.337 [DEBUG] [Thread-170004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:40:17.337 [DEBUG] [Thread-170004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:40:17.337 [DEBUG] [Thread-170004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:40:17.338 [DEBUG] [Thread-170004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:40:17.361 [INFO] [Thread-170004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:40:17.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:40:18.473 [DEBUG] [Thread-170004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:40:18.473 [DEBUG] [Thread-170004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:40:18.474 [DEBUG] [Thread-170004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:40:18.514 [DEBUG] [Thread-170004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:40:18.514 [DEBUG] [Thread-170004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:40:18.517 [DEBUG] [Thread-170004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:40:18.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:40:18.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:40:18.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:40:18.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:40:18.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:40:18.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:40:18.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:40:18.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:40:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:40:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.444216 -999.00  +13.60  15.21     97  +13.10 1 3 1 3 1   888    0 0.48 1.57 ----- 17.6 15.2 62.0 21.1 15.4 0.2 15.4 -0.1 15.2 0.1 15.4 0.4
2026-04-11T12:40:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:40:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:40:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.444216
2026-04-11T12:40:18.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:40:18.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:40:18.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:40:18.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:40:18.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:40:18.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:39:37', tmtdew=0.08427, humidity=99.3724, cloud=0.0, wind=23.112, temperature=14.1594, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:39:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:40:18.545 [DEBUG] [Thread-170004] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:40:18.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:40:18.639 [DEBUG] [Thread-170007] [transport.py] [_log()] starting thread (client mode): 0xae5b4ee0
2026-04-11T12:40:18.639 [DEBUG] [Thread-170007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:40:18.655 [DEBUG] [Thread-170007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:40:18.656 [INFO] [Thread-170007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:40:18.663 [DEBUG] [Thread-170007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:40:18.664 [DEBUG] [Thread-170007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] client lang: <none>
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] server lang: <none>
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] kex follows: False
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:40:18.665 [DEBUG] [Thread-170007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:40:18.666 [DEBUG] [Thread-170007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:40:18.666 [DEBUG] [Thread-170007] [transport.py] [_log()] Compression: none
2026-04-11T12:40:18.667 [DEBUG] [Thread-170007] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:40:18.722 [DEBUG] [Thread-170007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:40:18.722 [DEBUG] [Thread-170007] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:40:18.723 [DEBUG] [Thread-170007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:40:18.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:40:18.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:40:18.781 [DEBUG] [Thread-170007] [transport.py] [_log()] userauth is OK
2026-04-11T12:40:18.782 [DEBUG] [Thread-170007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:40:18.782 [DEBUG] [Thread-170007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:40:18.782 [DEBUG] [Thread-170007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:40:18.782 [DEBUG] [Thread-170007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:40:18.801 [INFO] [Thread-170007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:40:18.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:40:18.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:40:19.620 [DEBUG] [Thread-170007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:40:19.621 [DEBUG] [Thread-170007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:40:19.669 [DEBUG] [Thread-170007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:40:19.670 [DEBUG] [Thread-170007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:40:19.679 [DEBUG] [Thread-170007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:40:19.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:40: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-04-11T12:40: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-04-11T12:40:19.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:40:19.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:40:19.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:40:19.717 [DEBUG] [Thread-170007] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:40:20.791 [DEBUG] [Thread-170009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:35.842 [DEBUG] [Thread-170010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:40:49.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:40: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-04-11T12:40:50.879 [DEBUG] [Thread-170011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:51.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 40, 13), 0.039555, 99.7028, 0.0, 19.039, 13.6794, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:40:51.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:40:13
2026-04-11T12:40:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:40:51.693 [DEBUG] [Thread-170012] [transport.py] [_log()] starting thread (client mode): 0xa79b5c90
2026-04-11T12:40:51.693 [DEBUG] [Thread-170012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:40:51.713 [DEBUG] [Thread-170012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:40:51.713 [INFO] [Thread-170012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] client lang: <none>
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] server lang: <none>
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] kex follows: False
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] Compression: none
2026-04-11T12:40:51.717 [DEBUG] [Thread-170012] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:40:51.734 [DEBUG] [Thread-170012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:40:51.734 [DEBUG] [Thread-170012] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:40:51.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:40:51.735 [DEBUG] [Thread-170012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:40:51.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:40:51.737 [DEBUG] [Thread-170012] [transport.py] [_log()] userauth is OK
2026-04-11T12:40:51.738 [DEBUG] [Thread-170012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:40:51.738 [DEBUG] [Thread-170012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:40:51.738 [DEBUG] [Thread-170012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:40:51.738 [DEBUG] [Thread-170012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:40:51.760 [INFO] [Thread-170012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:40:51.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:40:52.523 [DEBUG] [Thread-170012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:40:52.524 [DEBUG] [Thread-170012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:40:52.524 [DEBUG] [Thread-170012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:40:52.565 [DEBUG] [Thread-170012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:40:52.565 [DEBUG] [Thread-170012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:40:52.569 [DEBUG] [Thread-170012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:40:52.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:40:52.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:40:52.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:40:52.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:40:52.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:40:52.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:40:52.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:40:52.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:40:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:40:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.444563 -999.00  +13.60  18.86     97  +13.20 1 3 1 3 1   888    0 0.48 1.80 ----- 18.4 18.9 59.2 21.9 15.4 0.3 15.5 -0.2 15.2 -0.2 15.4 0.4
2026-04-11T12:40:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:40:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:40:52.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.444563
2026-04-11T12:40:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:40:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:40:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:40:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:40:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:40:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:40:13', tmtdew=0.039555, humidity=99.7028, cloud=0.0, wind=19.039, temperature=13.6794, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:40:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:40:52.599 [DEBUG] [Thread-170012] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:40:52.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:40:55.312 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:40:55.313 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:05.476 [DEBUG] [Thread-170015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:05.918 [DEBUG] [Thread-170016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:20.965 [DEBUG] [Thread-170017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:36.004 [DEBUG] [Thread-170018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:51.044 [DEBUG] [Thread-170019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:55.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:41:55.457 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:05.511 [DEBUG] [Thread-170020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:06.080 [DEBUG] [Thread-170021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:21.121 [DEBUG] [Thread-170022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:36.158 [DEBUG] [Thread-170023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:51.199 [DEBUG] [Thread-170024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:55.597 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:42:55.599 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:05.566 [DEBUG] [Thread-170025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:05.983 [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-04-11T12:43:06.239 [DEBUG] [Thread-170026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:21.280 [DEBUG] [Thread-170027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:36.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:43:36.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:43:36.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-04-11T12:43:36.313 [DEBUG] [Thread-170028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:37.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 43, 10), 0.037095, 99.7188, 0.0, 20.2738, 13.5796, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:43:37.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:43:10
2026-04-11T12:43:37.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:43:37.875 [DEBUG] [Thread-170029] [transport.py] [_log()] starting thread (client mode): 0xa795c910
2026-04-11T12:43:37.875 [DEBUG] [Thread-170029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:43:37.898 [DEBUG] [Thread-170029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:43:37.898 [INFO] [Thread-170029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] client lang: <none>
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] server lang: <none>
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] kex follows: False
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:43:37.902 [DEBUG] [Thread-170029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:43:37.903 [DEBUG] [Thread-170029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:43:37.903 [DEBUG] [Thread-170029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:43:37.903 [DEBUG] [Thread-170029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:43:37.903 [DEBUG] [Thread-170029] [transport.py] [_log()] Compression: none
2026-04-11T12:43:37.903 [DEBUG] [Thread-170029] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:43:37.918 [DEBUG] [Thread-170029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:43:37.919 [DEBUG] [Thread-170029] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:43:37.919 [DEBUG] [Thread-170029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:43:37.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:43:37.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:43:37.921 [DEBUG] [Thread-170029] [transport.py] [_log()] userauth is OK
2026-04-11T12:43:37.922 [DEBUG] [Thread-170029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:43:37.922 [DEBUG] [Thread-170029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:43:37.922 [DEBUG] [Thread-170029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:43:37.922 [DEBUG] [Thread-170029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:43:37.946 [INFO] [Thread-170029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:43:37.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:43:38.755 [DEBUG] [Thread-170029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:43:38.755 [DEBUG] [Thread-170029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:43:38.756 [DEBUG] [Thread-170029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:43:38.796 [DEBUG] [Thread-170029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:43:38.796 [DEBUG] [Thread-170029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:43:38.800 [DEBUG] [Thread-170029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:43:38.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:43:38.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:43:38.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:43:38.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:43:38.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:43:38.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:43:38.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:43:38.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:43:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:43:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.446299 -999.00  +13.50  21.30     97  +13.10 1 3 1 3 1   888    0 0.50 2.48 ----- 21.0 21.3 52.0 25.0 15.5 0.2 15.5 -0.1 15.2 -0.6 15.4 0.3
2026-04-11T12:43:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:43:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:43:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.446299
2026-04-11T12:43:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:43:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:43:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:43:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:43:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:43:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:43:10', tmtdew=0.037095, humidity=99.7188, cloud=0.0, wind=20.2738, temperature=13.5796, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:42:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:43:38.826 [DEBUG] [Thread-170029] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:43:38.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:43:38.923 [DEBUG] [Thread-170032] [transport.py] [_log()] starting thread (client mode): 0xa795fe80
2026-04-11T12:43:38.923 [DEBUG] [Thread-170032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:43:38.937 [DEBUG] [Thread-170032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:43:38.937 [INFO] [Thread-170032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:43:38.945 [DEBUG] [Thread-170032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:43:38.946 [DEBUG] [Thread-170032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] client lang: <none>
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] server lang: <none>
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] kex follows: False
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] Compression: none
2026-04-11T12:43:38.947 [DEBUG] [Thread-170032] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:43:39.009 [DEBUG] [Thread-170032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:43:39.009 [DEBUG] [Thread-170032] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:43:39.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:43:39.010 [DEBUG] [Thread-170032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:43:39.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:43:39.065 [DEBUG] [Thread-170032] [transport.py] [_log()] userauth is OK
2026-04-11T12:43:39.065 [DEBUG] [Thread-170032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:43:39.065 [DEBUG] [Thread-170032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:43:39.065 [DEBUG] [Thread-170032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:43:39.065 [DEBUG] [Thread-170032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:43:39.091 [INFO] [Thread-170032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:43:39.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:43:39.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:43:39.925 [DEBUG] [Thread-170032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:43:39.925 [DEBUG] [Thread-170032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:43:39.973 [DEBUG] [Thread-170032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:43:39.973 [DEBUG] [Thread-170032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:43:39.982 [DEBUG] [Thread-170032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:43:39.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:43:39.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-04-11T12:43:40.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:43:40.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:43:40.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:43:40.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:43:40.018 [DEBUG] [Thread-170032] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:43:51.351 [DEBUG] [Thread-170034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:55.740 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:43:55.742 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:05.598 [DEBUG] [Thread-170035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:06.412 [DEBUG] [Thread-170036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:44:10.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:44:10.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-04-11T12:44:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 43, 46), 0.05874, 99.537, 0.0, 21.5244, 14.1586, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:44:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:43:46
2026-04-11T12:44:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:44:11.993 [DEBUG] [Thread-170037] [transport.py] [_log()] starting thread (client mode): 0xa79b7430
2026-04-11T12:44:11.993 [DEBUG] [Thread-170037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:44:12.013 [DEBUG] [Thread-170037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:44:12.013 [INFO] [Thread-170037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:44:12.015 [DEBUG] [Thread-170037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] client lang: <none>
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] server lang: <none>
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] kex follows: False
2026-04-11T12:44:12.016 [DEBUG] [Thread-170037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:44:12.017 [DEBUG] [Thread-170037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:44:12.017 [DEBUG] [Thread-170037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:44:12.017 [DEBUG] [Thread-170037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:44:12.017 [DEBUG] [Thread-170037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:44:12.017 [DEBUG] [Thread-170037] [transport.py] [_log()] Compression: none
2026-04-11T12:44:12.017 [DEBUG] [Thread-170037] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:44:12.036 [DEBUG] [Thread-170037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:44:12.036 [DEBUG] [Thread-170037] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:44:12.037 [DEBUG] [Thread-170037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:44:12.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:44:12.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:44:12.040 [DEBUG] [Thread-170037] [transport.py] [_log()] userauth is OK
2026-04-11T12:44:12.040 [DEBUG] [Thread-170037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:44:12.040 [DEBUG] [Thread-170037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:44:12.040 [DEBUG] [Thread-170037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:44:12.040 [DEBUG] [Thread-170037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:44:12.064 [INFO] [Thread-170037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:44:12.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:44:12.837 [DEBUG] [Thread-170037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:44:12.837 [DEBUG] [Thread-170037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:44:12.838 [DEBUG] [Thread-170037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:44:12.878 [DEBUG] [Thread-170037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:44:12.878 [DEBUG] [Thread-170037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:44:12.882 [DEBUG] [Thread-170037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:44:12.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:44:12.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:44:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:44:12.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:44:12.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:44:12.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:44:12.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:44:12.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:44:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:44:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.446647 -999.00  +13.40  20.79     97  +12.90 1 3 1 3 1   888    0 0.51 2.77 ----- 21.2 20.8 40.4 23.5 15.4 -0.1 15.5 -0.5 15.2 -0.3 15.4 0.3
2026-04-11T12:44:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:44:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:44:12.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.446647
2026-04-11T12:44:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:44:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:44:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:44:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:44:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:44:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:43:46', tmtdew=0.05874, humidity=99.537, cloud=0.0, wind=21.5244, temperature=14.1586, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:43:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:44:12.910 [DEBUG] [Thread-170037] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:44:12.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:44:13.007 [DEBUG] [Thread-170040] [transport.py] [_log()] starting thread (client mode): 0xa79b7b20
2026-04-11T12:44:13.007 [DEBUG] [Thread-170040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:44:13.022 [DEBUG] [Thread-170040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:44:13.022 [INFO] [Thread-170040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:44:13.029 [DEBUG] [Thread-170040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:44:13.029 [DEBUG] [Thread-170040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] client lang: <none>
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] server lang: <none>
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] kex follows: False
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:44:13.030 [DEBUG] [Thread-170040] [transport.py] [_log()] Compression: none
2026-04-11T12:44:13.031 [DEBUG] [Thread-170040] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:44:13.088 [DEBUG] [Thread-170040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:44:13.088 [DEBUG] [Thread-170040] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:44:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:44:13.089 [DEBUG] [Thread-170040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:44:13.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:44:13.144 [DEBUG] [Thread-170040] [transport.py] [_log()] userauth is OK
2026-04-11T12:44:13.144 [DEBUG] [Thread-170040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:44:13.145 [DEBUG] [Thread-170040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:44:13.145 [DEBUG] [Thread-170040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:44:13.145 [DEBUG] [Thread-170040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:44:13.166 [INFO] [Thread-170040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:44:13.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:44:13.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:44:14.021 [DEBUG] [Thread-170040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:44:14.022 [DEBUG] [Thread-170040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:44:14.069 [DEBUG] [Thread-170040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:44:14.069 [DEBUG] [Thread-170040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:44:14.078 [DEBUG] [Thread-170040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:44:14.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:44:14.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-04-11T12:44:14.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-04-11T12:44:14.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:44:14.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:44:14.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:44:14.115 [DEBUG] [Thread-170040] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:44:21.446 [DEBUG] [Thread-170042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:36.501 [DEBUG] [Thread-170043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:44:44.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:44:44.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-04-11T12:44:45.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 44, 21), 0.07937, 99.7684, 0.0, 19.921, 13.6955, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:44:45.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:44:21
2026-04-11T12:44:45.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:44:45.958 [DEBUG] [Thread-170044] [transport.py] [_log()] starting thread (client mode): 0xae5b51e0
2026-04-11T12:44:45.958 [DEBUG] [Thread-170044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:44:45.978 [DEBUG] [Thread-170044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:44:45.979 [INFO] [Thread-170044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:44:45.982 [DEBUG] [Thread-170044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] client lang: <none>
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] server lang: <none>
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] kex follows: False
2026-04-11T12:44:45.983 [DEBUG] [Thread-170044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:44:45.984 [DEBUG] [Thread-170044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:44:45.984 [DEBUG] [Thread-170044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:44:45.984 [DEBUG] [Thread-170044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:44:45.984 [DEBUG] [Thread-170044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:44:45.984 [DEBUG] [Thread-170044] [transport.py] [_log()] Compression: none
2026-04-11T12:44:45.984 [DEBUG] [Thread-170044] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:44:46.002 [DEBUG] [Thread-170044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:44:46.003 [DEBUG] [Thread-170044] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:44:46.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:44:46.005 [DEBUG] [Thread-170044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:44:46.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:44:46.006 [DEBUG] [Thread-170044] [transport.py] [_log()] userauth is OK
2026-04-11T12:44:46.007 [DEBUG] [Thread-170044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:44:46.007 [DEBUG] [Thread-170044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:44:46.007 [DEBUG] [Thread-170044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:44:46.007 [DEBUG] [Thread-170044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:44:46.044 [INFO] [Thread-170044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:44:46.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:44:46.865 [DEBUG] [Thread-170044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:44:46.866 [DEBUG] [Thread-170044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:44:46.866 [DEBUG] [Thread-170044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:44:46.907 [DEBUG] [Thread-170044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:44:46.907 [DEBUG] [Thread-170044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:44:46.911 [DEBUG] [Thread-170044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:44:46.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:44:46.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:44:46.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:44:46.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:44:46.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:44:46.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:44:46.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:44:46.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:44:46.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.447341 -999.00  +13.50  18.96     97  +13.10 1 3 1 3 1   888    0 0.52 2.64 ----- 18.4 19.0 56.8 24.6 15.5 0.4 15.5 0.1 15.3 -0.0 15.4 0.8
2026-04-11T12:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.447341
2026-04-11T12:44:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:44:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:44:21', tmtdew=0.07937, humidity=99.7684, cloud=0.0, wind=19.921, temperature=13.6955, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:44:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:44:46.937 [DEBUG] [Thread-170044] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:44:47.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:44:47.031 [DEBUG] [Thread-170047] [transport.py] [_log()] starting thread (client mode): 0xb39c7340
2026-04-11T12:44:47.031 [DEBUG] [Thread-170047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:44:47.046 [DEBUG] [Thread-170047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:44:47.047 [INFO] [Thread-170047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:44:47.054 [DEBUG] [Thread-170047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:44:47.054 [DEBUG] [Thread-170047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:44:47.054 [DEBUG] [Thread-170047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] client lang: <none>
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] server lang: <none>
2026-04-11T12:44:47.055 [DEBUG] [Thread-170047] [transport.py] [_log()] kex follows: False
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] Compression: none
2026-04-11T12:44:47.056 [DEBUG] [Thread-170047] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:44:47.115 [DEBUG] [Thread-170047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:44:47.115 [DEBUG] [Thread-170047] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:44:47.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:44:47.117 [DEBUG] [Thread-170047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:44:47.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:44:47.182 [DEBUG] [Thread-170047] [transport.py] [_log()] userauth is OK
2026-04-11T12:44:47.182 [DEBUG] [Thread-170047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:44:47.182 [DEBUG] [Thread-170047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:44:47.182 [DEBUG] [Thread-170047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:44:47.183 [DEBUG] [Thread-170047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:44:47.203 [INFO] [Thread-170047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:44:47.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:44:47.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:44:48.026 [DEBUG] [Thread-170047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:44:48.027 [DEBUG] [Thread-170047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:44:48.075 [DEBUG] [Thread-170047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:44:48.076 [DEBUG] [Thread-170047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:44:48.084 [DEBUG] [Thread-170047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:44:48.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:44:48.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:44:48.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:44:48.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:44:48.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:44:48.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:44:48.118 [DEBUG] [Thread-170047] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:44:51.538 [DEBUG] [Thread-170049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:55.883 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:44:55.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:05.632 [DEBUG] [Thread-170050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:06.588 [DEBUG] [Thread-170051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:18.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:45:18.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:45:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:45:19.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 44, 56), 0.03195, 99.7518, 0.0, 17.91, 13.6624, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:45:19.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:44:56
2026-04-11T12:45:19.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:45:19.982 [DEBUG] [Thread-170052] [transport.py] [_log()] starting thread (client mode): 0xae5b7d60
2026-04-11T12:45:19.983 [DEBUG] [Thread-170052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:45:20.004 [DEBUG] [Thread-170052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:45:20.004 [INFO] [Thread-170052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] client lang: <none>
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] server lang: <none>
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] kex follows: False
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:45:20.007 [DEBUG] [Thread-170052] [transport.py] [_log()] Compression: none
2026-04-11T12:45:20.008 [DEBUG] [Thread-170052] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:45:20.025 [DEBUG] [Thread-170052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:45:20.025 [DEBUG] [Thread-170052] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:45:20.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:45:20.026 [DEBUG] [Thread-170052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:45:20.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:45:20.028 [DEBUG] [Thread-170052] [transport.py] [_log()] userauth is OK
2026-04-11T12:45:20.028 [DEBUG] [Thread-170052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:45:20.029 [DEBUG] [Thread-170052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:45:20.029 [DEBUG] [Thread-170052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:45:20.029 [DEBUG] [Thread-170052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:45:20.053 [INFO] [Thread-170052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:45:20.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:45:21.179 [DEBUG] [Thread-170052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:45:21.179 [DEBUG] [Thread-170052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:45:21.180 [DEBUG] [Thread-170052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:45:21.220 [DEBUG] [Thread-170052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:45:21.220 [DEBUG] [Thread-170052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:45:21.224 [DEBUG] [Thread-170052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:45:21.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:45:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:45:21.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:45:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:45:21.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:45:21.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:45:21.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:45:21.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:45:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:45:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.447688 -999.00  +13.70  21.12     97  +13.20 1 3 1 3 1   888    0 0.51 2.44 ----- 20.1 21.1 60.6 22.6 15.6 0.5 15.6 -0.2 15.2 -0.0 15.5 0.6
2026-04-11T12:45:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:45:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:45:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.447688
2026-04-11T12:45:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:44:56', tmtdew=0.03195, humidity=99.7518, cloud=0.0, wind=17.91, temperature=13.6624, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:44:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:45:21.273 [DEBUG] [Thread-170052] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:45: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-04-11T12:45:21.368 [DEBUG] [Thread-170055] [transport.py] [_log()] starting thread (client mode): 0xae5b6680
2026-04-11T12:45:21.368 [DEBUG] [Thread-170055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:45:21.382 [DEBUG] [Thread-170055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:45:21.383 [INFO] [Thread-170055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:45:21.390 [DEBUG] [Thread-170055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:45:21.390 [DEBUG] [Thread-170055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:45:21.390 [DEBUG] [Thread-170055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] client lang: <none>
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] server lang: <none>
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] kex follows: False
2026-04-11T12:45:21.391 [DEBUG] [Thread-170055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:45:21.392 [DEBUG] [Thread-170055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:45:21.392 [DEBUG] [Thread-170055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:45:21.392 [DEBUG] [Thread-170055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:45:21.392 [DEBUG] [Thread-170055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:45:21.392 [DEBUG] [Thread-170055] [transport.py] [_log()] Compression: none
2026-04-11T12:45:21.392 [DEBUG] [Thread-170055] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:45:21.450 [DEBUG] [Thread-170055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:45:21.451 [DEBUG] [Thread-170055] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:45:21.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:45:21.453 [DEBUG] [Thread-170055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:45:21.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:45:21.506 [DEBUG] [Thread-170055] [transport.py] [_log()] userauth is OK
2026-04-11T12:45:21.507 [DEBUG] [Thread-170055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:45:21.507 [DEBUG] [Thread-170055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:45:21.507 [DEBUG] [Thread-170055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:45:21.507 [DEBUG] [Thread-170055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:45:21.526 [INFO] [Thread-170055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:45:21.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:45:21.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:45:21.626 [DEBUG] [Thread-170057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:22.344 [DEBUG] [Thread-170055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:45:22.345 [DEBUG] [Thread-170055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:45:22.392 [DEBUG] [Thread-170055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:45:22.392 [DEBUG] [Thread-170055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:45:22.402 [DEBUG] [Thread-170055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:45:22.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:45:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:45:22.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-04-11T12:45:22.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:45:22.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:45:22.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:45:22.439 [DEBUG] [Thread-170055] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:45:36.683 [DEBUG] [Thread-170058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:51.720 [DEBUG] [Thread-170059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:52.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:45:52.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:45:52.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-04-11T12:45:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 45, 32), 0.03454, 99.7351, 0.0, 17.7865, 13.6457, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:45:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:45:32
2026-04-11T12:45:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:45:54.353 [DEBUG] [Thread-170060] [transport.py] [_log()] starting thread (client mode): 0xa79b6440
2026-04-11T12:45:54.353 [DEBUG] [Thread-170060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:45:54.373 [DEBUG] [Thread-170060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:45:54.373 [INFO] [Thread-170060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:54.376 [DEBUG] [Thread-170060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] client lang: <none>
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] server lang: <none>
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] kex follows: False
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] Compression: none
2026-04-11T12:45:54.377 [DEBUG] [Thread-170060] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:45:54.390 [DEBUG] [Thread-170060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:45:54.390 [DEBUG] [Thread-170060] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:45:54.390 [DEBUG] [Thread-170060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:45:54.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:45:54.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:45:54.392 [DEBUG] [Thread-170060] [transport.py] [_log()] userauth is OK
2026-04-11T12:45:54.392 [DEBUG] [Thread-170060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:45:54.392 [DEBUG] [Thread-170060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:45:54.392 [DEBUG] [Thread-170060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:45:54.392 [DEBUG] [Thread-170060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:45:54.415 [INFO] [Thread-170060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:45:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:45:55.186 [DEBUG] [Thread-170060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:45:55.186 [DEBUG] [Thread-170060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:45:55.187 [DEBUG] [Thread-170060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:45:55.227 [DEBUG] [Thread-170060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:45:55.227 [DEBUG] [Thread-170060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:45:55.231 [DEBUG] [Thread-170060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:45:55.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:45:55.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:45:55.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:45:55.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:45:55.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:45:55.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:45:55.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:45:55.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:45:55.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:45:55.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.448035 -999.00  +13.70  21.77     97  +13.20 1 3 1 3 1   888    0 0.50 2.26 ----- 21.4 21.8 62.2 24.2 15.5 0.6 15.6 -0.2 15.3 -0.1 15.6 0.4
2026-04-11T12:45:55.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:45:55.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:45:55.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.448035
2026-04-11T12:45:55.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:45:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:45:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:45:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:45:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:45:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:45:32', tmtdew=0.03454, humidity=99.7351, cloud=0.0, wind=17.7865, temperature=13.6457, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:45:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:45:55.256 [DEBUG] [Thread-170060] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:45:55.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:45:55.350 [DEBUG] [Thread-170063] [transport.py] [_log()] starting thread (client mode): 0xae5b7ca0
2026-04-11T12:45:55.350 [DEBUG] [Thread-170063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:45:55.365 [DEBUG] [Thread-170063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:45:55.366 [INFO] [Thread-170063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:45:55.373 [DEBUG] [Thread-170063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:45:55.374 [DEBUG] [Thread-170063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] client lang: <none>
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] server lang: <none>
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] kex follows: False
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:45:55.375 [DEBUG] [Thread-170063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:45:55.376 [DEBUG] [Thread-170063] [transport.py] [_log()] Compression: none
2026-04-11T12:45:55.376 [DEBUG] [Thread-170063] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:45:55.431 [DEBUG] [Thread-170063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:45:55.431 [DEBUG] [Thread-170063] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:45:55.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:45:55.433 [DEBUG] [Thread-170063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:45:55.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:45:55.490 [DEBUG] [Thread-170063] [transport.py] [_log()] userauth is OK
2026-04-11T12:45:55.490 [DEBUG] [Thread-170063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:45:55.490 [DEBUG] [Thread-170063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:45:55.490 [DEBUG] [Thread-170063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:45:55.491 [DEBUG] [Thread-170063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:45:55.509 [INFO] [Thread-170063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:45:55.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:45:55.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:45:56.025 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:56.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:45:56.334 [DEBUG] [Thread-170063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:45:56.334 [DEBUG] [Thread-170063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:45:56.382 [DEBUG] [Thread-170063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:45:56.382 [DEBUG] [Thread-170063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:45:56.392 [DEBUG] [Thread-170063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:45:56.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:45:56.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-04-11T12:45:56.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-04-11T12:45:56.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:45:56.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:45:56.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:45:56.428 [DEBUG] [Thread-170063] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:46:05.666 [DEBUG] [Thread-170065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:46:06.757 [DEBUG] [Thread-170066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:46:21.812 [DEBUG] [Thread-170067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:46:26.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:46:26.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:46:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:46:27.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 46, 8), 0.03711, 99.7186, 0.0, 18.6156, 13.6623, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:46:27.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:46:08
2026-04-11T12:46:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:46:28.261 [DEBUG] [Thread-170068] [transport.py] [_log()] starting thread (client mode): 0xa79b60e0
2026-04-11T12:46:28.261 [DEBUG] [Thread-170068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:46:28.280 [DEBUG] [Thread-170068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:46:28.280 [INFO] [Thread-170068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] client lang: <none>
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] server lang: <none>
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] kex follows: False
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:46:28.282 [DEBUG] [Thread-170068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:46:28.283 [DEBUG] [Thread-170068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:46:28.283 [DEBUG] [Thread-170068] [transport.py] [_log()] Compression: none
2026-04-11T12:46:28.283 [DEBUG] [Thread-170068] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:46:28.296 [DEBUG] [Thread-170068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:46:28.296 [DEBUG] [Thread-170068] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:46:28.297 [DEBUG] [Thread-170068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:46:28.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:46:28.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:46:28.299 [DEBUG] [Thread-170068] [transport.py] [_log()] userauth is OK
2026-04-11T12:46:28.299 [DEBUG] [Thread-170068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:46:28.300 [DEBUG] [Thread-170068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:46:28.300 [DEBUG] [Thread-170068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:46:28.300 [DEBUG] [Thread-170068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:46:28.323 [INFO] [Thread-170068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:46:28.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:46:29.099 [DEBUG] [Thread-170068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:46:29.100 [DEBUG] [Thread-170068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:46:29.100 [DEBUG] [Thread-170068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:46:29.141 [DEBUG] [Thread-170068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:46:29.141 [DEBUG] [Thread-170068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:46:29.145 [DEBUG] [Thread-170068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:46:29.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:46:29.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:46:29.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:46:29.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:46:29.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:46:29.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:46:29.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:46:29.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:46:29.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:46:29.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.448383 -999.00  +13.70  20.38     97  +13.30 1 3 1 3 1   888    0 0.49 2.06 ----- 18.8 20.4 53.4 21.1 15.6 0.3 15.6 -0.5 15.3 -0.7 15.6 0.3
2026-04-11T12:46:29.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:46:29.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:46:29.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.448383
2026-04-11T12:46:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:46:29.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:46:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:46:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:46:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:46:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:46:08', tmtdew=0.03711, humidity=99.7186, cloud=0.0, wind=18.6156, temperature=13.6623, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:45:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:46:29.170 [DEBUG] [Thread-170068] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:46:29.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:46:29.263 [DEBUG] [Thread-170071] [transport.py] [_log()] starting thread (client mode): 0xa795fc10
2026-04-11T12:46:29.263 [DEBUG] [Thread-170071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:46:29.278 [DEBUG] [Thread-170071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:46:29.278 [INFO] [Thread-170071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:46:29.286 [DEBUG] [Thread-170071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] client lang: <none>
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] server lang: <none>
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] kex follows: False
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] Compression: none
2026-04-11T12:46:29.287 [DEBUG] [Thread-170071] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:46:29.347 [DEBUG] [Thread-170071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:46:29.348 [DEBUG] [Thread-170071] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:46:29.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:46:29.349 [DEBUG] [Thread-170071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:46:29.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:46:29.406 [DEBUG] [Thread-170071] [transport.py] [_log()] userauth is OK
2026-04-11T12:46:29.407 [DEBUG] [Thread-170071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:46:29.407 [DEBUG] [Thread-170071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:46:29.407 [DEBUG] [Thread-170071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:46:29.407 [DEBUG] [Thread-170071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:46:29.425 [INFO] [Thread-170071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:46: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-04-11T12:46:29.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:46:30.250 [DEBUG] [Thread-170071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:46:30.250 [DEBUG] [Thread-170071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:46:30.298 [DEBUG] [Thread-170071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:46:30.298 [DEBUG] [Thread-170071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:46:30.307 [DEBUG] [Thread-170071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:46:30.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:46:30.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-04-11T12:46:30.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:46:30.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:46:30.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:46:30.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:46:30.344 [DEBUG] [Thread-170071] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:46:36.854 [DEBUG] [Thread-170073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:46:51.909 [DEBUG] [Thread-170074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:46:56.166 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:46:56.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:00.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:47:00.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:47:00.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-04-11T12:47:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 46, 43), 0.08455, 99.3706, 0.0, 20.2896, 14.1914, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:47:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:46:43
2026-04-11T12:47:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:47:02.295 [DEBUG] [Thread-170075] [transport.py] [_log()] starting thread (client mode): 0xae5b0100
2026-04-11T12:47:02.295 [DEBUG] [Thread-170075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:47:02.315 [DEBUG] [Thread-170075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:47:02.315 [INFO] [Thread-170075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:47:02.318 [DEBUG] [Thread-170075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:47:02.318 [DEBUG] [Thread-170075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:47:02.318 [DEBUG] [Thread-170075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:47:02.318 [DEBUG] [Thread-170075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:02.318 [DEBUG] [Thread-170075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] client lang: <none>
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] server lang: <none>
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] kex follows: False
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] Compression: none
2026-04-11T12:47:02.319 [DEBUG] [Thread-170075] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:47:02.336 [DEBUG] [Thread-170075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:47:02.336 [DEBUG] [Thread-170075] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:47:02.337 [DEBUG] [Thread-170075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:47:02.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:47:02.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:47:02.381 [DEBUG] [Thread-170075] [transport.py] [_log()] userauth is OK
2026-04-11T12:47:02.382 [DEBUG] [Thread-170075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:47:02.382 [DEBUG] [Thread-170075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:47:02.382 [DEBUG] [Thread-170075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:47:02.382 [DEBUG] [Thread-170075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:47:02.402 [INFO] [Thread-170075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:47:02.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:47:03.244 [DEBUG] [Thread-170075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:47:03.244 [DEBUG] [Thread-170075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:47:03.244 [DEBUG] [Thread-170075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:47:03.285 [DEBUG] [Thread-170075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:47:03.285 [DEBUG] [Thread-170075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:47:03.288 [DEBUG] [Thread-170075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:47:03.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:47:03.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:47:03.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:47:03.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:47:03.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:47:03.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:47:03.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:47:03.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:47:03.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:47:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.448730 -999.00  +13.70  19.71     97  +13.20 1 3 1 3 1   888    0 0.49 1.89 ----- 20.5 19.7 54.0 21.9 15.6 0.3 15.6 -0.2 15.3 -0.5 15.6 0.3
2026-04-11T12:47:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:47:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:47:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.448730
2026-04-11T12:47:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:47:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:47:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:47:03.314 [DEBUG] [Thread-170075] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:47:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:47:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:47:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:46:43', tmtdew=0.08455, humidity=99.3706, cloud=0.0, wind=20.2896, temperature=14.1914, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:46:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:47:03.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:47:03.422 [DEBUG] [Thread-170078] [transport.py] [_log()] starting thread (client mode): 0xa795f8b0
2026-04-11T12:47:03.423 [DEBUG] [Thread-170078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:47:03.436 [DEBUG] [Thread-170078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:47:03.437 [INFO] [Thread-170078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:47:03.444 [DEBUG] [Thread-170078] [transport.py] [_log()] client lang: <none>
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] server lang: <none>
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] kex follows: False
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] Compression: none
2026-04-11T12:47:03.445 [DEBUG] [Thread-170078] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:47:03.503 [DEBUG] [Thread-170078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:47:03.503 [DEBUG] [Thread-170078] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:47:03.504 [DEBUG] [Thread-170078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:47:03.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:47:03.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:47:03.559 [DEBUG] [Thread-170078] [transport.py] [_log()] userauth is OK
2026-04-11T12:47:03.559 [DEBUG] [Thread-170078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:47:03.559 [DEBUG] [Thread-170078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:47:03.559 [DEBUG] [Thread-170078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:47:03.559 [DEBUG] [Thread-170078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:47:03.578 [INFO] [Thread-170078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:47:03.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:47:03.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:47:04.422 [DEBUG] [Thread-170078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:47:04.423 [DEBUG] [Thread-170078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:47:04.471 [DEBUG] [Thread-170078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:47:04.471 [DEBUG] [Thread-170078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:47:04.480 [DEBUG] [Thread-170078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:47:04.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:47:04.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-04-11T12:47:04.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-04-11T12:47:04.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:47:04.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:47:04.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:47:04.521 [DEBUG] [Thread-170078] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:47:05.705 [DEBUG] [Thread-170080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:06.945 [DEBUG] [Thread-170081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:21.995 [DEBUG] [Thread-170082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:34.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:47:34.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:47:34.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:47:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 47, 18), 0.08711, 99.7185, 0.0, 18.9691, 13.9286, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:47:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:47:18
2026-04-11T12:47:36.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:47:36.379 [DEBUG] [Thread-170083] [transport.py] [_log()] starting thread (client mode): 0xae5e5a50
2026-04-11T12:47:36.379 [DEBUG] [Thread-170083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:47:36.392 [DEBUG] [Thread-170083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:47:36.392 [INFO] [Thread-170083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] client lang: <none>
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] server lang: <none>
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] kex follows: False
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:47:36.395 [DEBUG] [Thread-170083] [transport.py] [_log()] Compression: none
2026-04-11T12:47:36.396 [DEBUG] [Thread-170083] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:47:36.413 [DEBUG] [Thread-170083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:47:36.414 [DEBUG] [Thread-170083] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:47:36.414 [DEBUG] [Thread-170083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:47:36.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:47:36.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:47:36.416 [DEBUG] [Thread-170083] [transport.py] [_log()] userauth is OK
2026-04-11T12:47:36.416 [DEBUG] [Thread-170083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:47:36.416 [DEBUG] [Thread-170083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:47:36.417 [DEBUG] [Thread-170083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:47:36.417 [DEBUG] [Thread-170083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:47:36.440 [INFO] [Thread-170083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:47:36.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:47:37.032 [DEBUG] [Thread-170085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:37.249 [DEBUG] [Thread-170083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:47:37.249 [DEBUG] [Thread-170083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:47:37.249 [DEBUG] [Thread-170083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:47:37.290 [DEBUG] [Thread-170083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:47:37.290 [DEBUG] [Thread-170083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:47:37.294 [DEBUG] [Thread-170083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:47:37.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:47:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:47:37.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:47:37.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:47:37.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:47:37.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:47:37.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:47:37.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:47:37.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:47:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.449077 -999.00  +13.70  19.66     97  +13.20 1 3 1 3 1   888    0 0.49 1.95 ----- 22.0 19.7 52.2 22.6 15.6 0.3 15.7 -0.1 15.4 -0.4 15.6 0.7
2026-04-11T12:47:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:47:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:47:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.449077
2026-04-11T12:47:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:47:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:47:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:47:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:47:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:47:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:47:18', tmtdew=0.08711, humidity=99.7185, cloud=0.0, wind=18.9691, temperature=13.9286, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:46:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:47:37.319 [DEBUG] [Thread-170083] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:47:37.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:47:37.412 [DEBUG] [Thread-170087] [transport.py] [_log()] starting thread (client mode): 0xa795c970
2026-04-11T12:47:37.413 [DEBUG] [Thread-170087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:47:37.427 [DEBUG] [Thread-170087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:47:37.428 [INFO] [Thread-170087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:47:37.435 [DEBUG] [Thread-170087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:47:37.435 [DEBUG] [Thread-170087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:47:37.435 [DEBUG] [Thread-170087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:47:37.435 [DEBUG] [Thread-170087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:37.435 [DEBUG] [Thread-170087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] client lang: <none>
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] server lang: <none>
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] kex follows: False
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] Compression: none
2026-04-11T12:47:37.436 [DEBUG] [Thread-170087] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:47:37.495 [DEBUG] [Thread-170087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:47:37.496 [DEBUG] [Thread-170087] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:47:37.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:47:37.497 [DEBUG] [Thread-170087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:47:37.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:47:37.551 [DEBUG] [Thread-170087] [transport.py] [_log()] userauth is OK
2026-04-11T12:47:37.552 [DEBUG] [Thread-170087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:47:37.552 [DEBUG] [Thread-170087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:47:37.552 [DEBUG] [Thread-170087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:47:37.552 [DEBUG] [Thread-170087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:47:37.576 [INFO] [Thread-170087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:47:37.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:47:37.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:47:38.385 [DEBUG] [Thread-170087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:47:38.385 [DEBUG] [Thread-170087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:47:38.433 [DEBUG] [Thread-170087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:47:38.434 [DEBUG] [Thread-170087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:47:38.442 [DEBUG] [Thread-170087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:47:38.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:47:38.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-04-11T12:47:38.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-04-11T12:47:38.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:47:38.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:47:38.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:47:38.476 [DEBUG] [Thread-170087] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:47:52.063 [DEBUG] [Thread-170089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:56.309 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:47:56.310 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:05.740 [DEBUG] [Thread-170090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:07.125 [DEBUG] [Thread-170091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:48:08.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:48: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-04-11T12:48:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 47, 54), 0.07429, 99.4368, 0.0, 12.9866, 14.125, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:48:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:47:54
2026-04-11T12:48:10.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:48:10.281 [DEBUG] [Thread-170092] [transport.py] [_log()] starting thread (client mode): 0xae5b1420
2026-04-11T12:48:10.281 [DEBUG] [Thread-170092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:48:10.300 [DEBUG] [Thread-170092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:48:10.300 [INFO] [Thread-170092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:48:10.303 [DEBUG] [Thread-170092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:48:10.303 [DEBUG] [Thread-170092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] client lang: <none>
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] server lang: <none>
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] kex follows: False
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:48:10.304 [DEBUG] [Thread-170092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:48:10.305 [DEBUG] [Thread-170092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:48:10.305 [DEBUG] [Thread-170092] [transport.py] [_log()] Compression: none
2026-04-11T12:48:10.305 [DEBUG] [Thread-170092] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:48:10.322 [DEBUG] [Thread-170092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:48:10.322 [DEBUG] [Thread-170092] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:48:10.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:48:10.323 [DEBUG] [Thread-170092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:48:10.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:48:10.325 [DEBUG] [Thread-170092] [transport.py] [_log()] userauth is OK
2026-04-11T12:48:10.325 [DEBUG] [Thread-170092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:48:10.326 [DEBUG] [Thread-170092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:48:10.326 [DEBUG] [Thread-170092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:48:10.326 [DEBUG] [Thread-170092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:48:10.344 [INFO] [Thread-170092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:48:10.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:48:11.247 [DEBUG] [Thread-170092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:48:11.247 [DEBUG] [Thread-170092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:48:11.247 [DEBUG] [Thread-170092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:48:11.288 [DEBUG] [Thread-170092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:48:11.288 [DEBUG] [Thread-170092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:48:11.291 [DEBUG] [Thread-170092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:48:11.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:48:11.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:48:11.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:48:11.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:48:11.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:48:11.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:48:11.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:48:11.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:48:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:48:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.449424 -999.00  +13.60  22.61     97  +13.10 1 3 1 3 1   888    0 0.49 1.85 ----- 21.2 22.6 57.0 24.1 15.7 0.2 15.6 -0.1 15.4 -0.3 15.6 0.7
2026-04-11T12:48:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:48:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:48:11.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.449424
2026-04-11T12:48:11.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:48:11.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:48:11.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:48:11.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:48:11.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:48:11.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:47:54', tmtdew=0.07429, humidity=99.4368, cloud=0.0, wind=12.9866, temperature=14.125, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:47:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:48:11.318 [DEBUG] [Thread-170092] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:48:11.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:48:11.414 [DEBUG] [Thread-170095] [transport.py] [_log()] starting thread (client mode): 0xae5e6440
2026-04-11T12:48:11.414 [DEBUG] [Thread-170095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:48:11.428 [DEBUG] [Thread-170095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:48:11.429 [INFO] [Thread-170095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:48:11.436 [DEBUG] [Thread-170095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] client lang: <none>
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] server lang: <none>
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] kex follows: False
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:48:11.437 [DEBUG] [Thread-170095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:48:11.438 [DEBUG] [Thread-170095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:48:11.438 [DEBUG] [Thread-170095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:48:11.438 [DEBUG] [Thread-170095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:48:11.438 [DEBUG] [Thread-170095] [transport.py] [_log()] Compression: none
2026-04-11T12:48:11.438 [DEBUG] [Thread-170095] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:48:11.496 [DEBUG] [Thread-170095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:48:11.496 [DEBUG] [Thread-170095] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:48:11.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:48:11.497 [DEBUG] [Thread-170095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:48:11.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:48:11.551 [DEBUG] [Thread-170095] [transport.py] [_log()] userauth is OK
2026-04-11T12:48:11.552 [DEBUG] [Thread-170095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:48:11.552 [DEBUG] [Thread-170095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:48:11.552 [DEBUG] [Thread-170095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:48:11.552 [DEBUG] [Thread-170095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:48:11.572 [INFO] [Thread-170095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:48:11.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:48:11.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:48:12.391 [DEBUG] [Thread-170095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:48:12.392 [DEBUG] [Thread-170095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:48:12.439 [DEBUG] [Thread-170095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:48:12.439 [DEBUG] [Thread-170095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:48:12.448 [DEBUG] [Thread-170095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:48:12.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:48:12.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-04-11T12:48:12.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-04-11T12:48:12.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:48:12.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:48:12.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:48:12.482 [DEBUG] [Thread-170095] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:48:22.162 [DEBUG] [Thread-170097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:37.214 [DEBUG] [Thread-170098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:42.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:48:42.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:48:42.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:48:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 48, 29), 0.089715, 99.7018, 0.0, 15.264, 13.6293, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:48:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:48:29
2026-04-11T12:48:44.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:48:44.374 [DEBUG] [Thread-170099] [transport.py] [_log()] starting thread (client mode): 0xa79b7c40
2026-04-11T12:48:44.374 [DEBUG] [Thread-170099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:48:44.395 [DEBUG] [Thread-170099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:48:44.395 [INFO] [Thread-170099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:48:44.398 [DEBUG] [Thread-170099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:48:44.398 [DEBUG] [Thread-170099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:48:44.398 [DEBUG] [Thread-170099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] client lang: <none>
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] server lang: <none>
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] kex follows: False
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] Compression: none
2026-04-11T12:48:44.399 [DEBUG] [Thread-170099] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:48:44.408 [DEBUG] [Thread-170099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:48:44.409 [DEBUG] [Thread-170099] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:48:44.409 [DEBUG] [Thread-170099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:48:44.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:48:44.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:48:44.411 [DEBUG] [Thread-170099] [transport.py] [_log()] userauth is OK
2026-04-11T12:48:44.411 [DEBUG] [Thread-170099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:48:44.412 [DEBUG] [Thread-170099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:48:44.412 [DEBUG] [Thread-170099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:48:44.412 [DEBUG] [Thread-170099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:48:44.447 [INFO] [Thread-170099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:48:44.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:48:45.258 [DEBUG] [Thread-170099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:48:45.258 [DEBUG] [Thread-170099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:48:45.258 [DEBUG] [Thread-170099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:48:45.299 [DEBUG] [Thread-170099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:48:45.299 [DEBUG] [Thread-170099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:48:45.303 [DEBUG] [Thread-170099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:48:45.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:48:45.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:48:45.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:48:45.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:48:45.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:48:45.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:48:45.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:48:45.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:48:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:48:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.450119 -999.00  +13.50  18.11     97  +13.10 1 3 1 3 1   888    0 0.49 1.91 ----- 17.6 18.1 51.2 22.4 15.6 -0.1 15.7 -0.5 15.3 -1.2 15.7 -0.2
2026-04-11T12:48:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:48:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:48:45.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.450119
2026-04-11T12:48:45.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:48:45.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:48:45.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:48:45.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:48:45.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:48:45.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:48:29', tmtdew=0.089715, humidity=99.7018, cloud=0.0, wind=15.264, temperature=13.6293, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:48:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:48:45.329 [DEBUG] [Thread-170099] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:48:45.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:48:45.423 [DEBUG] [Thread-170102] [transport.py] [_log()] starting thread (client mode): 0xb0f40eb0
2026-04-11T12:48:45.423 [DEBUG] [Thread-170102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:48:45.438 [DEBUG] [Thread-170102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:48:45.438 [INFO] [Thread-170102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:48:45.446 [DEBUG] [Thread-170102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:48:45.446 [DEBUG] [Thread-170102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:48:45.447 [DEBUG] [Thread-170102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:48:45.447 [DEBUG] [Thread-170102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:45.447 [DEBUG] [Thread-170102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:48:45.447 [DEBUG] [Thread-170102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:45.447 [DEBUG] [Thread-170102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:48:45.447 [DEBUG] [Thread-170102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] client lang: <none>
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] server lang: <none>
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] kex follows: False
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] Compression: none
2026-04-11T12:48:45.448 [DEBUG] [Thread-170102] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:48:45.504 [DEBUG] [Thread-170102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:48:45.504 [DEBUG] [Thread-170102] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:48:45.505 [DEBUG] [Thread-170102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:48:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:48:45.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:48:45.560 [DEBUG] [Thread-170102] [transport.py] [_log()] userauth is OK
2026-04-11T12:48:45.560 [DEBUG] [Thread-170102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:48:45.560 [DEBUG] [Thread-170102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:48:45.561 [DEBUG] [Thread-170102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:48:45.561 [DEBUG] [Thread-170102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:48:45.589 [INFO] [Thread-170102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:48:45.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:48:45.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:48:46.416 [DEBUG] [Thread-170102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:48:46.416 [DEBUG] [Thread-170102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:48:46.467 [DEBUG] [Thread-170102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:48:46.467 [DEBUG] [Thread-170102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:48:46.480 [DEBUG] [Thread-170102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:48:46.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:48:46.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-04-11T12:48:46.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-04-11T12:48:46.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:48:46.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:48:46.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:48:46.517 [DEBUG] [Thread-170102] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:48:52.248 [DEBUG] [Thread-170104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:56.451 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:48:56.452 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:05.795 [DEBUG] [Thread-170105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:07.292 [DEBUG] [Thread-170106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:49:16.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:49:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 49, 5), 0.09487, 99.6686, 0.0, 15.8108, 13.6127, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:49:05
2026-04-11T12:49:18.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:49:18.431 [DEBUG] [Thread-170107] [transport.py] [_log()] starting thread (client mode): 0xae5b2590
2026-04-11T12:49:18.431 [DEBUG] [Thread-170107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:49:18.451 [DEBUG] [Thread-170107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:49:18.451 [INFO] [Thread-170107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:18.454 [DEBUG] [Thread-170107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] client lang: <none>
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] server lang: <none>
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] kex follows: False
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] Compression: none
2026-04-11T12:49:18.455 [DEBUG] [Thread-170107] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:49:18.471 [DEBUG] [Thread-170107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:49:18.472 [DEBUG] [Thread-170107] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:49:18.472 [DEBUG] [Thread-170107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:49:18.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:49:18.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:49:18.517 [DEBUG] [Thread-170107] [transport.py] [_log()] userauth is OK
2026-04-11T12:49:18.518 [DEBUG] [Thread-170107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:49:18.518 [DEBUG] [Thread-170107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:49:18.518 [DEBUG] [Thread-170107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:49:18.518 [DEBUG] [Thread-170107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:49:18.558 [INFO] [Thread-170107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:49:18.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:49:19.361 [DEBUG] [Thread-170107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:49:19.361 [DEBUG] [Thread-170107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:49:19.362 [DEBUG] [Thread-170107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:49:19.402 [DEBUG] [Thread-170107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:49:19.403 [DEBUG] [Thread-170107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:49:19.416 [DEBUG] [Thread-170107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:49:19.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:49:19.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:49:19.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:49:19.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:49:19.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:49:19.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:49:19.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:49:19.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:49:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:49:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.450466 -999.00  +13.50  14.05     97  +13.00 1 3 1 3 1   888    0 0.50 2.25 ----- 13.0 14.1 57.2 18.1 15.5 -0.2 15.6 -0.8 15.3 -0.5 15.6 0.2
2026-04-11T12:49:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:49:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:49:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.450466
2026-04-11T12:49:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:49:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:49:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:49:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:49:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:49:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:49:05', tmtdew=0.09487, humidity=99.6686, cloud=0.0, wind=15.8108, temperature=13.6127, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:48:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:49:19.439 [DEBUG] [Thread-170107] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:49:19.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:49:19.532 [DEBUG] [Thread-170110] [transport.py] [_log()] starting thread (client mode): 0xae5e4f40
2026-04-11T12:49:19.532 [DEBUG] [Thread-170110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:49:19.547 [DEBUG] [Thread-170110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:49:19.547 [INFO] [Thread-170110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:49:19.554 [DEBUG] [Thread-170110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] client lang: <none>
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] server lang: <none>
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] kex follows: False
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:49:19.555 [DEBUG] [Thread-170110] [transport.py] [_log()] Compression: none
2026-04-11T12:49:19.556 [DEBUG] [Thread-170110] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:49:19.612 [DEBUG] [Thread-170110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:49:19.612 [DEBUG] [Thread-170110] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:49:19.613 [DEBUG] [Thread-170110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:49:19.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:49:19.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:49:19.667 [DEBUG] [Thread-170110] [transport.py] [_log()] userauth is OK
2026-04-11T12:49:19.668 [DEBUG] [Thread-170110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:49:19.668 [DEBUG] [Thread-170110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:49:19.668 [DEBUG] [Thread-170110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:49:19.668 [DEBUG] [Thread-170110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:49:19.687 [INFO] [Thread-170110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:49:19.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:49:19.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:49:20.500 [DEBUG] [Thread-170110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:49:20.501 [DEBUG] [Thread-170110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:49:20.549 [DEBUG] [Thread-170110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:49:20.549 [DEBUG] [Thread-170110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:49:20.558 [DEBUG] [Thread-170110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:49:20.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:49:20.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:49:20.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-04-11T12:49:20.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:49:20.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:49:20.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:49:20.597 [DEBUG] [Thread-170110] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:49:22.328 [DEBUG] [Thread-170112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:37.393 [DEBUG] [Thread-170113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:50.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:49:50.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:49:50.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:49:51.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 49, 40), 0.07946, 99.4036, 0.0, 20.0074, 13.9923, 2, 2, 2, 2, 0, 0),)
2026-04-11T12:49:51.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:49:40
2026-04-11T12:49:52.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:49:52.377 [DEBUG] [Thread-170114] [transport.py] [_log()] starting thread (client mode): 0xae5b40a0
2026-04-11T12:49:52.377 [DEBUG] [Thread-170114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:49:52.398 [DEBUG] [Thread-170114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:49:52.398 [INFO] [Thread-170114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:49:52.401 [DEBUG] [Thread-170114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:49:52.401 [DEBUG] [Thread-170114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:49:52.401 [DEBUG] [Thread-170114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] client lang: <none>
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] server lang: <none>
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] kex follows: False
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:49:52.402 [DEBUG] [Thread-170114] [transport.py] [_log()] Compression: none
2026-04-11T12:49:52.403 [DEBUG] [Thread-170114] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:49:52.420 [DEBUG] [Thread-170114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:49:52.420 [DEBUG] [Thread-170114] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:49:52.420 [DEBUG] [Thread-170114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:49:52.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:49:52.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:49:52.422 [DEBUG] [Thread-170114] [transport.py] [_log()] userauth is OK
2026-04-11T12:49:52.422 [DEBUG] [Thread-170114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:49:52.422 [DEBUG] [Thread-170114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:49:52.423 [DEBUG] [Thread-170114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:49:52.423 [DEBUG] [Thread-170114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:49:52.425 [DEBUG] [Thread-170116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:52.446 [INFO] [Thread-170114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:49:52.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:49:53.236 [DEBUG] [Thread-170114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:49:53.236 [DEBUG] [Thread-170114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:49:53.237 [DEBUG] [Thread-170114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:49:53.278 [DEBUG] [Thread-170114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:49:53.278 [DEBUG] [Thread-170114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:49:53.281 [DEBUG] [Thread-170114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:49:53.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:49:53.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:49:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:49:53.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:49:53.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:49:53.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:49:53.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:49:53.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:49:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:49:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.450813 -999.00  +13.50  16.67     97  +13.10 1 3 1 3 1   888    0 0.50 2.11 ----- 15.6 16.7 56.6 19.3 15.5 -0.4 15.6 -0.7 15.3 -1.0 15.6 0.1
2026-04-11T12:49:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:49:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:49:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.450813
2026-04-11T12:49:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:49:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:49:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:49:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:49:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:49:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:49:40', tmtdew=0.07946, humidity=99.4036, cloud=0.0, wind=20.0074, temperature=13.9923, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:49:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:49:53.305 [DEBUG] [Thread-170114] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:49:53.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:49:53.398 [DEBUG] [Thread-170118] [transport.py] [_log()] starting thread (client mode): 0xa79b7af0
2026-04-11T12:49:53.398 [DEBUG] [Thread-170118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:49:53.418 [DEBUG] [Thread-170118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:49:53.418 [INFO] [Thread-170118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:49:53.425 [DEBUG] [Thread-170118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] client lang: <none>
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] server lang: <none>
2026-04-11T12:49:53.426 [DEBUG] [Thread-170118] [transport.py] [_log()] kex follows: False
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] Compression: none
2026-04-11T12:49:53.427 [DEBUG] [Thread-170118] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:49:53.484 [DEBUG] [Thread-170118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:49:53.485 [DEBUG] [Thread-170118] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:49:53.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:49:53.486 [DEBUG] [Thread-170118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:49:53.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:49:53.540 [DEBUG] [Thread-170118] [transport.py] [_log()] userauth is OK
2026-04-11T12:49:53.541 [DEBUG] [Thread-170118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:49:53.541 [DEBUG] [Thread-170118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:49:53.541 [DEBUG] [Thread-170118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:49:53.541 [DEBUG] [Thread-170118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:49:53.560 [INFO] [Thread-170118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:49:53.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:49:53.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:49:54.381 [DEBUG] [Thread-170118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:49:54.382 [DEBUG] [Thread-170118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:49:54.429 [DEBUG] [Thread-170118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:49:54.429 [DEBUG] [Thread-170118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:49:54.439 [DEBUG] [Thread-170118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:49:54.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:49:54.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:49:54.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:49:54.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:49:54.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:49:54.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:49:54.477 [DEBUG] [Thread-170118] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:49:56.594 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:49:56.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:05.850 [DEBUG] [Thread-170120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:07.459 [DEBUG] [Thread-170121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:22.514 [DEBUG] [Thread-170122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:24.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:50:24.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:50:24.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-04-11T12:50:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 50, 15), 0.034595, 99.7349, 0.0, 14.0983, 13.5627, 2, 2, 2, 2, 0, 0),)
2026-04-11T12:50:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:50:15
2026-04-11T12:50:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:50:26.328 [DEBUG] [Thread-170123] [transport.py] [_log()] starting thread (client mode): 0xb0f439a0
2026-04-11T12:50:26.328 [DEBUG] [Thread-170123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:50:26.350 [DEBUG] [Thread-170123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:50:26.350 [INFO] [Thread-170123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:50:26.354 [DEBUG] [Thread-170123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:50:26.354 [DEBUG] [Thread-170123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] client lang: <none>
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] server lang: <none>
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] kex follows: False
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] Compression: none
2026-04-11T12:50:26.355 [DEBUG] [Thread-170123] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:50:26.372 [DEBUG] [Thread-170123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:50:26.373 [DEBUG] [Thread-170123] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:50:26.373 [DEBUG] [Thread-170123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:50:26.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:50:26.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:50:26.376 [DEBUG] [Thread-170123] [transport.py] [_log()] userauth is OK
2026-04-11T12:50:26.376 [DEBUG] [Thread-170123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:50:26.376 [DEBUG] [Thread-170123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:50:26.376 [DEBUG] [Thread-170123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:50:26.376 [DEBUG] [Thread-170123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:50:26.402 [INFO] [Thread-170123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:50:26.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:50:37.297 [DEBUG] [Thread-170123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:50:37.297 [DEBUG] [Thread-170123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:50:37.297 [DEBUG] [Thread-170123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:50:37.339 [DEBUG] [Thread-170123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:50:37.339 [DEBUG] [Thread-170123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:50:37.341 [DEBUG] [Thread-170123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:50:37.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:50:37.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:50:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:50:37.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:50:37.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:50:37.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:50:37.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:50:37.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:50:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:50:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.451160 -999.00  +13.70  17.16     97  +13.20 1 3 1 3 1   888    0 0.50 2.13 ----- 17.9 17.2 59.4 18.4 15.6 -0.2 15.6 -0.7 15.3 -0.8 15.6 0.1
2026-04-11T12:50:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:50:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:50:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.451160
2026-04-11T12:50:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:50:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:50:37.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:50:37.490 [DEBUG] [Thread-170123] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:50:37.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:50:37.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:50:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:50:15', tmtdew=0.034595, humidity=99.7349, cloud=0.0, wind=14.0983, temperature=13.5627, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:49:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:50:37.553 [DEBUG] [Thread-170126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:37.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:50:37.585 [DEBUG] [Thread-170127] [transport.py] [_log()] starting thread (client mode): 0xa79b6ce0
2026-04-11T12:50:37.585 [DEBUG] [Thread-170127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:50:37.600 [DEBUG] [Thread-170127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:50:37.600 [INFO] [Thread-170127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:50:37.607 [DEBUG] [Thread-170127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:50:37.607 [DEBUG] [Thread-170127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:50:37.607 [DEBUG] [Thread-170127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:50:37.607 [DEBUG] [Thread-170127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:50:37.607 [DEBUG] [Thread-170127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] client lang: <none>
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] server lang: <none>
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] kex follows: False
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] Compression: none
2026-04-11T12:50:37.608 [DEBUG] [Thread-170127] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:50:37.664 [DEBUG] [Thread-170127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:50:37.665 [DEBUG] [Thread-170127] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:50:37.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:50:37.666 [DEBUG] [Thread-170127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:50:37.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:50:37.720 [DEBUG] [Thread-170127] [transport.py] [_log()] userauth is OK
2026-04-11T12:50:37.721 [DEBUG] [Thread-170127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:50:37.721 [DEBUG] [Thread-170127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:50:37.721 [DEBUG] [Thread-170127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:50:37.721 [DEBUG] [Thread-170127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:50:37.744 [INFO] [Thread-170127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:50:37.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:50:37.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:50:38.554 [DEBUG] [Thread-170127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:50:38.554 [DEBUG] [Thread-170127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:50:38.602 [DEBUG] [Thread-170127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:50:38.602 [DEBUG] [Thread-170127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:50:38.615 [DEBUG] [Thread-170127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:50:38.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:50:38.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:50:38.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-04-11T12:50:38.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:50:38.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:50:38.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:50:38.656 [DEBUG] [Thread-170127] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:50:52.595 [DEBUG] [Thread-170129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:56.736 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:50:56.737 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:05.899 [DEBUG] [Thread-170130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:07.635 [DEBUG] [Thread-170131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:51:08.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:51:08.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-04-11T12:51:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 50, 50), 0.06924, 99.4697, 0.0, 11.2226, 13.8596, 2, 2, 2, 2, 0, 0),)
2026-04-11T12:51:09.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:50:50
2026-04-11T12:51:10.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:51:10.554 [DEBUG] [Thread-170132] [transport.py] [_log()] starting thread (client mode): 0xb0f43a30
2026-04-11T12:51:10.554 [DEBUG] [Thread-170132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:51:10.566 [DEBUG] [Thread-170132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:51:10.566 [INFO] [Thread-170132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:51:10.569 [DEBUG] [Thread-170132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:51:10.569 [DEBUG] [Thread-170132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:51:10.569 [DEBUG] [Thread-170132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:51:10.569 [DEBUG] [Thread-170132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] client lang: <none>
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] server lang: <none>
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] kex follows: False
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] Compression: none
2026-04-11T12:51:10.570 [DEBUG] [Thread-170132] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:51:10.585 [DEBUG] [Thread-170132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:51:10.585 [DEBUG] [Thread-170132] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:51:10.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:51:10.586 [DEBUG] [Thread-170132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:51:10.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:51:10.587 [DEBUG] [Thread-170132] [transport.py] [_log()] userauth is OK
2026-04-11T12:51:10.587 [DEBUG] [Thread-170132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:51:10.587 [DEBUG] [Thread-170132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:51:10.587 [DEBUG] [Thread-170132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:51:10.587 [DEBUG] [Thread-170132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:51:10.600 [INFO] [Thread-170132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:51:10.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:51:11.347 [DEBUG] [Thread-170132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:51:11.348 [DEBUG] [Thread-170132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:51:11.348 [DEBUG] [Thread-170132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:51:11.388 [DEBUG] [Thread-170132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:51:11.389 [DEBUG] [Thread-170132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:51:11.392 [DEBUG] [Thread-170132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:51:11.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:51:11.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:51:11.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:51:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:51:11.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:51:11.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:51:11.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:51:11.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:51:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:51:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.451508 -999.00  +13.60  19.60     97  +13.20 1 3 1 3 1   888    0 0.51 2.29 ----- 21.0 19.6 53.2 24.1 15.5 -0.2 15.6 -0.6 15.3 -0.3 15.6 0.1
2026-04-11T12:51:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:51:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:51:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.451508
2026-04-11T12:51:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:51:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:51:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:51:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:51:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:51:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:50:50', tmtdew=0.06924, humidity=99.4697, cloud=0.0, wind=11.2226, temperature=13.8596, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:50:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:51:11.422 [DEBUG] [Thread-170132] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:51:11.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:51:11.515 [DEBUG] [Thread-170135] [transport.py] [_log()] starting thread (client mode): 0xae5b3ee0
2026-04-11T12:51:11.515 [DEBUG] [Thread-170135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:51:11.529 [DEBUG] [Thread-170135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:51:11.530 [INFO] [Thread-170135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:51:11.537 [DEBUG] [Thread-170135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:51:11.537 [DEBUG] [Thread-170135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:51:11.537 [DEBUG] [Thread-170135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:51:11.537 [DEBUG] [Thread-170135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] client lang: <none>
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] server lang: <none>
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] kex follows: False
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] Compression: none
2026-04-11T12:51:11.538 [DEBUG] [Thread-170135] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:51:11.597 [DEBUG] [Thread-170135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:51:11.598 [DEBUG] [Thread-170135] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:51:11.599 [DEBUG] [Thread-170135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:51:11.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:51:11.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:51:11.653 [DEBUG] [Thread-170135] [transport.py] [_log()] userauth is OK
2026-04-11T12:51:11.653 [DEBUG] [Thread-170135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:51:11.653 [DEBUG] [Thread-170135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:51:11.654 [DEBUG] [Thread-170135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:51:11.654 [DEBUG] [Thread-170135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:51:11.677 [INFO] [Thread-170135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:51:11.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:51:11.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:51:12.498 [DEBUG] [Thread-170135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:51:12.499 [DEBUG] [Thread-170135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:51:12.550 [DEBUG] [Thread-170135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:51:12.550 [DEBUG] [Thread-170135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:51:12.560 [DEBUG] [Thread-170135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:51:12.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:51:12.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-04-11T12:51:12.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-04-11T12:51:12.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:51:12.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:51:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:51:12.599 [DEBUG] [Thread-170135] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:51:22.671 [DEBUG] [Thread-170137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:37.723 [DEBUG] [Thread-170138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:42.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:51:42.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:51:42.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-04-11T12:51:43.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 51, 26), 0.08205, 99.7514, 0.0, 17.7689, 13.4964, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:51:43.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:51:26
2026-04-11T12:51:44.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:51:44.490 [DEBUG] [Thread-170139] [transport.py] [_log()] starting thread (client mode): 0xe6f8c130
2026-04-11T12:51:44.490 [DEBUG] [Thread-170139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:51:44.510 [DEBUG] [Thread-170139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:51:44.510 [INFO] [Thread-170139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] client lang: <none>
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] server lang: <none>
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] kex follows: False
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:51:44.512 [DEBUG] [Thread-170139] [transport.py] [_log()] Compression: none
2026-04-11T12:51:44.513 [DEBUG] [Thread-170139] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:51:44.530 [DEBUG] [Thread-170139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:51:44.531 [DEBUG] [Thread-170139] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:51:44.531 [DEBUG] [Thread-170139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:51:44.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:51:44.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:51:44.533 [DEBUG] [Thread-170139] [transport.py] [_log()] userauth is OK
2026-04-11T12:51:44.534 [DEBUG] [Thread-170139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:51:44.534 [DEBUG] [Thread-170139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:51:44.534 [DEBUG] [Thread-170139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:51:44.534 [DEBUG] [Thread-170139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:51:44.549 [INFO] [Thread-170139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:51:44.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:51:45.342 [DEBUG] [Thread-170139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:51:45.342 [DEBUG] [Thread-170139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:51:45.343 [DEBUG] [Thread-170139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:51:45.382 [DEBUG] [Thread-170139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:51:45.382 [DEBUG] [Thread-170139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:51:45.385 [DEBUG] [Thread-170139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:51:45.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:51:45.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:51:45.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:51:45.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:51:45.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:51:45.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:51:45.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:51:45.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:51:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:51:45.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.451855 -999.00  +13.50  19.97     97  +13.00 1 3 1 3 1   888    0 0.51 2.36 ----- 19.5 20.0 65.0 23.8 15.5 0.0 15.6 -0.7 15.2 -0.6 15.6 -0.0
2026-04-11T12:51:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:51:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:51:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.451855
2026-04-11T12:51:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:51:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:51:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:51:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:51:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:51:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:51:26', tmtdew=0.08205, humidity=99.7514, cloud=0.0, wind=17.7689, temperature=13.4964, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:50:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:51:45.416 [DEBUG] [Thread-170139] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:51:45.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:51:45.503 [DEBUG] [Thread-170142] [transport.py] [_log()] starting thread (client mode): 0xae5638b0
2026-04-11T12:51:45.503 [DEBUG] [Thread-170142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:51:45.518 [DEBUG] [Thread-170142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:51:45.518 [INFO] [Thread-170142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] client lang: <none>
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] server lang: <none>
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] kex follows: False
2026-04-11T12:51:45.526 [DEBUG] [Thread-170142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:51:45.527 [DEBUG] [Thread-170142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:51:45.527 [DEBUG] [Thread-170142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:51:45.527 [DEBUG] [Thread-170142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:51:45.527 [DEBUG] [Thread-170142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:51:45.527 [DEBUG] [Thread-170142] [transport.py] [_log()] Compression: none
2026-04-11T12:51:45.527 [DEBUG] [Thread-170142] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:51:45.585 [DEBUG] [Thread-170142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:51:45.586 [DEBUG] [Thread-170142] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:51:45.586 [DEBUG] [Thread-170142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:51:45.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:51:45.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:51:45.641 [DEBUG] [Thread-170142] [transport.py] [_log()] userauth is OK
2026-04-11T12:51:45.642 [DEBUG] [Thread-170142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:51:45.642 [DEBUG] [Thread-170142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:51:45.642 [DEBUG] [Thread-170142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:51:45.642 [DEBUG] [Thread-170142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:51:45.660 [INFO] [Thread-170142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:51:45.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:51:45.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:51:46.496 [DEBUG] [Thread-170142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:51:46.496 [DEBUG] [Thread-170142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:51:46.544 [DEBUG] [Thread-170142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:51:46.544 [DEBUG] [Thread-170142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:51:46.554 [DEBUG] [Thread-170142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:51:46.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:51:46.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-04-11T12:51:46.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:51:46.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:51:46.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:51:46.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:51:46.590 [DEBUG] [Thread-170142] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:51:52.760 [DEBUG] [Thread-170144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:56.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:51:56.879 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:05.954 [DEBUG] [Thread-170145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:07.808 [DEBUG] [Thread-170146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:52:16.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:52:16.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-04-11T12:52:17.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 52, 1), 0.07946, 99.768, 0.0, 18.545, 13.5793, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:52:17.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:52:01
2026-04-11T12:52:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:52:18.436 [DEBUG] [Thread-170147] [transport.py] [_log()] starting thread (client mode): 0xae562770
2026-04-11T12:52:18.436 [DEBUG] [Thread-170147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:52:18.457 [DEBUG] [Thread-170147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:52:18.457 [INFO] [Thread-170147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:52:18.460 [DEBUG] [Thread-170147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:52:18.460 [DEBUG] [Thread-170147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:52:18.460 [DEBUG] [Thread-170147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:52:18.460 [DEBUG] [Thread-170147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] client lang: <none>
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] server lang: <none>
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] kex follows: False
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] Compression: none
2026-04-11T12:52:18.461 [DEBUG] [Thread-170147] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:52:18.479 [DEBUG] [Thread-170147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:52:18.480 [DEBUG] [Thread-170147] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:52:18.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:52:18.481 [DEBUG] [Thread-170147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:52:18.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:52:18.483 [DEBUG] [Thread-170147] [transport.py] [_log()] userauth is OK
2026-04-11T12:52:18.484 [DEBUG] [Thread-170147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:52:18.484 [DEBUG] [Thread-170147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:52:18.484 [DEBUG] [Thread-170147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:52:18.484 [DEBUG] [Thread-170147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:52:18.509 [INFO] [Thread-170147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:52:18.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:52:19.286 [DEBUG] [Thread-170147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:52:19.287 [DEBUG] [Thread-170147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:52:19.287 [DEBUG] [Thread-170147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:52:19.328 [DEBUG] [Thread-170147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:52:19.328 [DEBUG] [Thread-170147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:52:19.331 [DEBUG] [Thread-170147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:52:19.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:52:19.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:52:19.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:52:19.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:52:19.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:52:19.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:52:19.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:52:19.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:52:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:52:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.452549 -999.00  +13.40  13.28     97  +13.00 1 3 1 3 1   888    0 0.50 2.20 ----- 14.2 13.3 48.6 18.1 15.5 -0.2 15.5 -0.5 15.2 -0.8 15.5 0.0
2026-04-11T12:52:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:52:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:52:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.452549
2026-04-11T12:52:19.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:52:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:52:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:52:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:52:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:52:19.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:52:01', tmtdew=0.07946, humidity=99.768, cloud=0.0, wind=18.545, temperature=13.5793, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:51:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:52:19.361 [DEBUG] [Thread-170147] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:52:19.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:52:19.454 [DEBUG] [Thread-170150] [transport.py] [_log()] starting thread (client mode): 0xb0f41750
2026-04-11T12:52:19.454 [DEBUG] [Thread-170150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:52:19.469 [DEBUG] [Thread-170150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:52:19.469 [INFO] [Thread-170150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:52:19.479 [DEBUG] [Thread-170150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:52:19.479 [DEBUG] [Thread-170150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:52:19.479 [DEBUG] [Thread-170150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:52:19.479 [DEBUG] [Thread-170150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:19.479 [DEBUG] [Thread-170150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] client lang: <none>
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] server lang: <none>
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] kex follows: False
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:52:19.480 [DEBUG] [Thread-170150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:52:19.482 [DEBUG] [Thread-170150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:52:19.482 [DEBUG] [Thread-170150] [transport.py] [_log()] Compression: none
2026-04-11T12:52:19.482 [DEBUG] [Thread-170150] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:52:19.538 [DEBUG] [Thread-170150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:52:19.538 [DEBUG] [Thread-170150] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:52:19.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:52:19.540 [DEBUG] [Thread-170150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:52:19.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:52:19.594 [DEBUG] [Thread-170150] [transport.py] [_log()] userauth is OK
2026-04-11T12:52:19.594 [DEBUG] [Thread-170150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:52:19.594 [DEBUG] [Thread-170150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:52:19.594 [DEBUG] [Thread-170150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:52:19.595 [DEBUG] [Thread-170150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:52:19.613 [INFO] [Thread-170150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:52:19.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:52:19.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:52:20.447 [DEBUG] [Thread-170150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:52:20.447 [DEBUG] [Thread-170150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:52:20.498 [DEBUG] [Thread-170150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:52:20.499 [DEBUG] [Thread-170150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:52:20.511 [DEBUG] [Thread-170150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:52:20.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:52:20.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-04-11T12:52:20.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-04-11T12:52:20.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:52:20.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:52:20.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:52:20.548 [DEBUG] [Thread-170150] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:52:22.844 [DEBUG] [Thread-170152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:37.895 [DEBUG] [Thread-170153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:50.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:52:50.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:52:50.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-04-11T12:52:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 52, 36), 0.05377, 99.5692, 0.0, 17.9964, 14.1248, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:52:51.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:52:36
2026-04-11T12:52:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:52:52.328 [DEBUG] [Thread-170154] [transport.py] [_log()] starting thread (client mode): 0xb0f42170
2026-04-11T12:52:52.328 [DEBUG] [Thread-170154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:52:52.351 [DEBUG] [Thread-170154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:52:52.351 [INFO] [Thread-170154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:52:52.355 [DEBUG] [Thread-170154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:52:52.355 [DEBUG] [Thread-170154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] client lang: <none>
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] server lang: <none>
2026-04-11T12:52:52.356 [DEBUG] [Thread-170154] [transport.py] [_log()] kex follows: False
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] Compression: none
2026-04-11T12:52:52.357 [DEBUG] [Thread-170154] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:52:52.376 [DEBUG] [Thread-170154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:52:52.376 [DEBUG] [Thread-170154] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:52:52.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:52:52.377 [DEBUG] [Thread-170154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:52:52.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:52:52.379 [DEBUG] [Thread-170154] [transport.py] [_log()] userauth is OK
2026-04-11T12:52:52.379 [DEBUG] [Thread-170154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:52:52.380 [DEBUG] [Thread-170154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:52:52.380 [DEBUG] [Thread-170154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:52:52.380 [DEBUG] [Thread-170154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:52:52.416 [INFO] [Thread-170154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:52:52.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:52:52.932 [DEBUG] [Thread-170156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:53.244 [DEBUG] [Thread-170154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:52:53.245 [DEBUG] [Thread-170154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:52:53.245 [DEBUG] [Thread-170154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:52:53.286 [DEBUG] [Thread-170154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:52:53.287 [DEBUG] [Thread-170154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:52:53.290 [DEBUG] [Thread-170154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:52:53.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:52:53.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:52:53.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:52:53.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:52:53.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:52:53.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:52:53.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:52:53.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:52:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:52:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.452896 -999.00  +13.50  17.37     97  +13.00 1 3 1 3 1   888    0 0.50 2.16 ----- 19.7 17.4 54.4 20.0 15.5 -0.2 15.5 -0.8 15.2 -1.1 15.4 0.1
2026-04-11T12:52:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:52:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:52:53.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.452896
2026-04-11T12:52:53.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:52:53.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:52:53.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:52:53.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:52:53.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:52:53.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:52:36', tmtdew=0.05377, humidity=99.5692, cloud=0.0, wind=17.9964, temperature=14.1248, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:52:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:52:53.320 [DEBUG] [Thread-170154] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:52:53.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:52:53.413 [DEBUG] [Thread-170158] [transport.py] [_log()] starting thread (client mode): 0xa795de70
2026-04-11T12:52:53.414 [DEBUG] [Thread-170158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:52:53.428 [DEBUG] [Thread-170158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:52:53.428 [INFO] [Thread-170158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:52:53.436 [DEBUG] [Thread-170158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:52:53.436 [DEBUG] [Thread-170158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:52:53.437 [DEBUG] [Thread-170158] [transport.py] [_log()] client lang: <none>
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] server lang: <none>
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] kex follows: False
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] Compression: none
2026-04-11T12:52:53.438 [DEBUG] [Thread-170158] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:52:53.494 [DEBUG] [Thread-170158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:52:53.494 [DEBUG] [Thread-170158] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:52:53.495 [DEBUG] [Thread-170158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:52:53.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:52:53.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:52:53.550 [DEBUG] [Thread-170158] [transport.py] [_log()] userauth is OK
2026-04-11T12:52:53.550 [DEBUG] [Thread-170158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:52:53.551 [DEBUG] [Thread-170158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:52:53.551 [DEBUG] [Thread-170158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:52:53.551 [DEBUG] [Thread-170158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:52:53.568 [INFO] [Thread-170158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:52:53.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:52:53.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:52:54.392 [DEBUG] [Thread-170158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:52:54.392 [DEBUG] [Thread-170158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:52:54.440 [DEBUG] [Thread-170158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:52:54.440 [DEBUG] [Thread-170158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:52:54.450 [DEBUG] [Thread-170158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:52:54.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:52:54.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-04-11T12:52:54.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-04-11T12:52:54.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:52:54.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:52:54.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:52:54.487 [DEBUG] [Thread-170158] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:52:57.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:52:57.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:06.010 [DEBUG] [Thread-170160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:07.968 [DEBUG] [Thread-170161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:23.029 [DEBUG] [Thread-170162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:53:24.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:53:24.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-04-11T12:53:25.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 53, 12), 0.082005, 99.7514, 0.0, 17.3272, 13.6953, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:53:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:53:12
2026-04-11T12:53:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:53:26.350 [DEBUG] [Thread-170163] [transport.py] [_log()] starting thread (client mode): 0xae5e5270
2026-04-11T12:53:26.350 [DEBUG] [Thread-170163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:53:26.363 [DEBUG] [Thread-170163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:53:26.363 [INFO] [Thread-170163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:53:26.364 [DEBUG] [Thread-170163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] client lang: <none>
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] server lang: <none>
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] kex follows: False
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] Compression: none
2026-04-11T12:53:26.365 [DEBUG] [Thread-170163] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:53:26.375 [DEBUG] [Thread-170163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:53:26.375 [DEBUG] [Thread-170163] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:53:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:53:26.376 [DEBUG] [Thread-170163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:53:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:53:26.377 [DEBUG] [Thread-170163] [transport.py] [_log()] userauth is OK
2026-04-11T12:53:26.377 [DEBUG] [Thread-170163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:53:26.377 [DEBUG] [Thread-170163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:53:26.377 [DEBUG] [Thread-170163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:53:26.377 [DEBUG] [Thread-170163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:53:26.400 [INFO] [Thread-170163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:53:26.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:53:27.212 [DEBUG] [Thread-170163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:53:27.213 [DEBUG] [Thread-170163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:53:27.213 [DEBUG] [Thread-170163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:53:27.255 [DEBUG] [Thread-170163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:53:27.255 [DEBUG] [Thread-170163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:53:27.260 [DEBUG] [Thread-170163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:53:27.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:53:27.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:53:27.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:53:27.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:53:27.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:53:27.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:53:27.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:53:27.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:53:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:53:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.453244 -999.00  +13.60  15.60     97  +13.10 1 3 1 3 1   888    0 0.51 2.41 ----- 17.6 15.6 53.4 23.2 15.4 -0.2 15.5 -0.3 15.2 -0.5 15.4 0.1
2026-04-11T12:53:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:53:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:53:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.453244
2026-04-11T12:53:27.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:53:27.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:53:27.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:53:27.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:53:27.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:53:27.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:53:12', tmtdew=0.082005, humidity=99.7514, cloud=0.0, wind=17.3272, temperature=13.6953, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:52:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:53:27.291 [DEBUG] [Thread-170163] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:53:27.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:53:27.391 [DEBUG] [Thread-170166] [transport.py] [_log()] starting thread (client mode): 0xb39c6a40
2026-04-11T12:53:27.391 [DEBUG] [Thread-170166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:53:27.406 [DEBUG] [Thread-170166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:53:27.406 [INFO] [Thread-170166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:53:27.414 [DEBUG] [Thread-170166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:53:27.414 [DEBUG] [Thread-170166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:53:27.414 [DEBUG] [Thread-170166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:53:27.414 [DEBUG] [Thread-170166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:53:27.414 [DEBUG] [Thread-170166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] client lang: <none>
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] server lang: <none>
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] kex follows: False
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:53:27.415 [DEBUG] [Thread-170166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:53:27.416 [DEBUG] [Thread-170166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:53:27.416 [DEBUG] [Thread-170166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:53:27.416 [DEBUG] [Thread-170166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:53:27.416 [DEBUG] [Thread-170166] [transport.py] [_log()] Compression: none
2026-04-11T12:53:27.416 [DEBUG] [Thread-170166] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:53:27.476 [DEBUG] [Thread-170166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:53:27.476 [DEBUG] [Thread-170166] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:53:27.478 [DEBUG] [Thread-170166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:53:27.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:53:27.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:53:27.534 [DEBUG] [Thread-170166] [transport.py] [_log()] userauth is OK
2026-04-11T12:53:27.534 [DEBUG] [Thread-170166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:53:27.534 [DEBUG] [Thread-170166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:53:27.534 [DEBUG] [Thread-170166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:53:27.534 [DEBUG] [Thread-170166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:53:27.548 [INFO] [Thread-170166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:53: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-04-11T12:53:27.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:53:28.371 [DEBUG] [Thread-170166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:53:28.372 [DEBUG] [Thread-170166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:53:28.420 [DEBUG] [Thread-170166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:53:28.420 [DEBUG] [Thread-170166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:53:28.429 [DEBUG] [Thread-170166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:53:28.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:53:28.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-04-11T12:53:28.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-04-11T12:53:28.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:53:28.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:53:28.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:53:28.461 [DEBUG] [Thread-170166] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:53:38.065 [DEBUG] [Thread-170168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:53.115 [DEBUG] [Thread-170169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:57.160 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:57.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:53:58.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:53:58.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:53:58.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-04-11T12:53:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 53, 48), 0.06407, 99.5028, 0.0, 17.3261, 14.0916, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:53:59.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:53:48
2026-04-11T12:54:00.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:54:00.324 [DEBUG] [Thread-170170] [transport.py] [_log()] starting thread (client mode): 0xae52f5e0
2026-04-11T12:54:00.324 [DEBUG] [Thread-170170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:54:00.344 [DEBUG] [Thread-170170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:54:00.344 [INFO] [Thread-170170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] client lang: <none>
2026-04-11T12:54:00.347 [DEBUG] [Thread-170170] [transport.py] [_log()] server lang: <none>
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] kex follows: False
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] Compression: none
2026-04-11T12:54:00.348 [DEBUG] [Thread-170170] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:54:00.368 [DEBUG] [Thread-170170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:54:00.368 [DEBUG] [Thread-170170] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:54:00.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:54:00.370 [DEBUG] [Thread-170170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:54:00.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:54:00.372 [DEBUG] [Thread-170170] [transport.py] [_log()] userauth is OK
2026-04-11T12:54:00.372 [DEBUG] [Thread-170170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:54:00.372 [DEBUG] [Thread-170170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:54:00.372 [DEBUG] [Thread-170170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:54:00.373 [DEBUG] [Thread-170170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:54:00.396 [INFO] [Thread-170170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:54:00.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:54:01.196 [DEBUG] [Thread-170170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:54:01.196 [DEBUG] [Thread-170170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:54:01.196 [DEBUG] [Thread-170170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:54:01.237 [DEBUG] [Thread-170170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:54:01.237 [DEBUG] [Thread-170170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:54:01.240 [DEBUG] [Thread-170170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:54:01.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:54:01.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:54:01.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:54:01.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:54:01.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:54:01.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:54:01.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:54:01.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:54:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:54:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.453591 -999.00  +13.50  19.35     97  +13.10 1 3 1 3 1   888    0 0.50 2.10 ----- 21.8 19.4 61.2 22.0 15.4 -0.3 15.4 -0.7 15.1 -0.7 15.4 -0.4
2026-04-11T12:54:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:54:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:54:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.453591
2026-04-11T12:54:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:54:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:54:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:54:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:54:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:54:01.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:53:48', tmtdew=0.06407, humidity=99.5028, cloud=0.0, wind=17.3261, temperature=14.0916, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:53:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:54:01.263 [DEBUG] [Thread-170170] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:54:01.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:54:01.357 [DEBUG] [Thread-170173] [transport.py] [_log()] starting thread (client mode): 0xb39c6c20
2026-04-11T12:54:01.357 [DEBUG] [Thread-170173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:54:01.372 [DEBUG] [Thread-170173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:54:01.372 [INFO] [Thread-170173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:54:01.379 [DEBUG] [Thread-170173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:54:01.379 [DEBUG] [Thread-170173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:54:01.379 [DEBUG] [Thread-170173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] client lang: <none>
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] server lang: <none>
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] kex follows: False
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:54:01.380 [DEBUG] [Thread-170173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:54:01.381 [DEBUG] [Thread-170173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:54:01.381 [DEBUG] [Thread-170173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:54:01.381 [DEBUG] [Thread-170173] [transport.py] [_log()] Compression: none
2026-04-11T12:54:01.381 [DEBUG] [Thread-170173] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:54:01.437 [DEBUG] [Thread-170173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:54:01.438 [DEBUG] [Thread-170173] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:54:01.438 [DEBUG] [Thread-170173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:54:01.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:54:01.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:54:01.494 [DEBUG] [Thread-170173] [transport.py] [_log()] userauth is OK
2026-04-11T12:54:01.494 [DEBUG] [Thread-170173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:54:01.494 [DEBUG] [Thread-170173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:54:01.494 [DEBUG] [Thread-170173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:54:01.494 [DEBUG] [Thread-170173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:54:01.513 [INFO] [Thread-170173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:54:01.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:54:01.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:54:02.357 [DEBUG] [Thread-170173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:54:02.358 [DEBUG] [Thread-170173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:54:02.405 [DEBUG] [Thread-170173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:54:02.406 [DEBUG] [Thread-170173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:54:02.415 [DEBUG] [Thread-170173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:54:02.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:54:02.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:54:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:54:02.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:54:02.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:54:02.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:54:02.452 [DEBUG] [Thread-170173] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:54:06.060 [DEBUG] [Thread-170175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:54:08.148 [DEBUG] [Thread-170176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:54:23.191 [DEBUG] [Thread-170177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:54:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:54:32.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:54:32.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-04-11T12:54:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 54, 23), 0.08461, 99.7348, 0.0, 17.4161, 13.6461, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:54:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:54:23
2026-04-11T12:54:34.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:54:34.331 [DEBUG] [Thread-170178] [transport.py] [_log()] starting thread (client mode): 0xb0f43610
2026-04-11T12:54:34.332 [DEBUG] [Thread-170178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:54:34.353 [DEBUG] [Thread-170178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:54:34.353 [INFO] [Thread-170178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] client lang: <none>
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] server lang: <none>
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] kex follows: False
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] Compression: none
2026-04-11T12:54:34.357 [DEBUG] [Thread-170178] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:54:34.377 [DEBUG] [Thread-170178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:54:34.377 [DEBUG] [Thread-170178] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:54:34.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:54:34.378 [DEBUG] [Thread-170178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:54:34.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:54:34.381 [DEBUG] [Thread-170178] [transport.py] [_log()] userauth is OK
2026-04-11T12:54:34.381 [DEBUG] [Thread-170178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:54:34.381 [DEBUG] [Thread-170178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:54:34.381 [DEBUG] [Thread-170178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:54:34.381 [DEBUG] [Thread-170178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:54:34.401 [INFO] [Thread-170178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:54:34.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:54:35.186 [DEBUG] [Thread-170178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:54:35.186 [DEBUG] [Thread-170178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:54:35.187 [DEBUG] [Thread-170178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:54:35.228 [DEBUG] [Thread-170178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:54:35.228 [DEBUG] [Thread-170178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:54:35.231 [DEBUG] [Thread-170178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:54:35.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:54:35.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:54:35.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:54:35.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:54:35.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:54:35.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:54:35.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:54:35.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:54:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:54:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.453938 -999.00  +13.60  15.93     97  +13.20 1 3 1 3 1   888    0 0.49 1.68 ----- 17.7 15.9 51.0 20.3 15.4 0.3 15.4 -0.1 15.2 -0.1 15.4 0.3
2026-04-11T12:54:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:54:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:54:35.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.453938
2026-04-11T12:54:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:54:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:54:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:54:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:54:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:54:35.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:54:23', tmtdew=0.08461, humidity=99.7348, cloud=0.0, wind=17.4161, temperature=13.6461, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:53:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:54:35.262 [DEBUG] [Thread-170178] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:54:35.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:54:35.356 [DEBUG] [Thread-170181] [transport.py] [_log()] starting thread (client mode): 0xb0f42170
2026-04-11T12:54:35.356 [DEBUG] [Thread-170181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:54:35.371 [DEBUG] [Thread-170181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:54:35.371 [INFO] [Thread-170181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:54:35.378 [DEBUG] [Thread-170181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:54:35.378 [DEBUG] [Thread-170181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:54:35.378 [DEBUG] [Thread-170181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] client lang: <none>
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] server lang: <none>
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] kex follows: False
2026-04-11T12:54:35.379 [DEBUG] [Thread-170181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:54:35.380 [DEBUG] [Thread-170181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:54:35.380 [DEBUG] [Thread-170181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:54:35.380 [DEBUG] [Thread-170181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:54:35.380 [DEBUG] [Thread-170181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:54:35.380 [DEBUG] [Thread-170181] [transport.py] [_log()] Compression: none
2026-04-11T12:54:35.380 [DEBUG] [Thread-170181] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:54:35.440 [DEBUG] [Thread-170181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:54:35.440 [DEBUG] [Thread-170181] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:54:35.441 [DEBUG] [Thread-170181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:54:35.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:54:35.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:54:35.499 [DEBUG] [Thread-170181] [transport.py] [_log()] userauth is OK
2026-04-11T12:54:35.499 [DEBUG] [Thread-170181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:54:35.499 [DEBUG] [Thread-170181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:54:35.499 [DEBUG] [Thread-170181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:54:35.500 [DEBUG] [Thread-170181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:54:35.518 [INFO] [Thread-170181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:54:35.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:54:35.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:54:36.332 [DEBUG] [Thread-170181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:54:36.333 [DEBUG] [Thread-170181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:54:36.380 [DEBUG] [Thread-170181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:54:36.380 [DEBUG] [Thread-170181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:54:36.390 [DEBUG] [Thread-170181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:54:36.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:54:36.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-04-11T12:54:36.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-04-11T12:54:36.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:54:36.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:54:36.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:54:36.427 [DEBUG] [Thread-170181] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:54:38.227 [DEBUG] [Thread-170183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:54:53.278 [DEBUG] [Thread-170184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:54:57.304 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:54:57.306 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:06.114 [DEBUG] [Thread-170185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:06.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:55:06.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:55:06.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-04-11T12:55:07.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 54, 59), 0.037185, 99.7182, 0.0, 23.6444, 13.5795, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:55:07.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:54:59
2026-04-11T12:55:08.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:55:08.307 [DEBUG] [Thread-170186] [transport.py] [_log()] starting thread (client mode): 0xae5e4c40
2026-04-11T12:55:08.307 [DEBUG] [Thread-170186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:55:08.312 [DEBUG] [Thread-170187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:08.327 [DEBUG] [Thread-170186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:55:08.328 [INFO] [Thread-170186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:08.331 [DEBUG] [Thread-170186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] client lang: <none>
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] server lang: <none>
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] kex follows: False
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] Compression: none
2026-04-11T12:55:08.332 [DEBUG] [Thread-170186] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:55:08.351 [DEBUG] [Thread-170186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:55:08.352 [DEBUG] [Thread-170186] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:55:08.353 [DEBUG] [Thread-170186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:55:08.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:55:08.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:55:08.393 [DEBUG] [Thread-170186] [transport.py] [_log()] userauth is OK
2026-04-11T12:55:08.393 [DEBUG] [Thread-170186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:55:08.394 [DEBUG] [Thread-170186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:55:08.394 [DEBUG] [Thread-170186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:55:08.394 [DEBUG] [Thread-170186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:55:08.413 [INFO] [Thread-170186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:55:08.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:55:20.637 [DEBUG] [Thread-170186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:55:20.637 [DEBUG] [Thread-170186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:55:20.638 [DEBUG] [Thread-170186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:55:20.678 [DEBUG] [Thread-170186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:55:20.678 [DEBUG] [Thread-170186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:55:20.682 [DEBUG] [Thread-170186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:55:20.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:55:20.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:55:20.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:55:20.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:55:20.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:55:20.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:55:20.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:55:20.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:55:20.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:55:20.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:55:20.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:55:20.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:55:20.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:55:20.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:55:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:55:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:55:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:55:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:55:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:54:59', tmtdew=0.037185, humidity=99.7182, cloud=0.0, wind=23.6444, temperature=13.5795, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:55:20.738 [DEBUG] [Thread-170186] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:55:20.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:55:20.833 [DEBUG] [Thread-170190] [transport.py] [_log()] starting thread (client mode): 0xae52e6e0
2026-04-11T12:55:20.833 [DEBUG] [Thread-170190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:55:20.847 [DEBUG] [Thread-170190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:55:20.847 [INFO] [Thread-170190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] client lang: <none>
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] server lang: <none>
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] kex follows: False
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:55:20.855 [DEBUG] [Thread-170190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:55:20.856 [DEBUG] [Thread-170190] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:55:20.856 [DEBUG] [Thread-170190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:55:20.856 [DEBUG] [Thread-170190] [transport.py] [_log()] Compression: none
2026-04-11T12:55:20.856 [DEBUG] [Thread-170190] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:55:20.917 [DEBUG] [Thread-170190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:55:20.918 [DEBUG] [Thread-170190] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:55:20.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:55:20.919 [DEBUG] [Thread-170190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:55:20.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:55:20.975 [DEBUG] [Thread-170190] [transport.py] [_log()] userauth is OK
2026-04-11T12:55:20.975 [DEBUG] [Thread-170190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:55:20.975 [DEBUG] [Thread-170190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:55:20.975 [DEBUG] [Thread-170190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:55:20.975 [DEBUG] [Thread-170190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:55:20.999 [INFO] [Thread-170190] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:55:20.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:55:20.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:55:21.833 [DEBUG] [Thread-170190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:55:21.833 [DEBUG] [Thread-170190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:55:21.881 [DEBUG] [Thread-170190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:55:21.881 [DEBUG] [Thread-170190] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:55:21.890 [DEBUG] [Thread-170190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:55:21.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:55:21.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')
2026-04-11T12:55:21.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-04-11T12:55:21.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:55:21.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:55:21.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:55:21.927 [DEBUG] [Thread-170190] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:55:23.343 [DEBUG] [Thread-170192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:38.394 [DEBUG] [Thread-170193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:51.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:55:51.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:55:51.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-04-11T12:55:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 55, 34), 0.06923, 99.4696, 0.0, 18.5256, 14.0253, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:55:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:55:34
2026-04-11T12:55:53.436 [DEBUG] [Thread-170194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:55:53.750 [DEBUG] [Thread-170195] [transport.py] [_log()] starting thread (client mode): 0xb0f40310
2026-04-11T12:55:53.750 [DEBUG] [Thread-170195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:55:53.773 [DEBUG] [Thread-170195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:55:53.774 [INFO] [Thread-170195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:55:53.777 [DEBUG] [Thread-170195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:55:53.777 [DEBUG] [Thread-170195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:55:53.777 [DEBUG] [Thread-170195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:55:53.777 [DEBUG] [Thread-170195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:53.777 [DEBUG] [Thread-170195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:53.777 [DEBUG] [Thread-170195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] client lang: <none>
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] server lang: <none>
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] kex follows: False
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:55:53.778 [DEBUG] [Thread-170195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:55:53.779 [DEBUG] [Thread-170195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:55:53.779 [DEBUG] [Thread-170195] [transport.py] [_log()] Compression: none
2026-04-11T12:55:53.779 [DEBUG] [Thread-170195] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:55:53.800 [DEBUG] [Thread-170195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:55:53.801 [DEBUG] [Thread-170195] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:55:53.802 [DEBUG] [Thread-170195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:55:53.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:55:53.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:55:53.806 [DEBUG] [Thread-170195] [transport.py] [_log()] userauth is OK
2026-04-11T12:55:53.806 [DEBUG] [Thread-170195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:55:53.807 [DEBUG] [Thread-170195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:55:53.807 [DEBUG] [Thread-170195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:55:53.807 [DEBUG] [Thread-170195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:55:53.850 [INFO] [Thread-170195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:55:53.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:55:54.664 [DEBUG] [Thread-170195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:55:54.664 [DEBUG] [Thread-170195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:55:54.665 [DEBUG] [Thread-170195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:55:54.706 [DEBUG] [Thread-170195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:55:54.706 [DEBUG] [Thread-170195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:55:54.710 [DEBUG] [Thread-170195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:55:54.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:55:54.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:55:54.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:55:54.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:55:54.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:55:54.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:55:54.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:55:54.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:55:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:55:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:55:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:55:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:55:54.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:55:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:55:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:55:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:55:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:55:54.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:55:54.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:55:34', tmtdew=0.06923, humidity=99.4696, cloud=0.0, wind=18.5256, temperature=14.0253, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:55:54.741 [DEBUG] [Thread-170195] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:55:54.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:55:54.827 [DEBUG] [Thread-170198] [transport.py] [_log()] starting thread (client mode): 0xa795d4b0
2026-04-11T12:55:54.827 [DEBUG] [Thread-170198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:55:54.842 [DEBUG] [Thread-170198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:55:54.842 [INFO] [Thread-170198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:55:54.849 [DEBUG] [Thread-170198] [transport.py] [_log()] client lang: <none>
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] server lang: <none>
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] kex follows: False
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] Compression: none
2026-04-11T12:55:54.850 [DEBUG] [Thread-170198] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:55:54.908 [DEBUG] [Thread-170198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:55:54.909 [DEBUG] [Thread-170198] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:55:54.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:55:54.910 [DEBUG] [Thread-170198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:55:54.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:55:54.963 [DEBUG] [Thread-170198] [transport.py] [_log()] userauth is OK
2026-04-11T12:55:54.964 [DEBUG] [Thread-170198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:55:54.964 [DEBUG] [Thread-170198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:55:54.964 [DEBUG] [Thread-170198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:55:54.964 [DEBUG] [Thread-170198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:55:54.985 [INFO] [Thread-170198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:55:54.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:55:54.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:55:55.814 [DEBUG] [Thread-170198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:55:55.815 [DEBUG] [Thread-170198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:55:55.862 [DEBUG] [Thread-170198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:55:55.862 [DEBUG] [Thread-170198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:55:55.871 [DEBUG] [Thread-170198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:55:55.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:55:55.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-04-11T12:55:55.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:55:55.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:55:55.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:55:55.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:55:55.908 [DEBUG] [Thread-170198] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:55:57.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:55:57.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:06.166 [DEBUG] [Thread-170200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:08.470 [DEBUG] [Thread-170201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:23.519 [DEBUG] [Thread-170202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:56:25.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:56:25.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-04-11T12:56:27.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 56, 10), 0.039755, 99.7016, 0.0, 17.7865, 13.6126, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:56:27.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:56:10
2026-04-11T12:56:27.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:56:27.726 [DEBUG] [Thread-170203] [transport.py] [_log()] starting thread (client mode): 0xb39c4a60
2026-04-11T12:56:27.726 [DEBUG] [Thread-170203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:56:27.743 [DEBUG] [Thread-170203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:56:27.743 [INFO] [Thread-170203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] client lang: <none>
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] server lang: <none>
2026-04-11T12:56:27.747 [DEBUG] [Thread-170203] [transport.py] [_log()] kex follows: False
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] Compression: none
2026-04-11T12:56:27.748 [DEBUG] [Thread-170203] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:56:27.763 [DEBUG] [Thread-170203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:56:27.763 [DEBUG] [Thread-170203] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:56:27.763 [DEBUG] [Thread-170203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:56:27.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:56:27.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:56:27.764 [DEBUG] [Thread-170203] [transport.py] [_log()] userauth is OK
2026-04-11T12:56:27.764 [DEBUG] [Thread-170203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:56:27.764 [DEBUG] [Thread-170203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:56:27.764 [DEBUG] [Thread-170203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:56:27.764 [DEBUG] [Thread-170203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:56:27.778 [INFO] [Thread-170203] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:56:27.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:56:28.639 [DEBUG] [Thread-170203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:56:28.639 [DEBUG] [Thread-170203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:56:28.640 [DEBUG] [Thread-170203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:56:28.680 [DEBUG] [Thread-170203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:56:28.680 [DEBUG] [Thread-170203] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:56:28.684 [DEBUG] [Thread-170203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:56:28.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:56:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:56:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:56:28.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:56:28.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:56:28.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:56:28.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:56:28.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:56:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:56:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:56:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:56:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:56:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:56:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:56:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:56:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:56:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:56:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:56:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:56:10', tmtdew=0.039755, humidity=99.7016, cloud=0.0, wind=17.7865, temperature=13.6126, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:56:28.710 [DEBUG] [Thread-170203] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:56:28.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:56:28.803 [DEBUG] [Thread-170206] [transport.py] [_log()] starting thread (client mode): 0xb0f40af0
2026-04-11T12:56:28.803 [DEBUG] [Thread-170206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:56:28.818 [DEBUG] [Thread-170206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:56:28.818 [INFO] [Thread-170206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:56:28.827 [DEBUG] [Thread-170206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:56:28.827 [DEBUG] [Thread-170206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:56:28.827 [DEBUG] [Thread-170206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:56:28.827 [DEBUG] [Thread-170206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:56:28.827 [DEBUG] [Thread-170206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] client lang: <none>
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] server lang: <none>
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] kex follows: False
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] Compression: none
2026-04-11T12:56:28.828 [DEBUG] [Thread-170206] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:56:28.888 [DEBUG] [Thread-170206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:56:28.888 [DEBUG] [Thread-170206] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:56:28.889 [DEBUG] [Thread-170206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:56:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:56:28.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:56:28.944 [DEBUG] [Thread-170206] [transport.py] [_log()] userauth is OK
2026-04-11T12:56:28.944 [DEBUG] [Thread-170206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:56:28.944 [DEBUG] [Thread-170206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:56:28.945 [DEBUG] [Thread-170206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:56:28.945 [DEBUG] [Thread-170206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:56:28.963 [INFO] [Thread-170206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:56:28.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:56:28.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:56:29.791 [DEBUG] [Thread-170206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:56:29.791 [DEBUG] [Thread-170206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:56:29.838 [DEBUG] [Thread-170206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:56:29.839 [DEBUG] [Thread-170206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:56:29.848 [DEBUG] [Thread-170206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:56:29.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:56:29.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-04-11T12:56:29.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-04-11T12:56:29.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:56:29.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:56:29.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:56:29.882 [DEBUG] [Thread-170206] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:56:38.555 [DEBUG] [Thread-170208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:53.608 [DEBUG] [Thread-170209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:57.589 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:57.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:56:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:56:59.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:56:59.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-04-11T12:57:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 56, 45), 0.06922, 99.4696, 0.0, 18.949, 14.0915, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:57:01.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:56:45
2026-04-11T12:57:01.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:57:01.711 [DEBUG] [Thread-170210] [transport.py] [_log()] starting thread (client mode): 0xae5e7880
2026-04-11T12:57:01.711 [DEBUG] [Thread-170210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:57:01.732 [DEBUG] [Thread-170210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:57:01.732 [INFO] [Thread-170210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:57:01.735 [DEBUG] [Thread-170210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] client lang: <none>
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] server lang: <none>
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] kex follows: False
2026-04-11T12:57:01.736 [DEBUG] [Thread-170210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:57:01.737 [DEBUG] [Thread-170210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:57:01.737 [DEBUG] [Thread-170210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:57:01.737 [DEBUG] [Thread-170210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:57:01.737 [DEBUG] [Thread-170210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:57:01.737 [DEBUG] [Thread-170210] [transport.py] [_log()] Compression: none
2026-04-11T12:57:01.737 [DEBUG] [Thread-170210] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:57:01.756 [DEBUG] [Thread-170210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:57:01.757 [DEBUG] [Thread-170210] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:57:01.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:57:01.758 [DEBUG] [Thread-170210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:57:01.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:57:01.760 [DEBUG] [Thread-170210] [transport.py] [_log()] userauth is OK
2026-04-11T12:57:01.760 [DEBUG] [Thread-170210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:57:01.760 [DEBUG] [Thread-170210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:57:01.760 [DEBUG] [Thread-170210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:57:01.760 [DEBUG] [Thread-170210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:57:01.785 [INFO] [Thread-170210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:57:01.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:57:02.597 [DEBUG] [Thread-170210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:57:02.598 [DEBUG] [Thread-170210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:57:02.598 [DEBUG] [Thread-170210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:57:02.638 [DEBUG] [Thread-170210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:57:02.638 [DEBUG] [Thread-170210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:57:02.642 [DEBUG] [Thread-170210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:57:02.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:57:02.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:57:02.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:57:02.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:57:02.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:57:02.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:57:02.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:57:02.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:57:02.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:57:02.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:57:02.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:57:02.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:57:02.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:57:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:57:02.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:57:02.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:57:02.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:57:02.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:57:02.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:56:45', tmtdew=0.06922, humidity=99.4696, cloud=0.0, wind=18.949, temperature=14.0915, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:57:02.668 [DEBUG] [Thread-170210] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:57:02.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:57:02.769 [DEBUG] [Thread-170213] [transport.py] [_log()] starting thread (client mode): 0xae5e6c50
2026-04-11T12:57:02.769 [DEBUG] [Thread-170213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:57:02.784 [DEBUG] [Thread-170213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:57:02.784 [INFO] [Thread-170213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:57:02.792 [DEBUG] [Thread-170213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:57:02.792 [DEBUG] [Thread-170213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:57:02.792 [DEBUG] [Thread-170213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] client lang: <none>
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] server lang: <none>
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] kex follows: False
2026-04-11T12:57:02.793 [DEBUG] [Thread-170213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:57:02.794 [DEBUG] [Thread-170213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:57:02.794 [DEBUG] [Thread-170213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:57:02.794 [DEBUG] [Thread-170213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:57:02.794 [DEBUG] [Thread-170213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:57:02.794 [DEBUG] [Thread-170213] [transport.py] [_log()] Compression: none
2026-04-11T12:57:02.794 [DEBUG] [Thread-170213] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:57:02.853 [DEBUG] [Thread-170213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:57:02.853 [DEBUG] [Thread-170213] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:57:02.854 [DEBUG] [Thread-170213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:57:02.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:57:02.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:57:02.912 [DEBUG] [Thread-170213] [transport.py] [_log()] userauth is OK
2026-04-11T12:57:02.913 [DEBUG] [Thread-170213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:57:02.913 [DEBUG] [Thread-170213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:57:02.913 [DEBUG] [Thread-170213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:57:02.913 [DEBUG] [Thread-170213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:57:02.932 [INFO] [Thread-170213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:57:02.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:57:02.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:57:03.748 [DEBUG] [Thread-170213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:57:03.749 [DEBUG] [Thread-170213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:57:03.797 [DEBUG] [Thread-170213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:57:03.797 [DEBUG] [Thread-170213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:57:03.806 [DEBUG] [Thread-170213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:57:03.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:57:03.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-04-11T12:57:03.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:57:03.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:57:03.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:57:03.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:57:03.842 [DEBUG] [Thread-170213] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:57:06.225 [DEBUG] [Thread-170215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:57:08.647 [DEBUG] [Thread-170216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:57:23.696 [DEBUG] [Thread-170217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:57:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:57:33.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:57:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:57:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 57, 20), 0.08718, 99.7182, 0.0, 15.1934, 13.6292, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:57:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:57:20
2026-04-11T12:57:35.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:57:35.701 [DEBUG] [Thread-170218] [transport.py] [_log()] starting thread (client mode): 0xae561d20
2026-04-11T12:57:35.701 [DEBUG] [Thread-170218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:57:35.723 [DEBUG] [Thread-170218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:57:35.723 [INFO] [Thread-170218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] client lang: <none>
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] server lang: <none>
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] kex follows: False
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:57:35.727 [DEBUG] [Thread-170218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:57:35.728 [DEBUG] [Thread-170218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:57:35.728 [DEBUG] [Thread-170218] [transport.py] [_log()] Compression: none
2026-04-11T12:57:35.728 [DEBUG] [Thread-170218] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:57:35.745 [DEBUG] [Thread-170218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:57:35.746 [DEBUG] [Thread-170218] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:57:35.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:57:35.746 [DEBUG] [Thread-170218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:57:35.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:57:35.748 [DEBUG] [Thread-170218] [transport.py] [_log()] userauth is OK
2026-04-11T12:57:35.749 [DEBUG] [Thread-170218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:57:35.749 [DEBUG] [Thread-170218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:57:35.749 [DEBUG] [Thread-170218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:57:35.749 [DEBUG] [Thread-170218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:57:35.772 [INFO] [Thread-170218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:57:35.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:57:36.579 [DEBUG] [Thread-170218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:57:36.579 [DEBUG] [Thread-170218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:57:36.579 [DEBUG] [Thread-170218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:57:36.620 [DEBUG] [Thread-170218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:57:36.620 [DEBUG] [Thread-170218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:57:36.624 [DEBUG] [Thread-170218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:57:36.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:57:36.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:57:36.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:57:36.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:57:36.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:57:36.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:57:36.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:57:36.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:57:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:57:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:57:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:57:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:57:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:57:36.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:57:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:57:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:57:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:57:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:57:36.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:57:20', tmtdew=0.08718, humidity=99.7182, cloud=0.0, wind=15.1934, temperature=13.6292, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:57:36.655 [DEBUG] [Thread-170218] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:57:36.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:57:36.750 [DEBUG] [Thread-170221] [transport.py] [_log()] starting thread (client mode): 0xae5620e0
2026-04-11T12:57:36.750 [DEBUG] [Thread-170221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:57:36.766 [DEBUG] [Thread-170221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:57:36.766 [INFO] [Thread-170221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:57:36.774 [DEBUG] [Thread-170221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:57:36.774 [DEBUG] [Thread-170221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:57:36.774 [DEBUG] [Thread-170221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:57:36.774 [DEBUG] [Thread-170221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:36.774 [DEBUG] [Thread-170221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] client lang: <none>
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] server lang: <none>
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] kex follows: False
2026-04-11T12:57:36.775 [DEBUG] [Thread-170221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:57:36.776 [DEBUG] [Thread-170221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:57:36.776 [DEBUG] [Thread-170221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:57:36.776 [DEBUG] [Thread-170221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:57:36.776 [DEBUG] [Thread-170221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:57:36.776 [DEBUG] [Thread-170221] [transport.py] [_log()] Compression: none
2026-04-11T12:57:36.776 [DEBUG] [Thread-170221] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:57:36.832 [DEBUG] [Thread-170221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:57:36.833 [DEBUG] [Thread-170221] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:57:36.833 [DEBUG] [Thread-170221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:57:36.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:57:36.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:57:36.888 [DEBUG] [Thread-170221] [transport.py] [_log()] userauth is OK
2026-04-11T12:57:36.889 [DEBUG] [Thread-170221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:57:36.889 [DEBUG] [Thread-170221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:57:36.889 [DEBUG] [Thread-170221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:57:36.889 [DEBUG] [Thread-170221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:57:36.907 [INFO] [Thread-170221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:57:36.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:57:36.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:57:37.715 [DEBUG] [Thread-170221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:57:37.715 [DEBUG] [Thread-170221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:57:37.762 [DEBUG] [Thread-170221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:57:37.763 [DEBUG] [Thread-170221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:57:37.772 [DEBUG] [Thread-170221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:57:37.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:57:37.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-04-11T12:57:37.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-04-11T12:57:37.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:57:37.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:57:37.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:57:37.813 [DEBUG] [Thread-170221] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:57:38.733 [DEBUG] [Thread-170223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:57:53.788 [DEBUG] [Thread-170224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:57:57.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:57:57.731 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:06.276 [DEBUG] [Thread-170225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:07.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:58:07.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:58:07.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:58:08.825 [DEBUG] [Thread-170226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 57, 56), 0.08718, 99.7182, 0.0, 16.8332, 13.6292, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:58:09.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:57:56
2026-04-11T12:58:09.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:58:09.635 [DEBUG] [Thread-170227] [transport.py] [_log()] starting thread (client mode): 0xae560130
2026-04-11T12:58:09.635 [DEBUG] [Thread-170227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:58:09.651 [DEBUG] [Thread-170227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:58:09.651 [INFO] [Thread-170227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] client lang: <none>
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] server lang: <none>
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] kex follows: False
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] Compression: none
2026-04-11T12:58:09.653 [DEBUG] [Thread-170227] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:58:09.666 [DEBUG] [Thread-170227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:58:09.666 [DEBUG] [Thread-170227] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:58:09.666 [DEBUG] [Thread-170227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:58:09.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:58:09.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:58:09.668 [DEBUG] [Thread-170227] [transport.py] [_log()] userauth is OK
2026-04-11T12:58:09.668 [DEBUG] [Thread-170227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:58:09.668 [DEBUG] [Thread-170227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:58:09.668 [DEBUG] [Thread-170227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:58:09.668 [DEBUG] [Thread-170227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:58:09.688 [INFO] [Thread-170227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:58:09.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:58:10.941 [DEBUG] [Thread-170227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:58:10.941 [DEBUG] [Thread-170227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:58:10.942 [DEBUG] [Thread-170227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:58:10.982 [DEBUG] [Thread-170227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:58:10.982 [DEBUG] [Thread-170227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:58:10.987 [DEBUG] [Thread-170227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:58:11.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:58:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:58:11.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:58:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:58:11.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:58:11.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:58:11.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:58:11.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:58:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:58:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:58:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:58:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:58:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:58:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:58:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:58:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:58:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:58:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:58:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:57:56', tmtdew=0.08718, humidity=99.7182, cloud=0.0, wind=16.8332, temperature=13.6292, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:58:11.016 [DEBUG] [Thread-170227] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:58:11.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:58:11.111 [DEBUG] [Thread-170230] [transport.py] [_log()] starting thread (client mode): 0xa795d000
2026-04-11T12:58:11.112 [DEBUG] [Thread-170230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:58:11.125 [DEBUG] [Thread-170230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:58:11.126 [INFO] [Thread-170230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:58:11.133 [DEBUG] [Thread-170230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:58:11.133 [DEBUG] [Thread-170230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:58:11.133 [DEBUG] [Thread-170230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] client lang: <none>
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] server lang: <none>
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] kex follows: False
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] Compression: none
2026-04-11T12:58:11.134 [DEBUG] [Thread-170230] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:58:11.193 [DEBUG] [Thread-170230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:58:11.194 [DEBUG] [Thread-170230] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:58:11.195 [DEBUG] [Thread-170230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:58:11.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:58:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:58:11.258 [DEBUG] [Thread-170230] [transport.py] [_log()] userauth is OK
2026-04-11T12:58:11.258 [DEBUG] [Thread-170230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:58:11.258 [DEBUG] [Thread-170230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:58:11.258 [DEBUG] [Thread-170230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:58:11.258 [DEBUG] [Thread-170230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:58:11.283 [INFO] [Thread-170230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:58:11.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:58:11.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:58:12.113 [DEBUG] [Thread-170230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:58:12.113 [DEBUG] [Thread-170230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:58:12.161 [DEBUG] [Thread-170230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:58:12.161 [DEBUG] [Thread-170230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:58:12.170 [DEBUG] [Thread-170230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:58:12.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:58:12.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-04-11T12:58:12.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T12:58:12.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:58:12.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:58:12.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:58:12.207 [DEBUG] [Thread-170230] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:58:23.863 [DEBUG] [Thread-170232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:38.922 [DEBUG] [Thread-170233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:42.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:58:42.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:58:42.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-04-11T12:58:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 58, 31), 0.084605, 99.7348, 0.0, 15.6514, 13.6623, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:58:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:58:31
2026-04-11T12:58:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:58:44.117 [DEBUG] [Thread-170234] [transport.py] [_log()] starting thread (client mode): 0xa79b58a0
2026-04-11T12:58:44.117 [DEBUG] [Thread-170234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:58:44.138 [DEBUG] [Thread-170234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:58:44.138 [INFO] [Thread-170234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] client lang: <none>
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] server lang: <none>
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] kex follows: False
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:58:44.142 [DEBUG] [Thread-170234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:58:44.143 [DEBUG] [Thread-170234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:58:44.143 [DEBUG] [Thread-170234] [transport.py] [_log()] Compression: none
2026-04-11T12:58:44.143 [DEBUG] [Thread-170234] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:58:44.159 [DEBUG] [Thread-170234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:58:44.160 [DEBUG] [Thread-170234] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:58:44.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:58:44.161 [DEBUG] [Thread-170234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:58:44.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:58:44.163 [DEBUG] [Thread-170234] [transport.py] [_log()] userauth is OK
2026-04-11T12:58:44.163 [DEBUG] [Thread-170234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:58:44.163 [DEBUG] [Thread-170234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:58:44.163 [DEBUG] [Thread-170234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:58:44.164 [DEBUG] [Thread-170234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:58:44.190 [INFO] [Thread-170234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:58:44.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:58:45.014 [DEBUG] [Thread-170234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:58:45.014 [DEBUG] [Thread-170234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:58:45.014 [DEBUG] [Thread-170234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:58:45.056 [DEBUG] [Thread-170234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:58:45.056 [DEBUG] [Thread-170234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:58:45.060 [DEBUG] [Thread-170234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:58:45.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:58:45.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:58:45.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:58:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:58:45.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:58:45.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:58:45.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:58:45.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:58:45.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:58:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:58:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:58:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:58:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:58:45.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:58:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:58:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:58:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:58:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:58:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:58:31', tmtdew=0.084605, humidity=99.7348, cloud=0.0, wind=15.6514, temperature=13.6623, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:58:45.089 [DEBUG] [Thread-170234] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:58:45.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:58:45.183 [DEBUG] [Thread-170237] [transport.py] [_log()] starting thread (client mode): 0xae52c8e0
2026-04-11T12:58:45.183 [DEBUG] [Thread-170237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:58:45.197 [DEBUG] [Thread-170237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:58:45.197 [INFO] [Thread-170237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:58:45.205 [DEBUG] [Thread-170237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:58:45.205 [DEBUG] [Thread-170237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:58:45.205 [DEBUG] [Thread-170237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:58:45.205 [DEBUG] [Thread-170237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:45.205 [DEBUG] [Thread-170237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] client lang: <none>
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] server lang: <none>
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] kex follows: False
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] Compression: none
2026-04-11T12:58:45.206 [DEBUG] [Thread-170237] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:58:45.265 [DEBUG] [Thread-170237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:58:45.265 [DEBUG] [Thread-170237] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:58:45.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:58:45.266 [DEBUG] [Thread-170237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:58:45.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:58:45.321 [DEBUG] [Thread-170237] [transport.py] [_log()] userauth is OK
2026-04-11T12:58:45.321 [DEBUG] [Thread-170237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:58:45.321 [DEBUG] [Thread-170237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:58:45.321 [DEBUG] [Thread-170237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:58:45.321 [DEBUG] [Thread-170237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:58:45.345 [INFO] [Thread-170237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:58:45.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:58:45.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:58:46.150 [DEBUG] [Thread-170237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:58:46.150 [DEBUG] [Thread-170237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:58:46.197 [DEBUG] [Thread-170237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:58:46.197 [DEBUG] [Thread-170237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:58:46.205 [DEBUG] [Thread-170237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:58:46.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:58:46.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:58:46.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-04-11T12:58:46.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:58:46.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:58:46.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:58:46.237 [DEBUG] [Thread-170237] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:58:53.960 [DEBUG] [Thread-170239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:57.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:58:57.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:06.326 [DEBUG] [Thread-170240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:09.014 [DEBUG] [Thread-170241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:16.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:59:16.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:59:16.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T12:59:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 59, 7), 0.07686, 99.7845, 0.0, 14.2754, 13.7618, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:59:17.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:59:07
2026-04-11T12:59:17.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:59:18.088 [DEBUG] [Thread-170242] [transport.py] [_log()] starting thread (client mode): 0xae5616f0
2026-04-11T12:59:18.088 [DEBUG] [Thread-170242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:59:18.106 [DEBUG] [Thread-170242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:59:18.106 [INFO] [Thread-170242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] client lang: <none>
2026-04-11T12:59:18.110 [DEBUG] [Thread-170242] [transport.py] [_log()] server lang: <none>
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] kex follows: False
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] Compression: none
2026-04-11T12:59:18.111 [DEBUG] [Thread-170242] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:59:18.127 [DEBUG] [Thread-170242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:59:18.128 [DEBUG] [Thread-170242] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:59:18.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:59:18.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:59:18.129 [DEBUG] [Thread-170242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:59:18.130 [DEBUG] [Thread-170242] [transport.py] [_log()] userauth is OK
2026-04-11T12:59:18.130 [DEBUG] [Thread-170242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:59:18.130 [DEBUG] [Thread-170242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:59:18.130 [DEBUG] [Thread-170242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:59:18.130 [DEBUG] [Thread-170242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:59:18.165 [INFO] [Thread-170242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:59:18.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:59:18.996 [DEBUG] [Thread-170242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:59:18.996 [DEBUG] [Thread-170242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:59:18.997 [DEBUG] [Thread-170242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:59:19.038 [DEBUG] [Thread-170242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:59:19.038 [DEBUG] [Thread-170242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:59:19.043 [DEBUG] [Thread-170242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:59:19.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:59:19.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:59:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:59:19.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:59:19.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:59:19.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:59:19.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:59:19.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:59:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:59:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:59:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:59:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:59:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:59:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:59:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:59:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:59:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:59:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:59:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:59:07', tmtdew=0.07686, humidity=99.7845, cloud=0.0, wind=14.2754, temperature=13.7618, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:59:19.076 [DEBUG] [Thread-170242] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:59:19.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:59:19.169 [DEBUG] [Thread-170245] [transport.py] [_log()] starting thread (client mode): 0xae5b6170
2026-04-11T12:59:19.169 [DEBUG] [Thread-170245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:59:19.184 [DEBUG] [Thread-170245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:59:19.184 [INFO] [Thread-170245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:19.192 [DEBUG] [Thread-170245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] client lang: <none>
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] server lang: <none>
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] kex follows: False
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] Compression: none
2026-04-11T12:59:19.193 [DEBUG] [Thread-170245] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:59:19.252 [DEBUG] [Thread-170245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:59:19.252 [DEBUG] [Thread-170245] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:59:19.253 [DEBUG] [Thread-170245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:59:19.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:59:19.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:59:19.308 [DEBUG] [Thread-170245] [transport.py] [_log()] userauth is OK
2026-04-11T12:59:19.309 [DEBUG] [Thread-170245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:59:19.309 [DEBUG] [Thread-170245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:59:19.309 [DEBUG] [Thread-170245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:59:19.309 [DEBUG] [Thread-170245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:59:19.327 [INFO] [Thread-170245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:59:19.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:59:19.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:59:20.149 [DEBUG] [Thread-170245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:59:20.150 [DEBUG] [Thread-170245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:59:20.197 [DEBUG] [Thread-170245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:59:20.197 [DEBUG] [Thread-170245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:59:20.206 [DEBUG] [Thread-170245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:59:20.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:59:20.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T12:59:20.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-04-11T12:59:20.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:59:20.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:59:20.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:59:20.243 [DEBUG] [Thread-170245] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:59:24.054 [DEBUG] [Thread-170247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:39.107 [DEBUG] [Thread-170248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T12:59:50.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T12:59:50.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-04-11T12:59:51.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 59, 42), 0.06919, 99.4695, 0.0, 18.3139, 14.2573, 2, 2, 0, 2, 0, 0),)
2026-04-11T12:59:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:59:42
2026-04-11T12:59:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T12:59:52.101 [DEBUG] [Thread-170249] [transport.py] [_log()] starting thread (client mode): 0xae5b0040
2026-04-11T12:59:52.101 [DEBUG] [Thread-170249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:59:52.123 [DEBUG] [Thread-170249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T12:59:52.123 [INFO] [Thread-170249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] client lang: <none>
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] server lang: <none>
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] kex follows: False
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] Compression: none
2026-04-11T12:59:52.127 [DEBUG] [Thread-170249] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:59:52.145 [DEBUG] [Thread-170249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:59:52.145 [DEBUG] [Thread-170249] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:59:52.146 [DEBUG] [Thread-170249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T12:59:52.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T12:59:52.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:59:52.148 [DEBUG] [Thread-170249] [transport.py] [_log()] userauth is OK
2026-04-11T12:59:52.148 [DEBUG] [Thread-170249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:59:52.148 [DEBUG] [Thread-170249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:59:52.149 [DEBUG] [Thread-170249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T12:59:52.149 [DEBUG] [Thread-170249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:59:52.173 [INFO] [Thread-170249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:59:52.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:59:52.942 [DEBUG] [Thread-170249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:59:52.943 [DEBUG] [Thread-170249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:59:52.943 [DEBUG] [Thread-170249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T12:59:52.984 [DEBUG] [Thread-170249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:59:52.984 [DEBUG] [Thread-170249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:59:52.987 [DEBUG] [Thread-170249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:59:52.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:59:52.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T12:59:53.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T12:59:53.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T12:59:53.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:59:53.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T12:59:53.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:59:53.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:59:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T12:59:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T12:59:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T12:59:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T12:59:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T12:59:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T12:59:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T12:59:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T12:59:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T12:59:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T12:59:53.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:59:42', tmtdew=0.06919, humidity=99.4695, cloud=0.0, wind=18.3139, temperature=14.2573, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T12:59:53.012 [DEBUG] [Thread-170249] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:59:53.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T12:59:53.103 [DEBUG] [Thread-170252] [transport.py] [_log()] starting thread (client mode): 0xae5b1f30
2026-04-11T12:59:53.103 [DEBUG] [Thread-170252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T12:59:53.117 [DEBUG] [Thread-170252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T12:59:53.117 [INFO] [Thread-170252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T12:59:53.125 [DEBUG] [Thread-170252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T12:59:53.125 [DEBUG] [Thread-170252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T12:59:53.125 [DEBUG] [Thread-170252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T12:59:53.125 [DEBUG] [Thread-170252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:53.125 [DEBUG] [Thread-170252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] client lang: <none>
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] server lang: <none>
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] kex follows: False
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T12:59:53.126 [DEBUG] [Thread-170252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T12:59:53.127 [DEBUG] [Thread-170252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T12:59:53.127 [DEBUG] [Thread-170252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T12:59:53.127 [DEBUG] [Thread-170252] [transport.py] [_log()] Compression: none
2026-04-11T12:59:53.127 [DEBUG] [Thread-170252] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T12:59:53.185 [DEBUG] [Thread-170252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T12:59:53.186 [DEBUG] [Thread-170252] [transport.py] [_log()] Switch to new keys ...
2026-04-11T12:59:53.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T12:59:53.187 [DEBUG] [Thread-170252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T12:59:53.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T12:59:53.243 [DEBUG] [Thread-170252] [transport.py] [_log()] userauth is OK
2026-04-11T12:59:53.244 [DEBUG] [Thread-170252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T12:59:53.244 [DEBUG] [Thread-170252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T12:59:53.244 [DEBUG] [Thread-170252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T12:59:53.244 [DEBUG] [Thread-170252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T12:59:53.263 [INFO] [Thread-170252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T12:59:53.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T12:59:53.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T12:59:54.110 [DEBUG] [Thread-170252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T12:59:54.110 [DEBUG] [Thread-170252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T12:59:54.145 [DEBUG] [Thread-170254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:54.158 [DEBUG] [Thread-170252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T12:59:54.158 [DEBUG] [Thread-170252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T12:59:54.167 [DEBUG] [Thread-170252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T12:59:54.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T12:59:54.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-04-11T12:59:54.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-04-11T12:59:54.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T12:59:54.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T12:59:54.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T12:59:54.201 [DEBUG] [Thread-170252] [transport.py] [_log()] EOF in transport thread
2026-04-11T12:59:58.011 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T12:59:58.013 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:06.390 [DEBUG] [Thread-170255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:09.196 [DEBUG] [Thread-170256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:24.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:00:24.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:00:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:00:24.234 [DEBUG] [Thread-170257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 12, 59, 42), 0.06919, 99.4695, 0.0, 18.3139, 14.2573, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:00:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 12:59:42
2026-04-11T13:00:25.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:00:26.039 [DEBUG] [Thread-170258] [transport.py] [_log()] starting thread (client mode): 0xb39c7c40
2026-04-11T13:00:26.039 [DEBUG] [Thread-170258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:00:26.068 [DEBUG] [Thread-170258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:00:26.068 [INFO] [Thread-170258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:00:26.071 [DEBUG] [Thread-170258] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:00:26.071 [DEBUG] [Thread-170258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:00:26.071 [DEBUG] [Thread-170258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] client lang: <none>
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] server lang: <none>
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] kex follows: False
2026-04-11T13:00:26.072 [DEBUG] [Thread-170258] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:00:26.073 [DEBUG] [Thread-170258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:00:26.073 [DEBUG] [Thread-170258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:00:26.073 [DEBUG] [Thread-170258] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:00:26.073 [DEBUG] [Thread-170258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:00:26.073 [DEBUG] [Thread-170258] [transport.py] [_log()] Compression: none
2026-04-11T13:00:26.073 [DEBUG] [Thread-170258] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:00:26.092 [DEBUG] [Thread-170258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:00:26.093 [DEBUG] [Thread-170258] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:00:26.093 [DEBUG] [Thread-170258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:00:26.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:00:26.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:00:26.137 [DEBUG] [Thread-170258] [transport.py] [_log()] userauth is OK
2026-04-11T13:00:26.137 [DEBUG] [Thread-170258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:00:26.137 [DEBUG] [Thread-170258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:00:26.137 [DEBUG] [Thread-170258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:00:26.138 [DEBUG] [Thread-170258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:00:26.174 [INFO] [Thread-170258] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:00:26.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:00:34.337 [DEBUG] [Thread-170258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:00:34.337 [DEBUG] [Thread-170258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:00:34.338 [DEBUG] [Thread-170258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:00:34.378 [DEBUG] [Thread-170258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:00:34.378 [DEBUG] [Thread-170258] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:00:34.382 [DEBUG] [Thread-170258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:00:34.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:00:34.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:00:34.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:00:34.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:00:34.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:00:34.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:00:34.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:00:34.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:00:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:00:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.454285 -999.00  +13.60  20.04     97  +13.20 1 3 1 3 1   888    0 0.49 1.61 ----- 22.9 20.0 45.6 23.9 15.5 0.3 15.5 -0.1 15.2 -0.5 15.4 0.5
2026-04-11T13:00:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:00:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:00:34.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.454285
2026-04-11T13:00:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:00:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:00:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:00:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:00:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:00:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T12:59:42', tmtdew=0.06919, humidity=99.4695, cloud=0.0, wind=18.3139, temperature=14.2573, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T10:54:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:00:34.516 [DEBUG] [Thread-170258] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:00:34.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:00:34.611 [DEBUG] [Thread-170261] [transport.py] [_log()] starting thread (client mode): 0xae5b2500
2026-04-11T13:00:34.611 [DEBUG] [Thread-170261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:00:34.628 [DEBUG] [Thread-170261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:00:34.628 [INFO] [Thread-170261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:00:34.635 [DEBUG] [Thread-170261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] client lang: <none>
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] server lang: <none>
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] kex follows: False
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] Compression: none
2026-04-11T13:00:34.636 [DEBUG] [Thread-170261] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:00:34.695 [DEBUG] [Thread-170261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:00:34.696 [DEBUG] [Thread-170261] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:00:34.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:00:34.697 [DEBUG] [Thread-170261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:00:34.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:00:34.752 [DEBUG] [Thread-170261] [transport.py] [_log()] userauth is OK
2026-04-11T13:00:34.752 [DEBUG] [Thread-170261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:00:34.752 [DEBUG] [Thread-170261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:00:34.752 [DEBUG] [Thread-170261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:00:34.753 [DEBUG] [Thread-170261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:00:34.772 [INFO] [Thread-170261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:00: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-04-11T13:00:34.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:00:35.610 [DEBUG] [Thread-170261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:00:35.611 [DEBUG] [Thread-170261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:00:35.659 [DEBUG] [Thread-170261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:00:35.659 [DEBUG] [Thread-170261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:00:35.669 [DEBUG] [Thread-170261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:00:35.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:00:35.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-04-11T13:00:35.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:00:35.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:00:35.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:00:35.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:00:35.707 [DEBUG] [Thread-170261] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:00:39.268 [DEBUG] [Thread-170263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:54.310 [DEBUG] [Thread-170264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:58.153 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:00:58.154 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:05.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:01:05.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:01:05.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:01:06.444 [DEBUG] [Thread-170265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 0, 54), 0.06921, 99.4695, 0.0, 18.2786, 14.1578, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:01:06.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:00:54
2026-04-11T13:01:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:01:07.519 [DEBUG] [Thread-170266] [transport.py] [_log()] starting thread (client mode): 0xa79b5ba0
2026-04-11T13:01:07.519 [DEBUG] [Thread-170266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:01:07.539 [DEBUG] [Thread-170266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:01:07.539 [INFO] [Thread-170266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:01:07.542 [DEBUG] [Thread-170266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:01:07.542 [DEBUG] [Thread-170266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:01:07.542 [DEBUG] [Thread-170266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] client lang: <none>
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] server lang: <none>
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] kex follows: False
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:01:07.543 [DEBUG] [Thread-170266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:01:07.544 [DEBUG] [Thread-170266] [transport.py] [_log()] Compression: none
2026-04-11T13:01:07.544 [DEBUG] [Thread-170266] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:01:07.562 [DEBUG] [Thread-170266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:01:07.562 [DEBUG] [Thread-170266] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:01:07.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:01:07.564 [DEBUG] [Thread-170266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:01:07.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:01:07.566 [DEBUG] [Thread-170266] [transport.py] [_log()] userauth is OK
2026-04-11T13:01:07.567 [DEBUG] [Thread-170266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:01:07.567 [DEBUG] [Thread-170266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:01:07.567 [DEBUG] [Thread-170266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:01:07.567 [DEBUG] [Thread-170266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:01:07.582 [INFO] [Thread-170266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:01:07.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:01:08.435 [DEBUG] [Thread-170266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:01:08.435 [DEBUG] [Thread-170266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:01:08.436 [DEBUG] [Thread-170266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:01:08.476 [DEBUG] [Thread-170266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:01:08.476 [DEBUG] [Thread-170266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:01:08.480 [DEBUG] [Thread-170266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:01:08.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:01:08.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:01:08.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:01:08.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:01:08.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:01:08.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:01:08.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:01:08.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:01:08.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:01:08.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.458452 -999.00  +13.80  13.84     97  +13.40 1 3 1 3 1   888    0 0.48 1.03 NA 13.5 13.8 55.4 17.4 15.7 0.0 15.7 -0.4 15.5 -0.5 15.7 0.2
2026-04-11T13:01:08.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:01:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:01:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.458452
2026-04-11T13:01:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:01:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:01:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:01:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:01:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:01:08.507 [DEBUG] [Thread-170266] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:01:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:00:54', tmtdew=0.06921, humidity=99.4695, cloud=0.0, wind=18.2786, temperature=14.1578, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:00:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:01:08.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:01:08.600 [DEBUG] [Thread-170269] [transport.py] [_log()] starting thread (client mode): 0xae5b5900
2026-04-11T13:01:08.600 [DEBUG] [Thread-170269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:01:08.615 [DEBUG] [Thread-170269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:01:08.616 [INFO] [Thread-170269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:01:08.623 [DEBUG] [Thread-170269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:01:08.624 [DEBUG] [Thread-170269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] client lang: <none>
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] server lang: <none>
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] kex follows: False
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:01:08.625 [DEBUG] [Thread-170269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:01:08.626 [DEBUG] [Thread-170269] [transport.py] [_log()] Compression: none
2026-04-11T13:01:08.626 [DEBUG] [Thread-170269] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:01:08.684 [DEBUG] [Thread-170269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:01:08.685 [DEBUG] [Thread-170269] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:01:08.686 [DEBUG] [Thread-170269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:01:08.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:01:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:01:08.743 [DEBUG] [Thread-170269] [transport.py] [_log()] userauth is OK
2026-04-11T13:01:08.744 [DEBUG] [Thread-170269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:01:08.744 [DEBUG] [Thread-170269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:01:08.744 [DEBUG] [Thread-170269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:01:08.744 [DEBUG] [Thread-170269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:01:08.762 [INFO] [Thread-170269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:01:08.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:01:08.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:01:09.349 [DEBUG] [Thread-170271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:09.571 [DEBUG] [Thread-170269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:01:09.571 [DEBUG] [Thread-170269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:01:09.619 [DEBUG] [Thread-170269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:01:09.619 [DEBUG] [Thread-170269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:01:09.629 [DEBUG] [Thread-170269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:01:09.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:01:09.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:01:09.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:01:09.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:01:09.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:01:09.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:01:09.666 [DEBUG] [Thread-170269] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:01:24.404 [DEBUG] [Thread-170272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:39.440 [DEBUG] [Thread-170273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:01:39.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:01:39.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-04-11T13:01:40.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 1, 29), 0.03718, 99.7182, 0.0, 13.3582, 13.7458, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:01:40.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:01:29
2026-04-11T13:01:41.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:01:41.481 [DEBUG] [Thread-170274] [transport.py] [_log()] starting thread (client mode): 0xae5b40a0
2026-04-11T13:01:41.481 [DEBUG] [Thread-170274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:01:41.509 [DEBUG] [Thread-170274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:01:41.509 [INFO] [Thread-170274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:01:41.512 [DEBUG] [Thread-170274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:01:41.512 [DEBUG] [Thread-170274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] client lang: <none>
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] server lang: <none>
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] kex follows: False
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] Compression: none
2026-04-11T13:01:41.513 [DEBUG] [Thread-170274] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:01:41.532 [DEBUG] [Thread-170274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:01:41.532 [DEBUG] [Thread-170274] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:01:41.533 [DEBUG] [Thread-170274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:01:41.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:01:41.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:01:41.536 [DEBUG] [Thread-170274] [transport.py] [_log()] userauth is OK
2026-04-11T13:01:41.536 [DEBUG] [Thread-170274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:01:41.536 [DEBUG] [Thread-170274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:01:41.536 [DEBUG] [Thread-170274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:01:41.536 [DEBUG] [Thread-170274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:01:41.560 [INFO] [Thread-170274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:01:41.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:01:42.347 [DEBUG] [Thread-170274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:01:42.348 [DEBUG] [Thread-170274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:01:42.348 [DEBUG] [Thread-170274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:01:42.389 [DEBUG] [Thread-170274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:01:42.389 [DEBUG] [Thread-170274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:01:42.393 [DEBUG] [Thread-170274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:01:42.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:01:42.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:01:42.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:01:42.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:01:42.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:01:42.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:01:42.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:01:42.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:01:42.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:01:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.458799 -999.00  +13.60  16.91     97  +13.20 1 3 1 3 1   888    0 0.47 0.85 NA 15.7 16.9 57.4 20.6 15.7 -0.2 15.7 -0.6 15.5 -0.5 15.7 -0.1
2026-04-11T13:01:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:01:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:01:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.458799
2026-04-11T13:01:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:01:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:01:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:01:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:01:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:01:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:01:29', tmtdew=0.03718, humidity=99.7182, cloud=0.0, wind=13.3582, temperature=13.7458, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:00:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:01:42.425 [DEBUG] [Thread-170274] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:01:42.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:01:42.517 [DEBUG] [Thread-170277] [transport.py] [_log()] starting thread (client mode): 0xae5634f0
2026-04-11T13:01:42.518 [DEBUG] [Thread-170277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:01:42.538 [DEBUG] [Thread-170277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:01:42.538 [INFO] [Thread-170277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:01:42.548 [DEBUG] [Thread-170277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:01:42.549 [DEBUG] [Thread-170277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:01:42.549 [DEBUG] [Thread-170277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:01:42.549 [DEBUG] [Thread-170277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:42.549 [DEBUG] [Thread-170277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] client lang: <none>
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] server lang: <none>
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] kex follows: False
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] Compression: none
2026-04-11T13:01:42.550 [DEBUG] [Thread-170277] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:01:42.606 [DEBUG] [Thread-170277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:01:42.607 [DEBUG] [Thread-170277] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:01:42.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:01:42.608 [DEBUG] [Thread-170277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:01:42.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:01:42.666 [DEBUG] [Thread-170277] [transport.py] [_log()] userauth is OK
2026-04-11T13:01:42.666 [DEBUG] [Thread-170277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:01:42.666 [DEBUG] [Thread-170277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:01:42.667 [DEBUG] [Thread-170277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:01:42.667 [DEBUG] [Thread-170277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:01:42.692 [INFO] [Thread-170277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:01:42.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:01:42.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:01:43.516 [DEBUG] [Thread-170277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:01:43.516 [DEBUG] [Thread-170277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:01:43.564 [DEBUG] [Thread-170277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:01:43.564 [DEBUG] [Thread-170277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:01:43.574 [DEBUG] [Thread-170277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:01:43.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:01:43.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:01:43.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:01:43.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:01:43.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:01:43.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:01:43.611 [DEBUG] [Thread-170277] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:01:54.483 [DEBUG] [Thread-170279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:58.294 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:01:58.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:06.502 [DEBUG] [Thread-170280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:09.535 [DEBUG] [Thread-170281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:02:13.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:02:13.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:02:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 2, 5), 0.032035, 99.7513, 0.0, 16.9567, 13.7789, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:02:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:02:05
2026-04-11T13:02:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:02:15.391 [DEBUG] [Thread-170282] [transport.py] [_log()] starting thread (client mode): 0xae563a00
2026-04-11T13:02:15.391 [DEBUG] [Thread-170282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:02:15.410 [DEBUG] [Thread-170282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:02:15.411 [INFO] [Thread-170282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:15.414 [DEBUG] [Thread-170282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] client lang: <none>
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] server lang: <none>
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] kex follows: False
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] Compression: none
2026-04-11T13:02:15.415 [DEBUG] [Thread-170282] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:02:15.432 [DEBUG] [Thread-170282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:02:15.433 [DEBUG] [Thread-170282] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:02:15.433 [DEBUG] [Thread-170282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:02:15.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:02:15.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:02:15.477 [DEBUG] [Thread-170282] [transport.py] [_log()] userauth is OK
2026-04-11T13:02:15.477 [DEBUG] [Thread-170282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:02:15.478 [DEBUG] [Thread-170282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:02:15.478 [DEBUG] [Thread-170282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:02:15.478 [DEBUG] [Thread-170282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:02:15.514 [INFO] [Thread-170282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:02:15.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:02:16.271 [DEBUG] [Thread-170282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:02:16.272 [DEBUG] [Thread-170282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:02:16.272 [DEBUG] [Thread-170282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:02:16.312 [DEBUG] [Thread-170282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:02:16.313 [DEBUG] [Thread-170282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:02:16.316 [DEBUG] [Thread-170282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:02:16.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:02:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:02:16.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:02:16.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:02:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:02:16.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:02:16.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:02:16.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:02:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:02:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.459493 -999.00  +13.50  21.41     96  +13.00 1 3 1 3 1   888    0 0.48 0.90 ----- 23.7 21.4 59.6 23.7 15.6 -0.2 15.6 -1.0 15.4 -1.4 15.6 -0.1
2026-04-11T13:02:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:02:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:02:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.459493
2026-04-11T13:02:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:02:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:02:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:02:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:02:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:02:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:02:05', tmtdew=0.032035, humidity=99.7513, cloud=0.0, wind=16.9567, temperature=13.7789, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:01:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:02:16.345 [DEBUG] [Thread-170282] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:02:16.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:02:16.438 [DEBUG] [Thread-170285] [transport.py] [_log()] starting thread (client mode): 0xa79b58a0
2026-04-11T13:02:16.439 [DEBUG] [Thread-170285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:02:16.453 [DEBUG] [Thread-170285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:02:16.453 [INFO] [Thread-170285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] client lang: <none>
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] server lang: <none>
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] kex follows: False
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:02:16.461 [DEBUG] [Thread-170285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:02:16.462 [DEBUG] [Thread-170285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:02:16.462 [DEBUG] [Thread-170285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:02:16.462 [DEBUG] [Thread-170285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:02:16.462 [DEBUG] [Thread-170285] [transport.py] [_log()] Compression: none
2026-04-11T13:02:16.462 [DEBUG] [Thread-170285] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:02:16.522 [DEBUG] [Thread-170285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:02:16.522 [DEBUG] [Thread-170285] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:02:16.523 [DEBUG] [Thread-170285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:02:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:02:16.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:02:16.578 [DEBUG] [Thread-170285] [transport.py] [_log()] userauth is OK
2026-04-11T13:02:16.578 [DEBUG] [Thread-170285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:02:16.578 [DEBUG] [Thread-170285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:02:16.578 [DEBUG] [Thread-170285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:02:16.578 [DEBUG] [Thread-170285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:02:16.596 [INFO] [Thread-170285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:02:16.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:02:16.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:02:17.432 [DEBUG] [Thread-170285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:02:17.432 [DEBUG] [Thread-170285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:02:17.480 [DEBUG] [Thread-170285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:02:17.480 [DEBUG] [Thread-170285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:02:17.489 [DEBUG] [Thread-170285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:02:17.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:02:17.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:02:17.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:02:17.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:02:17.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:02:17.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:02:17.526 [DEBUG] [Thread-170285] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:02:24.573 [DEBUG] [Thread-170287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:39.623 [DEBUG] [Thread-170288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:47.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:02:47.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:02:47.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-04-11T13:02:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 2, 40), 0.06404, 99.5027, 0.0, 13.4453, 14.2241, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:02:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:02:40
2026-04-11T13:02:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:02:49.342 [DEBUG] [Thread-170289] [transport.py] [_log()] starting thread (client mode): 0xae5b1750
2026-04-11T13:02:49.342 [DEBUG] [Thread-170289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:02:49.359 [DEBUG] [Thread-170289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:02:49.359 [INFO] [Thread-170289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] client lang: <none>
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] server lang: <none>
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] kex follows: False
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:02:49.363 [DEBUG] [Thread-170289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:02:49.364 [DEBUG] [Thread-170289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:02:49.364 [DEBUG] [Thread-170289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:02:49.364 [DEBUG] [Thread-170289] [transport.py] [_log()] Compression: none
2026-04-11T13:02:49.364 [DEBUG] [Thread-170289] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:02:49.383 [DEBUG] [Thread-170289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:02:49.383 [DEBUG] [Thread-170289] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:02:49.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:02:49.385 [DEBUG] [Thread-170289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:02:49.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:02:49.387 [DEBUG] [Thread-170289] [transport.py] [_log()] userauth is OK
2026-04-11T13:02:49.388 [DEBUG] [Thread-170289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:02:49.388 [DEBUG] [Thread-170289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:02:49.388 [DEBUG] [Thread-170289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:02:49.388 [DEBUG] [Thread-170289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:02:49.423 [INFO] [Thread-170289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:02:49.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:02:50.183 [DEBUG] [Thread-170289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:02:50.183 [DEBUG] [Thread-170289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:02:50.184 [DEBUG] [Thread-170289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:02:50.224 [DEBUG] [Thread-170289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:02:50.224 [DEBUG] [Thread-170289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:02:50.227 [DEBUG] [Thread-170289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:02:50.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:02:50.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:02:50.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:02:50.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:02:50.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:02:50.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:02:50.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:02:50.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:02:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:02:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.459841 -999.00  +13.40  17.94     96  +12.90 1 3 1 3 1   888    0 0.48 0.91 ----- 17.1 17.9 55.8 27.9 15.5 -0.2 15.6 -0.8 15.3 -1.3 15.6 -0.4
2026-04-11T13:02:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:02:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:02:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.459841
2026-04-11T13:02:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:02:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:02:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:02:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:02:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:02:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:02:40', tmtdew=0.06404, humidity=99.5027, cloud=0.0, wind=13.4453, temperature=14.2241, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:02:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:02:50.256 [DEBUG] [Thread-170289] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:02:50.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:02:50.358 [DEBUG] [Thread-170292] [transport.py] [_log()] starting thread (client mode): 0xae5b07f0
2026-04-11T13:02:50.359 [DEBUG] [Thread-170292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:02:50.374 [DEBUG] [Thread-170292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:02:50.374 [INFO] [Thread-170292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:02:50.382 [DEBUG] [Thread-170292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:02:50.382 [DEBUG] [Thread-170292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:02:50.382 [DEBUG] [Thread-170292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] client lang: <none>
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] server lang: <none>
2026-04-11T13:02:50.383 [DEBUG] [Thread-170292] [transport.py] [_log()] kex follows: False
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] Compression: none
2026-04-11T13:02:50.384 [DEBUG] [Thread-170292] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:02:50.443 [DEBUG] [Thread-170292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:02:50.444 [DEBUG] [Thread-170292] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:02:50.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:02:50.445 [DEBUG] [Thread-170292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:02:50.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:02:50.501 [DEBUG] [Thread-170292] [transport.py] [_log()] userauth is OK
2026-04-11T13:02:50.502 [DEBUG] [Thread-170292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:02:50.502 [DEBUG] [Thread-170292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:02:50.502 [DEBUG] [Thread-170292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:02:50.502 [DEBUG] [Thread-170292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:02:50.520 [INFO] [Thread-170292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:02:50.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:02:50.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:02:51.363 [DEBUG] [Thread-170292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:02:51.363 [DEBUG] [Thread-170292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:02:51.411 [DEBUG] [Thread-170292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:02:51.411 [DEBUG] [Thread-170292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:02:51.421 [DEBUG] [Thread-170292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:02:51.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:02:51.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:02:51.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:02:51.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:02:51.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:02:51.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:02:51.462 [DEBUG] [Thread-170292] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:02:54.660 [DEBUG] [Thread-170294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:58.437 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:02:58.438 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:06.560 [DEBUG] [Thread-170295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:09.715 [DEBUG] [Thread-170296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:21.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:03:21.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:03:21.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:03:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 2, 40), 0.06404, 99.5027, 0.0, 13.4453, 14.2241, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:03:22.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:02:40
2026-04-11T13:03:23.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:03:23.354 [DEBUG] [Thread-170297] [transport.py] [_log()] starting thread (client mode): 0xae5b6200
2026-04-11T13:03:23.354 [DEBUG] [Thread-170297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:03:23.374 [DEBUG] [Thread-170297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:03:23.375 [INFO] [Thread-170297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:03:23.376 [DEBUG] [Thread-170297] [transport.py] [_log()] client lang: <none>
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] server lang: <none>
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] kex follows: False
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] Compression: none
2026-04-11T13:03:23.377 [DEBUG] [Thread-170297] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:03:23.387 [DEBUG] [Thread-170297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:03:23.388 [DEBUG] [Thread-170297] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:03:23.388 [DEBUG] [Thread-170297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:03:23.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:03:23.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:03:23.390 [DEBUG] [Thread-170297] [transport.py] [_log()] userauth is OK
2026-04-11T13:03:23.390 [DEBUG] [Thread-170297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:03:23.391 [DEBUG] [Thread-170297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:03:23.391 [DEBUG] [Thread-170297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:03:23.391 [DEBUG] [Thread-170297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:03:23.407 [INFO] [Thread-170297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:03:23.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:03:23.987 [DEBUG] [Thread-170297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:03:23.988 [DEBUG] [Thread-170297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:03:23.988 [DEBUG] [Thread-170297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:03:24.029 [DEBUG] [Thread-170297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:03:24.030 [DEBUG] [Thread-170297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:03:24.034 [DEBUG] [Thread-170297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:03:24.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:03:24.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:03:24.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:03:24.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:03:24.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:03:24.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:03:24.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:03:24.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:03:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:03:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.460535 -999.00  +13.40  21.49     97  +12.90 1 3 1 3 1   888    0 0.48 0.91 ----- 20.3 21.5 57.8 24.5 15.5 0.0 15.5 -1.0 15.3 -0.8 15.5 0.1
2026-04-11T13:03:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:03:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:03:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.460535
2026-04-11T13:03:24.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:03:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:03:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:03:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:03:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:03:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:02:40', tmtdew=0.06404, humidity=99.5027, cloud=0.0, wind=13.4453, temperature=14.2241, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:03:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:03:24.064 [DEBUG] [Thread-170297] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:03:24.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:03:24.171 [DEBUG] [Thread-170300] [transport.py] [_log()] starting thread (client mode): 0xa79b6c80
2026-04-11T13:03:24.171 [DEBUG] [Thread-170300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:03:24.187 [DEBUG] [Thread-170300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:03:24.187 [INFO] [Thread-170300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:03:24.194 [DEBUG] [Thread-170300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] client lang: <none>
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] server lang: <none>
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] kex follows: False
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:03:24.195 [DEBUG] [Thread-170300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:03:24.196 [DEBUG] [Thread-170300] [transport.py] [_log()] Compression: none
2026-04-11T13:03:24.196 [DEBUG] [Thread-170300] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:03:24.253 [DEBUG] [Thread-170300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:03:24.253 [DEBUG] [Thread-170300] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:03:24.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:03:24.255 [DEBUG] [Thread-170300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:03:24.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:03:24.308 [DEBUG] [Thread-170300] [transport.py] [_log()] userauth is OK
2026-04-11T13:03:24.308 [DEBUG] [Thread-170300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:03:24.308 [DEBUG] [Thread-170300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:03:24.308 [DEBUG] [Thread-170300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:03:24.308 [DEBUG] [Thread-170300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:03:24.322 [INFO] [Thread-170300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:03:24.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:03:24.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:03:24.755 [DEBUG] [Thread-170302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:25.168 [DEBUG] [Thread-170300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:03:25.168 [DEBUG] [Thread-170300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:03:25.216 [DEBUG] [Thread-170300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:03:25.217 [DEBUG] [Thread-170300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:03:25.228 [DEBUG] [Thread-170300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:03:25.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:03:25.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-04-11T13:03:25.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-04-11T13:03:25.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:03:25.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:03:25.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:03:25.266 [DEBUG] [Thread-170300] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:03:39.809 [DEBUG] [Thread-170303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:54.845 [DEBUG] [Thread-170304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:03:55.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:03:55.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-04-11T13:03:56.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 3, 15), 0.034625, 99.7348, 0.0, 13.658, 13.5294, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:03:56.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:03:15
2026-04-11T13:03:56.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:03:57.139 [DEBUG] [Thread-170305] [transport.py] [_log()] starting thread (client mode): 0xa795c910
2026-04-11T13:03:57.139 [DEBUG] [Thread-170305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:03:57.151 [DEBUG] [Thread-170305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:03:57.152 [INFO] [Thread-170305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:03:57.153 [DEBUG] [Thread-170305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] client lang: <none>
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] server lang: <none>
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] kex follows: False
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] Compression: none
2026-04-11T13:03:57.154 [DEBUG] [Thread-170305] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:03:57.162 [DEBUG] [Thread-170305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:03:57.162 [DEBUG] [Thread-170305] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:03:57.163 [DEBUG] [Thread-170305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:03:57.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:03:57.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:03:57.164 [DEBUG] [Thread-170305] [transport.py] [_log()] userauth is OK
2026-04-11T13:03:57.164 [DEBUG] [Thread-170305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:03:57.164 [DEBUG] [Thread-170305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:03:57.164 [DEBUG] [Thread-170305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:03:57.164 [DEBUG] [Thread-170305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:03:57.178 [INFO] [Thread-170305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:03:57.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:03:57.792 [DEBUG] [Thread-170305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:03:57.792 [DEBUG] [Thread-170305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:03:57.793 [DEBUG] [Thread-170305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:03:57.835 [DEBUG] [Thread-170305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:03:57.835 [DEBUG] [Thread-170305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:03:57.837 [DEBUG] [Thread-170305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:03:57.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:03:57.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:03:57.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:03:57.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:03:57.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:03:57.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:03:57.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:03:57.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:03:57.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:03:57.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.460882 -999.00  +13.40  20.94     97  +12.90 1 3 1 3 1   888    0 0.49 1.17 ----- 17.3 20.9 58.8 22.4 15.5 0.1 15.5 -0.8 15.2 -0.7 15.5 0.1
2026-04-11T13:03:57.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:03:57.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:03:57.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.460882
2026-04-11T13:03:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:03:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:03:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:03:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:03:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:03:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:03:15', tmtdew=0.034625, humidity=99.7348, cloud=0.0, wind=13.658, temperature=13.5294, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:03:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:03:57.850 [DEBUG] [Thread-170305] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:03:57.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:03:57.946 [DEBUG] [Thread-170308] [transport.py] [_log()] starting thread (client mode): 0xb0fe87c0
2026-04-11T13:03:57.946 [DEBUG] [Thread-170308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:03:57.960 [DEBUG] [Thread-170308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:03:57.960 [INFO] [Thread-170308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:03:57.967 [DEBUG] [Thread-170308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] client lang: <none>
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] server lang: <none>
2026-04-11T13:03:57.968 [DEBUG] [Thread-170308] [transport.py] [_log()] kex follows: False
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] Compression: none
2026-04-11T13:03:57.969 [DEBUG] [Thread-170308] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:03:58.028 [DEBUG] [Thread-170308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:03:58.029 [DEBUG] [Thread-170308] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:03:58.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:03:58.030 [DEBUG] [Thread-170308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:03:58.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:03:58.084 [DEBUG] [Thread-170308] [transport.py] [_log()] userauth is OK
2026-04-11T13:03:58.084 [DEBUG] [Thread-170308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:03:58.084 [DEBUG] [Thread-170308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:03:58.085 [DEBUG] [Thread-170308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:03:58.085 [DEBUG] [Thread-170308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:03:58.108 [INFO] [Thread-170308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:03:58.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:03:58.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:03:58.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:58.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:03:58.907 [DEBUG] [Thread-170308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:03:58.907 [DEBUG] [Thread-170308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:03:58.955 [DEBUG] [Thread-170308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:03:58.955 [DEBUG] [Thread-170308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:03:58.965 [DEBUG] [Thread-170308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:03:58.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:03:58.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-04-11T13:03:58.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-04-11T13:03:58.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:03:58.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:03:58.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:03:59.000 [DEBUG] [Thread-170308] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:04:06.609 [DEBUG] [Thread-170310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:04:09.883 [DEBUG] [Thread-170311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:04:24.939 [DEBUG] [Thread-170312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:04:29.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:04:29.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:04:29.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-04-11T13:04:30.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 3, 51), 0.07954, 99.4032, 0.0, 12.3516, 13.8263, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:04:30.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:03:51
2026-04-11T13:04:30.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:04:30.955 [DEBUG] [Thread-170313] [transport.py] [_log()] starting thread (client mode): 0xae5b5f60
2026-04-11T13:04:30.955 [DEBUG] [Thread-170313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:04:30.968 [DEBUG] [Thread-170313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:04:30.968 [INFO] [Thread-170313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] client lang: <none>
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] server lang: <none>
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] kex follows: False
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] Compression: none
2026-04-11T13:04:30.972 [DEBUG] [Thread-170313] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:04:30.988 [DEBUG] [Thread-170313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:04:30.989 [DEBUG] [Thread-170313] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:04:30.989 [DEBUG] [Thread-170313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:04:30.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:04:30.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:04:30.991 [DEBUG] [Thread-170313] [transport.py] [_log()] userauth is OK
2026-04-11T13:04:30.991 [DEBUG] [Thread-170313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:04:30.991 [DEBUG] [Thread-170313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:04:30.991 [DEBUG] [Thread-170313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:04:30.991 [DEBUG] [Thread-170313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:04:31.025 [INFO] [Thread-170313] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:04:31.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:04:31.645 [DEBUG] [Thread-170313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:04:31.645 [DEBUG] [Thread-170313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:04:31.645 [DEBUG] [Thread-170313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:04:31.686 [DEBUG] [Thread-170313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:04:31.686 [DEBUG] [Thread-170313] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:04:31.688 [DEBUG] [Thread-170313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:04:31.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:04:31.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:04:31.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:04:31.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:04:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:04:31.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:04:31.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:04:31.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.461230 -999.00  +13.40  17.60     97  +13.00 1 3 1 3 1   888    0 0.50 1.22 ----- 17.1 17.6 47.4 21.4 15.5 -0.2 15.6 -0.7 15.2 -0.5 15.5 0.2
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.461230
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:04:31.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:03:51', tmtdew=0.07954, humidity=99.4032, cloud=0.0, wind=12.3516, temperature=13.8263, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:04:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:04:31.704 [DEBUG] [Thread-170313] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:04:31.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:04:31.791 [DEBUG] [Thread-170316] [transport.py] [_log()] starting thread (client mode): 0xae5b6b30
2026-04-11T13:04:31.791 [DEBUG] [Thread-170316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:04:31.806 [DEBUG] [Thread-170316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:04:31.806 [INFO] [Thread-170316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] client lang: <none>
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] server lang: <none>
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] kex follows: False
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:04:31.814 [DEBUG] [Thread-170316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:04:31.815 [DEBUG] [Thread-170316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:04:31.815 [DEBUG] [Thread-170316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:04:31.815 [DEBUG] [Thread-170316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:04:31.815 [DEBUG] [Thread-170316] [transport.py] [_log()] Compression: none
2026-04-11T13:04:31.815 [DEBUG] [Thread-170316] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:04:31.871 [DEBUG] [Thread-170316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:04:31.872 [DEBUG] [Thread-170316] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:04:31.872 [DEBUG] [Thread-170316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:04:31.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:04:31.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:04:31.935 [DEBUG] [Thread-170316] [transport.py] [_log()] userauth is OK
2026-04-11T13:04:31.936 [DEBUG] [Thread-170316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:04:31.936 [DEBUG] [Thread-170316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:04:31.936 [DEBUG] [Thread-170316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:04:31.936 [DEBUG] [Thread-170316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:04:31.956 [INFO] [Thread-170316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:04:31.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:04:31.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:04:32.773 [DEBUG] [Thread-170316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:04:32.773 [DEBUG] [Thread-170316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:04:32.821 [DEBUG] [Thread-170316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:04:32.822 [DEBUG] [Thread-170316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:04:32.830 [DEBUG] [Thread-170316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:04:32.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:04:32.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:04:32.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-04-11T13:04:32.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:04:32.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:04:32.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:04:32.863 [DEBUG] [Thread-170316] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:04:39.978 [DEBUG] [Thread-170318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:04:55.028 [DEBUG] [Thread-170319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:04:58.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:04:58.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:02.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:05:02.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:05:02.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-04-11T13:05:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 4, 26), 0.08463, 99.7347, 0.0, 13.9932, 13.5794, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:05:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:04:26
2026-04-11T13:05:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:05:04.753 [DEBUG] [Thread-170320] [transport.py] [_log()] starting thread (client mode): 0xae5b0370
2026-04-11T13:05:04.753 [DEBUG] [Thread-170320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:05:04.774 [DEBUG] [Thread-170320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:05:04.774 [INFO] [Thread-170320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:05:04.776 [DEBUG] [Thread-170320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:05:04.776 [DEBUG] [Thread-170320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:05:04.776 [DEBUG] [Thread-170320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] client lang: <none>
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] server lang: <none>
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] kex follows: False
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:05:04.777 [DEBUG] [Thread-170320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:05:04.778 [DEBUG] [Thread-170320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:05:04.778 [DEBUG] [Thread-170320] [transport.py] [_log()] Compression: none
2026-04-11T13:05:04.778 [DEBUG] [Thread-170320] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:05:04.792 [DEBUG] [Thread-170320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:05:04.793 [DEBUG] [Thread-170320] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:05:04.793 [DEBUG] [Thread-170320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:05:04.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:05:04.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:05:04.795 [DEBUG] [Thread-170320] [transport.py] [_log()] userauth is OK
2026-04-11T13:05:04.796 [DEBUG] [Thread-170320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:05:04.796 [DEBUG] [Thread-170320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:05:04.796 [DEBUG] [Thread-170320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:05:04.796 [DEBUG] [Thread-170320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:05:04.822 [INFO] [Thread-170320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:05:04.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:05:06.664 [DEBUG] [Thread-170322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:10.065 [DEBUG] [Thread-170323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:10.658 [DEBUG] [Thread-170320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:05:10.658 [DEBUG] [Thread-170320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:05:10.659 [DEBUG] [Thread-170320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:05:10.701 [DEBUG] [Thread-170320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:05:10.701 [DEBUG] [Thread-170320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:05:10.706 [DEBUG] [Thread-170320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:05:10.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:05:10.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:05:10.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:05:10.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:05:10.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:05:10.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:05:10.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:05:10.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:05:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:05:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.461577 -999.00  +13.50  14.71     97  +13.00 1 3 1 3 1   888    0 0.49 1.18 ----- 12.0 14.7 50.2 19.6 15.5 -0.1 15.5 -0.3 15.2 -0.8 15.5 0.3
2026-04-11T13:05:10.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:05:10.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:05:10.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.461577
2026-04-11T13:05:10.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:05:10.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:05:10.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:05:10.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:05:10.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:05:10.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:04:26', tmtdew=0.08463, humidity=99.7347, cloud=0.0, wind=13.9932, temperature=13.5794, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:04:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:05:10.802 [DEBUG] [Thread-170320] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:05:10.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:05:10.897 [DEBUG] [Thread-170325] [transport.py] [_log()] starting thread (client mode): 0xae5b0040
2026-04-11T13:05:10.897 [DEBUG] [Thread-170325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:05:10.912 [DEBUG] [Thread-170325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:05:10.912 [INFO] [Thread-170325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:05:10.920 [DEBUG] [Thread-170325] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:05:10.920 [DEBUG] [Thread-170325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:05:10.920 [DEBUG] [Thread-170325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:05:10.920 [DEBUG] [Thread-170325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:10.920 [DEBUG] [Thread-170325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:10.920 [DEBUG] [Thread-170325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] client lang: <none>
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] server lang: <none>
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] kex follows: False
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:05:10.921 [DEBUG] [Thread-170325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:05:10.922 [DEBUG] [Thread-170325] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:05:10.922 [DEBUG] [Thread-170325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:05:10.922 [DEBUG] [Thread-170325] [transport.py] [_log()] Compression: none
2026-04-11T13:05:10.922 [DEBUG] [Thread-170325] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:05:10.981 [DEBUG] [Thread-170325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:05:10.982 [DEBUG] [Thread-170325] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:05:10.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:05:10.984 [DEBUG] [Thread-170325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:05:10.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:05:11.040 [DEBUG] [Thread-170325] [transport.py] [_log()] userauth is OK
2026-04-11T13:05:11.041 [DEBUG] [Thread-170325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:05:11.041 [DEBUG] [Thread-170325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:05:11.042 [DEBUG] [Thread-170325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:05:11.042 [DEBUG] [Thread-170325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:05:11.061 [INFO] [Thread-170325] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:05:11.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:05:11.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:05:11.881 [DEBUG] [Thread-170325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:05:11.881 [DEBUG] [Thread-170325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:05:11.929 [DEBUG] [Thread-170325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:05:11.929 [DEBUG] [Thread-170325] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:05:11.939 [DEBUG] [Thread-170325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:05:11.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:05:11.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-04-11T13:05:11.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-04-11T13:05:11.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:05:11.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:05:11.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:05:11.976 [DEBUG] [Thread-170325] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:05:25.104 [DEBUG] [Thread-170327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:40.160 [DEBUG] [Thread-170328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:41.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:05:41.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:05:42.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-04-11T13:05:43.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 5, 2), 0.08463, 99.7347, 0.0, 12.1234, 13.5629, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:05:43.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:05:02
2026-04-11T13:05:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:05:44.032 [DEBUG] [Thread-170329] [transport.py] [_log()] starting thread (client mode): 0xa79b4310
2026-04-11T13:05:44.032 [DEBUG] [Thread-170329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:05:44.053 [DEBUG] [Thread-170329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:05:44.054 [INFO] [Thread-170329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:05:44.056 [DEBUG] [Thread-170329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:05:44.056 [DEBUG] [Thread-170329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:05:44.056 [DEBUG] [Thread-170329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:05:44.056 [DEBUG] [Thread-170329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:44.056 [DEBUG] [Thread-170329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] client lang: <none>
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] server lang: <none>
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] kex follows: False
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:05:44.057 [DEBUG] [Thread-170329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:05:44.058 [DEBUG] [Thread-170329] [transport.py] [_log()] Compression: none
2026-04-11T13:05:44.058 [DEBUG] [Thread-170329] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:05:44.077 [DEBUG] [Thread-170329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:05:44.077 [DEBUG] [Thread-170329] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:05:44.078 [DEBUG] [Thread-170329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:05:44.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:05:44.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:05:44.081 [DEBUG] [Thread-170329] [transport.py] [_log()] userauth is OK
2026-04-11T13:05:44.081 [DEBUG] [Thread-170329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:05:44.081 [DEBUG] [Thread-170329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:05:44.081 [DEBUG] [Thread-170329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:05:44.082 [DEBUG] [Thread-170329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:05:44.118 [INFO] [Thread-170329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:05:44.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:05:46.175 [DEBUG] [Thread-170329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:05:46.175 [DEBUG] [Thread-170329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:05:46.175 [DEBUG] [Thread-170329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:05:46.216 [DEBUG] [Thread-170329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:05:46.216 [DEBUG] [Thread-170329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:05:46.220 [DEBUG] [Thread-170329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:05:46.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:05:46.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:05:46.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:05:46.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:05:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:05:46.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:05:46.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:05:46.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:05:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:05:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.461577 -999.00  +13.50  14.71     97  +13.00 1 3 1 3 1   888    0 0.49 1.18 ----- 12.0 14.7 50.2 19.6 15.5 -0.1 15.5 -0.3 15.2 -0.8 15.5 0.3
2026-04-11T13:05:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:05:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:05:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.461577
2026-04-11T13:05:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:05:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:05:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:05:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:05:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:05:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:05:02', tmtdew=0.08463, humidity=99.7347, cloud=0.0, wind=12.1234, temperature=13.5629, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:04:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:05:46.251 [DEBUG] [Thread-170329] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:05:46.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:05:46.345 [DEBUG] [Thread-170332] [transport.py] [_log()] starting thread (client mode): 0xae5b6410
2026-04-11T13:05:46.346 [DEBUG] [Thread-170332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:05:46.360 [DEBUG] [Thread-170332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:05:46.361 [INFO] [Thread-170332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:05:46.368 [DEBUG] [Thread-170332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:05:46.368 [DEBUG] [Thread-170332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:05:46.368 [DEBUG] [Thread-170332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] client lang: <none>
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] server lang: <none>
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] kex follows: False
2026-04-11T13:05:46.369 [DEBUG] [Thread-170332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:05:46.370 [DEBUG] [Thread-170332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:05:46.370 [DEBUG] [Thread-170332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:05:46.370 [DEBUG] [Thread-170332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:05:46.370 [DEBUG] [Thread-170332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:05:46.370 [DEBUG] [Thread-170332] [transport.py] [_log()] Compression: none
2026-04-11T13:05:46.370 [DEBUG] [Thread-170332] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:05:46.428 [DEBUG] [Thread-170332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:05:46.428 [DEBUG] [Thread-170332] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:05:46.429 [DEBUG] [Thread-170332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:05:46.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:05:46.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:05:46.484 [DEBUG] [Thread-170332] [transport.py] [_log()] userauth is OK
2026-04-11T13:05:46.484 [DEBUG] [Thread-170332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:05:46.484 [DEBUG] [Thread-170332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:05:46.484 [DEBUG] [Thread-170332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:05:46.485 [DEBUG] [Thread-170332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:05:46.503 [INFO] [Thread-170332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:05:46.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:05:46.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:05:47.354 [DEBUG] [Thread-170332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:05:47.354 [DEBUG] [Thread-170332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:05:47.402 [DEBUG] [Thread-170332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:05:47.402 [DEBUG] [Thread-170332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:05:47.411 [DEBUG] [Thread-170332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:05:47.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:05:47.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-04-11T13:05: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') -> 00000000
2026-04-11T13:05:47.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:05:47.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:05:47.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:05:47.448 [DEBUG] [Thread-170332] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:05:55.200 [DEBUG] [Thread-170334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:58.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:05:58.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:06.719 [DEBUG] [Thread-170335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:10.254 [DEBUG] [Thread-170336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:06:17.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:06:17.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-04-11T13:06:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 5, 37), 0.06926, 99.4695, 0.0, 11.646, 13.9589, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:06:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:05:37
2026-04-11T13:06:19.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:06:19.348 [DEBUG] [Thread-170337] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-11T13:06:19.348 [DEBUG] [Thread-170337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:06:19.370 [DEBUG] [Thread-170337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:06:19.370 [INFO] [Thread-170337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:06:19.374 [DEBUG] [Thread-170337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:06:19.374 [DEBUG] [Thread-170337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:06:19.374 [DEBUG] [Thread-170337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] client lang: <none>
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] server lang: <none>
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] kex follows: False
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:06:19.375 [DEBUG] [Thread-170337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:06:19.376 [DEBUG] [Thread-170337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:06:19.376 [DEBUG] [Thread-170337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:06:19.376 [DEBUG] [Thread-170337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:06:19.376 [DEBUG] [Thread-170337] [transport.py] [_log()] Compression: none
2026-04-11T13:06:19.376 [DEBUG] [Thread-170337] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:06:19.394 [DEBUG] [Thread-170337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:06:19.394 [DEBUG] [Thread-170337] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:06:19.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:06:19.395 [DEBUG] [Thread-170337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:06:19.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:06:19.398 [DEBUG] [Thread-170337] [transport.py] [_log()] userauth is OK
2026-04-11T13:06:19.398 [DEBUG] [Thread-170337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:06:19.399 [DEBUG] [Thread-170337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:06:19.399 [DEBUG] [Thread-170337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:06:19.399 [DEBUG] [Thread-170337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:06:19.424 [INFO] [Thread-170337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:06:19.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:06:20.266 [DEBUG] [Thread-170337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:06:20.266 [DEBUG] [Thread-170337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:06:20.267 [DEBUG] [Thread-170337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:06:20.308 [DEBUG] [Thread-170337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:06:20.309 [DEBUG] [Thread-170337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:06:20.313 [DEBUG] [Thread-170337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:06:20.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:06:20.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:06:20.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:06:20.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:06:20.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:06:20.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:06:20.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:06:20.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:06:20.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:06:20.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.462271 -999.00  +13.60  14.61     97  +13.20 1 3 1 3 1   888    0 0.49 1.04 ----- 12.1 14.6 54.6 16.4 15.6 0.4 15.6 -0.3 15.3 -0.1 15.6 0.7
2026-04-11T13:06:20.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:06:20.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:06:20.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.462271
2026-04-11T13:06:20.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:06:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:06:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:06:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:06:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:06:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:05:37', tmtdew=0.06926, humidity=99.4695, cloud=0.0, wind=11.646, temperature=13.9589, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:05:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:06:20.350 [DEBUG] [Thread-170337] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:06:20.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:06:20.448 [DEBUG] [Thread-170340] [transport.py] [_log()] starting thread (client mode): 0xae5b59f0
2026-04-11T13:06:20.448 [DEBUG] [Thread-170340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:06:20.467 [DEBUG] [Thread-170340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:06:20.467 [INFO] [Thread-170340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:06:20.475 [DEBUG] [Thread-170340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:06:20.476 [DEBUG] [Thread-170340] [transport.py] [_log()] client lang: <none>
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] server lang: <none>
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] kex follows: False
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:06:20.477 [DEBUG] [Thread-170340] [transport.py] [_log()] Compression: none
2026-04-11T13:06:20.478 [DEBUG] [Thread-170340] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:06:20.537 [DEBUG] [Thread-170340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:06:20.538 [DEBUG] [Thread-170340] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:06:20.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:06:20.539 [DEBUG] [Thread-170340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:06:20.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:06:20.596 [DEBUG] [Thread-170340] [transport.py] [_log()] userauth is OK
2026-04-11T13:06:20.596 [DEBUG] [Thread-170340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:06:20.596 [DEBUG] [Thread-170340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:06:20.597 [DEBUG] [Thread-170340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:06:20.597 [DEBUG] [Thread-170340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:06:20.615 [INFO] [Thread-170340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:06:20.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:06:20.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:06:21.452 [DEBUG] [Thread-170340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:06:21.452 [DEBUG] [Thread-170340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:06:21.500 [DEBUG] [Thread-170340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:06:21.500 [DEBUG] [Thread-170340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:06:21.509 [DEBUG] [Thread-170340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:06:21.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:06:21.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:06:21.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:06:21.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:06:21.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:06:21.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:06:21.544 [DEBUG] [Thread-170340] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:06:25.291 [DEBUG] [Thread-170342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:40.342 [DEBUG] [Thread-170343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:06:51.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:06:51.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-04-11T13:06:52.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 6, 13), 0.089765, 99.7016, 0.0, 11.6471, 13.5794, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:06:52.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:06:13
2026-04-11T13:06:53.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:06:53.533 [DEBUG] [Thread-170344] [transport.py] [_log()] starting thread (client mode): 0xae5b1e10
2026-04-11T13:06:53.533 [DEBUG] [Thread-170344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:06:53.544 [DEBUG] [Thread-170344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:06:53.544 [INFO] [Thread-170344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] client lang: <none>
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] server lang: <none>
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] kex follows: False
2026-04-11T13:06:53.547 [DEBUG] [Thread-170344] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:06:53.548 [DEBUG] [Thread-170344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:06:53.548 [DEBUG] [Thread-170344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:06:53.548 [DEBUG] [Thread-170344] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:06:53.548 [DEBUG] [Thread-170344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:06:53.548 [DEBUG] [Thread-170344] [transport.py] [_log()] Compression: none
2026-04-11T13:06:53.548 [DEBUG] [Thread-170344] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:06:53.568 [DEBUG] [Thread-170344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:06:53.568 [DEBUG] [Thread-170344] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:06:53.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:06:53.569 [DEBUG] [Thread-170344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:06:53.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:06:53.571 [DEBUG] [Thread-170344] [transport.py] [_log()] userauth is OK
2026-04-11T13:06:53.571 [DEBUG] [Thread-170344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:06:53.571 [DEBUG] [Thread-170344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:06:53.571 [DEBUG] [Thread-170344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:06:53.571 [DEBUG] [Thread-170344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:06:53.607 [INFO] [Thread-170344] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:06:53.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:06:54.420 [DEBUG] [Thread-170344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:06:54.421 [DEBUG] [Thread-170344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:06:54.421 [DEBUG] [Thread-170344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:06:54.463 [DEBUG] [Thread-170344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:06:54.463 [DEBUG] [Thread-170344] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:06:54.469 [DEBUG] [Thread-170344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:06:54.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:06:54.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:06:54.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:06:54.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:06:54.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:06:54.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:06:54.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:06:54.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:06:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:06:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.462618 -999.00  +13.70  11.35     97  +13.30 1 3 1 3 1   888    0 0.48 0.87 ----- 13.9 11.3 47.0 14.7 15.8 0.7 15.7 0.2 15.4 0.5 15.7 1.1
2026-04-11T13:06:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:06:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:06:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.462618
2026-04-11T13:06:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:06:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:06:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:06:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:06:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:06:54.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:06:13', tmtdew=0.089765, humidity=99.7016, cloud=0.0, wind=11.6471, temperature=13.5794, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:06:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:06:54.494 [DEBUG] [Thread-170344] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:06:54.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:06:54.588 [DEBUG] [Thread-170347] [transport.py] [_log()] starting thread (client mode): 0xae5b7490
2026-04-11T13:06:54.588 [DEBUG] [Thread-170347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:06:54.604 [DEBUG] [Thread-170347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:06:54.604 [INFO] [Thread-170347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:06:54.611 [DEBUG] [Thread-170347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] client lang: <none>
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] server lang: <none>
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] kex follows: False
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:06:54.612 [DEBUG] [Thread-170347] [transport.py] [_log()] Compression: none
2026-04-11T13:06:54.613 [DEBUG] [Thread-170347] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:06:54.671 [DEBUG] [Thread-170347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:06:54.671 [DEBUG] [Thread-170347] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:06:54.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:06:54.672 [DEBUG] [Thread-170347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:06:54.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:06:54.727 [DEBUG] [Thread-170347] [transport.py] [_log()] userauth is OK
2026-04-11T13:06:54.727 [DEBUG] [Thread-170347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:06:54.727 [DEBUG] [Thread-170347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:06:54.727 [DEBUG] [Thread-170347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:06:54.727 [DEBUG] [Thread-170347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:06:54.745 [INFO] [Thread-170347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:06:54.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:06:54.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:06:55.377 [DEBUG] [Thread-170349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:55.578 [DEBUG] [Thread-170347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:06:55.578 [DEBUG] [Thread-170347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:06:55.626 [DEBUG] [Thread-170347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:06:55.626 [DEBUG] [Thread-170347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:06:55.635 [DEBUG] [Thread-170347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:06:55.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:06:55.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-04-11T13:06:55.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:06:55.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:06:55.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:06:55.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:06:55.672 [DEBUG] [Thread-170347] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:06:59.005 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:06:59.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:06.765 [DEBUG] [Thread-170350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:10.427 [DEBUG] [Thread-170351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:25.466 [DEBUG] [Thread-170352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:25.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:07:25.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:07:25.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-04-11T13:07:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 6, 49), 0.06407, 99.5026, 0.0, 13.8334, 14.1247, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:07:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:06:49
2026-04-11T13:07:27.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:07:27.652 [DEBUG] [Thread-170353] [transport.py] [_log()] starting thread (client mode): 0xb0f42290
2026-04-11T13:07:27.652 [DEBUG] [Thread-170353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:07:27.675 [DEBUG] [Thread-170353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:07:27.675 [INFO] [Thread-170353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:07:27.679 [DEBUG] [Thread-170353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] client lang: <none>
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] server lang: <none>
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] kex follows: False
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] Compression: none
2026-04-11T13:07:27.680 [DEBUG] [Thread-170353] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:07:27.698 [DEBUG] [Thread-170353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:07:27.698 [DEBUG] [Thread-170353] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:07:27.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:07:27.699 [DEBUG] [Thread-170353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:07:27.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:07:27.700 [DEBUG] [Thread-170353] [transport.py] [_log()] userauth is OK
2026-04-11T13:07:27.700 [DEBUG] [Thread-170353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:07:27.700 [DEBUG] [Thread-170353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:07:27.700 [DEBUG] [Thread-170353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:07:27.700 [DEBUG] [Thread-170353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:07:27.734 [INFO] [Thread-170353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:07:27.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:07:28.313 [DEBUG] [Thread-170353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:07:28.313 [DEBUG] [Thread-170353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:07:28.314 [DEBUG] [Thread-170353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:07:28.354 [DEBUG] [Thread-170353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:07:28.354 [DEBUG] [Thread-170353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:07:28.358 [DEBUG] [Thread-170353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:07:28.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:07:28.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:07:28.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:07:28.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:07:28.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:07:28.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:07:28.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:07:28.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:07:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:07:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.463313 -999.00  +13.60  13.39     97  +13.10 1 3 1 3 1   888    0 0.49 1.07 ----- 12.3 13.4 43.6 16.9 15.8 0.4 15.8 0.1 15.5 0.1 15.8 0.8
2026-04-11T13:07:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:07:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:07:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.463313
2026-04-11T13:07:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:07:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:07:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:07:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:07:28.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:07:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:06:49', tmtdew=0.06407, humidity=99.5026, cloud=0.0, wind=13.8334, temperature=14.1247, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:07:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:07:28.386 [DEBUG] [Thread-170353] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:07:28.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:07:28.479 [DEBUG] [Thread-170356] [transport.py] [_log()] starting thread (client mode): 0xae5b2ec0
2026-04-11T13:07:28.479 [DEBUG] [Thread-170356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:07:28.495 [DEBUG] [Thread-170356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:07:28.495 [INFO] [Thread-170356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:07:28.503 [DEBUG] [Thread-170356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:07:28.504 [DEBUG] [Thread-170356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] client lang: <none>
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] server lang: <none>
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] kex follows: False
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:07:28.505 [DEBUG] [Thread-170356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:07:28.506 [DEBUG] [Thread-170356] [transport.py] [_log()] Compression: none
2026-04-11T13:07:28.506 [DEBUG] [Thread-170356] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:07:28.565 [DEBUG] [Thread-170356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:07:28.565 [DEBUG] [Thread-170356] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:07:28.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:07:28.566 [DEBUG] [Thread-170356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:07:28.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:07:28.624 [DEBUG] [Thread-170356] [transport.py] [_log()] userauth is OK
2026-04-11T13:07:28.625 [DEBUG] [Thread-170356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:07:28.625 [DEBUG] [Thread-170356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:07:28.625 [DEBUG] [Thread-170356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:07:28.625 [DEBUG] [Thread-170356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:07:28.643 [INFO] [Thread-170356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:07:28.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:07:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:07:29.498 [DEBUG] [Thread-170356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:07:29.499 [DEBUG] [Thread-170356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:07:29.547 [DEBUG] [Thread-170356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:07:29.547 [DEBUG] [Thread-170356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:07:29.557 [DEBUG] [Thread-170356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:07:29.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:07:29.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-04-11T13:07:29.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:07:29.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:07:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:07:29.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:07:29.594 [DEBUG] [Thread-170356] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:07:40.504 [DEBUG] [Thread-170358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:55.569 [DEBUG] [Thread-170359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:59.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:59.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:07:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:07:59.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:07:59.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:08:00.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 7, 24), 0.08203, 99.7513, 0.0, 14.2049, 13.6955, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:08:00.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:07:24
2026-04-11T13:08:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:08:01.390 [DEBUG] [Thread-170360] [transport.py] [_log()] starting thread (client mode): 0xae5b54e0
2026-04-11T13:08:01.390 [DEBUG] [Thread-170360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:08:01.409 [DEBUG] [Thread-170360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:08:01.409 [INFO] [Thread-170360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:08:01.412 [DEBUG] [Thread-170360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:01.413 [DEBUG] [Thread-170360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] client lang: <none>
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] server lang: <none>
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] kex follows: False
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] Compression: none
2026-04-11T13:08:01.414 [DEBUG] [Thread-170360] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:08:01.424 [DEBUG] [Thread-170360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:08:01.425 [DEBUG] [Thread-170360] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:08:01.425 [DEBUG] [Thread-170360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:08:01.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:08:01.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:08:01.427 [DEBUG] [Thread-170360] [transport.py] [_log()] userauth is OK
2026-04-11T13:08:01.428 [DEBUG] [Thread-170360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:08:01.428 [DEBUG] [Thread-170360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:08:01.428 [DEBUG] [Thread-170360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:08:01.428 [DEBUG] [Thread-170360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:08:01.452 [INFO] [Thread-170360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:08:01.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:08:02.054 [DEBUG] [Thread-170360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:08:02.054 [DEBUG] [Thread-170360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:08:02.055 [DEBUG] [Thread-170360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:08:02.095 [DEBUG] [Thread-170360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:08:02.095 [DEBUG] [Thread-170360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:08:02.099 [DEBUG] [Thread-170360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:08:02.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:08:02.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:08:02.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:08:02.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:08:02.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:08:02.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:08:02.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:08:02.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:08:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:08:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.463660 -999.00  +13.60  12.66     97  +13.20 1 3 1 3 1   888    0 0.48 0.98 ----- 15.5 12.7 40.2 17.4 15.9 0.4 15.8 0.0 15.6 0.7 15.8 1.1
2026-04-11T13:08:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:08:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:08:02.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.463660
2026-04-11T13:08:02.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:08:02.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:08:02.124 [DEBUG] [Thread-170360] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:08:02.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:08:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:08:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:08:02.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:07:24', tmtdew=0.08203, humidity=99.7513, cloud=0.0, wind=14.2049, temperature=13.6955, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:07:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:08:02.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:08:02.215 [DEBUG] [Thread-170363] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-11T13:08:02.215 [DEBUG] [Thread-170363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:08:02.230 [DEBUG] [Thread-170363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:08:02.230 [INFO] [Thread-170363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] client lang: <none>
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] server lang: <none>
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] kex follows: False
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:08:02.238 [DEBUG] [Thread-170363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:08:02.239 [DEBUG] [Thread-170363] [transport.py] [_log()] Compression: none
2026-04-11T13:08:02.239 [DEBUG] [Thread-170363] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:08:02.295 [DEBUG] [Thread-170363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:08:02.295 [DEBUG] [Thread-170363] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:08:02.295 [DEBUG] [Thread-170363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:08:02.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:08:02.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:08:02.351 [DEBUG] [Thread-170363] [transport.py] [_log()] userauth is OK
2026-04-11T13:08:02.351 [DEBUG] [Thread-170363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:08:02.351 [DEBUG] [Thread-170363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:08:02.351 [DEBUG] [Thread-170363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:08:02.351 [DEBUG] [Thread-170363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:08:02.370 [INFO] [Thread-170363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:08:02.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:08:02.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:08:03.202 [DEBUG] [Thread-170363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:08:03.202 [DEBUG] [Thread-170363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:08:03.250 [DEBUG] [Thread-170363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:08:03.250 [DEBUG] [Thread-170363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:08:03.259 [DEBUG] [Thread-170363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:08:03.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:08:03.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-04-11T13:08:03.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-04-11T13:08:03.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:08:03.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:08:03.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:08:03.296 [DEBUG] [Thread-170363] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:08:06.798 [DEBUG] [Thread-170365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:08:10.606 [DEBUG] [Thread-170366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:08:25.673 [DEBUG] [Thread-170367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:08:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:08:33.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:08:33.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-04-11T13:08:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 7, 24), 0.03203, 99.7513, 0.0, 14.2049, 13.6955, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:08:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:07:24
2026-04-11T13:08:34.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:08:35.137 [DEBUG] [Thread-170368] [transport.py] [_log()] starting thread (client mode): 0xae563640
2026-04-11T13:08:35.137 [DEBUG] [Thread-170368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:08:35.157 [DEBUG] [Thread-170368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:08:35.157 [INFO] [Thread-170368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:08:35.158 [DEBUG] [Thread-170368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] client lang: <none>
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] server lang: <none>
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] kex follows: False
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] Compression: none
2026-04-11T13:08:35.159 [DEBUG] [Thread-170368] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:08:35.170 [DEBUG] [Thread-170368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:08:35.170 [DEBUG] [Thread-170368] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:08:35.171 [DEBUG] [Thread-170368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:08:35.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:08:35.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:08:35.172 [DEBUG] [Thread-170368] [transport.py] [_log()] userauth is OK
2026-04-11T13:08:35.173 [DEBUG] [Thread-170368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:08:35.173 [DEBUG] [Thread-170368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:08:35.173 [DEBUG] [Thread-170368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:08:35.173 [DEBUG] [Thread-170368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:08:35.188 [INFO] [Thread-170368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:08:35.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:08:35.780 [DEBUG] [Thread-170368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:08:35.780 [DEBUG] [Thread-170368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:08:35.780 [DEBUG] [Thread-170368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:08:35.821 [DEBUG] [Thread-170368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:08:35.821 [DEBUG] [Thread-170368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:08:35.824 [DEBUG] [Thread-170368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:08:35.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:08:35.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:08:35.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:08:35.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:08:35.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:08:35.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:08:35.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:08:35.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:08:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:08:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.464007 -999.00  +13.70  12.05     97  +13.20 1 3 1 3 1   888    0 0.48 0.97 ----- 14.8 12.1 25.7 16.8 15.9 0.2 15.9 0.1 15.6 -0.1 15.8 1.0
2026-04-11T13:08:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:08:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:08:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.464007
2026-04-11T13:08:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:08:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:08:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:08:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:08:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:08:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:07:24', tmtdew=0.03203, humidity=99.7513, cloud=0.0, wind=14.2049, temperature=13.6955, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:08:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:08:35.854 [DEBUG] [Thread-170368] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:08:35.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:08:35.948 [DEBUG] [Thread-170371] [transport.py] [_log()] starting thread (client mode): 0xa79b7430
2026-04-11T13:08:35.948 [DEBUG] [Thread-170371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:08:35.963 [DEBUG] [Thread-170371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:08:35.963 [INFO] [Thread-170371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] client lang: <none>
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] server lang: <none>
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] kex follows: False
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] Compression: none
2026-04-11T13:08:35.970 [DEBUG] [Thread-170371] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:08:36.027 [DEBUG] [Thread-170371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:08:36.027 [DEBUG] [Thread-170371] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:08:36.028 [DEBUG] [Thread-170371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:08:36.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:08:36.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:08:36.083 [DEBUG] [Thread-170371] [transport.py] [_log()] userauth is OK
2026-04-11T13:08:36.084 [DEBUG] [Thread-170371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:08:36.084 [DEBUG] [Thread-170371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:08:36.084 [DEBUG] [Thread-170371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:08:36.084 [DEBUG] [Thread-170371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:08:36.103 [INFO] [Thread-170371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:08:36.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:08:36.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:08:36.914 [DEBUG] [Thread-170371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:08:36.914 [DEBUG] [Thread-170371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:08:36.965 [DEBUG] [Thread-170371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:08:36.965 [DEBUG] [Thread-170371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:08:36.975 [DEBUG] [Thread-170371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:08:36.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:08:36.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-04-11T13:08:36.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-04-11T13:08:37.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:08:37.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:08:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:08:37.012 [DEBUG] [Thread-170371] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:08:40.709 [DEBUG] [Thread-170373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:08:55.764 [DEBUG] [Thread-170374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:08:59.289 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:08:59.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:06.837 [DEBUG] [Thread-170375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:09:07.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:09:07.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-04-11T13:09:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 8, 36), 0.0589, 99.5358, 0.0, 18.3492, 14.2573, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:09:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:08:36
2026-04-11T13:09:08.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:09:08.905 [DEBUG] [Thread-170376] [transport.py] [_log()] starting thread (client mode): 0xa79b5630
2026-04-11T13:09:08.905 [DEBUG] [Thread-170376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:09:08.921 [DEBUG] [Thread-170376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:09:08.921 [INFO] [Thread-170376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] client lang: <none>
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] server lang: <none>
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] kex follows: False
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] Compression: none
2026-04-11T13:09:08.923 [DEBUG] [Thread-170376] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:09:08.931 [DEBUG] [Thread-170376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:09:08.931 [DEBUG] [Thread-170376] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:09:08.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:09:08.931 [DEBUG] [Thread-170376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:09:08.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:09:08.932 [DEBUG] [Thread-170376] [transport.py] [_log()] userauth is OK
2026-04-11T13:09:08.933 [DEBUG] [Thread-170376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:09:08.933 [DEBUG] [Thread-170376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:09:08.933 [DEBUG] [Thread-170376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:09:08.933 [DEBUG] [Thread-170376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:09:08.942 [INFO] [Thread-170376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:09:08.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:09:09.529 [DEBUG] [Thread-170376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:09:09.529 [DEBUG] [Thread-170376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:09:09.529 [DEBUG] [Thread-170376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:09:09.571 [DEBUG] [Thread-170376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:09:09.571 [DEBUG] [Thread-170376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:09:09.574 [DEBUG] [Thread-170376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:09:09.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:09:09.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:09:09.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:09:09.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:09:09.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:09:09.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:09:09.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:09:09.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:09:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:09:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.464355 -999.00  +13.80  11.76     97  +13.30 1 3 1 3 1   888    0 0.49 1.12 ----- 11.2 11.8 27.2 15.7 16.0 0.3 16.0 0.0 15.7 0.4 15.8 -1.2
2026-04-11T13:09:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:09:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:09:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.464355
2026-04-11T13:09:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:09:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:09:09.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:09:09.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:09:09.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:09:09.591 [DEBUG] [Thread-170376] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:09:09.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:08:36', tmtdew=0.0589, humidity=99.5358, cloud=0.0, wind=18.3492, temperature=14.2573, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:08:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:09:09.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:09:09.696 [DEBUG] [Thread-170379] [transport.py] [_log()] starting thread (client mode): 0xae5e4040
2026-04-11T13:09:09.696 [DEBUG] [Thread-170379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:09:09.713 [DEBUG] [Thread-170379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:09:09.713 [INFO] [Thread-170379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:09:09.721 [DEBUG] [Thread-170379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:09:09.721 [DEBUG] [Thread-170379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:09:09.722 [DEBUG] [Thread-170379] [transport.py] [_log()] client lang: <none>
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] server lang: <none>
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] kex follows: False
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] Compression: none
2026-04-11T13:09:09.723 [DEBUG] [Thread-170379] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:09:09.780 [DEBUG] [Thread-170379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:09:09.780 [DEBUG] [Thread-170379] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:09:09.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:09:09.781 [DEBUG] [Thread-170379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:09:09.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:09:09.839 [DEBUG] [Thread-170379] [transport.py] [_log()] userauth is OK
2026-04-11T13:09:09.839 [DEBUG] [Thread-170379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:09:09.840 [DEBUG] [Thread-170379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:09:09.840 [DEBUG] [Thread-170379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:09:09.840 [DEBUG] [Thread-170379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:09:09.863 [INFO] [Thread-170379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:09:09.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:09:09.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:09:10.700 [DEBUG] [Thread-170379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:09:10.701 [DEBUG] [Thread-170379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:09:10.749 [DEBUG] [Thread-170379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:09:10.749 [DEBUG] [Thread-170379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:09:10.758 [DEBUG] [Thread-170379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:09:10.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:09:10.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-04-11T13:09:10.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-04-11T13:09:10.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:09:10.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:09:10.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:09:10.795 [DEBUG] [Thread-170379] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:09:10.798 [DEBUG] [Thread-170381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:25.851 [DEBUG] [Thread-170382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:40.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:09:40.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:09:40.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-04-11T13:09:40.888 [DEBUG] [Thread-170383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 9, 12), 0.044905, 99.6684, 0.0, 12.7224, 13.5463, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:09:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:09:12
2026-04-11T13:09:42.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:09:42.619 [DEBUG] [Thread-170384] [transport.py] [_log()] starting thread (client mode): 0xae5b7d60
2026-04-11T13:09:42.619 [DEBUG] [Thread-170384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:09:42.639 [DEBUG] [Thread-170384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:09:42.640 [INFO] [Thread-170384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] client lang: <none>
2026-04-11T13:09:42.642 [DEBUG] [Thread-170384] [transport.py] [_log()] server lang: <none>
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] kex follows: False
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] Compression: none
2026-04-11T13:09:42.643 [DEBUG] [Thread-170384] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:09:42.662 [DEBUG] [Thread-170384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:09:42.663 [DEBUG] [Thread-170384] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:09:42.663 [DEBUG] [Thread-170384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:09:42.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:09:42.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:09:42.668 [DEBUG] [Thread-170384] [transport.py] [_log()] userauth is OK
2026-04-11T13:09:42.668 [DEBUG] [Thread-170384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:09:42.668 [DEBUG] [Thread-170384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:09:42.668 [DEBUG] [Thread-170384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:09:42.669 [DEBUG] [Thread-170384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:09:42.692 [INFO] [Thread-170384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:09:42.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:09:43.355 [DEBUG] [Thread-170384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:09:43.355 [DEBUG] [Thread-170384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:09:43.356 [DEBUG] [Thread-170384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:09:43.396 [DEBUG] [Thread-170384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:09:43.397 [DEBUG] [Thread-170384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:09:43.400 [DEBUG] [Thread-170384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:09:43.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:09:43.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:09:43.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:09:43.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:09:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:09:43.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:09:43.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:09:43.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:09:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:09:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.464702 -999.00  +13.80  12.97     97  +13.40 1 3 1 3 1   888    0 0.48 0.82 ----- 15.1 13.0 18.6 15.8 16.1 0.5 16.0 -0.1 15.8 0.6 15.9 0.8
2026-04-11T13:09:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:09:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:09:43.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.464702
2026-04-11T13:09:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:09:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:09:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:09:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:09:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:09:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:09:12', tmtdew=0.044905, humidity=99.6684, cloud=0.0, wind=12.7224, temperature=13.5463, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:09:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:09:43.429 [DEBUG] [Thread-170384] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:09:43.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:09:43.526 [DEBUG] [Thread-170387] [transport.py] [_log()] starting thread (client mode): 0xa79b4100
2026-04-11T13:09:43.526 [DEBUG] [Thread-170387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:09:43.541 [DEBUG] [Thread-170387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:09:43.541 [INFO] [Thread-170387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:09:43.549 [DEBUG] [Thread-170387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:09:43.549 [DEBUG] [Thread-170387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:09:43.549 [DEBUG] [Thread-170387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:09:43.549 [DEBUG] [Thread-170387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:43.549 [DEBUG] [Thread-170387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:09:43.549 [DEBUG] [Thread-170387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] client lang: <none>
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] server lang: <none>
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] kex follows: False
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:09:43.550 [DEBUG] [Thread-170387] [transport.py] [_log()] Compression: none
2026-04-11T13:09:43.551 [DEBUG] [Thread-170387] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:09:43.607 [DEBUG] [Thread-170387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:09:43.608 [DEBUG] [Thread-170387] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:09:43.608 [DEBUG] [Thread-170387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:09:43.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:09:43.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:09:43.663 [DEBUG] [Thread-170387] [transport.py] [_log()] userauth is OK
2026-04-11T13:09:43.664 [DEBUG] [Thread-170387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:09:43.664 [DEBUG] [Thread-170387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:09:43.664 [DEBUG] [Thread-170387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:09:43.664 [DEBUG] [Thread-170387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:09:43.690 [INFO] [Thread-170387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:09:43.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:09:43.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:09:44.510 [DEBUG] [Thread-170387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:09:44.510 [DEBUG] [Thread-170387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:09:44.558 [DEBUG] [Thread-170387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:09:44.558 [DEBUG] [Thread-170387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:09:44.568 [DEBUG] [Thread-170387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:09:44.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:09:44.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-04-11T13:09:44.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-04-11T13:09:44.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:09:44.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:09:44.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:09:44.605 [DEBUG] [Thread-170387] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:09:55.927 [DEBUG] [Thread-170389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:59.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:09:59.432 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:06.870 [DEBUG] [Thread-170390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:10.987 [DEBUG] [Thread-170391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:14.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:10:14.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:10:14.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-04-11T13:10:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 9, 47), 0.06924, 99.4695, 0.0, 15.4562, 14.0252, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:10:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:09:47
2026-04-11T13:10:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:10:16.493 [DEBUG] [Thread-170392] [transport.py] [_log()] starting thread (client mode): 0xae5e4e50
2026-04-11T13:10:16.493 [DEBUG] [Thread-170392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:10:16.513 [DEBUG] [Thread-170392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:10:16.514 [INFO] [Thread-170392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:10:16.516 [DEBUG] [Thread-170392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] client lang: <none>
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] server lang: <none>
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] kex follows: False
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:10:16.517 [DEBUG] [Thread-170392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:10:16.518 [DEBUG] [Thread-170392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:10:16.518 [DEBUG] [Thread-170392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:10:16.518 [DEBUG] [Thread-170392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:10:16.518 [DEBUG] [Thread-170392] [transport.py] [_log()] Compression: none
2026-04-11T13:10:16.518 [DEBUG] [Thread-170392] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:10:16.538 [DEBUG] [Thread-170392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:10:16.539 [DEBUG] [Thread-170392] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:10:16.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:10:16.540 [DEBUG] [Thread-170392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:10:16.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:10:16.543 [DEBUG] [Thread-170392] [transport.py] [_log()] userauth is OK
2026-04-11T13:10:16.543 [DEBUG] [Thread-170392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:10:16.543 [DEBUG] [Thread-170392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:10:16.544 [DEBUG] [Thread-170392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:10:16.544 [DEBUG] [Thread-170392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:10:16.568 [INFO] [Thread-170392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:10:16.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:10:26.026 [DEBUG] [Thread-170394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:26.175 [DEBUG] [Thread-170392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:10:26.175 [DEBUG] [Thread-170392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:10:26.175 [DEBUG] [Thread-170392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:10:26.216 [DEBUG] [Thread-170392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:10:26.216 [DEBUG] [Thread-170392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:10:26.220 [DEBUG] [Thread-170392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:10:26.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:10:26.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:10:26.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:10:26.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:10:26.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:10:26.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:10:26.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:10:26.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:10:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:10:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.464702 -999.00  +13.80  12.97     97  +13.40 1 3 1 3 1   888    0 0.48 0.82 ----- 15.1 13.0 18.6 15.8 16.1 0.5 16.0 -0.1 15.8 0.6 15.9 0.8
2026-04-11T13:10:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:10:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:10:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.464702
2026-04-11T13:10:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:10:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:10:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:10:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:10:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:10:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:09:47', tmtdew=0.06924, humidity=99.4695, cloud=0.0, wind=15.4562, temperature=14.0252, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:09:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:10:26.345 [DEBUG] [Thread-170392] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:10:26.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:10:26.437 [DEBUG] [Thread-170396] [transport.py] [_log()] starting thread (client mode): 0xae5b4610
2026-04-11T13:10:26.437 [DEBUG] [Thread-170396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:10:26.451 [DEBUG] [Thread-170396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:10:26.451 [INFO] [Thread-170396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:10:26.459 [DEBUG] [Thread-170396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] client lang: <none>
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] server lang: <none>
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] kex follows: False
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:10:26.460 [DEBUG] [Thread-170396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:10:26.461 [DEBUG] [Thread-170396] [transport.py] [_log()] Compression: none
2026-04-11T13:10:26.461 [DEBUG] [Thread-170396] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:10:26.520 [DEBUG] [Thread-170396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:10:26.521 [DEBUG] [Thread-170396] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:10:26.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:10:26.522 [DEBUG] [Thread-170396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:10:26.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:10:26.579 [DEBUG] [Thread-170396] [transport.py] [_log()] userauth is OK
2026-04-11T13:10:26.580 [DEBUG] [Thread-170396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:10:26.580 [DEBUG] [Thread-170396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:10:26.580 [DEBUG] [Thread-170396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:10:26.580 [DEBUG] [Thread-170396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:10:26.599 [INFO] [Thread-170396] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:10:26.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:10:26.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:10:27.412 [DEBUG] [Thread-170396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:10:27.413 [DEBUG] [Thread-170396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:10:27.461 [DEBUG] [Thread-170396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:10:27.461 [DEBUG] [Thread-170396] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:10:27.470 [DEBUG] [Thread-170396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:10:27.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:10:27.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:10:27.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:10:27.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:10:27.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:10:27.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:10:27.507 [DEBUG] [Thread-170396] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:10:41.065 [DEBUG] [Thread-170398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:56.109 [DEBUG] [Thread-170399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:57.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:10:57.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:10:57.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-04-11T13:10:58.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 10, 23), 0.03719, 99.7182, 0.0, 10.3756, 13.646, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:10:58.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:10:23
2026-04-11T13:10:59.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:10:59.392 [DEBUG] [Thread-170400] [transport.py] [_log()] starting thread (client mode): 0xb39c7f40
2026-04-11T13:10:59.392 [DEBUG] [Thread-170400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:10:59.412 [DEBUG] [Thread-170400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:10:59.412 [INFO] [Thread-170400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:10:59.415 [DEBUG] [Thread-170400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:10:59.415 [DEBUG] [Thread-170400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:10:59.415 [DEBUG] [Thread-170400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] client lang: <none>
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] server lang: <none>
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] kex follows: False
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] Compression: none
2026-04-11T13:10:59.416 [DEBUG] [Thread-170400] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:10:59.426 [DEBUG] [Thread-170400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:10:59.426 [DEBUG] [Thread-170400] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:10:59.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:10:59.428 [DEBUG] [Thread-170400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:10:59.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:10:59.430 [DEBUG] [Thread-170400] [transport.py] [_log()] userauth is OK
2026-04-11T13:10:59.430 [DEBUG] [Thread-170400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:10:59.430 [DEBUG] [Thread-170400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:10:59.430 [DEBUG] [Thread-170400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:10:59.430 [DEBUG] [Thread-170400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:10:59.455 [INFO] [Thread-170400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:10:59.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:10:59.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:10:59.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:00.033 [DEBUG] [Thread-170400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:11:00.034 [DEBUG] [Thread-170400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:11:00.034 [DEBUG] [Thread-170400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:11:00.074 [DEBUG] [Thread-170400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:11:00.075 [DEBUG] [Thread-170400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:11:00.077 [DEBUG] [Thread-170400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:11:00.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:11:00.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:11:00.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:11:00.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:11:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:11:00.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:11:00.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.465743 -999.00  +13.50  16.44     96  +13.00 1 3 1 3 1   888    0 0.49 1.30 ----- 16.4 16.4 45.4 19.0 16.2 0.4 16.2 0.1 15.8 0.1 16.1 1.2
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.465743
2026-04-11T13:11:00.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:11:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:11:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:11:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:11:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:11:00.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:10:23', tmtdew=0.03719, humidity=99.7182, cloud=0.0, wind=10.3756, temperature=13.646, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:10:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:11:00.091 [DEBUG] [Thread-170400] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:11:00.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:11:00.178 [DEBUG] [Thread-170403] [transport.py] [_log()] starting thread (client mode): 0xb39c7bb0
2026-04-11T13:11:00.178 [DEBUG] [Thread-170403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:11:00.193 [DEBUG] [Thread-170403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:11:00.193 [INFO] [Thread-170403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] client lang: <none>
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] server lang: <none>
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] kex follows: False
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:11:00.201 [DEBUG] [Thread-170403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:11:00.202 [DEBUG] [Thread-170403] [transport.py] [_log()] Compression: none
2026-04-11T13:11:00.202 [DEBUG] [Thread-170403] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:11:00.259 [DEBUG] [Thread-170403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:11:00.259 [DEBUG] [Thread-170403] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:11:00.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:11:00.261 [DEBUG] [Thread-170403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:11:00.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:11:00.315 [DEBUG] [Thread-170403] [transport.py] [_log()] userauth is OK
2026-04-11T13:11:00.315 [DEBUG] [Thread-170403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:11:00.315 [DEBUG] [Thread-170403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:11:00.316 [DEBUG] [Thread-170403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:11:00.316 [DEBUG] [Thread-170403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:11:00.334 [INFO] [Thread-170403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:11:00.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:11:00.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:11:01.205 [DEBUG] [Thread-170403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:11:01.205 [DEBUG] [Thread-170403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:11:01.253 [DEBUG] [Thread-170403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:11:01.253 [DEBUG] [Thread-170403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:11:01.263 [DEBUG] [Thread-170403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:11:01.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:11:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:11:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:11:01.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:11:01.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:11:01.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:11:01.300 [DEBUG] [Thread-170403] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:11:06.912 [DEBUG] [Thread-170405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:11.145 [DEBUG] [Thread-170406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:26.199 [DEBUG] [Thread-170407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:31.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:11:31.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:11:31.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-04-11T13:11:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 10, 58), 0.08463, 99.7347, 0.0, 13.8521, 13.6629, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:11:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:10:58
2026-04-11T13:11:33.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:11:33.167 [DEBUG] [Thread-170408] [transport.py] [_log()] starting thread (client mode): 0xae5611b0
2026-04-11T13:11:33.167 [DEBUG] [Thread-170408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:11:33.188 [DEBUG] [Thread-170408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:11:33.188 [INFO] [Thread-170408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] client lang: <none>
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] server lang: <none>
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] kex follows: False
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] Compression: none
2026-04-11T13:11:33.191 [DEBUG] [Thread-170408] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:11:33.208 [DEBUG] [Thread-170408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:11:33.209 [DEBUG] [Thread-170408] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:11:33.209 [DEBUG] [Thread-170408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:11:33.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:11:33.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:11:33.211 [DEBUG] [Thread-170408] [transport.py] [_log()] userauth is OK
2026-04-11T13:11:33.211 [DEBUG] [Thread-170408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:11:33.212 [DEBUG] [Thread-170408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:11:33.212 [DEBUG] [Thread-170408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:11:33.212 [DEBUG] [Thread-170408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:11:33.235 [INFO] [Thread-170408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:11:33.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:11:33.854 [DEBUG] [Thread-170408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:11:33.854 [DEBUG] [Thread-170408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:11:33.855 [DEBUG] [Thread-170408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:11:33.895 [DEBUG] [Thread-170408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:11:33.895 [DEBUG] [Thread-170408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:11:33.899 [DEBUG] [Thread-170408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:11:33.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:11:33.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:11:33.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:11:33.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:11:33.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:11:33.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:11:33.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:11:33.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:11:33.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:11:33.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.466091 -999.00  +13.60  17.23     97  +13.10 1 3 1 3 1   888    0 0.49 1.21 ----- 16.5 17.2 49.8 19.6 16.2 0.6 16.2 -0.0 15.8 0.3 16.1 1.2
2026-04-11T13:11:33.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:11:33.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:11:33.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.466091
2026-04-11T13:11:33.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:11:33.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:11:33.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:11:33.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:11:33.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:11:33.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:10:58', tmtdew=0.08463, humidity=99.7347, cloud=0.0, wind=13.8521, temperature=13.6629, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:11:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:11:33.928 [DEBUG] [Thread-170408] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:11:34.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:11:34.021 [DEBUG] [Thread-170411] [transport.py] [_log()] starting thread (client mode): 0xae5b5ed0
2026-04-11T13:11:34.021 [DEBUG] [Thread-170411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:11:34.036 [DEBUG] [Thread-170411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:11:34.036 [INFO] [Thread-170411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:11:34.043 [DEBUG] [Thread-170411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] client lang: <none>
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] server lang: <none>
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] kex follows: False
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] Compression: none
2026-04-11T13:11:34.044 [DEBUG] [Thread-170411] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:11:34.103 [DEBUG] [Thread-170411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:11:34.103 [DEBUG] [Thread-170411] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:11:34.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:11:34.104 [DEBUG] [Thread-170411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:11:34.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:11:34.159 [DEBUG] [Thread-170411] [transport.py] [_log()] userauth is OK
2026-04-11T13:11:34.159 [DEBUG] [Thread-170411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:11:34.159 [DEBUG] [Thread-170411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:11:34.160 [DEBUG] [Thread-170411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:11:34.160 [DEBUG] [Thread-170411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:11:34.178 [INFO] [Thread-170411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:11:34.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:11:34.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:11:34.999 [DEBUG] [Thread-170411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:11:34.999 [DEBUG] [Thread-170411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:11:35.047 [DEBUG] [Thread-170411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:11:35.047 [DEBUG] [Thread-170411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:11:35.057 [DEBUG] [Thread-170411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:11:35.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:11:35.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:11:35.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:11:35.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:11:35.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:11:35.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:11:35.093 [DEBUG] [Thread-170411] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:11:41.236 [DEBUG] [Thread-170413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:56.290 [DEBUG] [Thread-170414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:59.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:11:59.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:12:05.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:12:05.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-04-11T13:12:06.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 11, 34), 0.07952, 99.4032, 0.0, 12.8808, 13.992, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:12:06.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:11:34
2026-04-11T13:12:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:12:06.940 [DEBUG] [Thread-170415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:06.965 [DEBUG] [Thread-170416] [transport.py] [_log()] starting thread (client mode): 0xae5b4d30
2026-04-11T13:12:06.965 [DEBUG] [Thread-170416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:12:06.982 [DEBUG] [Thread-170416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:12:06.982 [INFO] [Thread-170416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] client lang: <none>
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] server lang: <none>
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] kex follows: False
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:12:06.983 [DEBUG] [Thread-170416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:12:06.984 [DEBUG] [Thread-170416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:12:06.984 [DEBUG] [Thread-170416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:12:06.984 [DEBUG] [Thread-170416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:12:06.984 [DEBUG] [Thread-170416] [transport.py] [_log()] Compression: none
2026-04-11T13:12:06.984 [DEBUG] [Thread-170416] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:12:06.994 [DEBUG] [Thread-170416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:12:06.994 [DEBUG] [Thread-170416] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:12:06.995 [DEBUG] [Thread-170416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:12:06.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:12:06.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:12:06.996 [DEBUG] [Thread-170416] [transport.py] [_log()] userauth is OK
2026-04-11T13:12:06.996 [DEBUG] [Thread-170416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:12:06.996 [DEBUG] [Thread-170416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:12:06.996 [DEBUG] [Thread-170416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:12:06.997 [DEBUG] [Thread-170416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:12:07.013 [INFO] [Thread-170416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:12:07.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:12:07.563 [DEBUG] [Thread-170416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:12:07.563 [DEBUG] [Thread-170416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:12:07.564 [DEBUG] [Thread-170416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:12:07.604 [DEBUG] [Thread-170416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:12:07.604 [DEBUG] [Thread-170416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:12:07.607 [DEBUG] [Thread-170416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:12:07.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:12:07.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:12:07.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:12:07.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:12:07.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:12:07.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:12:07.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:12:07.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:12:07.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:12:07.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.466438 -999.00  +13.50  15.36     97  +13.10 1 3 1 3 1   888    0 0.51 1.31 ----- 12.2 15.4 50.2 21.7 16.3 0.7 16.2 -0.2 15.8 -0.5 16.1 1.0
2026-04-11T13:12:07.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:12:07.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:12:07.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.466438
2026-04-11T13:12:07.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:12:07.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:12:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:12:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:12:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:12:07.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:11:34', tmtdew=0.07952, humidity=99.4032, cloud=0.0, wind=12.8808, temperature=13.992, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:11:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:12:07.630 [DEBUG] [Thread-170416] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:12:07.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:12:07.725 [DEBUG] [Thread-170419] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-11T13:12:07.725 [DEBUG] [Thread-170419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:12:07.740 [DEBUG] [Thread-170419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:12:07.740 [INFO] [Thread-170419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:07.747 [DEBUG] [Thread-170419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] client lang: <none>
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] server lang: <none>
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] kex follows: False
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] Compression: none
2026-04-11T13:12:07.748 [DEBUG] [Thread-170419] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:12:07.805 [DEBUG] [Thread-170419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:12:07.805 [DEBUG] [Thread-170419] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:12:07.805 [DEBUG] [Thread-170419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:12:07.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:12:07.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:12:07.862 [DEBUG] [Thread-170419] [transport.py] [_log()] userauth is OK
2026-04-11T13:12:07.862 [DEBUG] [Thread-170419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:12:07.862 [DEBUG] [Thread-170419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:12:07.862 [DEBUG] [Thread-170419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:12:07.863 [DEBUG] [Thread-170419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:12:07.885 [INFO] [Thread-170419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:12:07.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:12:07.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:12:08.765 [DEBUG] [Thread-170419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:12:08.765 [DEBUG] [Thread-170419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:12:08.813 [DEBUG] [Thread-170419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:12:08.814 [DEBUG] [Thread-170419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:12:08.823 [DEBUG] [Thread-170419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:12:08.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:12:08.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-04-11T13:12:08.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:12:08.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:12:08.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:12:08.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:12:08.859 [DEBUG] [Thread-170419] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:12:11.328 [DEBUG] [Thread-170421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:26.379 [DEBUG] [Thread-170422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:38.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:12:38.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:12:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:12:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 12, 10), 0.029485, 99.7679, 0.0, 10.6056, 13.6626, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:12:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:12:10
2026-04-11T13:12:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:12:40.673 [DEBUG] [Thread-170423] [transport.py] [_log()] starting thread (client mode): 0xb39c7280
2026-04-11T13:12:40.673 [DEBUG] [Thread-170423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:12:40.693 [DEBUG] [Thread-170423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:12:40.693 [INFO] [Thread-170423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:12:40.694 [DEBUG] [Thread-170423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:12:40.694 [DEBUG] [Thread-170423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:12:40.694 [DEBUG] [Thread-170423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] client lang: <none>
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] server lang: <none>
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] kex follows: False
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] Compression: none
2026-04-11T13:12:40.695 [DEBUG] [Thread-170423] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:12:40.709 [DEBUG] [Thread-170423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:12:40.710 [DEBUG] [Thread-170423] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:12:40.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:12:40.711 [DEBUG] [Thread-170423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:12:40.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:12:40.714 [DEBUG] [Thread-170423] [transport.py] [_log()] userauth is OK
2026-04-11T13:12:40.714 [DEBUG] [Thread-170423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:12:40.715 [DEBUG] [Thread-170423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:12:40.715 [DEBUG] [Thread-170423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:12:40.715 [DEBUG] [Thread-170423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:12:40.740 [INFO] [Thread-170423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:12:40.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:12:41.363 [DEBUG] [Thread-170423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:12:41.363 [DEBUG] [Thread-170423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:12:41.363 [DEBUG] [Thread-170423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:12:41.404 [DEBUG] [Thread-170423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:12:41.404 [DEBUG] [Thread-170423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:12:41.408 [DEBUG] [Thread-170423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:12:41.417 [DEBUG] [Thread-170425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:41.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:12:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:12:41.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:12:41.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:12:41.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:12:41.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:12:41.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:12:41.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:12:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:12:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.466785 -999.00  +13.70  12.96     97  +13.20 1 3 1 3 1   888    0 0.50 1.39 ----- 12.8 13.0 56.6 15.9 16.3 0.7 16.4 0.4 15.9 0.1 16.2 1.4
2026-04-11T13:12:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:12:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:12:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.466785
2026-04-11T13:12:41.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:12:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:12:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:12:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:12:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:12:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:12:10', tmtdew=0.029485, humidity=99.7679, cloud=0.0, wind=10.6056, temperature=13.6626, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:12:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:12:41.440 [DEBUG] [Thread-170423] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:12:41.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:12:41.533 [DEBUG] [Thread-170427] [transport.py] [_log()] starting thread (client mode): 0xb39c68f0
2026-04-11T13:12:41.533 [DEBUG] [Thread-170427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:12:41.550 [DEBUG] [Thread-170427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:12:41.550 [INFO] [Thread-170427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:12:41.558 [DEBUG] [Thread-170427] [transport.py] [_log()] client lang: <none>
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] server lang: <none>
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] kex follows: False
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:12:41.559 [DEBUG] [Thread-170427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:12:41.560 [DEBUG] [Thread-170427] [transport.py] [_log()] Compression: none
2026-04-11T13:12:41.560 [DEBUG] [Thread-170427] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:12:41.619 [DEBUG] [Thread-170427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:12:41.620 [DEBUG] [Thread-170427] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:12:41.620 [DEBUG] [Thread-170427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:12:41.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:12:41.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:12:41.675 [DEBUG] [Thread-170427] [transport.py] [_log()] userauth is OK
2026-04-11T13:12:41.675 [DEBUG] [Thread-170427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:12:41.675 [DEBUG] [Thread-170427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:12:41.675 [DEBUG] [Thread-170427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:12:41.675 [DEBUG] [Thread-170427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:12:41.699 [INFO] [Thread-170427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:12:41.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:12:41.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:12:42.531 [DEBUG] [Thread-170427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:12:42.532 [DEBUG] [Thread-170427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:12:42.580 [DEBUG] [Thread-170427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:12:42.580 [DEBUG] [Thread-170427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:12:42.590 [DEBUG] [Thread-170427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:12:42.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:12:42.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:12:42.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-04-11T13:12:42.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:12:42.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:12:42.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:12:42.626 [DEBUG] [Thread-170427] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:12:56.455 [DEBUG] [Thread-170429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:59.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:12:59.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:13:06.975 [DEBUG] [Thread-170430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:13:11.509 [DEBUG] [Thread-170431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:13:12.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:13:12.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:13:12.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-04-11T13:13:13.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 12, 45), 0.07953, 99.4032, 0.0, 10.6934, 13.9257, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:13:13.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:12:45
2026-04-11T13:13:14.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:13:14.517 [DEBUG] [Thread-170432] [transport.py] [_log()] starting thread (client mode): 0xae5627a0
2026-04-11T13:13:14.517 [DEBUG] [Thread-170432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:13:14.537 [DEBUG] [Thread-170432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:13:14.538 [INFO] [Thread-170432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] client lang: <none>
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] server lang: <none>
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] kex follows: False
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] Compression: none
2026-04-11T13:13:14.541 [DEBUG] [Thread-170432] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:13:14.558 [DEBUG] [Thread-170432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:13:14.558 [DEBUG] [Thread-170432] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:13:14.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:13:14.559 [DEBUG] [Thread-170432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:13:14.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:13:14.560 [DEBUG] [Thread-170432] [transport.py] [_log()] userauth is OK
2026-04-11T13:13:14.561 [DEBUG] [Thread-170432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:13:14.561 [DEBUG] [Thread-170432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:13:14.561 [DEBUG] [Thread-170432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:13:14.561 [DEBUG] [Thread-170432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:13:14.577 [INFO] [Thread-170432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:13:14.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:13:15.182 [DEBUG] [Thread-170432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:13:15.182 [DEBUG] [Thread-170432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:13:15.182 [DEBUG] [Thread-170432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:13:15.223 [DEBUG] [Thread-170432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:13:15.223 [DEBUG] [Thread-170432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:13:15.226 [DEBUG] [Thread-170432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:13:15.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:13:15.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:13:15.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:13:15.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:13:15.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:13:15.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:13:15.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:13:15.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:13:15.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:13:15.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.467132 -999.00  +13.70  11.66     97  +13.20 1 3 1 3 1   888    0 0.51 1.48 ----- 12.4 11.7 42.4 18.2 16.4 0.9 16.4 0.5 16.0 0.2 16.3 1.1
2026-04-11T13:13:15.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:13:15.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:13:15.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.467132
2026-04-11T13:13:15.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:13:15.242 [DEBUG] [Thread-170432] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:13:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:13:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:13:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:13:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:13:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:12:45', tmtdew=0.07953, humidity=99.4032, cloud=0.0, wind=10.6934, temperature=13.9257, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:12:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:13:15.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:13:15.347 [DEBUG] [Thread-170435] [transport.py] [_log()] starting thread (client mode): 0xae5b4f10
2026-04-11T13:13:15.347 [DEBUG] [Thread-170435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:13:15.362 [DEBUG] [Thread-170435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:13:15.362 [INFO] [Thread-170435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] client lang: <none>
2026-04-11T13:13:15.372 [DEBUG] [Thread-170435] [transport.py] [_log()] server lang: <none>
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] kex follows: False
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] Compression: none
2026-04-11T13:13:15.373 [DEBUG] [Thread-170435] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:13:15.432 [DEBUG] [Thread-170435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:13:15.432 [DEBUG] [Thread-170435] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:13:15.433 [DEBUG] [Thread-170435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:13:15.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:13:15.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:13:15.490 [DEBUG] [Thread-170435] [transport.py] [_log()] userauth is OK
2026-04-11T13:13:15.491 [DEBUG] [Thread-170435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:13:15.491 [DEBUG] [Thread-170435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:13:15.491 [DEBUG] [Thread-170435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:13:15.491 [DEBUG] [Thread-170435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:13:15.508 [INFO] [Thread-170435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:13:15.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:13:15.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:13:16.343 [DEBUG] [Thread-170435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:13:16.343 [DEBUG] [Thread-170435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:13:16.394 [DEBUG] [Thread-170435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:13:16.394 [DEBUG] [Thread-170435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:13:16.406 [DEBUG] [Thread-170435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:13:16.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:13:16.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:13:16.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:13:16.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:13:16.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:13:16.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:13:16.451 [DEBUG] [Thread-170435] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:13:26.543 [DEBUG] [Thread-170437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:13:41.605 [DEBUG] [Thread-170438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:13:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:13:46.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:13:46.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-04-11T13:13:47.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 13, 21), 0.08205, 99.7513, 0.0, 11.3119, 13.7626, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:13:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:13:21
2026-04-11T13:13:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:13:48.362 [DEBUG] [Thread-170439] [transport.py] [_log()] starting thread (client mode): 0xae5b1960
2026-04-11T13:13:48.362 [DEBUG] [Thread-170439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:13:48.381 [DEBUG] [Thread-170439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:13:48.382 [INFO] [Thread-170439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] client lang: <none>
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] server lang: <none>
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] kex follows: False
2026-04-11T13:13:48.386 [DEBUG] [Thread-170439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:13:48.387 [DEBUG] [Thread-170439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:13:48.387 [DEBUG] [Thread-170439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:13:48.387 [DEBUG] [Thread-170439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:13:48.387 [DEBUG] [Thread-170439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:13:48.387 [DEBUG] [Thread-170439] [transport.py] [_log()] Compression: none
2026-04-11T13:13:48.387 [DEBUG] [Thread-170439] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:13:48.405 [DEBUG] [Thread-170439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:13:48.406 [DEBUG] [Thread-170439] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:13:48.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:13:48.407 [DEBUG] [Thread-170439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:13:48.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:13:48.409 [DEBUG] [Thread-170439] [transport.py] [_log()] userauth is OK
2026-04-11T13:13:48.409 [DEBUG] [Thread-170439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:13:48.409 [DEBUG] [Thread-170439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:13:48.409 [DEBUG] [Thread-170439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:13:48.409 [DEBUG] [Thread-170439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:13:48.433 [INFO] [Thread-170439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:13:48.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:13:49.082 [DEBUG] [Thread-170439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:13:49.082 [DEBUG] [Thread-170439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:13:49.083 [DEBUG] [Thread-170439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:13:49.123 [DEBUG] [Thread-170439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:13:49.123 [DEBUG] [Thread-170439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:13:49.127 [DEBUG] [Thread-170439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:13:49.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:13:49.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:13:49.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:13:49.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:13:49.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:13:49.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:13:49.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:13:49.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:13:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:13:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.467827 -999.00  +13.80  15.99     97  +13.40 1 3 1 3 1   888    0 0.50 1.43 ----- 13.8 16.0 54.1 17.9 16.5 0.6 16.6 0.3 16.1 0.9 16.4 1.3
2026-04-11T13:13:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:13:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:13:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.467827
2026-04-11T13:13:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:13:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:13:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:13:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:13:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:13:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:13:21', tmtdew=0.08205, humidity=99.7513, cloud=0.0, wind=11.3119, temperature=13.7626, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:13:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:13:49.154 [DEBUG] [Thread-170439] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:13:49.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:13:49.247 [DEBUG] [Thread-170442] [transport.py] [_log()] starting thread (client mode): 0xae5630d0
2026-04-11T13:13:49.247 [DEBUG] [Thread-170442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:13:49.263 [DEBUG] [Thread-170442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:13:49.263 [INFO] [Thread-170442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] client lang: <none>
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] server lang: <none>
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] kex follows: False
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:13:49.271 [DEBUG] [Thread-170442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:13:49.272 [DEBUG] [Thread-170442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:13:49.272 [DEBUG] [Thread-170442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:13:49.272 [DEBUG] [Thread-170442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:13:49.272 [DEBUG] [Thread-170442] [transport.py] [_log()] Compression: none
2026-04-11T13:13:49.272 [DEBUG] [Thread-170442] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:13:49.331 [DEBUG] [Thread-170442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:13:49.332 [DEBUG] [Thread-170442] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:13:49.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:13:49.333 [DEBUG] [Thread-170442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:13:49.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:13:49.391 [DEBUG] [Thread-170442] [transport.py] [_log()] userauth is OK
2026-04-11T13:13:49.391 [DEBUG] [Thread-170442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:13:49.391 [DEBUG] [Thread-170442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:13:49.391 [DEBUG] [Thread-170442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:13:49.391 [DEBUG] [Thread-170442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:13:49.416 [INFO] [Thread-170442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:13:49.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:13:49.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:13:50.290 [DEBUG] [Thread-170442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:13:50.291 [DEBUG] [Thread-170442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:13:50.339 [DEBUG] [Thread-170442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:13:50.339 [DEBUG] [Thread-170442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:13:50.349 [DEBUG] [Thread-170442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:13:50.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:13:50.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-04-11T13:13:50.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-04-11T13:13:50.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:13:50.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:13:50.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:13:50.386 [DEBUG] [Thread-170442] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:13:56.645 [DEBUG] [Thread-170444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:00.004 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:00.005 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:07.020 [DEBUG] [Thread-170445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:11.696 [DEBUG] [Thread-170446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:20.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:14:20.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:14:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:14:21.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 13, 56), 0.082035, 99.7513, 0.0, 12.2292, 13.7123, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:14:21.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:13:56
2026-04-11T13:14:22.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:14:22.224 [DEBUG] [Thread-170447] [transport.py] [_log()] starting thread (client mode): 0xb0febc10
2026-04-11T13:14:22.224 [DEBUG] [Thread-170447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:14:22.245 [DEBUG] [Thread-170447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:14:22.246 [INFO] [Thread-170447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:14:22.247 [DEBUG] [Thread-170447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:14:22.247 [DEBUG] [Thread-170447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:14:22.247 [DEBUG] [Thread-170447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] client lang: <none>
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] server lang: <none>
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] kex follows: False
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:14:22.248 [DEBUG] [Thread-170447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:14:22.249 [DEBUG] [Thread-170447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:14:22.249 [DEBUG] [Thread-170447] [transport.py] [_log()] Compression: none
2026-04-11T13:14:22.249 [DEBUG] [Thread-170447] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:14:22.260 [DEBUG] [Thread-170447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:14:22.260 [DEBUG] [Thread-170447] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:14:22.260 [DEBUG] [Thread-170447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:14:22.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:14:22.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:14:22.261 [DEBUG] [Thread-170447] [transport.py] [_log()] userauth is OK
2026-04-11T13:14:22.261 [DEBUG] [Thread-170447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:14:22.261 [DEBUG] [Thread-170447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:14:22.261 [DEBUG] [Thread-170447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:14:22.262 [DEBUG] [Thread-170447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:14:22.280 [INFO] [Thread-170447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:14:22.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:14:22.901 [DEBUG] [Thread-170447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:14:22.901 [DEBUG] [Thread-170447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:14:22.901 [DEBUG] [Thread-170447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:14:22.942 [DEBUG] [Thread-170447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:14:22.942 [DEBUG] [Thread-170447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:14:22.946 [DEBUG] [Thread-170447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:14:22.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:14:22.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:14:22.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:14:22.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:14:22.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:14:22.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:14:22.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:14:22.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:14:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:14:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.468174 -999.00  +13.80  12.85     97  +13.30 1 3 1 3 1   888    0 0.51 1.37 ----- 14.8 12.8 41.4 15.2 16.6 0.6 16.6 0.3 16.2 0.5 16.5 1.2
2026-04-11T13:14:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:14:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:14:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.468174
2026-04-11T13:14:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:14:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:14:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:14:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:14:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:14:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:13:56', tmtdew=0.082035, humidity=99.7513, cloud=0.0, wind=12.2292, temperature=13.7123, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:14:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:14:22.973 [DEBUG] [Thread-170447] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:14:23.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:14:23.069 [DEBUG] [Thread-170450] [transport.py] [_log()] starting thread (client mode): 0xae5b5630
2026-04-11T13:14:23.070 [DEBUG] [Thread-170450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:14:23.084 [DEBUG] [Thread-170450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:14:23.084 [INFO] [Thread-170450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:23.092 [DEBUG] [Thread-170450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] client lang: <none>
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] server lang: <none>
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] kex follows: False
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] Compression: none
2026-04-11T13:14:23.093 [DEBUG] [Thread-170450] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:14:23.150 [DEBUG] [Thread-170450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:14:23.150 [DEBUG] [Thread-170450] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:14:23.151 [DEBUG] [Thread-170450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:14:23.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:14:23.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:14:23.207 [DEBUG] [Thread-170450] [transport.py] [_log()] userauth is OK
2026-04-11T13:14:23.207 [DEBUG] [Thread-170450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:14:23.207 [DEBUG] [Thread-170450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:14:23.207 [DEBUG] [Thread-170450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:14:23.208 [DEBUG] [Thread-170450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:14:23.227 [INFO] [Thread-170450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:14:23.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:14:23.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:14:24.054 [DEBUG] [Thread-170450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:14:24.054 [DEBUG] [Thread-170450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:14:24.102 [DEBUG] [Thread-170450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:14:24.102 [DEBUG] [Thread-170450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:14:24.112 [DEBUG] [Thread-170450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:14:24.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:14:24.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:14:24.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:14:24.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:14:24.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:14:24.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:14:24.148 [DEBUG] [Thread-170450] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:14:26.738 [DEBUG] [Thread-170452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:41.795 [DEBUG] [Thread-170453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:54.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:14:54.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:14:54.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-04-11T13:14:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 14, 31), 0.08203, 99.7513, 0.0, 11.8058, 13.7455, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:14:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:14:31
2026-04-11T13:14:55.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:14:55.981 [DEBUG] [Thread-170454] [transport.py] [_log()] starting thread (client mode): 0xb39c7bb0
2026-04-11T13:14:55.981 [DEBUG] [Thread-170454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:14:56.001 [DEBUG] [Thread-170454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:14:56.001 [INFO] [Thread-170454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] client lang: <none>
2026-04-11T13:14:56.003 [DEBUG] [Thread-170454] [transport.py] [_log()] server lang: <none>
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] kex follows: False
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] Compression: none
2026-04-11T13:14:56.004 [DEBUG] [Thread-170454] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:14:56.014 [DEBUG] [Thread-170454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:14:56.015 [DEBUG] [Thread-170454] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:14:56.016 [DEBUG] [Thread-170454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:14:56.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:14:56.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:14:56.018 [DEBUG] [Thread-170454] [transport.py] [_log()] userauth is OK
2026-04-11T13:14:56.018 [DEBUG] [Thread-170454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:14:56.018 [DEBUG] [Thread-170454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:14:56.019 [DEBUG] [Thread-170454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:14:56.019 [DEBUG] [Thread-170454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:14:56.039 [INFO] [Thread-170454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:14:56.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:14:56.640 [DEBUG] [Thread-170454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:14:56.640 [DEBUG] [Thread-170454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:14:56.641 [DEBUG] [Thread-170454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:14:56.681 [DEBUG] [Thread-170454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:14:56.681 [DEBUG] [Thread-170454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:14:56.684 [DEBUG] [Thread-170454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:14:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:14:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:14:56.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:14:56.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:14:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:14:56.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:14:56.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:14:56.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:14:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:14:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.468521 -999.00  +13.80  14.64     97  +13.30 1 3 1 3 1   888    0 0.50 1.22 ----- 15.8 14.6 31.2 16.6 16.7 0.4 16.6 0.0 16.2 -0.2 16.5 1.4
2026-04-11T13:14:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:14:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:14:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.468521
2026-04-11T13:14:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:14:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:14:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:14:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:14:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:14:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:14:31', tmtdew=0.08203, humidity=99.7513, cloud=0.0, wind=11.8058, temperature=13.7455, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:14:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:14:56.709 [DEBUG] [Thread-170454] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:14:56.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:14:56.802 [DEBUG] [Thread-170457] [transport.py] [_log()] starting thread (client mode): 0xae5b7220
2026-04-11T13:14:56.802 [DEBUG] [Thread-170457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:14:56.817 [DEBUG] [Thread-170457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:14:56.817 [INFO] [Thread-170457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:14:56.824 [DEBUG] [Thread-170457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:14:56.824 [DEBUG] [Thread-170457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] client lang: <none>
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] server lang: <none>
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] kex follows: False
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] Compression: none
2026-04-11T13:14:56.825 [DEBUG] [Thread-170457] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:14:56.831 [DEBUG] [Thread-170459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:14:56.881 [DEBUG] [Thread-170457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:14:56.882 [DEBUG] [Thread-170457] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:14:56.882 [DEBUG] [Thread-170457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:14:56.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:14:56.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:14:56.938 [DEBUG] [Thread-170457] [transport.py] [_log()] userauth is OK
2026-04-11T13:14:56.939 [DEBUG] [Thread-170457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:14:56.939 [DEBUG] [Thread-170457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:14:56.939 [DEBUG] [Thread-170457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:14:56.939 [DEBUG] [Thread-170457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:14:56.958 [INFO] [Thread-170457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:14:56.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:14:56.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:14:57.787 [DEBUG] [Thread-170457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:14:57.787 [DEBUG] [Thread-170457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:14:57.835 [DEBUG] [Thread-170457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:14:57.835 [DEBUG] [Thread-170457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:14:57.844 [DEBUG] [Thread-170457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:14:57.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:14:57.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-04-11T13:14:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:14:57.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:14:57.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:14:57.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:14:57.877 [DEBUG] [Thread-170457] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:15:00.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:15:00.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:15:07.059 [DEBUG] [Thread-170460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:15:11.883 [DEBUG] [Thread-170461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:15:26.918 [DEBUG] [Thread-170462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:15:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:15:27.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:15:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:15:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 15, 7), 0.07944, 99.7679, 0.0, 13.9403, 13.8118, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:15:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:15:07
2026-04-11T13:15:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:15:29.665 [DEBUG] [Thread-170463] [transport.py] [_log()] starting thread (client mode): 0xb0fe9cf0
2026-04-11T13:15:29.665 [DEBUG] [Thread-170463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:15:29.684 [DEBUG] [Thread-170463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:15:29.684 [INFO] [Thread-170463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:15:29.686 [DEBUG] [Thread-170463] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:15:29.686 [DEBUG] [Thread-170463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:15:29.686 [DEBUG] [Thread-170463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:15:29.686 [DEBUG] [Thread-170463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:15:29.686 [DEBUG] [Thread-170463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] client lang: <none>
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] server lang: <none>
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] kex follows: False
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] Compression: none
2026-04-11T13:15:29.687 [DEBUG] [Thread-170463] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:15:29.697 [DEBUG] [Thread-170463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:15:29.698 [DEBUG] [Thread-170463] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:15:29.699 [DEBUG] [Thread-170463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:15:29.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:15:29.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:15:29.701 [DEBUG] [Thread-170463] [transport.py] [_log()] userauth is OK
2026-04-11T13:15:29.701 [DEBUG] [Thread-170463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:15:29.702 [DEBUG] [Thread-170463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:15:29.702 [DEBUG] [Thread-170463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:15:29.702 [DEBUG] [Thread-170463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:15:29.728 [INFO] [Thread-170463] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:15:29.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:15:35.726 [DEBUG] [Thread-170463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:15:35.726 [DEBUG] [Thread-170463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:15:35.726 [DEBUG] [Thread-170463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:15:35.767 [DEBUG] [Thread-170463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:15:35.767 [DEBUG] [Thread-170463] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:15:35.770 [DEBUG] [Thread-170463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:15:35.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:15:35.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:15:35.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:15:35.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:15:35.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:15:35.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:15:35.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:15:35.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:15:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:15:35.816 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-11T13:15:35.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:15:07', tmtdew=0.07944, humidity=99.7679, cloud=0.0, wind=13.9403, temperature=13.8118, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:15:35.818 [DEBUG] [Thread-170463] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:15:35.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:15:35.924 [DEBUG] [Thread-170466] [transport.py] [_log()] starting thread (client mode): 0xae537880
2026-04-11T13:15:35.924 [DEBUG] [Thread-170466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:15:35.939 [DEBUG] [Thread-170466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:15:35.939 [INFO] [Thread-170466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:15:35.950 [DEBUG] [Thread-170466] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:15:35.950 [DEBUG] [Thread-170466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:15:35.951 [DEBUG] [Thread-170466] [transport.py] [_log()] client lang: <none>
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] server lang: <none>
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] kex follows: False
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:15:35.952 [DEBUG] [Thread-170466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:15:35.953 [DEBUG] [Thread-170466] [transport.py] [_log()] Compression: none
2026-04-11T13:15:35.953 [DEBUG] [Thread-170466] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:15:36.010 [DEBUG] [Thread-170466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:15:36.010 [DEBUG] [Thread-170466] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:15:36.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:15:36.012 [DEBUG] [Thread-170466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:15:36.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:15:36.067 [DEBUG] [Thread-170466] [transport.py] [_log()] userauth is OK
2026-04-11T13:15:36.068 [DEBUG] [Thread-170466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:15:36.068 [DEBUG] [Thread-170466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:15:36.068 [DEBUG] [Thread-170466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:15:36.068 [DEBUG] [Thread-170466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:15:36.086 [INFO] [Thread-170466] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:15:36.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:15:36.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:15:36.925 [DEBUG] [Thread-170466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:15:36.926 [DEBUG] [Thread-170466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:15:36.974 [DEBUG] [Thread-170466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:15:36.974 [DEBUG] [Thread-170466] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:15:36.984 [DEBUG] [Thread-170466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:15:36.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:15:36.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-04-11T13:15:37.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-04-11T13:15:37.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:15:37.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:15:37.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:15:37.021 [DEBUG] [Thread-170466] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:15:41.954 [DEBUG] [Thread-170468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:15:57.019 [DEBUG] [Thread-170469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:00.286 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:00.287 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:07.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:16:07.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:16:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:16:07.097 [DEBUG] [Thread-170470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:08.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 15, 43), 0.0537, 99.569, 0.0, 13.5511, 14.4231, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:16:08.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:15:43
2026-04-11T13:16:08.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:16:08.895 [DEBUG] [Thread-170471] [transport.py] [_log()] starting thread (client mode): 0xb39c6710
2026-04-11T13:16:08.896 [DEBUG] [Thread-170471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:16:08.915 [DEBUG] [Thread-170471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:16:08.915 [INFO] [Thread-170471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] client lang: <none>
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] server lang: <none>
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] kex follows: False
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:16:08.919 [DEBUG] [Thread-170471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:16:08.920 [DEBUG] [Thread-170471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:16:08.920 [DEBUG] [Thread-170471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:16:08.920 [DEBUG] [Thread-170471] [transport.py] [_log()] Compression: none
2026-04-11T13:16:08.920 [DEBUG] [Thread-170471] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:16:08.936 [DEBUG] [Thread-170471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:16:08.936 [DEBUG] [Thread-170471] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:16:08.937 [DEBUG] [Thread-170471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:16:08.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:16:08.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:16:08.981 [DEBUG] [Thread-170471] [transport.py] [_log()] userauth is OK
2026-04-11T13:16:08.982 [DEBUG] [Thread-170471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:16:08.982 [DEBUG] [Thread-170471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:16:08.982 [DEBUG] [Thread-170471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:16:08.982 [DEBUG] [Thread-170471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:16:09.014 [INFO] [Thread-170471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:16:09.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:16:09.819 [DEBUG] [Thread-170471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:16:09.820 [DEBUG] [Thread-170471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:16:09.820 [DEBUG] [Thread-170471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:16:09.861 [DEBUG] [Thread-170471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:16:09.861 [DEBUG] [Thread-170471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:16:09.864 [DEBUG] [Thread-170471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:16:09.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:16:09.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:16:09.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:16:09.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:16:09.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:16:09.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:16:09.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:16:09.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:16:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:16:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.469216 -999.00  +13.70  13.06     96  +13.20 1 3 1 3 1   888    0 0.50 1.29 ----- 12.2 13.1 39.2 16.3 16.7 0.3 16.7 0.1 16.3 -0.2 16.5 1.1
2026-04-11T13:16:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:16:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:16:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.469216
2026-04-11T13:16:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:16:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:16:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:16:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:16:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:16:09.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:15:43', tmtdew=0.0537, humidity=99.569, cloud=0.0, wind=13.5511, temperature=14.4231, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:15:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:16:09.896 [DEBUG] [Thread-170471] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:16:09.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:16:09.991 [DEBUG] [Thread-170474] [transport.py] [_log()] starting thread (client mode): 0xae5b7b80
2026-04-11T13:16:09.991 [DEBUG] [Thread-170474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:16:10.007 [DEBUG] [Thread-170474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:16:10.007 [INFO] [Thread-170474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] client lang: <none>
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] server lang: <none>
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] kex follows: False
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:16:10.015 [DEBUG] [Thread-170474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:16:10.016 [DEBUG] [Thread-170474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:16:10.016 [DEBUG] [Thread-170474] [transport.py] [_log()] Compression: none
2026-04-11T13:16:10.016 [DEBUG] [Thread-170474] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:16:10.075 [DEBUG] [Thread-170474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:16:10.075 [DEBUG] [Thread-170474] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:16:10.076 [DEBUG] [Thread-170474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:16:10.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:16:10.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:16:10.131 [DEBUG] [Thread-170474] [transport.py] [_log()] userauth is OK
2026-04-11T13:16:10.131 [DEBUG] [Thread-170474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:16:10.132 [DEBUG] [Thread-170474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:16:10.132 [DEBUG] [Thread-170474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:16:10.132 [DEBUG] [Thread-170474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:16:10.150 [INFO] [Thread-170474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:16:10.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:16:10.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:16:10.959 [DEBUG] [Thread-170474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:16:10.959 [DEBUG] [Thread-170474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:16:11.009 [DEBUG] [Thread-170474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:16:11.009 [DEBUG] [Thread-170474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:16:11.020 [DEBUG] [Thread-170474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:16:11.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:16: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-04-11T13:16:11.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:16:11.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:16:11.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:16:11.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:16:11.071 [DEBUG] [Thread-170474] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:16:12.057 [DEBUG] [Thread-170476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:27.119 [DEBUG] [Thread-170477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:16:41.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:16:41.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-04-11T13:16:42.158 [DEBUG] [Thread-170478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:16:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 16, 18), 0.09232, 99.685, 0.0, 11.8404, 13.8123, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:16:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:16:18
2026-04-11T13:16:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:16:42.901 [DEBUG] [Thread-170479] [transport.py] [_log()] starting thread (client mode): 0xb39c6cb0
2026-04-11T13:16:42.901 [DEBUG] [Thread-170479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:16:42.922 [DEBUG] [Thread-170479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:16:42.922 [INFO] [Thread-170479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] client lang: <none>
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] server lang: <none>
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] kex follows: False
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] Compression: none
2026-04-11T13:16:42.923 [DEBUG] [Thread-170479] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:16:42.932 [DEBUG] [Thread-170479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:16:42.932 [DEBUG] [Thread-170479] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:16:42.933 [DEBUG] [Thread-170479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:16:42.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:16:42.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:16:42.934 [DEBUG] [Thread-170479] [transport.py] [_log()] userauth is OK
2026-04-11T13:16:42.935 [DEBUG] [Thread-170479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:16:42.935 [DEBUG] [Thread-170479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:16:42.935 [DEBUG] [Thread-170479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:16:42.935 [DEBUG] [Thread-170479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:16:42.953 [INFO] [Thread-170479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:16:42.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:16:43.552 [DEBUG] [Thread-170479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:16:43.553 [DEBUG] [Thread-170479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:16:43.553 [DEBUG] [Thread-170479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:16:43.593 [DEBUG] [Thread-170479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:16:43.593 [DEBUG] [Thread-170479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:16:43.595 [DEBUG] [Thread-170479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:16:43.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:16:43.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:16:43.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:16:43.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:16:43.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:16:43.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:16:43.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:16:43.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:16:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:16:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.469563 -999.00  +13.80  12.31     97  +13.30 1 3 1 3 1   888    0 0.49 1.08 ----- 13.1 12.3 48.8 17.2 16.8 0.5 16.8 0.5 16.4 -0.1 16.6 1.3
2026-04-11T13:16:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:16:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:16:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.469563
2026-04-11T13:16:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:16:43.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:16:43.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:16:43.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:16:43.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:16:43.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:16:18', tmtdew=0.09232, humidity=99.685, cloud=0.0, wind=11.8404, temperature=13.8123, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:16:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:16:43.620 [DEBUG] [Thread-170479] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:16:43.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:16:43.718 [DEBUG] [Thread-170482] [transport.py] [_log()] starting thread (client mode): 0xb39c6e00
2026-04-11T13:16:43.718 [DEBUG] [Thread-170482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:16:43.733 [DEBUG] [Thread-170482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:16:43.733 [INFO] [Thread-170482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:16:43.741 [DEBUG] [Thread-170482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:16:43.741 [DEBUG] [Thread-170482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:16:43.742 [DEBUG] [Thread-170482] [transport.py] [_log()] client lang: <none>
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] server lang: <none>
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] kex follows: False
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] Compression: none
2026-04-11T13:16:43.743 [DEBUG] [Thread-170482] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:16:43.799 [DEBUG] [Thread-170482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:16:43.799 [DEBUG] [Thread-170482] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:16:43.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:16:43.800 [DEBUG] [Thread-170482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:16:43.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:16:43.855 [DEBUG] [Thread-170482] [transport.py] [_log()] userauth is OK
2026-04-11T13:16:43.855 [DEBUG] [Thread-170482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:16:43.855 [DEBUG] [Thread-170482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:16:43.855 [DEBUG] [Thread-170482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:16:43.855 [DEBUG] [Thread-170482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:16:43.874 [INFO] [Thread-170482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:16:43.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:16:43.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:16:44.688 [DEBUG] [Thread-170482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:16:44.688 [DEBUG] [Thread-170482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:16:44.736 [DEBUG] [Thread-170482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:16:44.736 [DEBUG] [Thread-170482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:16:44.745 [DEBUG] [Thread-170482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:16:44.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:16:44.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:16:44.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:16:44.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:16:44.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:16:44.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:16:44.780 [DEBUG] [Thread-170482] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:16:57.196 [DEBUG] [Thread-170484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:00.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:00.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:07.129 [DEBUG] [Thread-170485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:12.258 [DEBUG] [Thread-170486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:17:14.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:17:14.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:17:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 16, 53), 0.08467, 99.37, 0.0, 7.51824, 13.9589, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:17:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:16:53
2026-04-11T13:17:16.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:17:16.649 [DEBUG] [Thread-170487] [transport.py] [_log()] starting thread (client mode): 0xb0fe8130
2026-04-11T13:17:16.649 [DEBUG] [Thread-170487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:17:16.669 [DEBUG] [Thread-170487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:17:16.669 [INFO] [Thread-170487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] client lang: <none>
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] server lang: <none>
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] kex follows: False
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:17:16.672 [DEBUG] [Thread-170487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:17:16.673 [DEBUG] [Thread-170487] [transport.py] [_log()] Compression: none
2026-04-11T13:17:16.673 [DEBUG] [Thread-170487] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:17:16.689 [DEBUG] [Thread-170487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:17:16.690 [DEBUG] [Thread-170487] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:17:16.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:17:16.691 [DEBUG] [Thread-170487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:17:16.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:17:16.693 [DEBUG] [Thread-170487] [transport.py] [_log()] userauth is OK
2026-04-11T13:17:16.693 [DEBUG] [Thread-170487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:17:16.693 [DEBUG] [Thread-170487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:17:16.693 [DEBUG] [Thread-170487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:17:16.693 [DEBUG] [Thread-170487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:17:16.729 [INFO] [Thread-170487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:17:16.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:17:17.349 [DEBUG] [Thread-170487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:17:17.350 [DEBUG] [Thread-170487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:17:17.350 [DEBUG] [Thread-170487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:17:17.391 [DEBUG] [Thread-170487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:17:17.391 [DEBUG] [Thread-170487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:17:17.394 [DEBUG] [Thread-170487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:17:17.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:17:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:17:17.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:17:17.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:17:17.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:17:17.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:17:17.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:17:17.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.470257 -999.00  +13.70  13.80     96  +13.10 1 3 1 3 1   888    0 0.52 1.55 ----- 12.1 13.8 37.6 18.5 16.9 0.6 16.8 -0.2 16.4 -0.2 16.7 0.7
2026-04-11T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:17:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.470257
2026-04-11T13:17:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:17:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:17:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:17:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:17:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:17:17.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:16:53', tmtdew=0.08467, humidity=99.37, cloud=0.0, wind=7.51824, temperature=13.9589, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:17:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:17:17.422 [DEBUG] [Thread-170487] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:17:17.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:17:17.515 [DEBUG] [Thread-170490] [transport.py] [_log()] starting thread (client mode): 0xb0feab60
2026-04-11T13:17:17.515 [DEBUG] [Thread-170490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:17:17.530 [DEBUG] [Thread-170490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:17:17.531 [INFO] [Thread-170490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] client lang: <none>
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] server lang: <none>
2026-04-11T13:17:17.548 [DEBUG] [Thread-170490] [transport.py] [_log()] kex follows: False
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] Compression: none
2026-04-11T13:17:17.549 [DEBUG] [Thread-170490] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:17:17.599 [DEBUG] [Thread-170490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:17:17.599 [DEBUG] [Thread-170490] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:17:17.600 [DEBUG] [Thread-170490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:17:17.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:17:17.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:17:17.655 [DEBUG] [Thread-170490] [transport.py] [_log()] userauth is OK
2026-04-11T13:17:17.656 [DEBUG] [Thread-170490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:17:17.656 [DEBUG] [Thread-170490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:17:17.656 [DEBUG] [Thread-170490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:17:17.656 [DEBUG] [Thread-170490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:17:17.675 [INFO] [Thread-170490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:17:17.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:17:17.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:17:18.521 [DEBUG] [Thread-170490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:17:18.521 [DEBUG] [Thread-170490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:17:18.569 [DEBUG] [Thread-170490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:17:18.569 [DEBUG] [Thread-170490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:17:18.578 [DEBUG] [Thread-170490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:17:18.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:17:18.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-04-11T13:17:18.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-04-11T13:17:18.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:17:18.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:17:18.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:17:18.619 [DEBUG] [Thread-170490] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:17:27.298 [DEBUG] [Thread-170492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:42.351 [DEBUG] [Thread-170493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:17:48.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:17:48.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:17:48.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-04-11T13:17:49.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 17, 29), 0.0449, 99.6684, 0.0, 11.947, 13.6626, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:17:49.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:17:29
2026-04-11T13:17:50.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:17:50.422 [DEBUG] [Thread-170494] [transport.py] [_log()] starting thread (client mode): 0xa795fa00
2026-04-11T13:17:50.422 [DEBUG] [Thread-170494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:17:50.447 [DEBUG] [Thread-170494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:17:50.447 [INFO] [Thread-170494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:17:50.448 [DEBUG] [Thread-170494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:17:50.448 [DEBUG] [Thread-170494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] client lang: <none>
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] server lang: <none>
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] kex follows: False
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:17:50.449 [DEBUG] [Thread-170494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:17:50.450 [DEBUG] [Thread-170494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:17:50.450 [DEBUG] [Thread-170494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:17:50.450 [DEBUG] [Thread-170494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:17:50.450 [DEBUG] [Thread-170494] [transport.py] [_log()] Compression: none
2026-04-11T13:17:50.450 [DEBUG] [Thread-170494] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:17:50.460 [DEBUG] [Thread-170494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:17:50.460 [DEBUG] [Thread-170494] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:17:50.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:17:50.462 [DEBUG] [Thread-170494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:17:50.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:17:50.464 [DEBUG] [Thread-170494] [transport.py] [_log()] userauth is OK
2026-04-11T13:17:50.464 [DEBUG] [Thread-170494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:17:50.464 [DEBUG] [Thread-170494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:17:50.464 [DEBUG] [Thread-170494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:17:50.464 [DEBUG] [Thread-170494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:17:50.487 [INFO] [Thread-170494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:17:50.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:17:51.079 [DEBUG] [Thread-170494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:17:51.080 [DEBUG] [Thread-170494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:17:51.080 [DEBUG] [Thread-170494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:17:51.121 [DEBUG] [Thread-170494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:17:51.121 [DEBUG] [Thread-170494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:17:51.124 [DEBUG] [Thread-170494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:17:51.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:17:51.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:17:51.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:17:51.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:17:51.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:17:51.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:17:51.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:17:51.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:17:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:17:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.470604 -999.00  +13.70  10.63     96  +13.20 1 3 1 3 1   888    0 0.54 2.07 ----- 10.0 10.6 44.2 13.9 16.9 0.5 16.9 0.1 16.4 0.2 16.7 1.0
2026-04-11T13:17:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:17:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:17:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.470604
2026-04-11T13:17:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:17:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:17:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:17:51.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:17:51.148 [DEBUG] [Thread-170494] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:17:51.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:17:51.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:17:29', tmtdew=0.0449, humidity=99.6684, cloud=0.0, wind=11.947, temperature=13.6626, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:17:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:17:51.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:17:51.242 [DEBUG] [Thread-170497] [transport.py] [_log()] starting thread (client mode): 0xa795ef20
2026-04-11T13:17:51.242 [DEBUG] [Thread-170497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:17:51.257 [DEBUG] [Thread-170497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:17:51.257 [INFO] [Thread-170497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] client lang: <none>
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] server lang: <none>
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] kex follows: False
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:17:51.265 [DEBUG] [Thread-170497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:17:51.266 [DEBUG] [Thread-170497] [transport.py] [_log()] Compression: none
2026-04-11T13:17:51.266 [DEBUG] [Thread-170497] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:17:51.326 [DEBUG] [Thread-170497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:17:51.327 [DEBUG] [Thread-170497] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:17:51.328 [DEBUG] [Thread-170497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:17:51.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:17:51.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:17:51.387 [DEBUG] [Thread-170497] [transport.py] [_log()] userauth is OK
2026-04-11T13:17:51.387 [DEBUG] [Thread-170497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:17:51.387 [DEBUG] [Thread-170497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:17:51.387 [DEBUG] [Thread-170497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:17:51.388 [DEBUG] [Thread-170497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:17:51.406 [INFO] [Thread-170497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:17:51.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:17:51.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:17:52.209 [DEBUG] [Thread-170497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:17:52.210 [DEBUG] [Thread-170497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:17:52.257 [DEBUG] [Thread-170497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:17:52.257 [DEBUG] [Thread-170497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:17:52.266 [DEBUG] [Thread-170497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:17:52.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:17:52.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-04-11T13:17: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-04-11T13:17:52.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:17:52.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:17:52.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:17:52.303 [DEBUG] [Thread-170497] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:17:57.387 [DEBUG] [Thread-170499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:00.571 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:00.573 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:07.172 [DEBUG] [Thread-170500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:12.451 [DEBUG] [Thread-170501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:22.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:18:22.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:18:22.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-04-11T13:18:23.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 18, 4), 0.034605, 99.7347, 0.0, 13.0936, 13.7123, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:18:23.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:18:04
2026-04-11T13:18:23.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:18:24.104 [DEBUG] [Thread-170502] [transport.py] [_log()] starting thread (client mode): 0xae5b7880
2026-04-11T13:18:24.105 [DEBUG] [Thread-170502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:18:24.124 [DEBUG] [Thread-170502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:18:24.124 [INFO] [Thread-170502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:18:24.126 [DEBUG] [Thread-170502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:18:24.126 [DEBUG] [Thread-170502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:18:24.126 [DEBUG] [Thread-170502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:18:24.126 [DEBUG] [Thread-170502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:24.126 [DEBUG] [Thread-170502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:24.126 [DEBUG] [Thread-170502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] client lang: <none>
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] server lang: <none>
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] kex follows: False
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] Compression: none
2026-04-11T13:18:24.127 [DEBUG] [Thread-170502] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:18:24.136 [DEBUG] [Thread-170502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:18:24.136 [DEBUG] [Thread-170502] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:18:24.137 [DEBUG] [Thread-170502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:18:24.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:18:24.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:18:24.139 [DEBUG] [Thread-170502] [transport.py] [_log()] userauth is OK
2026-04-11T13:18:24.139 [DEBUG] [Thread-170502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:18:24.139 [DEBUG] [Thread-170502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:18:24.139 [DEBUG] [Thread-170502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:18:24.139 [DEBUG] [Thread-170502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:18:24.158 [INFO] [Thread-170502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:18:24.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:18:24.773 [DEBUG] [Thread-170502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:18:24.773 [DEBUG] [Thread-170502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:18:24.774 [DEBUG] [Thread-170502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:18:24.814 [DEBUG] [Thread-170502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:18:24.814 [DEBUG] [Thread-170502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:18:24.818 [DEBUG] [Thread-170502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:18:24.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:18:24.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:18:24.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:18:24.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:18:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:18:24.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:18:24.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:18:24.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:18:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:18:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.470952 -999.00  +13.80   9.98     96  +13.30 1 3 1 3 1   888    0 0.54 2.29 ----- 12.3 10.0 43.0 13.3 17.0 0.3 16.9 -0.0 16.4 -0.3 16.7 0.9
2026-04-11T13:18:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:18:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:18:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.470952
2026-04-11T13:18:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:18:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:18:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:18:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:18:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:18:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:18:04', tmtdew=0.034605, humidity=99.7347, cloud=0.0, wind=13.0936, temperature=13.7123, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:18:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:18:24.845 [DEBUG] [Thread-170502] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:18:24.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:18:24.942 [DEBUG] [Thread-170505] [transport.py] [_log()] starting thread (client mode): 0xae5b7c70
2026-04-11T13:18:24.942 [DEBUG] [Thread-170505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:18:24.958 [DEBUG] [Thread-170505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:18:24.958 [INFO] [Thread-170505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:18:24.965 [DEBUG] [Thread-170505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] client lang: <none>
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] server lang: <none>
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] kex follows: False
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] Compression: none
2026-04-11T13:18:24.966 [DEBUG] [Thread-170505] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:18:25.023 [DEBUG] [Thread-170505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:18:25.023 [DEBUG] [Thread-170505] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:18:25.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:18:25.024 [DEBUG] [Thread-170505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:18:25.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:18:25.079 [DEBUG] [Thread-170505] [transport.py] [_log()] userauth is OK
2026-04-11T13:18:25.079 [DEBUG] [Thread-170505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:18:25.079 [DEBUG] [Thread-170505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:18:25.079 [DEBUG] [Thread-170505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:18:25.079 [DEBUG] [Thread-170505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:18:25.097 [INFO] [Thread-170505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:18:25.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:18:25.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:18:25.952 [DEBUG] [Thread-170505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:18:25.952 [DEBUG] [Thread-170505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:18:26.004 [DEBUG] [Thread-170505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:18:26.004 [DEBUG] [Thread-170505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:18:26.013 [DEBUG] [Thread-170505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:18:26.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:18:26.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:18: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-04-11T13:18:26.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:18:26.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:18:26.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:18:26.057 [DEBUG] [Thread-170505] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:18:27.489 [DEBUG] [Thread-170507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:42.544 [DEBUG] [Thread-170508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:18:56.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:18:56.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-04-11T13:18:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 18, 39), 0.05889, 99.5358, 0.0, 8.89416, 14.2905, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:18:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:18:39
2026-04-11T13:18:57.583 [DEBUG] [Thread-170509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:18:57.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:18:57.880 [DEBUG] [Thread-170510] [transport.py] [_log()] starting thread (client mode): 0xa795c520
2026-04-11T13:18:57.880 [DEBUG] [Thread-170510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:18:57.899 [DEBUG] [Thread-170510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:18:57.899 [INFO] [Thread-170510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:18:57.902 [DEBUG] [Thread-170510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] client lang: <none>
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] server lang: <none>
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] kex follows: False
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] Compression: none
2026-04-11T13:18:57.903 [DEBUG] [Thread-170510] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:18:57.916 [DEBUG] [Thread-170510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:18:57.916 [DEBUG] [Thread-170510] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:18:57.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:18:57.917 [DEBUG] [Thread-170510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:18:57.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:18:57.919 [DEBUG] [Thread-170510] [transport.py] [_log()] userauth is OK
2026-04-11T13:18:57.919 [DEBUG] [Thread-170510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:18:57.919 [DEBUG] [Thread-170510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:18:57.919 [DEBUG] [Thread-170510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:18:57.919 [DEBUG] [Thread-170510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:18:57.944 [INFO] [Thread-170510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:18:57.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:18:58.623 [DEBUG] [Thread-170510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:18:58.623 [DEBUG] [Thread-170510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:18:58.623 [DEBUG] [Thread-170510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:18:58.664 [DEBUG] [Thread-170510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:18:58.665 [DEBUG] [Thread-170510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:18:58.668 [DEBUG] [Thread-170510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:18:58.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:18:58.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:18:58.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:18:58.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:18:58.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:18:58.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:18:58.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:18:58.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:18:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:18:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.471299 -999.00  +13.80  10.77     96  +13.30 1 3 1 3 1   888    0 0.53 2.32 ----- 11.4 10.8 37.8 13.2 16.9 -0.0 16.9 0.1 16.5 -0.3 16.7 0.6
2026-04-11T13:18:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:18:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:18:58.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.471299
2026-04-11T13:18:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:18:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:18:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:18:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:18:58.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:18:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:18:39', tmtdew=0.05889, humidity=99.5358, cloud=0.0, wind=8.89416, temperature=14.2905, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:18:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:18:58.695 [DEBUG] [Thread-170510] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:18:58.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:18:58.787 [DEBUG] [Thread-170513] [transport.py] [_log()] starting thread (client mode): 0xae5e4430
2026-04-11T13:18:58.787 [DEBUG] [Thread-170513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:18:58.803 [DEBUG] [Thread-170513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:18:58.803 [INFO] [Thread-170513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:18:58.812 [DEBUG] [Thread-170513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:18:58.812 [DEBUG] [Thread-170513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:18:58.812 [DEBUG] [Thread-170513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:18:58.812 [DEBUG] [Thread-170513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:58.812 [DEBUG] [Thread-170513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] client lang: <none>
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] server lang: <none>
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] kex follows: False
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] Compression: none
2026-04-11T13:18:58.813 [DEBUG] [Thread-170513] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:18:58.871 [DEBUG] [Thread-170513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:18:58.872 [DEBUG] [Thread-170513] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:18:58.872 [DEBUG] [Thread-170513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:18:58.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:18:58.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:18:58.927 [DEBUG] [Thread-170513] [transport.py] [_log()] userauth is OK
2026-04-11T13:18:58.927 [DEBUG] [Thread-170513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:18:58.928 [DEBUG] [Thread-170513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:18:58.928 [DEBUG] [Thread-170513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:18:58.928 [DEBUG] [Thread-170513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:18:58.947 [INFO] [Thread-170513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:18:58.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:18:58.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:18:59.751 [DEBUG] [Thread-170513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:18:59.751 [DEBUG] [Thread-170513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:18:59.799 [DEBUG] [Thread-170513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:18:59.799 [DEBUG] [Thread-170513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:18:59.808 [DEBUG] [Thread-170513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:18:59.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:18:59.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-04-11T13:18:59.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-04-11T13:18:59.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:18:59.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:18:59.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:18:59.844 [DEBUG] [Thread-170513] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:19:00.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:19:00.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:19:07.217 [DEBUG] [Thread-170515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:19:12.621 [DEBUG] [Thread-170516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:19:27.686 [DEBUG] [Thread-170517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:19:29.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:19:29.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:19:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 19, 15), 0.029435, 99.7679, 0.0, 11.223, 13.7784, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:19:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:19:15
2026-04-11T13:19:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:19:31.707 [DEBUG] [Thread-170518] [transport.py] [_log()] starting thread (client mode): 0xae561900
2026-04-11T13:19:31.707 [DEBUG] [Thread-170518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:19:31.725 [DEBUG] [Thread-170518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:19:31.726 [INFO] [Thread-170518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:19:31.729 [DEBUG] [Thread-170518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] client lang: <none>
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] server lang: <none>
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] kex follows: False
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] Compression: none
2026-04-11T13:19:31.730 [DEBUG] [Thread-170518] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:19:31.748 [DEBUG] [Thread-170518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:19:31.749 [DEBUG] [Thread-170518] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:19:31.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:19:31.750 [DEBUG] [Thread-170518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:19:31.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:19:31.752 [DEBUG] [Thread-170518] [transport.py] [_log()] userauth is OK
2026-04-11T13:19:31.752 [DEBUG] [Thread-170518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:19:31.752 [DEBUG] [Thread-170518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:19:31.752 [DEBUG] [Thread-170518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:19:31.752 [DEBUG] [Thread-170518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:19:31.775 [INFO] [Thread-170518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:19:31.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:19:32.410 [DEBUG] [Thread-170518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:19:32.411 [DEBUG] [Thread-170518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:19:32.411 [DEBUG] [Thread-170518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:19:32.452 [DEBUG] [Thread-170518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:19:32.452 [DEBUG] [Thread-170518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:19:32.456 [DEBUG] [Thread-170518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:19:32.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:19:32.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:19:32.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:19:32.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:19:32.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:19:32.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:19:32.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:19:32.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:19:32.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:19:32.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.471646 -999.00  +13.90  12.66     96  +13.40 1 3 1 3 1   888    0 0.55 2.51 ----- 10.5 12.7 51.6 14.3 16.9 0.0 16.9 -0.5 16.5 -0.5 16.7 0.3
2026-04-11T13:19:32.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:19:32.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:19:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.471646
2026-04-11T13:19:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:19:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:19:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:19:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:19:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:19:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:19:15', tmtdew=0.029435, humidity=99.7679, cloud=0.0, wind=11.223, temperature=13.7784, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:19:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:19:32.485 [DEBUG] [Thread-170518] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:19:32.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:19:32.590 [DEBUG] [Thread-170521] [transport.py] [_log()] starting thread (client mode): 0xae561570
2026-04-11T13:19:32.590 [DEBUG] [Thread-170521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:19:32.605 [DEBUG] [Thread-170521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:19:32.605 [INFO] [Thread-170521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:19:32.612 [DEBUG] [Thread-170521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] client lang: <none>
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] server lang: <none>
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] kex follows: False
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] Compression: none
2026-04-11T13:19:32.613 [DEBUG] [Thread-170521] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:19:32.671 [DEBUG] [Thread-170521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:19:32.672 [DEBUG] [Thread-170521] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:19:32.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:19:32.673 [DEBUG] [Thread-170521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:19:32.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:19:32.727 [DEBUG] [Thread-170521] [transport.py] [_log()] userauth is OK
2026-04-11T13:19:32.727 [DEBUG] [Thread-170521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:19:32.727 [DEBUG] [Thread-170521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:19:32.727 [DEBUG] [Thread-170521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:19:32.727 [DEBUG] [Thread-170521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:19:32.745 [INFO] [Thread-170521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:19:32.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:19:32.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:19:33.572 [DEBUG] [Thread-170521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:19:33.572 [DEBUG] [Thread-170521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:19:33.620 [DEBUG] [Thread-170521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:19:33.620 [DEBUG] [Thread-170521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:19:33.629 [DEBUG] [Thread-170521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:19:33.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:19:33.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-04-11T13:19:33.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-04-11T13:19:33.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:19:33.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:19:33.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:19:33.666 [DEBUG] [Thread-170521] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:19:42.720 [DEBUG] [Thread-170523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:19:57.780 [DEBUG] [Thread-170524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:00.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:00.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:03.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:20:03.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:20:03.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-04-11T13:20:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 19, 50), 0.05374, 99.569, 0.0, 11.4343, 14.3236, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:20:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:19:50
2026-04-11T13:20:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:20:05.490 [DEBUG] [Thread-170525] [transport.py] [_log()] starting thread (client mode): 0xae562650
2026-04-11T13:20:05.490 [DEBUG] [Thread-170525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:20:05.510 [DEBUG] [Thread-170525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:20:05.510 [INFO] [Thread-170525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:20:05.514 [DEBUG] [Thread-170525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] client lang: <none>
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] server lang: <none>
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] kex follows: False
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] Compression: none
2026-04-11T13:20:05.515 [DEBUG] [Thread-170525] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:20:05.532 [DEBUG] [Thread-170525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:20:05.533 [DEBUG] [Thread-170525] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:20:05.533 [DEBUG] [Thread-170525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:20:05.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:20:05.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:20:05.536 [DEBUG] [Thread-170525] [transport.py] [_log()] userauth is OK
2026-04-11T13:20:05.536 [DEBUG] [Thread-170525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:20:05.537 [DEBUG] [Thread-170525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:20:05.537 [DEBUG] [Thread-170525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:20:05.537 [DEBUG] [Thread-170525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:20:05.555 [INFO] [Thread-170525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:20:05.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:20:07.257 [DEBUG] [Thread-170527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:10.460 [DEBUG] [Thread-170525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:20:10.460 [DEBUG] [Thread-170525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:20:10.461 [DEBUG] [Thread-170525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:20:10.501 [DEBUG] [Thread-170525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:20:10.502 [DEBUG] [Thread-170525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:20:10.505 [DEBUG] [Thread-170525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:20:10.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:20:10.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:20:10.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:20:10.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:20:10.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:20:10.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:20:10.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:20:10.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:20:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:20:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.471993 -999.00  +13.90  12.61     96  +13.40 1 3 1 3 1   888    0 0.54 2.45 ----- 12.1 12.6 67.0 13.8 16.9 -0.0 16.9 -0.6 16.4 0.2 16.7 -0.3
2026-04-11T13:20:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:20:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:20:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.471993
2026-04-11T13:20:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:20:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:20:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:20:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:20:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:20:10.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:19:50', tmtdew=0.05374, humidity=99.569, cloud=0.0, wind=11.4343, temperature=14.3236, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:19:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:20:10.533 [DEBUG] [Thread-170525] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:20:10.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:20:10.625 [DEBUG] [Thread-170529] [transport.py] [_log()] starting thread (client mode): 0xae560d60
2026-04-11T13:20:10.626 [DEBUG] [Thread-170529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:20:10.640 [DEBUG] [Thread-170529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:20:10.640 [INFO] [Thread-170529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] client lang: <none>
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] server lang: <none>
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] kex follows: False
2026-04-11T13:20:10.648 [DEBUG] [Thread-170529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:20:10.649 [DEBUG] [Thread-170529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:20:10.649 [DEBUG] [Thread-170529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:20:10.649 [DEBUG] [Thread-170529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:20:10.649 [DEBUG] [Thread-170529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:20:10.649 [DEBUG] [Thread-170529] [transport.py] [_log()] Compression: none
2026-04-11T13:20:10.649 [DEBUG] [Thread-170529] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:20:10.706 [DEBUG] [Thread-170529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:20:10.707 [DEBUG] [Thread-170529] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:20:10.708 [DEBUG] [Thread-170529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:20:10.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:20:10.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:20:10.763 [DEBUG] [Thread-170529] [transport.py] [_log()] userauth is OK
2026-04-11T13:20:10.763 [DEBUG] [Thread-170529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:20:10.763 [DEBUG] [Thread-170529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:20:10.764 [DEBUG] [Thread-170529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:20:10.764 [DEBUG] [Thread-170529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:20:10.782 [INFO] [Thread-170529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:20:10.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:20:10.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:20:11.580 [DEBUG] [Thread-170529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:20:11.581 [DEBUG] [Thread-170529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:20:11.628 [DEBUG] [Thread-170529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:20:11.629 [DEBUG] [Thread-170529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:20:11.639 [DEBUG] [Thread-170529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:20:11.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:20:11.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-04-11T13:20:11.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-04-11T13:20:11.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:20:11.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:20:11.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:20:11.678 [DEBUG] [Thread-170529] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:20:12.817 [DEBUG] [Thread-170531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:27.867 [DEBUG] [Thread-170532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:20:41.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:20: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-04-11T13:20:42.905 [DEBUG] [Thread-170533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:20:43.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 20, 26), 0.053735, 99.9337, 0.0, 10.5174, 13.8784, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:20:43.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:20:26
2026-04-11T13:20:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:20:43.607 [DEBUG] [Thread-170534] [transport.py] [_log()] starting thread (client mode): 0xae563b20
2026-04-11T13:20:43.607 [DEBUG] [Thread-170534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:20:43.628 [DEBUG] [Thread-170534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:20:43.628 [INFO] [Thread-170534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] client lang: <none>
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] server lang: <none>
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] kex follows: False
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:20:43.631 [DEBUG] [Thread-170534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:20:43.632 [DEBUG] [Thread-170534] [transport.py] [_log()] Compression: none
2026-04-11T13:20:43.632 [DEBUG] [Thread-170534] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:20:43.646 [DEBUG] [Thread-170534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:20:43.646 [DEBUG] [Thread-170534] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:20:43.647 [DEBUG] [Thread-170534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:20:43.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:20:43.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:20:43.690 [DEBUG] [Thread-170534] [transport.py] [_log()] userauth is OK
2026-04-11T13:20:43.691 [DEBUG] [Thread-170534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:20:43.691 [DEBUG] [Thread-170534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:20:43.691 [DEBUG] [Thread-170534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:20:43.691 [DEBUG] [Thread-170534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:20:43.712 [INFO] [Thread-170534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:20:43.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:20:44.306 [DEBUG] [Thread-170534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:20:44.306 [DEBUG] [Thread-170534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:20:44.307 [DEBUG] [Thread-170534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:20:44.347 [DEBUG] [Thread-170534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:20:44.347 [DEBUG] [Thread-170534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:20:44.351 [DEBUG] [Thread-170534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:20:44.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:20:44.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:20:44.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:20:44.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:20:44.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:20:44.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:20:44.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:20:44.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:20:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:20:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.472340 -999.00  +13.90   9.73     96  +13.40 1 3 1 3 1   888    0 0.54 2.35 ----- 11.2 9.7 66.2 12.6 16.8 -0.3 16.8 -0.6 16.4 -1.1 16.7 0.0
2026-04-11T13:20:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:20:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:20:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.472340
2026-04-11T13:20:44.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:20:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:20:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:20:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:20:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:20:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:20:26', tmtdew=0.053735, humidity=99.9337, cloud=0.0, wind=10.5174, temperature=13.8784, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:20:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:20:44.379 [DEBUG] [Thread-170534] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:20:44.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:20:44.471 [DEBUG] [Thread-170537] [transport.py] [_log()] starting thread (client mode): 0xa795c550
2026-04-11T13:20:44.471 [DEBUG] [Thread-170537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:20:44.487 [DEBUG] [Thread-170537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:20:44.487 [INFO] [Thread-170537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] client lang: <none>
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] server lang: <none>
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] kex follows: False
2026-04-11T13:20:44.495 [DEBUG] [Thread-170537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:20:44.496 [DEBUG] [Thread-170537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:20:44.496 [DEBUG] [Thread-170537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:20:44.496 [DEBUG] [Thread-170537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:20:44.496 [DEBUG] [Thread-170537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:20:44.496 [DEBUG] [Thread-170537] [transport.py] [_log()] Compression: none
2026-04-11T13:20:44.496 [DEBUG] [Thread-170537] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:20:44.555 [DEBUG] [Thread-170537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:20:44.556 [DEBUG] [Thread-170537] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:20:44.556 [DEBUG] [Thread-170537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:20:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:20:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:20:44.611 [DEBUG] [Thread-170537] [transport.py] [_log()] userauth is OK
2026-04-11T13:20:44.611 [DEBUG] [Thread-170537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:20:44.611 [DEBUG] [Thread-170537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:20:44.611 [DEBUG] [Thread-170537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:20:44.611 [DEBUG] [Thread-170537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:20:44.632 [INFO] [Thread-170537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:20:44.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:20:44.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:20:45.466 [DEBUG] [Thread-170537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:20:45.467 [DEBUG] [Thread-170537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:20:45.516 [DEBUG] [Thread-170537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:20:45.516 [DEBUG] [Thread-170537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:20:45.525 [DEBUG] [Thread-170537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:20:45.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:20:45.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:20:45.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-04-11T13:20:45.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:20:45.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:20:45.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:20:45.562 [DEBUG] [Thread-170537] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:20:57.939 [DEBUG] [Thread-170539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:00.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:00.999 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:07.301 [DEBUG] [Thread-170540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:12.994 [DEBUG] [Thread-170541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:21:15.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:21:15.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-04-11T13:21:16.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 21, 1), 0.079435, 99.7679, 0.0, 11.6464, 13.8784, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:21:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:21:01
2026-04-11T13:21:17.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:21:17.363 [DEBUG] [Thread-170542] [transport.py] [_log()] starting thread (client mode): 0xb0fea200
2026-04-11T13:21:17.363 [DEBUG] [Thread-170542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:21:17.384 [DEBUG] [Thread-170542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:21:17.384 [INFO] [Thread-170542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] client lang: <none>
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] server lang: <none>
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] kex follows: False
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] Compression: none
2026-04-11T13:21:17.387 [DEBUG] [Thread-170542] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:21:17.404 [DEBUG] [Thread-170542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:21:17.405 [DEBUG] [Thread-170542] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:21:17.405 [DEBUG] [Thread-170542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:21:17.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:21:17.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:21:17.454 [DEBUG] [Thread-170542] [transport.py] [_log()] userauth is OK
2026-04-11T13:21:17.454 [DEBUG] [Thread-170542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:21:17.455 [DEBUG] [Thread-170542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:21:17.455 [DEBUG] [Thread-170542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:21:17.455 [DEBUG] [Thread-170542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:21:17.487 [INFO] [Thread-170542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:21:17.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:21:18.114 [DEBUG] [Thread-170542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:21:18.114 [DEBUG] [Thread-170542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:21:18.114 [DEBUG] [Thread-170542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:21:18.156 [DEBUG] [Thread-170542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:21:18.156 [DEBUG] [Thread-170542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:21:18.158 [DEBUG] [Thread-170542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:21:18.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:21:18.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:21:18.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:21:18.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:21:18.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:21:18.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:21:18.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:21:18.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:21:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:21:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.473035 -999.00  +13.90   9.17     96  +13.40 1 3 1 3 1   888    0 0.55 2.51 ----- 8.8 9.2 63.2 12.2 16.6 -0.9 16.7 -0.6 16.3 -1.3 16.5 -0.5
2026-04-11T13:21:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:21:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:21:18.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.473035
2026-04-11T13:21:18.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:21:18.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:21:18.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:21:18.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:21:18.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:21:18.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:21:01', tmtdew=0.079435, humidity=99.7679, cloud=0.0, wind=11.6464, temperature=13.8784, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:21:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:21:18.180 [DEBUG] [Thread-170542] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:21:18.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:21:18.277 [DEBUG] [Thread-170545] [transport.py] [_log()] starting thread (client mode): 0xa79b4280
2026-04-11T13:21:18.277 [DEBUG] [Thread-170545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:21:18.292 [DEBUG] [Thread-170545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:21:18.292 [INFO] [Thread-170545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] client lang: <none>
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] server lang: <none>
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] kex follows: False
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] Compression: none
2026-04-11T13:21:18.300 [DEBUG] [Thread-170545] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:21:18.357 [DEBUG] [Thread-170545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:21:18.357 [DEBUG] [Thread-170545] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:21:18.357 [DEBUG] [Thread-170545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:21:18.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:21:18.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:21:18.415 [DEBUG] [Thread-170545] [transport.py] [_log()] userauth is OK
2026-04-11T13:21:18.416 [DEBUG] [Thread-170545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:21:18.416 [DEBUG] [Thread-170545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:21:18.416 [DEBUG] [Thread-170545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:21:18.416 [DEBUG] [Thread-170545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:21:18.438 [INFO] [Thread-170545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:21:18.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:21:18.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:21:19.273 [DEBUG] [Thread-170545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:21:19.273 [DEBUG] [Thread-170545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:21:19.322 [DEBUG] [Thread-170545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:21:19.322 [DEBUG] [Thread-170545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:21:19.331 [DEBUG] [Thread-170545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:21:19.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:21:19.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-04-11T13:21:19.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-04-11T13:21:19.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:21:19.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:21:19.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:21:19.370 [DEBUG] [Thread-170545] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:21:28.030 [DEBUG] [Thread-170547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:43.078 [DEBUG] [Thread-170548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:21:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:21:49.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:21:49.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-04-11T13:21:50.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 21, 36), 0.06403, 99.5026, 0.0, 11.2932, 14.2905, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:21:50.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:21:36
2026-04-11T13:21:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:21:51.205 [DEBUG] [Thread-170549] [transport.py] [_log()] starting thread (client mode): 0xb0feadd0
2026-04-11T13:21:51.206 [DEBUG] [Thread-170549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:21:51.222 [DEBUG] [Thread-170549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:21:51.222 [INFO] [Thread-170549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] client lang: <none>
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] server lang: <none>
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] kex follows: False
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] Compression: none
2026-04-11T13:21:51.224 [DEBUG] [Thread-170549] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:21:51.236 [DEBUG] [Thread-170549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:21:51.236 [DEBUG] [Thread-170549] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:21:51.237 [DEBUG] [Thread-170549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:21:51.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:21:51.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:21:51.240 [DEBUG] [Thread-170549] [transport.py] [_log()] userauth is OK
2026-04-11T13:21:51.240 [DEBUG] [Thread-170549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:21:51.241 [DEBUG] [Thread-170549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:21:51.241 [DEBUG] [Thread-170549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:21:51.241 [DEBUG] [Thread-170549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:21:51.266 [INFO] [Thread-170549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:21:51.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:21:51.852 [DEBUG] [Thread-170549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:21:51.852 [DEBUG] [Thread-170549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:21:51.853 [DEBUG] [Thread-170549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:21:51.893 [DEBUG] [Thread-170549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:21:51.893 [DEBUG] [Thread-170549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:21:51.896 [DEBUG] [Thread-170549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:21:51.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:21:51.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:21:51.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:21:51.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:21:51.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:21:51.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:21:51.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:21:51.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:21:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:21:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.473382 -999.00  +13.90   8.11     96  +13.40 1 3 1 3 1   888    0 0.55 2.50 ----- 10.5 8.1 104.3 11.7 16.6 -1.4 16.6 -1.1 16.3 -1.2 16.5 -0.9
2026-04-11T13:21:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:21:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:21:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.473382
2026-04-11T13:21:51.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:21:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:21:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:21:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:21:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:21:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:21:36', tmtdew=0.06403, humidity=99.5026, cloud=0.0, wind=11.2932, temperature=14.2905, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:21:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:21:51.931 [DEBUG] [Thread-170549] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:21:52.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:21:52.024 [DEBUG] [Thread-170552] [transport.py] [_log()] starting thread (client mode): 0xae5e7880
2026-04-11T13:21:52.025 [DEBUG] [Thread-170552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:21:52.039 [DEBUG] [Thread-170552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:21:52.039 [INFO] [Thread-170552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] client lang: <none>
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] server lang: <none>
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] kex follows: False
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:21:52.047 [DEBUG] [Thread-170552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:21:52.048 [DEBUG] [Thread-170552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:21:52.048 [DEBUG] [Thread-170552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:21:52.048 [DEBUG] [Thread-170552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:21:52.048 [DEBUG] [Thread-170552] [transport.py] [_log()] Compression: none
2026-04-11T13:21:52.048 [DEBUG] [Thread-170552] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:21:52.111 [DEBUG] [Thread-170552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:21:52.111 [DEBUG] [Thread-170552] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:21:52.112 [DEBUG] [Thread-170552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:21:52.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:21:52.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:21:52.167 [DEBUG] [Thread-170552] [transport.py] [_log()] userauth is OK
2026-04-11T13:21:52.168 [DEBUG] [Thread-170552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:21:52.168 [DEBUG] [Thread-170552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:21:52.168 [DEBUG] [Thread-170552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:21:52.168 [DEBUG] [Thread-170552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:21:52.187 [INFO] [Thread-170552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:21:52.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:21:52.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:21:53.025 [DEBUG] [Thread-170552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:21:53.025 [DEBUG] [Thread-170552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:21:53.073 [DEBUG] [Thread-170552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:21:53.073 [DEBUG] [Thread-170552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:21:53.082 [DEBUG] [Thread-170552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:21:53.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:21:53.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-04-11T13:21:53.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:21:53.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:21:53.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:21:53.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:21:53.119 [DEBUG] [Thread-170552] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:21:58.110 [DEBUG] [Thread-170554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:01.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:01.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:07.337 [DEBUG] [Thread-170555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:13.164 [DEBUG] [Thread-170556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:23.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:22:23.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:22:23.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-04-11T13:22:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 22, 12), 0.07686, 99.7845, 0.0, 6.28236, 13.845, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:22:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:22:12
2026-04-11T13:22:24.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:22:24.951 [DEBUG] [Thread-170557] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-11T13:22:24.951 [DEBUG] [Thread-170557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:22:24.962 [DEBUG] [Thread-170557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:22:24.962 [INFO] [Thread-170557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] client lang: <none>
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] server lang: <none>
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] kex follows: False
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:22:24.963 [DEBUG] [Thread-170557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:22:24.964 [DEBUG] [Thread-170557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:22:24.964 [DEBUG] [Thread-170557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:22:24.964 [DEBUG] [Thread-170557] [transport.py] [_log()] Compression: none
2026-04-11T13:22:24.964 [DEBUG] [Thread-170557] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:22:24.972 [DEBUG] [Thread-170557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:22:24.972 [DEBUG] [Thread-170557] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:22:24.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:22:24.972 [DEBUG] [Thread-170557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:22:24.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:22:24.973 [DEBUG] [Thread-170557] [transport.py] [_log()] userauth is OK
2026-04-11T13:22:24.973 [DEBUG] [Thread-170557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:22:24.973 [DEBUG] [Thread-170557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:22:24.973 [DEBUG] [Thread-170557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:22:24.973 [DEBUG] [Thread-170557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:22:24.986 [INFO] [Thread-170557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:22:24.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:22:25.591 [DEBUG] [Thread-170557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:22:25.592 [DEBUG] [Thread-170557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:22:25.592 [DEBUG] [Thread-170557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:22:25.633 [DEBUG] [Thread-170557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:22:25.633 [DEBUG] [Thread-170557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:22:25.640 [DEBUG] [Thread-170557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:22:25.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:22:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:22:25.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:22:25.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:22:25.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:22:25.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:22:25.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:22:25.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:22:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:22:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.473729 -999.00  +13.90  10.09     96  +13.30 1 3 1 3 1   888    0 0.57 2.98 ----- 9.9 10.1 55.6 11.9 16.5 -1.2 16.6 -0.9 16.2 -1.3 16.4 -0.4
2026-04-11T13:22:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:22:25.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:22:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.473729
2026-04-11T13:22:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:22:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:22:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:22:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:22:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:22:25.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:22:12', tmtdew=0.07686, humidity=99.7845, cloud=0.0, wind=6.28236, temperature=13.845, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:22:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:22:25.663 [DEBUG] [Thread-170557] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:22:25.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:22:25.761 [DEBUG] [Thread-170560] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-11T13:22:25.761 [DEBUG] [Thread-170560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:22:25.776 [DEBUG] [Thread-170560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:22:25.776 [INFO] [Thread-170560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:22:25.784 [DEBUG] [Thread-170560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:22:25.784 [DEBUG] [Thread-170560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:22:25.784 [DEBUG] [Thread-170560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:22:25.784 [DEBUG] [Thread-170560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] client lang: <none>
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] server lang: <none>
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] kex follows: False
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:22:25.785 [DEBUG] [Thread-170560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:22:25.786 [DEBUG] [Thread-170560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:22:25.786 [DEBUG] [Thread-170560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:22:25.786 [DEBUG] [Thread-170560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:22:25.786 [DEBUG] [Thread-170560] [transport.py] [_log()] Compression: none
2026-04-11T13:22:25.786 [DEBUG] [Thread-170560] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:22:25.843 [DEBUG] [Thread-170560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:22:25.844 [DEBUG] [Thread-170560] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:22:25.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:22:25.845 [DEBUG] [Thread-170560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:22:25.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:22:25.900 [DEBUG] [Thread-170560] [transport.py] [_log()] userauth is OK
2026-04-11T13:22:25.901 [DEBUG] [Thread-170560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:22:25.901 [DEBUG] [Thread-170560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:22:25.901 [DEBUG] [Thread-170560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:22:25.902 [DEBUG] [Thread-170560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:22:25.920 [INFO] [Thread-170560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:22:25.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:22:25.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:22:26.754 [DEBUG] [Thread-170560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:22:26.754 [DEBUG] [Thread-170560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:22:26.802 [DEBUG] [Thread-170560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:22:26.802 [DEBUG] [Thread-170560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:22:26.812 [DEBUG] [Thread-170560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:22:26.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:22:26.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:22:26.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:22:26.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:22:26.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:22:26.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:22:26.848 [DEBUG] [Thread-170560] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:22:28.200 [DEBUG] [Thread-170562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:43.249 [DEBUG] [Thread-170563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:56.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:22:56.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:22:56.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:22:58.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 22, 47), 0.04857, 99.6021, 0.0, 14.539, 14.3899, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:22:58.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:22:47
2026-04-11T13:22:58.293 [DEBUG] [Thread-170564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:22:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:22:58.610 [DEBUG] [Thread-170565] [transport.py] [_log()] starting thread (client mode): 0xae561600
2026-04-11T13:22:58.611 [DEBUG] [Thread-170565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:22:58.633 [DEBUG] [Thread-170565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:22:58.633 [INFO] [Thread-170565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:22:58.634 [DEBUG] [Thread-170565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:22:58.635 [DEBUG] [Thread-170565] [transport.py] [_log()] client lang: <none>
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] server lang: <none>
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] kex follows: False
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] Compression: none
2026-04-11T13:22:58.636 [DEBUG] [Thread-170565] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:22:58.649 [DEBUG] [Thread-170565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:22:58.649 [DEBUG] [Thread-170565] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:22:58.650 [DEBUG] [Thread-170565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:22:58.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:22:58.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:22:58.653 [DEBUG] [Thread-170565] [transport.py] [_log()] userauth is OK
2026-04-11T13:22:58.653 [DEBUG] [Thread-170565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:22:58.654 [DEBUG] [Thread-170565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:22:58.654 [DEBUG] [Thread-170565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:22:58.654 [DEBUG] [Thread-170565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:22:58.679 [INFO] [Thread-170565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:22:58.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:22:59.342 [DEBUG] [Thread-170565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:22:59.342 [DEBUG] [Thread-170565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:22:59.343 [DEBUG] [Thread-170565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:22:59.384 [DEBUG] [Thread-170565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:22:59.384 [DEBUG] [Thread-170565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:22:59.388 [DEBUG] [Thread-170565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:22:59.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:22:59.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:22:59.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:22:59.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:22:59.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:22:59.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:22:59.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:22:59.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:22:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:22:59.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.474077 -999.00  +13.90   9.37     96  +13.30 1 3 1 3 1   888    0 0.59 3.43 ----- 10.0 9.4 40.0 11.5 16.5 -0.8 16.5 -0.7 16.2 -1.4 16.5 -0.5
2026-04-11T13:22:59.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:22:59.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:22:59.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.474077
2026-04-11T13:22:59.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:22:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:22:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:22:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:22:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:22:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:22:47', tmtdew=0.04857, humidity=99.6021, cloud=0.0, wind=14.539, temperature=14.3899, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:22:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:22:59.416 [DEBUG] [Thread-170565] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:22:59.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:22:59.511 [DEBUG] [Thread-170568] [transport.py] [_log()] starting thread (client mode): 0xa795d000
2026-04-11T13:22:59.511 [DEBUG] [Thread-170568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:22:59.531 [DEBUG] [Thread-170568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:22:59.531 [INFO] [Thread-170568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] client lang: <none>
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] server lang: <none>
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] kex follows: False
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:22:59.539 [DEBUG] [Thread-170568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:22:59.540 [DEBUG] [Thread-170568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:22:59.540 [DEBUG] [Thread-170568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:22:59.540 [DEBUG] [Thread-170568] [transport.py] [_log()] Compression: none
2026-04-11T13:22:59.540 [DEBUG] [Thread-170568] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:22:59.606 [DEBUG] [Thread-170568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:22:59.606 [DEBUG] [Thread-170568] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:22:59.607 [DEBUG] [Thread-170568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:22:59.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:22:59.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:22:59.663 [DEBUG] [Thread-170568] [transport.py] [_log()] userauth is OK
2026-04-11T13:22:59.663 [DEBUG] [Thread-170568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:22:59.663 [DEBUG] [Thread-170568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:22:59.663 [DEBUG] [Thread-170568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:22:59.663 [DEBUG] [Thread-170568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:22:59.681 [INFO] [Thread-170568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:22:59.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:22:59.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:23:00.482 [DEBUG] [Thread-170568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:23:00.483 [DEBUG] [Thread-170568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:23:00.531 [DEBUG] [Thread-170568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:23:00.532 [DEBUG] [Thread-170568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:23:00.541 [DEBUG] [Thread-170568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:23:00.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:23:00.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-04-11T13:23:00.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-04-11T13:23:00.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:23:00.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:23:00.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:23:00.583 [DEBUG] [Thread-170568] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:23:01.288 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:23:01.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:23:07.371 [DEBUG] [Thread-170570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:23:13.333 [DEBUG] [Thread-170571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:23:28.387 [DEBUG] [Thread-170572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:23:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:23:30.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:23:30.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-04-11T13:23:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 23, 23), 0.082015, 99.7513, 0.0, 14.1689, 13.7952, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:23:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:23:23
2026-04-11T13:23:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:23:32.436 [DEBUG] [Thread-170573] [transport.py] [_log()] starting thread (client mode): 0xb0f41930
2026-04-11T13:23:32.436 [DEBUG] [Thread-170573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:23:32.456 [DEBUG] [Thread-170573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:23:32.456 [INFO] [Thread-170573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] client lang: <none>
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] server lang: <none>
2026-04-11T13:23:32.459 [DEBUG] [Thread-170573] [transport.py] [_log()] kex follows: False
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] Compression: none
2026-04-11T13:23:32.460 [DEBUG] [Thread-170573] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:23:32.473 [DEBUG] [Thread-170573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:23:32.473 [DEBUG] [Thread-170573] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:23:32.474 [DEBUG] [Thread-170573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:23:32.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:23:32.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:23:32.476 [DEBUG] [Thread-170573] [transport.py] [_log()] userauth is OK
2026-04-11T13:23:32.476 [DEBUG] [Thread-170573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:23:32.476 [DEBUG] [Thread-170573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:23:32.476 [DEBUG] [Thread-170573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:23:32.476 [DEBUG] [Thread-170573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:23:32.495 [INFO] [Thread-170573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:23:32.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:23:33.094 [DEBUG] [Thread-170573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:23:33.095 [DEBUG] [Thread-170573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:23:33.095 [DEBUG] [Thread-170573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:23:33.137 [DEBUG] [Thread-170573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:23:33.137 [DEBUG] [Thread-170573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:23:33.140 [DEBUG] [Thread-170573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:23:33.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:23:33.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:23:33.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:23:33.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:23:33.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:23:33.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:23:33.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:23:33.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:23:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:23:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.474424 -999.00  +13.80  10.45     96  +13.30 1 3 1 3 1   888    0 0.58 3.41 ----- 8.3 10.4 54.8 10.9 16.4 -0.8 16.4 -1.0 16.1 -1.2 16.4 -0.4
2026-04-11T13:23:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:23:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:23:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.474424
2026-04-11T13:23:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:23:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:23:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:23:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:23:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:23:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:23:23', tmtdew=0.082015, humidity=99.7513, cloud=0.0, wind=14.1689, temperature=13.7952, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:23:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:23:33.165 [DEBUG] [Thread-170573] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:23:33.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:23:33.255 [DEBUG] [Thread-170576] [transport.py] [_log()] starting thread (client mode): 0xa795fa00
2026-04-11T13:23:33.255 [DEBUG] [Thread-170576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:23:33.270 [DEBUG] [Thread-170576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:23:33.270 [INFO] [Thread-170576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] client lang: <none>
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] server lang: <none>
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] kex follows: False
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:23:33.278 [DEBUG] [Thread-170576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:23:33.279 [DEBUG] [Thread-170576] [transport.py] [_log()] Compression: none
2026-04-11T13:23:33.279 [DEBUG] [Thread-170576] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:23:33.334 [DEBUG] [Thread-170576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:23:33.335 [DEBUG] [Thread-170576] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:23:33.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:23:33.336 [DEBUG] [Thread-170576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:23:33.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:23:33.391 [DEBUG] [Thread-170576] [transport.py] [_log()] userauth is OK
2026-04-11T13:23:33.391 [DEBUG] [Thread-170576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:23:33.391 [DEBUG] [Thread-170576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:23:33.392 [DEBUG] [Thread-170576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:23:33.392 [DEBUG] [Thread-170576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:23:33.416 [INFO] [Thread-170576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:23:33.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:23:33.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:23:34.206 [DEBUG] [Thread-170576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:23:34.206 [DEBUG] [Thread-170576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:23:34.254 [DEBUG] [Thread-170576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:23:34.254 [DEBUG] [Thread-170576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:23:34.264 [DEBUG] [Thread-170576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:23:34.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:23:34.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-04-11T13:23:34.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:23:34.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:23:34.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:23:34.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:23:34.300 [DEBUG] [Thread-170576] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:23:43.424 [DEBUG] [Thread-170578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:23:58.476 [DEBUG] [Thread-170579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:01.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:01.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:04.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:24:04.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:24:04.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:24:05.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 23, 58), 0.02686, 99.7845, 0.0, 10.9408, 13.895, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:24:05.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:23:58
2026-04-11T13:24:05.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:24:06.141 [DEBUG] [Thread-170580] [transport.py] [_log()] starting thread (client mode): 0xb0fea800
2026-04-11T13:24:06.141 [DEBUG] [Thread-170580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:24:06.162 [DEBUG] [Thread-170580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:24:06.162 [INFO] [Thread-170580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:24:06.165 [DEBUG] [Thread-170580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] client lang: <none>
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] server lang: <none>
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] kex follows: False
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:24:06.166 [DEBUG] [Thread-170580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:24:06.167 [DEBUG] [Thread-170580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:24:06.167 [DEBUG] [Thread-170580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:24:06.167 [DEBUG] [Thread-170580] [transport.py] [_log()] Compression: none
2026-04-11T13:24:06.167 [DEBUG] [Thread-170580] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:24:06.185 [DEBUG] [Thread-170580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:24:06.185 [DEBUG] [Thread-170580] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:24:06.186 [DEBUG] [Thread-170580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:24:06.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:24:06.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:24:06.189 [DEBUG] [Thread-170580] [transport.py] [_log()] userauth is OK
2026-04-11T13:24:06.189 [DEBUG] [Thread-170580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:24:06.189 [DEBUG] [Thread-170580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:24:06.189 [DEBUG] [Thread-170580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:24:06.189 [DEBUG] [Thread-170580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:24:06.225 [INFO] [Thread-170580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:24:06.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:24:06.861 [DEBUG] [Thread-170580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:24:06.861 [DEBUG] [Thread-170580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:24:06.862 [DEBUG] [Thread-170580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:24:06.902 [DEBUG] [Thread-170580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:24:06.902 [DEBUG] [Thread-170580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:24:06.906 [DEBUG] [Thread-170580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:24:06.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:24:06.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:24:06.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:24:06.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:24:06.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:24:06.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:24:06.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:24:06.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:24:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:24:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.474771 -999.00  +13.90   9.75     96  +13.30 1 3 1 3 1   888    0 0.59 3.41 ----- 10.2 9.8 35.4 11.0 16.4 -0.6 16.4 -0.8 16.1 -0.8 16.4 -0.2
2026-04-11T13:24:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:24:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:24:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.474771
2026-04-11T13:24:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:24:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:24:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:24:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:24:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:24:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:23:58', tmtdew=0.02686, humidity=99.7845, cloud=0.0, wind=10.9408, temperature=13.895, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:23:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:24:06.935 [DEBUG] [Thread-170580] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:24:07.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:24:07.031 [DEBUG] [Thread-170583] [transport.py] [_log()] starting thread (client mode): 0xb0f43c10
2026-04-11T13:24:07.032 [DEBUG] [Thread-170583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:24:07.046 [DEBUG] [Thread-170583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:24:07.047 [INFO] [Thread-170583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:24:07.054 [DEBUG] [Thread-170583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:24:07.054 [DEBUG] [Thread-170583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] client lang: <none>
2026-04-11T13:24:07.055 [DEBUG] [Thread-170583] [transport.py] [_log()] server lang: <none>
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] kex follows: False
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] Compression: none
2026-04-11T13:24:07.056 [DEBUG] [Thread-170583] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:24:07.111 [DEBUG] [Thread-170583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:24:07.112 [DEBUG] [Thread-170583] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:24:07.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:24:07.113 [DEBUG] [Thread-170583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:24:07.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:24:07.167 [DEBUG] [Thread-170583] [transport.py] [_log()] userauth is OK
2026-04-11T13:24:07.168 [DEBUG] [Thread-170583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:24:07.168 [DEBUG] [Thread-170583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:24:07.168 [DEBUG] [Thread-170583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:24:07.168 [DEBUG] [Thread-170583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:24:07.186 [INFO] [Thread-170583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:24:07.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:24:07.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:24:07.415 [DEBUG] [Thread-170585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:08.029 [DEBUG] [Thread-170583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:24:08.030 [DEBUG] [Thread-170583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:24:08.078 [DEBUG] [Thread-170583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:24:08.078 [DEBUG] [Thread-170583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:24:08.092 [DEBUG] [Thread-170583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:24:08.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:24:08.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:24:08.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:24:08.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:24:08.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:24:08.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:24:08.125 [DEBUG] [Thread-170583] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:24:13.517 [DEBUG] [Thread-170586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:28.584 [DEBUG] [Thread-170587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:24:38.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:24:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:24:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 23, 58), 0.02686, 99.7845, 0.0, 10.9408, 13.895, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:24:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:23:58
2026-04-11T13:24:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:24:39.965 [DEBUG] [Thread-170588] [transport.py] [_log()] starting thread (client mode): 0xb0feb910
2026-04-11T13:24:39.966 [DEBUG] [Thread-170588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:24:39.987 [DEBUG] [Thread-170588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:24:39.987 [INFO] [Thread-170588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] client lang: <none>
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] server lang: <none>
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] kex follows: False
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:24:39.990 [DEBUG] [Thread-170588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:24:39.991 [DEBUG] [Thread-170588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:24:39.991 [DEBUG] [Thread-170588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:24:39.991 [DEBUG] [Thread-170588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:24:39.991 [DEBUG] [Thread-170588] [transport.py] [_log()] Compression: none
2026-04-11T13:24:39.991 [DEBUG] [Thread-170588] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:24:40.014 [DEBUG] [Thread-170588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:24:40.015 [DEBUG] [Thread-170588] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:24:40.016 [DEBUG] [Thread-170588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:24:40.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:24:40.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:24:40.019 [DEBUG] [Thread-170588] [transport.py] [_log()] userauth is OK
2026-04-11T13:24:40.019 [DEBUG] [Thread-170588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:24:40.020 [DEBUG] [Thread-170588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:24:40.020 [DEBUG] [Thread-170588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:24:40.020 [DEBUG] [Thread-170588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:24:40.038 [INFO] [Thread-170588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:24:40.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:24:40.681 [DEBUG] [Thread-170588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:24:40.681 [DEBUG] [Thread-170588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:24:40.682 [DEBUG] [Thread-170588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:24:40.723 [DEBUG] [Thread-170588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:24:40.724 [DEBUG] [Thread-170588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:24:40.728 [DEBUG] [Thread-170588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:24:40.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:24:40.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:24:40.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:24:40.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:24:40.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:24:40.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:24:40.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:24:40.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:24:40.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:24:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.475118 -999.00  +13.90  13.03     96  +13.30 1 3 1 3 1   888    0 0.59 3.43 ----- 12.7 13.0 65.2 15.8 16.4 -0.8 16.4 -1.3 16.1 -0.8 16.3 -0.4
2026-04-11T13:24:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:24:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:24:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.475118
2026-04-11T13:24:40.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:24:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:24:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:24:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:24:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:24:40.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:23:58', tmtdew=0.02686, humidity=99.7845, cloud=0.0, wind=10.9408, temperature=13.895, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:24:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:24:40.766 [DEBUG] [Thread-170588] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:24:40.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:24:40.857 [DEBUG] [Thread-170591] [transport.py] [_log()] starting thread (client mode): 0xae5b3c40
2026-04-11T13:24:40.857 [DEBUG] [Thread-170591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:24:40.872 [DEBUG] [Thread-170591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:24:40.873 [INFO] [Thread-170591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:24:40.880 [DEBUG] [Thread-170591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:24:40.880 [DEBUG] [Thread-170591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] client lang: <none>
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] server lang: <none>
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] kex follows: False
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] Compression: none
2026-04-11T13:24:40.881 [DEBUG] [Thread-170591] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:24:40.939 [DEBUG] [Thread-170591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:24:40.940 [DEBUG] [Thread-170591] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:24:40.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:24:40.941 [DEBUG] [Thread-170591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:24:40.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:24:40.995 [DEBUG] [Thread-170591] [transport.py] [_log()] userauth is OK
2026-04-11T13:24:40.996 [DEBUG] [Thread-170591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:24:40.996 [DEBUG] [Thread-170591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:24:40.996 [DEBUG] [Thread-170591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:24:40.996 [DEBUG] [Thread-170591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:24:41.015 [INFO] [Thread-170591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:24:41.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:24:41.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:24:41.823 [DEBUG] [Thread-170591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:24:41.823 [DEBUG] [Thread-170591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:24:41.876 [DEBUG] [Thread-170591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:24:41.877 [DEBUG] [Thread-170591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:24:41.890 [DEBUG] [Thread-170591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:24:41.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:24:41.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-04-11T13:24:41.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-04-11T13:24:41.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:24:41.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:24:41.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:24:41.927 [DEBUG] [Thread-170591] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:24:43.620 [DEBUG] [Thread-170593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:24:58.670 [DEBUG] [Thread-170594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:01.571 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:01.573 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:07.449 [DEBUG] [Thread-170595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:11.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:25:11.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:25:11.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-04-11T13:25:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 24, 33), 0.0795, 99.4032, 0.0, 15.1387, 14.1247, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:25:13.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:24:33
2026-04-11T13:25:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:25:13.705 [DEBUG] [Thread-170596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:13.827 [DEBUG] [Thread-170597] [transport.py] [_log()] starting thread (client mode): 0xae5b3af0
2026-04-11T13:25:13.827 [DEBUG] [Thread-170597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:25:13.848 [DEBUG] [Thread-170597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:25:13.848 [INFO] [Thread-170597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:25:13.851 [DEBUG] [Thread-170597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:25:13.851 [DEBUG] [Thread-170597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] client lang: <none>
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] server lang: <none>
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] kex follows: False
2026-04-11T13:25:13.852 [DEBUG] [Thread-170597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:25:13.853 [DEBUG] [Thread-170597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:25:13.853 [DEBUG] [Thread-170597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:25:13.853 [DEBUG] [Thread-170597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:25:13.853 [DEBUG] [Thread-170597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:25:13.853 [DEBUG] [Thread-170597] [transport.py] [_log()] Compression: none
2026-04-11T13:25:13.853 [DEBUG] [Thread-170597] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:25:13.872 [DEBUG] [Thread-170597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:25:13.873 [DEBUG] [Thread-170597] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:25:13.873 [DEBUG] [Thread-170597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:25:13.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:25:13.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:25:13.875 [DEBUG] [Thread-170597] [transport.py] [_log()] userauth is OK
2026-04-11T13:25:13.875 [DEBUG] [Thread-170597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:25:13.875 [DEBUG] [Thread-170597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:25:13.875 [DEBUG] [Thread-170597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:25:13.875 [DEBUG] [Thread-170597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:25:13.892 [INFO] [Thread-170597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:25:13.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:25:21.123 [DEBUG] [Thread-170597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:25:21.123 [DEBUG] [Thread-170597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:25:21.124 [DEBUG] [Thread-170597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:25:21.164 [DEBUG] [Thread-170597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:25:21.164 [DEBUG] [Thread-170597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:25:21.168 [DEBUG] [Thread-170597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:25:21.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:25:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:25:21.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:25:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:25:21.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:25:21.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:25:21.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:25:21.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:25:21.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:25:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.475118 -999.00  +13.90  13.03     96  +13.30 1 3 1 3 1   888    0 0.59 3.43 ----- 12.7 13.0 65.2 15.8 16.4 -0.8 16.4 -1.3 16.1 -0.8 16.3 -0.4
2026-04-11T13:25:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:25:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:25:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.475118
2026-04-11T13:25:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:25:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:25:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:25:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:25:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:25:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:24:33', tmtdew=0.0795, humidity=99.4032, cloud=0.0, wind=15.1387, temperature=14.1247, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:24:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:25:21.270 [DEBUG] [Thread-170597] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:25:21.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:25:21.365 [DEBUG] [Thread-170600] [transport.py] [_log()] starting thread (client mode): 0xa79b7730
2026-04-11T13:25:21.365 [DEBUG] [Thread-170600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:25:21.379 [DEBUG] [Thread-170600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:25:21.379 [INFO] [Thread-170600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:25:21.387 [DEBUG] [Thread-170600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:25:21.387 [DEBUG] [Thread-170600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:25:21.387 [DEBUG] [Thread-170600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:25:21.387 [DEBUG] [Thread-170600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] client lang: <none>
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] server lang: <none>
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] kex follows: False
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] Compression: none
2026-04-11T13:25:21.388 [DEBUG] [Thread-170600] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:25:21.447 [DEBUG] [Thread-170600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:25:21.447 [DEBUG] [Thread-170600] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:25:21.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:25:21.449 [DEBUG] [Thread-170600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:25:21.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:25:21.503 [DEBUG] [Thread-170600] [transport.py] [_log()] userauth is OK
2026-04-11T13:25:21.503 [DEBUG] [Thread-170600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:25:21.504 [DEBUG] [Thread-170600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:25:21.504 [DEBUG] [Thread-170600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:25:21.504 [DEBUG] [Thread-170600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:25:21.528 [INFO] [Thread-170600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:25:21.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:25:21.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:25:22.331 [DEBUG] [Thread-170600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:25:22.331 [DEBUG] [Thread-170600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:25:22.378 [DEBUG] [Thread-170600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:25:22.378 [DEBUG] [Thread-170600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:25:22.386 [DEBUG] [Thread-170600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:25:22.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:25:22.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:25:22.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:25:22.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:25:22.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:25:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:25:22.420 [DEBUG] [Thread-170600] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:25:28.739 [DEBUG] [Thread-170602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:43.791 [DEBUG] [Thread-170603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:25:52.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:25:52.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:25:52.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-04-11T13:25:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 25, 44), 0.04336, 99.6353, 0.0, 15.1034, 14.5225, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:25:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:25:44
2026-04-11T13:25:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:25:54.248 [DEBUG] [Thread-170604] [transport.py] [_log()] starting thread (client mode): 0xae5b7160
2026-04-11T13:25:54.248 [DEBUG] [Thread-170604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:25:54.268 [DEBUG] [Thread-170604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:25:54.268 [INFO] [Thread-170604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] client lang: <none>
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] server lang: <none>
2026-04-11T13:25:54.272 [DEBUG] [Thread-170604] [transport.py] [_log()] kex follows: False
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] Compression: none
2026-04-11T13:25:54.273 [DEBUG] [Thread-170604] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:25:54.292 [DEBUG] [Thread-170604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:25:54.292 [DEBUG] [Thread-170604] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:25:54.293 [DEBUG] [Thread-170604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:25:54.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:25:54.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:25:54.295 [DEBUG] [Thread-170604] [transport.py] [_log()] userauth is OK
2026-04-11T13:25:54.295 [DEBUG] [Thread-170604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:25:54.295 [DEBUG] [Thread-170604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:25:54.295 [DEBUG] [Thread-170604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:25:54.295 [DEBUG] [Thread-170604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:25:54.319 [INFO] [Thread-170604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:25:54.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:25:55.107 [DEBUG] [Thread-170604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:25:55.108 [DEBUG] [Thread-170604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:25:55.108 [DEBUG] [Thread-170604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:25:55.148 [DEBUG] [Thread-170604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:25:55.148 [DEBUG] [Thread-170604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:25:55.151 [DEBUG] [Thread-170604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:25:55.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:25:55.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:25:55.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:25:55.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:25:55.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:25:55.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:25:55.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:25:55.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.475465 -999.00  +14.00  12.59     96  +13.50 1 3 1 3 1   888    0 0.60 3.54 ----- 11.5 12.6 54.6 17.8 16.4 -0.9 16.4 -0.6 16.0 -1.0 16.3 -0.1
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.475465
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:25:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:25:44', tmtdew=0.04336, humidity=99.6353, cloud=0.0, wind=15.1034, temperature=14.5225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:24:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:25:55.170 [DEBUG] [Thread-170604] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:25:55.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:25:55.252 [DEBUG] [Thread-170607] [transport.py] [_log()] starting thread (client mode): 0xae536b60
2026-04-11T13:25:55.252 [DEBUG] [Thread-170607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:25:55.266 [DEBUG] [Thread-170607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:25:55.266 [INFO] [Thread-170607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:25:55.274 [DEBUG] [Thread-170607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:25:55.274 [DEBUG] [Thread-170607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] client lang: <none>
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] server lang: <none>
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] kex follows: False
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] Compression: none
2026-04-11T13:25:55.275 [DEBUG] [Thread-170607] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:25:55.335 [DEBUG] [Thread-170607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:25:55.335 [DEBUG] [Thread-170607] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:25:55.336 [DEBUG] [Thread-170607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:25:55.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:25:55.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:25:55.392 [DEBUG] [Thread-170607] [transport.py] [_log()] userauth is OK
2026-04-11T13:25:55.392 [DEBUG] [Thread-170607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:25:55.392 [DEBUG] [Thread-170607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:25:55.392 [DEBUG] [Thread-170607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:25:55.393 [DEBUG] [Thread-170607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:25:55.413 [INFO] [Thread-170607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:25:55.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:25:55.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:25:56.235 [DEBUG] [Thread-170607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:25:56.235 [DEBUG] [Thread-170607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:25:56.283 [DEBUG] [Thread-170607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:25:56.283 [DEBUG] [Thread-170607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:25:56.292 [DEBUG] [Thread-170607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:25:56.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:25:56.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:25:56.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-04-11T13:25:56.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:25:56.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:25:56.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:25:56.329 [DEBUG] [Thread-170607] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:25:58.827 [DEBUG] [Thread-170609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:01.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:01.724 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:07.480 [DEBUG] [Thread-170610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:13.877 [DEBUG] [Thread-170611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:26:26.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:26:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:26:27.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 26, 20), 0.071675, 99.8176, 0.0, 12.8812, 13.9944, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:26:27.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:26:20
2026-04-11T13:26:28.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:26:28.182 [DEBUG] [Thread-170612] [transport.py] [_log()] starting thread (client mode): 0xb0fe9270
2026-04-11T13:26:28.182 [DEBUG] [Thread-170612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:26:28.206 [DEBUG] [Thread-170612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:26:28.206 [INFO] [Thread-170612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:26:28.210 [DEBUG] [Thread-170612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:26:28.211 [DEBUG] [Thread-170612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:26:28.211 [DEBUG] [Thread-170612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:26:28.211 [DEBUG] [Thread-170612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:26:28.211 [DEBUG] [Thread-170612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:26:28.211 [DEBUG] [Thread-170612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] client lang: <none>
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] server lang: <none>
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] kex follows: False
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] Compression: none
2026-04-11T13:26:28.212 [DEBUG] [Thread-170612] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:26:28.230 [DEBUG] [Thread-170612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:26:28.231 [DEBUG] [Thread-170612] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:26:28.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:26:28.231 [DEBUG] [Thread-170612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:26:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:26:28.234 [DEBUG] [Thread-170612] [transport.py] [_log()] userauth is OK
2026-04-11T13:26:28.234 [DEBUG] [Thread-170612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:26:28.234 [DEBUG] [Thread-170612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:26:28.234 [DEBUG] [Thread-170612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:26:28.234 [DEBUG] [Thread-170612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:26:28.257 [INFO] [Thread-170612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:26:28.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:26:28.915 [DEBUG] [Thread-170614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:29.061 [DEBUG] [Thread-170612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:26:29.062 [DEBUG] [Thread-170612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:26:29.062 [DEBUG] [Thread-170612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:26:29.103 [DEBUG] [Thread-170612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:26:29.103 [DEBUG] [Thread-170612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:26:29.106 [DEBUG] [Thread-170612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:26:29.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:26:29.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:26:29.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:26:29.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:26:29.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:26:29.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:26:29.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:26:29.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:26:29.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:26:29.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.476160 -999.00  +13.80  15.52     96  +13.20 1 3 1 3 1   888    0 0.62 4.37 ----- 17.5 15.5 37.6 18.8 16.3 -0.6 16.4 -0.7 16.0 -0.6 16.2 0.0
2026-04-11T13:26:29.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:26:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:26:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.476160
2026-04-11T13:26:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:26:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:26:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:26:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:26:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:26:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:26:20', tmtdew=0.071675, humidity=99.8176, cloud=0.0, wind=12.8812, temperature=13.9944, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:25:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:26:29.134 [DEBUG] [Thread-170612] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:26:29.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:26:29.227 [DEBUG] [Thread-170616] [transport.py] [_log()] starting thread (client mode): 0xae5b1ff0
2026-04-11T13:26:29.227 [DEBUG] [Thread-170616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:26:29.243 [DEBUG] [Thread-170616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:26:29.243 [INFO] [Thread-170616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:26:29.250 [DEBUG] [Thread-170616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] client lang: <none>
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] server lang: <none>
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] kex follows: False
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] Compression: none
2026-04-11T13:26:29.251 [DEBUG] [Thread-170616] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:26:29.307 [DEBUG] [Thread-170616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:26:29.307 [DEBUG] [Thread-170616] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:26:29.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:26:29.308 [DEBUG] [Thread-170616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:26:29.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:26:29.364 [DEBUG] [Thread-170616] [transport.py] [_log()] userauth is OK
2026-04-11T13:26:29.364 [DEBUG] [Thread-170616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:26:29.364 [DEBUG] [Thread-170616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:26:29.364 [DEBUG] [Thread-170616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:26:29.364 [DEBUG] [Thread-170616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:26:29.388 [INFO] [Thread-170616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:26:29.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:26:29.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:26:30.240 [DEBUG] [Thread-170616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:26:30.241 [DEBUG] [Thread-170616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:26:30.288 [DEBUG] [Thread-170616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:26:30.288 [DEBUG] [Thread-170616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:26:30.297 [DEBUG] [Thread-170616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:26:30.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:26:30.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:26:30.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:26:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:26:30.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:26:30.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:26:30.334 [DEBUG] [Thread-170616] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:26:43.955 [DEBUG] [Thread-170618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:26:59.011 [DEBUG] [Thread-170619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:27:00.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:27:00.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-04-11T13:27:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 26, 20), 0.071675, 99.8176, 0.0, 12.8812, 13.9944, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:27:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:26:20
2026-04-11T13:27:01.868 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:01.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:27:02.210 [DEBUG] [Thread-170620] [transport.py] [_log()] starting thread (client mode): 0xae5b2950
2026-04-11T13:27:02.210 [DEBUG] [Thread-170620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:27:02.224 [DEBUG] [Thread-170620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:27:02.224 [INFO] [Thread-170620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:27:02.227 [DEBUG] [Thread-170620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] client lang: <none>
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] server lang: <none>
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] kex follows: False
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] Compression: none
2026-04-11T13:27:02.228 [DEBUG] [Thread-170620] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:27:02.240 [DEBUG] [Thread-170620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:27:02.241 [DEBUG] [Thread-170620] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:27:02.241 [DEBUG] [Thread-170620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:27:02.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:27:02.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:27:02.243 [DEBUG] [Thread-170620] [transport.py] [_log()] userauth is OK
2026-04-11T13:27:02.243 [DEBUG] [Thread-170620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:27:02.243 [DEBUG] [Thread-170620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:27:02.243 [DEBUG] [Thread-170620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:27:02.243 [DEBUG] [Thread-170620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:27:02.280 [INFO] [Thread-170620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:27:02.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:27:02.887 [DEBUG] [Thread-170620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:27:02.887 [DEBUG] [Thread-170620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:27:02.888 [DEBUG] [Thread-170620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:27:02.928 [DEBUG] [Thread-170620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:27:02.929 [DEBUG] [Thread-170620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:27:02.932 [DEBUG] [Thread-170620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:27:02.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:27:02.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:27:02.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:27:02.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:27:02.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:27:02.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:27:02.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:27:02.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:27:02.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:27:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.476854 -999.00  +13.70  15.29     96  +13.10 1 3 1 3 1   888    0 0.66 5.72 ----- 14.6 15.3 55.2 20.2 16.2 -0.6 16.2 -0.7 15.8 -1.1 16.2 0.0
2026-04-11T13:27:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:27:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:27:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.476854
2026-04-11T13:27:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:27:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:27:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:27:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:27:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:27:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:26:20', tmtdew=0.071675, humidity=99.8176, cloud=0.0, wind=12.8812, temperature=13.9944, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:26:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:27:02.960 [DEBUG] [Thread-170620] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:27:03.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:27:03.054 [DEBUG] [Thread-170623] [transport.py] [_log()] starting thread (client mode): 0xae5b3f70
2026-04-11T13:27:03.054 [DEBUG] [Thread-170623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:27:03.069 [DEBUG] [Thread-170623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:27:03.069 [INFO] [Thread-170623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:03.077 [DEBUG] [Thread-170623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] client lang: <none>
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] server lang: <none>
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] kex follows: False
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:27:03.078 [DEBUG] [Thread-170623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:27:03.079 [DEBUG] [Thread-170623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:27:03.079 [DEBUG] [Thread-170623] [transport.py] [_log()] Compression: none
2026-04-11T13:27:03.079 [DEBUG] [Thread-170623] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:27:03.136 [DEBUG] [Thread-170623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:27:03.138 [DEBUG] [Thread-170623] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:27:03.138 [DEBUG] [Thread-170623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:27:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:27:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:27:03.196 [DEBUG] [Thread-170623] [transport.py] [_log()] userauth is OK
2026-04-11T13:27:03.196 [DEBUG] [Thread-170623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:27:03.196 [DEBUG] [Thread-170623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:27:03.196 [DEBUG] [Thread-170623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:27:03.196 [DEBUG] [Thread-170623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:27:03.214 [INFO] [Thread-170623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:27:03.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:27:03.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:27:04.068 [DEBUG] [Thread-170623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:27:04.068 [DEBUG] [Thread-170623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:27:04.116 [DEBUG] [Thread-170623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:27:04.116 [DEBUG] [Thread-170623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:27:04.126 [DEBUG] [Thread-170623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:27:04.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:27:04.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-04-11T13:27:04.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-04-11T13:27:04.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:27:04.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:27:04.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:27:04.163 [DEBUG] [Thread-170623] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:27:07.513 [DEBUG] [Thread-170625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:14.052 [DEBUG] [Thread-170626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:29.102 [DEBUG] [Thread-170627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:34.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:27:34.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:27:34.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-04-11T13:27:35.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 26, 55), 0.082, 99.7513, 0.0, 16.2166, 13.8615, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:27:35.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:26:55
2026-04-11T13:27:36.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:27:36.183 [DEBUG] [Thread-170628] [transport.py] [_log()] starting thread (client mode): 0xae537d90
2026-04-11T13:27:36.183 [DEBUG] [Thread-170628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:27:36.199 [DEBUG] [Thread-170628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:27:36.199 [INFO] [Thread-170628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] client lang: <none>
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] server lang: <none>
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] kex follows: False
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:27:36.200 [DEBUG] [Thread-170628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:27:36.201 [DEBUG] [Thread-170628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:27:36.201 [DEBUG] [Thread-170628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:27:36.201 [DEBUG] [Thread-170628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:27:36.201 [DEBUG] [Thread-170628] [transport.py] [_log()] Compression: none
2026-04-11T13:27:36.201 [DEBUG] [Thread-170628] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:27:36.212 [DEBUG] [Thread-170628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:27:36.213 [DEBUG] [Thread-170628] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:27:36.213 [DEBUG] [Thread-170628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:27:36.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:27:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:27:36.215 [DEBUG] [Thread-170628] [transport.py] [_log()] userauth is OK
2026-04-11T13:27:36.215 [DEBUG] [Thread-170628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:27:36.215 [DEBUG] [Thread-170628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:27:36.215 [DEBUG] [Thread-170628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:27:36.216 [DEBUG] [Thread-170628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:27:36.229 [INFO] [Thread-170628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:27:36.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:27:36.838 [DEBUG] [Thread-170628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:27:36.838 [DEBUG] [Thread-170628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:27:36.839 [DEBUG] [Thread-170628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:27:36.879 [DEBUG] [Thread-170628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:27:36.879 [DEBUG] [Thread-170628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:27:36.883 [DEBUG] [Thread-170628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:27:36.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:27:36.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:27:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:27:36.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:27:36.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:27:36.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:27:36.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:27:36.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:27:36.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:27:36.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.477201 -999.00  +13.80  18.04     96  +13.20 1 3 1 3 1   888    0 0.68 5.93 ----- 15.2 18.0 63.0 19.6 16.2 -0.2 16.2 -0.8 15.8 -1.1 16.1 -0.4
2026-04-11T13:27:36.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:27:36.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:27:36.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.477201
2026-04-11T13:27:36.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:27:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:27:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:27:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:27:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:27:36.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:26:55', tmtdew=0.082, humidity=99.7513, cloud=0.0, wind=16.2166, temperature=13.8615, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:27:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:27:36.904 [DEBUG] [Thread-170628] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:27:36.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:27:36.997 [DEBUG] [Thread-170631] [transport.py] [_log()] starting thread (client mode): 0xae536410
2026-04-11T13:27:36.997 [DEBUG] [Thread-170631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:27:37.013 [DEBUG] [Thread-170631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:27:37.013 [INFO] [Thread-170631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:37.021 [DEBUG] [Thread-170631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] client lang: <none>
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] server lang: <none>
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] kex follows: False
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:27:37.022 [DEBUG] [Thread-170631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:27:37.023 [DEBUG] [Thread-170631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:27:37.023 [DEBUG] [Thread-170631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:27:37.023 [DEBUG] [Thread-170631] [transport.py] [_log()] Compression: none
2026-04-11T13:27:37.023 [DEBUG] [Thread-170631] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:27:37.084 [DEBUG] [Thread-170631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:27:37.084 [DEBUG] [Thread-170631] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:27:37.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:27:37.085 [DEBUG] [Thread-170631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:27:37.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:27:37.139 [DEBUG] [Thread-170631] [transport.py] [_log()] userauth is OK
2026-04-11T13:27:37.139 [DEBUG] [Thread-170631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:27:37.139 [DEBUG] [Thread-170631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:27:37.139 [DEBUG] [Thread-170631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:27:37.139 [DEBUG] [Thread-170631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:27:37.158 [INFO] [Thread-170631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:27:37.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:27:37.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:27:37.996 [DEBUG] [Thread-170631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:27:37.996 [DEBUG] [Thread-170631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:27:38.044 [DEBUG] [Thread-170631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:27:38.044 [DEBUG] [Thread-170631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:27:38.052 [DEBUG] [Thread-170631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:27:38.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:27:38.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-04-11T13:27:38.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-04-11T13:27:38.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:27:38.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:27:38.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:27:38.087 [DEBUG] [Thread-170631] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:27:44.141 [DEBUG] [Thread-170633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:27:59.193 [DEBUG] [Thread-170634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:02.008 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:02.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:07.547 [DEBUG] [Thread-170635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:08.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:28:08.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:28:08.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-04-11T13:28:09.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 27, 30), 0.08459, 99.7347, 0.0, 16.9222, 13.7952, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:28:09.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:27:30
2026-04-11T13:28:09.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:28:09.956 [DEBUG] [Thread-170636] [transport.py] [_log()] starting thread (client mode): 0xb0f40460
2026-04-11T13:28:09.956 [DEBUG] [Thread-170636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:28:09.978 [DEBUG] [Thread-170636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:28:09.978 [INFO] [Thread-170636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:28:09.980 [DEBUG] [Thread-170636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] client lang: <none>
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] server lang: <none>
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] kex follows: False
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] Compression: none
2026-04-11T13:28:09.981 [DEBUG] [Thread-170636] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:28:09.991 [DEBUG] [Thread-170636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:28:09.991 [DEBUG] [Thread-170636] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:28:09.991 [DEBUG] [Thread-170636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:28:09.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:28:09.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:28:09.993 [DEBUG] [Thread-170636] [transport.py] [_log()] userauth is OK
2026-04-11T13:28:09.993 [DEBUG] [Thread-170636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:28:09.993 [DEBUG] [Thread-170636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:28:09.994 [DEBUG] [Thread-170636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:28:09.994 [DEBUG] [Thread-170636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:28:10.002 [INFO] [Thread-170636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:28:10.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:28:10.630 [DEBUG] [Thread-170636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:28:10.630 [DEBUG] [Thread-170636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:28:10.630 [DEBUG] [Thread-170636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:28:10.671 [DEBUG] [Thread-170636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:28:10.671 [DEBUG] [Thread-170636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:28:10.674 [DEBUG] [Thread-170636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:28:10.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:28:10.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:28:10.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:28:10.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:28:10.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:28:10.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:28:10.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:28:10.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:28:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:28:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.477549 -999.00  +13.70  21.03     96  +13.20 1 3 1 3 1   888    0 0.67 5.47 ----- 19.3 21.0 50.0 23.6 16.2 -0.3 16.1 -1.0 15.8 -1.2 16.1 0.0
2026-04-11T13:28:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:28:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:28:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.477549
2026-04-11T13:28:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:28:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:28:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:28:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:28:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:28:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:27:30', tmtdew=0.08459, humidity=99.7347, cloud=0.0, wind=16.9222, temperature=13.7952, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:27:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:28:10.694 [DEBUG] [Thread-170636] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:28:10.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:28:10.789 [DEBUG] [Thread-170639] [transport.py] [_log()] starting thread (client mode): 0xa795f040
2026-04-11T13:28:10.789 [DEBUG] [Thread-170639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:28:10.808 [DEBUG] [Thread-170639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:28:10.808 [INFO] [Thread-170639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:28:10.815 [DEBUG] [Thread-170639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:28:10.815 [DEBUG] [Thread-170639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:28:10.815 [DEBUG] [Thread-170639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:28:10.815 [DEBUG] [Thread-170639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] client lang: <none>
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] server lang: <none>
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] kex follows: False
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:28:10.816 [DEBUG] [Thread-170639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:28:10.817 [DEBUG] [Thread-170639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:28:10.817 [DEBUG] [Thread-170639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:28:10.817 [DEBUG] [Thread-170639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:28:10.817 [DEBUG] [Thread-170639] [transport.py] [_log()] Compression: none
2026-04-11T13:28:10.817 [DEBUG] [Thread-170639] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:28:10.875 [DEBUG] [Thread-170639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:28:10.875 [DEBUG] [Thread-170639] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:28:10.876 [DEBUG] [Thread-170639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:28:10.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:28:10.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:28:10.931 [DEBUG] [Thread-170639] [transport.py] [_log()] userauth is OK
2026-04-11T13:28:10.931 [DEBUG] [Thread-170639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:28:10.931 [DEBUG] [Thread-170639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:28:10.931 [DEBUG] [Thread-170639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:28:10.932 [DEBUG] [Thread-170639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:28:10.953 [INFO] [Thread-170639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:28:10.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:28:10.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:28:11.769 [DEBUG] [Thread-170639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:28:11.769 [DEBUG] [Thread-170639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:28:11.817 [DEBUG] [Thread-170639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:28:11.817 [DEBUG] [Thread-170639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:28:11.826 [DEBUG] [Thread-170639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:28:11.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:28:11.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-04-11T13:28:11.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-04-11T13:28:11.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:28:11.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:28:11.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:28:11.859 [DEBUG] [Thread-170639] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:28:14.224 [DEBUG] [Thread-170641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:29.274 [DEBUG] [Thread-170642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:41.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:28:41.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:28:41.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:28:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 28, 6), 0.082025, 99.7513, 0.0, 14.823, 13.7621, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:28:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:28:06
2026-04-11T13:28:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:28:43.774 [DEBUG] [Thread-170643] [transport.py] [_log()] starting thread (client mode): 0xae537b20
2026-04-11T13:28:43.774 [DEBUG] [Thread-170643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:28:43.794 [DEBUG] [Thread-170643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:28:43.794 [INFO] [Thread-170643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] client lang: <none>
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] server lang: <none>
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] kex follows: False
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:28:43.797 [DEBUG] [Thread-170643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:28:43.798 [DEBUG] [Thread-170643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:28:43.798 [DEBUG] [Thread-170643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:28:43.798 [DEBUG] [Thread-170643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:28:43.798 [DEBUG] [Thread-170643] [transport.py] [_log()] Compression: none
2026-04-11T13:28:43.798 [DEBUG] [Thread-170643] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:28:43.816 [DEBUG] [Thread-170643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:28:43.816 [DEBUG] [Thread-170643] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:28:43.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:28:43.818 [DEBUG] [Thread-170643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:28:43.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:28:43.820 [DEBUG] [Thread-170643] [transport.py] [_log()] userauth is OK
2026-04-11T13:28:43.820 [DEBUG] [Thread-170643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:28:43.820 [DEBUG] [Thread-170643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:28:43.820 [DEBUG] [Thread-170643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:28:43.820 [DEBUG] [Thread-170643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:28:43.845 [INFO] [Thread-170643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:28:43.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:28:44.314 [DEBUG] [Thread-170645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:28:44.475 [DEBUG] [Thread-170643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:28:44.475 [DEBUG] [Thread-170643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:28:44.476 [DEBUG] [Thread-170643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:28:44.516 [DEBUG] [Thread-170643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:28:44.516 [DEBUG] [Thread-170643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:28:44.520 [DEBUG] [Thread-170643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:28:44.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:28:44.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:28:44.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:28:44.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:28:44.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:28:44.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:28:44.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:28:44.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:28:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:28:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.477896 -999.00  +13.70  16.31     96  +13.10 1 3 1 3 1   888    0 0.67 5.63 ----- 15.5 16.3 44.2 22.0 16.1 -0.3 16.1 -0.5 15.8 -0.8 16.1 0.4
2026-04-11T13:28:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:28:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:28:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.477896
2026-04-11T13:28:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:28:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:28:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:28:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:28:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:28:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:28:06', tmtdew=0.082025, humidity=99.7513, cloud=0.0, wind=14.823, temperature=13.7621, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:28:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:28:44.540 [DEBUG] [Thread-170643] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:28:44.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:28:44.631 [DEBUG] [Thread-170647] [transport.py] [_log()] starting thread (client mode): 0xae5b0370
2026-04-11T13:28:44.631 [DEBUG] [Thread-170647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:28:44.647 [DEBUG] [Thread-170647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:28:44.647 [INFO] [Thread-170647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:28:44.655 [DEBUG] [Thread-170647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:28:44.656 [DEBUG] [Thread-170647] [transport.py] [_log()] client lang: <none>
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] server lang: <none>
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] kex follows: False
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:28:44.657 [DEBUG] [Thread-170647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:28:44.658 [DEBUG] [Thread-170647] [transport.py] [_log()] Compression: none
2026-04-11T13:28:44.658 [DEBUG] [Thread-170647] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:28:44.716 [DEBUG] [Thread-170647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:28:44.717 [DEBUG] [Thread-170647] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:28:44.717 [DEBUG] [Thread-170647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:28:44.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:28:44.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:28:44.772 [DEBUG] [Thread-170647] [transport.py] [_log()] userauth is OK
2026-04-11T13:28:44.772 [DEBUG] [Thread-170647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:28:44.772 [DEBUG] [Thread-170647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:28:44.772 [DEBUG] [Thread-170647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:28:44.772 [DEBUG] [Thread-170647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:28:44.791 [INFO] [Thread-170647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:28:44.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:28:44.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:28:45.657 [DEBUG] [Thread-170647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:28:45.658 [DEBUG] [Thread-170647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:28:45.705 [DEBUG] [Thread-170647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:28:45.706 [DEBUG] [Thread-170647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:28:45.714 [DEBUG] [Thread-170647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:28:45.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:28:45.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-04-11T13:28: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-04-11T13:28:45.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:28:45.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:28:45.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:28:45.748 [DEBUG] [Thread-170647] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:28:59.356 [DEBUG] [Thread-170649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:02.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:02.152 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:07.581 [DEBUG] [Thread-170650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:14.408 [DEBUG] [Thread-170651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:29:15.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:29: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-04-11T13:29:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 28, 42), 0.06406, 99.5026, 0.0, 12.3869, 14.191, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:29:17.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:28:42
2026-04-11T13:29:17.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:29:17.591 [DEBUG] [Thread-170652] [transport.py] [_log()] starting thread (client mode): 0xa795e320
2026-04-11T13:29:17.592 [DEBUG] [Thread-170652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:29:17.612 [DEBUG] [Thread-170652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:29:17.612 [INFO] [Thread-170652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:17.615 [DEBUG] [Thread-170652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] client lang: <none>
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] server lang: <none>
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] kex follows: False
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] Compression: none
2026-04-11T13:29:17.616 [DEBUG] [Thread-170652] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:29:17.633 [DEBUG] [Thread-170652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:29:17.634 [DEBUG] [Thread-170652] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:29:17.634 [DEBUG] [Thread-170652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:29:17.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:29:17.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:29:17.637 [DEBUG] [Thread-170652] [transport.py] [_log()] userauth is OK
2026-04-11T13:29:17.637 [DEBUG] [Thread-170652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:29:17.637 [DEBUG] [Thread-170652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:29:17.637 [DEBUG] [Thread-170652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:29:17.637 [DEBUG] [Thread-170652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:29:17.660 [INFO] [Thread-170652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:29:17.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:29:18.314 [DEBUG] [Thread-170652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:29:18.315 [DEBUG] [Thread-170652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:29:18.315 [DEBUG] [Thread-170652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:29:18.355 [DEBUG] [Thread-170652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:29:18.355 [DEBUG] [Thread-170652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:29:18.359 [DEBUG] [Thread-170652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:29:18.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:29:18.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:29:18.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:29:18.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:29:18.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:29:18.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:29:18.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:29:18.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:29:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:29:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.478590 -999.00  +13.70  14.67     96  +13.10 1 3 1 3 1   888    0 0.68 5.89 ----- 16.4 14.7 61.6 16.1 16.2 -0.1 16.1 -1.1 15.8 -0.2 16.1 0.1
2026-04-11T13:29:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:29:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:29:18.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.478590
2026-04-11T13:29:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:29:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:29:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:29:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:29:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:29:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:28:42', tmtdew=0.06406, humidity=99.5026, cloud=0.0, wind=12.3869, temperature=14.191, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:29:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:29:18.383 [DEBUG] [Thread-170652] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:29:18.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:29:18.487 [DEBUG] [Thread-170655] [transport.py] [_log()] starting thread (client mode): 0xa795d000
2026-04-11T13:29:18.487 [DEBUG] [Thread-170655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:29:18.502 [DEBUG] [Thread-170655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:29:18.502 [INFO] [Thread-170655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] client lang: <none>
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] server lang: <none>
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] kex follows: False
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] Compression: none
2026-04-11T13:29:18.510 [DEBUG] [Thread-170655] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:29:18.568 [DEBUG] [Thread-170655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:29:18.568 [DEBUG] [Thread-170655] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:29:18.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:29:18.569 [DEBUG] [Thread-170655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:29:18.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:29:18.624 [DEBUG] [Thread-170655] [transport.py] [_log()] userauth is OK
2026-04-11T13:29:18.624 [DEBUG] [Thread-170655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:29:18.624 [DEBUG] [Thread-170655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:29:18.625 [DEBUG] [Thread-170655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:29:18.625 [DEBUG] [Thread-170655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:29:18.643 [INFO] [Thread-170655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:29:18.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:29:18.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:29:19.474 [DEBUG] [Thread-170655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:29:19.474 [DEBUG] [Thread-170655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:29:19.522 [DEBUG] [Thread-170655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:29:19.522 [DEBUG] [Thread-170655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:29:19.531 [DEBUG] [Thread-170655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:29:19.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:29:19.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-04-11T13:29:19.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-04-11T13:29:19.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:29:19.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:29:19.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:29:19.568 [DEBUG] [Thread-170655] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:29:29.447 [DEBUG] [Thread-170657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:44.502 [DEBUG] [Thread-170658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:29:49.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:29:49.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:29:49.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-04-11T13:29:50.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 29, 17), 0.082015, 99.7513, 0.0, 12.5996, 13.7618, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:29:50.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:29:17
2026-04-11T13:29:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:29:51.517 [DEBUG] [Thread-170659] [transport.py] [_log()] starting thread (client mode): 0xae534430
2026-04-11T13:29:51.517 [DEBUG] [Thread-170659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:29:51.537 [DEBUG] [Thread-170659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:29:51.538 [INFO] [Thread-170659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:29:51.541 [DEBUG] [Thread-170659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] client lang: <none>
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] server lang: <none>
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] kex follows: False
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] Compression: none
2026-04-11T13:29:51.542 [DEBUG] [Thread-170659] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:29:51.561 [DEBUG] [Thread-170659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:29:51.562 [DEBUG] [Thread-170659] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:29:51.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:29:51.563 [DEBUG] [Thread-170659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:29:51.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:29:51.565 [DEBUG] [Thread-170659] [transport.py] [_log()] userauth is OK
2026-04-11T13:29:51.565 [DEBUG] [Thread-170659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:29:51.565 [DEBUG] [Thread-170659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:29:51.565 [DEBUG] [Thread-170659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:29:51.565 [DEBUG] [Thread-170659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:29:51.589 [INFO] [Thread-170659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:29:51.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:29:52.227 [DEBUG] [Thread-170659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:29:52.227 [DEBUG] [Thread-170659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:29:52.227 [DEBUG] [Thread-170659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:29:52.268 [DEBUG] [Thread-170659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:29:52.268 [DEBUG] [Thread-170659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:29:52.271 [DEBUG] [Thread-170659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:29:52.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:29:52.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:29:52.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:29:52.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:29:52.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:29:52.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:29:52.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:29:52.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:29:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:29:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.478938 -999.00  +13.70  12.79     96  +13.10 1 3 1 3 1   888    0 0.67 5.71 ----- 13.0 12.8 51.2 14.6 16.1 -0.1 16.1 -0.3 15.8 -0.2 16.1 0.4
2026-04-11T13:29:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:29:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:29:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.478938
2026-04-11T13:29:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:29:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:29:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:29:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:29:52.296 [DEBUG] [Thread-170659] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:29:52.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:29:52.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:29:17', tmtdew=0.082015, humidity=99.7513, cloud=0.0, wind=12.5996, temperature=13.7618, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:29:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:29:52.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:29:52.391 [DEBUG] [Thread-170662] [transport.py] [_log()] starting thread (client mode): 0xa79b7b20
2026-04-11T13:29:52.391 [DEBUG] [Thread-170662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:29:52.406 [DEBUG] [Thread-170662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:29:52.406 [INFO] [Thread-170662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:29:52.414 [DEBUG] [Thread-170662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:29:52.414 [DEBUG] [Thread-170662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:29:52.414 [DEBUG] [Thread-170662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:29:52.414 [DEBUG] [Thread-170662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] client lang: <none>
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] server lang: <none>
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] kex follows: False
2026-04-11T13:29:52.415 [DEBUG] [Thread-170662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:29:52.416 [DEBUG] [Thread-170662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:29:52.416 [DEBUG] [Thread-170662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:29:52.416 [DEBUG] [Thread-170662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:29:52.416 [DEBUG] [Thread-170662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:29:52.416 [DEBUG] [Thread-170662] [transport.py] [_log()] Compression: none
2026-04-11T13:29:52.416 [DEBUG] [Thread-170662] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:29:52.472 [DEBUG] [Thread-170662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:29:52.473 [DEBUG] [Thread-170662] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:29:52.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:29:52.474 [DEBUG] [Thread-170662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:29:52.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:29:52.528 [DEBUG] [Thread-170662] [transport.py] [_log()] userauth is OK
2026-04-11T13:29:52.528 [DEBUG] [Thread-170662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:29:52.528 [DEBUG] [Thread-170662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:29:52.529 [DEBUG] [Thread-170662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:29:52.529 [DEBUG] [Thread-170662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:29:52.548 [INFO] [Thread-170662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:29:52.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:29:52.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:29:53.382 [DEBUG] [Thread-170662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:29:53.382 [DEBUG] [Thread-170662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:29:53.430 [DEBUG] [Thread-170662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:29:53.430 [DEBUG] [Thread-170662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:29:53.439 [DEBUG] [Thread-170662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:29:53.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:29:53.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-04-11T13:29:53.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-04-11T13:29:53.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:29:53.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:29:53.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:29:53.473 [DEBUG] [Thread-170662] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:29:59.538 [DEBUG] [Thread-170664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:02.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:02.293 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:07.615 [DEBUG] [Thread-170665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:14.593 [DEBUG] [Thread-170666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:30:23.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:30:23.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-04-11T13:30:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 29, 52), 0.05893, 99.5358, 0.0, 11.5402, 14.1578, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:30:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:29:52
2026-04-11T13:30:25.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:30:25.300 [DEBUG] [Thread-170667] [transport.py] [_log()] starting thread (client mode): 0xb0f40e80
2026-04-11T13:30:25.300 [DEBUG] [Thread-170667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:30:25.322 [DEBUG] [Thread-170667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:30:25.322 [INFO] [Thread-170667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:30:25.325 [DEBUG] [Thread-170667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] client lang: <none>
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] server lang: <none>
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] kex follows: False
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] Compression: none
2026-04-11T13:30:25.326 [DEBUG] [Thread-170667] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:30:25.345 [DEBUG] [Thread-170667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:30:25.345 [DEBUG] [Thread-170667] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:30:25.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:30:25.347 [DEBUG] [Thread-170667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:30:25.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:30:25.350 [DEBUG] [Thread-170667] [transport.py] [_log()] userauth is OK
2026-04-11T13:30:25.350 [DEBUG] [Thread-170667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:30:25.350 [DEBUG] [Thread-170667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:30:25.350 [DEBUG] [Thread-170667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:30:25.350 [DEBUG] [Thread-170667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:30:25.376 [INFO] [Thread-170667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:30:25.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:30:29.626 [DEBUG] [Thread-170669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:34.078 [DEBUG] [Thread-170667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:30:34.078 [DEBUG] [Thread-170667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:30:34.079 [DEBUG] [Thread-170667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:30:34.120 [DEBUG] [Thread-170667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:30:34.121 [DEBUG] [Thread-170667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:30:34.124 [DEBUG] [Thread-170667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:30:34.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:30:34.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:30:34.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:30:34.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:30:34.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:30:34.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:30:34.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:30:34.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:30:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:30:34.237 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-11T13:30:34.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:29:52', tmtdew=0.05893, humidity=99.5358, cloud=0.0, wind=11.5402, temperature=14.1578, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:30:34.239 [DEBUG] [Thread-170667] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:30:34.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:30:34.323 [DEBUG] [Thread-170671] [transport.py] [_log()] starting thread (client mode): 0xae562b00
2026-04-11T13:30:34.323 [DEBUG] [Thread-170671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:30:34.337 [DEBUG] [Thread-170671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:30:34.337 [INFO] [Thread-170671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] client lang: <none>
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] server lang: <none>
2026-04-11T13:30:34.345 [DEBUG] [Thread-170671] [transport.py] [_log()] kex follows: False
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] Compression: none
2026-04-11T13:30:34.346 [DEBUG] [Thread-170671] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:30:34.404 [DEBUG] [Thread-170671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:30:34.405 [DEBUG] [Thread-170671] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:30:34.406 [DEBUG] [Thread-170671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:30:34.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:30:34.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:30:34.460 [DEBUG] [Thread-170671] [transport.py] [_log()] userauth is OK
2026-04-11T13:30:34.461 [DEBUG] [Thread-170671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:30:34.461 [DEBUG] [Thread-170671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:30:34.461 [DEBUG] [Thread-170671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:30:34.461 [DEBUG] [Thread-170671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:30:34.479 [INFO] [Thread-170671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:30:34.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:30:34.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:30:35.293 [DEBUG] [Thread-170671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:30:35.293 [DEBUG] [Thread-170671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:30:35.341 [DEBUG] [Thread-170671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:30:35.341 [DEBUG] [Thread-170671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:30:35.351 [DEBUG] [Thread-170671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:30:35.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:30:35.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:30:35.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-04-11T13:30:35.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:30:35.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:30:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:30:35.387 [DEBUG] [Thread-170671] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:30:44.665 [DEBUG] [Thread-170673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:30:59.718 [DEBUG] [Thread-170674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:02.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:02.437 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:31:05.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:31:05.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-04-11T13:31:06.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 30, 28), 0.084615, 99.7347, 0.0, 12.0881, 13.5958, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:31:06.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:30:28
2026-04-11T13:31:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:31:07.245 [DEBUG] [Thread-170675] [transport.py] [_log()] starting thread (client mode): 0xae534160
2026-04-11T13:31:07.245 [DEBUG] [Thread-170675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:31:07.267 [DEBUG] [Thread-170675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:31:07.267 [INFO] [Thread-170675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] client lang: <none>
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] server lang: <none>
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] kex follows: False
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] Compression: none
2026-04-11T13:31:07.271 [DEBUG] [Thread-170675] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:31:07.290 [DEBUG] [Thread-170675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:31:07.291 [DEBUG] [Thread-170675] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:31:07.291 [DEBUG] [Thread-170675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:31:07.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:31:07.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:31:07.293 [DEBUG] [Thread-170675] [transport.py] [_log()] userauth is OK
2026-04-11T13:31:07.294 [DEBUG] [Thread-170675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:31:07.294 [DEBUG] [Thread-170675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:31:07.294 [DEBUG] [Thread-170675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:31:07.294 [DEBUG] [Thread-170675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:31:07.315 [INFO] [Thread-170675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:31:07.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:31:07.673 [DEBUG] [Thread-170677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:08.102 [DEBUG] [Thread-170675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:31:08.103 [DEBUG] [Thread-170675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:31:08.103 [DEBUG] [Thread-170675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:31:08.143 [DEBUG] [Thread-170675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:31:08.144 [DEBUG] [Thread-170675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:31:08.146 [DEBUG] [Thread-170675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:31:08.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:31:08.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:31:08.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:31:08.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:31:08.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:31:08.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:31:08.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:31:08.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:31:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:31:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.479632 -999.00  +13.80  13.23     96  +13.20 1 3 1 3 1   888    0 0.70 6.29 ----- 14.1 13.2 55.4 19.7 16.1 0.2 16.1 -0.5 15.7 -0.5 16.1 0.5
2026-04-11T13:31:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:31:08.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:31:08.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.479632
2026-04-11T13:31:08.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:31:08.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:31:08.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:31:08.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:31:08.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:31:08.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:30:28', tmtdew=0.084615, humidity=99.7347, cloud=0.0, wind=12.0881, temperature=13.5958, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:30:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:31:08.165 [DEBUG] [Thread-170675] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:31:08.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:31:08.249 [DEBUG] [Thread-170679] [transport.py] [_log()] starting thread (client mode): 0xae537400
2026-04-11T13:31:08.249 [DEBUG] [Thread-170679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:31:08.266 [DEBUG] [Thread-170679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:31:08.266 [INFO] [Thread-170679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:31:08.275 [DEBUG] [Thread-170679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:31:08.275 [DEBUG] [Thread-170679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:31:08.275 [DEBUG] [Thread-170679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] client lang: <none>
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] server lang: <none>
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] kex follows: False
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] Compression: none
2026-04-11T13:31:08.276 [DEBUG] [Thread-170679] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:31:08.332 [DEBUG] [Thread-170679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:31:08.333 [DEBUG] [Thread-170679] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:31:08.333 [DEBUG] [Thread-170679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:31:08.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:31:08.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:31:08.388 [DEBUG] [Thread-170679] [transport.py] [_log()] userauth is OK
2026-04-11T13:31:08.389 [DEBUG] [Thread-170679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:31:08.389 [DEBUG] [Thread-170679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:31:08.389 [DEBUG] [Thread-170679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:31:08.389 [DEBUG] [Thread-170679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:31:08.409 [INFO] [Thread-170679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:31:08.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:31:08.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:31:09.237 [DEBUG] [Thread-170679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:31:09.237 [DEBUG] [Thread-170679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:31:09.285 [DEBUG] [Thread-170679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:31:09.285 [DEBUG] [Thread-170679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:31:09.294 [DEBUG] [Thread-170679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:31:09.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:31:09.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:31:09.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-04-11T13:31:09.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:31:09.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:31:09.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:31:09.333 [DEBUG] [Thread-170679] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:31:14.755 [DEBUG] [Thread-170681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:29.816 [DEBUG] [Thread-170682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:39.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:31:39.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:31:39.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-04-11T13:31:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 31, 3), 0.079465, 99.7679, 0.0, 12.0175, 13.6123, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:31:40.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:31:03
2026-04-11T13:31:41.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:31:41.223 [DEBUG] [Thread-170683] [transport.py] [_log()] starting thread (client mode): 0xae537d30
2026-04-11T13:31:41.223 [DEBUG] [Thread-170683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:31:41.239 [DEBUG] [Thread-170683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:31:41.239 [INFO] [Thread-170683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] client lang: <none>
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] server lang: <none>
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] kex follows: False
2026-04-11T13:31:41.241 [DEBUG] [Thread-170683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:31:41.242 [DEBUG] [Thread-170683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:31:41.242 [DEBUG] [Thread-170683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:31:41.242 [DEBUG] [Thread-170683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:31:41.242 [DEBUG] [Thread-170683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:31:41.242 [DEBUG] [Thread-170683] [transport.py] [_log()] Compression: none
2026-04-11T13:31:41.242 [DEBUG] [Thread-170683] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:31:41.261 [DEBUG] [Thread-170683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:31:41.262 [DEBUG] [Thread-170683] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:31:41.262 [DEBUG] [Thread-170683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:31:41.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:31:41.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:31:41.266 [DEBUG] [Thread-170683] [transport.py] [_log()] userauth is OK
2026-04-11T13:31:41.266 [DEBUG] [Thread-170683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:31:41.266 [DEBUG] [Thread-170683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:31:41.266 [DEBUG] [Thread-170683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:31:41.266 [DEBUG] [Thread-170683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:31:41.292 [INFO] [Thread-170683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:31:41.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:31:41.902 [DEBUG] [Thread-170683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:31:41.903 [DEBUG] [Thread-170683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:31:41.903 [DEBUG] [Thread-170683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:31:41.945 [DEBUG] [Thread-170683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:31:41.945 [DEBUG] [Thread-170683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:31:41.948 [DEBUG] [Thread-170683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:31:41.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:31:41.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:31:41.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:31:41.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:31:41.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:31:41.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:31:41.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:31:41.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:31:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:31:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.479979 -999.00  +13.70  12.41     96  +13.10 1 3 1 3 1   888    0 0.70 6.17 ----- 12.8 12.4 54.4 16.6 16.1 -0.1 16.1 -0.2 15.8 -0.4 16.0 0.5
2026-04-11T13:31:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:31:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:31:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.479979
2026-04-11T13:31:41.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:31:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:31:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:31:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:31:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:31:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:31:03', tmtdew=0.079465, humidity=99.7679, cloud=0.0, wind=12.0175, temperature=13.6123, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:31:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:31:41.977 [DEBUG] [Thread-170683] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:31:42.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:31:42.070 [DEBUG] [Thread-170686] [transport.py] [_log()] starting thread (client mode): 0xae560c40
2026-04-11T13:31:42.070 [DEBUG] [Thread-170686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:31:42.084 [DEBUG] [Thread-170686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:31:42.084 [INFO] [Thread-170686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:31:42.092 [DEBUG] [Thread-170686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:31:42.093 [DEBUG] [Thread-170686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:31:42.093 [DEBUG] [Thread-170686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:31:42.093 [DEBUG] [Thread-170686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:42.093 [DEBUG] [Thread-170686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:31:42.093 [DEBUG] [Thread-170686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:42.093 [DEBUG] [Thread-170686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] client lang: <none>
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] server lang: <none>
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] kex follows: False
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] Compression: none
2026-04-11T13:31:42.094 [DEBUG] [Thread-170686] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:31:42.152 [DEBUG] [Thread-170686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:31:42.153 [DEBUG] [Thread-170686] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:31:42.153 [DEBUG] [Thread-170686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:31:42.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:31:42.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:31:42.208 [DEBUG] [Thread-170686] [transport.py] [_log()] userauth is OK
2026-04-11T13:31:42.209 [DEBUG] [Thread-170686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:31:42.209 [DEBUG] [Thread-170686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:31:42.209 [DEBUG] [Thread-170686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:31:42.209 [DEBUG] [Thread-170686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:31:42.228 [INFO] [Thread-170686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:31:42.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:31:42.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:31:43.054 [DEBUG] [Thread-170686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:31:43.055 [DEBUG] [Thread-170686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:31:43.103 [DEBUG] [Thread-170686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:31:43.103 [DEBUG] [Thread-170686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:31:43.112 [DEBUG] [Thread-170686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:31:43.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:31:43.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-04-11T13:31:43.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-04-11T13:31:43.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:31:43.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:31:43.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:31:43.149 [DEBUG] [Thread-170686] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:31:44.855 [DEBUG] [Thread-170688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:31:59.911 [DEBUG] [Thread-170689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:02.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:02.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:07.719 [DEBUG] [Thread-170690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:13.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:32:13.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:32:13.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-04-11T13:32:14.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 31, 39), 0.06923, 99.4695, 0.0, 6.31872, 14.0915, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:32:14.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:31:39
2026-04-11T13:32:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:32:14.948 [DEBUG] [Thread-170691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:14.967 [DEBUG] [Thread-170692] [transport.py] [_log()] starting thread (client mode): 0xae52db10
2026-04-11T13:32:14.967 [DEBUG] [Thread-170692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:32:14.983 [DEBUG] [Thread-170692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:32:14.983 [INFO] [Thread-170692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] client lang: <none>
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] server lang: <none>
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] kex follows: False
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] Compression: none
2026-04-11T13:32:14.985 [DEBUG] [Thread-170692] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:32:14.995 [DEBUG] [Thread-170692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:32:14.995 [DEBUG] [Thread-170692] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:32:14.995 [DEBUG] [Thread-170692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:32:14.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:32:14.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:32:14.997 [DEBUG] [Thread-170692] [transport.py] [_log()] userauth is OK
2026-04-11T13:32:14.997 [DEBUG] [Thread-170692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:32:14.997 [DEBUG] [Thread-170692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:32:14.997 [DEBUG] [Thread-170692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:32:14.997 [DEBUG] [Thread-170692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:32:15.013 [INFO] [Thread-170692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:32:15.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:32:15.587 [DEBUG] [Thread-170692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:32:15.587 [DEBUG] [Thread-170692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:32:15.588 [DEBUG] [Thread-170692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:32:15.628 [DEBUG] [Thread-170692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:32:15.628 [DEBUG] [Thread-170692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:32:15.631 [DEBUG] [Thread-170692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:32:15.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:32:15.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:32:15.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:32:15.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:32:15.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:32:15.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:32:15.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:32:15.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:32:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:32:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.480674 -999.00  +13.90  10.81     96  +13.40 1 3 1 3 1   888    0 0.69 5.96 ----- 10.6 10.8 43.2 11.7 16.2 0.4 16.2 -0.3 15.8 0.3 16.0 0.7
2026-04-11T13:32:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:32:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:32:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.480674
2026-04-11T13:32:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:32:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:32:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:32:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:32:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:32:15.657 [DEBUG] [Thread-170692] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:32:15.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:31:39', tmtdew=0.06923, humidity=99.4695, cloud=0.0, wind=6.31872, temperature=14.0915, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:32:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:32:15.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:32:15.750 [DEBUG] [Thread-170695] [transport.py] [_log()] starting thread (client mode): 0xa79b4a60
2026-04-11T13:32:15.750 [DEBUG] [Thread-170695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:32:15.770 [DEBUG] [Thread-170695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:32:15.770 [INFO] [Thread-170695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:32:15.777 [DEBUG] [Thread-170695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:32:15.778 [DEBUG] [Thread-170695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:32:15.778 [DEBUG] [Thread-170695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:32:15.778 [DEBUG] [Thread-170695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:15.778 [DEBUG] [Thread-170695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:15.778 [DEBUG] [Thread-170695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] client lang: <none>
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] server lang: <none>
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] kex follows: False
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] Compression: none
2026-04-11T13:32:15.779 [DEBUG] [Thread-170695] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:32:15.839 [DEBUG] [Thread-170695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:32:15.839 [DEBUG] [Thread-170695] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:32:15.840 [DEBUG] [Thread-170695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:32:15.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:32:15.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:32:15.896 [DEBUG] [Thread-170695] [transport.py] [_log()] userauth is OK
2026-04-11T13:32:15.897 [DEBUG] [Thread-170695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:32:15.897 [DEBUG] [Thread-170695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:32:15.897 [DEBUG] [Thread-170695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:32:15.897 [DEBUG] [Thread-170695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:32:15.916 [INFO] [Thread-170695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:32:15.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:32:15.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:32:16.779 [DEBUG] [Thread-170695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:32:16.780 [DEBUG] [Thread-170695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:32:16.827 [DEBUG] [Thread-170695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:32:16.827 [DEBUG] [Thread-170695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:32:16.836 [DEBUG] [Thread-170695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:32:16.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:32:16.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-04-11T13:32:16.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-04-11T13:32:16.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:32:16.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:32:16.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:32:16.873 [DEBUG] [Thread-170695] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:32:29.981 [DEBUG] [Thread-170697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:45.035 [DEBUG] [Thread-170698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:32:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:32:46.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:32:46.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:32:48.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 32, 14), 0.07946, 99.7679, 0.0, 8.57628, 13.7955, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:32:48.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:32:14
2026-04-11T13:32:48.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:32:48.741 [DEBUG] [Thread-170699] [transport.py] [_log()] starting thread (client mode): 0xae52db10
2026-04-11T13:32:48.741 [DEBUG] [Thread-170699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:32:48.763 [DEBUG] [Thread-170699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:32:48.763 [INFO] [Thread-170699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] client lang: <none>
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] server lang: <none>
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] kex follows: False
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:32:48.765 [DEBUG] [Thread-170699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:32:48.766 [DEBUG] [Thread-170699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:32:48.766 [DEBUG] [Thread-170699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:32:48.766 [DEBUG] [Thread-170699] [transport.py] [_log()] Compression: none
2026-04-11T13:32:48.766 [DEBUG] [Thread-170699] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:32:48.784 [DEBUG] [Thread-170699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:32:48.785 [DEBUG] [Thread-170699] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:32:48.785 [DEBUG] [Thread-170699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:32:48.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:32:48.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:32:48.789 [DEBUG] [Thread-170699] [transport.py] [_log()] userauth is OK
2026-04-11T13:32:48.789 [DEBUG] [Thread-170699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:32:48.789 [DEBUG] [Thread-170699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:32:48.790 [DEBUG] [Thread-170699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:32:48.790 [DEBUG] [Thread-170699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:32:48.815 [INFO] [Thread-170699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:32:48.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:32:49.448 [DEBUG] [Thread-170699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:32:49.449 [DEBUG] [Thread-170699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:32:49.449 [DEBUG] [Thread-170699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:32:49.490 [DEBUG] [Thread-170699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:32:49.490 [DEBUG] [Thread-170699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:32:49.493 [DEBUG] [Thread-170699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:32:49.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:32:49.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:32:49.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:32:49.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:32:49.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:32:49.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:32:49.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:32:49.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:32:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:32:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.481021 -999.00  +13.80   9.01     96  +13.20 1 3 1 3 1   888    0 0.71 6.49 ----- 9.0 9.0 29.2 10.3 16.2 0.2 16.3 -0.3 15.9 0.5 16.0 0.5
2026-04-11T13:32:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:32:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:32:49.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.481021
2026-04-11T13:32:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:32:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:32:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:32:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:32:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:32:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:32:14', tmtdew=0.07946, humidity=99.7679, cloud=0.0, wind=8.57628, temperature=13.7955, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:32:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:32:49.520 [DEBUG] [Thread-170699] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:32:49.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:32:49.617 [DEBUG] [Thread-170702] [transport.py] [_log()] starting thread (client mode): 0xae535ae0
2026-04-11T13:32:49.618 [DEBUG] [Thread-170702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:32:49.632 [DEBUG] [Thread-170702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:32:49.632 [INFO] [Thread-170702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] client lang: <none>
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] server lang: <none>
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] kex follows: False
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:32:49.640 [DEBUG] [Thread-170702] [transport.py] [_log()] Compression: none
2026-04-11T13:32:49.641 [DEBUG] [Thread-170702] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:32:49.697 [DEBUG] [Thread-170702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:32:49.697 [DEBUG] [Thread-170702] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:32:49.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:32:49.699 [DEBUG] [Thread-170702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:32:49.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:32:49.753 [DEBUG] [Thread-170702] [transport.py] [_log()] userauth is OK
2026-04-11T13:32:49.753 [DEBUG] [Thread-170702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:32:49.753 [DEBUG] [Thread-170702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:32:49.753 [DEBUG] [Thread-170702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:32:49.753 [DEBUG] [Thread-170702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:32:49.771 [INFO] [Thread-170702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:32:49.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:32:49.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:32:50.595 [DEBUG] [Thread-170702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:32:50.595 [DEBUG] [Thread-170702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:32:50.643 [DEBUG] [Thread-170702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:32:50.643 [DEBUG] [Thread-170702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:32:50.653 [DEBUG] [Thread-170702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:32:50.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:32:50.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-04-11T13:32:50.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-04-11T13:32:50.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:32:50.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:32:50.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:32:50.692 [DEBUG] [Thread-170702] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:33:00.072 [DEBUG] [Thread-170704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:02.719 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:02.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:07.783 [DEBUG] [Thread-170705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:15.114 [DEBUG] [Thread-170706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:33:20.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:33:20.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-04-11T13:33:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 32, 50), 0.05893, 99.5358, 0.0, 10.6229, 14.1578, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:33:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:32:50
2026-04-11T13:33:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:33:22.515 [DEBUG] [Thread-170707] [transport.py] [_log()] starting thread (client mode): 0xae563cd0
2026-04-11T13:33:22.515 [DEBUG] [Thread-170707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:33:22.537 [DEBUG] [Thread-170707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:33:22.537 [INFO] [Thread-170707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] client lang: <none>
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] server lang: <none>
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] kex follows: False
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:33:22.541 [DEBUG] [Thread-170707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:33:22.542 [DEBUG] [Thread-170707] [transport.py] [_log()] Compression: none
2026-04-11T13:33:22.542 [DEBUG] [Thread-170707] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:33:22.562 [DEBUG] [Thread-170707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:33:22.563 [DEBUG] [Thread-170707] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:33:22.564 [DEBUG] [Thread-170707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:33:22.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:33:22.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:33:22.607 [DEBUG] [Thread-170707] [transport.py] [_log()] userauth is OK
2026-04-11T13:33:22.608 [DEBUG] [Thread-170707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:33:22.608 [DEBUG] [Thread-170707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:33:22.608 [DEBUG] [Thread-170707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:33:22.608 [DEBUG] [Thread-170707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:33:22.646 [INFO] [Thread-170707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:33:22.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:33:23.277 [DEBUG] [Thread-170707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:33:23.278 [DEBUG] [Thread-170707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:33:23.278 [DEBUG] [Thread-170707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:33:23.320 [DEBUG] [Thread-170707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:33:23.321 [DEBUG] [Thread-170707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:33:23.324 [DEBUG] [Thread-170707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:33:23.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:33:23.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:33:23.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:33:23.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:33:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:33:23.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:33:23.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:33:23.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:33:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:33:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.481368 -999.00  +13.80   8.25     96  +13.30 1 3 1 3 1   888    0 0.71 6.31 ----- 9.6 8.2 30.2 10.3 16.2 0.0 16.2 -0.2 15.9 0.0 16.0 0.5
2026-04-11T13:33:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:33:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:33:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.481368
2026-04-11T13:33:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:33:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:33:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:33:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:33:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:33:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:32:50', tmtdew=0.05893, humidity=99.5358, cloud=0.0, wind=10.6229, temperature=14.1578, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:33:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:33:23.361 [DEBUG] [Thread-170707] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:33:23.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:33:23.454 [DEBUG] [Thread-170710] [transport.py] [_log()] starting thread (client mode): 0xae537310
2026-04-11T13:33:23.454 [DEBUG] [Thread-170710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:33:23.469 [DEBUG] [Thread-170710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:33:23.469 [INFO] [Thread-170710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:33:23.477 [DEBUG] [Thread-170710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:33:23.477 [DEBUG] [Thread-170710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:33:23.477 [DEBUG] [Thread-170710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:33:23.477 [DEBUG] [Thread-170710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] client lang: <none>
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] server lang: <none>
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] kex follows: False
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:33:23.478 [DEBUG] [Thread-170710] [transport.py] [_log()] Compression: none
2026-04-11T13:33:23.479 [DEBUG] [Thread-170710] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:33:23.534 [DEBUG] [Thread-170710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:33:23.535 [DEBUG] [Thread-170710] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:33:23.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:33:23.536 [DEBUG] [Thread-170710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:33:23.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:33:23.591 [DEBUG] [Thread-170710] [transport.py] [_log()] userauth is OK
2026-04-11T13:33:23.591 [DEBUG] [Thread-170710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:33:23.591 [DEBUG] [Thread-170710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:33:23.591 [DEBUG] [Thread-170710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:33:23.591 [DEBUG] [Thread-170710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:33:23.610 [INFO] [Thread-170710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:33:23.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:33:23.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:33:24.444 [DEBUG] [Thread-170710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:33:24.444 [DEBUG] [Thread-170710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:33:24.493 [DEBUG] [Thread-170710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:33:24.493 [DEBUG] [Thread-170710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:33:24.502 [DEBUG] [Thread-170710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:33:24.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:33:24.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-04-11T13:33:24.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-04-11T13:33:24.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:33:24.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:33:24.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:33:24.539 [DEBUG] [Thread-170710] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:33:30.151 [DEBUG] [Thread-170712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:45.216 [DEBUG] [Thread-170713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:33:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:33:54.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:33:54.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:33:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 33, 25), 0.079465, 99.7679, 0.0, 8.78796, 13.8623, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:33:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:33:25
2026-04-11T13:33:56.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:33:56.367 [DEBUG] [Thread-170714] [transport.py] [_log()] starting thread (client mode): 0xa79b7430
2026-04-11T13:33:56.367 [DEBUG] [Thread-170714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:33:56.379 [DEBUG] [Thread-170714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:33:56.379 [INFO] [Thread-170714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:33:56.382 [DEBUG] [Thread-170714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:33:56.382 [DEBUG] [Thread-170714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:33:56.382 [DEBUG] [Thread-170714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] client lang: <none>
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] server lang: <none>
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] kex follows: False
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] Compression: none
2026-04-11T13:33:56.383 [DEBUG] [Thread-170714] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:33:56.398 [DEBUG] [Thread-170714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:33:56.399 [DEBUG] [Thread-170714] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:33:56.399 [DEBUG] [Thread-170714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:33:56.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:33:56.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:33:56.401 [DEBUG] [Thread-170714] [transport.py] [_log()] userauth is OK
2026-04-11T13:33:56.401 [DEBUG] [Thread-170714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:33:56.401 [DEBUG] [Thread-170714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:33:56.401 [DEBUG] [Thread-170714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:33:56.401 [DEBUG] [Thread-170714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:33:56.437 [INFO] [Thread-170714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:33:56.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:33:57.063 [DEBUG] [Thread-170714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:33:57.063 [DEBUG] [Thread-170714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:33:57.064 [DEBUG] [Thread-170714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:33:57.104 [DEBUG] [Thread-170714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:33:57.104 [DEBUG] [Thread-170714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:33:57.107 [DEBUG] [Thread-170714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:33:57.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:33:57.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:33:57.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:33:57.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:33:57.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:33:57.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:33:57.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:33:57.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:33:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:33:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.481715 -999.00  +14.00  10.37     96  +13.40 1 3 1 3 1   888    0 0.72 6.58 ----- 10.7 10.4 52.6 13.9 16.2 -0.2 16.3 -0.8 15.8 -0.2 16.0 0.4
2026-04-11T13:33:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:33:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:33:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.481715
2026-04-11T13:33:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:33:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:33:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:33:57.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:33:57.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:33:57.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:33:25', tmtdew=0.079465, humidity=99.7679, cloud=0.0, wind=8.78796, temperature=13.8623, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:33:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:33:57.133 [DEBUG] [Thread-170714] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:33:57.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:33:57.224 [DEBUG] [Thread-170717] [transport.py] [_log()] starting thread (client mode): 0xae537a90
2026-04-11T13:33:57.224 [DEBUG] [Thread-170717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:33:57.238 [DEBUG] [Thread-170717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:33:57.239 [INFO] [Thread-170717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] client lang: <none>
2026-04-11T13:33:57.246 [DEBUG] [Thread-170717] [transport.py] [_log()] server lang: <none>
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] kex follows: False
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] Compression: none
2026-04-11T13:33:57.247 [DEBUG] [Thread-170717] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:33:57.304 [DEBUG] [Thread-170717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:33:57.304 [DEBUG] [Thread-170717] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:33:57.305 [DEBUG] [Thread-170717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:33:57.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:33:57.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:33:57.360 [DEBUG] [Thread-170717] [transport.py] [_log()] userauth is OK
2026-04-11T13:33:57.360 [DEBUG] [Thread-170717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:33:57.360 [DEBUG] [Thread-170717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:33:57.360 [DEBUG] [Thread-170717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:33:57.360 [DEBUG] [Thread-170717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:33:57.385 [INFO] [Thread-170717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:33:57.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:33:57.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:33:58.184 [DEBUG] [Thread-170717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:33:58.184 [DEBUG] [Thread-170717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:33:58.232 [DEBUG] [Thread-170717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:33:58.232 [DEBUG] [Thread-170717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:33:58.241 [DEBUG] [Thread-170717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:33:58.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:33:58.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:33:58.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-04-11T13:33:58.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:33:58.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:33:58.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:33:58.278 [DEBUG] [Thread-170717] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:34:00.255 [DEBUG] [Thread-170719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:34:02.859 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:34:02.861 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:34:07.844 [DEBUG] [Thread-170720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:34:15.309 [DEBUG] [Thread-170721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:34:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:34:28.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:34:28.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-04-11T13:34:29.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 34), 0.08462, 99.7347, 0.0, 8.87616, 13.696, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:34:29.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:34:00
2026-04-11T13:34:29.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:34:30.110 [DEBUG] [Thread-170722] [transport.py] [_log()] starting thread (client mode): 0xae563cd0
2026-04-11T13:34:30.110 [DEBUG] [Thread-170722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:34:30.131 [DEBUG] [Thread-170722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:34:30.131 [INFO] [Thread-170722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] client lang: <none>
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] server lang: <none>
2026-04-11T13:34:30.134 [DEBUG] [Thread-170722] [transport.py] [_log()] kex follows: False
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] Compression: none
2026-04-11T13:34:30.135 [DEBUG] [Thread-170722] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:34:30.154 [DEBUG] [Thread-170722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:34:30.154 [DEBUG] [Thread-170722] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:34:30.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:34:30.155 [DEBUG] [Thread-170722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:34:30.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:34:30.157 [DEBUG] [Thread-170722] [transport.py] [_log()] userauth is OK
2026-04-11T13:34:30.157 [DEBUG] [Thread-170722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:34:30.157 [DEBUG] [Thread-170722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:34:30.157 [DEBUG] [Thread-170722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:34:30.157 [DEBUG] [Thread-170722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:34:30.178 [INFO] [Thread-170722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:34:30.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:34:30.346 [DEBUG] [Thread-170724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:34:30.805 [DEBUG] [Thread-170722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:34:30.805 [DEBUG] [Thread-170722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:34:30.806 [DEBUG] [Thread-170722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:34:30.846 [DEBUG] [Thread-170722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:34:30.846 [DEBUG] [Thread-170722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:34:30.848 [DEBUG] [Thread-170722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:34:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:34:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:34:30.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:34:30.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:34:30.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:34:30.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:34:30.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:34:30.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:34:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:34:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.482063 -999.00  +13.90  13.85     96  +13.40 1 3 1 3 1   888    0 0.70 6.18 ----- 11.4 13.8 46.8 15.9 16.2 0.2 16.3 -0.5 15.8 -0.6 16.0 0.6
2026-04-11T13:34:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:34:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:34:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.482063
2026-04-11T13:34:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:34:00', tmtdew=0.08462, humidity=99.7347, cloud=0.0, wind=8.87616, temperature=13.696, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:34:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:34:30.871 [DEBUG] [Thread-170722] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:34:30.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:34:30.967 [DEBUG] [Thread-170726] [transport.py] [_log()] starting thread (client mode): 0xae5b7160
2026-04-11T13:34:30.968 [DEBUG] [Thread-170726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:34:30.982 [DEBUG] [Thread-170726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:34:30.982 [INFO] [Thread-170726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:34:30.989 [DEBUG] [Thread-170726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:34:30.989 [DEBUG] [Thread-170726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:34:30.989 [DEBUG] [Thread-170726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:34:30.989 [DEBUG] [Thread-170726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] client lang: <none>
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] server lang: <none>
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] kex follows: False
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:34:30.990 [DEBUG] [Thread-170726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:34:30.991 [DEBUG] [Thread-170726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:34:30.991 [DEBUG] [Thread-170726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:34:30.991 [DEBUG] [Thread-170726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:34:30.991 [DEBUG] [Thread-170726] [transport.py] [_log()] Compression: none
2026-04-11T13:34:30.991 [DEBUG] [Thread-170726] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:34:31.049 [DEBUG] [Thread-170726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:34:31.050 [DEBUG] [Thread-170726] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:34:31.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:34:31.051 [DEBUG] [Thread-170726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:34:31.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:34:31.105 [DEBUG] [Thread-170726] [transport.py] [_log()] userauth is OK
2026-04-11T13:34:31.105 [DEBUG] [Thread-170726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:34:31.105 [DEBUG] [Thread-170726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:34:31.105 [DEBUG] [Thread-170726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:34:31.105 [DEBUG] [Thread-170726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:34:31.124 [INFO] [Thread-170726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:34:31.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:34:31.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:34:31.970 [DEBUG] [Thread-170726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:34:31.970 [DEBUG] [Thread-170726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:34:32.020 [DEBUG] [Thread-170726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:34:32.020 [DEBUG] [Thread-170726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:34:32.028 [DEBUG] [Thread-170726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:34:32.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:34:32.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-04-11T13:34:32.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-04-11T13:34:32.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:34:32.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:34:32.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:34:32.062 [DEBUG] [Thread-170726] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:34:45.380 [DEBUG] [Thread-170728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:00.431 [DEBUG] [Thread-170729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:35:02.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:35:02.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-04-11T13:35:03.002 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:03.003 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:03.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 34, 36), 0.05893, 99.5358, 0.0, 9.24696, 14.1578, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:35:03.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:34:36
2026-04-11T13:35:03.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:35:04.018 [DEBUG] [Thread-170730] [transport.py] [_log()] starting thread (client mode): 0xb0fe9c60
2026-04-11T13:35:04.019 [DEBUG] [Thread-170730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:35:04.039 [DEBUG] [Thread-170730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:35:04.039 [INFO] [Thread-170730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] client lang: <none>
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] server lang: <none>
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] kex follows: False
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:35:04.042 [DEBUG] [Thread-170730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:35:04.043 [DEBUG] [Thread-170730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:35:04.043 [DEBUG] [Thread-170730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:35:04.043 [DEBUG] [Thread-170730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:35:04.043 [DEBUG] [Thread-170730] [transport.py] [_log()] Compression: none
2026-04-11T13:35:04.043 [DEBUG] [Thread-170730] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:35:04.060 [DEBUG] [Thread-170730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:35:04.060 [DEBUG] [Thread-170730] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:35:04.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:35:04.061 [DEBUG] [Thread-170730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:35:04.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:35:04.063 [DEBUG] [Thread-170730] [transport.py] [_log()] userauth is OK
2026-04-11T13:35:04.064 [DEBUG] [Thread-170730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:35:04.064 [DEBUG] [Thread-170730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:35:04.064 [DEBUG] [Thread-170730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:35:04.064 [DEBUG] [Thread-170730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:35:04.088 [INFO] [Thread-170730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:35:04.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:35:07.903 [DEBUG] [Thread-170732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:12.150 [DEBUG] [Thread-170730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:35:12.150 [DEBUG] [Thread-170730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:35:12.151 [DEBUG] [Thread-170730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:35:12.191 [DEBUG] [Thread-170730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:35:12.191 [DEBUG] [Thread-170730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:35:12.195 [DEBUG] [Thread-170730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:35:12.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:35:12.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:35:12.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:35:12.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:35:12.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:35:12.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:35:12.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:35:12.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:35:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:35:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.482410 -999.00  +13.80  10.61     96  +13.30 1 3 1 3 1   888    0 0.69 5.45 ----- 9.2 10.6 55.6 12.8 16.2 0.2 16.2 -0.5 15.8 0.3 16.0 0.7
2026-04-11T13:35:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:35:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:35:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.482410
2026-04-11T13:35:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:35:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:35:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:35:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:35:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:35:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:34:36', tmtdew=0.05893, humidity=99.5358, cloud=0.0, wind=9.24696, temperature=14.1578, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:34:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:35:12.226 [DEBUG] [Thread-170730] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:35:12.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:35:12.322 [DEBUG] [Thread-170734] [transport.py] [_log()] starting thread (client mode): 0xae534f10
2026-04-11T13:35:12.322 [DEBUG] [Thread-170734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:35:12.338 [DEBUG] [Thread-170734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:35:12.338 [INFO] [Thread-170734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:35:12.345 [DEBUG] [Thread-170734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] client lang: <none>
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] server lang: <none>
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] kex follows: False
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:35:12.346 [DEBUG] [Thread-170734] [transport.py] [_log()] Compression: none
2026-04-11T13:35:12.347 [DEBUG] [Thread-170734] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:35:12.409 [DEBUG] [Thread-170734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:35:12.409 [DEBUG] [Thread-170734] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:35:12.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:35:12.411 [DEBUG] [Thread-170734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:35:12.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:35:12.479 [DEBUG] [Thread-170734] [transport.py] [_log()] userauth is OK
2026-04-11T13:35:12.479 [DEBUG] [Thread-170734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:35:12.479 [DEBUG] [Thread-170734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:35:12.479 [DEBUG] [Thread-170734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:35:12.479 [DEBUG] [Thread-170734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:35:12.503 [INFO] [Thread-170734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:35:12.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:35:12.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:35:13.311 [DEBUG] [Thread-170734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:35:13.311 [DEBUG] [Thread-170734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:35:13.359 [DEBUG] [Thread-170734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:35:13.359 [DEBUG] [Thread-170734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:35:13.368 [DEBUG] [Thread-170734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:35:13.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:35:13.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-04-11T13:35:13.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-04-11T13:35:13.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:35:13.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:35:13.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:35:13.404 [DEBUG] [Thread-170734] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:35:15.468 [DEBUG] [Thread-170736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:30.520 [DEBUG] [Thread-170737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:43.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:35:43.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:35:43.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-04-11T13:35:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 35, 11), 0.074305, 99.8011, 0.0, 5.75388, 13.8786, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:35:44.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:35:11
2026-04-11T13:35:45.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:35:45.292 [DEBUG] [Thread-170738] [transport.py] [_log()] starting thread (client mode): 0xa79b6c80
2026-04-11T13:35:45.292 [DEBUG] [Thread-170738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:35:45.313 [DEBUG] [Thread-170738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:35:45.313 [INFO] [Thread-170738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:35:45.315 [DEBUG] [Thread-170738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] client lang: <none>
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] server lang: <none>
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] kex follows: False
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] Compression: none
2026-04-11T13:35:45.316 [DEBUG] [Thread-170738] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:35:45.325 [DEBUG] [Thread-170738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:35:45.326 [DEBUG] [Thread-170738] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:35:45.326 [DEBUG] [Thread-170738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:35:45.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:35:45.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:35:45.328 [DEBUG] [Thread-170738] [transport.py] [_log()] userauth is OK
2026-04-11T13:35:45.328 [DEBUG] [Thread-170738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:35:45.328 [DEBUG] [Thread-170738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:35:45.328 [DEBUG] [Thread-170738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:35:45.328 [DEBUG] [Thread-170738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:35:45.354 [INFO] [Thread-170738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:35:45.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:35:45.558 [DEBUG] [Thread-170740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:35:46.009 [DEBUG] [Thread-170738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:35:46.009 [DEBUG] [Thread-170738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:35:46.010 [DEBUG] [Thread-170738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:35:46.050 [DEBUG] [Thread-170738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:35:46.050 [DEBUG] [Thread-170738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:35:46.054 [DEBUG] [Thread-170738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:35:46.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:35:46.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:35:46.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:35:46.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:35:46.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:35:46.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:35:46.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:35:46.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:35:46.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:35:46.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.482757 -999.00  +14.00   9.53     96  +13.40 1 3 1 3 1   888    0 0.69 5.64 ----- 11.7 9.5 40.2 11.9 16.3 0.5 16.4 -0.0 15.9 0.4 16.1 0.8
2026-04-11T13:35:46.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:35:46.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:35:46.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.482757
2026-04-11T13:35:46.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:35:46.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:35:46.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:35:46.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:35:46.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:35:46.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:35:11', tmtdew=0.074305, humidity=99.8011, cloud=0.0, wind=5.75388, temperature=13.8786, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:35:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:35:46.080 [DEBUG] [Thread-170738] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:35:46.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:35:46.172 [DEBUG] [Thread-170742] [transport.py] [_log()] starting thread (client mode): 0xae5345b0
2026-04-11T13:35:46.172 [DEBUG] [Thread-170742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:35:46.187 [DEBUG] [Thread-170742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:35:46.187 [INFO] [Thread-170742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:35:46.194 [DEBUG] [Thread-170742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:35:46.194 [DEBUG] [Thread-170742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] client lang: <none>
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] server lang: <none>
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] kex follows: False
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] Compression: none
2026-04-11T13:35:46.195 [DEBUG] [Thread-170742] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:35:46.254 [DEBUG] [Thread-170742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:35:46.254 [DEBUG] [Thread-170742] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:35:46.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:35:46.256 [DEBUG] [Thread-170742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:35:46.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:35:46.315 [DEBUG] [Thread-170742] [transport.py] [_log()] userauth is OK
2026-04-11T13:35:46.315 [DEBUG] [Thread-170742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:35:46.315 [DEBUG] [Thread-170742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:35:46.315 [DEBUG] [Thread-170742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:35:46.315 [DEBUG] [Thread-170742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:35:46.329 [INFO] [Thread-170742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:35:46.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:35:46.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:35:47.224 [DEBUG] [Thread-170742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:35:47.224 [DEBUG] [Thread-170742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:35:47.272 [DEBUG] [Thread-170742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:35:47.272 [DEBUG] [Thread-170742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:35:47.285 [DEBUG] [Thread-170742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:35:47.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:35:47.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-04-11T13:35:47.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:35:47.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:35:47.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:35:47.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:35:47.322 [DEBUG] [Thread-170742] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:36:00.596 [DEBUG] [Thread-170744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:03.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:03.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:07.963 [DEBUG] [Thread-170745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:15.648 [DEBUG] [Thread-170746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:17.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:36:17.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:36:17.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-04-11T13:36:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 35, 47), 0.0692, 99.4695, 0.0, 11.5754, 14.1578, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:36:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:35:47
2026-04-11T13:36:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:36:19.154 [DEBUG] [Thread-170747] [transport.py] [_log()] starting thread (client mode): 0xb0fea9e0
2026-04-11T13:36:19.154 [DEBUG] [Thread-170747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:36:19.173 [DEBUG] [Thread-170747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:36:19.174 [INFO] [Thread-170747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] client lang: <none>
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] server lang: <none>
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] kex follows: False
2026-04-11T13:36:19.177 [DEBUG] [Thread-170747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:36:19.178 [DEBUG] [Thread-170747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:36:19.178 [DEBUG] [Thread-170747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:36:19.178 [DEBUG] [Thread-170747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:36:19.178 [DEBUG] [Thread-170747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:36:19.178 [DEBUG] [Thread-170747] [transport.py] [_log()] Compression: none
2026-04-11T13:36:19.178 [DEBUG] [Thread-170747] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:36:19.195 [DEBUG] [Thread-170747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:36:19.196 [DEBUG] [Thread-170747] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:36:19.196 [DEBUG] [Thread-170747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:36:19.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:36:19.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:36:19.198 [DEBUG] [Thread-170747] [transport.py] [_log()] userauth is OK
2026-04-11T13:36:19.198 [DEBUG] [Thread-170747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:36:19.198 [DEBUG] [Thread-170747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:36:19.198 [DEBUG] [Thread-170747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:36:19.198 [DEBUG] [Thread-170747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:36:19.218 [INFO] [Thread-170747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:36:19.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:36:19.901 [DEBUG] [Thread-170747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:36:19.901 [DEBUG] [Thread-170747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:36:19.901 [DEBUG] [Thread-170747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:36:19.942 [DEBUG] [Thread-170747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:36:19.942 [DEBUG] [Thread-170747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:36:19.946 [DEBUG] [Thread-170747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:36:19.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:36:19.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:36:19.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:36:19.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:36:19.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:36:19.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:36:19.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:36:19.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:36:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:36:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.483104 -999.00  +13.80  10.86     96  +13.20 1 3 1 3 1   888    0 0.69 5.52 ----- 9.3 10.9 45.0 12.1 16.3 0.0 16.3 -0.3 15.8 0.1 16.1 0.7
2026-04-11T13:36:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:36:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:36:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.483104
2026-04-11T13:36:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:36:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:36:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:36:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:36:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:36:19.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:35:47', tmtdew=0.0692, humidity=99.4695, cloud=0.0, wind=11.5754, temperature=14.1578, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:35:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:36:19.972 [DEBUG] [Thread-170747] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:36:20.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:36:20.076 [DEBUG] [Thread-170750] [transport.py] [_log()] starting thread (client mode): 0xb0fe8520
2026-04-11T13:36:20.076 [DEBUG] [Thread-170750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:36:20.090 [DEBUG] [Thread-170750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:36:20.090 [INFO] [Thread-170750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:36:20.097 [DEBUG] [Thread-170750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:36:20.098 [DEBUG] [Thread-170750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] client lang: <none>
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] server lang: <none>
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] kex follows: False
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] Compression: none
2026-04-11T13:36:20.099 [DEBUG] [Thread-170750] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:36:20.155 [DEBUG] [Thread-170750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:36:20.156 [DEBUG] [Thread-170750] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:36:20.157 [DEBUG] [Thread-170750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:36:20.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:36:20.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:36:20.211 [DEBUG] [Thread-170750] [transport.py] [_log()] userauth is OK
2026-04-11T13:36:20.211 [DEBUG] [Thread-170750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:36:20.212 [DEBUG] [Thread-170750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:36:20.212 [DEBUG] [Thread-170750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:36:20.212 [DEBUG] [Thread-170750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:36:20.235 [INFO] [Thread-170750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:36:20.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:36:20.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:36:21.052 [DEBUG] [Thread-170750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:36:21.052 [DEBUG] [Thread-170750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:36:21.100 [DEBUG] [Thread-170750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:36:21.100 [DEBUG] [Thread-170750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:36:21.109 [DEBUG] [Thread-170750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:36:21.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:36:21.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-04-11T13:36:21.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-04-11T13:36:21.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:36:21.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:36:21.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:36:21.147 [DEBUG] [Thread-170750] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:36:30.684 [DEBUG] [Thread-170752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:45.734 [DEBUG] [Thread-170753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:36:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:36:51.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:36:51.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-04-11T13:36:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 36, 23), 0.076865, 99.7845, 0.0, 13.1994, 13.8284, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:36:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:36:23
2026-04-11T13:36:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:36:53.024 [DEBUG] [Thread-170754] [transport.py] [_log()] starting thread (client mode): 0xb0fea830
2026-04-11T13:36:53.024 [DEBUG] [Thread-170754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:36:53.045 [DEBUG] [Thread-170754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:36:53.045 [INFO] [Thread-170754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] client lang: <none>
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] server lang: <none>
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] kex follows: False
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] Compression: none
2026-04-11T13:36:53.048 [DEBUG] [Thread-170754] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:36:53.068 [DEBUG] [Thread-170754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:36:53.069 [DEBUG] [Thread-170754] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:36:53.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:36:53.070 [DEBUG] [Thread-170754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:36:53.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:36:53.072 [DEBUG] [Thread-170754] [transport.py] [_log()] userauth is OK
2026-04-11T13:36:53.072 [DEBUG] [Thread-170754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:36:53.073 [DEBUG] [Thread-170754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:36:53.073 [DEBUG] [Thread-170754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:36:53.073 [DEBUG] [Thread-170754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:36:53.099 [INFO] [Thread-170754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:36:53.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:36:53.750 [DEBUG] [Thread-170754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:36:53.750 [DEBUG] [Thread-170754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:36:53.750 [DEBUG] [Thread-170754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:36:53.791 [DEBUG] [Thread-170754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:36:53.791 [DEBUG] [Thread-170754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:36:53.794 [DEBUG] [Thread-170754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:36:53.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:36:53.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:36:53.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:36:53.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:36:53.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:36:53.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:36:53.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:36:53.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:36:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:36:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.483799 -999.00  +13.90   9.51     96  +13.40 1 3 1 3 1   888    0 0.69 5.62 ----- 9.7 9.5 45.4 12.9 16.3 0.1 16.4 -0.4 15.9 -0.4 16.1 0.4
2026-04-11T13:36:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:36:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:36:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.483799
2026-04-11T13:36:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:36:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:36:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:36:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:36:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:36:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:36:23', tmtdew=0.076865, humidity=99.7845, cloud=0.0, wind=13.1994, temperature=13.8284, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:36:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:36:53.823 [DEBUG] [Thread-170754] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:36:53.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:36:53.917 [DEBUG] [Thread-170757] [transport.py] [_log()] starting thread (client mode): 0xae534610
2026-04-11T13:36:53.917 [DEBUG] [Thread-170757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:36:53.932 [DEBUG] [Thread-170757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:36:53.933 [INFO] [Thread-170757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:36:53.940 [DEBUG] [Thread-170757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:36:53.941 [DEBUG] [Thread-170757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] client lang: <none>
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] server lang: <none>
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] kex follows: False
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:36:53.942 [DEBUG] [Thread-170757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:36:53.943 [DEBUG] [Thread-170757] [transport.py] [_log()] Compression: none
2026-04-11T13:36:53.943 [DEBUG] [Thread-170757] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:36:53.998 [DEBUG] [Thread-170757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:36:53.999 [DEBUG] [Thread-170757] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:36:54.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:36:54.001 [DEBUG] [Thread-170757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:36:54.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:36:54.054 [DEBUG] [Thread-170757] [transport.py] [_log()] userauth is OK
2026-04-11T13:36:54.054 [DEBUG] [Thread-170757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:36:54.055 [DEBUG] [Thread-170757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:36:54.055 [DEBUG] [Thread-170757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:36:54.055 [DEBUG] [Thread-170757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:36:54.074 [INFO] [Thread-170757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:36:54.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:36:54.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:36:54.954 [DEBUG] [Thread-170757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:36:54.955 [DEBUG] [Thread-170757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:36:55.003 [DEBUG] [Thread-170757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:36:55.003 [DEBUG] [Thread-170757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:36:55.012 [DEBUG] [Thread-170757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:36:55.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:36: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')
2026-04-11T13:36:55.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-04-11T13:36:55.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:36:55.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:36:55.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:36:55.049 [DEBUG] [Thread-170757] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:37:00.776 [DEBUG] [Thread-170759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:03.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:03.286 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:08.023 [DEBUG] [Thread-170760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:15.838 [DEBUG] [Thread-170761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:25.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:37:25.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:37:25.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-04-11T13:37:26.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 36, 58), 0.029435, 99.7679, 0.0, 10.7291, 13.795, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:37:26.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:36:58
2026-04-11T13:37:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:37:26.980 [DEBUG] [Thread-170762] [transport.py] [_log()] starting thread (client mode): 0xae5353c0
2026-04-11T13:37:26.981 [DEBUG] [Thread-170762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:37:27.000 [DEBUG] [Thread-170762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:37:27.001 [INFO] [Thread-170762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] client lang: <none>
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] server lang: <none>
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] kex follows: False
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:37:27.004 [DEBUG] [Thread-170762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:37:27.005 [DEBUG] [Thread-170762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:37:27.005 [DEBUG] [Thread-170762] [transport.py] [_log()] Compression: none
2026-04-11T13:37:27.005 [DEBUG] [Thread-170762] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:37:27.023 [DEBUG] [Thread-170762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:37:27.023 [DEBUG] [Thread-170762] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:37:27.024 [DEBUG] [Thread-170762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:37:27.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:37:27.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:37:27.026 [DEBUG] [Thread-170762] [transport.py] [_log()] userauth is OK
2026-04-11T13:37:27.027 [DEBUG] [Thread-170762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:37:27.027 [DEBUG] [Thread-170762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:37:27.027 [DEBUG] [Thread-170762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:37:27.027 [DEBUG] [Thread-170762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:37:27.052 [INFO] [Thread-170762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:37:27.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:37:27.640 [DEBUG] [Thread-170762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:37:27.641 [DEBUG] [Thread-170762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:37:27.641 [DEBUG] [Thread-170762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:37:27.683 [DEBUG] [Thread-170762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:37:27.683 [DEBUG] [Thread-170762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:37:27.686 [DEBUG] [Thread-170762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:37:27.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:37:27.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:37:27.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:37:27.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:37:27.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:37:27.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:37:27.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:37:27.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:37:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:37:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.484146 -999.00  +13.90  10.22     96  +13.30 1 3 1 3 1   888    0 0.70 5.49 ----- 10.5 10.2 52.2 11.3 16.3 0.1 16.3 -0.8 15.8 -0.1 16.1 0.1
2026-04-11T13:37:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:37:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:37:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.484146
2026-04-11T13:37:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:37:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:37:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:37:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:37:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:37:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:36:58', tmtdew=0.029435, humidity=99.7679, cloud=0.0, wind=10.7291, temperature=13.795, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:37:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:37:27.716 [DEBUG] [Thread-170762] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:37:27.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:37:27.822 [DEBUG] [Thread-170765] [transport.py] [_log()] starting thread (client mode): 0xb0fe98a0
2026-04-11T13:37:27.822 [DEBUG] [Thread-170765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:37:27.840 [DEBUG] [Thread-170765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:37:27.840 [INFO] [Thread-170765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] client lang: <none>
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] server lang: <none>
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] kex follows: False
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:37:27.850 [DEBUG] [Thread-170765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:37:27.851 [DEBUG] [Thread-170765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:37:27.851 [DEBUG] [Thread-170765] [transport.py] [_log()] Compression: none
2026-04-11T13:37:27.851 [DEBUG] [Thread-170765] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:37:27.906 [DEBUG] [Thread-170765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:37:27.906 [DEBUG] [Thread-170765] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:37:27.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:37:27.907 [DEBUG] [Thread-170765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:37:27.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:37:27.971 [DEBUG] [Thread-170765] [transport.py] [_log()] userauth is OK
2026-04-11T13:37:27.971 [DEBUG] [Thread-170765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:37:27.971 [DEBUG] [Thread-170765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:37:27.971 [DEBUG] [Thread-170765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:37:27.971 [DEBUG] [Thread-170765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:37:27.989 [INFO] [Thread-170765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:37:27.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:37:27.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:37:28.819 [DEBUG] [Thread-170765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:37:28.819 [DEBUG] [Thread-170765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:37:28.866 [DEBUG] [Thread-170765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:37:28.866 [DEBUG] [Thread-170765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:37:28.875 [DEBUG] [Thread-170765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:37:28.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:37:28.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-04-11T13:37:28.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-04-11T13:37:28.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:37:28.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:37:28.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:37:28.907 [DEBUG] [Thread-170765] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:37:30.875 [DEBUG] [Thread-170767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:45.928 [DEBUG] [Thread-170768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:37:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:37:58.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:37:58.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-04-11T13:38:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 37, 34), 0.04855, 99.6021, 0.0, 10.4112, 14.4231, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:38:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:37:34
2026-04-11T13:38:00.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:38:00.743 [DEBUG] [Thread-170769] [transport.py] [_log()] starting thread (client mode): 0xae5353f0
2026-04-11T13:38:00.743 [DEBUG] [Thread-170769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:38:00.761 [DEBUG] [Thread-170769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:38:00.761 [INFO] [Thread-170769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:38:00.764 [DEBUG] [Thread-170769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] client lang: <none>
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] server lang: <none>
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] kex follows: False
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] Compression: none
2026-04-11T13:38:00.765 [DEBUG] [Thread-170769] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:38:00.782 [DEBUG] [Thread-170769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:38:00.783 [DEBUG] [Thread-170769] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:38:00.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:38:00.784 [DEBUG] [Thread-170769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:38:00.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:38:00.786 [DEBUG] [Thread-170769] [transport.py] [_log()] userauth is OK
2026-04-11T13:38:00.786 [DEBUG] [Thread-170769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:38:00.786 [DEBUG] [Thread-170769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:38:00.786 [DEBUG] [Thread-170769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:38:00.786 [DEBUG] [Thread-170769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:38:00.822 [INFO] [Thread-170769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:38:00.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:38:00.969 [DEBUG] [Thread-170771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:38:01.447 [DEBUG] [Thread-170769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:38:01.447 [DEBUG] [Thread-170769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:38:01.448 [DEBUG] [Thread-170769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:38:01.488 [DEBUG] [Thread-170769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:38:01.488 [DEBUG] [Thread-170769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:38:01.492 [DEBUG] [Thread-170769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:38:01.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:38:01.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:38:01.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:38:01.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:38:01.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:38:01.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:38:01.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:38:01.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:38:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:38:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.484493 -999.00  +14.10  13.31     96  +13.50 1 3 1 3 1   888    0 0.68 4.96 ----- 12.2 13.3 52.6 14.4 16.3 -0.0 16.3 -0.9 15.9 -0.3 16.1 0.4
2026-04-11T13:38:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:38:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:38:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.484493
2026-04-11T13:38:01.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:38:01.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:38:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:38:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:38:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:38:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:37:34', tmtdew=0.04855, humidity=99.6021, cloud=0.0, wind=10.4112, temperature=14.4231, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:37:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:38:01.521 [DEBUG] [Thread-170769] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:38:01.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:38:01.614 [DEBUG] [Thread-170773] [transport.py] [_log()] starting thread (client mode): 0xae535b10
2026-04-11T13:38:01.614 [DEBUG] [Thread-170773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:38:01.628 [DEBUG] [Thread-170773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:38:01.628 [INFO] [Thread-170773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:38:01.635 [DEBUG] [Thread-170773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:38:01.635 [DEBUG] [Thread-170773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] client lang: <none>
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] server lang: <none>
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] kex follows: False
2026-04-11T13:38:01.636 [DEBUG] [Thread-170773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:38:01.637 [DEBUG] [Thread-170773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:38:01.637 [DEBUG] [Thread-170773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:38:01.637 [DEBUG] [Thread-170773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:38:01.637 [DEBUG] [Thread-170773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:38:01.637 [DEBUG] [Thread-170773] [transport.py] [_log()] Compression: none
2026-04-11T13:38:01.637 [DEBUG] [Thread-170773] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:38:01.694 [DEBUG] [Thread-170773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:38:01.695 [DEBUG] [Thread-170773] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:38:01.696 [DEBUG] [Thread-170773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:38:01.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:38:01.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:38:01.750 [DEBUG] [Thread-170773] [transport.py] [_log()] userauth is OK
2026-04-11T13:38:01.751 [DEBUG] [Thread-170773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:38:01.751 [DEBUG] [Thread-170773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:38:01.751 [DEBUG] [Thread-170773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:38:01.751 [DEBUG] [Thread-170773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:38:01.770 [INFO] [Thread-170773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:38:01.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:38:01.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:38:02.635 [DEBUG] [Thread-170773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:38:02.636 [DEBUG] [Thread-170773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:38:02.684 [DEBUG] [Thread-170773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:38:02.684 [DEBUG] [Thread-170773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:38:02.693 [DEBUG] [Thread-170773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:38:02.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:38:02.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-04-11T13:38:02.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-04-11T13:38:02.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:38:02.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:38:02.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:38:02.730 [DEBUG] [Thread-170773] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:38:03.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:38:03.427 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:38:08.081 [DEBUG] [Thread-170775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:38:16.008 [DEBUG] [Thread-170776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:38:31.062 [DEBUG] [Thread-170777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:38:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:38:32.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:38:32.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-04-11T13:38:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 38, 9), 0.07685, 99.7845, 0.0, 9.14076, 13.9115, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:38:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:38:09
2026-04-11T13:38:34.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:38:34.547 [DEBUG] [Thread-170778] [transport.py] [_log()] starting thread (client mode): 0xae50a9e0
2026-04-11T13:38:34.547 [DEBUG] [Thread-170778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:38:34.567 [DEBUG] [Thread-170778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:38:34.567 [INFO] [Thread-170778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:38:34.570 [DEBUG] [Thread-170778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:38:34.570 [DEBUG] [Thread-170778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:38:34.570 [DEBUG] [Thread-170778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:38:34.570 [DEBUG] [Thread-170778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:34.570 [DEBUG] [Thread-170778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:34.570 [DEBUG] [Thread-170778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] client lang: <none>
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] server lang: <none>
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] kex follows: False
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] Compression: none
2026-04-11T13:38:34.571 [DEBUG] [Thread-170778] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:38:34.590 [DEBUG] [Thread-170778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:38:34.590 [DEBUG] [Thread-170778] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:38:34.591 [DEBUG] [Thread-170778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:38:34.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:38:34.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:38:34.593 [DEBUG] [Thread-170778] [transport.py] [_log()] userauth is OK
2026-04-11T13:38:34.593 [DEBUG] [Thread-170778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:38:34.593 [DEBUG] [Thread-170778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:38:34.594 [DEBUG] [Thread-170778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:38:34.594 [DEBUG] [Thread-170778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:38:34.618 [INFO] [Thread-170778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:38:34.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:38:35.262 [DEBUG] [Thread-170778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:38:35.262 [DEBUG] [Thread-170778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:38:35.262 [DEBUG] [Thread-170778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:38:35.303 [DEBUG] [Thread-170778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:38:35.303 [DEBUG] [Thread-170778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:38:35.307 [DEBUG] [Thread-170778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:38:35.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:38:35.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:38:35.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:38:35.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:38:35.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:38:35.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:38:35.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:38:35.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:38:35.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:38:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.484840 -999.00  +14.00  11.68     96  +13.40 1 3 1 3 1   888    0 0.68 4.90 ----- 9.6 11.7 62.2 15.8 16.3 0.2 16.3 -0.3 15.8 -0.7 16.2 0.7
2026-04-11T13:38:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:38:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:38:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.484840
2026-04-11T13:38:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:38:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:38:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:38:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:38:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:38:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:38:09', tmtdew=0.07685, humidity=99.7845, cloud=0.0, wind=9.14076, temperature=13.9115, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:38:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:38:35.334 [DEBUG] [Thread-170778] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:38:35.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:38:35.428 [DEBUG] [Thread-170781] [transport.py] [_log()] starting thread (client mode): 0xae50b520
2026-04-11T13:38:35.428 [DEBUG] [Thread-170781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:38:35.443 [DEBUG] [Thread-170781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:38:35.443 [INFO] [Thread-170781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] client lang: <none>
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] server lang: <none>
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] kex follows: False
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:38:35.451 [DEBUG] [Thread-170781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:38:35.452 [DEBUG] [Thread-170781] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:38:35.452 [DEBUG] [Thread-170781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:38:35.452 [DEBUG] [Thread-170781] [transport.py] [_log()] Compression: none
2026-04-11T13:38:35.452 [DEBUG] [Thread-170781] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:38:35.509 [DEBUG] [Thread-170781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:38:35.510 [DEBUG] [Thread-170781] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:38:35.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:38:35.511 [DEBUG] [Thread-170781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:38:35.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:38:35.565 [DEBUG] [Thread-170781] [transport.py] [_log()] userauth is OK
2026-04-11T13:38:35.565 [DEBUG] [Thread-170781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:38:35.566 [DEBUG] [Thread-170781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:38:35.566 [DEBUG] [Thread-170781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:38:35.566 [DEBUG] [Thread-170781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:38:35.584 [INFO] [Thread-170781] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:38:35.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:38:35.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:38:36.457 [DEBUG] [Thread-170781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:38:36.457 [DEBUG] [Thread-170781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:38:36.505 [DEBUG] [Thread-170781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:38:36.505 [DEBUG] [Thread-170781] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:38:36.515 [DEBUG] [Thread-170781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:38:36.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:38:36.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-04-11T13:38:36.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:38:36.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:38:36.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:38:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:38:36.552 [DEBUG] [Thread-170781] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:38:46.102 [DEBUG] [Thread-170783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:01.160 [DEBUG] [Thread-170784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:03.566 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:03.568 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:06.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:39:06.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:39:06.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-04-11T13:39:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 38, 45), 0.06403, 99.5026, 0.0, 9.45864, 14.3236, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:39:07.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:38:45
2026-04-11T13:39:08.141 [DEBUG] [Thread-170785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:08.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:39:08.399 [DEBUG] [Thread-170786] [transport.py] [_log()] starting thread (client mode): 0xae50ad40
2026-04-11T13:39:08.399 [DEBUG] [Thread-170786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:39:08.415 [DEBUG] [Thread-170786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:39:08.415 [INFO] [Thread-170786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:39:08.418 [DEBUG] [Thread-170786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:39:08.418 [DEBUG] [Thread-170786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:39:08.418 [DEBUG] [Thread-170786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:39:08.418 [DEBUG] [Thread-170786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] client lang: <none>
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] server lang: <none>
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] kex follows: False
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] Compression: none
2026-04-11T13:39:08.419 [DEBUG] [Thread-170786] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:39:08.436 [DEBUG] [Thread-170786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:39:08.437 [DEBUG] [Thread-170786] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:39:08.438 [DEBUG] [Thread-170786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:39:08.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:39:08.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:39:08.481 [DEBUG] [Thread-170786] [transport.py] [_log()] userauth is OK
2026-04-11T13:39:08.481 [DEBUG] [Thread-170786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:39:08.482 [DEBUG] [Thread-170786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:39:08.482 [DEBUG] [Thread-170786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:39:08.482 [DEBUG] [Thread-170786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:39:08.501 [INFO] [Thread-170786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:39:08.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:39:09.155 [DEBUG] [Thread-170786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:39:09.156 [DEBUG] [Thread-170786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:39:09.156 [DEBUG] [Thread-170786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:39:09.197 [DEBUG] [Thread-170786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:39:09.197 [DEBUG] [Thread-170786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:39:09.201 [DEBUG] [Thread-170786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:39:09.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:39:09.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:39:09.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:39:09.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:39:09.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:39:09.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:39:09.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:39:09.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:39:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:39:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.485188 -999.00  +13.90  13.20     96  +13.30 1 3 1 3 1   888    0 0.69 5.09 ----- 14.0 13.2 27.0 15.4 16.2 0.2 16.3 -0.3 15.9 0.0 16.1 0.7
2026-04-11T13:39:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:39:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:39:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.485188
2026-04-11T13:39:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:38:45', tmtdew=0.06403, humidity=99.5026, cloud=0.0, wind=9.45864, temperature=14.3236, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:38:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:39:09.229 [DEBUG] [Thread-170786] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:39:09.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:39:09.322 [DEBUG] [Thread-170789] [transport.py] [_log()] starting thread (client mode): 0xae509e10
2026-04-11T13:39:09.322 [DEBUG] [Thread-170789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:39:09.337 [DEBUG] [Thread-170789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:39:09.337 [INFO] [Thread-170789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:39:09.345 [DEBUG] [Thread-170789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:39:09.345 [DEBUG] [Thread-170789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] client lang: <none>
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] server lang: <none>
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] kex follows: False
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] Compression: none
2026-04-11T13:39:09.346 [DEBUG] [Thread-170789] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:39:09.404 [DEBUG] [Thread-170789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:39:09.404 [DEBUG] [Thread-170789] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:39:09.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:39:09.406 [DEBUG] [Thread-170789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:39:09.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:39:09.460 [DEBUG] [Thread-170789] [transport.py] [_log()] userauth is OK
2026-04-11T13:39:09.461 [DEBUG] [Thread-170789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:39:09.461 [DEBUG] [Thread-170789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:39:09.461 [DEBUG] [Thread-170789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:39:09.461 [DEBUG] [Thread-170789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:39:09.479 [INFO] [Thread-170789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:39:09.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:39:09.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:39:10.290 [DEBUG] [Thread-170789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:39:10.291 [DEBUG] [Thread-170789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:39:10.338 [DEBUG] [Thread-170789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:39:10.338 [DEBUG] [Thread-170789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:39:10.348 [DEBUG] [Thread-170789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:39:10.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:39:10.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-04-11T13:39:10.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:39:10.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:39:10.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:39:10.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:39:10.385 [DEBUG] [Thread-170789] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:39:16.199 [DEBUG] [Thread-170791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:31.253 [DEBUG] [Thread-170792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:39:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:39:40.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:39:40.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-04-11T13:39:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 39, 20), 0.06913, 99.8342, 0.0, 11.0819, 14.0115, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:39:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:39:20
2026-04-11T13:39:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:39:42.317 [DEBUG] [Thread-170793] [transport.py] [_log()] starting thread (client mode): 0xae50a9e0
2026-04-11T13:39:42.317 [DEBUG] [Thread-170793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:39:42.338 [DEBUG] [Thread-170793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:39:42.339 [INFO] [Thread-170793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:39:42.342 [DEBUG] [Thread-170793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] client lang: <none>
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] server lang: <none>
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] kex follows: False
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] Compression: none
2026-04-11T13:39:42.343 [DEBUG] [Thread-170793] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:39:42.362 [DEBUG] [Thread-170793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:39:42.362 [DEBUG] [Thread-170793] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:39:42.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:39:42.363 [DEBUG] [Thread-170793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:39:42.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:39:42.367 [DEBUG] [Thread-170793] [transport.py] [_log()] userauth is OK
2026-04-11T13:39:42.367 [DEBUG] [Thread-170793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:39:42.368 [DEBUG] [Thread-170793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:39:42.368 [DEBUG] [Thread-170793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:39:42.368 [DEBUG] [Thread-170793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:39:42.394 [INFO] [Thread-170793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:39:42.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:39:42.962 [DEBUG] [Thread-170793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:39:42.963 [DEBUG] [Thread-170793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:39:42.963 [DEBUG] [Thread-170793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:39:43.006 [DEBUG] [Thread-170793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:39:43.006 [DEBUG] [Thread-170793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:39:43.010 [DEBUG] [Thread-170793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:39:43.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:39:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:39:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:39:43.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:39:43.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:39:43.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:39:43.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:39:43.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:39:43.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:39:43.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.485535 -999.00  +13.90  11.63     96  +13.30 1 3 1 3 1   888    0 0.68 4.67 ----- 11.2 11.6 40.6 12.5 16.3 0.1 16.4 0.0 15.9 0.3 16.2 0.9
2026-04-11T13:39:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:39:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:39:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.485535
2026-04-11T13:39:43.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:39:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:39:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:39:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:39:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:39:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:39:20', tmtdew=0.06913, humidity=99.8342, cloud=0.0, wind=11.0819, temperature=14.0115, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:39:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:39:43.044 [DEBUG] [Thread-170793] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:39:43.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:39:43.139 [DEBUG] [Thread-170796] [transport.py] [_log()] starting thread (client mode): 0xae5083d0
2026-04-11T13:39:43.139 [DEBUG] [Thread-170796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:39:43.154 [DEBUG] [Thread-170796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:39:43.154 [INFO] [Thread-170796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:39:43.161 [DEBUG] [Thread-170796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:39:43.161 [DEBUG] [Thread-170796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:39:43.161 [DEBUG] [Thread-170796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:39:43.161 [DEBUG] [Thread-170796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:43.161 [DEBUG] [Thread-170796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] client lang: <none>
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] server lang: <none>
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] kex follows: False
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] Compression: none
2026-04-11T13:39:43.162 [DEBUG] [Thread-170796] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:39:43.218 [DEBUG] [Thread-170796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:39:43.219 [DEBUG] [Thread-170796] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:39:43.219 [DEBUG] [Thread-170796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:39:43.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:39:43.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:39:43.275 [DEBUG] [Thread-170796] [transport.py] [_log()] userauth is OK
2026-04-11T13:39:43.275 [DEBUG] [Thread-170796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:39:43.275 [DEBUG] [Thread-170796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:39:43.275 [DEBUG] [Thread-170796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:39:43.275 [DEBUG] [Thread-170796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:39:43.293 [INFO] [Thread-170796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:39:43.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:39:43.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:39:44.101 [DEBUG] [Thread-170796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:39:44.102 [DEBUG] [Thread-170796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:39:44.149 [DEBUG] [Thread-170796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:39:44.149 [DEBUG] [Thread-170796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:39:44.158 [DEBUG] [Thread-170796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:39:44.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:39:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:39:44.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:39:44.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:39:44.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:39:44.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:39:44.195 [DEBUG] [Thread-170796] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:39:46.290 [DEBUG] [Thread-170798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:01.343 [DEBUG] [Thread-170799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:03.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:03.709 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:08.202 [DEBUG] [Thread-170800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:40:14.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:40:14.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-04-11T13:40:15.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 39, 56), 0.02684, 99.7845, 0.0, 10.0588, 13.8947, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:40:15.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:39:56
2026-04-11T13:40:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:40:16.033 [DEBUG] [Thread-170801] [transport.py] [_log()] starting thread (client mode): 0xae50a890
2026-04-11T13:40:16.034 [DEBUG] [Thread-170801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:40:16.056 [DEBUG] [Thread-170801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:40:16.056 [INFO] [Thread-170801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:40:16.058 [DEBUG] [Thread-170801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:40:16.059 [DEBUG] [Thread-170801] [transport.py] [_log()] client lang: <none>
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] server lang: <none>
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] kex follows: False
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] Compression: none
2026-04-11T13:40:16.060 [DEBUG] [Thread-170801] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:40:16.073 [DEBUG] [Thread-170801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:40:16.074 [DEBUG] [Thread-170801] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:40:16.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:40:16.075 [DEBUG] [Thread-170801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:40:16.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:40:16.077 [DEBUG] [Thread-170801] [transport.py] [_log()] userauth is OK
2026-04-11T13:40:16.077 [DEBUG] [Thread-170801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:40:16.077 [DEBUG] [Thread-170801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:40:16.077 [DEBUG] [Thread-170801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:40:16.078 [DEBUG] [Thread-170801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:40:16.100 [INFO] [Thread-170801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:40:16.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:40:16.380 [DEBUG] [Thread-170803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:16.685 [DEBUG] [Thread-170801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:40:16.685 [DEBUG] [Thread-170801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:40:16.685 [DEBUG] [Thread-170801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:40:16.727 [DEBUG] [Thread-170801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:40:16.728 [DEBUG] [Thread-170801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:40:16.730 [DEBUG] [Thread-170801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:40:16.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:40:16.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:40:16.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:40:16.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:40:16.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:40:16.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:40:16.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:40:16.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:40:16.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:40:16.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.485882 -999.00  +14.00   9.48     96  +13.40 1 3 1 3 1   888    0 0.68 4.59 ----- 10.4 9.5 38.2 13.5 16.3 0.4 16.4 0.0 16.0 0.2 16.2 1.0
2026-04-11T13:40:16.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:40:16.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:40:16.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.485882
2026-04-11T13:40:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:40:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:40:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:40:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:40:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:40:16.760 [DEBUG] [Thread-170801] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:40:16.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:39:56', tmtdew=0.02684, humidity=99.7845, cloud=0.0, wind=10.0588, temperature=13.8947, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:39:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:40:16.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:40:16.853 [DEBUG] [Thread-170805] [transport.py] [_log()] starting thread (client mode): 0xb0feb070
2026-04-11T13:40:16.854 [DEBUG] [Thread-170805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:40:16.868 [DEBUG] [Thread-170805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:40:16.869 [INFO] [Thread-170805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:40:16.876 [DEBUG] [Thread-170805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:40:16.876 [DEBUG] [Thread-170805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:40:16.877 [DEBUG] [Thread-170805] [transport.py] [_log()] client lang: <none>
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] server lang: <none>
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] kex follows: False
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] Compression: none
2026-04-11T13:40:16.878 [DEBUG] [Thread-170805] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:40:16.933 [DEBUG] [Thread-170805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:40:16.933 [DEBUG] [Thread-170805] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:40:16.933 [DEBUG] [Thread-170805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:40:16.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:40:16.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:40:16.989 [DEBUG] [Thread-170805] [transport.py] [_log()] userauth is OK
2026-04-11T13:40:16.989 [DEBUG] [Thread-170805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:40:16.990 [DEBUG] [Thread-170805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:40:16.990 [DEBUG] [Thread-170805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:40:16.990 [DEBUG] [Thread-170805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:40:17.013 [INFO] [Thread-170805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:40:17.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:40:17.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:40:17.826 [DEBUG] [Thread-170805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:40:17.826 [DEBUG] [Thread-170805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:40:17.874 [DEBUG] [Thread-170805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:40:17.875 [DEBUG] [Thread-170805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:40:17.883 [DEBUG] [Thread-170805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:40:17.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:40:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:40:17.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-04-11T13:40:17.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:40:17.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:40:17.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:40:17.915 [DEBUG] [Thread-170805] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:40:31.417 [DEBUG] [Thread-170807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:46.468 [DEBUG] [Thread-170808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:40:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:40:47.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:40:47.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-04-11T13:40:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 40, 31), 0.024265, 99.8011, 0.0, 12.6166, 13.8947, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:40:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:40:31
2026-04-11T13:40:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:40:49.827 [DEBUG] [Thread-170809] [transport.py] [_log()] starting thread (client mode): 0xb0fe91e0
2026-04-11T13:40:49.827 [DEBUG] [Thread-170809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:40:49.845 [DEBUG] [Thread-170809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:40:49.845 [INFO] [Thread-170809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:40:49.848 [DEBUG] [Thread-170809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] client lang: <none>
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] server lang: <none>
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] kex follows: False
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] Compression: none
2026-04-11T13:40:49.849 [DEBUG] [Thread-170809] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:40:49.868 [DEBUG] [Thread-170809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:40:49.869 [DEBUG] [Thread-170809] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:40:49.870 [DEBUG] [Thread-170809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:40:49.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:40:49.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:40:49.873 [DEBUG] [Thread-170809] [transport.py] [_log()] userauth is OK
2026-04-11T13:40:49.873 [DEBUG] [Thread-170809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:40:49.873 [DEBUG] [Thread-170809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:40:49.873 [DEBUG] [Thread-170809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:40:49.873 [DEBUG] [Thread-170809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:40:49.899 [INFO] [Thread-170809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:40:49.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:40:50.482 [DEBUG] [Thread-170809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:40:50.482 [DEBUG] [Thread-170809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:40:50.482 [DEBUG] [Thread-170809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:40:50.524 [DEBUG] [Thread-170809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:40:50.524 [DEBUG] [Thread-170809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:40:50.526 [DEBUG] [Thread-170809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:40:50.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:40:50.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:40:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:40:50.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:40:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:40:50.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:40:50.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.486576 -999.00  +14.00   7.39     96  +13.40 1 3 1 3 1   888    0 0.68 4.74 ----- 12.0 7.4 34.2 15.5 16.4 -0.1 16.4 -0.4 16.1 0.1 16.2 0.7
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.486576
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:40:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:40:31', tmtdew=0.024265, humidity=99.8011, cloud=0.0, wind=12.6166, temperature=13.8947, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:40:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:40:50.550 [DEBUG] [Thread-170809] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:40:50.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:40:50.631 [DEBUG] [Thread-170812] [transport.py] [_log()] starting thread (client mode): 0xae509240
2026-04-11T13:40:50.631 [DEBUG] [Thread-170812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:40:50.645 [DEBUG] [Thread-170812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:40:50.645 [INFO] [Thread-170812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:40:50.654 [DEBUG] [Thread-170812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:40:50.654 [DEBUG] [Thread-170812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:40:50.654 [DEBUG] [Thread-170812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:40:50.654 [DEBUG] [Thread-170812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] client lang: <none>
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] server lang: <none>
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] kex follows: False
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:40:50.655 [DEBUG] [Thread-170812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:40:50.656 [DEBUG] [Thread-170812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:40:50.656 [DEBUG] [Thread-170812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:40:50.656 [DEBUG] [Thread-170812] [transport.py] [_log()] Compression: none
2026-04-11T13:40:50.656 [DEBUG] [Thread-170812] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:40:50.712 [DEBUG] [Thread-170812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:40:50.713 [DEBUG] [Thread-170812] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:40:50.713 [DEBUG] [Thread-170812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:40:50.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:40:50.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:40:50.768 [DEBUG] [Thread-170812] [transport.py] [_log()] userauth is OK
2026-04-11T13:40:50.768 [DEBUG] [Thread-170812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:40:50.768 [DEBUG] [Thread-170812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:40:50.769 [DEBUG] [Thread-170812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:40:50.769 [DEBUG] [Thread-170812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:40:50.787 [INFO] [Thread-170812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:40:50.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:40:50.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:40:51.693 [DEBUG] [Thread-170812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:40:51.693 [DEBUG] [Thread-170812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:40:51.741 [DEBUG] [Thread-170812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:40:51.742 [DEBUG] [Thread-170812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:40:51.750 [DEBUG] [Thread-170812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:40:51.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:40:51.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-04-11T13:40:51.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:40:51.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:40:51.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:40:51.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:40:51.784 [DEBUG] [Thread-170812] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:41:01.502 [DEBUG] [Thread-170814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:03.849 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:03.850 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:08.257 [DEBUG] [Thread-170815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:16.565 [DEBUG] [Thread-170816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:21.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:41:21.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:41:21.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-04-11T13:41:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 41, 6), 0.034585, 99.7347, 0.0, 11.2054, 13.8284, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:41:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:41:06
2026-04-11T13:41:23.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:41:23.673 [DEBUG] [Thread-170817] [transport.py] [_log()] starting thread (client mode): 0xae5e4ac0
2026-04-11T13:41:23.673 [DEBUG] [Thread-170817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:41:23.694 [DEBUG] [Thread-170817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:41:23.694 [INFO] [Thread-170817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:41:23.698 [DEBUG] [Thread-170817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:41:23.698 [DEBUG] [Thread-170817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:41:23.698 [DEBUG] [Thread-170817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:41:23.698 [DEBUG] [Thread-170817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:23.698 [DEBUG] [Thread-170817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] client lang: <none>
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] server lang: <none>
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] kex follows: False
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:41:23.699 [DEBUG] [Thread-170817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:41:23.700 [DEBUG] [Thread-170817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:41:23.700 [DEBUG] [Thread-170817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:41:23.700 [DEBUG] [Thread-170817] [transport.py] [_log()] Compression: none
2026-04-11T13:41:23.700 [DEBUG] [Thread-170817] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:41:23.713 [DEBUG] [Thread-170817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:41:23.714 [DEBUG] [Thread-170817] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:41:23.715 [DEBUG] [Thread-170817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:41:23.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:41:23.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:41:23.719 [DEBUG] [Thread-170817] [transport.py] [_log()] userauth is OK
2026-04-11T13:41:23.719 [DEBUG] [Thread-170817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:41:23.720 [DEBUG] [Thread-170817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:41:23.720 [DEBUG] [Thread-170817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:41:23.720 [DEBUG] [Thread-170817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:41:23.742 [INFO] [Thread-170817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:41:23.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:41:24.332 [DEBUG] [Thread-170817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:41:24.333 [DEBUG] [Thread-170817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:41:24.333 [DEBUG] [Thread-170817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:41:24.376 [DEBUG] [Thread-170817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:41:24.376 [DEBUG] [Thread-170817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:41:24.379 [DEBUG] [Thread-170817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:41:24.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:41:24.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:41:24.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:41:24.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:41:24.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:41:24.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:41:24.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:41:24.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:41:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:41:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.486924 -999.00  +14.10   9.77     96  +13.50 1 3 1 3 1   888    0 0.69 4.92 ----- 12.8 9.8 49.0 13.5 16.4 0.0 16.4 -0.0 16.1 0.1 16.2 0.8
2026-04-11T13:41:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:41:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:41:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.486924
2026-04-11T13:41:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:41:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:41:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:41:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:41:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:41:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:41:06', tmtdew=0.034585, humidity=99.7347, cloud=0.0, wind=11.2054, temperature=13.8284, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:41:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:41:24.407 [DEBUG] [Thread-170817] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:41:24.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:41:24.501 [DEBUG] [Thread-170820] [transport.py] [_log()] starting thread (client mode): 0xb39c7f40
2026-04-11T13:41:24.501 [DEBUG] [Thread-170820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:41:24.516 [DEBUG] [Thread-170820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:41:24.517 [INFO] [Thread-170820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:41:24.524 [DEBUG] [Thread-170820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] client lang: <none>
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] server lang: <none>
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] kex follows: False
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] Compression: none
2026-04-11T13:41:24.525 [DEBUG] [Thread-170820] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:41:24.583 [DEBUG] [Thread-170820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:41:24.584 [DEBUG] [Thread-170820] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:41:24.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:41:24.585 [DEBUG] [Thread-170820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:41:24.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:41:24.639 [DEBUG] [Thread-170820] [transport.py] [_log()] userauth is OK
2026-04-11T13:41:24.640 [DEBUG] [Thread-170820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:41:24.640 [DEBUG] [Thread-170820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:41:24.640 [DEBUG] [Thread-170820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:41:24.640 [DEBUG] [Thread-170820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:41:24.658 [INFO] [Thread-170820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:41:24.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:41:24.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:41:25.495 [DEBUG] [Thread-170820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:41:25.495 [DEBUG] [Thread-170820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:41:25.542 [DEBUG] [Thread-170820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:41:25.543 [DEBUG] [Thread-170820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:41:25.553 [DEBUG] [Thread-170820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:41:25.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:41:25.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-04-11T13:41:25.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:41:25.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:41:25.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:41:25.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:41:25.589 [DEBUG] [Thread-170820] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:41:31.603 [DEBUG] [Thread-170822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:46.665 [DEBUG] [Thread-170823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:41:55.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:41:55.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:41:55.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-04-11T13:41:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 41, 42), 0.05373, 99.569, 0.0, 11.5049, 14.3568, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:41:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:41:42
2026-04-11T13:41:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:41:57.425 [DEBUG] [Thread-170824] [transport.py] [_log()] starting thread (client mode): 0xae508b80
2026-04-11T13:41:57.425 [DEBUG] [Thread-170824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:41:57.444 [DEBUG] [Thread-170824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:41:57.444 [INFO] [Thread-170824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:57.447 [DEBUG] [Thread-170824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] client lang: <none>
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] server lang: <none>
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] kex follows: False
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] Compression: none
2026-04-11T13:41:57.448 [DEBUG] [Thread-170824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:41:57.467 [DEBUG] [Thread-170824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:41:57.467 [DEBUG] [Thread-170824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:41:57.468 [DEBUG] [Thread-170824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:41:57.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:41:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:41:57.470 [DEBUG] [Thread-170824] [transport.py] [_log()] userauth is OK
2026-04-11T13:41:57.470 [DEBUG] [Thread-170824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:41:57.470 [DEBUG] [Thread-170824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:41:57.470 [DEBUG] [Thread-170824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:41:57.470 [DEBUG] [Thread-170824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:41:57.488 [INFO] [Thread-170824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:41:57.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:41:58.113 [DEBUG] [Thread-170824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:41:58.113 [DEBUG] [Thread-170824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:41:58.114 [DEBUG] [Thread-170824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:41:58.155 [DEBUG] [Thread-170824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:41:58.155 [DEBUG] [Thread-170824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:41:58.159 [DEBUG] [Thread-170824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:41:58.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:41:58.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:41:58.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:41:58.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:41:58.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:41:58.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:41:58.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:41:58.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:41:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:41:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.487271 -999.00  +14.10  10.28     96  +13.50 1 3 1 3 1   888    0 0.70 5.06 ----- 12.1 10.3 23.4 16.2 -999.0 -999.0 16.5 -0.4 16.1 0.0 16.2 0.3
2026-04-11T13:41:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:41:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:41:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.487271
2026-04-11T13:41:58.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:41:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:41:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:41:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:41:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:41:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:41:42', tmtdew=0.05373, humidity=99.569, cloud=0.0, wind=11.5049, temperature=14.3568, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:41:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:41:58.186 [DEBUG] [Thread-170824] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:41:58.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:41:58.281 [DEBUG] [Thread-170827] [transport.py] [_log()] starting thread (client mode): 0xb0fea800
2026-04-11T13:41:58.281 [DEBUG] [Thread-170827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:41:58.296 [DEBUG] [Thread-170827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:41:58.296 [INFO] [Thread-170827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:41:58.303 [DEBUG] [Thread-170827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] client lang: <none>
2026-04-11T13:41:58.304 [DEBUG] [Thread-170827] [transport.py] [_log()] server lang: <none>
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] kex follows: False
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:41:58.305 [DEBUG] [Thread-170827] [transport.py] [_log()] Compression: none
2026-04-11T13:41:58.306 [DEBUG] [Thread-170827] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:41:58.362 [DEBUG] [Thread-170827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:41:58.362 [DEBUG] [Thread-170827] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:41:58.363 [DEBUG] [Thread-170827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:41:58.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:41:58.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:41:58.418 [DEBUG] [Thread-170827] [transport.py] [_log()] userauth is OK
2026-04-11T13:41:58.418 [DEBUG] [Thread-170827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:41:58.419 [DEBUG] [Thread-170827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:41:58.419 [DEBUG] [Thread-170827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:41:58.419 [DEBUG] [Thread-170827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:41:58.437 [INFO] [Thread-170827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:41:58.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:41:58.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:41:59.235 [DEBUG] [Thread-170827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:41:59.235 [DEBUG] [Thread-170827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:41:59.283 [DEBUG] [Thread-170827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:41:59.283 [DEBUG] [Thread-170827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:41:59.291 [DEBUG] [Thread-170827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:41:59.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:41:59.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-04-11T13:41:59.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-04-11T13:41:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:41:59.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:41:59.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:41:59.323 [DEBUG] [Thread-170827] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:42:01.705 [DEBUG] [Thread-170829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:42:03.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:42:03.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:42:08.308 [DEBUG] [Thread-170830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:42:16.760 [DEBUG] [Thread-170831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:42:29.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:42:29.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:42:29.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-04-11T13:42:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 42, 18), 0.07685, 99.7845, 0.0, 13.1458, 13.9615, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:42:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:42:18
2026-04-11T13:42:30.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:42:31.127 [DEBUG] [Thread-170832] [transport.py] [_log()] starting thread (client mode): 0xb0febd30
2026-04-11T13:42:31.127 [DEBUG] [Thread-170832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:42:31.148 [DEBUG] [Thread-170832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:42:31.148 [INFO] [Thread-170832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:42:31.150 [DEBUG] [Thread-170832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:42:31.150 [DEBUG] [Thread-170832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] client lang: <none>
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] server lang: <none>
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] kex follows: False
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] Compression: none
2026-04-11T13:42:31.151 [DEBUG] [Thread-170832] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:42:31.168 [DEBUG] [Thread-170832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:42:31.169 [DEBUG] [Thread-170832] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:42:31.169 [DEBUG] [Thread-170832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:42:31.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:42:31.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:42:31.213 [DEBUG] [Thread-170832] [transport.py] [_log()] userauth is OK
2026-04-11T13:42:31.213 [DEBUG] [Thread-170832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:42:31.214 [DEBUG] [Thread-170832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:42:31.214 [DEBUG] [Thread-170832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:42:31.214 [DEBUG] [Thread-170832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:42:31.235 [INFO] [Thread-170832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:42:31.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:42:31.799 [DEBUG] [Thread-170834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:42:31.820 [DEBUG] [Thread-170832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:42:31.820 [DEBUG] [Thread-170832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:42:31.821 [DEBUG] [Thread-170832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:42:31.861 [DEBUG] [Thread-170832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:42:31.861 [DEBUG] [Thread-170832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:42:31.864 [DEBUG] [Thread-170832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:42:31.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:42:31.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:42:31.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:42:31.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:42:31.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:42:31.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:42:31.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:42:31.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:42:31.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:42:31.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.487618 -999.00  +14.00   8.86     96  +13.40 1 3 1 3 1   888    0 0.69 5.01 ----- 10.1 8.9 40.6 14.1 16.4 -0.1 16.5 -0.2 16.1 0.2 16.2 0.5
2026-04-11T13:42:31.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.487618
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:42:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:42:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:42:18', tmtdew=0.07685, humidity=99.7845, cloud=0.0, wind=13.1458, temperature=13.9615, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:42:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:42:31.888 [DEBUG] [Thread-170832] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:42:31.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:42:31.980 [DEBUG] [Thread-170836] [transport.py] [_log()] starting thread (client mode): 0xb39c7b20
2026-04-11T13:42:31.980 [DEBUG] [Thread-170836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:42:31.995 [DEBUG] [Thread-170836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:42:31.995 [INFO] [Thread-170836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:42:32.003 [DEBUG] [Thread-170836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] client lang: <none>
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] server lang: <none>
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] kex follows: False
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:42:32.004 [DEBUG] [Thread-170836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:42:32.005 [DEBUG] [Thread-170836] [transport.py] [_log()] Compression: none
2026-04-11T13:42:32.005 [DEBUG] [Thread-170836] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:42:32.061 [DEBUG] [Thread-170836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:42:32.062 [DEBUG] [Thread-170836] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:42:32.062 [DEBUG] [Thread-170836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:42:32.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:42:32.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:42:32.117 [DEBUG] [Thread-170836] [transport.py] [_log()] userauth is OK
2026-04-11T13:42:32.117 [DEBUG] [Thread-170836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:42:32.117 [DEBUG] [Thread-170836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:42:32.117 [DEBUG] [Thread-170836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:42:32.117 [DEBUG] [Thread-170836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:42:32.141 [INFO] [Thread-170836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:42:32.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:42:32.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:42:32.976 [DEBUG] [Thread-170836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:42:32.977 [DEBUG] [Thread-170836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:42:33.026 [DEBUG] [Thread-170836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:42:33.026 [DEBUG] [Thread-170836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:42:33.035 [DEBUG] [Thread-170836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:42:33.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:42:33.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-04-11T13:42:33.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-04-11T13:42:33.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:42:33.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:42:33.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:42:33.069 [DEBUG] [Thread-170836] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:42:46.836 [DEBUG] [Thread-170838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:01.891 [DEBUG] [Thread-170839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:43:03.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:43:03.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-04-11T13:43:04.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:04.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:04.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 42, 53), 0.05888, 99.5358, 0.0, 13.5158, 14.3236, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:43:04.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:42:53
2026-04-11T13:43:04.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:43:04.885 [DEBUG] [Thread-170840] [transport.py] [_log()] starting thread (client mode): 0xb39c6260
2026-04-11T13:43:04.885 [DEBUG] [Thread-170840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:43:04.906 [DEBUG] [Thread-170840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:43:04.906 [INFO] [Thread-170840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:43:04.908 [DEBUG] [Thread-170840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] client lang: <none>
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] server lang: <none>
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] kex follows: False
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:43:04.909 [DEBUG] [Thread-170840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:43:04.910 [DEBUG] [Thread-170840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:43:04.910 [DEBUG] [Thread-170840] [transport.py] [_log()] Compression: none
2026-04-11T13:43:04.910 [DEBUG] [Thread-170840] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:43:04.930 [DEBUG] [Thread-170840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:43:04.930 [DEBUG] [Thread-170840] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:43:04.931 [DEBUG] [Thread-170840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:43:04.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:43:04.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:43:04.934 [DEBUG] [Thread-170840] [transport.py] [_log()] userauth is OK
2026-04-11T13:43:04.935 [DEBUG] [Thread-170840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:43:04.935 [DEBUG] [Thread-170840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:43:04.935 [DEBUG] [Thread-170840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:43:04.935 [DEBUG] [Thread-170840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:43:04.952 [INFO] [Thread-170840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:43:04.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:43:05.567 [DEBUG] [Thread-170840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:43:05.567 [DEBUG] [Thread-170840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:43:05.567 [DEBUG] [Thread-170840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:43:05.610 [DEBUG] [Thread-170840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:43:05.610 [DEBUG] [Thread-170840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:43:05.615 [DEBUG] [Thread-170840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:43:05.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:43:05.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:43:05.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:43:05.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:43:05.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:43:05.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:43:05.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:43:05.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:43:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:43:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.487965 -999.00  +14.00  10.46     96  +13.40 1 3 1 3 1   888    0 0.70 4.91 ----- 10.3 10.5 41.2 11.6 16.4 -0.5 16.4 -0.6 16.1 -0.8 16.1 0.3
2026-04-11T13:43:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:43:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:43:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.487965
2026-04-11T13:43:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:43:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:43:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:43:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:43:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:43:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:42:53', tmtdew=0.05888, humidity=99.5358, cloud=0.0, wind=13.5158, temperature=14.3236, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:42:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:43:05.646 [DEBUG] [Thread-170840] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:43:05.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:43:05.739 [DEBUG] [Thread-170843] [transport.py] [_log()] starting thread (client mode): 0xae560b80
2026-04-11T13:43:05.739 [DEBUG] [Thread-170843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:43:05.754 [DEBUG] [Thread-170843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:43:05.754 [INFO] [Thread-170843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:43:05.762 [DEBUG] [Thread-170843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] client lang: <none>
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] server lang: <none>
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] kex follows: False
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:43:05.763 [DEBUG] [Thread-170843] [transport.py] [_log()] Compression: none
2026-04-11T13:43:05.764 [DEBUG] [Thread-170843] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:43:05.820 [DEBUG] [Thread-170843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:43:05.820 [DEBUG] [Thread-170843] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:43:05.821 [DEBUG] [Thread-170843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:43:05.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:43:05.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:43:05.880 [DEBUG] [Thread-170843] [transport.py] [_log()] userauth is OK
2026-04-11T13:43:05.880 [DEBUG] [Thread-170843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:43:05.880 [DEBUG] [Thread-170843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:43:05.880 [DEBUG] [Thread-170843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:43:05.880 [DEBUG] [Thread-170843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:43:05.902 [INFO] [Thread-170843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:43:05.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:43:05.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:43:06.742 [DEBUG] [Thread-170843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:43:06.742 [DEBUG] [Thread-170843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:43:06.790 [DEBUG] [Thread-170843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:43:06.790 [DEBUG] [Thread-170843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:43:06.799 [DEBUG] [Thread-170843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:43:06.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:43:06.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:43:06.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-04-11T13:43:06.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:43:06.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:43:06.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:43:06.837 [DEBUG] [Thread-170843] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:43:08.363 [DEBUG] [Thread-170845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:16.930 [DEBUG] [Thread-170846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:31.980 [DEBUG] [Thread-170847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:43:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:43:36.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:43:36.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-04-11T13:43:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 43, 29), 0.079435, 99.7679, 0.0, 11.3288, 13.845, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:43:38.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:43:29
2026-04-11T13:43:38.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:43:38.653 [DEBUG] [Thread-170848] [transport.py] [_log()] starting thread (client mode): 0xae5618d0
2026-04-11T13:43:38.653 [DEBUG] [Thread-170848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:43:38.672 [DEBUG] [Thread-170848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:43:38.672 [INFO] [Thread-170848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] client lang: <none>
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] server lang: <none>
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] kex follows: False
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] Compression: none
2026-04-11T13:43:38.674 [DEBUG] [Thread-170848] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:43:38.682 [DEBUG] [Thread-170848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:43:38.683 [DEBUG] [Thread-170848] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:43:38.683 [DEBUG] [Thread-170848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:43:38.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:43:38.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:43:38.685 [DEBUG] [Thread-170848] [transport.py] [_log()] userauth is OK
2026-04-11T13:43:38.685 [DEBUG] [Thread-170848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:43:38.685 [DEBUG] [Thread-170848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:43:38.685 [DEBUG] [Thread-170848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:43:38.685 [DEBUG] [Thread-170848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:43:38.702 [INFO] [Thread-170848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:43:38.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:43:39.326 [DEBUG] [Thread-170848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:43:39.326 [DEBUG] [Thread-170848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:43:39.327 [DEBUG] [Thread-170848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:43:39.367 [DEBUG] [Thread-170848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:43:39.367 [DEBUG] [Thread-170848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:43:39.370 [DEBUG] [Thread-170848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:43:39.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:43:39.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:43:39.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:43:39.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:43:39.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:43:39.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:43:39.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:43:39.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:43:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:43:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.488312 -999.00  +14.00  12.12     96  +13.40 1 3 1 3 1   888    0 0.72 5.29 ----- 11.7 12.1 16.6 13.1 16.4 -0.3 16.4 -0.7 16.1 -0.1 16.1 0.2
2026-04-11T13:43:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:43:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:43:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.488312
2026-04-11T13:43:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:43:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:43:39.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:43:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:43:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:43:39.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:43:29', tmtdew=0.079435, humidity=99.7679, cloud=0.0, wind=11.3288, temperature=13.845, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:43:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:43:39.392 [DEBUG] [Thread-170848] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:43:39.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:43:39.485 [DEBUG] [Thread-170851] [transport.py] [_log()] starting thread (client mode): 0xae50bc70
2026-04-11T13:43:39.485 [DEBUG] [Thread-170851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:43:39.502 [DEBUG] [Thread-170851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:43:39.502 [INFO] [Thread-170851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] client lang: <none>
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] server lang: <none>
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] kex follows: False
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:43:39.510 [DEBUG] [Thread-170851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:43:39.511 [DEBUG] [Thread-170851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:43:39.511 [DEBUG] [Thread-170851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:43:39.511 [DEBUG] [Thread-170851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:43:39.511 [DEBUG] [Thread-170851] [transport.py] [_log()] Compression: none
2026-04-11T13:43:39.511 [DEBUG] [Thread-170851] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:43:39.568 [DEBUG] [Thread-170851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:43:39.568 [DEBUG] [Thread-170851] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:43:39.569 [DEBUG] [Thread-170851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:43:39.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:43:39.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:43:39.623 [DEBUG] [Thread-170851] [transport.py] [_log()] userauth is OK
2026-04-11T13:43:39.624 [DEBUG] [Thread-170851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:43:39.624 [DEBUG] [Thread-170851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:43:39.624 [DEBUG] [Thread-170851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:43:39.624 [DEBUG] [Thread-170851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:43:39.649 [INFO] [Thread-170851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:43:39.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:43:39.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:43:40.473 [DEBUG] [Thread-170851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:43:40.473 [DEBUG] [Thread-170851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:43:40.521 [DEBUG] [Thread-170851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:43:40.521 [DEBUG] [Thread-170851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:43:40.531 [DEBUG] [Thread-170851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:43:40.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:43:40.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-04-11T13:43:40.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-04-11T13:43:40.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:43:40.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:43:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:43:40.568 [DEBUG] [Thread-170851] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:43:47.020 [DEBUG] [Thread-170853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:02.075 [DEBUG] [Thread-170854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:04.294 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:04.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:08.416 [DEBUG] [Thread-170855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:10.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:44:10.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:44:10.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-04-11T13:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 44, 4), 0.071725, 99.8176, 0.0, 11.9815, 13.8118, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:44:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:44:04
2026-04-11T13:44:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:44:12.464 [DEBUG] [Thread-170856] [transport.py] [_log()] starting thread (client mode): 0xa79b6950
2026-04-11T13:44:12.464 [DEBUG] [Thread-170856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:44:12.484 [DEBUG] [Thread-170856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:44:12.484 [INFO] [Thread-170856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] client lang: <none>
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] server lang: <none>
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] kex follows: False
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:44:12.487 [DEBUG] [Thread-170856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:44:12.488 [DEBUG] [Thread-170856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:44:12.488 [DEBUG] [Thread-170856] [transport.py] [_log()] Compression: none
2026-04-11T13:44:12.488 [DEBUG] [Thread-170856] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:44:12.503 [DEBUG] [Thread-170856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:44:12.503 [DEBUG] [Thread-170856] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:44:12.504 [DEBUG] [Thread-170856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:44:12.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:44:12.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:44:12.506 [DEBUG] [Thread-170856] [transport.py] [_log()] userauth is OK
2026-04-11T13:44:12.506 [DEBUG] [Thread-170856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:44:12.506 [DEBUG] [Thread-170856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:44:12.506 [DEBUG] [Thread-170856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:44:12.506 [DEBUG] [Thread-170856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:44:12.525 [INFO] [Thread-170856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:44:12.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:44:13.155 [DEBUG] [Thread-170856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:44:13.155 [DEBUG] [Thread-170856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:44:13.155 [DEBUG] [Thread-170856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:44:13.196 [DEBUG] [Thread-170856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:44:13.196 [DEBUG] [Thread-170856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:44:13.200 [DEBUG] [Thread-170856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:44:13.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:44:13.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:44:13.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:44:13.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:44:13.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:44:13.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:44:13.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:44:13.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:44:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:44:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.488660 -999.00  +14.20  13.26     96  +13.60 1 3 1 3 1   888    0 0.70 4.73 ----- 12.8 13.3 40.4 15.4 16.4 -0.3 16.4 -0.1 16.0 -0.2 16.2 0.5
2026-04-11T13:44:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:44:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:44:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.488660
2026-04-11T13:44:13.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:44:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:44:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:44:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:44:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:44:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:44:04', tmtdew=0.071725, humidity=99.8176, cloud=0.0, wind=11.9815, temperature=13.8118, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:43:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:44:13.226 [DEBUG] [Thread-170856] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:44:13.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:44:13.320 [DEBUG] [Thread-170859] [transport.py] [_log()] starting thread (client mode): 0xb0f417e0
2026-04-11T13:44:13.320 [DEBUG] [Thread-170859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:44:13.335 [DEBUG] [Thread-170859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:44:13.335 [INFO] [Thread-170859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:13.343 [DEBUG] [Thread-170859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] client lang: <none>
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] server lang: <none>
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] kex follows: False
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] Compression: none
2026-04-11T13:44:13.344 [DEBUG] [Thread-170859] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:44:13.402 [DEBUG] [Thread-170859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:44:13.403 [DEBUG] [Thread-170859] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:44:13.403 [DEBUG] [Thread-170859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:44:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:44:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:44:13.458 [DEBUG] [Thread-170859] [transport.py] [_log()] userauth is OK
2026-04-11T13:44:13.459 [DEBUG] [Thread-170859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:44:13.459 [DEBUG] [Thread-170859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:44:13.459 [DEBUG] [Thread-170859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:44:13.459 [DEBUG] [Thread-170859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:44:13.477 [INFO] [Thread-170859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:44:13.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:44:13.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:44:14.295 [DEBUG] [Thread-170859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:44:14.295 [DEBUG] [Thread-170859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:44:14.343 [DEBUG] [Thread-170859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:44:14.344 [DEBUG] [Thread-170859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:44:14.353 [DEBUG] [Thread-170859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:44:14.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:44:14.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:44:14.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-04-11T13:44:14.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:44:14.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:44:14.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:44:14.390 [DEBUG] [Thread-170859] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:44:17.116 [DEBUG] [Thread-170861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:32.170 [DEBUG] [Thread-170862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:44:44.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:44:44.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-04-11T13:44:45.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 44, 4), 0.071725, 99.8176, 0.0, 11.9815, 13.8118, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:44:45.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:44:04
2026-04-11T13:44:46.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:44:46.226 [DEBUG] [Thread-170863] [transport.py] [_log()] starting thread (client mode): 0xae50b2e0
2026-04-11T13:44:46.226 [DEBUG] [Thread-170863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:44:46.243 [DEBUG] [Thread-170863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:44:46.243 [INFO] [Thread-170863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:44:46.246 [DEBUG] [Thread-170863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] client lang: <none>
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] server lang: <none>
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] kex follows: False
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:44:46.247 [DEBUG] [Thread-170863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:44:46.248 [DEBUG] [Thread-170863] [transport.py] [_log()] Compression: none
2026-04-11T13:44:46.248 [DEBUG] [Thread-170863] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:44:46.264 [DEBUG] [Thread-170863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:44:46.265 [DEBUG] [Thread-170863] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:44:46.265 [DEBUG] [Thread-170863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:44:46.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:44:46.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:44:46.267 [DEBUG] [Thread-170863] [transport.py] [_log()] userauth is OK
2026-04-11T13:44:46.267 [DEBUG] [Thread-170863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:44:46.267 [DEBUG] [Thread-170863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:44:46.267 [DEBUG] [Thread-170863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:44:46.267 [DEBUG] [Thread-170863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:44:46.289 [INFO] [Thread-170863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:44:46.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:44:46.934 [DEBUG] [Thread-170863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:44:46.934 [DEBUG] [Thread-170863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:44:46.934 [DEBUG] [Thread-170863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:44:46.975 [DEBUG] [Thread-170863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:44:46.975 [DEBUG] [Thread-170863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:44:46.979 [DEBUG] [Thread-170863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:44:46.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:44:46.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:44:46.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:44:46.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:44:46.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:44:46.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:44:46.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:44:46.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:44:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:44:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.489007 -999.00  +14.00  11.67     96  +13.40 1 3 1 3 1   888    0 0.69 4.36 ----- 12.4 11.7 32.6 14.8 16.4 -0.2 16.4 -0.4 16.1 -0.2 16.1 0.5
2026-04-11T13:44:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:44:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:44:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.489007
2026-04-11T13:44:46.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:44:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:44:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:44:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:44:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:44:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:44:04', tmtdew=0.071725, humidity=99.8176, cloud=0.0, wind=11.9815, temperature=13.8118, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:44:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:44:46.999 [DEBUG] [Thread-170863] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:44:47.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:44:47.093 [DEBUG] [Thread-170866] [transport.py] [_log()] starting thread (client mode): 0xae50a290
2026-04-11T13:44:47.093 [DEBUG] [Thread-170866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:44:47.107 [DEBUG] [Thread-170866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:44:47.108 [INFO] [Thread-170866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:44:47.115 [DEBUG] [Thread-170866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:44:47.115 [DEBUG] [Thread-170866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] client lang: <none>
2026-04-11T13:44:47.116 [DEBUG] [Thread-170866] [transport.py] [_log()] server lang: <none>
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] kex follows: False
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:44:47.117 [DEBUG] [Thread-170866] [transport.py] [_log()] Compression: none
2026-04-11T13:44:47.118 [DEBUG] [Thread-170866] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:44:47.175 [DEBUG] [Thread-170866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:44:47.175 [DEBUG] [Thread-170866] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:44:47.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:44:47.176 [DEBUG] [Thread-170866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:44:47.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:44:47.207 [DEBUG] [Thread-170868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:44:47.233 [DEBUG] [Thread-170866] [transport.py] [_log()] userauth is OK
2026-04-11T13:44:47.234 [DEBUG] [Thread-170866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:44:47.234 [DEBUG] [Thread-170866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:44:47.234 [DEBUG] [Thread-170866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:44:47.234 [DEBUG] [Thread-170866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:44:47.254 [INFO] [Thread-170866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:44:47.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:44:47.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:44:48.081 [DEBUG] [Thread-170866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:44:48.081 [DEBUG] [Thread-170866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:44:48.129 [DEBUG] [Thread-170866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:44:48.129 [DEBUG] [Thread-170866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:44:48.138 [DEBUG] [Thread-170866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:44:48.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:44:48.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-04-11T13:44:48.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-04-11T13:44:48.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:44:48.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:44:48.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:44:48.172 [DEBUG] [Thread-170866] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:45:02.262 [DEBUG] [Thread-170869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:04.438 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:04.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:08.470 [DEBUG] [Thread-170870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:17.297 [DEBUG] [Thread-170871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:45:18.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:45:18.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-04-11T13:45:19.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 44, 39), 0.0642, 99.5018, 0.0, 12.3163, 14.1241, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:45:19.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:44:39
2026-04-11T13:45:19.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:45:20.089 [DEBUG] [Thread-170872] [transport.py] [_log()] starting thread (client mode): 0xb0f407c0
2026-04-11T13:45:20.089 [DEBUG] [Thread-170872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:45:20.109 [DEBUG] [Thread-170872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:45:20.110 [INFO] [Thread-170872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] client lang: <none>
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] server lang: <none>
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] kex follows: False
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:45:20.113 [DEBUG] [Thread-170872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:45:20.114 [DEBUG] [Thread-170872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:45:20.114 [DEBUG] [Thread-170872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:45:20.114 [DEBUG] [Thread-170872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:45:20.114 [DEBUG] [Thread-170872] [transport.py] [_log()] Compression: none
2026-04-11T13:45:20.114 [DEBUG] [Thread-170872] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:45:20.132 [DEBUG] [Thread-170872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:45:20.132 [DEBUG] [Thread-170872] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:45:20.133 [DEBUG] [Thread-170872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:45:20.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:45:20.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:45:20.136 [DEBUG] [Thread-170872] [transport.py] [_log()] userauth is OK
2026-04-11T13:45:20.136 [DEBUG] [Thread-170872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:45:20.136 [DEBUG] [Thread-170872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:45:20.137 [DEBUG] [Thread-170872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:45:20.137 [DEBUG] [Thread-170872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:45:20.160 [INFO] [Thread-170872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:45:20.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:45:26.765 [DEBUG] [Thread-170872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:45:26.766 [DEBUG] [Thread-170872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:45:26.766 [DEBUG] [Thread-170872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:45:26.806 [DEBUG] [Thread-170872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:45:26.806 [DEBUG] [Thread-170872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:45:26.810 [DEBUG] [Thread-170872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:45:26.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:45:26.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:45:26.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:45:26.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:45:26.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:45:26.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:45:26.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:45:26.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:45:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:45:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.489007 -999.00  +14.00  11.67     96  +13.40 1 3 1 3 1   888    0 0.69 4.36 ----- 12.4 11.7 32.6 14.8 16.4 -0.2 16.4 -0.4 16.1 -0.2 16.1 0.5
2026-04-11T13:45:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:45:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:45:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.489007
2026-04-11T13:45:26.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:45:26.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:45:26.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:45:26.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:45:26.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:45:26.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:44:39', tmtdew=0.0642, humidity=99.5018, cloud=0.0, wind=12.3163, temperature=14.1241, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:44:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:45:26.895 [DEBUG] [Thread-170872] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:45:26.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:45:26.989 [DEBUG] [Thread-170875] [transport.py] [_log()] starting thread (client mode): 0xa795cf40
2026-04-11T13:45:26.989 [DEBUG] [Thread-170875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:45:27.004 [DEBUG] [Thread-170875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:45:27.004 [INFO] [Thread-170875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:45:27.011 [DEBUG] [Thread-170875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] client lang: <none>
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] server lang: <none>
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] kex follows: False
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] Compression: none
2026-04-11T13:45:27.012 [DEBUG] [Thread-170875] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:45:27.069 [DEBUG] [Thread-170875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:45:27.069 [DEBUG] [Thread-170875] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:45:27.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:45:27.070 [DEBUG] [Thread-170875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:45:27.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:45:27.125 [DEBUG] [Thread-170875] [transport.py] [_log()] userauth is OK
2026-04-11T13:45:27.125 [DEBUG] [Thread-170875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:45:27.125 [DEBUG] [Thread-170875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:45:27.125 [DEBUG] [Thread-170875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:45:27.126 [DEBUG] [Thread-170875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:45:27.144 [INFO] [Thread-170875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:45:27.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:45:27.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:45:27.980 [DEBUG] [Thread-170875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:45:27.981 [DEBUG] [Thread-170875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:45:28.029 [DEBUG] [Thread-170875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:45:28.029 [DEBUG] [Thread-170875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:45:28.038 [DEBUG] [Thread-170875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:45:28.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:45:28.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-04-11T13:45:28.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-04-11T13:45:28.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:45:28.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:45:28.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:45:28.071 [DEBUG] [Thread-170875] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:45:32.335 [DEBUG] [Thread-170877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:47.385 [DEBUG] [Thread-170878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:45:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:45:58.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:45:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:45:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 45, 50), 0.05382, 99.5683, 0.0, 9.3528, 14.3895, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:45:59.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:45:50
2026-04-11T13:45:59.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:45:59.945 [DEBUG] [Thread-170879] [transport.py] [_log()] starting thread (client mode): 0xae563130
2026-04-11T13:45:59.946 [DEBUG] [Thread-170879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:45:59.964 [DEBUG] [Thread-170879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:45:59.964 [INFO] [Thread-170879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] client lang: <none>
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] server lang: <none>
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] kex follows: False
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] Compression: none
2026-04-11T13:45:59.967 [DEBUG] [Thread-170879] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:45:59.985 [DEBUG] [Thread-170879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:45:59.985 [DEBUG] [Thread-170879] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:45:59.986 [DEBUG] [Thread-170879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:45:59.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:45:59.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:45:59.987 [DEBUG] [Thread-170879] [transport.py] [_log()] userauth is OK
2026-04-11T13:45:59.988 [DEBUG] [Thread-170879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:45:59.988 [DEBUG] [Thread-170879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:45:59.988 [DEBUG] [Thread-170879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:45:59.988 [DEBUG] [Thread-170879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:46:00.001 [INFO] [Thread-170879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:46:00.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:46:00.769 [DEBUG] [Thread-170879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:46:00.769 [DEBUG] [Thread-170879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:46:00.770 [DEBUG] [Thread-170879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:46:00.810 [DEBUG] [Thread-170879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:46:00.810 [DEBUG] [Thread-170879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:46:00.812 [DEBUG] [Thread-170879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:46:00.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:46:00.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:46:00.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:46:00.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:46:00.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:46:00.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:46:00.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:46:00.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:46:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:46:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.489701 -999.00  +13.90  11.52     96  +13.30 1 3 1 3 1   888    0 0.69 4.21 ----- 13.4 11.5 30.8 14.0 16.4 -0.1 16.4 -0.7 16.0 -0.3 16.1 0.2
2026-04-11T13:46:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:46:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:46:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.489701
2026-04-11T13:46:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:46:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:46:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:46:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:46:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:46:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:45:50', tmtdew=0.05382, humidity=99.5683, cloud=0.0, wind=9.3528, temperature=14.3895, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:45:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:46:00.832 [DEBUG] [Thread-170879] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:46:00.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:46:00.926 [DEBUG] [Thread-170882] [transport.py] [_log()] starting thread (client mode): 0xb0f421d0
2026-04-11T13:46:00.926 [DEBUG] [Thread-170882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:46:00.941 [DEBUG] [Thread-170882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:46:00.941 [INFO] [Thread-170882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] client lang: <none>
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] server lang: <none>
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] kex follows: False
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:46:00.949 [DEBUG] [Thread-170882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:46:00.950 [DEBUG] [Thread-170882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:46:00.950 [DEBUG] [Thread-170882] [transport.py] [_log()] Compression: none
2026-04-11T13:46:00.950 [DEBUG] [Thread-170882] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:46:01.008 [DEBUG] [Thread-170882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:46:01.009 [DEBUG] [Thread-170882] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:46:01.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:46:01.010 [DEBUG] [Thread-170882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:46:01.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:46:01.064 [DEBUG] [Thread-170882] [transport.py] [_log()] userauth is OK
2026-04-11T13:46:01.065 [DEBUG] [Thread-170882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:46:01.065 [DEBUG] [Thread-170882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:46:01.065 [DEBUG] [Thread-170882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:46:01.065 [DEBUG] [Thread-170882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:46:01.084 [INFO] [Thread-170882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:46:01.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:46:01.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:46:01.982 [DEBUG] [Thread-170882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:46:01.982 [DEBUG] [Thread-170882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:46:02.037 [DEBUG] [Thread-170882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:46:02.037 [DEBUG] [Thread-170882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:46:02.046 [DEBUG] [Thread-170882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:46:02.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:46:02.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:46:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:46:02.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:46:02.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:46:02.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:46:02.081 [DEBUG] [Thread-170882] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:46:02.425 [DEBUG] [Thread-170884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:46:04.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:46:04.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:46:08.529 [DEBUG] [Thread-170885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:46:17.480 [DEBUG] [Thread-170886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:46:32.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:46:32.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:46:32.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-04-11T13:46:32.517 [DEBUG] [Thread-170887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:46:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 46, 26), 0.071795, 99.8169, 0.0, 11.6287, 13.9442, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:46:33.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:46:26
2026-04-11T13:46:33.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:46:33.955 [DEBUG] [Thread-170888] [transport.py] [_log()] starting thread (client mode): 0xa79b4100
2026-04-11T13:46:33.955 [DEBUG] [Thread-170888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:46:33.974 [DEBUG] [Thread-170888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:46:33.974 [INFO] [Thread-170888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] client lang: <none>
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] server lang: <none>
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] kex follows: False
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:46:33.976 [DEBUG] [Thread-170888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:46:33.977 [DEBUG] [Thread-170888] [transport.py] [_log()] Compression: none
2026-04-11T13:46:33.977 [DEBUG] [Thread-170888] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:46:33.993 [DEBUG] [Thread-170888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:46:33.994 [DEBUG] [Thread-170888] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:46:33.994 [DEBUG] [Thread-170888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:46:33.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:46:33.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:46:33.996 [DEBUG] [Thread-170888] [transport.py] [_log()] userauth is OK
2026-04-11T13:46:33.996 [DEBUG] [Thread-170888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:46:33.996 [DEBUG] [Thread-170888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:46:33.997 [DEBUG] [Thread-170888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:46:33.997 [DEBUG] [Thread-170888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:46:34.015 [INFO] [Thread-170888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:46:34.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:46:34.623 [DEBUG] [Thread-170888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:46:34.623 [DEBUG] [Thread-170888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:46:34.624 [DEBUG] [Thread-170888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:46:34.664 [DEBUG] [Thread-170888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:46:34.664 [DEBUG] [Thread-170888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:46:34.668 [DEBUG] [Thread-170888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:46:34.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:46:34.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:46:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:46:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:46:34.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:46:34.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:46:34.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:46:34.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:46:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:46:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.490396 -999.00  +14.00   9.22     96  +13.40 1 3 1 3 1   888    0 0.68 3.96 ----- 9.9 9.2 28.8 12.9 16.3 0.1 16.4 -0.5 16.0 -0.3 16.2 0.2
2026-04-11T13:46:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:46:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:46:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.490396
2026-04-11T13:46:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:46:34.693 [DEBUG] [Thread-170888] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:46:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:46:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:46:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:46:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:46:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:46:26', tmtdew=0.071795, humidity=99.8169, cloud=0.0, wind=11.6287, temperature=13.9442, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:46:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:46:34.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:46:34.785 [DEBUG] [Thread-170891] [transport.py] [_log()] starting thread (client mode): 0xa79b5510
2026-04-11T13:46:34.785 [DEBUG] [Thread-170891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:46:34.800 [DEBUG] [Thread-170891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:46:34.800 [INFO] [Thread-170891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:46:34.807 [DEBUG] [Thread-170891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:46:34.807 [DEBUG] [Thread-170891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] client lang: <none>
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] server lang: <none>
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] kex follows: False
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:46:34.808 [DEBUG] [Thread-170891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:46:34.809 [DEBUG] [Thread-170891] [transport.py] [_log()] Compression: none
2026-04-11T13:46:34.809 [DEBUG] [Thread-170891] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:46:34.867 [DEBUG] [Thread-170891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:46:34.868 [DEBUG] [Thread-170891] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:46:34.869 [DEBUG] [Thread-170891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:46:34.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:46:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:46:34.923 [DEBUG] [Thread-170891] [transport.py] [_log()] userauth is OK
2026-04-11T13:46:34.924 [DEBUG] [Thread-170891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:46:34.924 [DEBUG] [Thread-170891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:46:34.924 [DEBUG] [Thread-170891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:46:34.924 [DEBUG] [Thread-170891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:46:34.949 [INFO] [Thread-170891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:46:34.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:46:34.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:46:35.822 [DEBUG] [Thread-170891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:46:35.823 [DEBUG] [Thread-170891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:46:35.870 [DEBUG] [Thread-170891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:46:35.871 [DEBUG] [Thread-170891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:46:35.879 [DEBUG] [Thread-170891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:46:35.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:46:35.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-04-11T13:46: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') -> 00000000
2026-04-11T13:46:35.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:46:35.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:46:35.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:46:35.911 [DEBUG] [Thread-170891] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:46:47.554 [DEBUG] [Thread-170893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:02.608 [DEBUG] [Thread-170894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:04.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:04.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:05.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:47:05.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:47:05.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-04-11T13:47:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 46, 26), 0.071795, 99.8169, 0.0, 11.6287, 13.9442, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:47:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:46:26
2026-04-11T13:47:07.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:47:07.723 [DEBUG] [Thread-170895] [transport.py] [_log()] starting thread (client mode): 0xae50a680
2026-04-11T13:47:07.723 [DEBUG] [Thread-170895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:47:07.741 [DEBUG] [Thread-170895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:47:07.741 [INFO] [Thread-170895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:07.744 [DEBUG] [Thread-170895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] client lang: <none>
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] server lang: <none>
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] kex follows: False
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] Compression: none
2026-04-11T13:47:07.745 [DEBUG] [Thread-170895] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:47:07.760 [DEBUG] [Thread-170895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:47:07.760 [DEBUG] [Thread-170895] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:47:07.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:47:07.761 [DEBUG] [Thread-170895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:47:07.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:47:07.762 [DEBUG] [Thread-170895] [transport.py] [_log()] userauth is OK
2026-04-11T13:47:07.762 [DEBUG] [Thread-170895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:47:07.762 [DEBUG] [Thread-170895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:47:07.762 [DEBUG] [Thread-170895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:47:07.762 [DEBUG] [Thread-170895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:47:07.774 [INFO] [Thread-170895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:47:07.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:47:08.388 [DEBUG] [Thread-170895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:47:08.389 [DEBUG] [Thread-170895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:47:08.389 [DEBUG] [Thread-170895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:47:08.430 [DEBUG] [Thread-170895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:47:08.430 [DEBUG] [Thread-170895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:47:08.432 [DEBUG] [Thread-170895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:47:08.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:47:08.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:47:08.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:47:08.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:47:08.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:47:08.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:47:08.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:47:08.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:47:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:47:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.490743 -999.00  +14.10   9.13     96  +13.50 1 3 1 3 1   888    0 0.67 3.73 ----- 8.8 9.1 25.4 12.7 16.4 -0.2 16.4 -0.1 16.0 0.0 16.1 0.5
2026-04-11T13:47:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:47:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:47:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.490743
2026-04-11T13:47:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:47:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:47:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:47:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:47:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:47:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:46:26', tmtdew=0.071795, humidity=99.8169, cloud=0.0, wind=11.6287, temperature=13.9442, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:46:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:47:08.452 [DEBUG] [Thread-170895] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:47:08.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:47:08.545 [DEBUG] [Thread-170898] [transport.py] [_log()] starting thread (client mode): 0xae5b3c40
2026-04-11T13:47:08.545 [DEBUG] [Thread-170898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:47:08.560 [DEBUG] [Thread-170898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:47:08.560 [INFO] [Thread-170898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] client lang: <none>
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] server lang: <none>
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] kex follows: False
2026-04-11T13:47:08.567 [DEBUG] [Thread-170898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:47:08.568 [DEBUG] [Thread-170898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:47:08.568 [DEBUG] [Thread-170898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:47:08.568 [DEBUG] [Thread-170898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:47:08.568 [DEBUG] [Thread-170898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:47:08.568 [DEBUG] [Thread-170898] [transport.py] [_log()] Compression: none
2026-04-11T13:47:08.568 [DEBUG] [Thread-170898] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:47:08.574 [DEBUG] [Thread-170900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:08.627 [DEBUG] [Thread-170898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:47:08.628 [DEBUG] [Thread-170898] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:47:08.628 [DEBUG] [Thread-170898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:47:08.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:47:08.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:47:08.683 [DEBUG] [Thread-170898] [transport.py] [_log()] userauth is OK
2026-04-11T13:47:08.683 [DEBUG] [Thread-170898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:47:08.683 [DEBUG] [Thread-170898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:47:08.683 [DEBUG] [Thread-170898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:47:08.683 [DEBUG] [Thread-170898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:47:08.702 [INFO] [Thread-170898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:47:08.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:47:08.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:47:09.567 [DEBUG] [Thread-170898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:47:09.567 [DEBUG] [Thread-170898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:47:09.616 [DEBUG] [Thread-170898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:47:09.616 [DEBUG] [Thread-170898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:47:09.628 [DEBUG] [Thread-170898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:47:09.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:47:09.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:47:09.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:47:09.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:47:09.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:47:09.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:47:09.665 [DEBUG] [Thread-170898] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:47:17.644 [DEBUG] [Thread-170901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:32.704 [DEBUG] [Thread-170902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:47:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:47:39.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:47:39.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-04-11T13:47:40.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 47, 1), 0.074395, 99.8004, 0.0, 11.6111, 13.8779, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:47:40.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:47:01
2026-04-11T13:47:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:47:41.555 [DEBUG] [Thread-170903] [transport.py] [_log()] starting thread (client mode): 0xae509a50
2026-04-11T13:47:41.555 [DEBUG] [Thread-170903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:47:41.575 [DEBUG] [Thread-170903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:47:41.576 [INFO] [Thread-170903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:47:41.579 [DEBUG] [Thread-170903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:47:41.579 [DEBUG] [Thread-170903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] client lang: <none>
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] server lang: <none>
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] kex follows: False
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:47:41.580 [DEBUG] [Thread-170903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:47:41.581 [DEBUG] [Thread-170903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:47:41.581 [DEBUG] [Thread-170903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:47:41.581 [DEBUG] [Thread-170903] [transport.py] [_log()] Compression: none
2026-04-11T13:47:41.581 [DEBUG] [Thread-170903] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:47:41.599 [DEBUG] [Thread-170903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:47:41.600 [DEBUG] [Thread-170903] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:47:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:47:41.602 [DEBUG] [Thread-170903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:47:41.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:47:41.604 [DEBUG] [Thread-170903] [transport.py] [_log()] userauth is OK
2026-04-11T13:47:41.604 [DEBUG] [Thread-170903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:47:41.604 [DEBUG] [Thread-170903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:47:41.604 [DEBUG] [Thread-170903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:47:41.604 [DEBUG] [Thread-170903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:47:41.624 [INFO] [Thread-170903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:47:41.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:47:42.227 [DEBUG] [Thread-170903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:47:42.227 [DEBUG] [Thread-170903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:47:42.228 [DEBUG] [Thread-170903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:47:42.268 [DEBUG] [Thread-170903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:47:42.268 [DEBUG] [Thread-170903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:47:42.272 [DEBUG] [Thread-170903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:47:42.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:47:42.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:47:42.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:47:42.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:47:42.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:47:42.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:47:42.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:47:42.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:47:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:47:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.491090 -999.00  +14.10   9.06     96  +13.50 1 3 1 3 1   888    0 0.69 3.81 ----- 8.8 9.1 11.2 11.6 16.4 0.0 16.4 -0.4 16.0 0.2 16.2 0.3
2026-04-11T13:47:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:47:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:47:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.491090
2026-04-11T13:47:42.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:47:42.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:47:42.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:47:42.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:47:42.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:47:42.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:47:01', tmtdew=0.074395, humidity=99.8004, cloud=0.0, wind=11.6111, temperature=13.8779, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:47:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:47:42.303 [DEBUG] [Thread-170903] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:47:42.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:47:42.396 [DEBUG] [Thread-170906] [transport.py] [_log()] starting thread (client mode): 0xa795fa00
2026-04-11T13:47:42.396 [DEBUG] [Thread-170906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:47:42.412 [DEBUG] [Thread-170906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:47:42.412 [INFO] [Thread-170906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] client lang: <none>
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] server lang: <none>
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] kex follows: False
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:47:42.420 [DEBUG] [Thread-170906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:47:42.421 [DEBUG] [Thread-170906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:47:42.421 [DEBUG] [Thread-170906] [transport.py] [_log()] Compression: none
2026-04-11T13:47:42.421 [DEBUG] [Thread-170906] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:47:42.479 [DEBUG] [Thread-170906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:47:42.479 [DEBUG] [Thread-170906] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:47:42.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:47:42.481 [DEBUG] [Thread-170906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:47:42.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:47:42.538 [DEBUG] [Thread-170906] [transport.py] [_log()] userauth is OK
2026-04-11T13:47:42.538 [DEBUG] [Thread-170906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:47:42.539 [DEBUG] [Thread-170906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:47:42.539 [DEBUG] [Thread-170906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:47:42.539 [DEBUG] [Thread-170906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:47:42.563 [INFO] [Thread-170906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:47:42.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:47:42.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:47:43.404 [DEBUG] [Thread-170906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:47:43.404 [DEBUG] [Thread-170906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:47:43.453 [DEBUG] [Thread-170906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:47:43.454 [DEBUG] [Thread-170906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:47:43.464 [DEBUG] [Thread-170906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:47:43.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:47:43.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:47:43.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-04-11T13:47:43.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:47:43.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:47:43.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:47:43.502 [DEBUG] [Thread-170906] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:47:47.739 [DEBUG] [Thread-170908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:02.787 [DEBUG] [Thread-170909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:04.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:04.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:08.619 [DEBUG] [Thread-170910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:48:13.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:48:13.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-04-11T13:48:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 47, 36), 0.04875, 99.601, 0.0, 13.7981, 14.356, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:48:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:47:36
2026-04-11T13:48:15.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:48:15.471 [DEBUG] [Thread-170911] [transport.py] [_log()] starting thread (client mode): 0xb0f42b90
2026-04-11T13:48:15.471 [DEBUG] [Thread-170911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:48:15.490 [DEBUG] [Thread-170911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:48:15.490 [INFO] [Thread-170911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:48:15.491 [DEBUG] [Thread-170911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] client lang: <none>
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] server lang: <none>
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] kex follows: False
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] Compression: none
2026-04-11T13:48:15.492 [DEBUG] [Thread-170911] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:48:15.504 [DEBUG] [Thread-170911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:48:15.505 [DEBUG] [Thread-170911] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:48:15.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:48:15.514 [DEBUG] [Thread-170911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:48:15.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:48:15.516 [DEBUG] [Thread-170911] [transport.py] [_log()] userauth is OK
2026-04-11T13:48:15.516 [DEBUG] [Thread-170911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:48:15.517 [DEBUG] [Thread-170911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:48:15.517 [DEBUG] [Thread-170911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:48:15.517 [DEBUG] [Thread-170911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:48:15.540 [INFO] [Thread-170911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:48:15.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:48:16.206 [DEBUG] [Thread-170911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:48:16.206 [DEBUG] [Thread-170911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:48:16.207 [DEBUG] [Thread-170911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:48:16.247 [DEBUG] [Thread-170911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:48:16.247 [DEBUG] [Thread-170911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:48:16.250 [DEBUG] [Thread-170911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:48:16.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:48:16.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:48:16.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:48:16.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:48:16.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:48:16.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:48:16.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:48:16.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:48:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:48:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.491785 -999.00  +13.90   6.71     96  +13.30 1 3 1 3 1   888    0 0.68 3.88 ----- 6.4 6.7 24.2 10.5 16.4 -0.2 16.3 -0.8 16.0 -0.1 16.1 -0.5
2026-04-11T13:48:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:48:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:48:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.491785
2026-04-11T13:48:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:48:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:48:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:48:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:48:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:48:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:47:36', tmtdew=0.04875, humidity=99.601, cloud=0.0, wind=13.7981, temperature=14.356, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:48:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:48:16.274 [DEBUG] [Thread-170911] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:48:16.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:48:16.366 [DEBUG] [Thread-170914] [transport.py] [_log()] starting thread (client mode): 0xae5376a0
2026-04-11T13:48:16.366 [DEBUG] [Thread-170914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:48:16.381 [DEBUG] [Thread-170914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:48:16.381 [INFO] [Thread-170914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:16.389 [DEBUG] [Thread-170914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] client lang: <none>
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] server lang: <none>
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] kex follows: False
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] Compression: none
2026-04-11T13:48:16.390 [DEBUG] [Thread-170914] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:48:16.450 [DEBUG] [Thread-170914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:48:16.451 [DEBUG] [Thread-170914] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:48:16.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:48:16.452 [DEBUG] [Thread-170914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:48:16.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:48:16.506 [DEBUG] [Thread-170914] [transport.py] [_log()] userauth is OK
2026-04-11T13:48:16.506 [DEBUG] [Thread-170914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:48:16.506 [DEBUG] [Thread-170914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:48:16.506 [DEBUG] [Thread-170914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:48:16.506 [DEBUG] [Thread-170914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:48:16.530 [INFO] [Thread-170914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:48:16.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:48:16.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:48:17.366 [DEBUG] [Thread-170914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:48:17.367 [DEBUG] [Thread-170914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:48:17.415 [DEBUG] [Thread-170914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:48:17.415 [DEBUG] [Thread-170914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:48:17.424 [DEBUG] [Thread-170914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:48:17.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:48:17.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:48:17.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-04-11T13:48:17.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:48:17.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:48:17.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:48:17.460 [DEBUG] [Thread-170914] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:48:17.824 [DEBUG] [Thread-170916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:32.875 [DEBUG] [Thread-170917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:47.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:48:47.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:48:47.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-04-11T13:48:47.906 [DEBUG] [Thread-170918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:48:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 48, 12), 0.0718, 99.8171, 0.0, 9.88164, 14.0446, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:48:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:48:12
2026-04-11T13:48:49.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:48:49.442 [DEBUG] [Thread-170919] [transport.py] [_log()] starting thread (client mode): 0xae5345e0
2026-04-11T13:48:49.442 [DEBUG] [Thread-170919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:48:49.463 [DEBUG] [Thread-170919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:48:49.463 [INFO] [Thread-170919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] client lang: <none>
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] server lang: <none>
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] kex follows: False
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:48:49.466 [DEBUG] [Thread-170919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:48:49.467 [DEBUG] [Thread-170919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:48:49.467 [DEBUG] [Thread-170919] [transport.py] [_log()] Compression: none
2026-04-11T13:48:49.467 [DEBUG] [Thread-170919] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:48:49.484 [DEBUG] [Thread-170919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:48:49.484 [DEBUG] [Thread-170919] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:48:49.485 [DEBUG] [Thread-170919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:48:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:48:49.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:48:49.487 [DEBUG] [Thread-170919] [transport.py] [_log()] userauth is OK
2026-04-11T13:48:49.487 [DEBUG] [Thread-170919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:48:49.487 [DEBUG] [Thread-170919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:48:49.487 [DEBUG] [Thread-170919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:48:49.487 [DEBUG] [Thread-170919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:48:49.505 [INFO] [Thread-170919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:48:49.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:48:50.122 [DEBUG] [Thread-170919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:48:50.122 [DEBUG] [Thread-170919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:48:50.123 [DEBUG] [Thread-170919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:48:50.164 [DEBUG] [Thread-170919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:48:50.164 [DEBUG] [Thread-170919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:48:50.167 [DEBUG] [Thread-170919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:48:50.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:48:50.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:48:50.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:48:50.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:48:50.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:48:50.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:48:50.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:48:50.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:48:50.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:48:50.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.492132 -999.00  +14.10  10.98     96  +13.50 1 3 1 3 1   888    0 0.69 3.73 ----- 10.3 11.0 46.2 12.7 16.4 -0.3 16.4 -0.1 15.9 0.0 16.1 0.3
2026-04-11T13:48:50.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:48:50.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:48:50.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.492132
2026-04-11T13:48:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:48:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:48:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:48:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:48:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:48:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:48:12', tmtdew=0.0718, humidity=99.8171, cloud=0.0, wind=9.88164, temperature=14.0446, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:48:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:48:50.194 [DEBUG] [Thread-170919] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:48:50.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:48:50.290 [DEBUG] [Thread-170922] [transport.py] [_log()] starting thread (client mode): 0xb0fe9330
2026-04-11T13:48:50.290 [DEBUG] [Thread-170922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:48:50.308 [DEBUG] [Thread-170922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:48:50.308 [INFO] [Thread-170922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:48:50.316 [DEBUG] [Thread-170922] [transport.py] [_log()] client lang: <none>
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] server lang: <none>
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] kex follows: False
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] Compression: none
2026-04-11T13:48:50.317 [DEBUG] [Thread-170922] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:48:50.375 [DEBUG] [Thread-170922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:48:50.375 [DEBUG] [Thread-170922] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:48:50.375 [DEBUG] [Thread-170922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:48:50.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:48:50.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:48:50.433 [DEBUG] [Thread-170922] [transport.py] [_log()] userauth is OK
2026-04-11T13:48:50.433 [DEBUG] [Thread-170922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:48:50.434 [DEBUG] [Thread-170922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:48:50.434 [DEBUG] [Thread-170922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:48:50.434 [DEBUG] [Thread-170922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:48:50.457 [INFO] [Thread-170922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:48:50.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:48:50.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:48:51.357 [DEBUG] [Thread-170922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:48:51.358 [DEBUG] [Thread-170922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:48:51.405 [DEBUG] [Thread-170922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:48:51.405 [DEBUG] [Thread-170922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:48:51.414 [DEBUG] [Thread-170922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:48:51.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:48:51.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-04-11T13:48:51.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-04-11T13:48:51.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:48:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:48:51.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:48:51.451 [DEBUG] [Thread-170922] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:49:02.941 [DEBUG] [Thread-170924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:05.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:05.008 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:08.676 [DEBUG] [Thread-170925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:17.995 [DEBUG] [Thread-170926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:49:21.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:49:21.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:49:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 48, 47), 0.0487, 99.6012, 0.0, 10.2701, 14.3893, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:49:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:48:47
2026-04-11T13:49:23.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:49:23.272 [DEBUG] [Thread-170927] [transport.py] [_log()] starting thread (client mode): 0xae5633a0
2026-04-11T13:49:23.272 [DEBUG] [Thread-170927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:49:23.293 [DEBUG] [Thread-170927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:49:23.293 [INFO] [Thread-170927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:49:23.296 [DEBUG] [Thread-170927] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:49:23.296 [DEBUG] [Thread-170927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:49:23.296 [DEBUG] [Thread-170927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:49:23.296 [DEBUG] [Thread-170927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:23.296 [DEBUG] [Thread-170927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] client lang: <none>
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] server lang: <none>
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] kex follows: False
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:49:23.297 [DEBUG] [Thread-170927] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:49:23.298 [DEBUG] [Thread-170927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:49:23.298 [DEBUG] [Thread-170927] [transport.py] [_log()] Compression: none
2026-04-11T13:49:23.298 [DEBUG] [Thread-170927] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:49:23.317 [DEBUG] [Thread-170927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:49:23.318 [DEBUG] [Thread-170927] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:49:23.318 [DEBUG] [Thread-170927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:49:23.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:49:23.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:49:23.320 [DEBUG] [Thread-170927] [transport.py] [_log()] userauth is OK
2026-04-11T13:49:23.320 [DEBUG] [Thread-170927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:49:23.320 [DEBUG] [Thread-170927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:49:23.320 [DEBUG] [Thread-170927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:49:23.320 [DEBUG] [Thread-170927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:49:23.343 [INFO] [Thread-170927] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:49:23.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:49:23.980 [DEBUG] [Thread-170927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:49:23.980 [DEBUG] [Thread-170927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:49:23.980 [DEBUG] [Thread-170927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:49:24.023 [DEBUG] [Thread-170927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:49:24.023 [DEBUG] [Thread-170927] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:49:24.025 [DEBUG] [Thread-170927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:49:24.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:49:24.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:49:24.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:49:24.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:49:24.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:49:24.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:49:24.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:49:24.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:49:24.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:49:24.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.492479 -999.00  +14.20  11.18     96  +13.60 1 3 1 3 1   888    0 0.68 3.61 ----- 9.4 11.2 7.6 13.5 16.4 -0.1 16.4 -0.3 16.0 -0.2 16.1 0.3
2026-04-11T13:49:24.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:49:24.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:49:24.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.492479
2026-04-11T13:49:24.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:49:24.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:49:24.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:49:24.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:49:24.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:49:24.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:48:47', tmtdew=0.0487, humidity=99.6012, cloud=0.0, wind=10.2701, temperature=14.3893, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:49:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:49:24.048 [DEBUG] [Thread-170927] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:49:24.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:49:24.145 [DEBUG] [Thread-170930] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-11T13:49:24.145 [DEBUG] [Thread-170930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:49:24.159 [DEBUG] [Thread-170930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:49:24.159 [INFO] [Thread-170930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:49:24.166 [DEBUG] [Thread-170930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] client lang: <none>
2026-04-11T13:49:24.167 [DEBUG] [Thread-170930] [transport.py] [_log()] server lang: <none>
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] kex follows: False
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] Compression: none
2026-04-11T13:49:24.168 [DEBUG] [Thread-170930] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:49:24.224 [DEBUG] [Thread-170930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:49:24.225 [DEBUG] [Thread-170930] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:49:24.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:49:24.226 [DEBUG] [Thread-170930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:49:24.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:49:24.280 [DEBUG] [Thread-170930] [transport.py] [_log()] userauth is OK
2026-04-11T13:49:24.280 [DEBUG] [Thread-170930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:49:24.280 [DEBUG] [Thread-170930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:49:24.280 [DEBUG] [Thread-170930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:49:24.280 [DEBUG] [Thread-170930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:49:24.299 [INFO] [Thread-170930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:49:24.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:49:24.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:49:25.111 [DEBUG] [Thread-170930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:49:25.111 [DEBUG] [Thread-170930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:49:25.161 [DEBUG] [Thread-170930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:49:25.161 [DEBUG] [Thread-170930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:49:25.170 [DEBUG] [Thread-170930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:49:25.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:49:25.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-04-11T13:49:25.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-04-11T13:49:25.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:49:25.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:49:25.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:49:25.204 [DEBUG] [Thread-170930] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:49:33.031 [DEBUG] [Thread-170932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:48.087 [DEBUG] [Thread-170933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:49:55.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:49:55.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:49:55.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-04-11T13:49:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 49, 23), 0.06917, 99.8338, 0.0, 8.78796, 14.0776, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:49:56.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:49:23
2026-04-11T13:49:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:49:57.042 [DEBUG] [Thread-170934] [transport.py] [_log()] starting thread (client mode): 0xae52db10
2026-04-11T13:49:57.042 [DEBUG] [Thread-170934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:49:57.062 [DEBUG] [Thread-170934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:49:57.062 [INFO] [Thread-170934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] client lang: <none>
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] server lang: <none>
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] kex follows: False
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] Compression: none
2026-04-11T13:49:57.065 [DEBUG] [Thread-170934] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:49:57.083 [DEBUG] [Thread-170934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:49:57.084 [DEBUG] [Thread-170934] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:49:57.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:49:57.084 [DEBUG] [Thread-170934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:49:57.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:49:57.086 [DEBUG] [Thread-170934] [transport.py] [_log()] userauth is OK
2026-04-11T13:49:57.087 [DEBUG] [Thread-170934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:49:57.087 [DEBUG] [Thread-170934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:49:57.087 [DEBUG] [Thread-170934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:49:57.087 [DEBUG] [Thread-170934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:49:57.109 [INFO] [Thread-170934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:49:57.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:49:57.756 [DEBUG] [Thread-170934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:49:57.757 [DEBUG] [Thread-170934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:49:57.757 [DEBUG] [Thread-170934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:49:57.798 [DEBUG] [Thread-170934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:49:57.798 [DEBUG] [Thread-170934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:49:57.801 [DEBUG] [Thread-170934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:49:57.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:49:57.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:49:57.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:49:57.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:49:57.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:49:57.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:49:57.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:49:57.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:49:57.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:49:57.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.492826 -999.00  +14.10  11.88     96  +13.50 1 3 1 3 1   888    0 0.68 3.30 ----- 10.0 11.9 47.2 14.5 16.4 -0.4 16.4 -0.5 16.0 -0.2 16.1 0.3
2026-04-11T13:49:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:49:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:49:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.492826
2026-04-11T13:49:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:49:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:49:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:49:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:49:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:49:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:49:23', tmtdew=0.06917, humidity=99.8338, cloud=0.0, wind=8.78796, temperature=14.0776, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:49:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:49:57.825 [DEBUG] [Thread-170934] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:49:57.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:49:57.928 [DEBUG] [Thread-170937] [transport.py] [_log()] starting thread (client mode): 0xa795c580
2026-04-11T13:49:57.928 [DEBUG] [Thread-170937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:49:57.943 [DEBUG] [Thread-170937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:49:57.943 [INFO] [Thread-170937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:49:57.950 [DEBUG] [Thread-170937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:49:57.950 [DEBUG] [Thread-170937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] client lang: <none>
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] server lang: <none>
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] kex follows: False
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:49:57.951 [DEBUG] [Thread-170937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:49:57.952 [DEBUG] [Thread-170937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:49:57.952 [DEBUG] [Thread-170937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:49:57.952 [DEBUG] [Thread-170937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:49:57.952 [DEBUG] [Thread-170937] [transport.py] [_log()] Compression: none
2026-04-11T13:49:57.952 [DEBUG] [Thread-170937] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:49:58.007 [DEBUG] [Thread-170937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:49:58.008 [DEBUG] [Thread-170937] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:49:58.008 [DEBUG] [Thread-170937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:49:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:49:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:49:58.064 [DEBUG] [Thread-170937] [transport.py] [_log()] userauth is OK
2026-04-11T13:49:58.064 [DEBUG] [Thread-170937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:49:58.064 [DEBUG] [Thread-170937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:49:58.065 [DEBUG] [Thread-170937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:49:58.065 [DEBUG] [Thread-170937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:49:58.087 [INFO] [Thread-170937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:49:58.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:49:58.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:49:58.910 [DEBUG] [Thread-170937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:49:58.910 [DEBUG] [Thread-170937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:49:58.958 [DEBUG] [Thread-170937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:49:58.958 [DEBUG] [Thread-170937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:49:58.967 [DEBUG] [Thread-170937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:49:58.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:49:58.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:49:58.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-04-11T13:49:58.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:49:58.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:49:58.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:49:59.003 [DEBUG] [Thread-170937] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:50:03.126 [DEBUG] [Thread-170939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:50:05.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:50:05.152 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:50:08.727 [DEBUG] [Thread-170940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:50:18.180 [DEBUG] [Thread-170941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:50:29.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:50:29.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:50:29.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-04-11T13:50:30.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 49, 58), 0.069205, 99.8334, 0.0, 10.499, 14.1271, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:50:30.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:49:58
2026-04-11T13:50:30.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:50:30.851 [DEBUG] [Thread-170942] [transport.py] [_log()] starting thread (client mode): 0xae536e30
2026-04-11T13:50:30.851 [DEBUG] [Thread-170942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:50:30.871 [DEBUG] [Thread-170942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:50:30.872 [INFO] [Thread-170942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:50:30.875 [DEBUG] [Thread-170942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] client lang: <none>
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] server lang: <none>
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] kex follows: False
2026-04-11T13:50:30.876 [DEBUG] [Thread-170942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:50:30.877 [DEBUG] [Thread-170942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:50:30.877 [DEBUG] [Thread-170942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:50:30.877 [DEBUG] [Thread-170942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:50:30.877 [DEBUG] [Thread-170942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:50:30.877 [DEBUG] [Thread-170942] [transport.py] [_log()] Compression: none
2026-04-11T13:50:30.877 [DEBUG] [Thread-170942] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:50:30.896 [DEBUG] [Thread-170942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:50:30.896 [DEBUG] [Thread-170942] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:50:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:50:30.897 [DEBUG] [Thread-170942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:50:30.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:50:30.899 [DEBUG] [Thread-170942] [transport.py] [_log()] userauth is OK
2026-04-11T13:50:30.900 [DEBUG] [Thread-170942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:50:30.900 [DEBUG] [Thread-170942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:50:30.900 [DEBUG] [Thread-170942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:50:30.900 [DEBUG] [Thread-170942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:50:30.923 [INFO] [Thread-170942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:50:30.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:50:33.218 [DEBUG] [Thread-170944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:50:37.189 [DEBUG] [Thread-170942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:50:37.189 [DEBUG] [Thread-170942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:50:37.189 [DEBUG] [Thread-170942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:50:37.230 [DEBUG] [Thread-170942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:50:37.230 [DEBUG] [Thread-170942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:50:37.233 [DEBUG] [Thread-170942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:50:37.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:50:37.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:50:37.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:50:37.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:50:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:50:37.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:50:37.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.492826 -999.00  +14.10  11.88     96  +13.50 1 3 1 3 1   888    0 0.68 3.30 ----- 10.0 11.9 47.2 14.5 16.4 -0.4 16.4 -0.5 16.0 -0.2 16.1 0.3
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.492826
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:50:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:49:58', tmtdew=0.069205, humidity=99.8334, cloud=0.0, wind=10.499, temperature=14.1271, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:49:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:50:37.309 [DEBUG] [Thread-170942] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:50:37.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:50:37.391 [DEBUG] [Thread-170946] [transport.py] [_log()] starting thread (client mode): 0xa79b50c0
2026-04-11T13:50:37.391 [DEBUG] [Thread-170946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:50:37.406 [DEBUG] [Thread-170946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:50:37.406 [INFO] [Thread-170946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:50:37.413 [DEBUG] [Thread-170946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:50:37.413 [DEBUG] [Thread-170946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] client lang: <none>
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] server lang: <none>
2026-04-11T13:50:37.414 [DEBUG] [Thread-170946] [transport.py] [_log()] kex follows: False
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] Compression: none
2026-04-11T13:50:37.415 [DEBUG] [Thread-170946] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:50:37.472 [DEBUG] [Thread-170946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:50:37.472 [DEBUG] [Thread-170946] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:50:37.473 [DEBUG] [Thread-170946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:50:37.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:50:37.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:50:37.528 [DEBUG] [Thread-170946] [transport.py] [_log()] userauth is OK
2026-04-11T13:50:37.528 [DEBUG] [Thread-170946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:50:37.528 [DEBUG] [Thread-170946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:50:37.529 [DEBUG] [Thread-170946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:50:37.529 [DEBUG] [Thread-170946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:50:37.548 [INFO] [Thread-170946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:50:37.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:50:37.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:50:38.367 [DEBUG] [Thread-170946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:50:38.367 [DEBUG] [Thread-170946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:50:38.415 [DEBUG] [Thread-170946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:50:38.415 [DEBUG] [Thread-170946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:50:38.425 [DEBUG] [Thread-170946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:50:38.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:50:38.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-04-11T13:50:38.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-04-11T13:50:38.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:50:38.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:50:38.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:50:38.461 [DEBUG] [Thread-170946] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:50:48.259 [DEBUG] [Thread-170948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:03.313 [DEBUG] [Thread-170949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:05.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:05.292 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:51:08.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:51:08.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-04-11T13:51:08.761 [DEBUG] [Thread-170950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 50, 34), 0.03839, 99.6669, 0.0, 11.0462, 14.6873, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:51:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:50:34
2026-04-11T13:51:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:51:10.389 [DEBUG] [Thread-170951] [transport.py] [_log()] starting thread (client mode): 0xa79b6170
2026-04-11T13:51:10.389 [DEBUG] [Thread-170951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:51:10.409 [DEBUG] [Thread-170951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:51:10.409 [INFO] [Thread-170951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:51:10.413 [DEBUG] [Thread-170951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] client lang: <none>
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] server lang: <none>
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] kex follows: False
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] Compression: none
2026-04-11T13:51:10.414 [DEBUG] [Thread-170951] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:51:10.424 [DEBUG] [Thread-170951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:51:10.425 [DEBUG] [Thread-170951] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:51:10.426 [DEBUG] [Thread-170951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:51:10.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:51:10.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:51:10.429 [DEBUG] [Thread-170951] [transport.py] [_log()] userauth is OK
2026-04-11T13:51:10.429 [DEBUG] [Thread-170951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:51:10.429 [DEBUG] [Thread-170951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:51:10.429 [DEBUG] [Thread-170951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:51:10.429 [DEBUG] [Thread-170951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:51:10.455 [INFO] [Thread-170951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:51:10.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:51:11.093 [DEBUG] [Thread-170951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:51:11.093 [DEBUG] [Thread-170951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:51:11.094 [DEBUG] [Thread-170951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:51:11.135 [DEBUG] [Thread-170951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:51:11.135 [DEBUG] [Thread-170951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:51:11.138 [DEBUG] [Thread-170951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:51:11.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:51:11.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:51:11.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:51:11.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:51:11.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:51:11.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:51:11.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:51:11.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:51:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:51:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.493521 -999.00  +14.10  12.85     96  +13.50 1 3 1 3 1   888    0 0.67 3.02 ----- 10.9 12.8 31.8 15.4 16.3 -0.5 16.4 -0.3 15.9 -0.9 16.1 0.4
2026-04-11T13:51:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:51:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:51:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.493521
2026-04-11T13:51:11.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:51:11.163 [DEBUG] [Thread-170951] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:51:11.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:51:11.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:51:11.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:51:11.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:51:11.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:50:34', tmtdew=0.03839, humidity=99.6669, cloud=0.0, wind=11.0462, temperature=14.6873, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:50:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:51:11.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:51:11.256 [DEBUG] [Thread-170954] [transport.py] [_log()] starting thread (client mode): 0xb39c4bb0
2026-04-11T13:51:11.256 [DEBUG] [Thread-170954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:51:11.271 [DEBUG] [Thread-170954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:51:11.271 [INFO] [Thread-170954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:51:11.278 [DEBUG] [Thread-170954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:51:11.278 [DEBUG] [Thread-170954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:51:11.278 [DEBUG] [Thread-170954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] client lang: <none>
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] server lang: <none>
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] kex follows: False
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] Compression: none
2026-04-11T13:51:11.279 [DEBUG] [Thread-170954] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:51:11.333 [DEBUG] [Thread-170954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:51:11.334 [DEBUG] [Thread-170954] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:51:11.334 [DEBUG] [Thread-170954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:51:11.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:51:11.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:51:11.390 [DEBUG] [Thread-170954] [transport.py] [_log()] userauth is OK
2026-04-11T13:51:11.390 [DEBUG] [Thread-170954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:51:11.390 [DEBUG] [Thread-170954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:51:11.390 [DEBUG] [Thread-170954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:51:11.390 [DEBUG] [Thread-170954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:51:11.408 [INFO] [Thread-170954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:51:11.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:51:11.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:51:12.241 [DEBUG] [Thread-170954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:51:12.242 [DEBUG] [Thread-170954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:51:12.289 [DEBUG] [Thread-170954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:51:12.289 [DEBUG] [Thread-170954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:51:12.299 [DEBUG] [Thread-170954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:51:12.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:51:12.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:51:12.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-04-11T13:51:12.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:51:12.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:51:12.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:51:12.336 [DEBUG] [Thread-170954] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:51:18.352 [DEBUG] [Thread-170956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:33.403 [DEBUG] [Thread-170957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:51:42.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:51:42.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:51:42.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-04-11T13:51:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 51, 9), 0.07435, 99.8004, 0.0, 9.91692, 14.1274, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:51:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:51:09
2026-04-11T13:51:43.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:51:44.132 [DEBUG] [Thread-170958] [transport.py] [_log()] starting thread (client mode): 0xb0f43790
2026-04-11T13:51:44.132 [DEBUG] [Thread-170958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:51:44.147 [DEBUG] [Thread-170958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:51:44.147 [INFO] [Thread-170958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:51:44.150 [DEBUG] [Thread-170958] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:51:44.150 [DEBUG] [Thread-170958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] client lang: <none>
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] server lang: <none>
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] kex follows: False
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] Compression: none
2026-04-11T13:51:44.151 [DEBUG] [Thread-170958] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:51:44.168 [DEBUG] [Thread-170958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:51:44.169 [DEBUG] [Thread-170958] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:51:44.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:51:44.170 [DEBUG] [Thread-170958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:51:44.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:51:44.172 [DEBUG] [Thread-170958] [transport.py] [_log()] userauth is OK
2026-04-11T13:51:44.172 [DEBUG] [Thread-170958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:51:44.172 [DEBUG] [Thread-170958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:51:44.172 [DEBUG] [Thread-170958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:51:44.172 [DEBUG] [Thread-170958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:51:44.190 [INFO] [Thread-170958] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:51:44.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:51:44.750 [DEBUG] [Thread-170958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:51:44.751 [DEBUG] [Thread-170958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:51:44.751 [DEBUG] [Thread-170958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:51:44.791 [DEBUG] [Thread-170958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:51:44.791 [DEBUG] [Thread-170958] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:51:44.795 [DEBUG] [Thread-170958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:51:44.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:51:44.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:51:44.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:51:44.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:51:44.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:51:44.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:51:44.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:51:44.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:51:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:51:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.494215 -999.00  +14.30   8.91     96  +13.70 1 3 1 3 1   888    0 0.66 2.45 ----- 10.6 8.9 7.0 12.5 16.4 -0.1 16.3 -0.8 16.0 0.1 16.0 -0.4
2026-04-11T13:51:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:51:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:51:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.494215
2026-04-11T13:51:44.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:51:44.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:51:44.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:51:44.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:51:44.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:51:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:51:09', tmtdew=0.07435, humidity=99.8004, cloud=0.0, wind=9.91692, temperature=14.1274, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:51:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:51:44.819 [DEBUG] [Thread-170958] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:51:44.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:51:44.912 [DEBUG] [Thread-170961] [transport.py] [_log()] starting thread (client mode): 0xae5b2c50
2026-04-11T13:51:44.912 [DEBUG] [Thread-170961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:51:44.927 [DEBUG] [Thread-170961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:51:44.927 [INFO] [Thread-170961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:44.935 [DEBUG] [Thread-170961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] client lang: <none>
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] server lang: <none>
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] kex follows: False
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] Compression: none
2026-04-11T13:51:44.936 [DEBUG] [Thread-170961] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:51:44.995 [DEBUG] [Thread-170961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:51:44.995 [DEBUG] [Thread-170961] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:51:44.996 [DEBUG] [Thread-170961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:51:44.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:51:44.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:51:45.051 [DEBUG] [Thread-170961] [transport.py] [_log()] userauth is OK
2026-04-11T13:51:45.051 [DEBUG] [Thread-170961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:51:45.051 [DEBUG] [Thread-170961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:51:45.051 [DEBUG] [Thread-170961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:51:45.051 [DEBUG] [Thread-170961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:51:45.070 [INFO] [Thread-170961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:51:45.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:51:45.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:51:45.894 [DEBUG] [Thread-170961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:51:45.894 [DEBUG] [Thread-170961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:51:45.942 [DEBUG] [Thread-170961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:51:45.942 [DEBUG] [Thread-170961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:51:45.952 [DEBUG] [Thread-170961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:51:45.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:51:45.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:51:45.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-04-11T13:51:45.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:51:45.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:51:45.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:51:45.995 [DEBUG] [Thread-170961] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:51:48.441 [DEBUG] [Thread-170963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:03.498 [DEBUG] [Thread-170964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:05.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:05.434 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:08.795 [DEBUG] [Thread-170965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:15.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:52:15.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:52:16.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-04-11T13:52:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 51, 45), 0.05908, 99.5346, 0.0, 10.6229, 14.3228, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:52:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:51:45
2026-04-11T13:52:17.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:52:17.774 [DEBUG] [Thread-170966] [transport.py] [_log()] starting thread (client mode): 0xb39c7970
2026-04-11T13:52:17.774 [DEBUG] [Thread-170966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:52:17.794 [DEBUG] [Thread-170966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:52:17.794 [INFO] [Thread-170966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] client lang: <none>
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] server lang: <none>
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] kex follows: False
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] Compression: none
2026-04-11T13:52:17.797 [DEBUG] [Thread-170966] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:52:17.811 [DEBUG] [Thread-170966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:52:17.811 [DEBUG] [Thread-170966] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:52:17.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:52:17.812 [DEBUG] [Thread-170966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:52:17.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:52:17.813 [DEBUG] [Thread-170966] [transport.py] [_log()] userauth is OK
2026-04-11T13:52:17.813 [DEBUG] [Thread-170966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:52:17.813 [DEBUG] [Thread-170966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:52:17.813 [DEBUG] [Thread-170966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:52:17.813 [DEBUG] [Thread-170966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:52:17.824 [INFO] [Thread-170966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:52:17.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:52:18.410 [DEBUG] [Thread-170966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:52:18.410 [DEBUG] [Thread-170966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:52:18.411 [DEBUG] [Thread-170966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:52:18.451 [DEBUG] [Thread-170966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:52:18.451 [DEBUG] [Thread-170966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:52:18.454 [DEBUG] [Thread-170966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:52:18.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:52:18.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:52:18.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:52:18.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:52:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:52:18.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:52:18.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:52:18.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:52:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:52:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.494562 -999.00  +14.20   9.72     96  +13.60 1 3 1 3 1   888    0 0.66 2.68 ----- 10.6 9.7 39.0 12.6 16.3 -0.2 16.4 -0.3 15.9 0.1 16.0 0.3
2026-04-11T13:52:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:52:18.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:52:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.494562
2026-04-11T13:52:18.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:52:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:52:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:52:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:52:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:52:18.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:51:45', tmtdew=0.05908, humidity=99.5346, cloud=0.0, wind=10.6229, temperature=14.3228, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:52:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:52:18.481 [DEBUG] [Thread-170966] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:52:18.536 [DEBUG] [Thread-170969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52: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-04-11T13:52:18.575 [DEBUG] [Thread-170970] [transport.py] [_log()] starting thread (client mode): 0xae562c20
2026-04-11T13:52:18.575 [DEBUG] [Thread-170970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:52:18.591 [DEBUG] [Thread-170970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:52:18.591 [INFO] [Thread-170970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] client lang: <none>
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] server lang: <none>
2026-04-11T13:52:18.599 [DEBUG] [Thread-170970] [transport.py] [_log()] kex follows: False
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] Compression: none
2026-04-11T13:52:18.600 [DEBUG] [Thread-170970] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:52:18.658 [DEBUG] [Thread-170970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:52:18.659 [DEBUG] [Thread-170970] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:52:18.659 [DEBUG] [Thread-170970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:52:18.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:52:18.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:52:18.714 [DEBUG] [Thread-170970] [transport.py] [_log()] userauth is OK
2026-04-11T13:52:18.714 [DEBUG] [Thread-170970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:52:18.714 [DEBUG] [Thread-170970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:52:18.715 [DEBUG] [Thread-170970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:52:18.715 [DEBUG] [Thread-170970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:52:18.733 [INFO] [Thread-170970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:52: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-04-11T13:52:18.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:52:19.570 [DEBUG] [Thread-170970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:52:19.571 [DEBUG] [Thread-170970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:52:19.620 [DEBUG] [Thread-170970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:52:19.620 [DEBUG] [Thread-170970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:52:19.630 [DEBUG] [Thread-170970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:52:19.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:52:19.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-04-11T13:52: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') -> 00000000
2026-04-11T13:52:19.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:52:19.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:52:19.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:52:19.666 [DEBUG] [Thread-170970] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:52:33.579 [DEBUG] [Thread-170972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:48.619 [DEBUG] [Thread-170973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:52:49.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:52:49.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:52:49.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-04-11T13:52:50.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 52, 20), 0.074345, 99.8006, 0.0, 11.6118, 14.1444, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:52:50.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:52:20
2026-04-11T13:52:51.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:52:51.477 [DEBUG] [Thread-170974] [transport.py] [_log()] starting thread (client mode): 0xae5e4ac0
2026-04-11T13:52:51.477 [DEBUG] [Thread-170974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:52:51.487 [DEBUG] [Thread-170974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:52:51.487 [INFO] [Thread-170974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:52:51.488 [DEBUG] [Thread-170974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] client lang: <none>
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] server lang: <none>
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] kex follows: False
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] Compression: none
2026-04-11T13:52:51.489 [DEBUG] [Thread-170974] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:52:51.506 [DEBUG] [Thread-170974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:52:51.506 [DEBUG] [Thread-170974] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:52:51.507 [DEBUG] [Thread-170974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:52:51.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:52:51.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:52:51.508 [DEBUG] [Thread-170974] [transport.py] [_log()] userauth is OK
2026-04-11T13:52:51.508 [DEBUG] [Thread-170974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:52:51.508 [DEBUG] [Thread-170974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:52:51.508 [DEBUG] [Thread-170974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:52:51.508 [DEBUG] [Thread-170974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:52:51.525 [INFO] [Thread-170974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:52:51.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:52:52.109 [DEBUG] [Thread-170974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:52:52.109 [DEBUG] [Thread-170974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:52:52.110 [DEBUG] [Thread-170974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:52:52.151 [DEBUG] [Thread-170974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:52:52.151 [DEBUG] [Thread-170974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:52:52.153 [DEBUG] [Thread-170974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:52:52.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:52:52.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:52:52.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:52:52.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:52:52.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:52:52.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:52:52.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:52:52.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:52:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:52:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.494909 -999.00  +14.20  11.84     96  +13.50 1 3 1 3 1   888    0 0.66 2.65 ----- 12.7 11.8 20.8 13.6 16.3 -0.2 16.3 -0.7 15.9 0.1 16.0 0.2
2026-04-11T13:52:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:52:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:52:52.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.494909
2026-04-11T13:52:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:52:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:52:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:52:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:52:52.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:52:52.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:52:20', tmtdew=0.074345, humidity=99.8006, cloud=0.0, wind=11.6118, temperature=14.1444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:52:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:52:52.177 [DEBUG] [Thread-170974] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:52:52.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:52:52.274 [DEBUG] [Thread-170977] [transport.py] [_log()] starting thread (client mode): 0xae560b20
2026-04-11T13:52:52.274 [DEBUG] [Thread-170977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:52:52.298 [DEBUG] [Thread-170977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:52:52.298 [INFO] [Thread-170977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:52:52.307 [DEBUG] [Thread-170977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:52:52.307 [DEBUG] [Thread-170977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] client lang: <none>
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] server lang: <none>
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] kex follows: False
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:52:52.308 [DEBUG] [Thread-170977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:52:52.309 [DEBUG] [Thread-170977] [transport.py] [_log()] Compression: none
2026-04-11T13:52:52.309 [DEBUG] [Thread-170977] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:52:52.375 [DEBUG] [Thread-170977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:52:52.376 [DEBUG] [Thread-170977] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:52:52.377 [DEBUG] [Thread-170977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:52:52.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:52:52.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:52:52.434 [DEBUG] [Thread-170977] [transport.py] [_log()] userauth is OK
2026-04-11T13:52:52.435 [DEBUG] [Thread-170977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:52:52.435 [DEBUG] [Thread-170977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:52:52.435 [DEBUG] [Thread-170977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:52:52.435 [DEBUG] [Thread-170977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:52:52.460 [INFO] [Thread-170977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:52:52.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:52:52.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:52:53.280 [DEBUG] [Thread-170977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:52:53.280 [DEBUG] [Thread-170977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:52:53.328 [DEBUG] [Thread-170977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:52:53.328 [DEBUG] [Thread-170977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:52:53.337 [DEBUG] [Thread-170977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:52:53.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:52:53.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-04-11T13:52:53.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-04-11T13:52:53.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:52:53.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:52:53.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:52:53.374 [DEBUG] [Thread-170977] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:53:03.656 [DEBUG] [Thread-170979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:53:05.577 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:53:05.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:53:08.840 [DEBUG] [Thread-170980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:53:18.707 [DEBUG] [Thread-170981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:53:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:53:23.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:53:23.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-04-11T13:53:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 52, 55), 0.071765, 99.8171, 0.0, 9.58248, 14.011, 2, 2, 2, 2, 0, 0),)
2026-04-11T13:53:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:52:55
2026-04-11T13:53:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:53:25.315 [DEBUG] [Thread-170982] [transport.py] [_log()] starting thread (client mode): 0xae536dd0
2026-04-11T13:53:25.315 [DEBUG] [Thread-170982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:53:25.334 [DEBUG] [Thread-170982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:53:25.334 [INFO] [Thread-170982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:53:25.337 [DEBUG] [Thread-170982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:53:25.337 [DEBUG] [Thread-170982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:53:25.337 [DEBUG] [Thread-170982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:53:25.337 [DEBUG] [Thread-170982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:53:25.337 [DEBUG] [Thread-170982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] client lang: <none>
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] server lang: <none>
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] kex follows: False
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] Compression: none
2026-04-11T13:53:25.338 [DEBUG] [Thread-170982] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:53:25.346 [DEBUG] [Thread-170982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:53:25.346 [DEBUG] [Thread-170982] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:53:25.347 [DEBUG] [Thread-170982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:53:25.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:53:25.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:53:25.348 [DEBUG] [Thread-170982] [transport.py] [_log()] userauth is OK
2026-04-11T13:53:25.349 [DEBUG] [Thread-170982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:53:25.349 [DEBUG] [Thread-170982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:53:25.349 [DEBUG] [Thread-170982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:53:25.349 [DEBUG] [Thread-170982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:53:25.367 [INFO] [Thread-170982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:53:25.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:53:25.940 [DEBUG] [Thread-170982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:53:25.941 [DEBUG] [Thread-170982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:53:25.941 [DEBUG] [Thread-170982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:53:25.981 [DEBUG] [Thread-170982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:53:25.982 [DEBUG] [Thread-170982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:53:25.986 [DEBUG] [Thread-170982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:53:25.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:53:25.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:53:26.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:53:26.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:53:26.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:53:26.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:53:26.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:53:26.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:53:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:53:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.495257 -999.00  +14.10  12.46     96  +13.50 1 3 1 3 1   888    0 0.66 2.64 ----- 12.5 12.5 20.0 14.1 16.3 -0.2 16.2 -1.0 15.9 0.0 16.0 0.1
2026-04-11T13:53:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:53:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:53:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.495257
2026-04-11T13:53:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:53:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:53:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:53:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:53:26.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:53:26.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:52:55', tmtdew=0.071765, humidity=99.8171, cloud=0.0, wind=9.58248, temperature=14.011, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:53:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:53:26.013 [DEBUG] [Thread-170982] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:53:26.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:53:33.744 [DEBUG] [Thread-170985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:53:48.794 [DEBUG] [Thread-170986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:03.833 [DEBUG] [Thread-170987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:05.722 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:05.724 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:08.866 [DEBUG] [Thread-170988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:18.869 [DEBUG] [Thread-170989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:33.907 [DEBUG] [Thread-170990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:54:48.946 [DEBUG] [Thread-170991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:03.984 [DEBUG] [Thread-170992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:05.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:05.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:08.900 [DEBUG] [Thread-170993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:19.023 [DEBUG] [Thread-170994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:34.063 [DEBUG] [Thread-170995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:55:40.031 [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-04-11T13:55:49.102 [DEBUG] [Thread-170996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:04.137 [DEBUG] [Thread-170997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:06.013 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:06.015 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:08.934 [DEBUG] [Thread-170998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:10.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:56:10.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:56:10.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-04-11T13:56:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 55, 53), 0.06431, 99.5009, 0.0, 9.81144, 14.2893, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:56:11.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:55:53
2026-04-11T13:56:11.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:56:11.947 [DEBUG] [Thread-170999] [transport.py] [_log()] starting thread (client mode): 0xae536920
2026-04-11T13:56:11.948 [DEBUG] [Thread-170999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:56:11.969 [DEBUG] [Thread-170999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:56:11.969 [INFO] [Thread-170999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] client lang: <none>
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] server lang: <none>
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] kex follows: False
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:56:11.972 [DEBUG] [Thread-170999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:56:11.973 [DEBUG] [Thread-170999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:56:11.973 [DEBUG] [Thread-170999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:56:11.973 [DEBUG] [Thread-170999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:56:11.973 [DEBUG] [Thread-170999] [transport.py] [_log()] Compression: none
2026-04-11T13:56:11.973 [DEBUG] [Thread-170999] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:56:11.990 [DEBUG] [Thread-170999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:56:11.991 [DEBUG] [Thread-170999] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:56:11.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:56:11.992 [DEBUG] [Thread-170999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:56:11.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:56:11.994 [DEBUG] [Thread-170999] [transport.py] [_log()] userauth is OK
2026-04-11T13:56:11.995 [DEBUG] [Thread-170999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:56:11.995 [DEBUG] [Thread-170999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:56:11.995 [DEBUG] [Thread-170999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:56:11.995 [DEBUG] [Thread-170999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:56:12.020 [INFO] [Thread-170999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:56:12.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:56:12.807 [DEBUG] [Thread-170999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:56:12.808 [DEBUG] [Thread-170999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:56:12.808 [DEBUG] [Thread-170999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:56:12.849 [DEBUG] [Thread-170999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:56:12.849 [DEBUG] [Thread-170999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:56:12.853 [DEBUG] [Thread-170999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:56:12.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:56:12.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:56:12.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:56:12.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:56:12.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:56:12.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:56:12.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:56:12.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:56:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:56:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.496993 -999.00  +14.00  11.61     95  +13.40 1 3 1 3 1   888    0 0.67 2.39 ----- 11.0 11.6 44.0 13.0 16.1 -0.4 16.2 -0.7 15.7 -0.8 15.8 0.3
2026-04-11T13:56:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:56:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:56:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.496993
2026-04-11T13:56:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:56:12.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:56:12.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:56:12.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:56:12.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:56:12.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:55:53', tmtdew=0.06431, humidity=99.5009, cloud=0.0, wind=9.81144, temperature=14.2893, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:55:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:56:12.880 [DEBUG] [Thread-170999] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:56:12.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:56:12.975 [DEBUG] [Thread-171002] [transport.py] [_log()] starting thread (client mode): 0xb0f40ac0
2026-04-11T13:56:12.975 [DEBUG] [Thread-171002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:56:12.990 [DEBUG] [Thread-171002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:56:12.990 [INFO] [Thread-171002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:56:12.998 [DEBUG] [Thread-171002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:56:12.998 [DEBUG] [Thread-171002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:56:12.998 [DEBUG] [Thread-171002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] client lang: <none>
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] server lang: <none>
2026-04-11T13:56:12.999 [DEBUG] [Thread-171002] [transport.py] [_log()] kex follows: False
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] Compression: none
2026-04-11T13:56:13.000 [DEBUG] [Thread-171002] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:56:13.056 [DEBUG] [Thread-171002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:56:13.057 [DEBUG] [Thread-171002] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:56:13.057 [DEBUG] [Thread-171002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:56:13.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:56:13.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:56:13.115 [DEBUG] [Thread-171002] [transport.py] [_log()] userauth is OK
2026-04-11T13:56:13.115 [DEBUG] [Thread-171002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:56:13.115 [DEBUG] [Thread-171002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:56:13.116 [DEBUG] [Thread-171002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:56:13.116 [DEBUG] [Thread-171002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:56:13.134 [INFO] [Thread-171002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:56:13.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:56:13.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:56:13.958 [DEBUG] [Thread-171002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:56:13.959 [DEBUG] [Thread-171002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:56:14.007 [DEBUG] [Thread-171002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:56:14.007 [DEBUG] [Thread-171002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:56:14.016 [DEBUG] [Thread-171002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:56:14.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:56:14.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-04-11T13:56:14.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-04-11T13:56:14.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:56:14.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:56:14.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:56:14.050 [DEBUG] [Thread-171002] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:56:19.174 [DEBUG] [Thread-171004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:34.238 [DEBUG] [Thread-171005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:56:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:56:44.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:56:44.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-04-11T13:56:45.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 56, 28), 0.07442, 99.8002, 0.0, 9.74124, 14.0778, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:56:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:56:28
2026-04-11T13:56:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:56:45.916 [DEBUG] [Thread-171006] [transport.py] [_log()] starting thread (client mode): 0xae5341f0
2026-04-11T13:56:45.916 [DEBUG] [Thread-171006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:56:45.938 [DEBUG] [Thread-171006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:56:45.938 [INFO] [Thread-171006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] client lang: <none>
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] server lang: <none>
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] kex follows: False
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] Compression: none
2026-04-11T13:56:45.942 [DEBUG] [Thread-171006] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:56:45.958 [DEBUG] [Thread-171006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:56:45.959 [DEBUG] [Thread-171006] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:56:45.959 [DEBUG] [Thread-171006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:56:45.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:56:45.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:56:45.961 [DEBUG] [Thread-171006] [transport.py] [_log()] userauth is OK
2026-04-11T13:56:45.961 [DEBUG] [Thread-171006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:56:45.962 [DEBUG] [Thread-171006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:56:45.962 [DEBUG] [Thread-171006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:56:45.962 [DEBUG] [Thread-171006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:56:45.985 [INFO] [Thread-171006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:56:45.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:56:46.787 [DEBUG] [Thread-171006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:56:46.787 [DEBUG] [Thread-171006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:56:46.787 [DEBUG] [Thread-171006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:56:46.828 [DEBUG] [Thread-171006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:56:46.829 [DEBUG] [Thread-171006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:56:46.832 [DEBUG] [Thread-171006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:56:46.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:56:46.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:56:46.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:56:46.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:56:46.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:56:46.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:56:46.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:56:46.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:56:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:56:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.497340 -999.00  +14.00  10.23     96  +13.40 1 3 1 3 1   888    0 0.68 2.69 ----- 10.8 10.2 33.4 11.8 16.1 -0.3 16.1 -0.7 15.7 -0.2 15.8 0.2
2026-04-11T13:56:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:56:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:56:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.497340
2026-04-11T13:56:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:56:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:56:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:56:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:56:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:56:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:56:28', tmtdew=0.07442, humidity=99.8002, cloud=0.0, wind=9.74124, temperature=14.0778, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:56:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:56:46.860 [DEBUG] [Thread-171006] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:56:46.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:56:49.276 [DEBUG] [Thread-171009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:04.330 [DEBUG] [Thread-171010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:06.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:06.158 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:08.975 [DEBUG] [Thread-171011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:19.370 [DEBUG] [Thread-171012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:34.411 [DEBUG] [Thread-171013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:57:49.447 [DEBUG] [Thread-171014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:04.481 [DEBUG] [Thread-171015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:06.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:06.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:09.013 [DEBUG] [Thread-171016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:19.517 [DEBUG] [Thread-171017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:34.557 [DEBUG] [Thread-171018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:58:49.594 [DEBUG] [Thread-171019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:00.735 [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-04-11T13:59:04.631 [DEBUG] [Thread-171020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:06.441 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:06.442 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:09.057 [DEBUG] [Thread-171021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:19.668 [DEBUG] [Thread-171022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:30.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T13:59:30.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T13:59:30.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T13:59:32.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 58, 51), 0.05927, 99.5335, 0.0, 11.1168, 14.1895, 2, 2, 0, 2, 0, 0),)
2026-04-11T13:59:32.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:58:51
2026-04-11T13:59:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T13:59:32.779 [DEBUG] [Thread-171023] [transport.py] [_log()] starting thread (client mode): 0xae536ef0
2026-04-11T13:59:32.779 [DEBUG] [Thread-171023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:59:32.799 [DEBUG] [Thread-171023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T13:59:32.799 [INFO] [Thread-171023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] client lang: <none>
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] server lang: <none>
2026-04-11T13:59:32.803 [DEBUG] [Thread-171023] [transport.py] [_log()] kex follows: False
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] Compression: none
2026-04-11T13:59:32.804 [DEBUG] [Thread-171023] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:59:32.819 [DEBUG] [Thread-171023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:59:32.819 [DEBUG] [Thread-171023] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:59:32.819 [DEBUG] [Thread-171023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T13:59:32.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T13:59:32.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:59:32.820 [DEBUG] [Thread-171023] [transport.py] [_log()] userauth is OK
2026-04-11T13:59:32.820 [DEBUG] [Thread-171023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:59:32.820 [DEBUG] [Thread-171023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:59:32.820 [DEBUG] [Thread-171023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T13:59:32.820 [DEBUG] [Thread-171023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:59:32.830 [INFO] [Thread-171023] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:59:32.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:59:33.660 [DEBUG] [Thread-171023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:59:33.660 [DEBUG] [Thread-171023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:59:33.660 [DEBUG] [Thread-171023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T13:59:33.701 [DEBUG] [Thread-171023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:59:33.702 [DEBUG] [Thread-171023] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:59:33.705 [DEBUG] [Thread-171023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:59:33.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:59:33.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T13:59:33.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T13:59:33.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T13:59:33.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:59:33.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T13:59:33.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:59:33.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:59:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T13:59:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.499076 -999.00  +14.00  13.66     95  +13.40 1 3 1 3 1   888    0 0.70 3.42 ----- 11.3 13.7 61.8 14.8 16.2 0.3 16.1 -0.3 15.7 -0.5 16.0 0.5
2026-04-11T13:59:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T13:59:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T13:59:33.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.499076
2026-04-11T13:59:33.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T13:59:33.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T13:59:33.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T13:59:33.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T13:59:33.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T13:59:33.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:58:51', tmtdew=0.05927, humidity=99.5335, cloud=0.0, wind=11.1168, temperature=14.1895, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:58:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T13:59:33.734 [DEBUG] [Thread-171023] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:59:33.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T13:59:33.827 [DEBUG] [Thread-171026] [transport.py] [_log()] starting thread (client mode): 0xae5e5270
2026-04-11T13:59:33.827 [DEBUG] [Thread-171026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T13:59:33.841 [DEBUG] [Thread-171026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T13:59:33.842 [INFO] [Thread-171026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T13:59:33.849 [DEBUG] [Thread-171026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] client lang: <none>
2026-04-11T13:59:33.850 [DEBUG] [Thread-171026] [transport.py] [_log()] server lang: <none>
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] kex follows: False
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] Compression: none
2026-04-11T13:59:33.851 [DEBUG] [Thread-171026] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T13:59:33.910 [DEBUG] [Thread-171026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T13:59:33.910 [DEBUG] [Thread-171026] [transport.py] [_log()] Switch to new keys ...
2026-04-11T13:59:33.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T13:59:33.912 [DEBUG] [Thread-171026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T13:59:33.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T13:59:33.965 [DEBUG] [Thread-171026] [transport.py] [_log()] userauth is OK
2026-04-11T13:59:33.965 [DEBUG] [Thread-171026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T13:59:33.965 [DEBUG] [Thread-171026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T13:59:33.965 [DEBUG] [Thread-171026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T13:59:33.965 [DEBUG] [Thread-171026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T13:59:33.979 [INFO] [Thread-171026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T13:59:33.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T13:59:33.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T13:59:34.705 [DEBUG] [Thread-171028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T13:59:34.776 [DEBUG] [Thread-171026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T13:59:34.776 [DEBUG] [Thread-171026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T13:59:34.824 [DEBUG] [Thread-171026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T13:59:34.824 [DEBUG] [Thread-171026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T13:59:34.837 [DEBUG] [Thread-171026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T13:59:34.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T13:59:34.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T13:59:34.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T13:59:34.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T13:59:34.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T13:59:34.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T13:59:34.875 [DEBUG] [Thread-171026] [transport.py] [_log()] EOF in transport thread
2026-04-11T13:59:49.760 [DEBUG] [Thread-171029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:04.797 [DEBUG] [Thread-171030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:00:04.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:00:04.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-04-11T14:00:06.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 13, 59, 26), 0.071925, 99.8165, 0.0, 9.91764, 13.8948, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:00:06.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 13:59:26
2026-04-11T14:00:06.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:06.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:00:06.767 [DEBUG] [Thread-171031] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-11T14:00:06.767 [DEBUG] [Thread-171031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:00:06.788 [DEBUG] [Thread-171031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:00:06.788 [INFO] [Thread-171031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] client lang: <none>
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] server lang: <none>
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] kex follows: False
2026-04-11T14:00:06.791 [DEBUG] [Thread-171031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:00:06.792 [DEBUG] [Thread-171031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:00:06.792 [DEBUG] [Thread-171031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:00:06.792 [DEBUG] [Thread-171031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:00:06.792 [DEBUG] [Thread-171031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:00:06.792 [DEBUG] [Thread-171031] [transport.py] [_log()] Compression: none
2026-04-11T14:00:06.792 [DEBUG] [Thread-171031] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:00:06.813 [DEBUG] [Thread-171031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:00:06.813 [DEBUG] [Thread-171031] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:00:06.814 [DEBUG] [Thread-171031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:00:06.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:00:06.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:00:06.815 [DEBUG] [Thread-171031] [transport.py] [_log()] userauth is OK
2026-04-11T14:00:06.815 [DEBUG] [Thread-171031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:00:06.815 [DEBUG] [Thread-171031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:00:06.815 [DEBUG] [Thread-171031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:00:06.816 [DEBUG] [Thread-171031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:00:06.837 [INFO] [Thread-171031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:00:06.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:00:09.099 [DEBUG] [Thread-171033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:18.586 [DEBUG] [Thread-171031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:00:18.586 [DEBUG] [Thread-171031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:00:18.587 [DEBUG] [Thread-171031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:00:18.626 [DEBUG] [Thread-171031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:00:18.627 [DEBUG] [Thread-171031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:00:18.630 [DEBUG] [Thread-171031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:00:18.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:00:18.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:00:18.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:00:18.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:00:18.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:00:18.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:00:18.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:00:18.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:00:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:00:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.499423 -999.00  +14.10  12.71     96  +13.50 1 3 1 3 1   888    0 0.74 4.36 ----- 11.3 12.7 54.8 14.2 16.2 0.4 16.3 -0.1 15.8 0.2 16.0 0.7
2026-04-11T14:00:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:00:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:00:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.499423
2026-04-11T14:00:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:00:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:00:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:00:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:00:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:00:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T13:59:26', tmtdew=0.071925, humidity=99.8165, cloud=0.0, wind=9.91764, temperature=13.8948, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T11:59:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:00:18.715 [DEBUG] [Thread-171031] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:00:18.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:00:18.811 [DEBUG] [Thread-171035] [transport.py] [_log()] starting thread (client mode): 0xb39c7310
2026-04-11T14:00:18.811 [DEBUG] [Thread-171035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:00:18.826 [DEBUG] [Thread-171035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:00:18.826 [INFO] [Thread-171035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:00:18.834 [DEBUG] [Thread-171035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:00:18.834 [DEBUG] [Thread-171035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:00:18.835 [DEBUG] [Thread-171035] [transport.py] [_log()] client lang: <none>
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] server lang: <none>
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] kex follows: False
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:00:18.836 [DEBUG] [Thread-171035] [transport.py] [_log()] Compression: none
2026-04-11T14:00:18.837 [DEBUG] [Thread-171035] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:00:18.895 [DEBUG] [Thread-171035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:00:18.896 [DEBUG] [Thread-171035] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:00:18.896 [DEBUG] [Thread-171035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:00:18.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:00:18.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:00:18.953 [DEBUG] [Thread-171035] [transport.py] [_log()] userauth is OK
2026-04-11T14:00:18.954 [DEBUG] [Thread-171035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:00:18.954 [DEBUG] [Thread-171035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:00:18.954 [DEBUG] [Thread-171035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:00:18.954 [DEBUG] [Thread-171035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:00:18.979 [INFO] [Thread-171035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:00:18.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:00:18.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:00:19.829 [DEBUG] [Thread-171035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:00:19.829 [DEBUG] [Thread-171037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:19.829 [DEBUG] [Thread-171035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:00:19.876 [DEBUG] [Thread-171035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:00:19.876 [DEBUG] [Thread-171035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:00:19.885 [DEBUG] [Thread-171035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:00:19.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:00:19.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-04-11T14:00:19.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-04-11T14:00:19.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:00:19.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:00:19.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:00:19.923 [DEBUG] [Thread-171035] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:00:34.895 [DEBUG] [Thread-171038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:49.934 [DEBUG] [Thread-171039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:00:49.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:00:49.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:00:49.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-04-11T14:00:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 0, 38), 0.04892, 99.6003, 0.0, 10.9757, 14.1898, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:00:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:00:38
2026-04-11T14:00:51.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:00:51.729 [DEBUG] [Thread-171040] [transport.py] [_log()] starting thread (client mode): 0xae5e7d90
2026-04-11T14:00:51.729 [DEBUG] [Thread-171040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:00:51.745 [DEBUG] [Thread-171040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:00:51.746 [INFO] [Thread-171040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] client lang: <none>
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] server lang: <none>
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] kex follows: False
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:00:51.749 [DEBUG] [Thread-171040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:00:51.750 [DEBUG] [Thread-171040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:00:51.750 [DEBUG] [Thread-171040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:00:51.750 [DEBUG] [Thread-171040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:00:51.750 [DEBUG] [Thread-171040] [transport.py] [_log()] Compression: none
2026-04-11T14:00:51.750 [DEBUG] [Thread-171040] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:00:51.767 [DEBUG] [Thread-171040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:00:51.767 [DEBUG] [Thread-171040] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:00:51.768 [DEBUG] [Thread-171040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:00:51.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:00:51.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:00:51.770 [DEBUG] [Thread-171040] [transport.py] [_log()] userauth is OK
2026-04-11T14:00:51.770 [DEBUG] [Thread-171040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:00:51.770 [DEBUG] [Thread-171040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:00:51.770 [DEBUG] [Thread-171040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:00:51.771 [DEBUG] [Thread-171040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:00:51.795 [INFO] [Thread-171040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:00:51.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:00:52.384 [DEBUG] [Thread-171040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:00:52.384 [DEBUG] [Thread-171040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:00:52.385 [DEBUG] [Thread-171040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:00:52.425 [DEBUG] [Thread-171040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:00:52.425 [DEBUG] [Thread-171040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:00:52.429 [DEBUG] [Thread-171040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:00:52.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:00:52.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:00:52.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:00:52.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:00:52.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:00:52.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:00:52.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:00:52.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:00:52.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:00:52.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.500465 -999.00  +14.40  11.96     96  +13.90 1 3 1 3 1   888    0 0.72 4.39 ----- 10.8 12.0 61.6 13.3 -999.0 -999.0 16.5 0.2 16.1 0.9 16.2 1.2
2026-04-11T14:00:52.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:00:52.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:00:52.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.500465
2026-04-11T14:00:52.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:00:52.451 [DEBUG] [Thread-171040] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:00:52.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:00:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:00:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:00:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:00:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:00:38', tmtdew=0.04892, humidity=99.6003, cloud=0.0, wind=10.9757, temperature=14.1898, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:00:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:00:52.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:00:52.547 [DEBUG] [Thread-171043] [transport.py] [_log()] starting thread (client mode): 0xa79b6950
2026-04-11T14:00:52.547 [DEBUG] [Thread-171043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:00:52.561 [DEBUG] [Thread-171043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:00:52.561 [INFO] [Thread-171043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:00:52.568 [DEBUG] [Thread-171043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:00:52.569 [DEBUG] [Thread-171043] [transport.py] [_log()] client lang: <none>
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] server lang: <none>
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] kex follows: False
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] Compression: none
2026-04-11T14:00:52.570 [DEBUG] [Thread-171043] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:00:52.630 [DEBUG] [Thread-171043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:00:52.630 [DEBUG] [Thread-171043] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:00:52.631 [DEBUG] [Thread-171043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:00:52.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:00:52.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:00:52.689 [DEBUG] [Thread-171043] [transport.py] [_log()] userauth is OK
2026-04-11T14:00:52.690 [DEBUG] [Thread-171043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:00:52.690 [DEBUG] [Thread-171043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:00:52.690 [DEBUG] [Thread-171043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:00:52.690 [DEBUG] [Thread-171043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:00:52.709 [INFO] [Thread-171043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:00:52.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:00:52.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:00:53.506 [DEBUG] [Thread-171043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:00:53.507 [DEBUG] [Thread-171043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:00:53.555 [DEBUG] [Thread-171043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:00:53.556 [DEBUG] [Thread-171043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:00:53.565 [DEBUG] [Thread-171043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:00:53.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:00:53.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-04-11T14:00:53.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-04-11T14:00:53.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:00:53.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:00:53.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:00:53.602 [DEBUG] [Thread-171043] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:01:04.971 [DEBUG] [Thread-171045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:06.724 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:06.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:09.132 [DEBUG] [Thread-171046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:20.025 [DEBUG] [Thread-171047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:23.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:01:23.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:01:23.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-04-11T14:01:24.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 1, 13), 0.07706, 99.7833, 0.0, 10.7114, 13.9613, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:01:24.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:01:13
2026-04-11T14:01:25.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:01:25.463 [DEBUG] [Thread-171048] [transport.py] [_log()] starting thread (client mode): 0xb0feaf80
2026-04-11T14:01:25.463 [DEBUG] [Thread-171048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:01:25.482 [DEBUG] [Thread-171048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:01:25.482 [INFO] [Thread-171048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:01:25.485 [DEBUG] [Thread-171048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:01:25.485 [DEBUG] [Thread-171048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:01:25.485 [DEBUG] [Thread-171048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:01:25.485 [DEBUG] [Thread-171048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:01:25.485 [DEBUG] [Thread-171048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] client lang: <none>
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] server lang: <none>
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] kex follows: False
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] Compression: none
2026-04-11T14:01:25.486 [DEBUG] [Thread-171048] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:01:25.495 [DEBUG] [Thread-171048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:01:25.496 [DEBUG] [Thread-171048] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:01:25.496 [DEBUG] [Thread-171048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:01:25.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:01:25.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:01:25.498 [DEBUG] [Thread-171048] [transport.py] [_log()] userauth is OK
2026-04-11T14:01:25.498 [DEBUG] [Thread-171048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:01:25.498 [DEBUG] [Thread-171048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:01:25.498 [DEBUG] [Thread-171048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:01:25.498 [DEBUG] [Thread-171048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:01:25.516 [INFO] [Thread-171048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:01:25.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:01:26.145 [DEBUG] [Thread-171048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:01:26.145 [DEBUG] [Thread-171048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:01:26.146 [DEBUG] [Thread-171048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:01:26.186 [DEBUG] [Thread-171048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:01:26.186 [DEBUG] [Thread-171048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:01:26.190 [DEBUG] [Thread-171048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:01:26.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:01:26.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:01:26.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:01:26.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:01:26.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:01:26.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:01:26.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:01:26.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:01:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:01:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.500812 -999.00  +14.30  15.89     96  +13.60 1 3 1 3 1   888    0 0.72 4.12 ----- 14.8 15.9 38.8 17.0 16.5 0.6 16.5 0.1 16.1 0.2 16.3 1.0
2026-04-11T14:01:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:01:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:01:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.500812
2026-04-11T14:01:26.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:01:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:01:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:01:26.221 [DEBUG] [Thread-171048] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:01:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:01:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:01:26.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:01:13', tmtdew=0.07706, humidity=99.7833, cloud=0.0, wind=10.7114, temperature=13.9613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:01:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:01:26.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:01:26.308 [DEBUG] [Thread-171051] [transport.py] [_log()] starting thread (client mode): 0xae5e4490
2026-04-11T14:01:26.308 [DEBUG] [Thread-171051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:01:26.322 [DEBUG] [Thread-171051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:01:26.323 [INFO] [Thread-171051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:01:26.330 [DEBUG] [Thread-171051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:01:26.330 [DEBUG] [Thread-171051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:01:26.330 [DEBUG] [Thread-171051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:01:26.330 [DEBUG] [Thread-171051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] client lang: <none>
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] server lang: <none>
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] kex follows: False
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] Compression: none
2026-04-11T14:01:26.331 [DEBUG] [Thread-171051] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:01:26.391 [DEBUG] [Thread-171051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:01:26.391 [DEBUG] [Thread-171051] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:01:26.392 [DEBUG] [Thread-171051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:01:26.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:01:26.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:01:26.449 [DEBUG] [Thread-171051] [transport.py] [_log()] userauth is OK
2026-04-11T14:01:26.449 [DEBUG] [Thread-171051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:01:26.449 [DEBUG] [Thread-171051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:01:26.450 [DEBUG] [Thread-171051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:01:26.450 [DEBUG] [Thread-171051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:01:26.469 [INFO] [Thread-171051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:01:26.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:01:26.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:01:27.301 [DEBUG] [Thread-171051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:01:27.301 [DEBUG] [Thread-171051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:01:27.349 [DEBUG] [Thread-171051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:01:27.349 [DEBUG] [Thread-171051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:01:27.359 [DEBUG] [Thread-171051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:01:27.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:01:27.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-04-11T14:01:27.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-04-11T14:01:27.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:01:27.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:01:27.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:01:27.395 [DEBUG] [Thread-171051] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:01:35.065 [DEBUG] [Thread-171053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:50.111 [DEBUG] [Thread-171054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:01:57.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:01:57.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:01:57.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-04-11T14:01:58.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 1, 48), 0.0644, 99.5004, 0.0, 8.36496, 14.2227, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:01:58.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:01:48
2026-04-11T14:01:59.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:01:59.233 [DEBUG] [Thread-171055] [transport.py] [_log()] starting thread (client mode): 0xa795fa60
2026-04-11T14:01:59.233 [DEBUG] [Thread-171055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:01:59.253 [DEBUG] [Thread-171055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:01:59.253 [INFO] [Thread-171055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] client lang: <none>
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] server lang: <none>
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] kex follows: False
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] Compression: none
2026-04-11T14:01:59.256 [DEBUG] [Thread-171055] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:01:59.271 [DEBUG] [Thread-171055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:01:59.271 [DEBUG] [Thread-171055] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:01:59.271 [DEBUG] [Thread-171055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:01:59.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:01:59.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:01:59.272 [DEBUG] [Thread-171055] [transport.py] [_log()] userauth is OK
2026-04-11T14:01:59.273 [DEBUG] [Thread-171055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:01:59.273 [DEBUG] [Thread-171055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:01:59.273 [DEBUG] [Thread-171055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:01:59.273 [DEBUG] [Thread-171055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:01:59.287 [INFO] [Thread-171055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:01:59.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:01:59.917 [DEBUG] [Thread-171055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:01:59.917 [DEBUG] [Thread-171055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:01:59.918 [DEBUG] [Thread-171055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:01:59.958 [DEBUG] [Thread-171055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:01:59.958 [DEBUG] [Thread-171055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:01:59.960 [DEBUG] [Thread-171055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:01:59.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:01:59.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:01:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:01:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:01:59.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:01:59.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:01:59.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:01:59.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:01:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:01:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.501159 -999.00  +14.10  12.00     96  +13.50 1 3 1 3 1   888    0 0.75 4.47 ----- 11.8 12.0 46.6 16.2 16.5 0.6 16.6 0.4 16.1 0.4 16.3 1.0
2026-04-11T14:01:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:01:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:01:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.501159
2026-04-11T14:01:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:01:59.984 [DEBUG] [Thread-171055] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:01:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:01:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:01:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:01:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:01:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:01:48', tmtdew=0.0644, humidity=99.5004, cloud=0.0, wind=8.36496, temperature=14.2227, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:01:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:02:00.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:02:00.098 [DEBUG] [Thread-171058] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T14:02:00.098 [DEBUG] [Thread-171058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:02:00.112 [DEBUG] [Thread-171058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:02:00.113 [INFO] [Thread-171058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:02:00.120 [DEBUG] [Thread-171058] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:02:00.120 [DEBUG] [Thread-171058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:02:00.120 [DEBUG] [Thread-171058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:02:00.120 [DEBUG] [Thread-171058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:02:00.120 [DEBUG] [Thread-171058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:02:00.120 [DEBUG] [Thread-171058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] client lang: <none>
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] server lang: <none>
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] kex follows: False
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] Compression: none
2026-04-11T14:02:00.121 [DEBUG] [Thread-171058] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:02:00.179 [DEBUG] [Thread-171058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:02:00.179 [DEBUG] [Thread-171058] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:02:00.179 [DEBUG] [Thread-171058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:02:00.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:02:00.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:02:00.236 [DEBUG] [Thread-171058] [transport.py] [_log()] userauth is OK
2026-04-11T14:02:00.237 [DEBUG] [Thread-171058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:02:00.237 [DEBUG] [Thread-171058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:02:00.237 [DEBUG] [Thread-171058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:02:00.237 [DEBUG] [Thread-171058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:02:00.255 [INFO] [Thread-171058] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:02:00.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:02:00.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:02:01.084 [DEBUG] [Thread-171058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:02:01.085 [DEBUG] [Thread-171058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:02:01.132 [DEBUG] [Thread-171058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:02:01.132 [DEBUG] [Thread-171058] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:02:01.140 [DEBUG] [Thread-171058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:02:01.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:02: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-04-11T14:02: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-04-11T14:02:01.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:02:01.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:02:01.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:02:01.171 [DEBUG] [Thread-171058] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:02:05.149 [DEBUG] [Thread-171060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:02:06.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:02:06.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:02:09.175 [DEBUG] [Thread-171061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:02:20.202 [DEBUG] [Thread-171062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:02:31.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:02:31.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:02:31.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-04-11T14:02:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 2, 24), 0.0719, 99.8165, 0.0, 10.3234, 14.0276, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:02:32.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:02:24
2026-04-11T14:02:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:02:33.079 [DEBUG] [Thread-171063] [transport.py] [_log()] starting thread (client mode): 0xae5086a0
2026-04-11T14:02:33.079 [DEBUG] [Thread-171063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:02:33.097 [DEBUG] [Thread-171063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:02:33.097 [INFO] [Thread-171063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:02:33.101 [DEBUG] [Thread-171063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:02:33.101 [DEBUG] [Thread-171063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:02:33.101 [DEBUG] [Thread-171063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:02:33.101 [DEBUG] [Thread-171063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] client lang: <none>
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] server lang: <none>
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] kex follows: False
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:02:33.102 [DEBUG] [Thread-171063] [transport.py] [_log()] Compression: none
2026-04-11T14:02:33.103 [DEBUG] [Thread-171063] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:02:33.112 [DEBUG] [Thread-171063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:02:33.113 [DEBUG] [Thread-171063] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:02:33.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:02:33.114 [DEBUG] [Thread-171063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:02:33.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:02:33.116 [DEBUG] [Thread-171063] [transport.py] [_log()] userauth is OK
2026-04-11T14:02:33.116 [DEBUG] [Thread-171063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:02:33.116 [DEBUG] [Thread-171063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:02:33.117 [DEBUG] [Thread-171063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:02:33.117 [DEBUG] [Thread-171063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:02:33.155 [INFO] [Thread-171063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:02:33.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:02:33.770 [DEBUG] [Thread-171063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:02:33.771 [DEBUG] [Thread-171063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:02:33.771 [DEBUG] [Thread-171063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:02:33.812 [DEBUG] [Thread-171063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:02:33.812 [DEBUG] [Thread-171063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:02:33.815 [DEBUG] [Thread-171063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:02:33.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:02:33.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:02:33.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:02:33.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:02:33.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:02:33.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:02:33.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:02:33.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:02:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:02:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.501507 -999.00  +14.10  11.89     95  +13.40 1 3 1 3 1   888    0 0.72 4.06 ----- 11.1 11.9 55.4 14.9 16.6 0.8 16.6 0.1 16.1 -0.2 16.4 1.0
2026-04-11T14:02:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:02:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:02:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.501507
2026-04-11T14:02:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:02:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:02:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:02:33.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:02:33.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:02:33.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:02:24', tmtdew=0.0719, humidity=99.8165, cloud=0.0, wind=10.3234, temperature=14.0276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:02:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:02:33.842 [DEBUG] [Thread-171063] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:02:33.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:02:33.937 [DEBUG] [Thread-171066] [transport.py] [_log()] starting thread (client mode): 0xb0feab90
2026-04-11T14:02:33.937 [DEBUG] [Thread-171066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:02:33.952 [DEBUG] [Thread-171066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:02:33.952 [INFO] [Thread-171066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:02:33.960 [DEBUG] [Thread-171066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] client lang: <none>
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] server lang: <none>
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] kex follows: False
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:02:33.961 [DEBUG] [Thread-171066] [transport.py] [_log()] Compression: none
2026-04-11T14:02:33.962 [DEBUG] [Thread-171066] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:02:34.021 [DEBUG] [Thread-171066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:02:34.021 [DEBUG] [Thread-171066] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:02:34.022 [DEBUG] [Thread-171066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:02:34.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:02:34.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:02:34.080 [DEBUG] [Thread-171066] [transport.py] [_log()] userauth is OK
2026-04-11T14:02:34.081 [DEBUG] [Thread-171066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:02:34.081 [DEBUG] [Thread-171066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:02:34.081 [DEBUG] [Thread-171066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:02:34.081 [DEBUG] [Thread-171066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:02:34.100 [INFO] [Thread-171066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:02:34.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:02:34.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:02:34.911 [DEBUG] [Thread-171066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:02:34.911 [DEBUG] [Thread-171066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:02:34.959 [DEBUG] [Thread-171066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:02:34.959 [DEBUG] [Thread-171066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:02:34.973 [DEBUG] [Thread-171066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:02:34.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:02:34.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-04-11T14:02:34.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-04-11T14:02:35.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:02:35.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:02:35.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:02:35.013 [DEBUG] [Thread-171066] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:02:35.239 [DEBUG] [Thread-171068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:02:50.294 [DEBUG] [Thread-171069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:03:05.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:03:05.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-04-11T14:03:05.331 [DEBUG] [Thread-171070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:06.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 2, 24), 0.0719, 99.8165, 0.0, 10.3234, 14.0276, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:03:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:02:24
2026-04-11T14:03:06.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:03:06.853 [DEBUG] [Thread-171071] [transport.py] [_log()] starting thread (client mode): 0xae561510
2026-04-11T14:03:06.853 [DEBUG] [Thread-171071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:03:06.874 [DEBUG] [Thread-171071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:03:06.874 [INFO] [Thread-171071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] client lang: <none>
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] server lang: <none>
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] kex follows: False
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:03:06.875 [DEBUG] [Thread-171071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:03:06.876 [DEBUG] [Thread-171071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:03:06.876 [DEBUG] [Thread-171071] [transport.py] [_log()] Compression: none
2026-04-11T14:03:06.876 [DEBUG] [Thread-171071] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:03:06.887 [DEBUG] [Thread-171071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:03:06.887 [DEBUG] [Thread-171071] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:03:06.887 [DEBUG] [Thread-171071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:03:06.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:03:06.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:03:06.889 [DEBUG] [Thread-171071] [transport.py] [_log()] userauth is OK
2026-04-11T14:03:06.889 [DEBUG] [Thread-171071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:03:06.889 [DEBUG] [Thread-171071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:03:06.889 [DEBUG] [Thread-171071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:03:06.889 [DEBUG] [Thread-171071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:03:06.905 [INFO] [Thread-171071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:03:06.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:03:07.006 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:07.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:08.222 [DEBUG] [Thread-171071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:03:08.222 [DEBUG] [Thread-171071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:03:08.223 [DEBUG] [Thread-171071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:03:08.263 [DEBUG] [Thread-171071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:03:08.263 [DEBUG] [Thread-171071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:03:08.267 [DEBUG] [Thread-171071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:03:08.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:03:08.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:03:08.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:03:08.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:03:08.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:03:08.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:03:08.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:03:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:03:08.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:03:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.501854 -999.00  +14.20  11.69     96  +13.60 1 3 1 3 1   888    0 0.74 4.25 ----- 14.6 11.7 59.6 13.9 16.6 0.4 16.6 -0.2 16.2 0.5 16.4 1.0
2026-04-11T14:03:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:03:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:03:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.501854
2026-04-11T14:03:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:03:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:03:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:03:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:03:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:03:08.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:02:24', tmtdew=0.0719, humidity=99.8165, cloud=0.0, wind=10.3234, temperature=14.0276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:02:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:03:08.297 [DEBUG] [Thread-171071] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:03:08.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:03:08.390 [DEBUG] [Thread-171074] [transport.py] [_log()] starting thread (client mode): 0xb39c7b20
2026-04-11T14:03:08.390 [DEBUG] [Thread-171074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:03:08.405 [DEBUG] [Thread-171074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:03:08.405 [INFO] [Thread-171074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:03:08.413 [DEBUG] [Thread-171074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:03:08.413 [DEBUG] [Thread-171074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:03:08.413 [DEBUG] [Thread-171074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] client lang: <none>
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] server lang: <none>
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] kex follows: False
2026-04-11T14:03:08.414 [DEBUG] [Thread-171074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:03:08.415 [DEBUG] [Thread-171074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:03:08.415 [DEBUG] [Thread-171074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:03:08.415 [DEBUG] [Thread-171074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:03:08.415 [DEBUG] [Thread-171074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:03:08.415 [DEBUG] [Thread-171074] [transport.py] [_log()] Compression: none
2026-04-11T14:03:08.415 [DEBUG] [Thread-171074] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:03:08.471 [DEBUG] [Thread-171074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:03:08.471 [DEBUG] [Thread-171074] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:03:08.471 [DEBUG] [Thread-171074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:03:08.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:03:08.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:03:08.528 [DEBUG] [Thread-171074] [transport.py] [_log()] userauth is OK
2026-04-11T14:03:08.528 [DEBUG] [Thread-171074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:03:08.528 [DEBUG] [Thread-171074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:03:08.528 [DEBUG] [Thread-171074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:03:08.528 [DEBUG] [Thread-171074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:03:08.552 [INFO] [Thread-171074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:03:08.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:03:08.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:03:09.231 [DEBUG] [Thread-171076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:09.380 [DEBUG] [Thread-171074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:03:09.380 [DEBUG] [Thread-171074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:03:09.428 [DEBUG] [Thread-171074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:03:09.428 [DEBUG] [Thread-171074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:03:09.437 [DEBUG] [Thread-171074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:03:09.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:03:09.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-04-11T14:03:09.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-04-11T14:03:09.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:03:09.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:03:09.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:03:09.474 [DEBUG] [Thread-171074] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:03:20.369 [DEBUG] [Thread-171077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:35.421 [DEBUG] [Thread-171078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:03:39.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:03:39.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:03:39.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-04-11T14:03:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 2, 24), 0.0719, 99.8165, 0.0, 10.3234, 13.9776, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:03:40.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:02:24
2026-04-11T14:03:41.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:03:41.524 [DEBUG] [Thread-171079] [transport.py] [_log()] starting thread (client mode): 0xae5e47f0
2026-04-11T14:03:41.524 [DEBUG] [Thread-171079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:03:41.541 [DEBUG] [Thread-171079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:03:41.542 [INFO] [Thread-171079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] client lang: <none>
2026-04-11T14:03:41.544 [DEBUG] [Thread-171079] [transport.py] [_log()] server lang: <none>
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] kex follows: False
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] Compression: none
2026-04-11T14:03:41.545 [DEBUG] [Thread-171079] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:03:41.559 [DEBUG] [Thread-171079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:03:41.560 [DEBUG] [Thread-171079] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:03:41.561 [DEBUG] [Thread-171079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:03:41.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:03:41.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:03:41.563 [DEBUG] [Thread-171079] [transport.py] [_log()] userauth is OK
2026-04-11T14:03:41.563 [DEBUG] [Thread-171079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:03:41.563 [DEBUG] [Thread-171079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:03:41.563 [DEBUG] [Thread-171079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:03:41.563 [DEBUG] [Thread-171079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:03:41.581 [INFO] [Thread-171079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:03:41.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:03:42.166 [DEBUG] [Thread-171079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:03:42.166 [DEBUG] [Thread-171079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:03:42.166 [DEBUG] [Thread-171079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:03:42.207 [DEBUG] [Thread-171079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:03:42.208 [DEBUG] [Thread-171079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:03:42.211 [DEBUG] [Thread-171079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:03:42.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:03:42.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:03:42.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:03:42.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:03:42.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:03:42.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:03:42.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:03:42.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:03:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:03:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.502201 -999.00  +14.20  12.79     96  +13.50 1 3 1 3 1   888    0 0.72 4.27 ----- 11.7 12.8 46.0 15.1 16.6 0.5 16.6 0.1 16.2 0.1 16.4 0.6
2026-04-11T14:03:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:03:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:03:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.502201
2026-04-11T14:03:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:03:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:03:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:03:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:03:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:03:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:02:24', tmtdew=0.0719, humidity=99.8165, cloud=0.0, wind=10.3234, temperature=13.9776, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:03:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:03:42.240 [DEBUG] [Thread-171079] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:03:42.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:03:42.334 [DEBUG] [Thread-171082] [transport.py] [_log()] starting thread (client mode): 0xae5364a0
2026-04-11T14:03:42.334 [DEBUG] [Thread-171082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:03:42.349 [DEBUG] [Thread-171082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:03:42.350 [INFO] [Thread-171082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:03:42.357 [DEBUG] [Thread-171082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] client lang: <none>
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] server lang: <none>
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] kex follows: False
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] Compression: none
2026-04-11T14:03:42.358 [DEBUG] [Thread-171082] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:03:42.416 [DEBUG] [Thread-171082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:03:42.417 [DEBUG] [Thread-171082] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:03:42.417 [DEBUG] [Thread-171082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:03:42.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:03:42.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:03:42.476 [DEBUG] [Thread-171082] [transport.py] [_log()] userauth is OK
2026-04-11T14:03:42.476 [DEBUG] [Thread-171082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:03:42.476 [DEBUG] [Thread-171082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:03:42.477 [DEBUG] [Thread-171082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:03:42.477 [DEBUG] [Thread-171082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:03:42.496 [INFO] [Thread-171082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:03:42.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:03:42.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:03:43.318 [DEBUG] [Thread-171082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:03:43.318 [DEBUG] [Thread-171082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:03:43.366 [DEBUG] [Thread-171082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:03:43.367 [DEBUG] [Thread-171082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:03:43.376 [DEBUG] [Thread-171082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:03:43.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:03:43.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-04-11T14:03:43.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-04-11T14:03:43.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:03:43.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:03:43.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:03:43.414 [DEBUG] [Thread-171082] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:03:50.459 [DEBUG] [Thread-171084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:05.522 [DEBUG] [Thread-171085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:07.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:07.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:09.265 [DEBUG] [Thread-171086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:04:13.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:04:13.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-04-11T14:04:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 3, 35), 0.04899, 99.5992, 0.0, 10.6934, 14.4875, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:04:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:03:35
2026-04-11T14:04:15.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:04:15.500 [DEBUG] [Thread-171087] [transport.py] [_log()] starting thread (client mode): 0xb0fea110
2026-04-11T14:04:15.500 [DEBUG] [Thread-171087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:04:15.520 [DEBUG] [Thread-171087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:04:15.520 [INFO] [Thread-171087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:04:15.521 [DEBUG] [Thread-171087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:04:15.521 [DEBUG] [Thread-171087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:04:15.521 [DEBUG] [Thread-171087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:04:15.521 [DEBUG] [Thread-171087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:15.521 [DEBUG] [Thread-171087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:15.521 [DEBUG] [Thread-171087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] client lang: <none>
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] server lang: <none>
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] kex follows: False
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] Compression: none
2026-04-11T14:04:15.522 [DEBUG] [Thread-171087] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:04:15.530 [DEBUG] [Thread-171087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:04:15.530 [DEBUG] [Thread-171087] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:04:15.531 [DEBUG] [Thread-171087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:04:15.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:04:15.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:04:15.532 [DEBUG] [Thread-171087] [transport.py] [_log()] userauth is OK
2026-04-11T14:04:15.532 [DEBUG] [Thread-171087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:04:15.532 [DEBUG] [Thread-171087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:04:15.533 [DEBUG] [Thread-171087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:04:15.533 [DEBUG] [Thread-171087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:04:15.550 [INFO] [Thread-171087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:04:15.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:04:16.172 [DEBUG] [Thread-171087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:04:16.173 [DEBUG] [Thread-171087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:04:16.173 [DEBUG] [Thread-171087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:04:16.214 [DEBUG] [Thread-171087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:04:16.214 [DEBUG] [Thread-171087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:04:16.217 [DEBUG] [Thread-171087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:04:16.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:04:16.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:04:16.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:04:16.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:04:16.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:04:16.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:04:16.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:04:16.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:04:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:04:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.502548 -999.00  +14.10  11.98     96  +13.50 1 3 1 3 1   888    0 0.74 4.25 ----- 10.9 12.0 50.2 13.8 16.6 0.1 16.6 -0.2 16.3 0.0 16.4 0.5
2026-04-11T14:04:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:04:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:04:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.502548
2026-04-11T14:04:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:04:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:04:16.245 [DEBUG] [Thread-171087] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:04:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:04:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:04:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:04:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:03:35', tmtdew=0.04899, humidity=99.5992, cloud=0.0, wind=10.6934, temperature=14.4875, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:03:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:04:16.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:04:16.335 [DEBUG] [Thread-171090] [transport.py] [_log()] starting thread (client mode): 0xae50a4d0
2026-04-11T14:04:16.335 [DEBUG] [Thread-171090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:04:16.350 [DEBUG] [Thread-171090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:04:16.350 [INFO] [Thread-171090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:16.361 [DEBUG] [Thread-171090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] client lang: <none>
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] server lang: <none>
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] kex follows: False
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] Compression: none
2026-04-11T14:04:16.362 [DEBUG] [Thread-171090] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:04:16.414 [DEBUG] [Thread-171090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:04:16.415 [DEBUG] [Thread-171090] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:04:16.415 [DEBUG] [Thread-171090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:04:16.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:04:16.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:04:16.471 [DEBUG] [Thread-171090] [transport.py] [_log()] userauth is OK
2026-04-11T14:04:16.471 [DEBUG] [Thread-171090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:04:16.471 [DEBUG] [Thread-171090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:04:16.471 [DEBUG] [Thread-171090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:04:16.471 [DEBUG] [Thread-171090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:04:16.489 [INFO] [Thread-171090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:04:16.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:04:16.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:04:17.316 [DEBUG] [Thread-171090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:04:17.316 [DEBUG] [Thread-171090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:04:17.364 [DEBUG] [Thread-171090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:04:17.365 [DEBUG] [Thread-171090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:04:17.373 [DEBUG] [Thread-171090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:04:17.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:04:17.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-04-11T14:04:17.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-04-11T14:04:17.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:04:17.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:04:17.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:04:17.407 [DEBUG] [Thread-171090] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:04:20.561 [DEBUG] [Thread-171092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:35.612 [DEBUG] [Thread-171093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:47.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:04:47.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:04:47.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-04-11T14:04:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 4, 11), 0.074505, 99.7996, 0.0, 14.4166, 14.1272, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:04:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:04:11
2026-04-11T14:04:49.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:04:49.324 [DEBUG] [Thread-171094] [transport.py] [_log()] starting thread (client mode): 0xae50ab30
2026-04-11T14:04:49.324 [DEBUG] [Thread-171094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:04:49.346 [DEBUG] [Thread-171094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:04:49.346 [INFO] [Thread-171094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:04:49.349 [DEBUG] [Thread-171094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] client lang: <none>
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] server lang: <none>
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] kex follows: False
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] Compression: none
2026-04-11T14:04:49.350 [DEBUG] [Thread-171094] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:04:49.368 [DEBUG] [Thread-171094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:04:49.368 [DEBUG] [Thread-171094] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:04:49.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:04:49.370 [DEBUG] [Thread-171094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:04:49.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:04:49.371 [DEBUG] [Thread-171094] [transport.py] [_log()] userauth is OK
2026-04-11T14:04:49.371 [DEBUG] [Thread-171094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:04:49.372 [DEBUG] [Thread-171094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:04:49.372 [DEBUG] [Thread-171094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:04:49.372 [DEBUG] [Thread-171094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:04:49.387 [INFO] [Thread-171094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:04:49.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:04:50.018 [DEBUG] [Thread-171094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:04:50.018 [DEBUG] [Thread-171094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:04:50.018 [DEBUG] [Thread-171094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:04:50.059 [DEBUG] [Thread-171094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:04:50.060 [DEBUG] [Thread-171094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:04:50.063 [DEBUG] [Thread-171094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:04:50.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:04:50.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:04:50.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:04:50.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:04:50.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:04:50.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:04:50.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:04:50.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:04:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:04:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.503243 -999.00  +14.10  10.58     96  +13.50 1 3 1 3 1   888    0 0.73 4.16 ----- 10.2 10.6 54.4 14.9 16.6 0.0 16.7 0.3 16.2 -0.4 16.4 0.5
2026-04-11T14:04:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:04:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:04:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.503243
2026-04-11T14:04:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:04:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:04:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:04:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:04:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:04:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:04:11', tmtdew=0.074505, humidity=99.7996, cloud=0.0, wind=14.4166, temperature=14.1272, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:04:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:04:50.092 [DEBUG] [Thread-171094] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:04:50.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:04:50.188 [DEBUG] [Thread-171097] [transport.py] [_log()] starting thread (client mode): 0xae534e20
2026-04-11T14:04:50.188 [DEBUG] [Thread-171097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:04:50.204 [DEBUG] [Thread-171097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:04:50.204 [INFO] [Thread-171097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:04:50.211 [DEBUG] [Thread-171097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] client lang: <none>
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] server lang: <none>
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] kex follows: False
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:04:50.212 [DEBUG] [Thread-171097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:04:50.213 [DEBUG] [Thread-171097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:04:50.213 [DEBUG] [Thread-171097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:04:50.213 [DEBUG] [Thread-171097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:04:50.213 [DEBUG] [Thread-171097] [transport.py] [_log()] Compression: none
2026-04-11T14:04:50.213 [DEBUG] [Thread-171097] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:04:50.271 [DEBUG] [Thread-171097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:04:50.272 [DEBUG] [Thread-171097] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:04:50.273 [DEBUG] [Thread-171097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:04:50.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:04:50.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:04:50.327 [DEBUG] [Thread-171097] [transport.py] [_log()] userauth is OK
2026-04-11T14:04:50.328 [DEBUG] [Thread-171097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:04:50.328 [DEBUG] [Thread-171097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:04:50.328 [DEBUG] [Thread-171097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:04:50.328 [DEBUG] [Thread-171097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:04:50.348 [INFO] [Thread-171097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:04:50.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:04:50.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:04:50.649 [DEBUG] [Thread-171099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:04:51.148 [DEBUG] [Thread-171097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:04:51.149 [DEBUG] [Thread-171097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:04:51.197 [DEBUG] [Thread-171097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:04:51.197 [DEBUG] [Thread-171097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:04:51.207 [DEBUG] [Thread-171097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:04:51.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:04:51.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:04: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') -> 00000000
2026-04-11T14:04:51.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:04:51.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:04:51.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:04:51.249 [DEBUG] [Thread-171097] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:05:05.704 [DEBUG] [Thread-171100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:05:07.285 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:05:07.287 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:05:09.300 [DEBUG] [Thread-171101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:05:20.741 [DEBUG] [Thread-171102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:05:21.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:05:21.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:05:21.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-04-11T14:05:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 4, 47), 0.04385, 99.6321, 0.0, 10.9404, 14.5868, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:05:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:04:47
2026-04-11T14:05:22.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:05:23.111 [DEBUG] [Thread-171103] [transport.py] [_log()] starting thread (client mode): 0xae5097e0
2026-04-11T14:05:23.111 [DEBUG] [Thread-171103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:05:23.132 [DEBUG] [Thread-171103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:05:23.132 [INFO] [Thread-171103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] client lang: <none>
2026-04-11T14:05:23.134 [DEBUG] [Thread-171103] [transport.py] [_log()] server lang: <none>
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] kex follows: False
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] Compression: none
2026-04-11T14:05:23.135 [DEBUG] [Thread-171103] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:05:23.148 [DEBUG] [Thread-171103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:05:23.149 [DEBUG] [Thread-171103] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:05:23.150 [DEBUG] [Thread-171103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:05:23.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:05:23.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:05:23.152 [DEBUG] [Thread-171103] [transport.py] [_log()] userauth is OK
2026-04-11T14:05:23.152 [DEBUG] [Thread-171103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:05:23.152 [DEBUG] [Thread-171103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:05:23.153 [DEBUG] [Thread-171103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:05:23.153 [DEBUG] [Thread-171103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:05:23.175 [INFO] [Thread-171103] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:05:23.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:05:30.369 [DEBUG] [Thread-171103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:05:30.369 [DEBUG] [Thread-171103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:05:30.370 [DEBUG] [Thread-171103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:05:30.410 [DEBUG] [Thread-171103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:05:30.410 [DEBUG] [Thread-171103] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:05:30.413 [DEBUG] [Thread-171103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:05:30.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:05:30.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:05:30.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:05:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:05:30.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:05:30.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:05:30.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:05:30.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:05:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:05:30.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.503243 -999.00  +14.10  10.58     96  +13.50 1 3 1 3 1   888    0 0.73 4.16 ----- 10.2 10.6 54.4 14.9 16.6 0.0 16.7 0.3 16.2 -0.4 16.4 0.5
2026-04-11T14:05:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:05:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:05:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.503243
2026-04-11T14:05:30.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:05:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:04:47', tmtdew=0.04385, humidity=99.6321, cloud=0.0, wind=10.9404, temperature=14.5868, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:04:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:05:30.521 [DEBUG] [Thread-171103] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:05:30.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:05:30.615 [DEBUG] [Thread-171106] [transport.py] [_log()] starting thread (client mode): 0xae508340
2026-04-11T14:05:30.615 [DEBUG] [Thread-171106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:05:30.629 [DEBUG] [Thread-171106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:05:30.630 [INFO] [Thread-171106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:05:30.637 [DEBUG] [Thread-171106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] client lang: <none>
2026-04-11T14:05:30.638 [DEBUG] [Thread-171106] [transport.py] [_log()] server lang: <none>
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] kex follows: False
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] Compression: none
2026-04-11T14:05:30.639 [DEBUG] [Thread-171106] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:05:30.696 [DEBUG] [Thread-171106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:05:30.696 [DEBUG] [Thread-171106] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:05:30.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:05:30.697 [DEBUG] [Thread-171106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:05:30.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:05:30.755 [DEBUG] [Thread-171106] [transport.py] [_log()] userauth is OK
2026-04-11T14:05:30.756 [DEBUG] [Thread-171106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:05:30.756 [DEBUG] [Thread-171106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:05:30.756 [DEBUG] [Thread-171106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:05:30.756 [DEBUG] [Thread-171106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:05:30.779 [INFO] [Thread-171106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:05:30.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:05:30.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:05:31.617 [DEBUG] [Thread-171106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:05:31.617 [DEBUG] [Thread-171106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:05:31.665 [DEBUG] [Thread-171106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:05:31.666 [DEBUG] [Thread-171106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:05:31.676 [DEBUG] [Thread-171106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:05:31.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:05:31.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:05:31.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:05:31.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:05:31.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:05:31.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:05:31.715 [DEBUG] [Thread-171106] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:05:35.777 [DEBUG] [Thread-171108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:05:50.840 [DEBUG] [Thread-171109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:01.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:06:01.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:06:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:06:03.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 5, 22), 0.027105, 99.7829, 0.0, 9.47664, 13.9439, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:06:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:05:22
2026-04-11T14:06:03.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:06:03.682 [DEBUG] [Thread-171110] [transport.py] [_log()] starting thread (client mode): 0xae508ac0
2026-04-11T14:06:03.682 [DEBUG] [Thread-171110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:06:03.702 [DEBUG] [Thread-171110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:06:03.702 [INFO] [Thread-171110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] client lang: <none>
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] server lang: <none>
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] kex follows: False
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:06:03.705 [DEBUG] [Thread-171110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:06:03.706 [DEBUG] [Thread-171110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:06:03.706 [DEBUG] [Thread-171110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:06:03.706 [DEBUG] [Thread-171110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:06:03.706 [DEBUG] [Thread-171110] [transport.py] [_log()] Compression: none
2026-04-11T14:06:03.706 [DEBUG] [Thread-171110] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:06:03.714 [DEBUG] [Thread-171110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:06:03.715 [DEBUG] [Thread-171110] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:06:03.715 [DEBUG] [Thread-171110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:06:03.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:06:03.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:06:03.717 [DEBUG] [Thread-171110] [transport.py] [_log()] userauth is OK
2026-04-11T14:06:03.717 [DEBUG] [Thread-171110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:06:03.717 [DEBUG] [Thread-171110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:06:03.717 [DEBUG] [Thread-171110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:06:03.717 [DEBUG] [Thread-171110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:06:03.736 [INFO] [Thread-171110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:06:03.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:06:04.372 [DEBUG] [Thread-171110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:06:04.372 [DEBUG] [Thread-171110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:06:04.373 [DEBUG] [Thread-171110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:06:04.414 [DEBUG] [Thread-171110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:06:04.414 [DEBUG] [Thread-171110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:06:04.418 [DEBUG] [Thread-171110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:06:04.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:06:04.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:06:04.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:06:04.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:06:04.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:06:04.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:06:04.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:06:04.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:06:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:06:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.503937 -999.00  +14.20  14.40     96  +13.60 1 3 1 3 1   888    0 0.70 2.98 ----- 11.0 14.4 52.6 18.4 16.7 0.4 16.7 0.1 16.2 -0.3 16.5 0.6
2026-04-11T14:06:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:06:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:06:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.503937
2026-04-11T14:06:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:06:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:06:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:06:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:06:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:06:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:05:22', tmtdew=0.027105, humidity=99.7829, cloud=0.0, wind=9.47664, temperature=13.9439, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:05:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:06:04.443 [DEBUG] [Thread-171110] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:06:04.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:06:04.548 [DEBUG] [Thread-171113] [transport.py] [_log()] starting thread (client mode): 0xa7950c40
2026-04-11T14:06:04.548 [DEBUG] [Thread-171113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:06:04.566 [DEBUG] [Thread-171113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:06:04.566 [INFO] [Thread-171113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:06:04.574 [DEBUG] [Thread-171113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:06:04.574 [DEBUG] [Thread-171113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:06:04.574 [DEBUG] [Thread-171113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:06:04.574 [DEBUG] [Thread-171113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:04.574 [DEBUG] [Thread-171113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] client lang: <none>
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] server lang: <none>
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] kex follows: False
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] Compression: none
2026-04-11T14:06:04.575 [DEBUG] [Thread-171113] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:06:04.635 [DEBUG] [Thread-171113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:06:04.635 [DEBUG] [Thread-171113] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:06:04.636 [DEBUG] [Thread-171113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:06:04.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:06:04.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:06:04.691 [DEBUG] [Thread-171113] [transport.py] [_log()] userauth is OK
2026-04-11T14:06:04.691 [DEBUG] [Thread-171113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:06:04.691 [DEBUG] [Thread-171113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:06:04.692 [DEBUG] [Thread-171113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:06:04.692 [DEBUG] [Thread-171113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:06:04.717 [INFO] [Thread-171113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:06:04.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:06:04.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:06:05.534 [DEBUG] [Thread-171113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:06:05.534 [DEBUG] [Thread-171113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:06:05.582 [DEBUG] [Thread-171113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:06:05.582 [DEBUG] [Thread-171113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:06:05.592 [DEBUG] [Thread-171113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:06:05.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:06:05.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-04-11T14:06:05.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-04-11T14:06:05.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:06:05.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:06:05.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:06:05.629 [DEBUG] [Thread-171113] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:06:05.877 [DEBUG] [Thread-171115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:07.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:07.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:09.340 [DEBUG] [Thread-171116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:20.927 [DEBUG] [Thread-171117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:35.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:06:35.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:06:35.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-04-11T14:06:35.961 [DEBUG] [Thread-171118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:06:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 5, 58), 0.077145, 99.7828, 0.0, 13.4993, 13.9276, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:06:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:05:58
2026-04-11T14:06:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:06:37.523 [DEBUG] [Thread-171119] [transport.py] [_log()] starting thread (client mode): 0xae50b5e0
2026-04-11T14:06:37.523 [DEBUG] [Thread-171119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:06:37.543 [DEBUG] [Thread-171119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:06:37.544 [INFO] [Thread-171119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:06:37.546 [DEBUG] [Thread-171119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] client lang: <none>
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] server lang: <none>
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] kex follows: False
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:06:37.547 [DEBUG] [Thread-171119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:06:37.548 [DEBUG] [Thread-171119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:06:37.548 [DEBUG] [Thread-171119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:06:37.548 [DEBUG] [Thread-171119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:06:37.548 [DEBUG] [Thread-171119] [transport.py] [_log()] Compression: none
2026-04-11T14:06:37.548 [DEBUG] [Thread-171119] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:06:37.567 [DEBUG] [Thread-171119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:06:37.568 [DEBUG] [Thread-171119] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:06:37.569 [DEBUG] [Thread-171119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:06:37.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:06:37.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:06:37.613 [DEBUG] [Thread-171119] [transport.py] [_log()] userauth is OK
2026-04-11T14:06:37.613 [DEBUG] [Thread-171119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:06:37.614 [DEBUG] [Thread-171119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:06:37.614 [DEBUG] [Thread-171119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:06:37.614 [DEBUG] [Thread-171119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:06:37.645 [INFO] [Thread-171119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:06:37.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:06:38.250 [DEBUG] [Thread-171119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:06:38.250 [DEBUG] [Thread-171119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:06:38.250 [DEBUG] [Thread-171119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:06:38.291 [DEBUG] [Thread-171119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:06:38.291 [DEBUG] [Thread-171119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:06:38.294 [DEBUG] [Thread-171119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:06:38.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:06:38.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:06:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:06:38.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:06:38.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:06:38.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:06:38.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:06:38.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:06:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:06:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.504284 -999.00  +14.20  12.51     96  +13.60 1 3 1 3 1   888    0 0.70 2.88 ----- 12.0 12.5 52.6 15.2 16.8 0.2 16.8 -0.4 -999.0 -999.0 16.6 0.6
2026-04-11T14:06:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:06:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:06:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.504284
2026-04-11T14:06:38.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:06:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:06:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:06:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:06:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:06:38.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:05:58', tmtdew=0.077145, humidity=99.7828, cloud=0.0, wind=13.4993, temperature=13.9276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:06:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:06:38.315 [DEBUG] [Thread-171119] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:06:38.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:06:38.408 [DEBUG] [Thread-171122] [transport.py] [_log()] starting thread (client mode): 0xa79b6440
2026-04-11T14:06:38.408 [DEBUG] [Thread-171122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:06:38.422 [DEBUG] [Thread-171122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:06:38.423 [INFO] [Thread-171122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:06:38.430 [DEBUG] [Thread-171122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] client lang: <none>
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] server lang: <none>
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] kex follows: False
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] Compression: none
2026-04-11T14:06:38.431 [DEBUG] [Thread-171122] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:06:38.493 [DEBUG] [Thread-171122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:06:38.493 [DEBUG] [Thread-171122] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:06:38.494 [DEBUG] [Thread-171122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:06:38.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:06:38.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:06:38.550 [DEBUG] [Thread-171122] [transport.py] [_log()] userauth is OK
2026-04-11T14:06:38.551 [DEBUG] [Thread-171122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:06:38.551 [DEBUG] [Thread-171122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:06:38.551 [DEBUG] [Thread-171122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:06:38.551 [DEBUG] [Thread-171122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:06:38.570 [INFO] [Thread-171122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:06:38.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:06:38.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:06:39.356 [DEBUG] [Thread-171122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:06:39.357 [DEBUG] [Thread-171122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:06:39.405 [DEBUG] [Thread-171122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:06:39.405 [DEBUG] [Thread-171122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:06:39.414 [DEBUG] [Thread-171122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:06:39.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:06:39.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-04-11T14:06:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:06:39.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:06:39.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:06:39.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:06:39.450 [DEBUG] [Thread-171122] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:06:50.999 [DEBUG] [Thread-171124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:06.051 [DEBUG] [Thread-171125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:07.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:07.571 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:09.385 [DEBUG] [Thread-171126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:07:09.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:07:09.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-04-11T14:07:10.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 6, 34), 0.04915, 99.5987, 0.0, 12.7044, 14.2551, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:07:10.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:06:34
2026-04-11T14:07:11.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:07:11.355 [DEBUG] [Thread-171127] [transport.py] [_log()] starting thread (client mode): 0xa7951150
2026-04-11T14:07:11.355 [DEBUG] [Thread-171127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:07:11.375 [DEBUG] [Thread-171127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:07:11.375 [INFO] [Thread-171127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:07:11.376 [DEBUG] [Thread-171127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] client lang: <none>
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] server lang: <none>
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] kex follows: False
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] Compression: none
2026-04-11T14:07:11.377 [DEBUG] [Thread-171127] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:07:11.387 [DEBUG] [Thread-171127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:07:11.388 [DEBUG] [Thread-171127] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:07:11.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:07:11.389 [DEBUG] [Thread-171127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:07:11.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:07:11.391 [DEBUG] [Thread-171127] [transport.py] [_log()] userauth is OK
2026-04-11T14:07:11.391 [DEBUG] [Thread-171127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:07:11.391 [DEBUG] [Thread-171127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:07:11.391 [DEBUG] [Thread-171127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:07:11.392 [DEBUG] [Thread-171127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:07:11.416 [INFO] [Thread-171127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:07:11.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:07:12.013 [DEBUG] [Thread-171127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:07:12.013 [DEBUG] [Thread-171127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:07:12.013 [DEBUG] [Thread-171127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:07:12.054 [DEBUG] [Thread-171127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:07:12.054 [DEBUG] [Thread-171127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:07:12.056 [DEBUG] [Thread-171127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:07:12.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:07:12.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:07:12.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:07:12.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:07:12.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:07:12.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:07:12.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:07:12.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:07:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:07:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.504632 -999.00  +14.20  11.39     95  +13.50 1 3 1 3 1   888    0 0.71 2.98 ----- 12.0 11.4 38.8 13.2 16.8 -0.2 16.8 -0.3 16.3 -0.2 16.6 0.6
2026-04-11T14:07:12.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:07:12.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:07:12.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.504632
2026-04-11T14:07:12.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:07:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:07:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:07:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:07:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:07:12.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:06:34', tmtdew=0.04915, humidity=99.5987, cloud=0.0, wind=12.7044, temperature=14.2551, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:06:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:07:12.086 [DEBUG] [Thread-171127] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:07:12.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:07:12.183 [DEBUG] [Thread-171130] [transport.py] [_log()] starting thread (client mode): 0xa7953610
2026-04-11T14:07:12.183 [DEBUG] [Thread-171130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:07:12.198 [DEBUG] [Thread-171130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:07:12.198 [INFO] [Thread-171130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:07:12.206 [DEBUG] [Thread-171130] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:07:12.206 [DEBUG] [Thread-171130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:07:12.206 [DEBUG] [Thread-171130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:07:12.206 [DEBUG] [Thread-171130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] client lang: <none>
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] server lang: <none>
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] kex follows: False
2026-04-11T14:07:12.207 [DEBUG] [Thread-171130] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:07:12.208 [DEBUG] [Thread-171130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:07:12.208 [DEBUG] [Thread-171130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:07:12.208 [DEBUG] [Thread-171130] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:07:12.208 [DEBUG] [Thread-171130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:07:12.208 [DEBUG] [Thread-171130] [transport.py] [_log()] Compression: none
2026-04-11T14:07:12.208 [DEBUG] [Thread-171130] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:07:12.267 [DEBUG] [Thread-171130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:07:12.268 [DEBUG] [Thread-171130] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:07:12.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:07:12.269 [DEBUG] [Thread-171130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:07:12.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:07:12.323 [DEBUG] [Thread-171130] [transport.py] [_log()] userauth is OK
2026-04-11T14:07:12.323 [DEBUG] [Thread-171130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:07:12.323 [DEBUG] [Thread-171130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:07:12.323 [DEBUG] [Thread-171130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:07:12.323 [DEBUG] [Thread-171130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:07:12.342 [INFO] [Thread-171130] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:07:12.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:07:12.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:07:13.130 [DEBUG] [Thread-171130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:07:13.131 [DEBUG] [Thread-171130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:07:13.179 [DEBUG] [Thread-171130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:07:13.180 [DEBUG] [Thread-171130] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:07:13.189 [DEBUG] [Thread-171130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:07:13.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:07:13.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-04-11T14:07:13.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-04-11T14:07:13.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:07:13.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:07:13.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:07:13.225 [DEBUG] [Thread-171130] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:07:21.087 [DEBUG] [Thread-171132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:36.149 [DEBUG] [Thread-171133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:07:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:07:43.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:07:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:07:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 7, 9), 0.02453, 99.7997, 0.0, 12.335, 13.8446, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:07:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:07:09
2026-04-11T14:07:44.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:07:45.151 [DEBUG] [Thread-171134] [transport.py] [_log()] starting thread (client mode): 0xa7950940
2026-04-11T14:07:45.151 [DEBUG] [Thread-171134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:07:45.170 [DEBUG] [Thread-171134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:07:45.171 [INFO] [Thread-171134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:07:45.175 [DEBUG] [Thread-171134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:07:45.175 [DEBUG] [Thread-171134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:07:45.175 [DEBUG] [Thread-171134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:07:45.175 [DEBUG] [Thread-171134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:45.175 [DEBUG] [Thread-171134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:45.175 [DEBUG] [Thread-171134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] client lang: <none>
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] server lang: <none>
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] kex follows: False
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:07:45.176 [DEBUG] [Thread-171134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:07:45.177 [DEBUG] [Thread-171134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:07:45.177 [DEBUG] [Thread-171134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:07:45.177 [DEBUG] [Thread-171134] [transport.py] [_log()] Compression: none
2026-04-11T14:07:45.177 [DEBUG] [Thread-171134] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:07:45.196 [DEBUG] [Thread-171134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:07:45.196 [DEBUG] [Thread-171134] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:07:45.197 [DEBUG] [Thread-171134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:07:45.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:07:45.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:07:45.198 [DEBUG] [Thread-171134] [transport.py] [_log()] userauth is OK
2026-04-11T14:07:45.199 [DEBUG] [Thread-171134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:07:45.199 [DEBUG] [Thread-171134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:07:45.199 [DEBUG] [Thread-171134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:07:45.199 [DEBUG] [Thread-171134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:07:45.217 [INFO] [Thread-171134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:07:45.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:07:45.789 [DEBUG] [Thread-171134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:07:45.790 [DEBUG] [Thread-171134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:07:45.790 [DEBUG] [Thread-171134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:07:45.830 [DEBUG] [Thread-171134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:07:45.830 [DEBUG] [Thread-171134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:07:45.834 [DEBUG] [Thread-171134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:07:45.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:07:45.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:07:45.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:07:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:07:45.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:07:45.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:07:45.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:07:45.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:07:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:07:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.505326 -999.00  +14.10  11.32     95  +13.40 1 3 1 3 1   888    0 0.69 2.43 ----- 11.5 11.3 47.4 17.3 16.8 0.1 16.8 -0.5 16.3 -0.2 16.5 0.3
2026-04-11T14:07:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:07:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:07:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.505326
2026-04-11T14:07:45.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:07:45.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:07:45.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:07:45.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:07:45.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:07:45.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:07:09', tmtdew=0.02453, humidity=99.7997, cloud=0.0, wind=12.335, temperature=13.8446, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:07:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:07:45.855 [DEBUG] [Thread-171134] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:07:45.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:07:45.944 [DEBUG] [Thread-171137] [transport.py] [_log()] starting thread (client mode): 0xa79511b0
2026-04-11T14:07:45.944 [DEBUG] [Thread-171137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:07:45.959 [DEBUG] [Thread-171137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:07:45.959 [INFO] [Thread-171137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] client lang: <none>
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] server lang: <none>
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] kex follows: False
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:07:45.967 [DEBUG] [Thread-171137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:07:45.968 [DEBUG] [Thread-171137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:07:45.968 [DEBUG] [Thread-171137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:07:45.968 [DEBUG] [Thread-171137] [transport.py] [_log()] Compression: none
2026-04-11T14:07:45.968 [DEBUG] [Thread-171137] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:07:46.032 [DEBUG] [Thread-171137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:07:46.033 [DEBUG] [Thread-171137] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:07:46.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:07:46.034 [DEBUG] [Thread-171137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:07:46.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:07:46.091 [DEBUG] [Thread-171137] [transport.py] [_log()] userauth is OK
2026-04-11T14:07:46.092 [DEBUG] [Thread-171137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:07:46.092 [DEBUG] [Thread-171137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:07:46.092 [DEBUG] [Thread-171137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:07:46.092 [DEBUG] [Thread-171137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:07:46.111 [INFO] [Thread-171137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:07:46.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:07:46.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:07:46.914 [DEBUG] [Thread-171137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:07:46.914 [DEBUG] [Thread-171137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:07:46.962 [DEBUG] [Thread-171137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:07:46.962 [DEBUG] [Thread-171137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:07:46.971 [DEBUG] [Thread-171137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:07:46.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:07:46.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-04-11T14:07:46.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-04-11T14:07:46.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:07:46.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:07:47.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:07:47.008 [DEBUG] [Thread-171137] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:07:51.186 [DEBUG] [Thread-171139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:06.242 [DEBUG] [Thread-171140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:07.709 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:07.710 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:09.425 [DEBUG] [Thread-171141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:17.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:08:17.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:08:17.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:08:18.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 7, 44), 0.0645, 99.4999, 0.0, 8.85888, 14.1229, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:08:18.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:07:44
2026-04-11T14:08:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:08:18.803 [DEBUG] [Thread-171142] [transport.py] [_log()] starting thread (client mode): 0xae5e6c20
2026-04-11T14:08:18.803 [DEBUG] [Thread-171142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:08:18.824 [DEBUG] [Thread-171142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:08:18.825 [INFO] [Thread-171142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:08:18.827 [DEBUG] [Thread-171142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] client lang: <none>
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] server lang: <none>
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] kex follows: False
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] Compression: none
2026-04-11T14:08:18.828 [DEBUG] [Thread-171142] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:08:18.847 [DEBUG] [Thread-171142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:08:18.848 [DEBUG] [Thread-171142] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:08:18.848 [DEBUG] [Thread-171142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:08:18.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:08:18.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:08:18.850 [DEBUG] [Thread-171142] [transport.py] [_log()] userauth is OK
2026-04-11T14:08:18.850 [DEBUG] [Thread-171142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:08:18.851 [DEBUG] [Thread-171142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:08:18.851 [DEBUG] [Thread-171142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:08:18.851 [DEBUG] [Thread-171142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:08:18.876 [INFO] [Thread-171142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:08:18.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:08:19.447 [DEBUG] [Thread-171142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:08:19.448 [DEBUG] [Thread-171142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:08:19.448 [DEBUG] [Thread-171142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:08:19.488 [DEBUG] [Thread-171142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:08:19.488 [DEBUG] [Thread-171142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:08:19.491 [DEBUG] [Thread-171142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:08:19.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:08:19.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:08:19.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:08:19.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:08:19.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:08:19.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:08:19.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:08:19.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:08:19.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:08:19.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.505673 -999.00  +14.00  14.26     95  +13.30 1 3 1 3 1   888    0 0.71 2.51 ----- 14.5 14.3 62.6 15.5 16.8 0.2 16.7 -0.5 16.2 -0.7 16.5 0.5
2026-04-11T14:08:19.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:08:19.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:08:19.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.505673
2026-04-11T14:08:19.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:08:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:08:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:08:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:08:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:08:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:07:44', tmtdew=0.0645, humidity=99.4999, cloud=0.0, wind=8.85888, temperature=14.1229, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:08:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:08:19.517 [DEBUG] [Thread-171142] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:08:19.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:08:19.612 [DEBUG] [Thread-171145] [transport.py] [_log()] starting thread (client mode): 0xae5e6170
2026-04-11T14:08:19.612 [DEBUG] [Thread-171145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:08:19.626 [DEBUG] [Thread-171145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:08:19.626 [INFO] [Thread-171145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:08:19.634 [DEBUG] [Thread-171145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:08:19.634 [DEBUG] [Thread-171145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:08:19.635 [DEBUG] [Thread-171145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:08:19.635 [DEBUG] [Thread-171145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:19.635 [DEBUG] [Thread-171145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:19.635 [DEBUG] [Thread-171145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:19.635 [DEBUG] [Thread-171145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:19.635 [DEBUG] [Thread-171145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] client lang: <none>
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] server lang: <none>
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] kex follows: False
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] Compression: none
2026-04-11T14:08:19.636 [DEBUG] [Thread-171145] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:08:19.691 [DEBUG] [Thread-171145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:08:19.692 [DEBUG] [Thread-171145] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:08:19.693 [DEBUG] [Thread-171145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:08:19.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:08:19.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:08:19.748 [DEBUG] [Thread-171145] [transport.py] [_log()] userauth is OK
2026-04-11T14:08:19.748 [DEBUG] [Thread-171145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:08:19.748 [DEBUG] [Thread-171145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:08:19.748 [DEBUG] [Thread-171145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:08:19.748 [DEBUG] [Thread-171145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:08:19.767 [INFO] [Thread-171145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:08:19.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:08:19.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:08:20.581 [DEBUG] [Thread-171145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:08:20.581 [DEBUG] [Thread-171145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:08:20.629 [DEBUG] [Thread-171145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:08:20.629 [DEBUG] [Thread-171145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:08:20.639 [DEBUG] [Thread-171145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:08:20.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:08: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')
2026-04-11T14:08:20.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-04-11T14:08:20.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:08:20.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:08:20.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:08:20.675 [DEBUG] [Thread-171145] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:08:21.282 [DEBUG] [Thread-171147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:36.332 [DEBUG] [Thread-171148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:08:50.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:08:50.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-04-11T14:08:51.368 [DEBUG] [Thread-171149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:08:51.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 8, 20), 0.0694, 99.8327, 0.0, 10.5174, 13.8277, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:08:51.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:08:20
2026-04-11T14:08:52.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:08:52.488 [DEBUG] [Thread-171150] [transport.py] [_log()] starting thread (client mode): 0xae5e6d70
2026-04-11T14:08:52.488 [DEBUG] [Thread-171150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:08:52.510 [DEBUG] [Thread-171150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:08:52.510 [INFO] [Thread-171150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:52.513 [DEBUG] [Thread-171150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] client lang: <none>
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] server lang: <none>
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] kex follows: False
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:08:52.514 [DEBUG] [Thread-171150] [transport.py] [_log()] Compression: none
2026-04-11T14:08:52.515 [DEBUG] [Thread-171150] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:08:52.534 [DEBUG] [Thread-171150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:08:52.534 [DEBUG] [Thread-171150] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:08:52.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:08:52.536 [DEBUG] [Thread-171150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:08:52.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:08:52.538 [DEBUG] [Thread-171150] [transport.py] [_log()] userauth is OK
2026-04-11T14:08:52.539 [DEBUG] [Thread-171150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:08:52.539 [DEBUG] [Thread-171150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:08:52.539 [DEBUG] [Thread-171150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:08:52.539 [DEBUG] [Thread-171150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:08:52.565 [INFO] [Thread-171150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:08:52.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:08:53.189 [DEBUG] [Thread-171150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:08:53.189 [DEBUG] [Thread-171150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:08:53.190 [DEBUG] [Thread-171150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:08:53.230 [DEBUG] [Thread-171150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:08:53.230 [DEBUG] [Thread-171150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:08:53.234 [DEBUG] [Thread-171150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:08:53.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:08:53.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:08:53.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:08:53.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:08:53.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:08:53.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:08:53.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:08:53.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:08:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:08:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.506020 -999.00  +14.20  11.22     95  +13.50 1 3 1 3 1   888    0 0.70 2.47 ----- 12.9 11.2 58.2 14.7 16.8 0.1 16.8 -0.1 16.4 -0.4 16.5 0.4
2026-04-11T14:08:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:08:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:08:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.506020
2026-04-11T14:08:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:08:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:08:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:08:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:08:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:08:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:08:20', tmtdew=0.0694, humidity=99.8327, cloud=0.0, wind=10.5174, temperature=13.8277, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:08:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:08:53.263 [DEBUG] [Thread-171150] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:08:53.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:08:53.356 [DEBUG] [Thread-171153] [transport.py] [_log()] starting thread (client mode): 0xa79b6950
2026-04-11T14:08:53.356 [DEBUG] [Thread-171153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:08:53.373 [DEBUG] [Thread-171153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:08:53.373 [INFO] [Thread-171153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:08:53.381 [DEBUG] [Thread-171153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:08:53.381 [DEBUG] [Thread-171153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:08:53.381 [DEBUG] [Thread-171153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:08:53.381 [DEBUG] [Thread-171153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] client lang: <none>
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] server lang: <none>
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] kex follows: False
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] Compression: none
2026-04-11T14:08:53.382 [DEBUG] [Thread-171153] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:08:53.440 [DEBUG] [Thread-171153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:08:53.441 [DEBUG] [Thread-171153] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:08:53.441 [DEBUG] [Thread-171153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:08:53.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:08:53.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:08:53.496 [DEBUG] [Thread-171153] [transport.py] [_log()] userauth is OK
2026-04-11T14:08:53.496 [DEBUG] [Thread-171153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:08:53.497 [DEBUG] [Thread-171153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:08:53.497 [DEBUG] [Thread-171153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:08:53.497 [DEBUG] [Thread-171153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:08:53.519 [INFO] [Thread-171153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:08:53.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:08:53.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:08:54.397 [DEBUG] [Thread-171153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:08:54.398 [DEBUG] [Thread-171153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:08:54.446 [DEBUG] [Thread-171153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:08:54.447 [DEBUG] [Thread-171153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:08:54.456 [DEBUG] [Thread-171153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:08:54.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:08: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')
2026-04-11T14:08:54.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-04-11T14:08:54.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:08:54.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:08:54.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:08:54.493 [DEBUG] [Thread-171153] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:09:06.405 [DEBUG] [Thread-171155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:07.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:07.853 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:09.462 [DEBUG] [Thread-171156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:21.466 [DEBUG] [Thread-171157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:24.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:09:24.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:09:24.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-04-11T14:09:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 8, 55), 0.02967, 99.7664, 0.0, 9.22968, 13.8774, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:09:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:08:55
2026-04-11T14:09:26.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:09:26.441 [DEBUG] [Thread-171158] [transport.py] [_log()] starting thread (client mode): 0xa79500d0
2026-04-11T14:09:26.441 [DEBUG] [Thread-171158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:09:26.461 [DEBUG] [Thread-171158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:09:26.461 [INFO] [Thread-171158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:09:26.465 [DEBUG] [Thread-171158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:09:26.465 [DEBUG] [Thread-171158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:09:26.465 [DEBUG] [Thread-171158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:09:26.465 [DEBUG] [Thread-171158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] client lang: <none>
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] server lang: <none>
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] kex follows: False
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:09:26.466 [DEBUG] [Thread-171158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:09:26.467 [DEBUG] [Thread-171158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:09:26.467 [DEBUG] [Thread-171158] [transport.py] [_log()] Compression: none
2026-04-11T14:09:26.467 [DEBUG] [Thread-171158] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:09:26.484 [DEBUG] [Thread-171158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:09:26.485 [DEBUG] [Thread-171158] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:09:26.485 [DEBUG] [Thread-171158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:09:26.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:09:26.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:09:26.488 [DEBUG] [Thread-171158] [transport.py] [_log()] userauth is OK
2026-04-11T14:09:26.488 [DEBUG] [Thread-171158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:09:26.488 [DEBUG] [Thread-171158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:09:26.489 [DEBUG] [Thread-171158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:09:26.489 [DEBUG] [Thread-171158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:09:26.524 [INFO] [Thread-171158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:09:26.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:09:27.160 [DEBUG] [Thread-171158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:09:27.160 [DEBUG] [Thread-171158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:09:27.161 [DEBUG] [Thread-171158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:09:27.201 [DEBUG] [Thread-171158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:09:27.201 [DEBUG] [Thread-171158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:09:27.205 [DEBUG] [Thread-171158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:09:27.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:09:27.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:09:27.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:09:27.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:09:27.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:09:27.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:09:27.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:09:27.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:09:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:09:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.506368 -999.00  +14.20  12.28     96  +13.60 1 3 1 3 1   888    0 0.72 2.90 ----- 14.1 12.3 62.6 14.1 16.8 0.2 16.8 -0.3 16.4 -0.1 16.6 0.7
2026-04-11T14:09:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:09:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:09:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.506368
2026-04-11T14:09:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:09:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:09:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:09:27.232 [DEBUG] [Thread-171158] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:09:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:09:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:09:27.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:08:55', tmtdew=0.02967, humidity=99.7664, cloud=0.0, wind=9.22968, temperature=13.8774, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:09:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:09:27.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:09:27.326 [DEBUG] [Thread-171161] [transport.py] [_log()] starting thread (client mode): 0xa7952fe0
2026-04-11T14:09:27.326 [DEBUG] [Thread-171161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:09:27.341 [DEBUG] [Thread-171161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:09:27.341 [INFO] [Thread-171161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] client lang: <none>
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] server lang: <none>
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] kex follows: False
2026-04-11T14:09:27.349 [DEBUG] [Thread-171161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:09:27.350 [DEBUG] [Thread-171161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:09:27.350 [DEBUG] [Thread-171161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:09:27.350 [DEBUG] [Thread-171161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:09:27.350 [DEBUG] [Thread-171161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:09:27.350 [DEBUG] [Thread-171161] [transport.py] [_log()] Compression: none
2026-04-11T14:09:27.350 [DEBUG] [Thread-171161] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:09:27.410 [DEBUG] [Thread-171161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:09:27.410 [DEBUG] [Thread-171161] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:09:27.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:09:27.411 [DEBUG] [Thread-171161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:09:27.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:09:27.469 [DEBUG] [Thread-171161] [transport.py] [_log()] userauth is OK
2026-04-11T14:09:27.469 [DEBUG] [Thread-171161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:09:27.469 [DEBUG] [Thread-171161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:09:27.469 [DEBUG] [Thread-171161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:09:27.469 [DEBUG] [Thread-171161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:09:27.489 [INFO] [Thread-171161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:09:27.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:09:27.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:09:28.290 [DEBUG] [Thread-171161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:09:28.290 [DEBUG] [Thread-171161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:09:28.338 [DEBUG] [Thread-171161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:09:28.338 [DEBUG] [Thread-171161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:09:28.348 [DEBUG] [Thread-171161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:09:28.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:09:28.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-04-11T14:09:28.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-04-11T14:09:28.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:09:28.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:09:28.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:09:28.386 [DEBUG] [Thread-171161] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:09:36.504 [DEBUG] [Thread-171163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:51.568 [DEBUG] [Thread-171164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:09:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:09:58.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:09:58.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-04-11T14:09:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 9, 31), 0.02703, 99.7833, 0.0, 10.9055, 13.9273, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:09:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:09:31
2026-04-11T14:10:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:10:00.228 [DEBUG] [Thread-171165] [transport.py] [_log()] starting thread (client mode): 0xa79502e0
2026-04-11T14:10:00.228 [DEBUG] [Thread-171165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:10:00.250 [DEBUG] [Thread-171165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:10:00.250 [INFO] [Thread-171165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:10:00.253 [DEBUG] [Thread-171165] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:10:00.253 [DEBUG] [Thread-171165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:10:00.253 [DEBUG] [Thread-171165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] client lang: <none>
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] server lang: <none>
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] kex follows: False
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] Compression: none
2026-04-11T14:10:00.254 [DEBUG] [Thread-171165] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:10:00.272 [DEBUG] [Thread-171165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:10:00.272 [DEBUG] [Thread-171165] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:10:00.273 [DEBUG] [Thread-171165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:10:00.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:10:00.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:10:00.275 [DEBUG] [Thread-171165] [transport.py] [_log()] userauth is OK
2026-04-11T14:10:00.275 [DEBUG] [Thread-171165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:10:00.275 [DEBUG] [Thread-171165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:10:00.276 [DEBUG] [Thread-171165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:10:00.276 [DEBUG] [Thread-171165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:10:00.300 [INFO] [Thread-171165] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:10:00.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:10:00.903 [DEBUG] [Thread-171165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:10:00.904 [DEBUG] [Thread-171165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:10:00.904 [DEBUG] [Thread-171165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:10:00.945 [DEBUG] [Thread-171165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:10:00.945 [DEBUG] [Thread-171165] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:10:00.949 [DEBUG] [Thread-171165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:10:00.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:10:00.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:10:00.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:10:00.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:10:00.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:10:00.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:10:00.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:10:00.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:10:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:10:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.506715 -999.00  +14.10  16.77     95  +13.50 1 3 1 3 1   888    0 0.71 2.95 ----- 13.6 16.8 67.6 18.5 16.9 0.3 16.8 -0.5 16.4 -0.4 16.7 0.4
2026-04-11T14:10:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:10:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:10:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.506715
2026-04-11T14:10:00.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:10:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:10:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:10:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:10:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:10:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:09:31', tmtdew=0.02703, humidity=99.7833, cloud=0.0, wind=10.9055, temperature=13.9273, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:09:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:10:00.977 [DEBUG] [Thread-171165] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:10:01.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:10:01.070 [DEBUG] [Thread-171168] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T14:10:01.071 [DEBUG] [Thread-171168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:10:01.085 [DEBUG] [Thread-171168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:10:01.086 [INFO] [Thread-171168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:10:01.093 [DEBUG] [Thread-171168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:10:01.093 [DEBUG] [Thread-171168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:10:01.093 [DEBUG] [Thread-171168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:10:01.093 [DEBUG] [Thread-171168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] client lang: <none>
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] server lang: <none>
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] kex follows: False
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:10:01.094 [DEBUG] [Thread-171168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:10:01.095 [DEBUG] [Thread-171168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:10:01.095 [DEBUG] [Thread-171168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:10:01.095 [DEBUG] [Thread-171168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:10:01.095 [DEBUG] [Thread-171168] [transport.py] [_log()] Compression: none
2026-04-11T14:10:01.095 [DEBUG] [Thread-171168] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:10:01.155 [DEBUG] [Thread-171168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:10:01.155 [DEBUG] [Thread-171168] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:10:01.156 [DEBUG] [Thread-171168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:10:01.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:10:01.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:10:01.214 [DEBUG] [Thread-171168] [transport.py] [_log()] userauth is OK
2026-04-11T14:10:01.214 [DEBUG] [Thread-171168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:10:01.214 [DEBUG] [Thread-171168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:10:01.214 [DEBUG] [Thread-171168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:10:01.214 [DEBUG] [Thread-171168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:10:01.232 [INFO] [Thread-171168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:10:01.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:10:01.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:10:02.023 [DEBUG] [Thread-171168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:10:02.023 [DEBUG] [Thread-171168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:10:02.071 [DEBUG] [Thread-171168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:10:02.071 [DEBUG] [Thread-171168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:10:02.080 [DEBUG] [Thread-171168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:10:02.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:10:02.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-04-11T14:10:02.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-04-11T14:10:02.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:10:02.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:10:02.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:10:02.118 [DEBUG] [Thread-171168] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:10:06.606 [DEBUG] [Thread-171170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:10:07.993 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:10:07.994 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:10:09.509 [DEBUG] [Thread-171171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:10:21.660 [DEBUG] [Thread-171172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:10:32.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:10:32.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:10:32.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:10:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 10, 6), 0.016725, 99.8496, 0.0, 11.47, 13.9605, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:10:33.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:10:06
2026-04-11T14:10:33.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:10:33.947 [DEBUG] [Thread-171173] [transport.py] [_log()] starting thread (client mode): 0xae5e7310
2026-04-11T14:10:33.947 [DEBUG] [Thread-171173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:10:33.966 [DEBUG] [Thread-171173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:10:33.966 [INFO] [Thread-171173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] client lang: <none>
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] server lang: <none>
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] kex follows: False
2026-04-11T14:10:33.970 [DEBUG] [Thread-171173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:10:33.971 [DEBUG] [Thread-171173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:10:33.971 [DEBUG] [Thread-171173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:10:33.971 [DEBUG] [Thread-171173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:10:33.971 [DEBUG] [Thread-171173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:10:33.971 [DEBUG] [Thread-171173] [transport.py] [_log()] Compression: none
2026-04-11T14:10:33.971 [DEBUG] [Thread-171173] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:10:33.989 [DEBUG] [Thread-171173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:10:33.990 [DEBUG] [Thread-171173] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:10:33.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:10:33.992 [DEBUG] [Thread-171173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:10:33.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:10:33.994 [DEBUG] [Thread-171173] [transport.py] [_log()] userauth is OK
2026-04-11T14:10:33.994 [DEBUG] [Thread-171173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:10:33.994 [DEBUG] [Thread-171173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:10:33.994 [DEBUG] [Thread-171173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:10:33.994 [DEBUG] [Thread-171173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:10:34.032 [INFO] [Thread-171173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:10:34.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:10:36.697 [DEBUG] [Thread-171175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:10:41.921 [DEBUG] [Thread-171173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:10:41.921 [DEBUG] [Thread-171173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:10:41.922 [DEBUG] [Thread-171173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:10:41.962 [DEBUG] [Thread-171173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:10:41.962 [DEBUG] [Thread-171173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:10:41.964 [DEBUG] [Thread-171173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:10:41.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:10:41.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:10:41.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:10:41.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:10:41.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:10:41.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:10:41.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:10:41.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:10:41.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:10:41.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.506715 -999.00  +14.10  16.77     95  +13.50 1 3 1 3 1   888    0 0.71 2.95 ----- 13.6 16.8 67.6 18.5 16.9 0.3 16.8 -0.5 16.4 -0.4 16.7 0.4
2026-04-11T14:10:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:10:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:10:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.506715
2026-04-11T14:10:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:10:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:10:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:10:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:10:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:10:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:10:06', tmtdew=0.016725, humidity=99.8496, cloud=0.0, wind=11.47, temperature=13.9605, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:09:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:10:41.989 [DEBUG] [Thread-171173] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:10:42.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:10:42.081 [DEBUG] [Thread-171177] [transport.py] [_log()] starting thread (client mode): 0xa79530d0
2026-04-11T14:10:42.081 [DEBUG] [Thread-171177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:10:42.096 [DEBUG] [Thread-171177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:10:42.096 [INFO] [Thread-171177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:10:42.107 [DEBUG] [Thread-171177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:10:42.107 [DEBUG] [Thread-171177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:10:42.107 [DEBUG] [Thread-171177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:10:42.107 [DEBUG] [Thread-171177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:42.107 [DEBUG] [Thread-171177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:10:42.107 [DEBUG] [Thread-171177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] client lang: <none>
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] server lang: <none>
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] kex follows: False
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:10:42.108 [DEBUG] [Thread-171177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:10:42.109 [DEBUG] [Thread-171177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:10:42.109 [DEBUG] [Thread-171177] [transport.py] [_log()] Compression: none
2026-04-11T14:10:42.109 [DEBUG] [Thread-171177] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:10:42.165 [DEBUG] [Thread-171177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:10:42.166 [DEBUG] [Thread-171177] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:10:42.166 [DEBUG] [Thread-171177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:10:42.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:10:42.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:10:42.228 [DEBUG] [Thread-171177] [transport.py] [_log()] userauth is OK
2026-04-11T14:10:42.228 [DEBUG] [Thread-171177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:10:42.228 [DEBUG] [Thread-171177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:10:42.229 [DEBUG] [Thread-171177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:10:42.229 [DEBUG] [Thread-171177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:10:42.251 [INFO] [Thread-171177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:10:42.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:10:42.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:10:43.066 [DEBUG] [Thread-171177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:10:43.067 [DEBUG] [Thread-171177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:10:43.115 [DEBUG] [Thread-171177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:10:43.115 [DEBUG] [Thread-171177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:10:43.124 [DEBUG] [Thread-171177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:10:43.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:10:43.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:10:43.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:10:43.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:10:43.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:10:43.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:10:43.157 [DEBUG] [Thread-171177] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:10:51.730 [DEBUG] [Thread-171179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:06.785 [DEBUG] [Thread-171180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:08.134 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:08.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:09.547 [DEBUG] [Thread-171181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:13.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:11:13.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:11:13.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-04-11T14:11:14.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 10, 42), 0.03861, 99.6657, 0.0, 14.9623, 14.6202, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:11:14.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:10:42
2026-04-11T14:11:14.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:11:15.009 [DEBUG] [Thread-171182] [transport.py] [_log()] starting thread (client mode): 0xae508430
2026-04-11T14:11:15.010 [DEBUG] [Thread-171182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:11:15.026 [DEBUG] [Thread-171182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:11:15.026 [INFO] [Thread-171182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] client lang: <none>
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] server lang: <none>
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] kex follows: False
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:11:15.029 [DEBUG] [Thread-171182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:11:15.030 [DEBUG] [Thread-171182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:11:15.030 [DEBUG] [Thread-171182] [transport.py] [_log()] Compression: none
2026-04-11T14:11:15.030 [DEBUG] [Thread-171182] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:11:15.046 [DEBUG] [Thread-171182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:11:15.046 [DEBUG] [Thread-171182] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:11:15.046 [DEBUG] [Thread-171182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:11:15.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:11:15.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:11:15.047 [DEBUG] [Thread-171182] [transport.py] [_log()] userauth is OK
2026-04-11T14:11:15.047 [DEBUG] [Thread-171182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:11:15.047 [DEBUG] [Thread-171182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:11:15.047 [DEBUG] [Thread-171182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:11:15.047 [DEBUG] [Thread-171182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:11:15.064 [INFO] [Thread-171182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:11:15.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:11:15.751 [DEBUG] [Thread-171182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:11:15.752 [DEBUG] [Thread-171182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:11:15.752 [DEBUG] [Thread-171182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:11:15.793 [DEBUG] [Thread-171182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:11:15.793 [DEBUG] [Thread-171182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:11:15.796 [DEBUG] [Thread-171182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:11:15.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:11:15.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:11:15.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:11:15.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:11:15.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:11:15.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:11:15.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:11:15.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:11:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:11:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.507062 -999.00  +14.10  12.56     95  +13.40 1 3 1 3 1   888    0 0.71 2.99 ----- 12.2 12.6 64.4 13.8 16.8 0.3 16.8 -0.3 16.3 -1.0 16.6 0.5
2026-04-11T14:11:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:11:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:11:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.507062
2026-04-11T14:11:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:11:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:11:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:11:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:11:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:11:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:10:42', tmtdew=0.03861, humidity=99.6657, cloud=0.0, wind=14.9623, temperature=14.6202, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:10:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:11:15.824 [DEBUG] [Thread-171182] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:11:15.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:11:15.917 [DEBUG] [Thread-171185] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-11T14:11:15.917 [DEBUG] [Thread-171185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:11:15.932 [DEBUG] [Thread-171185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:11:15.933 [INFO] [Thread-171185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:11:15.940 [DEBUG] [Thread-171185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:15.941 [DEBUG] [Thread-171185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] client lang: <none>
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] server lang: <none>
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] kex follows: False
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] Compression: none
2026-04-11T14:11:15.942 [DEBUG] [Thread-171185] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:11:15.998 [DEBUG] [Thread-171185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:11:15.999 [DEBUG] [Thread-171185] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:11:15.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:11:16.000 [DEBUG] [Thread-171185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:11:16.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:11:16.054 [DEBUG] [Thread-171185] [transport.py] [_log()] userauth is OK
2026-04-11T14:11:16.054 [DEBUG] [Thread-171185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:11:16.055 [DEBUG] [Thread-171185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:11:16.055 [DEBUG] [Thread-171185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:11:16.055 [DEBUG] [Thread-171185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:11:16.073 [INFO] [Thread-171185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:11:16.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:11:16.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:11:16.898 [DEBUG] [Thread-171185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:11:16.898 [DEBUG] [Thread-171185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:11:16.946 [DEBUG] [Thread-171185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:11:16.946 [DEBUG] [Thread-171185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:11:16.956 [DEBUG] [Thread-171185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:11:16.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:11: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-04-11T14:11:16.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-04-11T14:11:16.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:11:16.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:11:16.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:11:16.993 [DEBUG] [Thread-171185] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:11:21.820 [DEBUG] [Thread-171187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:36.873 [DEBUG] [Thread-171188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:11:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:11:47.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:11:47.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:11:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 11, 17), 0.07444, 99.7997, 0.0, 13.4986, 14.2598, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:11:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:11:17
2026-04-11T14:11:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:11:48.846 [DEBUG] [Thread-171189] [transport.py] [_log()] starting thread (client mode): 0xae50b760
2026-04-11T14:11:48.846 [DEBUG] [Thread-171189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:11:48.866 [DEBUG] [Thread-171189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:11:48.867 [INFO] [Thread-171189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] client lang: <none>
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] server lang: <none>
2026-04-11T14:11:48.870 [DEBUG] [Thread-171189] [transport.py] [_log()] kex follows: False
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] Compression: none
2026-04-11T14:11:48.871 [DEBUG] [Thread-171189] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:11:48.890 [DEBUG] [Thread-171189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:11:48.890 [DEBUG] [Thread-171189] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:11:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:11:48.892 [DEBUG] [Thread-171189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:11:48.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:11:48.893 [DEBUG] [Thread-171189] [transport.py] [_log()] userauth is OK
2026-04-11T14:11:48.894 [DEBUG] [Thread-171189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:11:48.894 [DEBUG] [Thread-171189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:11:48.894 [DEBUG] [Thread-171189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:11:48.894 [DEBUG] [Thread-171189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:11:48.916 [INFO] [Thread-171189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:11:48.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:11:49.549 [DEBUG] [Thread-171189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:11:49.550 [DEBUG] [Thread-171189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:11:49.550 [DEBUG] [Thread-171189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:11:49.591 [DEBUG] [Thread-171189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:11:49.591 [DEBUG] [Thread-171189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:11:49.595 [DEBUG] [Thread-171189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:11:49.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:11:49.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:11:49.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:11:49.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:11:49.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:11:49.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:11:49.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:11:49.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:11:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:11:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.508104 -999.00  +14.20  15.59     95  +13.50 1 3 1 3 1   888    0 0.73 3.39 ----- 16.1 15.6 54.2 18.6 16.9 -0.0 16.8 0.0 16.4 -1.1 16.7 0.7
2026-04-11T14:11:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:11:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:11:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.508104
2026-04-11T14:11:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:11:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:11:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:11:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:11:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:11:49.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:11:17', tmtdew=0.07444, humidity=99.7997, cloud=0.0, wind=13.4986, temperature=14.2598, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:11:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:11:49.620 [DEBUG] [Thread-171189] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:11:49.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:11:49.718 [DEBUG] [Thread-171192] [transport.py] [_log()] starting thread (client mode): 0xae50b670
2026-04-11T14:11:49.718 [DEBUG] [Thread-171192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:11:49.732 [DEBUG] [Thread-171192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:11:49.732 [INFO] [Thread-171192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:11:49.740 [DEBUG] [Thread-171192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:11:49.740 [DEBUG] [Thread-171192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:11:49.740 [DEBUG] [Thread-171192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:11:49.740 [DEBUG] [Thread-171192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] client lang: <none>
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] server lang: <none>
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] kex follows: False
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] Compression: none
2026-04-11T14:11:49.741 [DEBUG] [Thread-171192] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:11:49.803 [DEBUG] [Thread-171192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:11:49.803 [DEBUG] [Thread-171192] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:11:49.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:11:49.805 [DEBUG] [Thread-171192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:11:49.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:11:49.863 [DEBUG] [Thread-171192] [transport.py] [_log()] userauth is OK
2026-04-11T14:11:49.863 [DEBUG] [Thread-171192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:11:49.863 [DEBUG] [Thread-171192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:11:49.863 [DEBUG] [Thread-171192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:11:49.863 [DEBUG] [Thread-171192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:11:49.882 [INFO] [Thread-171192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:11:49.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:11:49.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:11:50.748 [DEBUG] [Thread-171192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:11:50.748 [DEBUG] [Thread-171192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:11:50.796 [DEBUG] [Thread-171192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:11:50.796 [DEBUG] [Thread-171192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:11:50.804 [DEBUG] [Thread-171192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:11:50.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:11:50.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-04-11T14:11:50.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:11:50.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:11:50.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:11:50.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:11:50.838 [DEBUG] [Thread-171192] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:11:51.911 [DEBUG] [Thread-171194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:06.965 [DEBUG] [Thread-171195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:08.276 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:08.278 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:09.588 [DEBUG] [Thread-171196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:20.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:12:20.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:12:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:12:22.004 [DEBUG] [Thread-171197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 11, 52), 0.04377, 99.6322, 0.0, 11.1521, 14.7195, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:11:52
2026-04-11T14:12:22.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:12:22.683 [DEBUG] [Thread-171198] [transport.py] [_log()] starting thread (client mode): 0xae50b1f0
2026-04-11T14:12:22.683 [DEBUG] [Thread-171198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:12:22.701 [DEBUG] [Thread-171198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:12:22.701 [INFO] [Thread-171198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:12:22.703 [DEBUG] [Thread-171198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:12:22.703 [DEBUG] [Thread-171198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] client lang: <none>
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] server lang: <none>
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] kex follows: False
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] Compression: none
2026-04-11T14:12:22.704 [DEBUG] [Thread-171198] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:12:22.716 [DEBUG] [Thread-171198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:12:22.717 [DEBUG] [Thread-171198] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:12:22.717 [DEBUG] [Thread-171198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:12:22.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:12:22.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:12:22.718 [DEBUG] [Thread-171198] [transport.py] [_log()] userauth is OK
2026-04-11T14:12:22.719 [DEBUG] [Thread-171198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:12:22.719 [DEBUG] [Thread-171198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:12:22.719 [DEBUG] [Thread-171198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:12:22.719 [DEBUG] [Thread-171198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:12:22.737 [INFO] [Thread-171198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:12:22.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:12:23.363 [DEBUG] [Thread-171198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:12:23.363 [DEBUG] [Thread-171198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:12:23.364 [DEBUG] [Thread-171198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:12:23.404 [DEBUG] [Thread-171198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:12:23.404 [DEBUG] [Thread-171198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:12:23.407 [DEBUG] [Thread-171198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:12:23.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:12:23.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:12:23.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:12:23.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:12:23.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:12:23.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:12:23.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:12:23.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:12:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:12:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.508451 -999.00  +14.10  16.12     95  +13.40 1 3 1 3 1   888    0 0.72 3.66 ----- 15.1 16.1 53.6 18.4 16.9 0.2 16.8 -0.5 16.4 -0.7 16.7 0.7
2026-04-11T14:12:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:12:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:12:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.508451
2026-04-11T14:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:12:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:11:52', tmtdew=0.04377, humidity=99.6322, cloud=0.0, wind=11.1521, temperature=14.7195, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:12:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:12:23.429 [DEBUG] [Thread-171198] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:12:23.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:12:23.522 [DEBUG] [Thread-171201] [transport.py] [_log()] starting thread (client mode): 0xb0febac0
2026-04-11T14:12:23.522 [DEBUG] [Thread-171201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:12:23.536 [DEBUG] [Thread-171201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:12:23.537 [INFO] [Thread-171201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:23.545 [DEBUG] [Thread-171201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] client lang: <none>
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] server lang: <none>
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] kex follows: False
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:12:23.546 [DEBUG] [Thread-171201] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:12:23.547 [DEBUG] [Thread-171201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:12:23.547 [DEBUG] [Thread-171201] [transport.py] [_log()] Compression: none
2026-04-11T14:12:23.547 [DEBUG] [Thread-171201] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:12:23.603 [DEBUG] [Thread-171201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:12:23.603 [DEBUG] [Thread-171201] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:12:23.604 [DEBUG] [Thread-171201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:12:23.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:12:23.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:12:23.659 [DEBUG] [Thread-171201] [transport.py] [_log()] userauth is OK
2026-04-11T14:12:23.659 [DEBUG] [Thread-171201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:12:23.659 [DEBUG] [Thread-171201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:12:23.660 [DEBUG] [Thread-171201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:12:23.660 [DEBUG] [Thread-171201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:12:23.678 [INFO] [Thread-171201] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:12:23.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:12:23.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:12:24.519 [DEBUG] [Thread-171201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:12:24.519 [DEBUG] [Thread-171201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:12:24.567 [DEBUG] [Thread-171201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:12:24.567 [DEBUG] [Thread-171201] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:12:24.577 [DEBUG] [Thread-171201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:12:24.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:12:24.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:12:24.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-04-11T14:12:24.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:12:24.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:12:24.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:12:24.614 [DEBUG] [Thread-171201] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:12:37.046 [DEBUG] [Thread-171203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:52.105 [DEBUG] [Thread-171204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:12:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:12:54.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:12:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:12:55.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 12, 28), 0.066775, 99.8492, 0.0, 12.2468, 14.1934, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:12:55.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:12:28
2026-04-11T14:12:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:12:56.468 [DEBUG] [Thread-171205] [transport.py] [_log()] starting thread (client mode): 0xa7953c10
2026-04-11T14:12:56.468 [DEBUG] [Thread-171205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:12:56.484 [DEBUG] [Thread-171205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:12:56.484 [INFO] [Thread-171205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:12:56.487 [DEBUG] [Thread-171205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] client lang: <none>
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] server lang: <none>
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] kex follows: False
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:12:56.488 [DEBUG] [Thread-171205] [transport.py] [_log()] Compression: none
2026-04-11T14:12:56.489 [DEBUG] [Thread-171205] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:12:56.507 [DEBUG] [Thread-171205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:12:56.507 [DEBUG] [Thread-171205] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:12:56.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:12:56.508 [DEBUG] [Thread-171205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:12:56.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:12:56.510 [DEBUG] [Thread-171205] [transport.py] [_log()] userauth is OK
2026-04-11T14:12:56.510 [DEBUG] [Thread-171205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:12:56.511 [DEBUG] [Thread-171205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:12:56.511 [DEBUG] [Thread-171205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:12:56.511 [DEBUG] [Thread-171205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:12:56.546 [INFO] [Thread-171205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:12:56.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:12:57.156 [DEBUG] [Thread-171205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:12:57.156 [DEBUG] [Thread-171205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:12:57.157 [DEBUG] [Thread-171205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:12:57.197 [DEBUG] [Thread-171205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:12:57.197 [DEBUG] [Thread-171205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:12:57.201 [DEBUG] [Thread-171205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:12:57.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:12:57.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:12:57.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:12:57.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:12:57.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:12:57.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:12:57.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:12:57.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:12:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:12:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.508798 -999.00  +14.00  13.13     95  +13.30 1 3 1 3 1   888    0 0.74 3.77 ----- 14.3 13.1 42.4 17.1 16.9 0.1 16.8 -0.2 16.4 -0.3 16.7 0.6
2026-04-11T14:12:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:12:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:12:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.508798
2026-04-11T14:12:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:12:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:12:57.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:12:57.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:12:57.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:12:57.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:12:28', tmtdew=0.066775, humidity=99.8492, cloud=0.0, wind=12.2468, temperature=14.1934, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:12:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:12:57.224 [DEBUG] [Thread-171205] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:12:57.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:12:57.317 [DEBUG] [Thread-171208] [transport.py] [_log()] starting thread (client mode): 0xa7953ca0
2026-04-11T14:12:57.317 [DEBUG] [Thread-171208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:12:57.332 [DEBUG] [Thread-171208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:12:57.332 [INFO] [Thread-171208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:12:57.339 [DEBUG] [Thread-171208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:12:57.339 [DEBUG] [Thread-171208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:12:57.339 [DEBUG] [Thread-171208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:12:57.339 [DEBUG] [Thread-171208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] client lang: <none>
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] server lang: <none>
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] kex follows: False
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] Compression: none
2026-04-11T14:12:57.340 [DEBUG] [Thread-171208] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:12:57.399 [DEBUG] [Thread-171208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:12:57.400 [DEBUG] [Thread-171208] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:12:57.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:12:57.401 [DEBUG] [Thread-171208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:12:57.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:12:57.455 [DEBUG] [Thread-171208] [transport.py] [_log()] userauth is OK
2026-04-11T14:12:57.456 [DEBUG] [Thread-171208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:12:57.456 [DEBUG] [Thread-171208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:12:57.456 [DEBUG] [Thread-171208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:12:57.456 [DEBUG] [Thread-171208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:12:57.475 [INFO] [Thread-171208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:12:57.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:12:57.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:12:58.290 [DEBUG] [Thread-171208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:12:58.290 [DEBUG] [Thread-171208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:12:58.338 [DEBUG] [Thread-171208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:12:58.338 [DEBUG] [Thread-171208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:12:58.347 [DEBUG] [Thread-171208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:12:58.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:12:58.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:12:58.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:12:58.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:12:58.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:12:58.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:12:58.383 [DEBUG] [Thread-171208] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:13:07.143 [DEBUG] [Thread-171210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:13:08.418 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:13:08.419 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:13:09.622 [DEBUG] [Thread-171211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:13:22.196 [DEBUG] [Thread-171212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:13:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:13:28.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:13:28.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-04-11T14:13:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 13, 3), 0.06933, 99.8326, 0.0, 13.2347, 14.2431, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:13:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:13:03
2026-04-11T14:13:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:13:30.206 [DEBUG] [Thread-171213] [transport.py] [_log()] starting thread (client mode): 0xb39c7940
2026-04-11T14:13:30.206 [DEBUG] [Thread-171213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:13:30.224 [DEBUG] [Thread-171213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:13:30.225 [INFO] [Thread-171213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] client lang: <none>
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] server lang: <none>
2026-04-11T14:13:30.228 [DEBUG] [Thread-171213] [transport.py] [_log()] kex follows: False
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] Compression: none
2026-04-11T14:13:30.229 [DEBUG] [Thread-171213] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:13:30.247 [DEBUG] [Thread-171213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:13:30.248 [DEBUG] [Thread-171213] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:13:30.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:13:30.249 [DEBUG] [Thread-171213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:13:30.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:13:30.252 [DEBUG] [Thread-171213] [transport.py] [_log()] userauth is OK
2026-04-11T14:13:30.252 [DEBUG] [Thread-171213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:13:30.252 [DEBUG] [Thread-171213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:13:30.252 [DEBUG] [Thread-171213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:13:30.252 [DEBUG] [Thread-171213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:13:30.287 [INFO] [Thread-171213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:13:30.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:13:30.951 [DEBUG] [Thread-171213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:13:30.952 [DEBUG] [Thread-171213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:13:30.952 [DEBUG] [Thread-171213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:13:30.992 [DEBUG] [Thread-171213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:13:30.992 [DEBUG] [Thread-171213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:13:30.996 [DEBUG] [Thread-171213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:13:31.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:13:31.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:13:31.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:13:31.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:13:31.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:13:31.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:13:31.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:13:31.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:13:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:13:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.509145 -999.00  +14.10  12.65     95  +13.40 1 3 1 3 1   888    0 0.74 3.63 ----- 11.0 12.7 40.4 18.1 16.9 0.5 16.9 -0.1 16.4 -0.2 16.7 0.4
2026-04-11T14:13:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:13:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:13:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.509145
2026-04-11T14:13:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:13:31.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:13:31.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:13:31.023 [DEBUG] [Thread-171213] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:13:31.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:13:31.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:13:31.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:13:03', tmtdew=0.06933, humidity=99.8326, cloud=0.0, wind=13.2347, temperature=14.2431, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:13:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:13:31.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:13:31.111 [DEBUG] [Thread-171216] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-11T14:13:31.111 [DEBUG] [Thread-171216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:13:31.127 [DEBUG] [Thread-171216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:13:31.128 [INFO] [Thread-171216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:13:31.135 [DEBUG] [Thread-171216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:13:31.136 [DEBUG] [Thread-171216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:13:31.136 [DEBUG] [Thread-171216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:13:31.136 [DEBUG] [Thread-171216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:13:31.136 [DEBUG] [Thread-171216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:13:31.136 [DEBUG] [Thread-171216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:13:31.136 [DEBUG] [Thread-171216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] client lang: <none>
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] server lang: <none>
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] kex follows: False
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] Compression: none
2026-04-11T14:13:31.137 [DEBUG] [Thread-171216] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:13:31.195 [DEBUG] [Thread-171216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:13:31.196 [DEBUG] [Thread-171216] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:13:31.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:13:31.197 [DEBUG] [Thread-171216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:13:31.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:13:31.251 [DEBUG] [Thread-171216] [transport.py] [_log()] userauth is OK
2026-04-11T14:13:31.252 [DEBUG] [Thread-171216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:13:31.252 [DEBUG] [Thread-171216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:13:31.252 [DEBUG] [Thread-171216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:13:31.252 [DEBUG] [Thread-171216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:13:31.271 [INFO] [Thread-171216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:13:31.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:13:31.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:13:32.106 [DEBUG] [Thread-171216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:13:32.106 [DEBUG] [Thread-171216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:13:32.153 [DEBUG] [Thread-171216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:13:32.154 [DEBUG] [Thread-171216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:13:32.163 [DEBUG] [Thread-171216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:13:32.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:13:32.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-04-11T14:13:32.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-04-11T14:13:32.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:13:32.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:13:32.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:13:32.197 [DEBUG] [Thread-171216] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:13:37.233 [DEBUG] [Thread-171218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:13:52.286 [DEBUG] [Thread-171219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:14:02.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:14:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:14:03.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 13, 39), 0.05932, 99.5325, 0.0, 13.6922, 14.5867, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:14:03.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:13:39
2026-04-11T14:14:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:14:04.112 [DEBUG] [Thread-171220] [transport.py] [_log()] starting thread (client mode): 0xae50a9e0
2026-04-11T14:14:04.112 [DEBUG] [Thread-171220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:14:04.133 [DEBUG] [Thread-171220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:14:04.133 [INFO] [Thread-171220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] client lang: <none>
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] server lang: <none>
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] kex follows: False
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] Compression: none
2026-04-11T14:14:04.136 [DEBUG] [Thread-171220] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:14:04.154 [DEBUG] [Thread-171220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:14:04.154 [DEBUG] [Thread-171220] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:14:04.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:14:04.155 [DEBUG] [Thread-171220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:14:04.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:14:04.157 [DEBUG] [Thread-171220] [transport.py] [_log()] userauth is OK
2026-04-11T14:14:04.158 [DEBUG] [Thread-171220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:14:04.158 [DEBUG] [Thread-171220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:14:04.158 [DEBUG] [Thread-171220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:14:04.158 [DEBUG] [Thread-171220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:14:04.174 [INFO] [Thread-171220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:14:04.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:14:04.809 [DEBUG] [Thread-171220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:14:04.809 [DEBUG] [Thread-171220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:14:04.810 [DEBUG] [Thread-171220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:14:04.850 [DEBUG] [Thread-171220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:14:04.850 [DEBUG] [Thread-171220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:14:04.853 [DEBUG] [Thread-171220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:14:04.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:14:04.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:14:04.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:14:04.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:14:04.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:14:04.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:14:04.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:14:04.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:14:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:14:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.509493 -999.00  +14.10  14.31     95  +13.40 1 3 1 3 1   888    0 0.74 3.67 ----- 14.9 14.3 61.2 16.6 16.9 -0.0 16.9 -0.1 16.4 -0.2 16.7 0.6
2026-04-11T14:14:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:14:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:14:04.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.509493
2026-04-11T14:14:04.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:14:04.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:14:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:14:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:14:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:14:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:13:39', tmtdew=0.05932, humidity=99.5325, cloud=0.0, wind=13.6922, temperature=14.5867, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:13:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:14:04.879 [DEBUG] [Thread-171220] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:14:04.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:14:04.976 [DEBUG] [Thread-171223] [transport.py] [_log()] starting thread (client mode): 0xb39c7b20
2026-04-11T14:14:04.976 [DEBUG] [Thread-171223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:14:04.991 [DEBUG] [Thread-171223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:14:04.991 [INFO] [Thread-171223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:04.999 [DEBUG] [Thread-171223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] client lang: <none>
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] server lang: <none>
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] kex follows: False
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] Compression: none
2026-04-11T14:14:05.000 [DEBUG] [Thread-171223] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:14:05.063 [DEBUG] [Thread-171223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:14:05.063 [DEBUG] [Thread-171223] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:14:05.064 [DEBUG] [Thread-171223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:14:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:14:05.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:14:05.119 [DEBUG] [Thread-171223] [transport.py] [_log()] userauth is OK
2026-04-11T14:14:05.120 [DEBUG] [Thread-171223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:14:05.120 [DEBUG] [Thread-171223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:14:05.120 [DEBUG] [Thread-171223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:14:05.120 [DEBUG] [Thread-171223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:14:05.142 [INFO] [Thread-171223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:14:05.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:14:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:14:05.950 [DEBUG] [Thread-171223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:14:05.950 [DEBUG] [Thread-171223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:14:05.998 [DEBUG] [Thread-171223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:14:05.998 [DEBUG] [Thread-171223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:14:06.008 [DEBUG] [Thread-171223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:14:06.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:14:06.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-04-11T14:14:06.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-04-11T14:14:06.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:14:06.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:14:06.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:14:06.044 [DEBUG] [Thread-171223] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:14:07.325 [DEBUG] [Thread-171225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:08.562 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:08.563 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:09.660 [DEBUG] [Thread-171226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:22.381 [DEBUG] [Thread-171227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:36.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:14:36.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:14:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:14:37.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 14, 14), 0.07194, 99.8159, 0.0, 10.2175, 14.0433, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:14:37.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:14:14
2026-04-11T14:14:37.418 [DEBUG] [Thread-171228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:14:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:14:37.892 [DEBUG] [Thread-171229] [transport.py] [_log()] starting thread (client mode): 0xae5b18a0
2026-04-11T14:14:37.892 [DEBUG] [Thread-171229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:14:37.912 [DEBUG] [Thread-171229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:14:37.912 [INFO] [Thread-171229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] client lang: <none>
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] server lang: <none>
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] kex follows: False
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:14:37.915 [DEBUG] [Thread-171229] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:14:37.916 [DEBUG] [Thread-171229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:14:37.916 [DEBUG] [Thread-171229] [transport.py] [_log()] Compression: none
2026-04-11T14:14:37.916 [DEBUG] [Thread-171229] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:14:37.932 [DEBUG] [Thread-171229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:14:37.933 [DEBUG] [Thread-171229] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:14:37.933 [DEBUG] [Thread-171229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:14:37.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:14:37.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:14:37.935 [DEBUG] [Thread-171229] [transport.py] [_log()] userauth is OK
2026-04-11T14:14:37.935 [DEBUG] [Thread-171229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:14:37.935 [DEBUG] [Thread-171229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:14:37.936 [DEBUG] [Thread-171229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:14:37.936 [DEBUG] [Thread-171229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:14:37.971 [INFO] [Thread-171229] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:14:37.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:14:38.615 [DEBUG] [Thread-171229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:14:38.615 [DEBUG] [Thread-171229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:14:38.616 [DEBUG] [Thread-171229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:14:38.656 [DEBUG] [Thread-171229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:14:38.656 [DEBUG] [Thread-171229] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:14:38.660 [DEBUG] [Thread-171229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:14:38.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:14:38.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:14:38.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:14:38.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:14:38.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:14:38.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:14:38.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:14:38.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:14:38.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:14:38.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.509840 -999.00  +14.20  18.24     95  +13.50 1 3 1 3 1   888    0 0.74 3.45 ----- 16.7 18.2 60.4 19.1 16.9 0.1 16.9 -0.7 16.5 -0.3 16.8 0.6
2026-04-11T14:14:38.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:14:38.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:14:38.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.509840
2026-04-11T14:14:38.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:14:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:14:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:14:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:14:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:14:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:14:14', tmtdew=0.07194, humidity=99.8159, cloud=0.0, wind=10.2175, temperature=14.0433, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:14:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:14:38.688 [DEBUG] [Thread-171229] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:14:38.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:14:38.782 [DEBUG] [Thread-171232] [transport.py] [_log()] starting thread (client mode): 0xae509f30
2026-04-11T14:14:38.782 [DEBUG] [Thread-171232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:14:38.798 [DEBUG] [Thread-171232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:14:38.798 [INFO] [Thread-171232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:38.807 [DEBUG] [Thread-171232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] client lang: <none>
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] server lang: <none>
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] kex follows: False
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] Compression: none
2026-04-11T14:14:38.808 [DEBUG] [Thread-171232] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:14:38.864 [DEBUG] [Thread-171232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:14:38.865 [DEBUG] [Thread-171232] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:14:38.866 [DEBUG] [Thread-171232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:14:38.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:14:38.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:14:38.922 [DEBUG] [Thread-171232] [transport.py] [_log()] userauth is OK
2026-04-11T14:14:38.922 [DEBUG] [Thread-171232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:14:38.922 [DEBUG] [Thread-171232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:14:38.922 [DEBUG] [Thread-171232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:14:38.922 [DEBUG] [Thread-171232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:14:38.936 [INFO] [Thread-171232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:14:38.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:14:38.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:14:39.776 [DEBUG] [Thread-171232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:14:39.776 [DEBUG] [Thread-171232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:14:39.824 [DEBUG] [Thread-171232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:14:39.824 [DEBUG] [Thread-171232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:14:39.833 [DEBUG] [Thread-171232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:14:39.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:14:39.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-04-11T14:14:39.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:14:39.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:14:39.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:14:39.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:14:39.869 [DEBUG] [Thread-171232] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:14:52.456 [DEBUG] [Thread-171234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:07.505 [DEBUG] [Thread-171235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:08.714 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:08.716 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:09.691 [DEBUG] [Thread-171236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:15:09.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:15:09.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-04-11T14:15:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 14, 49), 0.06963, 99.4667, 0.0, 11.2932, 14.1892, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:15:11.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:14:49
2026-04-11T14:15:11.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:15:11.673 [DEBUG] [Thread-171237] [transport.py] [_log()] starting thread (client mode): 0xae509720
2026-04-11T14:15:11.673 [DEBUG] [Thread-171237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:15:11.693 [DEBUG] [Thread-171237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:15:11.693 [INFO] [Thread-171237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] client lang: <none>
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] server lang: <none>
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] kex follows: False
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] Compression: none
2026-04-11T14:15:11.697 [DEBUG] [Thread-171237] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:15:11.713 [DEBUG] [Thread-171237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:15:11.714 [DEBUG] [Thread-171237] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:15:11.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:15:11.715 [DEBUG] [Thread-171237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:15:11.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:15:11.717 [DEBUG] [Thread-171237] [transport.py] [_log()] userauth is OK
2026-04-11T14:15:11.717 [DEBUG] [Thread-171237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:15:11.717 [DEBUG] [Thread-171237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:15:11.717 [DEBUG] [Thread-171237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:15:11.717 [DEBUG] [Thread-171237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:15:11.743 [INFO] [Thread-171237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:15:11.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:15:18.759 [DEBUG] [Thread-171237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:15:18.760 [DEBUG] [Thread-171237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:15:18.760 [DEBUG] [Thread-171237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:15:18.800 [DEBUG] [Thread-171237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:15:18.800 [DEBUG] [Thread-171237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:15:18.804 [DEBUG] [Thread-171237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:15:18.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:15:18.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:15:18.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:15:18.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:15:18.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:15:18.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:15:18.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:15:18.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:15:18.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:15:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.509840 -999.00  +14.20  18.24     95  +13.50 1 3 1 3 1   888    0 0.74 3.45 ----- 16.7 18.2 60.4 19.1 16.9 0.1 16.9 -0.7 16.5 -0.3 16.8 0.6
2026-04-11T14:15:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:15:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:15:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.509840
2026-04-11T14:15:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:15:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:15:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:15:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:15:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:15:18.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:14:49', tmtdew=0.06963, humidity=99.4667, cloud=0.0, wind=11.2932, temperature=14.1892, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:14:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:15:18.925 [DEBUG] [Thread-171237] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:15:19.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:15:19.019 [DEBUG] [Thread-171240] [transport.py] [_log()] starting thread (client mode): 0xae50a380
2026-04-11T14:15:19.019 [DEBUG] [Thread-171240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:15:19.034 [DEBUG] [Thread-171240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:15:19.034 [INFO] [Thread-171240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:15:19.042 [DEBUG] [Thread-171240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:15:19.042 [DEBUG] [Thread-171240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:15:19.043 [DEBUG] [Thread-171240] [transport.py] [_log()] client lang: <none>
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] server lang: <none>
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] kex follows: False
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] Compression: none
2026-04-11T14:15:19.044 [DEBUG] [Thread-171240] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:15:19.100 [DEBUG] [Thread-171240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:15:19.101 [DEBUG] [Thread-171240] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:15:19.101 [DEBUG] [Thread-171240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:15:19.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:15:19.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:15:19.157 [DEBUG] [Thread-171240] [transport.py] [_log()] userauth is OK
2026-04-11T14:15:19.157 [DEBUG] [Thread-171240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:15:19.158 [DEBUG] [Thread-171240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:15:19.158 [DEBUG] [Thread-171240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:15:19.158 [DEBUG] [Thread-171240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:15:19.176 [INFO] [Thread-171240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:15:19.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:15:19.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:15:20.016 [DEBUG] [Thread-171240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:15:20.016 [DEBUG] [Thread-171240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:15:20.065 [DEBUG] [Thread-171240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:15:20.065 [DEBUG] [Thread-171240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:15:20.074 [DEBUG] [Thread-171240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:15:20.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:15:20.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:15:20.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:15:20.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:15:20.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:15:20.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:15:20.112 [DEBUG] [Thread-171240] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:15:22.540 [DEBUG] [Thread-171242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:37.591 [DEBUG] [Thread-171243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:15:50.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:15: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-04-11T14:15:51.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 15, 25), 0.071925, 99.8163, 0.0, 12.4409, 13.9941, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:15:51.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:15:25
2026-04-11T14:15:51.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:15:51.967 [DEBUG] [Thread-171244] [transport.py] [_log()] starting thread (client mode): 0xb0fe9f00
2026-04-11T14:15:51.968 [DEBUG] [Thread-171244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:15:51.989 [DEBUG] [Thread-171244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:15:51.989 [INFO] [Thread-171244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:15:51.992 [DEBUG] [Thread-171244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:15:51.992 [DEBUG] [Thread-171244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:15:51.992 [DEBUG] [Thread-171244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:15:51.992 [DEBUG] [Thread-171244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:51.992 [DEBUG] [Thread-171244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] client lang: <none>
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] server lang: <none>
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] kex follows: False
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:15:51.993 [DEBUG] [Thread-171244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:15:51.994 [DEBUG] [Thread-171244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:15:51.994 [DEBUG] [Thread-171244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:15:51.994 [DEBUG] [Thread-171244] [transport.py] [_log()] Compression: none
2026-04-11T14:15:51.994 [DEBUG] [Thread-171244] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:15:52.008 [DEBUG] [Thread-171244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:15:52.009 [DEBUG] [Thread-171244] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:15:52.009 [DEBUG] [Thread-171244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:15:52.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:15:52.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:15:52.012 [DEBUG] [Thread-171244] [transport.py] [_log()] userauth is OK
2026-04-11T14:15:52.012 [DEBUG] [Thread-171244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:15:52.012 [DEBUG] [Thread-171244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:15:52.012 [DEBUG] [Thread-171244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:15:52.012 [DEBUG] [Thread-171244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:15:52.031 [INFO] [Thread-171244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:15:52.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:15:52.629 [DEBUG] [Thread-171246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:15:52.645 [DEBUG] [Thread-171244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:15:52.645 [DEBUG] [Thread-171244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:15:52.646 [DEBUG] [Thread-171244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:15:52.686 [DEBUG] [Thread-171244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:15:52.686 [DEBUG] [Thread-171244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:15:52.693 [DEBUG] [Thread-171244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:15:52.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:15:52.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:15:52.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:15:52.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:15:52.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:15:52.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:15:52.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:15:52.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:15:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:15:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.510881 -999.00  +14.10  18.04     95  +13.40 1 3 1 3 1   888    0 0.74 3.87 ----- 16.2 18.0 52.0 19.4 16.9 0.1 16.9 -0.5 16.4 -1.1 16.9 0.7
2026-04-11T14:15:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:15:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:15:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.510881
2026-04-11T14:15:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:15:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:15:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:15:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:15:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:15:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:15:25', tmtdew=0.071925, humidity=99.8163, cloud=0.0, wind=12.4409, temperature=13.9941, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:15:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:15:52.722 [DEBUG] [Thread-171244] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:15:52.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:15:52.821 [DEBUG] [Thread-171248] [transport.py] [_log()] starting thread (client mode): 0xa79b6950
2026-04-11T14:15:52.821 [DEBUG] [Thread-171248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:15:52.835 [DEBUG] [Thread-171248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:15:52.836 [INFO] [Thread-171248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:15:52.843 [DEBUG] [Thread-171248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:15:52.843 [DEBUG] [Thread-171248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:15:52.843 [DEBUG] [Thread-171248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:15:52.843 [DEBUG] [Thread-171248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:52.843 [DEBUG] [Thread-171248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:15:52.843 [DEBUG] [Thread-171248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] client lang: <none>
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] server lang: <none>
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] kex follows: False
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] Compression: none
2026-04-11T14:15:52.844 [DEBUG] [Thread-171248] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:15:52.904 [DEBUG] [Thread-171248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:15:52.905 [DEBUG] [Thread-171248] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:15:52.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:15:52.906 [DEBUG] [Thread-171248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:15:52.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:15:52.965 [DEBUG] [Thread-171248] [transport.py] [_log()] userauth is OK
2026-04-11T14:15:52.965 [DEBUG] [Thread-171248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:15:52.965 [DEBUG] [Thread-171248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:15:52.965 [DEBUG] [Thread-171248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:15:52.966 [DEBUG] [Thread-171248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:15:52.985 [INFO] [Thread-171248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:15:52.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:15:52.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:15:53.791 [DEBUG] [Thread-171248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:15:53.791 [DEBUG] [Thread-171248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:15:53.839 [DEBUG] [Thread-171248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:15:53.839 [DEBUG] [Thread-171248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:15:53.848 [DEBUG] [Thread-171248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:15:53.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:15:53.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:15:53.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:15:53.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:15:53.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:15:53.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:15:53.886 [DEBUG] [Thread-171248] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:16:07.668 [DEBUG] [Thread-171250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:08.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:08.856 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:09.725 [DEBUG] [Thread-171251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:22.725 [DEBUG] [Thread-171252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:23.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:16:23.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:16:23.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:16:25.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 16, 1), 0.019345, 99.8327, 0.0, 8.68284, 14.0603, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:16:25.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:16:01
2026-04-11T14:16:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:16:25.713 [DEBUG] [Thread-171253] [transport.py] [_log()] starting thread (client mode): 0xa7952140
2026-04-11T14:16:25.713 [DEBUG] [Thread-171253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:16:25.734 [DEBUG] [Thread-171253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:16:25.734 [INFO] [Thread-171253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] client lang: <none>
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] server lang: <none>
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] kex follows: False
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:16:25.737 [DEBUG] [Thread-171253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:16:25.738 [DEBUG] [Thread-171253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:16:25.738 [DEBUG] [Thread-171253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:16:25.738 [DEBUG] [Thread-171253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:16:25.738 [DEBUG] [Thread-171253] [transport.py] [_log()] Compression: none
2026-04-11T14:16:25.738 [DEBUG] [Thread-171253] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:16:25.754 [DEBUG] [Thread-171253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:16:25.754 [DEBUG] [Thread-171253] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:16:25.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:16:25.754 [DEBUG] [Thread-171253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:16:25.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:16:25.755 [DEBUG] [Thread-171253] [transport.py] [_log()] userauth is OK
2026-04-11T14:16:25.755 [DEBUG] [Thread-171253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:16:25.755 [DEBUG] [Thread-171253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:16:25.755 [DEBUG] [Thread-171253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:16:25.755 [DEBUG] [Thread-171253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:16:25.767 [INFO] [Thread-171253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:16:25.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:16:26.366 [DEBUG] [Thread-171253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:16:26.366 [DEBUG] [Thread-171253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:16:26.367 [DEBUG] [Thread-171253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:16:26.407 [DEBUG] [Thread-171253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:16:26.407 [DEBUG] [Thread-171253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:16:26.411 [DEBUG] [Thread-171253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:16:26.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:16:26.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:16:26.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:16:26.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:16:26.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:16:26.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:16:26.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:16:26.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:16:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:16:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.511229 -999.00  +14.10  12.95     95  +13.40 1 3 1 3 1   888    0 0.73 3.69 ----- 12.6 12.9 47.2 20.4 16.9 0.0 16.9 -0.3 16.5 -0.9 16.8 -0.1
2026-04-11T14:16:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:16:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:16:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.511229
2026-04-11T14:16:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:16:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:16:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:16:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:16:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:16:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:16:01', tmtdew=0.019345, humidity=99.8327, cloud=0.0, wind=8.68284, temperature=14.0603, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:16:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:16:26.449 [DEBUG] [Thread-171253] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:16:26.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:16:26.553 [DEBUG] [Thread-171256] [transport.py] [_log()] starting thread (client mode): 0xae534ac0
2026-04-11T14:16:26.553 [DEBUG] [Thread-171256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:16:26.568 [DEBUG] [Thread-171256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:16:26.568 [INFO] [Thread-171256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] client lang: <none>
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] server lang: <none>
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] kex follows: False
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] Compression: none
2026-04-11T14:16:26.576 [DEBUG] [Thread-171256] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:16:26.632 [DEBUG] [Thread-171256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:16:26.633 [DEBUG] [Thread-171256] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:16:26.634 [DEBUG] [Thread-171256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:16:26.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:16:26.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:16:26.689 [DEBUG] [Thread-171256] [transport.py] [_log()] userauth is OK
2026-04-11T14:16:26.689 [DEBUG] [Thread-171256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:16:26.689 [DEBUG] [Thread-171256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:16:26.690 [DEBUG] [Thread-171256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:16:26.690 [DEBUG] [Thread-171256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:16:26.711 [INFO] [Thread-171256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:16:26.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:16:26.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:16:27.530 [DEBUG] [Thread-171256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:16:27.530 [DEBUG] [Thread-171256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:16:27.579 [DEBUG] [Thread-171256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:16:27.579 [DEBUG] [Thread-171256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:16:27.588 [DEBUG] [Thread-171256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:16:27.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:16:27.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:16:27.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:16:27.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:16:27.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:16:27.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:16:27.625 [DEBUG] [Thread-171256] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:16:37.761 [DEBUG] [Thread-171258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:52.805 [DEBUG] [Thread-171259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:16:57.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:16:57.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:16:57.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-04-11T14:16:58.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 16, 36), 0.05934, 99.5328, 0.0, 8.118, 14.3879, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:16:58.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:16:36
2026-04-11T14:16:59.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:16:59.457 [DEBUG] [Thread-171260] [transport.py] [_log()] starting thread (client mode): 0xa7953190
2026-04-11T14:16:59.457 [DEBUG] [Thread-171260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:16:59.469 [DEBUG] [Thread-171260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:16:59.470 [INFO] [Thread-171260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] client lang: <none>
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] server lang: <none>
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] kex follows: False
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] Compression: none
2026-04-11T14:16:59.471 [DEBUG] [Thread-171260] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:16:59.479 [DEBUG] [Thread-171260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:16:59.479 [DEBUG] [Thread-171260] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:16:59.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:16:59.479 [DEBUG] [Thread-171260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:16:59.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:16:59.480 [DEBUG] [Thread-171260] [transport.py] [_log()] userauth is OK
2026-04-11T14:16:59.480 [DEBUG] [Thread-171260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:16:59.480 [DEBUG] [Thread-171260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:16:59.480 [DEBUG] [Thread-171260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:16:59.480 [DEBUG] [Thread-171260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:16:59.489 [INFO] [Thread-171260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:16:59.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:17:00.102 [DEBUG] [Thread-171260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:17:00.102 [DEBUG] [Thread-171260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:17:00.102 [DEBUG] [Thread-171260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:17:00.143 [DEBUG] [Thread-171260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:17:00.143 [DEBUG] [Thread-171260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:17:00.145 [DEBUG] [Thread-171260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:17:00.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:17:00.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:17:00.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:17:00.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:17:00.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:17:00.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.511576 -999.00  +14.20  12.02     95  +13.50 1 3 1 3 1   888    0 0.75 3.46 ----- 12.1 12.0 43.2 13.9 16.9 -0.1 16.9 -0.7 16.5 -0.8 16.8 0.3
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.511576
2026-04-11T14:17:00.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:17:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:17:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:17:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:17:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:17:00.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:16:36', tmtdew=0.05934, humidity=99.5328, cloud=0.0, wind=8.118, temperature=14.3879, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:16:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:17:00.158 [DEBUG] [Thread-171260] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:17:00.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:17:00.241 [DEBUG] [Thread-171263] [transport.py] [_log()] starting thread (client mode): 0xae508c40
2026-04-11T14:17:00.241 [DEBUG] [Thread-171263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:17:00.256 [DEBUG] [Thread-171263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:17:00.256 [INFO] [Thread-171263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] client lang: <none>
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] server lang: <none>
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] kex follows: False
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] Compression: none
2026-04-11T14:17:00.263 [DEBUG] [Thread-171263] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:17:00.321 [DEBUG] [Thread-171263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:17:00.321 [DEBUG] [Thread-171263] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:17:00.322 [DEBUG] [Thread-171263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:17:00.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:17:00.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:17:00.376 [DEBUG] [Thread-171263] [transport.py] [_log()] userauth is OK
2026-04-11T14:17:00.376 [DEBUG] [Thread-171263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:17:00.376 [DEBUG] [Thread-171263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:17:00.377 [DEBUG] [Thread-171263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:17:00.377 [DEBUG] [Thread-171263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:17:00.394 [INFO] [Thread-171263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:17:00.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:17:00.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:17:01.250 [DEBUG] [Thread-171263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:17:01.251 [DEBUG] [Thread-171263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:17:01.299 [DEBUG] [Thread-171263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:17:01.299 [DEBUG] [Thread-171263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:17:01.308 [DEBUG] [Thread-171263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:17:01.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:17:01.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-04-11T14:17:01.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:17:01.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:17:01.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:17:01.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:17:01.345 [DEBUG] [Thread-171263] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:17:07.836 [DEBUG] [Thread-171265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:17:08.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:17:08.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:17:09.779 [DEBUG] [Thread-171266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:17:22.893 [DEBUG] [Thread-171267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:17:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:17:31.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:17:31.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-04-11T14:17:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 17, 11), 0.071955, 99.816, 0.0, 10.0933, 14.0771, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:17:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:17:11
2026-04-11T14:17:33.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:17:33.163 [DEBUG] [Thread-171268] [transport.py] [_log()] starting thread (client mode): 0xae50a0e0
2026-04-11T14:17:33.163 [DEBUG] [Thread-171268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:17:33.182 [DEBUG] [Thread-171268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:17:33.183 [INFO] [Thread-171268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:17:33.186 [DEBUG] [Thread-171268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:17:33.186 [DEBUG] [Thread-171268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] client lang: <none>
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] server lang: <none>
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] kex follows: False
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:17:33.187 [DEBUG] [Thread-171268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:17:33.188 [DEBUG] [Thread-171268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:17:33.188 [DEBUG] [Thread-171268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:17:33.188 [DEBUG] [Thread-171268] [transport.py] [_log()] Compression: none
2026-04-11T14:17:33.188 [DEBUG] [Thread-171268] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:17:33.205 [DEBUG] [Thread-171268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:17:33.206 [DEBUG] [Thread-171268] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:17:33.206 [DEBUG] [Thread-171268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:17:33.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:17:33.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:17:33.209 [DEBUG] [Thread-171268] [transport.py] [_log()] userauth is OK
2026-04-11T14:17:33.209 [DEBUG] [Thread-171268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:17:33.209 [DEBUG] [Thread-171268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:17:33.209 [DEBUG] [Thread-171268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:17:33.209 [DEBUG] [Thread-171268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:17:33.232 [INFO] [Thread-171268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:17:33.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:17:33.789 [DEBUG] [Thread-171268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:17:33.790 [DEBUG] [Thread-171268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:17:33.790 [DEBUG] [Thread-171268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:17:33.831 [DEBUG] [Thread-171268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:17:33.831 [DEBUG] [Thread-171268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:17:33.834 [DEBUG] [Thread-171268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:17:33.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:17:33.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:17:33.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:17:33.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:17:33.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:17:33.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:17:33.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:17:33.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:17:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:17:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.511923 -999.00  +14.20  14.52     95  +13.50 1 3 1 3 1   888    0 0.76 3.68 ----- 16.3 14.5 45.2 18.3 16.9 -0.5 16.8 -1.4 16.4 -1.3 16.8 -0.1
2026-04-11T14:17:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:17:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:17:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.511923
2026-04-11T14:17:33.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:17:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:17:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:17:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:17:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:17:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:17:11', tmtdew=0.071955, humidity=99.816, cloud=0.0, wind=10.0933, temperature=14.0771, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:17:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:17:33.862 [DEBUG] [Thread-171268] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:17:33.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:17:33.957 [DEBUG] [Thread-171271] [transport.py] [_log()] starting thread (client mode): 0xb0fe95a0
2026-04-11T14:17:33.957 [DEBUG] [Thread-171271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:17:33.971 [DEBUG] [Thread-171271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:17:33.972 [INFO] [Thread-171271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] client lang: <none>
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] server lang: <none>
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] kex follows: False
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] Compression: none
2026-04-11T14:17:33.979 [DEBUG] [Thread-171271] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:17:34.035 [DEBUG] [Thread-171271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:17:34.035 [DEBUG] [Thread-171271] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:17:34.036 [DEBUG] [Thread-171271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:17:34.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:17:34.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:17:34.093 [DEBUG] [Thread-171271] [transport.py] [_log()] userauth is OK
2026-04-11T14:17:34.094 [DEBUG] [Thread-171271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:17:34.094 [DEBUG] [Thread-171271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:17:34.094 [DEBUG] [Thread-171271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:17:34.094 [DEBUG] [Thread-171271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:17:34.117 [INFO] [Thread-171271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:17:34.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:17:34.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:17:34.935 [DEBUG] [Thread-171271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:17:34.936 [DEBUG] [Thread-171271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:17:34.983 [DEBUG] [Thread-171271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:17:34.984 [DEBUG] [Thread-171271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:17:34.993 [DEBUG] [Thread-171271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:17:35.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:17:35.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-04-11T14:17:35.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-04-11T14:17:35.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:17:35.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:17:35.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:17:35.030 [DEBUG] [Thread-171271] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:17:37.931 [DEBUG] [Thread-171273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:17:52.981 [DEBUG] [Thread-171274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:18:05.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:18:05.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-04-11T14:18:06.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 17, 46), 0.0542, 99.5657, 0.0, 14.1862, 14.4541, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:18:06.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:17:46
2026-04-11T14:18:06.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:18:06.836 [DEBUG] [Thread-171275] [transport.py] [_log()] starting thread (client mode): 0xae50aef0
2026-04-11T14:18:06.836 [DEBUG] [Thread-171275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:18:06.849 [DEBUG] [Thread-171275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:18:06.849 [INFO] [Thread-171275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] client lang: <none>
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] server lang: <none>
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] kex follows: False
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] Compression: none
2026-04-11T14:18:06.851 [DEBUG] [Thread-171275] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:18:06.860 [DEBUG] [Thread-171275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:18:06.860 [DEBUG] [Thread-171275] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:18:06.860 [DEBUG] [Thread-171275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:18:06.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:18:06.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:18:06.861 [DEBUG] [Thread-171275] [transport.py] [_log()] userauth is OK
2026-04-11T14:18:06.862 [DEBUG] [Thread-171275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:18:06.862 [DEBUG] [Thread-171275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:18:06.862 [DEBUG] [Thread-171275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:18:06.862 [DEBUG] [Thread-171275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:18:06.875 [INFO] [Thread-171275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:18:06.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:18:07.461 [DEBUG] [Thread-171275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:18:07.461 [DEBUG] [Thread-171275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:18:07.462 [DEBUG] [Thread-171275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:18:07.502 [DEBUG] [Thread-171275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:18:07.502 [DEBUG] [Thread-171275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:18:07.505 [DEBUG] [Thread-171275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:18:07.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:18:07.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:18:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:18:07.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:18:07.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:18:07.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:18:07.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:18:07.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:18:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:18:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.512270 -999.00  +14.20  16.06     95  +13.40 1 3 1 3 1   888    0 0.77 3.88 ----- 13.8 16.1 47.4 19.0 16.8 -0.7 16.8 -1.1 16.4 -0.8 16.7 -0.1
2026-04-11T14:18:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:18:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:18:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.512270
2026-04-11T14:18:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:18:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:18:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:18:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:18:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:18:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:17:46', tmtdew=0.0542, humidity=99.5657, cloud=0.0, wind=14.1862, temperature=14.4541, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:17:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:18:07.530 [DEBUG] [Thread-171275] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:18:07.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:18:07.623 [DEBUG] [Thread-171278] [transport.py] [_log()] starting thread (client mode): 0xae5362f0
2026-04-11T14:18:07.623 [DEBUG] [Thread-171278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:18:07.638 [DEBUG] [Thread-171278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:18:07.638 [INFO] [Thread-171278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:18:07.646 [DEBUG] [Thread-171278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:18:07.646 [DEBUG] [Thread-171278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:18:07.646 [DEBUG] [Thread-171278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:18:07.646 [DEBUG] [Thread-171278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] client lang: <none>
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] server lang: <none>
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] kex follows: False
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] Compression: none
2026-04-11T14:18:07.647 [DEBUG] [Thread-171278] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:18:07.709 [DEBUG] [Thread-171278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:18:07.709 [DEBUG] [Thread-171278] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:18:07.710 [DEBUG] [Thread-171278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:18:07.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:18:07.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:18:07.764 [DEBUG] [Thread-171278] [transport.py] [_log()] userauth is OK
2026-04-11T14:18:07.765 [DEBUG] [Thread-171278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:18:07.765 [DEBUG] [Thread-171278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:18:07.765 [DEBUG] [Thread-171278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:18:07.765 [DEBUG] [Thread-171278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:18:07.784 [INFO] [Thread-171278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:18: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-04-11T14:18:07.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:18:08.018 [DEBUG] [Thread-171280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:08.646 [DEBUG] [Thread-171278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:18:08.646 [DEBUG] [Thread-171278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:18:08.694 [DEBUG] [Thread-171278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:18:08.694 [DEBUG] [Thread-171278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:18:08.703 [DEBUG] [Thread-171278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:18:08.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:18:08.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-04-11T14:18: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') -> 00000000
2026-04-11T14:18:08.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:18:08.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:18:08.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:18:08.740 [DEBUG] [Thread-171278] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:18:09.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:09.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:09.832 [DEBUG] [Thread-171281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:23.066 [DEBUG] [Thread-171282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:38.104 [DEBUG] [Thread-171283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:18:38.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:18:38.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:18:38.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-04-11T14:18:40.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 18, 22), 0.07456, 99.7993, 0.0, 14.7341, 14.1273, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:18:40.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:18:22
2026-04-11T14:18:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:18:40.615 [DEBUG] [Thread-171284] [transport.py] [_log()] starting thread (client mode): 0xae535960
2026-04-11T14:18:40.615 [DEBUG] [Thread-171284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:18:40.636 [DEBUG] [Thread-171284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:18:40.637 [INFO] [Thread-171284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] client lang: <none>
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] server lang: <none>
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] kex follows: False
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:18:40.638 [DEBUG] [Thread-171284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:18:40.639 [DEBUG] [Thread-171284] [transport.py] [_log()] Compression: none
2026-04-11T14:18:40.639 [DEBUG] [Thread-171284] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:18:40.647 [DEBUG] [Thread-171284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:18:40.648 [DEBUG] [Thread-171284] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:18:40.648 [DEBUG] [Thread-171284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:18:40.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:18:40.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:18:40.650 [DEBUG] [Thread-171284] [transport.py] [_log()] userauth is OK
2026-04-11T14:18:40.650 [DEBUG] [Thread-171284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:18:40.651 [DEBUG] [Thread-171284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:18:40.651 [DEBUG] [Thread-171284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:18:40.651 [DEBUG] [Thread-171284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:18:40.669 [INFO] [Thread-171284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:18:40.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:18:41.324 [DEBUG] [Thread-171284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:18:41.324 [DEBUG] [Thread-171284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:18:41.324 [DEBUG] [Thread-171284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:18:41.365 [DEBUG] [Thread-171284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:18:41.365 [DEBUG] [Thread-171284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:18:41.369 [DEBUG] [Thread-171284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:18:41.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:18:41.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:18:41.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:18:41.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:18:41.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:18:41.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:18:41.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:18:41.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:18:41.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:18:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.512618 -999.00  +14.20  13.55     95  +13.50 1 3 1 3 1   888    0 0.78 4.28 ----- 15.1 13.6 61.4 16.7 16.8 -0.5 16.8 -1.1 16.4 -0.8 16.7 -0.2
2026-04-11T14:18:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:18:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:18:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.512618
2026-04-11T14:18:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:18:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:18:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:18:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:18:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:18:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:18:22', tmtdew=0.07456, humidity=99.7993, cloud=0.0, wind=14.7341, temperature=14.1273, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:18:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:18:41.393 [DEBUG] [Thread-171284] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:18:41.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:18:41.497 [DEBUG] [Thread-171287] [transport.py] [_log()] starting thread (client mode): 0xae535a50
2026-04-11T14:18:41.497 [DEBUG] [Thread-171287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:18:41.512 [DEBUG] [Thread-171287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:18:41.512 [INFO] [Thread-171287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:18:41.520 [DEBUG] [Thread-171287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] client lang: <none>
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] server lang: <none>
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] kex follows: False
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] Compression: none
2026-04-11T14:18:41.521 [DEBUG] [Thread-171287] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:18:41.577 [DEBUG] [Thread-171287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:18:41.578 [DEBUG] [Thread-171287] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:18:41.578 [DEBUG] [Thread-171287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:18:41.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:18:41.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:18:41.633 [DEBUG] [Thread-171287] [transport.py] [_log()] userauth is OK
2026-04-11T14:18:41.633 [DEBUG] [Thread-171287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:18:41.634 [DEBUG] [Thread-171287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:18:41.634 [DEBUG] [Thread-171287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:18:41.634 [DEBUG] [Thread-171287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:18:41.653 [INFO] [Thread-171287] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:18:41.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:18:41.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:18:42.477 [DEBUG] [Thread-171287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:18:42.477 [DEBUG] [Thread-171287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:18:42.525 [DEBUG] [Thread-171287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:18:42.525 [DEBUG] [Thread-171287] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:18:42.534 [DEBUG] [Thread-171287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:18:42.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:18: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-04-11T14:18:42.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-04-11T14:18:42.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:18:42.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:18:42.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:18:42.572 [DEBUG] [Thread-171287] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:18:53.141 [DEBUG] [Thread-171289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:08.203 [DEBUG] [Thread-171290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:09.288 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:09.289 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:09.865 [DEBUG] [Thread-171291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:12.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:19:12.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:19:12.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-04-11T14:19:13.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 18, 57), 0.07456, 99.7993, 0.0, 13.6933, 13.9773, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:19:13.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:18:57
2026-04-11T14:19:14.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:19:14.368 [DEBUG] [Thread-171292] [transport.py] [_log()] starting thread (client mode): 0xae5600a0
2026-04-11T14:19:14.368 [DEBUG] [Thread-171292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:19:14.388 [DEBUG] [Thread-171292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:19:14.388 [INFO] [Thread-171292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] client lang: <none>
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] server lang: <none>
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] kex follows: False
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] Compression: none
2026-04-11T14:19:14.391 [DEBUG] [Thread-171292] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:19:14.409 [DEBUG] [Thread-171292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:19:14.409 [DEBUG] [Thread-171292] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:19:14.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:19:14.410 [DEBUG] [Thread-171292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:19:14.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:19:14.411 [DEBUG] [Thread-171292] [transport.py] [_log()] userauth is OK
2026-04-11T14:19:14.412 [DEBUG] [Thread-171292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:19:14.412 [DEBUG] [Thread-171292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:19:14.412 [DEBUG] [Thread-171292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:19:14.412 [DEBUG] [Thread-171292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:19:14.429 [INFO] [Thread-171292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:19:14.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:19:15.047 [DEBUG] [Thread-171292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:19:15.047 [DEBUG] [Thread-171292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:19:15.047 [DEBUG] [Thread-171292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:19:15.088 [DEBUG] [Thread-171292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:19:15.088 [DEBUG] [Thread-171292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:19:15.090 [DEBUG] [Thread-171292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:19:15.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:19:15.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:19:15.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:19:15.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:19:15.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:19:15.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:19:15.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:19:15.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:19:15.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:19:15.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.512965 -999.00  +14.10  13.66     95  +13.40 1 3 1 3 1   888    0 0.78 4.39 ----- 15.6 13.7 52.8 19.6 16.8 -0.5 16.8 -1.3 16.3 -0.4 16.6 -0.4
2026-04-11T14:19:15.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:19:15.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:19:15.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.512965
2026-04-11T14:19:15.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:19:15.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:19:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:19:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:19:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:19:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:18:57', tmtdew=0.07456, humidity=99.7993, cloud=0.0, wind=13.6933, temperature=13.9773, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:18:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:19:15.114 [DEBUG] [Thread-171292] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:19:15.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:19:15.208 [DEBUG] [Thread-171295] [transport.py] [_log()] starting thread (client mode): 0xae561ed0
2026-04-11T14:19:15.208 [DEBUG] [Thread-171295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:19:15.223 [DEBUG] [Thread-171295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:19:15.223 [INFO] [Thread-171295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:19:15.230 [DEBUG] [Thread-171295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:19:15.230 [DEBUG] [Thread-171295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:19:15.230 [DEBUG] [Thread-171295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] client lang: <none>
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] server lang: <none>
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] kex follows: False
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:19:15.231 [DEBUG] [Thread-171295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:19:15.232 [DEBUG] [Thread-171295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:19:15.232 [DEBUG] [Thread-171295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:19:15.232 [DEBUG] [Thread-171295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:19:15.232 [DEBUG] [Thread-171295] [transport.py] [_log()] Compression: none
2026-04-11T14:19:15.232 [DEBUG] [Thread-171295] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:19:15.288 [DEBUG] [Thread-171295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:19:15.289 [DEBUG] [Thread-171295] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:19:15.289 [DEBUG] [Thread-171295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:19:15.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:19:15.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:19:15.345 [DEBUG] [Thread-171295] [transport.py] [_log()] userauth is OK
2026-04-11T14:19:15.345 [DEBUG] [Thread-171295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:19:15.345 [DEBUG] [Thread-171295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:19:15.345 [DEBUG] [Thread-171295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:19:15.345 [DEBUG] [Thread-171295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:19:15.367 [INFO] [Thread-171295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:19:15.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:19:15.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:19:16.182 [DEBUG] [Thread-171295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:19:16.182 [DEBUG] [Thread-171295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:19:16.230 [DEBUG] [Thread-171295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:19:16.231 [DEBUG] [Thread-171295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:19:16.239 [DEBUG] [Thread-171295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:19:16.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:19:16.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-04-11T14:19:16.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-04-11T14:19:16.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:19:16.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:19:16.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:19:16.273 [DEBUG] [Thread-171295] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:19:23.236 [DEBUG] [Thread-171297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:38.289 [DEBUG] [Thread-171298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:19:46.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:19:46.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:19:46.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-04-11T14:19:47.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 19, 33), 0.074575, 99.7993, 0.0, 13.023, 13.9606, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:19:47.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:19:33
2026-04-11T14:19:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:19:48.092 [DEBUG] [Thread-171299] [transport.py] [_log()] starting thread (client mode): 0xae5350f0
2026-04-11T14:19:48.092 [DEBUG] [Thread-171299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:19:48.112 [DEBUG] [Thread-171299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:19:48.112 [INFO] [Thread-171299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:19:48.115 [DEBUG] [Thread-171299] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:19:48.115 [DEBUG] [Thread-171299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:19:48.115 [DEBUG] [Thread-171299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] client lang: <none>
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] server lang: <none>
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] kex follows: False
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] Compression: none
2026-04-11T14:19:48.116 [DEBUG] [Thread-171299] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:19:48.134 [DEBUG] [Thread-171299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:19:48.134 [DEBUG] [Thread-171299] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:19:48.134 [DEBUG] [Thread-171299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:19:48.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:19:48.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:19:48.136 [DEBUG] [Thread-171299] [transport.py] [_log()] userauth is OK
2026-04-11T14:19:48.136 [DEBUG] [Thread-171299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:19:48.136 [DEBUG] [Thread-171299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:19:48.137 [DEBUG] [Thread-171299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:19:48.137 [DEBUG] [Thread-171299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:19:48.153 [INFO] [Thread-171299] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:19:48.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:19:48.804 [DEBUG] [Thread-171299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:19:48.804 [DEBUG] [Thread-171299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:19:48.804 [DEBUG] [Thread-171299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:19:48.845 [DEBUG] [Thread-171299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:19:48.845 [DEBUG] [Thread-171299] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:19:48.849 [DEBUG] [Thread-171299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:19:48.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:19:48.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:19:48.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:19:48.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:19:48.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:19:48.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:19:48.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:19:48.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:19:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:19:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.513659 -999.00  +14.20  15.36     95  +13.50 1 3 1 3 1   888    0 0.80 4.95 ----- 16.3 15.4 44.8 17.6 16.8 -0.4 16.7 -0.9 16.3 -0.2 16.6 0.3
2026-04-11T14:19:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:19:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:19:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.513659
2026-04-11T14:19:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:19:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:19:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:19:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:19:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:19:48.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:19:33', tmtdew=0.074575, humidity=99.7993, cloud=0.0, wind=13.023, temperature=13.9606, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:19:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:19:48.876 [DEBUG] [Thread-171299] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:19:48.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:19:48.969 [DEBUG] [Thread-171302] [transport.py] [_log()] starting thread (client mode): 0xb39c6260
2026-04-11T14:19:48.969 [DEBUG] [Thread-171302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:19:48.984 [DEBUG] [Thread-171302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:19:48.985 [INFO] [Thread-171302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:19:48.992 [DEBUG] [Thread-171302] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:19:48.992 [DEBUG] [Thread-171302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:19:48.992 [DEBUG] [Thread-171302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:19:48.992 [DEBUG] [Thread-171302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] client lang: <none>
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] server lang: <none>
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] kex follows: False
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:19:48.993 [DEBUG] [Thread-171302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:19:48.994 [DEBUG] [Thread-171302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:19:48.994 [DEBUG] [Thread-171302] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:19:48.994 [DEBUG] [Thread-171302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:19:48.994 [DEBUG] [Thread-171302] [transport.py] [_log()] Compression: none
2026-04-11T14:19:48.994 [DEBUG] [Thread-171302] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:19:49.054 [DEBUG] [Thread-171302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:19:49.055 [DEBUG] [Thread-171302] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:19:49.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:19:49.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:19:49.057 [DEBUG] [Thread-171302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:19:49.110 [DEBUG] [Thread-171302] [transport.py] [_log()] userauth is OK
2026-04-11T14:19:49.110 [DEBUG] [Thread-171302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:19:49.111 [DEBUG] [Thread-171302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:19:49.111 [DEBUG] [Thread-171302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:19:49.119 [DEBUG] [Thread-171302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:19:49.140 [INFO] [Thread-171302] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:19:49.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:19:49.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:19:49.934 [DEBUG] [Thread-171302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:19:49.934 [DEBUG] [Thread-171302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:19:49.982 [DEBUG] [Thread-171302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:19:49.982 [DEBUG] [Thread-171302] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:19:49.991 [DEBUG] [Thread-171302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:19:50.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:19:50.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:19:50.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:19:50.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:19:50.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:19:50.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:19:50.029 [DEBUG] [Thread-171302] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:19:53.327 [DEBUG] [Thread-171304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:08.381 [DEBUG] [Thread-171305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:09.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:09.430 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:09.917 [DEBUG] [Thread-171306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:20:20.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:20:20.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:20:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 20, 8), 0.08231, 99.7495, 0.0, 12.1057, 13.8943, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:20:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:20:08
2026-04-11T14:20:21.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:20:21.863 [DEBUG] [Thread-171307] [transport.py] [_log()] starting thread (client mode): 0xae5621a0
2026-04-11T14:20:21.863 [DEBUG] [Thread-171307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:20:21.883 [DEBUG] [Thread-171307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:20:21.884 [INFO] [Thread-171307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:20:21.887 [DEBUG] [Thread-171307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] client lang: <none>
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] server lang: <none>
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] kex follows: False
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:20:21.888 [DEBUG] [Thread-171307] [transport.py] [_log()] Compression: none
2026-04-11T14:20:21.889 [DEBUG] [Thread-171307] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:20:21.909 [DEBUG] [Thread-171307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:20:21.910 [DEBUG] [Thread-171307] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:20:21.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:20:21.911 [DEBUG] [Thread-171307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:20:21.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:20:21.953 [DEBUG] [Thread-171307] [transport.py] [_log()] userauth is OK
2026-04-11T14:20:21.953 [DEBUG] [Thread-171307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:20:21.954 [DEBUG] [Thread-171307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:20:21.954 [DEBUG] [Thread-171307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:20:21.954 [DEBUG] [Thread-171307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:20:21.992 [INFO] [Thread-171307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:20:21.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:20:23.419 [DEBUG] [Thread-171309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:29.105 [DEBUG] [Thread-171307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:20:29.106 [DEBUG] [Thread-171307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:20:29.106 [DEBUG] [Thread-171307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:20:29.147 [DEBUG] [Thread-171307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:20:29.147 [DEBUG] [Thread-171307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:20:29.151 [DEBUG] [Thread-171307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:20:29.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:20:29.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:20:29.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:20:29.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:20:29.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:20:29.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:20:29.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:20:29.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:20:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:20:29.192 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-11T14:20:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:20:08', tmtdew=0.08231, humidity=99.7495, cloud=0.0, wind=12.1057, temperature=13.8943, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:20:29.194 [DEBUG] [Thread-171307] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:20:29.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:20:29.290 [DEBUG] [Thread-171311] [transport.py] [_log()] starting thread (client mode): 0xae508ee0
2026-04-11T14:20:29.290 [DEBUG] [Thread-171311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:20:29.305 [DEBUG] [Thread-171311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:20:29.305 [INFO] [Thread-171311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:20:29.313 [DEBUG] [Thread-171311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:20:29.313 [DEBUG] [Thread-171311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] client lang: <none>
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] server lang: <none>
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] kex follows: False
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] Compression: none
2026-04-11T14:20:29.314 [DEBUG] [Thread-171311] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:20:29.374 [DEBUG] [Thread-171311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:20:29.375 [DEBUG] [Thread-171311] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:20:29.375 [DEBUG] [Thread-171311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:20:29.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:20:29.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:20:29.430 [DEBUG] [Thread-171311] [transport.py] [_log()] userauth is OK
2026-04-11T14:20:29.430 [DEBUG] [Thread-171311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:20:29.430 [DEBUG] [Thread-171311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:20:29.430 [DEBUG] [Thread-171311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:20:29.430 [DEBUG] [Thread-171311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:20:29.454 [INFO] [Thread-171311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:20:29.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:20:29.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:20:30.269 [DEBUG] [Thread-171311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:20:30.269 [DEBUG] [Thread-171311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:20:30.317 [DEBUG] [Thread-171311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:20:30.317 [DEBUG] [Thread-171311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:20:30.327 [DEBUG] [Thread-171311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:20:30.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:20:30.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-04-11T14:20:30.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-04-11T14:20:30.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:20:30.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:20:30.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:20:30.363 [DEBUG] [Thread-171311] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:20:38.456 [DEBUG] [Thread-171313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:20:53.506 [DEBUG] [Thread-171314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:21:00.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:21:00.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-04-11T14:21:01.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 20, 44), 0.05423, 99.5661, 0.0, 11.2932, 14.1891, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:21:01.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:20:44
2026-04-11T14:21:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:21:02.210 [DEBUG] [Thread-171315] [transport.py] [_log()] starting thread (client mode): 0xae5618d0
2026-04-11T14:21:02.210 [DEBUG] [Thread-171315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:21:02.229 [DEBUG] [Thread-171315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:21:02.230 [INFO] [Thread-171315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:21:02.231 [DEBUG] [Thread-171315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] client lang: <none>
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] server lang: <none>
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] kex follows: False
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] Compression: none
2026-04-11T14:21:02.232 [DEBUG] [Thread-171315] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:21:02.242 [DEBUG] [Thread-171315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:21:02.243 [DEBUG] [Thread-171315] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:21:02.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:21:02.244 [DEBUG] [Thread-171315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:21:02.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:21:02.245 [DEBUG] [Thread-171315] [transport.py] [_log()] userauth is OK
2026-04-11T14:21:02.246 [DEBUG] [Thread-171315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:21:02.246 [DEBUG] [Thread-171315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:21:02.246 [DEBUG] [Thread-171315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:21:02.246 [DEBUG] [Thread-171315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:21:02.264 [INFO] [Thread-171315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:21:02.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:21:03.055 [DEBUG] [Thread-171315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:21:03.055 [DEBUG] [Thread-171315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:21:03.055 [DEBUG] [Thread-171315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:21:03.096 [DEBUG] [Thread-171315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:21:03.096 [DEBUG] [Thread-171315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:21:03.100 [DEBUG] [Thread-171315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:21:03.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:21:03.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:21:03.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:21:03.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:21:03.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:21:03.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:21:03.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:21:03.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:21:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:21:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.514006 -999.00  +14.20  16.43     95  +13.50 1 3 1 3 1   888    0 0.81 5.24 ----- 14.7 16.4 49.2 20.3 16.7 -0.6 16.7 -0.7 16.2 -1.1 16.6 0.3
2026-04-11T14:21:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:21:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:21:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.514006
2026-04-11T14:21:03.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:21:03.121 [DEBUG] [Thread-171315] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:21:03.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:21:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:21:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:21:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:21:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:20:44', tmtdew=0.05423, humidity=99.5661, cloud=0.0, wind=11.2932, temperature=14.1891, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:20:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:21:03.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:21:03.216 [DEBUG] [Thread-171318] [transport.py] [_log()] starting thread (client mode): 0xae5364d0
2026-04-11T14:21:03.216 [DEBUG] [Thread-171318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:21:03.231 [DEBUG] [Thread-171318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:21:03.231 [INFO] [Thread-171318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:21:03.239 [DEBUG] [Thread-171318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:21:03.239 [DEBUG] [Thread-171318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] client lang: <none>
2026-04-11T14:21:03.240 [DEBUG] [Thread-171318] [transport.py] [_log()] server lang: <none>
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] kex follows: False
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] Compression: none
2026-04-11T14:21:03.241 [DEBUG] [Thread-171318] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:21:03.299 [DEBUG] [Thread-171318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:21:03.300 [DEBUG] [Thread-171318] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:21:03.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:21:03.301 [DEBUG] [Thread-171318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:21:03.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:21:03.358 [DEBUG] [Thread-171318] [transport.py] [_log()] userauth is OK
2026-04-11T14:21:03.358 [DEBUG] [Thread-171318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:21:03.358 [DEBUG] [Thread-171318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:21:03.359 [DEBUG] [Thread-171318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:21:03.359 [DEBUG] [Thread-171318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:21:03.379 [INFO] [Thread-171318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:21:03.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:21:03.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:21:04.203 [DEBUG] [Thread-171318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:21:04.203 [DEBUG] [Thread-171318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:21:04.251 [DEBUG] [Thread-171318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:21:04.251 [DEBUG] [Thread-171318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:21:04.261 [DEBUG] [Thread-171318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:21:04.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:21:04.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-04-11T14:21:04.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-04-11T14:21:04.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:21:04.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:21:04.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:21:04.298 [DEBUG] [Thread-171318] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:21:08.541 [DEBUG] [Thread-171320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:09.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:09.572 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:09.979 [DEBUG] [Thread-171321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:23.602 [DEBUG] [Thread-171322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:34.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:21:34.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:21:34.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-04-11T14:21:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 21, 19), 0.07198, 99.8162, 0.0, 13.0406, 13.8446, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:21:35.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:21:19
2026-04-11T14:21:36.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:21:36.185 [DEBUG] [Thread-171323] [transport.py] [_log()] starting thread (client mode): 0xb0fe9540
2026-04-11T14:21:36.186 [DEBUG] [Thread-171323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:21:36.207 [DEBUG] [Thread-171323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:21:36.207 [INFO] [Thread-171323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] client lang: <none>
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] server lang: <none>
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] kex follows: False
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:21:36.211 [DEBUG] [Thread-171323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:21:36.212 [DEBUG] [Thread-171323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:21:36.212 [DEBUG] [Thread-171323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:21:36.212 [DEBUG] [Thread-171323] [transport.py] [_log()] Compression: none
2026-04-11T14:21:36.212 [DEBUG] [Thread-171323] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:21:36.228 [DEBUG] [Thread-171323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:21:36.228 [DEBUG] [Thread-171323] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:21:36.229 [DEBUG] [Thread-171323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:21:36.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:21:36.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:21:36.230 [DEBUG] [Thread-171323] [transport.py] [_log()] userauth is OK
2026-04-11T14:21:36.231 [DEBUG] [Thread-171323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:21:36.231 [DEBUG] [Thread-171323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:21:36.231 [DEBUG] [Thread-171323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:21:36.231 [DEBUG] [Thread-171323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:21:36.255 [INFO] [Thread-171323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:21:36.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:21:36.865 [DEBUG] [Thread-171323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:21:36.866 [DEBUG] [Thread-171323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:21:36.866 [DEBUG] [Thread-171323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:21:36.907 [DEBUG] [Thread-171323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:21:36.907 [DEBUG] [Thread-171323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:21:36.910 [DEBUG] [Thread-171323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:21:36.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:21:36.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:21:36.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:21:36.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:21:36.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:21:36.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:21:36.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:21:36.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:21:36.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:21:36.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.514701 -999.00  +14.20  12.71     95  +13.40 1 3 1 3 1   888    0 0.84 5.40 ----- 14.5 12.7 55.4 15.6 16.8 -0.1 16.7 -0.3 16.4 -0.8 16.6 0.3
2026-04-11T14:21:36.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:21:36.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:21:36.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.514701
2026-04-11T14:21:36.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:21:36.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:21:36.934 [DEBUG] [Thread-171323] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:21:36.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:21:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:21:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:21:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:21:19', tmtdew=0.07198, humidity=99.8162, cloud=0.0, wind=13.0406, temperature=13.8446, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:21:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:21:37.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:21:37.023 [DEBUG] [Thread-171326] [transport.py] [_log()] starting thread (client mode): 0xb39c6710
2026-04-11T14:21:37.024 [DEBUG] [Thread-171326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:21:37.037 [DEBUG] [Thread-171326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:21:37.038 [INFO] [Thread-171326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:21:37.045 [DEBUG] [Thread-171326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:21:37.045 [DEBUG] [Thread-171326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:21:37.045 [DEBUG] [Thread-171326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:21:37.045 [DEBUG] [Thread-171326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:37.045 [DEBUG] [Thread-171326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] client lang: <none>
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] server lang: <none>
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] kex follows: False
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:21:37.046 [DEBUG] [Thread-171326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:21:37.047 [DEBUG] [Thread-171326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:21:37.047 [DEBUG] [Thread-171326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:21:37.047 [DEBUG] [Thread-171326] [transport.py] [_log()] Compression: none
2026-04-11T14:21:37.047 [DEBUG] [Thread-171326] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:21:37.101 [DEBUG] [Thread-171326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:21:37.101 [DEBUG] [Thread-171326] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:21:37.102 [DEBUG] [Thread-171326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:21:37.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:21:37.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:21:37.158 [DEBUG] [Thread-171326] [transport.py] [_log()] userauth is OK
2026-04-11T14:21:37.158 [DEBUG] [Thread-171326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:21:37.158 [DEBUG] [Thread-171326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:21:37.158 [DEBUG] [Thread-171326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:21:37.158 [DEBUG] [Thread-171326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:21:37.177 [INFO] [Thread-171326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:21:37.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:21:37.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:21:37.979 [DEBUG] [Thread-171326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:21:37.979 [DEBUG] [Thread-171326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:21:38.027 [DEBUG] [Thread-171326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:21:38.027 [DEBUG] [Thread-171326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:21:38.036 [DEBUG] [Thread-171326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:21:38.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:21:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:21:38.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-04-11T14:21:38.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:21:38.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:21:38.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:21:38.069 [DEBUG] [Thread-171326] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:21:38.637 [DEBUG] [Thread-171328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:21:53.689 [DEBUG] [Thread-171329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:22:08.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:22:08.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:22:08.724 [DEBUG] [Thread-171330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:09.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 21, 54), 0.03875, 99.6653, 0.0, 6.45984, 14.4211, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:22:09.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:21:54
2026-04-11T14:22:09.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:09.714 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:22:09.948 [DEBUG] [Thread-171331] [transport.py] [_log()] starting thread (client mode): 0xb39c61d0
2026-04-11T14:22:09.948 [DEBUG] [Thread-171331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:22:09.963 [DEBUG] [Thread-171331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:22:09.963 [INFO] [Thread-171331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:22:09.966 [DEBUG] [Thread-171331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] client lang: <none>
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] server lang: <none>
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] kex follows: False
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] Compression: none
2026-04-11T14:22:09.967 [DEBUG] [Thread-171331] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:22:09.985 [DEBUG] [Thread-171331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:22:09.987 [DEBUG] [Thread-171331] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:22:09.987 [DEBUG] [Thread-171331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:22:09.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:22:09.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:22:09.989 [DEBUG] [Thread-171331] [transport.py] [_log()] userauth is OK
2026-04-11T14:22:09.989 [DEBUG] [Thread-171331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:22:09.990 [DEBUG] [Thread-171331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:22:09.990 [DEBUG] [Thread-171331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:22:09.990 [DEBUG] [Thread-171331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:22:10.004 [INFO] [Thread-171331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:22:10.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:22:10.033 [DEBUG] [Thread-171333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:10.617 [DEBUG] [Thread-171331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:22:10.617 [DEBUG] [Thread-171331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:22:10.618 [DEBUG] [Thread-171331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:22:10.658 [DEBUG] [Thread-171331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:22:10.659 [DEBUG] [Thread-171331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:22:10.662 [DEBUG] [Thread-171331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:22:10.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:22:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:22:10.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:22:10.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:22:10.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:22:10.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:22:10.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:22:10.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:22:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:22:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.515048 -999.00  +14.20  11.46     95  +13.50 1 3 1 3 1   888    0 0.80 5.21 ----- 16.0 11.5 37.1 15.9 16.8 -0.2 16.7 -0.4 16.3 -0.2 16.6 0.3
2026-04-11T14:22:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:22:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:22:10.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.515048
2026-04-11T14:22:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:22:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:22:10.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:22:10.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:22:10.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:22:10.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:21:54', tmtdew=0.03875, humidity=99.6653, cloud=0.0, wind=6.45984, temperature=14.4211, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:21:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:22:10.690 [DEBUG] [Thread-171331] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:22:10.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:22:10.777 [DEBUG] [Thread-171335] [transport.py] [_log()] starting thread (client mode): 0xb39c7ca0
2026-04-11T14:22:10.777 [DEBUG] [Thread-171335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:22:10.792 [DEBUG] [Thread-171335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:22:10.792 [INFO] [Thread-171335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:22:10.799 [DEBUG] [Thread-171335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] client lang: <none>
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] server lang: <none>
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] kex follows: False
2026-04-11T14:22:10.800 [DEBUG] [Thread-171335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:22:10.801 [DEBUG] [Thread-171335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:22:10.801 [DEBUG] [Thread-171335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:22:10.801 [DEBUG] [Thread-171335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:22:10.801 [DEBUG] [Thread-171335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:22:10.801 [DEBUG] [Thread-171335] [transport.py] [_log()] Compression: none
2026-04-11T14:22:10.801 [DEBUG] [Thread-171335] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:22:10.858 [DEBUG] [Thread-171335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:22:10.858 [DEBUG] [Thread-171335] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:22:10.859 [DEBUG] [Thread-171335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:22:10.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:22:10.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:22:10.914 [DEBUG] [Thread-171335] [transport.py] [_log()] userauth is OK
2026-04-11T14:22:10.914 [DEBUG] [Thread-171335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:22:10.914 [DEBUG] [Thread-171335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:22:10.915 [DEBUG] [Thread-171335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:22:10.915 [DEBUG] [Thread-171335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:22:10.933 [INFO] [Thread-171335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:22:10.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:22:10.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:22:11.723 [DEBUG] [Thread-171335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:22:11.723 [DEBUG] [Thread-171335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:22:11.771 [DEBUG] [Thread-171335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:22:11.771 [DEBUG] [Thread-171335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:22:11.780 [DEBUG] [Thread-171335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:22:11.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:22:11.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-04-11T14:22:11.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-04-11T14:22:11.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:22:11.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:22:11.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:22:11.817 [DEBUG] [Thread-171335] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:22:23.765 [DEBUG] [Thread-171337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:38.819 [DEBUG] [Thread-171338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:22:41.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:22:41.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:22:41.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-04-11T14:22:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 22, 30), 0.074515, 99.7995, 0.0, 10.7114, 13.9271, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:22:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:22:30
2026-04-11T14:22:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:22:43.642 [DEBUG] [Thread-171339] [transport.py] [_log()] starting thread (client mode): 0xae5b3c40
2026-04-11T14:22:43.643 [DEBUG] [Thread-171339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:22:43.663 [DEBUG] [Thread-171339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:22:43.663 [INFO] [Thread-171339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:22:43.666 [DEBUG] [Thread-171339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:22:43.666 [DEBUG] [Thread-171339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:22:43.666 [DEBUG] [Thread-171339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:22:43.666 [DEBUG] [Thread-171339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:43.666 [DEBUG] [Thread-171339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:43.666 [DEBUG] [Thread-171339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] client lang: <none>
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] server lang: <none>
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] kex follows: False
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] Compression: none
2026-04-11T14:22:43.667 [DEBUG] [Thread-171339] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:22:43.678 [DEBUG] [Thread-171339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:22:43.678 [DEBUG] [Thread-171339] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:22:43.679 [DEBUG] [Thread-171339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:22:43.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:22:43.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:22:43.680 [DEBUG] [Thread-171339] [transport.py] [_log()] userauth is OK
2026-04-11T14:22:43.681 [DEBUG] [Thread-171339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:22:43.681 [DEBUG] [Thread-171339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:22:43.681 [DEBUG] [Thread-171339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:22:43.681 [DEBUG] [Thread-171339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:22:43.698 [INFO] [Thread-171339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:22:43.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:22:44.320 [DEBUG] [Thread-171339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:22:44.320 [DEBUG] [Thread-171339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:22:44.321 [DEBUG] [Thread-171339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:22:44.361 [DEBUG] [Thread-171339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:22:44.361 [DEBUG] [Thread-171339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:22:44.364 [DEBUG] [Thread-171339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:22:44.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:22:44.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:22:44.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:22:44.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:22:44.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:22:44.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:22:44.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:22:44.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:22:44.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:22:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.515395 -999.00  +14.20  14.44     95  +13.40 1 3 1 3 1   888    0 0.84 6.00 ----- 11.5 14.4 48.4 17.5 16.8 -0.4 16.7 -0.7 16.3 -0.7 16.7 0.4
2026-04-11T14:22:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:22:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:22:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.515395
2026-04-11T14:22:44.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:22:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:22:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:22:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:22:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:22:44.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:22:30', tmtdew=0.074515, humidity=99.7995, cloud=0.0, wind=10.7114, temperature=13.9271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:22:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:22:44.390 [DEBUG] [Thread-171339] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:22:44.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:22:44.483 [DEBUG] [Thread-171342] [transport.py] [_log()] starting thread (client mode): 0xae508dc0
2026-04-11T14:22:44.483 [DEBUG] [Thread-171342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:22:44.497 [DEBUG] [Thread-171342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:22:44.497 [INFO] [Thread-171342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:22:44.505 [DEBUG] [Thread-171342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:22:44.505 [DEBUG] [Thread-171342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:22:44.505 [DEBUG] [Thread-171342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:22:44.505 [DEBUG] [Thread-171342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] client lang: <none>
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] server lang: <none>
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] kex follows: False
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:22:44.506 [DEBUG] [Thread-171342] [transport.py] [_log()] Compression: none
2026-04-11T14:22:44.507 [DEBUG] [Thread-171342] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:22:44.563 [DEBUG] [Thread-171342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:22:44.563 [DEBUG] [Thread-171342] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:22:44.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:22:44.565 [DEBUG] [Thread-171342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:22:44.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:22:44.627 [DEBUG] [Thread-171342] [transport.py] [_log()] userauth is OK
2026-04-11T14:22:44.627 [DEBUG] [Thread-171342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:22:44.628 [DEBUG] [Thread-171342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:22:44.628 [DEBUG] [Thread-171342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:22:44.628 [DEBUG] [Thread-171342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:22:44.646 [INFO] [Thread-171342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:22:44.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:22:44.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:22:45.447 [DEBUG] [Thread-171342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:22:45.447 [DEBUG] [Thread-171342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:22:45.495 [DEBUG] [Thread-171342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:22:45.495 [DEBUG] [Thread-171342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:22:45.504 [DEBUG] [Thread-171342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:22:45.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:22: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-04-11T14:22: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-04-11T14:22:45.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:22:45.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:22:45.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:22:45.541 [DEBUG] [Thread-171342] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:22:53.859 [DEBUG] [Thread-171344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:08.913 [DEBUG] [Thread-171345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:09.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:09.856 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:10.081 [DEBUG] [Thread-171346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:23:15.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:23:15.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-04-11T14:23:16.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 23, 5), 0.071945, 99.816, 0.0, 10.0588, 13.9602, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:23:16.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:23:05
2026-04-11T14:23:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:23:17.506 [DEBUG] [Thread-171347] [transport.py] [_log()] starting thread (client mode): 0xae5361a0
2026-04-11T14:23:17.506 [DEBUG] [Thread-171347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:23:17.526 [DEBUG] [Thread-171347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:23:17.526 [INFO] [Thread-171347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] client lang: <none>
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] server lang: <none>
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] kex follows: False
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] Compression: none
2026-04-11T14:23:17.528 [DEBUG] [Thread-171347] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:23:17.539 [DEBUG] [Thread-171347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:23:17.539 [DEBUG] [Thread-171347] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:23:17.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:23:17.540 [DEBUG] [Thread-171347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:23:17.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:23:17.542 [DEBUG] [Thread-171347] [transport.py] [_log()] userauth is OK
2026-04-11T14:23:17.542 [DEBUG] [Thread-171347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:23:17.542 [DEBUG] [Thread-171347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:23:17.542 [DEBUG] [Thread-171347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:23:17.543 [DEBUG] [Thread-171347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:23:17.560 [INFO] [Thread-171347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:23:17.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:23:18.218 [DEBUG] [Thread-171347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:23:18.218 [DEBUG] [Thread-171347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:23:18.218 [DEBUG] [Thread-171347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:23:18.259 [DEBUG] [Thread-171347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:23:18.259 [DEBUG] [Thread-171347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:23:18.270 [DEBUG] [Thread-171347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:23:18.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:23:18.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:23:18.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:23:18.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:23:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:23:18.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:23:18.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:23:18.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:23:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:23:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.516090 -999.00  +14.10  11.93     95  +13.40 1 3 1 3 1   888    0 0.85 6.10 ----- 11.8 11.9 36.6 15.4 16.8 -0.4 16.7 -0.3 16.4 -0.2 16.6 0.3
2026-04-11T14:23:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:23:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:23:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.516090
2026-04-11T14:23:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:23:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:23:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:23:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:23:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:23:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:23:05', tmtdew=0.071945, humidity=99.816, cloud=0.0, wind=10.0588, temperature=13.9602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:23:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:23:18.296 [DEBUG] [Thread-171347] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:23:18.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:23:18.389 [DEBUG] [Thread-171350] [transport.py] [_log()] starting thread (client mode): 0xae563dc0
2026-04-11T14:23:18.389 [DEBUG] [Thread-171350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:23:18.404 [DEBUG] [Thread-171350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:23:18.404 [INFO] [Thread-171350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:23:18.411 [DEBUG] [Thread-171350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] client lang: <none>
2026-04-11T14:23:18.412 [DEBUG] [Thread-171350] [transport.py] [_log()] server lang: <none>
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] kex follows: False
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] Compression: none
2026-04-11T14:23:18.413 [DEBUG] [Thread-171350] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:23:18.471 [DEBUG] [Thread-171350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:23:18.471 [DEBUG] [Thread-171350] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:23:18.472 [DEBUG] [Thread-171350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:23:18.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:23:18.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:23:18.530 [DEBUG] [Thread-171350] [transport.py] [_log()] userauth is OK
2026-04-11T14:23:18.530 [DEBUG] [Thread-171350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:23:18.531 [DEBUG] [Thread-171350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:23:18.531 [DEBUG] [Thread-171350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:23:18.531 [DEBUG] [Thread-171350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:23:18.550 [INFO] [Thread-171350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:23:18.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:23:18.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:23:19.352 [DEBUG] [Thread-171350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:23:19.352 [DEBUG] [Thread-171350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:23:19.400 [DEBUG] [Thread-171350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:23:19.401 [DEBUG] [Thread-171350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:23:19.409 [DEBUG] [Thread-171350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:23:19.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:23:19.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-04-11T14:23:19.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-04-11T14:23:19.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:23:19.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:23:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:23:19.441 [DEBUG] [Thread-171350] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:23:23.951 [DEBUG] [Thread-171352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:39.002 [DEBUG] [Thread-171353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:23:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:23:49.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:23:49.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-04-11T14:23:50.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 23, 41), 0.05939, 99.5325, 0.0, 9.67032, 14.3878, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:23:50.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:23:41
2026-04-11T14:23:51.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:23:51.250 [DEBUG] [Thread-171354] [transport.py] [_log()] starting thread (client mode): 0xae561b40
2026-04-11T14:23:51.250 [DEBUG] [Thread-171354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:23:51.264 [DEBUG] [Thread-171354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:23:51.264 [INFO] [Thread-171354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:23:51.266 [DEBUG] [Thread-171354] [transport.py] [_log()] client lang: <none>
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] server lang: <none>
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] kex follows: False
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] Compression: none
2026-04-11T14:23:51.267 [DEBUG] [Thread-171354] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:23:51.283 [DEBUG] [Thread-171354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:23:51.284 [DEBUG] [Thread-171354] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:23:51.284 [DEBUG] [Thread-171354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:23:51.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:23:51.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:23:51.286 [DEBUG] [Thread-171354] [transport.py] [_log()] userauth is OK
2026-04-11T14:23:51.286 [DEBUG] [Thread-171354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:23:51.286 [DEBUG] [Thread-171354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:23:51.286 [DEBUG] [Thread-171354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:23:51.287 [DEBUG] [Thread-171354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:23:51.311 [INFO] [Thread-171354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:23:51.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:23:51.956 [DEBUG] [Thread-171354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:23:51.956 [DEBUG] [Thread-171354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:23:51.956 [DEBUG] [Thread-171354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:23:51.997 [DEBUG] [Thread-171354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:23:51.997 [DEBUG] [Thread-171354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:23:52.001 [DEBUG] [Thread-171354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:23:52.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:23:52.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:23:52.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:23:52.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:23:52.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:23:52.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:23:52.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:23:52.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:23:52.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:23:52.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.516437 -999.00  +14.10  12.12     95  +13.40 1 3 1 3 1   888    0 0.87 6.51 ----- 12.9 12.1 41.0 14.5 16.9 -0.6 16.7 -0.7 16.3 -0.6 16.6 0.4
2026-04-11T14:23:52.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:23:52.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:23:52.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.516437
2026-04-11T14:23:52.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:23:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:23:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:23:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:23:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:23:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:23:41', tmtdew=0.05939, humidity=99.5325, cloud=0.0, wind=9.67032, temperature=14.3878, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:23:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:23:52.022 [DEBUG] [Thread-171354] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:23:52.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:23:52.116 [DEBUG] [Thread-171357] [transport.py] [_log()] starting thread (client mode): 0xae5b3fa0
2026-04-11T14:23:52.116 [DEBUG] [Thread-171357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:23:52.130 [DEBUG] [Thread-171357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:23:52.130 [INFO] [Thread-171357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] client lang: <none>
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] server lang: <none>
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] kex follows: False
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:23:52.138 [DEBUG] [Thread-171357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:23:52.139 [DEBUG] [Thread-171357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:23:52.139 [DEBUG] [Thread-171357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:23:52.139 [DEBUG] [Thread-171357] [transport.py] [_log()] Compression: none
2026-04-11T14:23:52.139 [DEBUG] [Thread-171357] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:23:52.202 [DEBUG] [Thread-171357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:23:52.203 [DEBUG] [Thread-171357] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:23:52.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:23:52.204 [DEBUG] [Thread-171357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:23:52.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:23:52.258 [DEBUG] [Thread-171357] [transport.py] [_log()] userauth is OK
2026-04-11T14:23:52.258 [DEBUG] [Thread-171357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:23:52.259 [DEBUG] [Thread-171357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:23:52.259 [DEBUG] [Thread-171357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:23:52.259 [DEBUG] [Thread-171357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:23:52.283 [INFO] [Thread-171357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:23:52.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:23:52.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:23:53.118 [DEBUG] [Thread-171357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:23:53.118 [DEBUG] [Thread-171357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:23:53.166 [DEBUG] [Thread-171357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:23:53.166 [DEBUG] [Thread-171357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:23:53.175 [DEBUG] [Thread-171357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:23:53.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:23:53.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:23:53.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:23:53.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:23:53.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:23:53.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:23:53.212 [DEBUG] [Thread-171357] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:23:54.040 [DEBUG] [Thread-171359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:09.100 [DEBUG] [Thread-171360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:09.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:09.998 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:10.130 [DEBUG] [Thread-171361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:23.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:24:23.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:24:23.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-04-11T14:24:24.140 [DEBUG] [Thread-171362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 24, 17), 0.024555, 99.7993, 0.0, 11.5942, 13.9438, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:24:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:24:17
2026-04-11T14:24:24.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:24:25.105 [DEBUG] [Thread-171363] [transport.py] [_log()] starting thread (client mode): 0xa79b7af0
2026-04-11T14:24:25.105 [DEBUG] [Thread-171363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:24:25.124 [DEBUG] [Thread-171363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:24:25.124 [INFO] [Thread-171363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] client lang: <none>
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] server lang: <none>
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] kex follows: False
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:24:25.126 [DEBUG] [Thread-171363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:24:25.127 [DEBUG] [Thread-171363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:24:25.127 [DEBUG] [Thread-171363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:24:25.127 [DEBUG] [Thread-171363] [transport.py] [_log()] Compression: none
2026-04-11T14:24:25.127 [DEBUG] [Thread-171363] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:24:25.141 [DEBUG] [Thread-171363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:24:25.141 [DEBUG] [Thread-171363] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:24:25.142 [DEBUG] [Thread-171363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:24:25.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:24:25.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:24:25.144 [DEBUG] [Thread-171363] [transport.py] [_log()] userauth is OK
2026-04-11T14:24:25.144 [DEBUG] [Thread-171363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:24:25.144 [DEBUG] [Thread-171363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:24:25.144 [DEBUG] [Thread-171363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:24:25.144 [DEBUG] [Thread-171363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:24:25.179 [INFO] [Thread-171363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:24:25.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:24:25.832 [DEBUG] [Thread-171363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:24:25.833 [DEBUG] [Thread-171363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:24:25.833 [DEBUG] [Thread-171363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:24:25.874 [DEBUG] [Thread-171363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:24:25.875 [DEBUG] [Thread-171363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:24:25.878 [DEBUG] [Thread-171363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:24:25.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:24:25.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:24:25.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:24:25.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:24:25.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:24:25.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:24:25.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:24:25.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:24:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:24:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.516784 -999.00  +14.20  11.13     95  +13.50 1 3 1 3 1   888    0 0.86 6.04 ----- 11.2 11.1 41.2 15.1 16.8 -0.1 16.8 -0.6 16.4 0.1 16.7 0.5
2026-04-11T14:24:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:24:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:24:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.516784
2026-04-11T14:24:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:24:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:24:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:24:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:24:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:24:25.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:24:17', tmtdew=0.024555, humidity=99.7993, cloud=0.0, wind=11.5942, temperature=13.9438, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:24:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:24:25.916 [DEBUG] [Thread-171363] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:24:26.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:24:26.015 [DEBUG] [Thread-171366] [transport.py] [_log()] starting thread (client mode): 0xae561570
2026-04-11T14:24:26.015 [DEBUG] [Thread-171366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:24:26.030 [DEBUG] [Thread-171366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:24:26.031 [INFO] [Thread-171366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:24:26.038 [DEBUG] [Thread-171366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] client lang: <none>
2026-04-11T14:24:26.039 [DEBUG] [Thread-171366] [transport.py] [_log()] server lang: <none>
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] kex follows: False
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] Compression: none
2026-04-11T14:24:26.040 [DEBUG] [Thread-171366] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:24:26.099 [DEBUG] [Thread-171366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:24:26.099 [DEBUG] [Thread-171366] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:24:26.100 [DEBUG] [Thread-171366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:24:26.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:24:26.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:24:26.158 [DEBUG] [Thread-171366] [transport.py] [_log()] userauth is OK
2026-04-11T14:24:26.158 [DEBUG] [Thread-171366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:24:26.159 [DEBUG] [Thread-171366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:24:26.159 [DEBUG] [Thread-171366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:24:26.159 [DEBUG] [Thread-171366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:24:26.179 [INFO] [Thread-171366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:24:26.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:24:26.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:24:27.010 [DEBUG] [Thread-171366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:24:27.010 [DEBUG] [Thread-171366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:24:27.058 [DEBUG] [Thread-171366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:24:27.058 [DEBUG] [Thread-171366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:24:27.067 [DEBUG] [Thread-171366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:24:27.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:24:27.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-04-11T14:24:27.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:24:27.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:24:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:24:27.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:24:27.105 [DEBUG] [Thread-171366] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:24:39.179 [DEBUG] [Thread-171368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:54.245 [DEBUG] [Thread-171369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:24:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:24:57.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:24:57.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:24:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 24, 17), 0.024555, 99.7993, 0.0, 11.5942, 13.9438, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:24:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:24:17
2026-04-11T14:24:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:24:58.955 [DEBUG] [Thread-171370] [transport.py] [_log()] starting thread (client mode): 0xae5e4f40
2026-04-11T14:24:58.955 [DEBUG] [Thread-171370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:24:58.975 [DEBUG] [Thread-171370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:24:58.975 [INFO] [Thread-171370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:24:58.978 [DEBUG] [Thread-171370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] client lang: <none>
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] server lang: <none>
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] kex follows: False
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] Compression: none
2026-04-11T14:24:58.979 [DEBUG] [Thread-171370] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:24:58.998 [DEBUG] [Thread-171370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:24:58.998 [DEBUG] [Thread-171370] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:24:58.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:24:58.999 [DEBUG] [Thread-171370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:24:59.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:24:59.001 [DEBUG] [Thread-171370] [transport.py] [_log()] userauth is OK
2026-04-11T14:24:59.001 [DEBUG] [Thread-171370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:24:59.001 [DEBUG] [Thread-171370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:24:59.002 [DEBUG] [Thread-171370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:24:59.002 [DEBUG] [Thread-171370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:24:59.019 [INFO] [Thread-171370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:24:59.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:24:59.676 [DEBUG] [Thread-171370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:24:59.676 [DEBUG] [Thread-171370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:24:59.676 [DEBUG] [Thread-171370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:24:59.718 [DEBUG] [Thread-171370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:24:59.718 [DEBUG] [Thread-171370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:24:59.720 [DEBUG] [Thread-171370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:24:59.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:24:59.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:24:59.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:24:59.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:24:59.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:24:59.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:24:59.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:24:59.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:24:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:24:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.517131 -999.00  +14.30  11.16     95  +13.60 1 3 1 3 1   888    0 0.83 5.75 ----- 11.0 11.2 19.4 12.8 16.9 0.2 16.8 -0.1 16.6 0.4 16.8 0.7
2026-04-11T14:24:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:24:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:24:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.517131
2026-04-11T14:24:59.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:24:59.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:24:59.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:24:59.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:24:59.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:24:59.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:24:17', tmtdew=0.024555, humidity=99.7993, cloud=0.0, wind=11.5942, temperature=13.9438, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:24:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:24:59.746 [DEBUG] [Thread-171370] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:24:59.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:24:59.849 [DEBUG] [Thread-171373] [transport.py] [_log()] starting thread (client mode): 0xb0feaa70
2026-04-11T14:24:59.849 [DEBUG] [Thread-171373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:24:59.864 [DEBUG] [Thread-171373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:24:59.864 [INFO] [Thread-171373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:24:59.872 [DEBUG] [Thread-171373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:24:59.872 [DEBUG] [Thread-171373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] client lang: <none>
2026-04-11T14:24:59.873 [DEBUG] [Thread-171373] [transport.py] [_log()] server lang: <none>
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] kex follows: False
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] Compression: none
2026-04-11T14:24:59.874 [DEBUG] [Thread-171373] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:24:59.930 [DEBUG] [Thread-171373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:24:59.931 [DEBUG] [Thread-171373] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:24:59.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:24:59.932 [DEBUG] [Thread-171373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:24:59.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:24:59.986 [DEBUG] [Thread-171373] [transport.py] [_log()] userauth is OK
2026-04-11T14:24:59.986 [DEBUG] [Thread-171373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:24:59.986 [DEBUG] [Thread-171373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:24:59.986 [DEBUG] [Thread-171373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:24:59.986 [DEBUG] [Thread-171373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:25:00.015 [INFO] [Thread-171373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:25:00.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:25:00.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:25:00.825 [DEBUG] [Thread-171373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:25:00.826 [DEBUG] [Thread-171373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:25:00.873 [DEBUG] [Thread-171373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:25:00.874 [DEBUG] [Thread-171373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:25:00.883 [DEBUG] [Thread-171373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:25:00.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:25:00.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:25:00.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-04-11T14:25:00.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:25:00.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:25:00.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:25:00.918 [DEBUG] [Thread-171373] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:25:09.280 [DEBUG] [Thread-171375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:25:10.140 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:25:10.141 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:25:10.179 [DEBUG] [Thread-171376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:25:24.320 [DEBUG] [Thread-171377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:25:30.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:25:30.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:25:30.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-04-11T14:25:32.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 24, 52), 0.04908, 99.5986, 0.0, 7.80048, 14.4871, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:25:32.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:24:52
2026-04-11T14:25:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:25:32.798 [DEBUG] [Thread-171378] [transport.py] [_log()] starting thread (client mode): 0xae535120
2026-04-11T14:25:32.798 [DEBUG] [Thread-171378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:25:32.811 [DEBUG] [Thread-171378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:25:32.811 [INFO] [Thread-171378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] client lang: <none>
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] server lang: <none>
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] kex follows: False
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:25:32.814 [DEBUG] [Thread-171378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:25:32.815 [DEBUG] [Thread-171378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:25:32.815 [DEBUG] [Thread-171378] [transport.py] [_log()] Compression: none
2026-04-11T14:25:32.815 [DEBUG] [Thread-171378] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:25:32.830 [DEBUG] [Thread-171378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:25:32.830 [DEBUG] [Thread-171378] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:25:32.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:25:32.832 [DEBUG] [Thread-171378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:25:32.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:25:32.834 [DEBUG] [Thread-171378] [transport.py] [_log()] userauth is OK
2026-04-11T14:25:32.834 [DEBUG] [Thread-171378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:25:32.834 [DEBUG] [Thread-171378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:25:32.834 [DEBUG] [Thread-171378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:25:32.834 [DEBUG] [Thread-171378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:25:32.852 [INFO] [Thread-171378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:25:32.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:25:33.480 [DEBUG] [Thread-171378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:25:33.481 [DEBUG] [Thread-171378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:25:33.481 [DEBUG] [Thread-171378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:25:33.521 [DEBUG] [Thread-171378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:25:33.521 [DEBUG] [Thread-171378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:25:33.525 [DEBUG] [Thread-171378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:25:33.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:25:33.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:25:33.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:25:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:25:33.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:25:33.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:25:33.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:25:33.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:25:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:25:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.517478 -999.00  +14.20  11.24     95  +13.40 1 3 1 3 1   888    0 0.83 5.48 ----- 8.9 11.2 22.6 12.3 16.9 -0.1 16.8 -0.1 16.6 0.0 16.8 0.7
2026-04-11T14:25:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:25:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:25:33.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.517478
2026-04-11T14:25:33.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:25:33.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:25:33.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:25:33.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:25:33.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:25:33.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:24:52', tmtdew=0.04908, humidity=99.5986, cloud=0.0, wind=7.80048, temperature=14.4871, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:25:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:25:33.549 [DEBUG] [Thread-171378] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:25:33.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:25:33.654 [DEBUG] [Thread-171381] [transport.py] [_log()] starting thread (client mode): 0xae50b520
2026-04-11T14:25:33.654 [DEBUG] [Thread-171381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:25:33.669 [DEBUG] [Thread-171381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:25:33.669 [INFO] [Thread-171381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] client lang: <none>
2026-04-11T14:25:33.676 [DEBUG] [Thread-171381] [transport.py] [_log()] server lang: <none>
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] kex follows: False
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] Compression: none
2026-04-11T14:25:33.677 [DEBUG] [Thread-171381] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:25:33.732 [DEBUG] [Thread-171381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:25:33.732 [DEBUG] [Thread-171381] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:25:33.732 [DEBUG] [Thread-171381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:25:33.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:25:33.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:25:33.790 [DEBUG] [Thread-171381] [transport.py] [_log()] userauth is OK
2026-04-11T14:25:33.790 [DEBUG] [Thread-171381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:25:33.790 [DEBUG] [Thread-171381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:25:33.790 [DEBUG] [Thread-171381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:25:33.790 [DEBUG] [Thread-171381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:25:33.809 [INFO] [Thread-171381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:25:33.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:25:33.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:25:34.634 [DEBUG] [Thread-171381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:25:34.635 [DEBUG] [Thread-171381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:25:34.683 [DEBUG] [Thread-171381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:25:34.683 [DEBUG] [Thread-171381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:25:34.692 [DEBUG] [Thread-171381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:25:34.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:25:34.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:25:34.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-04-11T14:25:34.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:25:34.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:25:34.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:25:34.725 [DEBUG] [Thread-171381] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:25:39.356 [DEBUG] [Thread-171383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:25:54.407 [DEBUG] [Thread-171384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:26:04.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:26:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:26:06.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 25, 27), 0.01688, 99.8486, 0.0, 8.70048, 14.0598, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:26:06.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:25:27
2026-04-11T14:26:06.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:26:06.575 [DEBUG] [Thread-171385] [transport.py] [_log()] starting thread (client mode): 0xae562a10
2026-04-11T14:26:06.575 [DEBUG] [Thread-171385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:26:06.594 [DEBUG] [Thread-171385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:26:06.595 [INFO] [Thread-171385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:26:06.598 [DEBUG] [Thread-171385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:26:06.598 [DEBUG] [Thread-171385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] client lang: <none>
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] server lang: <none>
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] kex follows: False
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:26:06.599 [DEBUG] [Thread-171385] [transport.py] [_log()] Compression: none
2026-04-11T14:26:06.600 [DEBUG] [Thread-171385] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:26:06.617 [DEBUG] [Thread-171385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:26:06.618 [DEBUG] [Thread-171385] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:26:06.618 [DEBUG] [Thread-171385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:26:06.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:26:06.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:26:06.620 [DEBUG] [Thread-171385] [transport.py] [_log()] userauth is OK
2026-04-11T14:26:06.620 [DEBUG] [Thread-171385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:26:06.620 [DEBUG] [Thread-171385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:26:06.621 [DEBUG] [Thread-171385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:26:06.621 [DEBUG] [Thread-171385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:26:06.640 [INFO] [Thread-171385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:26:06.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:26:07.274 [DEBUG] [Thread-171385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:26:07.275 [DEBUG] [Thread-171385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:26:07.275 [DEBUG] [Thread-171385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:26:07.315 [DEBUG] [Thread-171385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:26:07.315 [DEBUG] [Thread-171385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:26:07.317 [DEBUG] [Thread-171385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:26:07.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:26:07.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:26:07.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:26:07.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:26:07.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:26:07.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:26:07.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.517826 -999.00  +14.40   9.00     95  +13.70 1 3 1 3 1   888    0 0.82 5.14 ----- 9.0 9.0 46.2 10.3 17.1 0.3 16.8 -0.2 16.6 0.4 16.9 0.8
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.517826
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:26:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:25:27', tmtdew=0.01688, humidity=99.8486, cloud=0.0, wind=8.70048, temperature=14.0598, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:25:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:26:07.338 [DEBUG] [Thread-171385] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:26:07.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:26:07.420 [DEBUG] [Thread-171388] [transport.py] [_log()] starting thread (client mode): 0xae5362f0
2026-04-11T14:26:07.420 [DEBUG] [Thread-171388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:26:07.435 [DEBUG] [Thread-171388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:26:07.435 [INFO] [Thread-171388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:26:07.442 [DEBUG] [Thread-171388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] client lang: <none>
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] server lang: <none>
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] kex follows: False
2026-04-11T14:26:07.443 [DEBUG] [Thread-171388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:26:07.444 [DEBUG] [Thread-171388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:26:07.444 [DEBUG] [Thread-171388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:26:07.444 [DEBUG] [Thread-171388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:26:07.444 [DEBUG] [Thread-171388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:26:07.444 [DEBUG] [Thread-171388] [transport.py] [_log()] Compression: none
2026-04-11T14:26:07.444 [DEBUG] [Thread-171388] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:26:07.502 [DEBUG] [Thread-171388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:26:07.502 [DEBUG] [Thread-171388] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:26:07.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:26:07.503 [DEBUG] [Thread-171388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:26:07.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:26:07.558 [DEBUG] [Thread-171388] [transport.py] [_log()] userauth is OK
2026-04-11T14:26:07.558 [DEBUG] [Thread-171388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:26:07.558 [DEBUG] [Thread-171388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:26:07.558 [DEBUG] [Thread-171388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:26:07.559 [DEBUG] [Thread-171388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:26:07.577 [INFO] [Thread-171388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:26:07.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:26:07.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:26:08.415 [DEBUG] [Thread-171388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:26:08.415 [DEBUG] [Thread-171388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:26:08.462 [DEBUG] [Thread-171388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:26:08.463 [DEBUG] [Thread-171388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:26:08.471 [DEBUG] [Thread-171388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:26:08.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:26:08.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:26:08.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-04-11T14:26:08.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:26:08.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:26:08.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:26:08.505 [DEBUG] [Thread-171388] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:26:09.444 [DEBUG] [Thread-171390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:10.230 [DEBUG] [Thread-171391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:10.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:10.285 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:24.497 [DEBUG] [Thread-171392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:26:38.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:26:38.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-04-11T14:26:39.534 [DEBUG] [Thread-171393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:26:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 26, 3), 0.02206, 99.8154, 0.0, 10.0058, 13.9935, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:26:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:26:03
2026-04-11T14:26:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:26:40.415 [DEBUG] [Thread-171394] [transport.py] [_log()] starting thread (client mode): 0xae535ae0
2026-04-11T14:26:40.415 [DEBUG] [Thread-171394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:26:40.429 [DEBUG] [Thread-171394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:26:40.429 [INFO] [Thread-171394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] client lang: <none>
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] server lang: <none>
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] kex follows: False
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] Compression: none
2026-04-11T14:26:40.433 [DEBUG] [Thread-171394] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:26:40.441 [DEBUG] [Thread-171394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:26:40.441 [DEBUG] [Thread-171394] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:26:40.441 [DEBUG] [Thread-171394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:26:40.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:26:40.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:26:40.442 [DEBUG] [Thread-171394] [transport.py] [_log()] userauth is OK
2026-04-11T14:26:40.442 [DEBUG] [Thread-171394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:26:40.442 [DEBUG] [Thread-171394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:26:40.442 [DEBUG] [Thread-171394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:26:40.442 [DEBUG] [Thread-171394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:26:40.471 [INFO] [Thread-171394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:26:40.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:26:41.089 [DEBUG] [Thread-171394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:26:41.090 [DEBUG] [Thread-171394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:26:41.090 [DEBUG] [Thread-171394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:26:41.131 [DEBUG] [Thread-171394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:26:41.131 [DEBUG] [Thread-171394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:26:41.137 [DEBUG] [Thread-171394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:26:41.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:26:41.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:26:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:26:41.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:26:41.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:26:41.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:26:41.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:26:41.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:26:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:26:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.518173 -999.00  +14.30  10.47     95  +13.50 1 3 1 3 1   888    0 0.84 5.16 ----- 9.5 10.5 48.6 12.7 17.0 0.0 16.9 0.3 16.6 -0.7 16.9 0.5
2026-04-11T14:26:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:26:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:26:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.518173
2026-04-11T14:26:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:26:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:26:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:26:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:26:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:26:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:26:03', tmtdew=0.02206, humidity=99.8154, cloud=0.0, wind=10.0058, temperature=13.9935, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:26:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:26:41.164 [DEBUG] [Thread-171394] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:26:41.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:26:41.257 [DEBUG] [Thread-171397] [transport.py] [_log()] starting thread (client mode): 0xae5628c0
2026-04-11T14:26:41.257 [DEBUG] [Thread-171397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:26:41.271 [DEBUG] [Thread-171397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:26:41.271 [INFO] [Thread-171397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:26:41.279 [DEBUG] [Thread-171397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:26:41.279 [DEBUG] [Thread-171397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:26:41.279 [DEBUG] [Thread-171397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:26:41.279 [DEBUG] [Thread-171397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] client lang: <none>
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] server lang: <none>
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] kex follows: False
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:26:41.280 [DEBUG] [Thread-171397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:26:41.281 [DEBUG] [Thread-171397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:26:41.281 [DEBUG] [Thread-171397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:26:41.281 [DEBUG] [Thread-171397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:26:41.281 [DEBUG] [Thread-171397] [transport.py] [_log()] Compression: none
2026-04-11T14:26:41.281 [DEBUG] [Thread-171397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:26:41.340 [DEBUG] [Thread-171397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:26:41.341 [DEBUG] [Thread-171397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:26:41.341 [DEBUG] [Thread-171397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:26:41.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:26:41.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:26:41.398 [DEBUG] [Thread-171397] [transport.py] [_log()] userauth is OK
2026-04-11T14:26:41.399 [DEBUG] [Thread-171397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:26:41.399 [DEBUG] [Thread-171397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:26:41.399 [DEBUG] [Thread-171397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:26:41.399 [DEBUG] [Thread-171397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:26:41.421 [INFO] [Thread-171397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:26:41.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:26:41.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:26:42.275 [DEBUG] [Thread-171397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:26:42.275 [DEBUG] [Thread-171397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:26:42.323 [DEBUG] [Thread-171397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:26:42.323 [DEBUG] [Thread-171397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:26:42.332 [DEBUG] [Thread-171397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:26:42.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:26:42.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-04-11T14:26:42.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-04-11T14:26:42.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:26:42.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:26:42.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:26:42.370 [DEBUG] [Thread-171397] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:26:54.573 [DEBUG] [Thread-171399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:09.635 [DEBUG] [Thread-171400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:10.291 [DEBUG] [Thread-171401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:10.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:10.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:27:12.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:27:12.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-04-11T14:27:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 26, 38), 0.0389, 99.664, 0.0, 5.57784, 14.5197, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:27:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:26:38
2026-04-11T14:27:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:27:14.216 [DEBUG] [Thread-171402] [transport.py] [_log()] starting thread (client mode): 0xae5b36a0
2026-04-11T14:27:14.216 [DEBUG] [Thread-171402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:27:14.228 [DEBUG] [Thread-171402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:27:14.228 [INFO] [Thread-171402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] client lang: <none>
2026-04-11T14:27:14.229 [DEBUG] [Thread-171402] [transport.py] [_log()] server lang: <none>
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] kex follows: False
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] Compression: none
2026-04-11T14:27:14.230 [DEBUG] [Thread-171402] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:27:14.241 [DEBUG] [Thread-171402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:27:14.241 [DEBUG] [Thread-171402] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:27:14.241 [DEBUG] [Thread-171402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:27:14.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:27:14.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:27:14.243 [DEBUG] [Thread-171402] [transport.py] [_log()] userauth is OK
2026-04-11T14:27:14.243 [DEBUG] [Thread-171402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:27:14.243 [DEBUG] [Thread-171402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:27:14.243 [DEBUG] [Thread-171402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:27:14.243 [DEBUG] [Thread-171402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:27:14.259 [INFO] [Thread-171402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:27:14.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:27:14.835 [DEBUG] [Thread-171402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:27:14.835 [DEBUG] [Thread-171402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:27:14.836 [DEBUG] [Thread-171402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:27:14.876 [DEBUG] [Thread-171402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:27:14.876 [DEBUG] [Thread-171402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:27:14.881 [DEBUG] [Thread-171402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:27:14.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:27:14.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:27:14.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:27:14.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:27:14.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:27:14.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:27:14.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:27:14.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:27:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:27:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.518520 -999.00  +14.20   8.03     95  +13.40 1 3 1 3 1   888    0 0.82 5.13 ----- 8.3 8.0 50.8 10.0 17.0 0.0 16.9 -0.0 16.7 0.0 17.0 0.6
2026-04-11T14:27:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:27:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:27:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.518520
2026-04-11T14:27:14.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:27:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:27:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:27:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:27:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:27:14.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:26:38', tmtdew=0.0389, humidity=99.664, cloud=0.0, wind=5.57784, temperature=14.5197, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:26:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:27:14.899 [DEBUG] [Thread-171402] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:27:14.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:27:14.993 [DEBUG] [Thread-171405] [transport.py] [_log()] starting thread (client mode): 0xae535030
2026-04-11T14:27:14.993 [DEBUG] [Thread-171405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:27:15.010 [DEBUG] [Thread-171405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:27:15.010 [INFO] [Thread-171405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:27:15.017 [DEBUG] [Thread-171405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] client lang: <none>
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] server lang: <none>
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] kex follows: False
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:27:15.018 [DEBUG] [Thread-171405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:27:15.019 [DEBUG] [Thread-171405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:27:15.019 [DEBUG] [Thread-171405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:27:15.019 [DEBUG] [Thread-171405] [transport.py] [_log()] Compression: none
2026-04-11T14:27:15.019 [DEBUG] [Thread-171405] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:27:15.078 [DEBUG] [Thread-171405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:27:15.078 [DEBUG] [Thread-171405] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:27:15.079 [DEBUG] [Thread-171405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:27:15.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:27:15.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:27:15.135 [DEBUG] [Thread-171405] [transport.py] [_log()] userauth is OK
2026-04-11T14:27:15.135 [DEBUG] [Thread-171405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:27:15.135 [DEBUG] [Thread-171405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:27:15.135 [DEBUG] [Thread-171405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:27:15.135 [DEBUG] [Thread-171405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:27:15.155 [INFO] [Thread-171405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:27:15.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:27:15.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:27:15.995 [DEBUG] [Thread-171405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:27:15.995 [DEBUG] [Thread-171405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:27:16.043 [DEBUG] [Thread-171405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:27:16.043 [DEBUG] [Thread-171405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:27:16.053 [DEBUG] [Thread-171405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:27:16.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:27:16.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-04-11T14:27:16.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-04-11T14:27:16.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:27:16.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:27:16.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:27:16.092 [DEBUG] [Thread-171405] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:27:24.670 [DEBUG] [Thread-171407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:39.723 [DEBUG] [Thread-171408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:27:46.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:27:46.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:27:46.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-04-11T14:27:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 27, 14), 0.06692, 99.8482, 0.0, 9.03564, 14.0927, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:27:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:27:14
2026-04-11T14:27:47.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:27:48.016 [DEBUG] [Thread-171409] [transport.py] [_log()] starting thread (client mode): 0xa7953250
2026-04-11T14:27:48.016 [DEBUG] [Thread-171409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:27:48.027 [DEBUG] [Thread-171409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:27:48.027 [INFO] [Thread-171409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] client lang: <none>
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] server lang: <none>
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] kex follows: False
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] Compression: none
2026-04-11T14:27:48.029 [DEBUG] [Thread-171409] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:27:48.041 [DEBUG] [Thread-171409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:27:48.041 [DEBUG] [Thread-171409] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:27:48.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:27:48.042 [DEBUG] [Thread-171409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:27:48.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:27:48.043 [DEBUG] [Thread-171409] [transport.py] [_log()] userauth is OK
2026-04-11T14:27:48.043 [DEBUG] [Thread-171409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:27:48.043 [DEBUG] [Thread-171409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:27:48.044 [DEBUG] [Thread-171409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:27:48.044 [DEBUG] [Thread-171409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:27:48.061 [INFO] [Thread-171409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:27:48.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:27:48.686 [DEBUG] [Thread-171409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:27:48.686 [DEBUG] [Thread-171409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:27:48.686 [DEBUG] [Thread-171409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:27:48.727 [DEBUG] [Thread-171409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:27:48.727 [DEBUG] [Thread-171409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:27:48.730 [DEBUG] [Thread-171409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:27:48.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:27:48.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:27:48.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:27:48.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:27:48.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:27:48.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:27:48.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:27:48.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:27:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:27:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.519215 -999.00  +14.40  10.99     95  +13.60 1 3 1 3 1   888    0 0.82 4.81 ----- 9.5 11.0 20.0 13.8 17.2 0.5 17.1 0.5 16.9 0.5 17.2 0.7
2026-04-11T14:27:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:27:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:27:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.519215
2026-04-11T14:27:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:27:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:27:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:27:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:27:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:27:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:27:14', tmtdew=0.06692, humidity=99.8482, cloud=0.0, wind=9.03564, temperature=14.0927, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:27:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:27:48.756 [DEBUG] [Thread-171409] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:27:48.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:27:48.852 [DEBUG] [Thread-171412] [transport.py] [_log()] starting thread (client mode): 0xae50b520
2026-04-11T14:27:48.852 [DEBUG] [Thread-171412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:27:48.867 [DEBUG] [Thread-171412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:27:48.867 [INFO] [Thread-171412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:27:48.875 [DEBUG] [Thread-171412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:27:48.875 [DEBUG] [Thread-171412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:27:48.875 [DEBUG] [Thread-171412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:27:48.875 [DEBUG] [Thread-171412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:48.875 [DEBUG] [Thread-171412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:27:48.875 [DEBUG] [Thread-171412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] client lang: <none>
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] server lang: <none>
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] kex follows: False
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] Compression: none
2026-04-11T14:27:48.876 [DEBUG] [Thread-171412] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:27:48.942 [DEBUG] [Thread-171412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:27:48.943 [DEBUG] [Thread-171412] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:27:48.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:27:48.944 [DEBUG] [Thread-171412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:27:48.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:27:48.998 [DEBUG] [Thread-171412] [transport.py] [_log()] userauth is OK
2026-04-11T14:27:48.998 [DEBUG] [Thread-171412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:27:48.998 [DEBUG] [Thread-171412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:27:48.999 [DEBUG] [Thread-171412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:27:48.999 [DEBUG] [Thread-171412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:27:49.016 [INFO] [Thread-171412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:27:49.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:27:49.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:27:49.828 [DEBUG] [Thread-171412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:27:49.829 [DEBUG] [Thread-171412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:27:49.877 [DEBUG] [Thread-171412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:27:49.877 [DEBUG] [Thread-171412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:27:49.886 [DEBUG] [Thread-171412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:27:49.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:27:49.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-04-11T14:27:49.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-04-11T14:27:49.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:27:49.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:27:49.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:27:49.919 [DEBUG] [Thread-171412] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:27:54.760 [DEBUG] [Thread-171414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:09.816 [DEBUG] [Thread-171415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:10.345 [DEBUG] [Thread-171416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:10.565 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:10.567 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:19.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:28:19.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:28:19.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-04-11T14:28:21.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 27, 49), 0.03895, 99.6633, 0.0, 14.292, 14.7181, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:28:21.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:27:49
2026-04-11T14:28:21.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:28:21.770 [DEBUG] [Thread-171417] [transport.py] [_log()] starting thread (client mode): 0xae5b2c50
2026-04-11T14:28:21.770 [DEBUG] [Thread-171417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:28:21.786 [DEBUG] [Thread-171417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:28:21.787 [INFO] [Thread-171417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] client lang: <none>
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] server lang: <none>
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] kex follows: False
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:28:21.790 [DEBUG] [Thread-171417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:28:21.791 [DEBUG] [Thread-171417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:28:21.791 [DEBUG] [Thread-171417] [transport.py] [_log()] Compression: none
2026-04-11T14:28:21.791 [DEBUG] [Thread-171417] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:28:21.809 [DEBUG] [Thread-171417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:28:21.809 [DEBUG] [Thread-171417] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:28:21.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:28:21.810 [DEBUG] [Thread-171417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:28:21.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:28:21.813 [DEBUG] [Thread-171417] [transport.py] [_log()] userauth is OK
2026-04-11T14:28:21.813 [DEBUG] [Thread-171417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:28:21.813 [DEBUG] [Thread-171417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:28:21.813 [DEBUG] [Thread-171417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:28:21.813 [DEBUG] [Thread-171417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:28:21.837 [INFO] [Thread-171417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:28:21.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:28:22.463 [DEBUG] [Thread-171417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:28:22.464 [DEBUG] [Thread-171417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:28:22.464 [DEBUG] [Thread-171417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:28:22.504 [DEBUG] [Thread-171417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:28:22.504 [DEBUG] [Thread-171417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:28:22.507 [DEBUG] [Thread-171417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:28:22.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:28:22.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:28:22.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:28:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:28:22.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:28:22.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:28:22.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:28:22.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:28:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:28:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.519562 -999.00  +14.20  11.82     94  +13.40 1 3 1 3 1   888    0 0.83 5.03 ----- 12.8 11.8 26.4 14.5 17.3 0.6 17.2 0.5 17.0 0.7 17.2 1.3
2026-04-11T14:28:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:28:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:28:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.519562
2026-04-11T14:28:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:28:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:28:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:28:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:28:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:28:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:27:49', tmtdew=0.03895, humidity=99.6633, cloud=0.0, wind=14.292, temperature=14.7181, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:28:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:28:22.534 [DEBUG] [Thread-171417] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:28:22.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:28:22.631 [DEBUG] [Thread-171420] [transport.py] [_log()] starting thread (client mode): 0xb0feb8e0
2026-04-11T14:28:22.631 [DEBUG] [Thread-171420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:28:22.645 [DEBUG] [Thread-171420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:28:22.646 [INFO] [Thread-171420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:28:22.653 [DEBUG] [Thread-171420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:28:22.653 [DEBUG] [Thread-171420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] client lang: <none>
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] server lang: <none>
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] kex follows: False
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] Compression: none
2026-04-11T14:28:22.654 [DEBUG] [Thread-171420] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:28:22.710 [DEBUG] [Thread-171420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:28:22.711 [DEBUG] [Thread-171420] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:28:22.711 [DEBUG] [Thread-171420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:28:22.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:28:22.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:28:22.766 [DEBUG] [Thread-171420] [transport.py] [_log()] userauth is OK
2026-04-11T14:28:22.767 [DEBUG] [Thread-171420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:28:22.767 [DEBUG] [Thread-171420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:28:22.767 [DEBUG] [Thread-171420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:28:22.767 [DEBUG] [Thread-171420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:28:22.786 [INFO] [Thread-171420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:28:22.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:28:22.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:28:23.586 [DEBUG] [Thread-171420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:28:23.586 [DEBUG] [Thread-171420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:28:23.634 [DEBUG] [Thread-171420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:28:23.634 [DEBUG] [Thread-171420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:28:23.643 [DEBUG] [Thread-171420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:28:23.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:28:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:28:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:28:23.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:28:23.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:28:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:28:23.682 [DEBUG] [Thread-171420] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:28:24.853 [DEBUG] [Thread-171422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:39.905 [DEBUG] [Thread-171423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:28:53.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:28:53.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:28:54.943 [DEBUG] [Thread-171424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:28:54.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 28, 25), 0.074635, 99.7985, 0.0, 9.31716, 14.0925, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:28:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:28:25
2026-04-11T14:28:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:28:55.541 [DEBUG] [Thread-171425] [transport.py] [_log()] starting thread (client mode): 0xae5369b0
2026-04-11T14:28:55.541 [DEBUG] [Thread-171425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:28:55.560 [DEBUG] [Thread-171425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:28:55.560 [INFO] [Thread-171425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:28:55.563 [DEBUG] [Thread-171425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] client lang: <none>
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] server lang: <none>
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] kex follows: False
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] Compression: none
2026-04-11T14:28:55.564 [DEBUG] [Thread-171425] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:28:55.581 [DEBUG] [Thread-171425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:28:55.582 [DEBUG] [Thread-171425] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:28:55.582 [DEBUG] [Thread-171425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:28:55.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:28:55.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:28:55.585 [DEBUG] [Thread-171425] [transport.py] [_log()] userauth is OK
2026-04-11T14:28:55.585 [DEBUG] [Thread-171425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:28:55.585 [DEBUG] [Thread-171425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:28:55.585 [DEBUG] [Thread-171425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:28:55.585 [DEBUG] [Thread-171425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:28:55.621 [INFO] [Thread-171425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:28:55.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:28:56.257 [DEBUG] [Thread-171425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:28:56.257 [DEBUG] [Thread-171425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:28:56.258 [DEBUG] [Thread-171425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:28:56.298 [DEBUG] [Thread-171425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:28:56.298 [DEBUG] [Thread-171425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:28:56.301 [DEBUG] [Thread-171425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:28:56.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:28:56.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:28:56.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:28:56.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:28:56.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:28:56.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:28:56.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:28:56.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.519909 -999.00  +14.30  13.25     95  +13.50 1 3 1 3 1   888    0 0.85 5.24 ----- 12.7 13.2 53.4 16.5 17.4 0.5 17.2 0.1 17.0 0.1 17.3 0.9
2026-04-11T14:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:28:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:28:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.519909
2026-04-11T14:28:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:28:25', tmtdew=0.074635, humidity=99.7985, cloud=0.0, wind=9.31716, temperature=14.0925, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:28:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:28:56.326 [DEBUG] [Thread-171425] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:28:56.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:28:56.420 [DEBUG] [Thread-171428] [transport.py] [_log()] starting thread (client mode): 0xa79532b0
2026-04-11T14:28:56.420 [DEBUG] [Thread-171428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:28:56.434 [DEBUG] [Thread-171428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:28:56.434 [INFO] [Thread-171428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:28:56.441 [DEBUG] [Thread-171428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:28:56.441 [DEBUG] [Thread-171428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:28:56.441 [DEBUG] [Thread-171428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] client lang: <none>
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] server lang: <none>
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] kex follows: False
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:28:56.442 [DEBUG] [Thread-171428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:28:56.443 [DEBUG] [Thread-171428] [transport.py] [_log()] Compression: none
2026-04-11T14:28:56.443 [DEBUG] [Thread-171428] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:28:56.499 [DEBUG] [Thread-171428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:28:56.500 [DEBUG] [Thread-171428] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:28:56.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:28:56.501 [DEBUG] [Thread-171428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:28:56.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:28:56.558 [DEBUG] [Thread-171428] [transport.py] [_log()] userauth is OK
2026-04-11T14:28:56.559 [DEBUG] [Thread-171428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:28:56.559 [DEBUG] [Thread-171428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:28:56.559 [DEBUG] [Thread-171428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:28:56.559 [DEBUG] [Thread-171428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:28:56.578 [INFO] [Thread-171428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:28:56.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:28:56.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:28:57.427 [DEBUG] [Thread-171428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:28:57.428 [DEBUG] [Thread-171428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:28:57.475 [DEBUG] [Thread-171428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:28:57.475 [DEBUG] [Thread-171428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:28:57.484 [DEBUG] [Thread-171428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:28:57.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:28:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:28:57.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-04-11T14:28:57.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:28:57.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:28:57.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:28:57.521 [DEBUG] [Thread-171428] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:29:09.980 [DEBUG] [Thread-171430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:29:10.396 [DEBUG] [Thread-171431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:29:10.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:29:10.708 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:29:25.035 [DEBUG] [Thread-171432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:29:27.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:29:27.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:29:27.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-04-11T14:29:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 29), 0.016855, 99.8483, 0.0, 10.2704, 14.2589, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:29:28.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:29:00
2026-04-11T14:29:29.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:29:29.348 [DEBUG] [Thread-171433] [transport.py] [_log()] starting thread (client mode): 0xae5b1960
2026-04-11T14:29:29.348 [DEBUG] [Thread-171433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:29:29.368 [DEBUG] [Thread-171433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:29:29.368 [INFO] [Thread-171433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] client lang: <none>
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] server lang: <none>
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] kex follows: False
2026-04-11T14:29:29.369 [DEBUG] [Thread-171433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:29:29.370 [DEBUG] [Thread-171433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:29:29.370 [DEBUG] [Thread-171433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:29:29.370 [DEBUG] [Thread-171433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:29:29.370 [DEBUG] [Thread-171433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:29:29.370 [DEBUG] [Thread-171433] [transport.py] [_log()] Compression: none
2026-04-11T14:29:29.370 [DEBUG] [Thread-171433] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:29:29.378 [DEBUG] [Thread-171433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:29:29.378 [DEBUG] [Thread-171433] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:29:29.379 [DEBUG] [Thread-171433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:29:29.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:29:29.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:29:29.380 [DEBUG] [Thread-171433] [transport.py] [_log()] userauth is OK
2026-04-11T14:29:29.381 [DEBUG] [Thread-171433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:29:29.381 [DEBUG] [Thread-171433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:29:29.381 [DEBUG] [Thread-171433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:29:29.381 [DEBUG] [Thread-171433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:29:29.416 [INFO] [Thread-171433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:29:29.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:29:30.069 [DEBUG] [Thread-171433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:29:30.070 [DEBUG] [Thread-171433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:29:30.070 [DEBUG] [Thread-171433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:29:30.111 [DEBUG] [Thread-171433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:29:30.111 [DEBUG] [Thread-171433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:29:30.115 [DEBUG] [Thread-171433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:29:30.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:29:30.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:29:30.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:29:30.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:29:30.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:29:30.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:29:30.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:29:30.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:29:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:29:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.520256 -999.00  +14.40   8.59     95  +13.70 1 3 1 3 1   888    0 0.85 5.53 ----- 9.1 8.6 30.8 14.8 17.5 0.7 17.2 -0.2 17.1 0.9 17.4 1.2
2026-04-11T14:29:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:29:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:29:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.520256
2026-04-11T14:29:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:29:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:29:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:29:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:29:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:29:30.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:29:00', tmtdew=0.016855, humidity=99.8483, cloud=0.0, wind=10.2704, temperature=14.2589, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:29:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:29:30.145 [DEBUG] [Thread-171433] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:29:30.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:29:30.249 [DEBUG] [Thread-171436] [transport.py] [_log()] starting thread (client mode): 0xae535b10
2026-04-11T14:29:30.249 [DEBUG] [Thread-171436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:29:30.267 [DEBUG] [Thread-171436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:29:30.267 [INFO] [Thread-171436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:29:30.278 [DEBUG] [Thread-171436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:29:30.278 [DEBUG] [Thread-171436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:29:30.278 [DEBUG] [Thread-171436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] client lang: <none>
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] server lang: <none>
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] kex follows: False
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] Compression: none
2026-04-11T14:29:30.279 [DEBUG] [Thread-171436] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:29:30.337 [DEBUG] [Thread-171436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:29:30.338 [DEBUG] [Thread-171436] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:29:30.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:29:30.339 [DEBUG] [Thread-171436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:29:30.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:29:30.394 [DEBUG] [Thread-171436] [transport.py] [_log()] userauth is OK
2026-04-11T14:29:30.394 [DEBUG] [Thread-171436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:29:30.394 [DEBUG] [Thread-171436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:29:30.394 [DEBUG] [Thread-171436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:29:30.394 [DEBUG] [Thread-171436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:29:30.412 [INFO] [Thread-171436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:29:30.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:29:30.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:29:31.238 [DEBUG] [Thread-171436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:29:31.239 [DEBUG] [Thread-171436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:29:31.288 [DEBUG] [Thread-171436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:29:31.288 [DEBUG] [Thread-171436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:29:31.298 [DEBUG] [Thread-171436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:29:31.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:29:31.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-04-11T14:29:31.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-04-11T14:29:31.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:29:31.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:29:31.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:29:31.336 [DEBUG] [Thread-171436] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:29:40.073 [DEBUG] [Thread-171438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:29:55.123 [DEBUG] [Thread-171439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:30:01.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:30:01.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:30:02.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 29, 36), 0.04416, 99.6296, 0.0, 11.0462, 14.751, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:30:02.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:29:36
2026-04-11T14:30:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:30:03.195 [DEBUG] [Thread-171440] [transport.py] [_log()] starting thread (client mode): 0xae5353c0
2026-04-11T14:30:03.195 [DEBUG] [Thread-171440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:30:03.217 [DEBUG] [Thread-171440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:30:03.217 [INFO] [Thread-171440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] client lang: <none>
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] server lang: <none>
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] kex follows: False
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:30:03.220 [DEBUG] [Thread-171440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:30:03.221 [DEBUG] [Thread-171440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:30:03.221 [DEBUG] [Thread-171440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:30:03.221 [DEBUG] [Thread-171440] [transport.py] [_log()] Compression: none
2026-04-11T14:30:03.221 [DEBUG] [Thread-171440] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:30:03.238 [DEBUG] [Thread-171440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:30:03.239 [DEBUG] [Thread-171440] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:30:03.239 [DEBUG] [Thread-171440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:30:03.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:30:03.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:30:03.241 [DEBUG] [Thread-171440] [transport.py] [_log()] userauth is OK
2026-04-11T14:30:03.241 [DEBUG] [Thread-171440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:30:03.242 [DEBUG] [Thread-171440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:30:03.242 [DEBUG] [Thread-171440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:30:03.242 [DEBUG] [Thread-171440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:30:03.266 [INFO] [Thread-171440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:30:03.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:30:05.846 [DEBUG] [Thread-171440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:30:05.846 [DEBUG] [Thread-171440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:30:05.847 [DEBUG] [Thread-171440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:30:05.887 [DEBUG] [Thread-171440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:30:05.887 [DEBUG] [Thread-171440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:30:05.891 [DEBUG] [Thread-171440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:30:05.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:30:05.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:30:05.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:30:05.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:30:05.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:30:05.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:30:05.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:30:05.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:30:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:30:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.520604 -999.00  +14.50  14.45     95  +13.70 1 3 1 3 1   888    0 0.85 5.26 ----- 13.3 14.4 52.2 16.0 17.5 0.0 17.3 0.8 17.1 -1.0 17.4 1.0
2026-04-11T14:30:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:30:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:30:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.520604
2026-04-11T14:30:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:30:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:30:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:30:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:30:05.919 [DEBUG] [Thread-171440] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:30:05.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:30:05.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:29:36', tmtdew=0.04416, humidity=99.6296, cloud=0.0, wind=11.0462, temperature=14.751, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:29:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:30:06.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:30:06.012 [DEBUG] [Thread-171443] [transport.py] [_log()] starting thread (client mode): 0xae5b2560
2026-04-11T14:30:06.012 [DEBUG] [Thread-171443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:30:06.027 [DEBUG] [Thread-171443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:30:06.027 [INFO] [Thread-171443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:30:06.034 [DEBUG] [Thread-171443] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] client lang: <none>
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] server lang: <none>
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] kex follows: False
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] Compression: none
2026-04-11T14:30:06.035 [DEBUG] [Thread-171443] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:30:06.094 [DEBUG] [Thread-171443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:30:06.095 [DEBUG] [Thread-171443] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:30:06.095 [DEBUG] [Thread-171443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:30:06.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:30:06.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:30:06.150 [DEBUG] [Thread-171443] [transport.py] [_log()] userauth is OK
2026-04-11T14:30:06.151 [DEBUG] [Thread-171443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:30:06.151 [DEBUG] [Thread-171443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:30:06.151 [DEBUG] [Thread-171443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:30:06.151 [DEBUG] [Thread-171443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:30:06.171 [INFO] [Thread-171443] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:30:06.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:30:06.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:30:07.059 [DEBUG] [Thread-171443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:30:07.059 [DEBUG] [Thread-171443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:30:07.107 [DEBUG] [Thread-171443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:30:07.108 [DEBUG] [Thread-171443] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:30:07.119 [DEBUG] [Thread-171443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:30:07.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:30:07.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:30:07.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:30:07.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:30:07.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:30:07.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:30:07.158 [DEBUG] [Thread-171443] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:30:10.157 [DEBUG] [Thread-171445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:10.445 [DEBUG] [Thread-171446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:10.849 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:10.851 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:25.217 [DEBUG] [Thread-171447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:37.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:30:37.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:30:37.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-04-11T14:30:38.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 30, 11), 0.069475, 99.8314, 0.0, 9.5112, 14.3418, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:30:38.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:30:11
2026-04-11T14:30:38.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:30:38.971 [DEBUG] [Thread-171448] [transport.py] [_log()] starting thread (client mode): 0xae536260
2026-04-11T14:30:38.972 [DEBUG] [Thread-171448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:30:38.987 [DEBUG] [Thread-171448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:30:38.987 [INFO] [Thread-171448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] client lang: <none>
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] server lang: <none>
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] kex follows: False
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] Compression: none
2026-04-11T14:30:38.989 [DEBUG] [Thread-171448] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:30:39.006 [DEBUG] [Thread-171448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:30:39.007 [DEBUG] [Thread-171448] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:30:39.008 [DEBUG] [Thread-171448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:30:39.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:30:39.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:30:39.010 [DEBUG] [Thread-171448] [transport.py] [_log()] userauth is OK
2026-04-11T14:30:39.010 [DEBUG] [Thread-171448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:30:39.010 [DEBUG] [Thread-171448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:30:39.010 [DEBUG] [Thread-171448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:30:39.010 [DEBUG] [Thread-171448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:30:39.035 [INFO] [Thread-171448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:30:39.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:30:39.645 [DEBUG] [Thread-171448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:30:39.645 [DEBUG] [Thread-171448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:30:39.646 [DEBUG] [Thread-171448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:30:39.686 [DEBUG] [Thread-171448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:30:39.686 [DEBUG] [Thread-171448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:30:39.689 [DEBUG] [Thread-171448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:30:39.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:30:39.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:30:39.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:30:39.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:30:39.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:30:39.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:30:39.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:30:39.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:30:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:30:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.520950 -999.00  +14.30  10.94     94  +13.50 1 3 1 3 1   888    0 0.86 5.79 ----- 12.1 10.9 52.4 16.2 17.4 -0.0 17.3 -1.1 17.1 -0.3 17.4 0.6
2026-04-11T14:30:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:30:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:30:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.520950
2026-04-11T14:30:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:30:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:30:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:30:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:30:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:30:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:30:11', tmtdew=0.069475, humidity=99.8314, cloud=0.0, wind=9.5112, temperature=14.3418, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:30:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:30:39.716 [DEBUG] [Thread-171448] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:30:39.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:30:39.810 [DEBUG] [Thread-171451] [transport.py] [_log()] starting thread (client mode): 0xae5b36a0
2026-04-11T14:30:39.810 [DEBUG] [Thread-171451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:30:39.824 [DEBUG] [Thread-171451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:30:39.825 [INFO] [Thread-171451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:30:39.832 [DEBUG] [Thread-171451] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:30:39.833 [DEBUG] [Thread-171451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] client lang: <none>
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] server lang: <none>
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] kex follows: False
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:30:39.834 [DEBUG] [Thread-171451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:30:39.835 [DEBUG] [Thread-171451] [transport.py] [_log()] Compression: none
2026-04-11T14:30:39.835 [DEBUG] [Thread-171451] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:30:39.890 [DEBUG] [Thread-171451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:30:39.890 [DEBUG] [Thread-171451] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:30:39.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:30:39.891 [DEBUG] [Thread-171451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:30:39.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:30:39.946 [DEBUG] [Thread-171451] [transport.py] [_log()] userauth is OK
2026-04-11T14:30:39.947 [DEBUG] [Thread-171451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:30:39.947 [DEBUG] [Thread-171451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:30:39.947 [DEBUG] [Thread-171451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:30:39.947 [DEBUG] [Thread-171451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:30:39.967 [INFO] [Thread-171451] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:30:39.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:30:39.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:30:40.255 [DEBUG] [Thread-171453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:30:40.758 [DEBUG] [Thread-171451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:30:40.758 [DEBUG] [Thread-171451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:30:40.806 [DEBUG] [Thread-171451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:30:40.806 [DEBUG] [Thread-171451] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:30:40.815 [DEBUG] [Thread-171451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:30:40.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:30:40.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-04-11T14:30:40.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-04-11T14:30:40.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:30:40.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:30:40.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:30:40.849 [DEBUG] [Thread-171451] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:30:55.310 [DEBUG] [Thread-171454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:10.349 [DEBUG] [Thread-171455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:10.506 [DEBUG] [Thread-171456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:31:10.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:31:10.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-04-11T14:31:10.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:10.997 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 30, 46), 0.05446, 99.5636, 0.0, 11.399, 14.6848, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:31:12.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:30:46
2026-04-11T14:31:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:31:12.685 [DEBUG] [Thread-171457] [transport.py] [_log()] starting thread (client mode): 0xa79533a0
2026-04-11T14:31:12.685 [DEBUG] [Thread-171457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:31:12.706 [DEBUG] [Thread-171457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:31:12.706 [INFO] [Thread-171457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:31:12.709 [DEBUG] [Thread-171457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:31:12.709 [DEBUG] [Thread-171457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] client lang: <none>
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] server lang: <none>
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] kex follows: False
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] Compression: none
2026-04-11T14:31:12.710 [DEBUG] [Thread-171457] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:31:12.729 [DEBUG] [Thread-171457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:31:12.729 [DEBUG] [Thread-171457] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:31:12.730 [DEBUG] [Thread-171457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:31:12.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:31:12.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:31:12.732 [DEBUG] [Thread-171457] [transport.py] [_log()] userauth is OK
2026-04-11T14:31:12.733 [DEBUG] [Thread-171457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:31:12.733 [DEBUG] [Thread-171457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:31:12.733 [DEBUG] [Thread-171457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:31:12.733 [DEBUG] [Thread-171457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:31:12.769 [INFO] [Thread-171457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:31:12.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:31:13.407 [DEBUG] [Thread-171457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:31:13.407 [DEBUG] [Thread-171457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:31:13.407 [DEBUG] [Thread-171457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:31:13.448 [DEBUG] [Thread-171457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:31:13.448 [DEBUG] [Thread-171457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:31:13.451 [DEBUG] [Thread-171457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:31:13.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:31:13.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:31:13.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:31:13.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:31:13.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:31:13.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:31:13.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:31:13.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:31:13.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:31:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.521298 -999.00  +14.40  11.95     94  +13.60 1 3 1 3 1   888    0 0.91 6.43 ----- 10.8 11.9 37.0 14.2 17.5 -0.2 17.3 -0.2 17.1 0.1 17.4 0.7
2026-04-11T14:31:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:31:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:31:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.521298
2026-04-11T14:31:13.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:31:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:31:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:31:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:31:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:31:13.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:30:46', tmtdew=0.05446, humidity=99.5636, cloud=0.0, wind=11.399, temperature=14.6848, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:30:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:31:13.478 [DEBUG] [Thread-171457] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:31:13.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:31:13.568 [DEBUG] [Thread-171460] [transport.py] [_log()] starting thread (client mode): 0xa7951cc0
2026-04-11T14:31:13.568 [DEBUG] [Thread-171460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:31:13.583 [DEBUG] [Thread-171460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:31:13.583 [INFO] [Thread-171460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] client lang: <none>
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] server lang: <none>
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] kex follows: False
2026-04-11T14:31:13.591 [DEBUG] [Thread-171460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:31:13.592 [DEBUG] [Thread-171460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:31:13.592 [DEBUG] [Thread-171460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:31:13.592 [DEBUG] [Thread-171460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:31:13.592 [DEBUG] [Thread-171460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:31:13.592 [DEBUG] [Thread-171460] [transport.py] [_log()] Compression: none
2026-04-11T14:31:13.592 [DEBUG] [Thread-171460] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:31:13.654 [DEBUG] [Thread-171460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:31:13.655 [DEBUG] [Thread-171460] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:31:13.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:31:13.656 [DEBUG] [Thread-171460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:31:13.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:31:13.711 [DEBUG] [Thread-171460] [transport.py] [_log()] userauth is OK
2026-04-11T14:31:13.711 [DEBUG] [Thread-171460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:31:13.711 [DEBUG] [Thread-171460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:31:13.711 [DEBUG] [Thread-171460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:31:13.711 [DEBUG] [Thread-171460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:31:13.730 [INFO] [Thread-171460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:31:13.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:31:13.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:31:14.573 [DEBUG] [Thread-171460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:31:14.573 [DEBUG] [Thread-171460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:31:14.621 [DEBUG] [Thread-171460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:31:14.621 [DEBUG] [Thread-171460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:31:14.633 [DEBUG] [Thread-171460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:31:14.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:31:14.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-04-11T14:31:14.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-04-11T14:31:14.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:31:14.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:31:14.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:31:14.670 [DEBUG] [Thread-171460] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:31:25.388 [DEBUG] [Thread-171462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:40.439 [DEBUG] [Thread-171463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:31:44.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:31:44.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:31:44.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-04-11T14:31:45.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 31, 22), 0.07983, 99.7652, 0.0, 10.7122, 14.193, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:31:45.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:31:22
2026-04-11T14:31:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:31:46.467 [DEBUG] [Thread-171464] [transport.py] [_log()] starting thread (client mode): 0xa7950a90
2026-04-11T14:31:46.467 [DEBUG] [Thread-171464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:31:46.487 [DEBUG] [Thread-171464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:31:46.487 [INFO] [Thread-171464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] client lang: <none>
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] server lang: <none>
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] kex follows: False
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:31:46.491 [DEBUG] [Thread-171464] [transport.py] [_log()] Compression: none
2026-04-11T14:31:46.492 [DEBUG] [Thread-171464] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:31:46.509 [DEBUG] [Thread-171464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:31:46.509 [DEBUG] [Thread-171464] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:31:46.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:31:46.510 [DEBUG] [Thread-171464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:31:46.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:31:46.513 [DEBUG] [Thread-171464] [transport.py] [_log()] userauth is OK
2026-04-11T14:31:46.513 [DEBUG] [Thread-171464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:31:46.513 [DEBUG] [Thread-171464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:31:46.513 [DEBUG] [Thread-171464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:31:46.513 [DEBUG] [Thread-171464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:31:46.529 [INFO] [Thread-171464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:31:46.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:31:47.113 [DEBUG] [Thread-171464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:31:47.113 [DEBUG] [Thread-171464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:31:47.114 [DEBUG] [Thread-171464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:31:47.154 [DEBUG] [Thread-171464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:31:47.154 [DEBUG] [Thread-171464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:31:47.158 [DEBUG] [Thread-171464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:31:47.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:31:47.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:31:47.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:31:47.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:31:47.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:31:47.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:31:47.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:31:47.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:31:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:31:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.521645 -999.00  +14.40  12.28     94  +13.60 1 3 1 3 1   888    0 0.89 6.49 ----- 12.0 12.3 23.2 13.9 17.5 -0.0 17.4 -0.2 17.1 0.2 17.5 0.8
2026-04-11T14:31:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:31:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:31:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.521645
2026-04-11T14:31:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:31:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:31:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:31:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:31:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:31:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:31:22', tmtdew=0.07983, humidity=99.7652, cloud=0.0, wind=10.7122, temperature=14.193, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:31:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:31:47.188 [DEBUG] [Thread-171464] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:31:47.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:31:47.282 [DEBUG] [Thread-171467] [transport.py] [_log()] starting thread (client mode): 0xae537c70
2026-04-11T14:31:47.282 [DEBUG] [Thread-171467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:31:47.298 [DEBUG] [Thread-171467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:31:47.299 [INFO] [Thread-171467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:31:47.306 [DEBUG] [Thread-171467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:31:47.307 [DEBUG] [Thread-171467] [transport.py] [_log()] client lang: <none>
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] server lang: <none>
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] kex follows: False
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:31:47.308 [DEBUG] [Thread-171467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:31:47.309 [DEBUG] [Thread-171467] [transport.py] [_log()] Compression: none
2026-04-11T14:31:47.309 [DEBUG] [Thread-171467] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:31:47.368 [DEBUG] [Thread-171467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:31:47.368 [DEBUG] [Thread-171467] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:31:47.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:31:47.369 [DEBUG] [Thread-171467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:31:47.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:31:47.426 [DEBUG] [Thread-171467] [transport.py] [_log()] userauth is OK
2026-04-11T14:31:47.427 [DEBUG] [Thread-171467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:31:47.427 [DEBUG] [Thread-171467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:31:47.427 [DEBUG] [Thread-171467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:31:47.427 [DEBUG] [Thread-171467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:31:47.446 [INFO] [Thread-171467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:31:47.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:31:47.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:31:48.284 [DEBUG] [Thread-171467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:31:48.284 [DEBUG] [Thread-171467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:31:48.332 [DEBUG] [Thread-171467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:31:48.332 [DEBUG] [Thread-171467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:31:48.341 [DEBUG] [Thread-171467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:31:48.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:31:48.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-04-11T14:31:48.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-04-11T14:31:48.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:31:48.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:31:48.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:31:48.380 [DEBUG] [Thread-171467] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:31:55.477 [DEBUG] [Thread-171469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:10.525 [DEBUG] [Thread-171470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:10.559 [DEBUG] [Thread-171471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:11.138 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:11.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:18.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:32:18.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:32:18.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-04-11T14:32:19.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 31, 58), 0.079825, 99.7653, 0.0, 10.4645, 14.1599, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:32:19.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:31:58
2026-04-11T14:32:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:32:20.250 [DEBUG] [Thread-171472] [transport.py] [_log()] starting thread (client mode): 0xae5362f0
2026-04-11T14:32:20.250 [DEBUG] [Thread-171472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:32:20.271 [DEBUG] [Thread-171472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:32:20.271 [INFO] [Thread-171472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] client lang: <none>
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] server lang: <none>
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] kex follows: False
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] Compression: none
2026-04-11T14:32:20.274 [DEBUG] [Thread-171472] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:32:20.293 [DEBUG] [Thread-171472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:32:20.294 [DEBUG] [Thread-171472] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:32:20.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:32:20.295 [DEBUG] [Thread-171472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:32:20.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:32:20.297 [DEBUG] [Thread-171472] [transport.py] [_log()] userauth is OK
2026-04-11T14:32:20.297 [DEBUG] [Thread-171472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:32:20.297 [DEBUG] [Thread-171472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:32:20.297 [DEBUG] [Thread-171472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:32:20.298 [DEBUG] [Thread-171472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:32:20.333 [INFO] [Thread-171472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:32:20.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:32:21.022 [DEBUG] [Thread-171472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:32:21.022 [DEBUG] [Thread-171472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:32:21.023 [DEBUG] [Thread-171472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:32:21.063 [DEBUG] [Thread-171472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:32:21.063 [DEBUG] [Thread-171472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:32:21.067 [DEBUG] [Thread-171472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:32:21.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:32:21.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:32:21.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:32:21.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:32:21.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:32:21.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:32:21.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:32:21.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:32:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:32:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.521992 -999.00  +14.40  10.43     94  +13.60 1 3 1 3 1   888    0 0.92 7.12 ----- 10.1 10.4 41.2 12.4 17.5 -0.1 17.3 -0.5 17.1 0.2 17.4 0.6
2026-04-11T14:32:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:32:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:32:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.521992
2026-04-11T14:32:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:32:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:32:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:32:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:32:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:32:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:31:58', tmtdew=0.079825, humidity=99.7653, cloud=0.0, wind=10.4645, temperature=14.1599, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:31:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:32:21.093 [DEBUG] [Thread-171472] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:32:21.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:32:21.192 [DEBUG] [Thread-171475] [transport.py] [_log()] starting thread (client mode): 0xae534670
2026-04-11T14:32:21.192 [DEBUG] [Thread-171475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:32:21.210 [DEBUG] [Thread-171475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:32:21.210 [INFO] [Thread-171475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:32:21.217 [DEBUG] [Thread-171475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] client lang: <none>
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] server lang: <none>
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] kex follows: False
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:32:21.218 [DEBUG] [Thread-171475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:32:21.219 [DEBUG] [Thread-171475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:32:21.219 [DEBUG] [Thread-171475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:32:21.219 [DEBUG] [Thread-171475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:32:21.219 [DEBUG] [Thread-171475] [transport.py] [_log()] Compression: none
2026-04-11T14:32:21.219 [DEBUG] [Thread-171475] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:32:21.278 [DEBUG] [Thread-171475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:32:21.279 [DEBUG] [Thread-171475] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:32:21.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:32:21.280 [DEBUG] [Thread-171475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:32:21.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:32:21.334 [DEBUG] [Thread-171475] [transport.py] [_log()] userauth is OK
2026-04-11T14:32:21.335 [DEBUG] [Thread-171475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:32:21.335 [DEBUG] [Thread-171475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:32:21.335 [DEBUG] [Thread-171475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:32:21.335 [DEBUG] [Thread-171475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:32:21.359 [INFO] [Thread-171475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:32:21.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:32:21.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:32:22.170 [DEBUG] [Thread-171475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:32:22.171 [DEBUG] [Thread-171475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:32:22.219 [DEBUG] [Thread-171475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:32:22.219 [DEBUG] [Thread-171475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:32:22.229 [DEBUG] [Thread-171475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:32:22.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:32:22.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-04-11T14:32:22.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-04-11T14:32:22.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:32:22.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:32:22.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:32:22.265 [DEBUG] [Thread-171475] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:32:25.563 [DEBUG] [Thread-171477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:40.620 [DEBUG] [Thread-171478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:32:52.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:32:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:32:53.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 32, 33), 0.05446, 99.5639, 0.0, 9.74088, 14.5192, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:32:53.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:32:33
2026-04-11T14:32:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:32:54.107 [DEBUG] [Thread-171479] [transport.py] [_log()] starting thread (client mode): 0xa7950a90
2026-04-11T14:32:54.108 [DEBUG] [Thread-171479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:32:54.133 [DEBUG] [Thread-171479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:32:54.133 [INFO] [Thread-171479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:32:54.136 [DEBUG] [Thread-171479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:32:54.137 [DEBUG] [Thread-171479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:32:54.137 [DEBUG] [Thread-171479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:32:54.137 [DEBUG] [Thread-171479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:54.137 [DEBUG] [Thread-171479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:54.137 [DEBUG] [Thread-171479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:54.137 [DEBUG] [Thread-171479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] client lang: <none>
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] server lang: <none>
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] kex follows: False
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:32:54.138 [DEBUG] [Thread-171479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:32:54.139 [DEBUG] [Thread-171479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:32:54.139 [DEBUG] [Thread-171479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:32:54.139 [DEBUG] [Thread-171479] [transport.py] [_log()] Compression: none
2026-04-11T14:32:54.139 [DEBUG] [Thread-171479] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:32:54.160 [DEBUG] [Thread-171479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:32:54.161 [DEBUG] [Thread-171479] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:32:54.162 [DEBUG] [Thread-171479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:32:54.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:32:54.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:32:54.164 [DEBUG] [Thread-171479] [transport.py] [_log()] userauth is OK
2026-04-11T14:32:54.164 [DEBUG] [Thread-171479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:32:54.164 [DEBUG] [Thread-171479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:32:54.164 [DEBUG] [Thread-171479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:32:54.164 [DEBUG] [Thread-171479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:32:54.197 [INFO] [Thread-171479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:32:54.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:32:54.852 [DEBUG] [Thread-171479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:32:54.853 [DEBUG] [Thread-171479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:32:54.853 [DEBUG] [Thread-171479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:32:54.894 [DEBUG] [Thread-171479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:32:54.894 [DEBUG] [Thread-171479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:32:54.897 [DEBUG] [Thread-171479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:32:54.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:32:54.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:32:54.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:32:54.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:32:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:32:54.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:32:54.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:32:54.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:32:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:32:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.522687 -999.00  +14.40  10.73     94  +13.50 1 3 1 3 1   888    0 0.96 7.95 ----- 9.5 10.7 43.8 15.6 17.5 -0.3 17.4 -0.4 17.0 -0.8 17.4 0.4
2026-04-11T14:32:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:32:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:32:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.522687
2026-04-11T14:32:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:32:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:32:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:32:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:32:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:32:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:32:33', tmtdew=0.05446, humidity=99.5639, cloud=0.0, wind=9.74088, temperature=14.5192, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:32:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:32:54.921 [DEBUG] [Thread-171479] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:32:55.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:32:55.014 [DEBUG] [Thread-171482] [transport.py] [_log()] starting thread (client mode): 0xae50b550
2026-04-11T14:32:55.014 [DEBUG] [Thread-171482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:32:55.030 [DEBUG] [Thread-171482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:32:55.031 [INFO] [Thread-171482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:32:55.038 [DEBUG] [Thread-171482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:32:55.038 [DEBUG] [Thread-171482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:32:55.039 [DEBUG] [Thread-171482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:32:55.039 [DEBUG] [Thread-171482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:55.039 [DEBUG] [Thread-171482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:32:55.039 [DEBUG] [Thread-171482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:55.039 [DEBUG] [Thread-171482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] client lang: <none>
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] server lang: <none>
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] kex follows: False
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] Compression: none
2026-04-11T14:32:55.040 [DEBUG] [Thread-171482] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:32:55.098 [DEBUG] [Thread-171482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:32:55.099 [DEBUG] [Thread-171482] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:32:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:32:55.100 [DEBUG] [Thread-171482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:32:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:32:55.154 [DEBUG] [Thread-171482] [transport.py] [_log()] userauth is OK
2026-04-11T14:32:55.154 [DEBUG] [Thread-171482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:32:55.155 [DEBUG] [Thread-171482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:32:55.155 [DEBUG] [Thread-171482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:32:55.155 [DEBUG] [Thread-171482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:32:55.173 [INFO] [Thread-171482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:32:55.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:32:55.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:32:55.659 [DEBUG] [Thread-171484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:32:55.997 [DEBUG] [Thread-171482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:32:55.997 [DEBUG] [Thread-171482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:32:56.045 [DEBUG] [Thread-171482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:32:56.045 [DEBUG] [Thread-171482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:32:56.054 [DEBUG] [Thread-171482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:32:56.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:32:56.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-04-11T14:32:56.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-04-11T14:32:56.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:32:56.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:32:56.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:32:56.092 [DEBUG] [Thread-171482] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:33:10.620 [DEBUG] [Thread-171485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:10.709 [DEBUG] [Thread-171486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:11.280 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:11.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:25.746 [DEBUG] [Thread-171487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:26.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:33:26.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:33:26.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-04-11T14:33:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 33, 8), 0.06955, 99.8313, 0.0, 8.27712, 14.176, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:33:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:33:08
2026-04-11T14:33:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:33:27.924 [DEBUG] [Thread-171488] [transport.py] [_log()] starting thread (client mode): 0xae5365f0
2026-04-11T14:33:27.924 [DEBUG] [Thread-171488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:33:27.945 [DEBUG] [Thread-171488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:33:27.946 [INFO] [Thread-171488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] client lang: <none>
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] server lang: <none>
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] kex follows: False
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] Compression: none
2026-04-11T14:33:27.949 [DEBUG] [Thread-171488] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:33:27.967 [DEBUG] [Thread-171488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:33:27.967 [DEBUG] [Thread-171488] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:33:27.968 [DEBUG] [Thread-171488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:33:27.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:33:27.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:33:27.970 [DEBUG] [Thread-171488] [transport.py] [_log()] userauth is OK
2026-04-11T14:33:27.970 [DEBUG] [Thread-171488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:33:27.970 [DEBUG] [Thread-171488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:33:27.970 [DEBUG] [Thread-171488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:33:27.970 [DEBUG] [Thread-171488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:33:27.988 [INFO] [Thread-171488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:33:27.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:33:28.625 [DEBUG] [Thread-171488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:33:28.626 [DEBUG] [Thread-171488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:33:28.626 [DEBUG] [Thread-171488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:33:28.667 [DEBUG] [Thread-171488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:33:28.667 [DEBUG] [Thread-171488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:33:28.670 [DEBUG] [Thread-171488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:33:28.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:33:28.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:33:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:33:28.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:33:28.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:33:28.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:33:28.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:33:28.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:33:28.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:33:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.523034 -999.00  +14.30  12.23     94  +13.30 1 3 1 3 1   888    0 0.98 8.58 ----- 11.2 12.2 56.6 14.7 17.5 -0.2 17.3 -0.3 17.0 -1.4 17.4 0.4
2026-04-11T14:33:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:33:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:33:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.523034
2026-04-11T14:33:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:33:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:33:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:33:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:33:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:33:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:33:08', tmtdew=0.06955, humidity=99.8313, cloud=0.0, wind=8.27712, temperature=14.176, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:33:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:33:28.696 [DEBUG] [Thread-171488] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:33:28.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:33:28.789 [DEBUG] [Thread-171491] [transport.py] [_log()] starting thread (client mode): 0xae5b2560
2026-04-11T14:33:28.789 [DEBUG] [Thread-171491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:33:28.804 [DEBUG] [Thread-171491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:33:28.804 [INFO] [Thread-171491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] client lang: <none>
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] server lang: <none>
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] kex follows: False
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:33:28.812 [DEBUG] [Thread-171491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:33:28.813 [DEBUG] [Thread-171491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:33:28.813 [DEBUG] [Thread-171491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:33:28.813 [DEBUG] [Thread-171491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:33:28.813 [DEBUG] [Thread-171491] [transport.py] [_log()] Compression: none
2026-04-11T14:33:28.813 [DEBUG] [Thread-171491] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:33:28.869 [DEBUG] [Thread-171491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:33:28.870 [DEBUG] [Thread-171491] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:33:28.870 [DEBUG] [Thread-171491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:33:28.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:33:28.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:33:28.926 [DEBUG] [Thread-171491] [transport.py] [_log()] userauth is OK
2026-04-11T14:33:28.927 [DEBUG] [Thread-171491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:33:28.927 [DEBUG] [Thread-171491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:33:28.927 [DEBUG] [Thread-171491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:33:28.927 [DEBUG] [Thread-171491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:33:28.947 [INFO] [Thread-171491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:33:28.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:33:28.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:33:29.801 [DEBUG] [Thread-171491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:33:29.801 [DEBUG] [Thread-171491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:33:29.848 [DEBUG] [Thread-171491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:33:29.849 [DEBUG] [Thread-171491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:33:29.858 [DEBUG] [Thread-171491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:33:29.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:33:29.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-04-11T14:33:29.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-04-11T14:33:29.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:33:29.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:33:29.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:33:29.892 [DEBUG] [Thread-171491] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:33:40.784 [DEBUG] [Thread-171493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:55.837 [DEBUG] [Thread-171494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:33:59.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:33:59.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:33:59.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-04-11T14:34:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 33, 44), 0.04941, 99.5964, 0.0, 7.37712, 14.5188, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:34:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:33:44
2026-04-11T14:34:01.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:34:01.733 [DEBUG] [Thread-171495] [transport.py] [_log()] starting thread (client mode): 0xb0f437c0
2026-04-11T14:34:01.733 [DEBUG] [Thread-171495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:34:01.753 [DEBUG] [Thread-171495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:34:01.753 [INFO] [Thread-171495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:34:01.756 [DEBUG] [Thread-171495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:34:01.756 [DEBUG] [Thread-171495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:34:01.756 [DEBUG] [Thread-171495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:34:01.756 [DEBUG] [Thread-171495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:01.756 [DEBUG] [Thread-171495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:01.756 [DEBUG] [Thread-171495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] client lang: <none>
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] server lang: <none>
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] kex follows: False
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] Compression: none
2026-04-11T14:34:01.757 [DEBUG] [Thread-171495] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:34:01.768 [DEBUG] [Thread-171495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:34:01.768 [DEBUG] [Thread-171495] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:34:01.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:34:01.769 [DEBUG] [Thread-171495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:34:01.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:34:01.770 [DEBUG] [Thread-171495] [transport.py] [_log()] userauth is OK
2026-04-11T14:34:01.771 [DEBUG] [Thread-171495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:34:01.771 [DEBUG] [Thread-171495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:34:01.771 [DEBUG] [Thread-171495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:34:01.771 [DEBUG] [Thread-171495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:34:01.785 [INFO] [Thread-171495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:34:01.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:34:02.406 [DEBUG] [Thread-171495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:34:02.406 [DEBUG] [Thread-171495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:34:02.406 [DEBUG] [Thread-171495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:34:02.447 [DEBUG] [Thread-171495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:34:02.447 [DEBUG] [Thread-171495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:34:02.450 [DEBUG] [Thread-171495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:34:02.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:34:02.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:34:02.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:34:02.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:34:02.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:34:02.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:34:02.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:34:02.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:34:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:34:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.523381 -999.00  +14.30   9.20     94  +13.40 1 3 1 3 1   888    0 1.04 10.01 ----- 8.4 9.2 46.8 14.2 17.5 -0.0 17.3 -0.9 17.0 -0.3 17.4 0.4
2026-04-11T14:34:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:34:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:34:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.523381
2026-04-11T14:34:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:34:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:34:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:34:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:34:02.479 [DEBUG] [Thread-171495] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:34:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:34:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:33:44', tmtdew=0.04941, humidity=99.5964, cloud=0.0, wind=7.37712, temperature=14.5188, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:33:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:34:02.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:34:02.573 [DEBUG] [Thread-171498] [transport.py] [_log()] starting thread (client mode): 0xb39c6710
2026-04-11T14:34:02.573 [DEBUG] [Thread-171498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:34:02.591 [DEBUG] [Thread-171498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:34:02.592 [INFO] [Thread-171498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:34:02.599 [DEBUG] [Thread-171498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:34:02.599 [DEBUG] [Thread-171498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] client lang: <none>
2026-04-11T14:34:02.600 [DEBUG] [Thread-171498] [transport.py] [_log()] server lang: <none>
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] kex follows: False
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:34:02.601 [DEBUG] [Thread-171498] [transport.py] [_log()] Compression: none
2026-04-11T14:34:02.602 [DEBUG] [Thread-171498] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:34:02.659 [DEBUG] [Thread-171498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:34:02.660 [DEBUG] [Thread-171498] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:34:02.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:34:02.661 [DEBUG] [Thread-171498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:34:02.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:34:02.714 [DEBUG] [Thread-171498] [transport.py] [_log()] userauth is OK
2026-04-11T14:34:02.715 [DEBUG] [Thread-171498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:34:02.715 [DEBUG] [Thread-171498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:34:02.715 [DEBUG] [Thread-171498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:34:02.715 [DEBUG] [Thread-171498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:34:02.737 [INFO] [Thread-171498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:34:02.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:34:02.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:34:03.541 [DEBUG] [Thread-171498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:34:03.541 [DEBUG] [Thread-171498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:34:03.589 [DEBUG] [Thread-171498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:34:03.589 [DEBUG] [Thread-171498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:34:03.599 [DEBUG] [Thread-171498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:34:03.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:34:03.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-04-11T14:34:03.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:34:03.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:34:03.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:34:03.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:34:03.635 [DEBUG] [Thread-171498] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:34:10.679 [DEBUG] [Thread-171500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:34:10.875 [DEBUG] [Thread-171501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:34:11.422 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:34:11.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:34:25.926 [DEBUG] [Thread-171502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:34:33.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:34:33.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:34:33.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:34:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 34, 20), 0.077255, 99.7818, 0.0, 8.4528, 14.1261, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:34:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:34:20
2026-04-11T14:34:35.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:34:35.544 [DEBUG] [Thread-171503] [transport.py] [_log()] starting thread (client mode): 0xa7951360
2026-04-11T14:34:35.544 [DEBUG] [Thread-171503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:34:35.565 [DEBUG] [Thread-171503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:34:35.565 [INFO] [Thread-171503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:35.569 [DEBUG] [Thread-171503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] client lang: <none>
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] server lang: <none>
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] kex follows: False
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] Compression: none
2026-04-11T14:34:35.570 [DEBUG] [Thread-171503] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:34:35.591 [DEBUG] [Thread-171503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:34:35.591 [DEBUG] [Thread-171503] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:34:35.592 [DEBUG] [Thread-171503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:34:35.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:34:35.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:34:35.594 [DEBUG] [Thread-171503] [transport.py] [_log()] userauth is OK
2026-04-11T14:34:35.594 [DEBUG] [Thread-171503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:34:35.594 [DEBUG] [Thread-171503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:34:35.594 [DEBUG] [Thread-171503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:34:35.595 [DEBUG] [Thread-171503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:34:35.620 [INFO] [Thread-171503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:34:35.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:34:36.244 [DEBUG] [Thread-171503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:34:36.245 [DEBUG] [Thread-171503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:34:36.245 [DEBUG] [Thread-171503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:34:36.286 [DEBUG] [Thread-171503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:34:36.286 [DEBUG] [Thread-171503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:34:36.290 [DEBUG] [Thread-171503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:34:36.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:34:36.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:34:36.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:34:36.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:34:36.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:34:36.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:34:36.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:34:36.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:34:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:34:36.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.523728 -999.00  +14.30  13.26     94  +13.40 1 3 1 3 1   888    0 1.10 11.88 ----- 11.1 13.3 59.2 14.5 17.6 0.0 17.4 -0.1 17.0 -1.1 17.4 0.6
2026-04-11T14:34:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:34:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:34:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.523728
2026-04-11T14:34:36.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:34:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:34:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:34:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:34:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:34:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:34:20', tmtdew=0.077255, humidity=99.7818, cloud=0.0, wind=8.4528, temperature=14.1261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:34:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:34:36.310 [DEBUG] [Thread-171503] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:34:36.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:34:36.404 [DEBUG] [Thread-171506] [transport.py] [_log()] starting thread (client mode): 0xa7952590
2026-04-11T14:34:36.404 [DEBUG] [Thread-171506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:34:36.419 [DEBUG] [Thread-171506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:34:36.419 [INFO] [Thread-171506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] client lang: <none>
2026-04-11T14:34:36.427 [DEBUG] [Thread-171506] [transport.py] [_log()] server lang: <none>
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] kex follows: False
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] Compression: none
2026-04-11T14:34:36.428 [DEBUG] [Thread-171506] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:34:36.487 [DEBUG] [Thread-171506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:34:36.487 [DEBUG] [Thread-171506] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:34:36.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:34:36.488 [DEBUG] [Thread-171506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:34:36.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:34:36.553 [DEBUG] [Thread-171506] [transport.py] [_log()] userauth is OK
2026-04-11T14:34:36.554 [DEBUG] [Thread-171506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:34:36.554 [DEBUG] [Thread-171506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:34:36.554 [DEBUG] [Thread-171506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:34:36.554 [DEBUG] [Thread-171506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:34:36.574 [INFO] [Thread-171506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:34:36.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:34:36.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:34:37.400 [DEBUG] [Thread-171506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:34:37.401 [DEBUG] [Thread-171506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:34:37.448 [DEBUG] [Thread-171506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:34:37.448 [DEBUG] [Thread-171506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:34:37.458 [DEBUG] [Thread-171506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:34:37.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:34:37.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-04-11T14:34:37.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:34:37.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:34:37.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:34:37.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:34:37.495 [DEBUG] [Thread-171506] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:34:40.963 [DEBUG] [Thread-171508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:34:56.015 [DEBUG] [Thread-171509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:07.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:35:07.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:35:07.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-04-11T14:35:08.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 34, 55), 0.024685, 99.7983, 0.0, 11.0826, 14.1095, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:35:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:34:55
2026-04-11T14:35:09.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:35:09.375 [DEBUG] [Thread-171510] [transport.py] [_log()] starting thread (client mode): 0xae5e6c50
2026-04-11T14:35:09.375 [DEBUG] [Thread-171510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:35:09.392 [DEBUG] [Thread-171510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:35:09.392 [INFO] [Thread-171510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:35:09.395 [DEBUG] [Thread-171510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] client lang: <none>
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] server lang: <none>
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] kex follows: False
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:35:09.396 [DEBUG] [Thread-171510] [transport.py] [_log()] Compression: none
2026-04-11T14:35:09.397 [DEBUG] [Thread-171510] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:35:09.413 [DEBUG] [Thread-171510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:35:09.414 [DEBUG] [Thread-171510] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:35:09.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:35:09.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:35:09.416 [DEBUG] [Thread-171510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:35:09.416 [DEBUG] [Thread-171510] [transport.py] [_log()] userauth is OK
2026-04-11T14:35:09.416 [DEBUG] [Thread-171510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:35:09.416 [DEBUG] [Thread-171510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:35:09.416 [DEBUG] [Thread-171510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:35:09.416 [DEBUG] [Thread-171510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:35:09.438 [INFO] [Thread-171510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:35:09.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:35:10.368 [DEBUG] [Thread-171510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:35:10.368 [DEBUG] [Thread-171510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:35:10.369 [DEBUG] [Thread-171510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:35:10.409 [DEBUG] [Thread-171510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:35:10.409 [DEBUG] [Thread-171510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:35:10.412 [DEBUG] [Thread-171510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:35:10.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:35:10.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:35:10.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:35:10.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:35:10.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:35:10.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:35:10.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:35:10.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:35:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:35:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.524076 -999.00  +14.40  10.22     94  +13.40 1 3 1 3 1   888    0 1.12 12.65 ----- 9.3 10.2 54.4 12.3 17.5 -0.0 17.4 -0.7 17.0 -1.0 17.4 0.3
2026-04-11T14:35:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:35:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:35:10.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.524076
2026-04-11T14:35:10.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:35:10.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:35:10.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:35:10.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:35:10.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:35:10.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:34:55', tmtdew=0.024685, humidity=99.7983, cloud=0.0, wind=11.0826, temperature=14.1095, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:34:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:35:10.460 [DEBUG] [Thread-171510] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:35:10.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:35:10.554 [DEBUG] [Thread-171513] [transport.py] [_log()] starting thread (client mode): 0xae5e4dc0
2026-04-11T14:35:10.554 [DEBUG] [Thread-171513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:35:10.569 [DEBUG] [Thread-171513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:35:10.569 [INFO] [Thread-171513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:35:10.576 [DEBUG] [Thread-171513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:35:10.576 [DEBUG] [Thread-171513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:35:10.576 [DEBUG] [Thread-171513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:35:10.576 [DEBUG] [Thread-171513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:10.576 [DEBUG] [Thread-171513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] client lang: <none>
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] server lang: <none>
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] kex follows: False
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] Compression: none
2026-04-11T14:35:10.577 [DEBUG] [Thread-171513] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:35:10.634 [DEBUG] [Thread-171513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:35:10.634 [DEBUG] [Thread-171513] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:35:10.635 [DEBUG] [Thread-171513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:35:10.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:35:10.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:35:10.690 [DEBUG] [Thread-171513] [transport.py] [_log()] userauth is OK
2026-04-11T14:35:10.690 [DEBUG] [Thread-171513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:35:10.691 [DEBUG] [Thread-171513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:35:10.691 [DEBUG] [Thread-171513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:35:10.691 [DEBUG] [Thread-171513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:35:10.719 [INFO] [Thread-171513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:35:10.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:35:10.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:35:10.743 [DEBUG] [Thread-171515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:11.051 [DEBUG] [Thread-171516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:11.549 [DEBUG] [Thread-171513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:35:11.549 [DEBUG] [Thread-171513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:35:11.562 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:11.563 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:11.597 [DEBUG] [Thread-171513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:35:11.597 [DEBUG] [Thread-171513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:35:11.606 [DEBUG] [Thread-171513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:35:11.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:35:11.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-04-11T14:35:11.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-04-11T14:35:11.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:35:11.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:35:11.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:35:11.642 [DEBUG] [Thread-171513] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:35:26.106 [DEBUG] [Thread-171517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:41.147 [DEBUG] [Thread-171518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:35:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:35:41.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:35:41.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-04-11T14:35:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 35, 31), 0.024705, 99.7981, 0.0, 10.1477, 14.1756, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:35:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:35:31
2026-04-11T14:35:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:35:43.480 [DEBUG] [Thread-171519] [transport.py] [_log()] starting thread (client mode): 0xae5b0370
2026-04-11T14:35:43.480 [DEBUG] [Thread-171519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:35:43.502 [DEBUG] [Thread-171519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:35:43.502 [INFO] [Thread-171519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:35:43.505 [DEBUG] [Thread-171519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] client lang: <none>
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] server lang: <none>
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] kex follows: False
2026-04-11T14:35:43.506 [DEBUG] [Thread-171519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:35:43.507 [DEBUG] [Thread-171519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:35:43.507 [DEBUG] [Thread-171519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:35:43.507 [DEBUG] [Thread-171519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:35:43.507 [DEBUG] [Thread-171519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:35:43.507 [DEBUG] [Thread-171519] [transport.py] [_log()] Compression: none
2026-04-11T14:35:43.507 [DEBUG] [Thread-171519] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:35:43.524 [DEBUG] [Thread-171519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:35:43.525 [DEBUG] [Thread-171519] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:35:43.526 [DEBUG] [Thread-171519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:35:43.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:35:43.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:35:43.527 [DEBUG] [Thread-171519] [transport.py] [_log()] userauth is OK
2026-04-11T14:35:43.528 [DEBUG] [Thread-171519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:35:43.528 [DEBUG] [Thread-171519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:35:43.528 [DEBUG] [Thread-171519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:35:43.528 [DEBUG] [Thread-171519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:35:43.551 [INFO] [Thread-171519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:35:43.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:35:44.212 [DEBUG] [Thread-171519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:35:44.212 [DEBUG] [Thread-171519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:35:44.212 [DEBUG] [Thread-171519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:35:44.253 [DEBUG] [Thread-171519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:35:44.253 [DEBUG] [Thread-171519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:35:44.257 [DEBUG] [Thread-171519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:35:44.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:35:44.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:35:44.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:35:44.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:35:44.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:35:44.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:35:44.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:35:44.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:35:44.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:35:44.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.524423 -999.00  +14.40  11.12     93  +13.40 1 3 1 3 1   888    0 1.15 13.61 ----- 11.3 11.1 61.6 11.9 17.5 0.1 17.3 -0.6 17.0 -0.4 17.4 0.1
2026-04-11T14:35:44.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:35:44.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:35:44.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.524423
2026-04-11T14:35:44.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:35:44.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:35:44.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:35:44.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:35:44.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:35:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:35:31', tmtdew=0.024705, humidity=99.7981, cloud=0.0, wind=10.1477, temperature=14.1756, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:35:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:35:44.285 [DEBUG] [Thread-171519] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:35:44.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:35:44.378 [DEBUG] [Thread-171522] [transport.py] [_log()] starting thread (client mode): 0xb0fea800
2026-04-11T14:35:44.378 [DEBUG] [Thread-171522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:35:44.393 [DEBUG] [Thread-171522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:35:44.394 [INFO] [Thread-171522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] client lang: <none>
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] server lang: <none>
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] kex follows: False
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] Compression: none
2026-04-11T14:35:44.401 [DEBUG] [Thread-171522] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:35:44.458 [DEBUG] [Thread-171522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:35:44.459 [DEBUG] [Thread-171522] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:35:44.460 [DEBUG] [Thread-171522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:35:44.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:35:44.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:35:44.514 [DEBUG] [Thread-171522] [transport.py] [_log()] userauth is OK
2026-04-11T14:35:44.514 [DEBUG] [Thread-171522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:35:44.515 [DEBUG] [Thread-171522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:35:44.515 [DEBUG] [Thread-171522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:35:44.515 [DEBUG] [Thread-171522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:35:44.534 [INFO] [Thread-171522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:35:44.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:35:44.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:35:45.373 [DEBUG] [Thread-171522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:35:45.373 [DEBUG] [Thread-171522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:35:45.421 [DEBUG] [Thread-171522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:35:45.421 [DEBUG] [Thread-171522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:35:45.430 [DEBUG] [Thread-171522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:35:45.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:35:45.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-04-11T14:35:45.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-04-11T14:35:45.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:35:45.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:35:45.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:35:45.465 [DEBUG] [Thread-171522] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:35:56.187 [DEBUG] [Thread-171524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:10.777 [DEBUG] [Thread-171525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:11.239 [DEBUG] [Thread-171526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:11.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:11.713 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:15.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:36:15.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:36:15.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-04-11T14:36:16.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 36, 6), 0.01697, 99.8478, 0.0, 11.7529, 14.1922, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:36:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:36:06
2026-04-11T14:36:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:36:17.243 [DEBUG] [Thread-171527] [transport.py] [_log()] starting thread (client mode): 0xae5e7e50
2026-04-11T14:36:17.243 [DEBUG] [Thread-171527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:36:17.263 [DEBUG] [Thread-171527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:36:17.264 [INFO] [Thread-171527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] client lang: <none>
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] server lang: <none>
2026-04-11T14:36:17.267 [DEBUG] [Thread-171527] [transport.py] [_log()] kex follows: False
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] Compression: none
2026-04-11T14:36:17.268 [DEBUG] [Thread-171527] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:36:17.286 [DEBUG] [Thread-171527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:36:17.287 [DEBUG] [Thread-171527] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:36:17.287 [DEBUG] [Thread-171527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:36:17.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:36:17.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:36:17.329 [DEBUG] [Thread-171527] [transport.py] [_log()] userauth is OK
2026-04-11T14:36:17.329 [DEBUG] [Thread-171527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:36:17.329 [DEBUG] [Thread-171527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:36:17.329 [DEBUG] [Thread-171527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:36:17.329 [DEBUG] [Thread-171527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:36:17.361 [INFO] [Thread-171527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:36:17.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:36:18.008 [DEBUG] [Thread-171527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:36:18.008 [DEBUG] [Thread-171527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:36:18.008 [DEBUG] [Thread-171527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:36:18.049 [DEBUG] [Thread-171527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:36:18.049 [DEBUG] [Thread-171527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:36:18.051 [DEBUG] [Thread-171527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:36:18.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:36:18.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:36:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:36:18.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:36:18.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:36:18.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:36:18.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:36:18.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:36:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:36:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.524770 -999.00  +14.30   9.30     93  +13.30 1 3 1 3 1   888    0 1.21 15.05 ----- 8.8 9.3 57.4 12.7 17.5 0.3 17.3 -0.8 17.0 -0.8 17.4 0.3
2026-04-11T14:36:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:36:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:36:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.524770
2026-04-11T14:36:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:36:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:36:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:36:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:36:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:36:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:36:06', tmtdew=0.01697, humidity=99.8478, cloud=0.0, wind=11.7529, temperature=14.1922, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:35:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:36:18.072 [DEBUG] [Thread-171527] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:36:18.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:36:18.166 [DEBUG] [Thread-171530] [transport.py] [_log()] starting thread (client mode): 0xae50a1d0
2026-04-11T14:36:18.166 [DEBUG] [Thread-171530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:36:18.181 [DEBUG] [Thread-171530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:36:18.181 [INFO] [Thread-171530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:36:18.188 [DEBUG] [Thread-171530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:36:18.188 [DEBUG] [Thread-171530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] client lang: <none>
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] server lang: <none>
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] kex follows: False
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:36:18.189 [DEBUG] [Thread-171530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:36:18.190 [DEBUG] [Thread-171530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:36:18.190 [DEBUG] [Thread-171530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:36:18.190 [DEBUG] [Thread-171530] [transport.py] [_log()] Compression: none
2026-04-11T14:36:18.190 [DEBUG] [Thread-171530] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:36:18.245 [DEBUG] [Thread-171530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:36:18.246 [DEBUG] [Thread-171530] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:36:18.246 [DEBUG] [Thread-171530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:36:18.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:36:18.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:36:18.301 [DEBUG] [Thread-171530] [transport.py] [_log()] userauth is OK
2026-04-11T14:36:18.302 [DEBUG] [Thread-171530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:36:18.302 [DEBUG] [Thread-171530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:36:18.302 [DEBUG] [Thread-171530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:36:18.302 [DEBUG] [Thread-171530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:36:18.320 [INFO] [Thread-171530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:36: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-04-11T14:36:18.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:36:19.163 [DEBUG] [Thread-171530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:36:19.163 [DEBUG] [Thread-171530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:36:19.211 [DEBUG] [Thread-171530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:36:19.212 [DEBUG] [Thread-171530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:36:19.220 [DEBUG] [Thread-171530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:36:19.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:36:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:36:19.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-04-11T14:36:19.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:36:19.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:36:19.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:36:19.253 [DEBUG] [Thread-171530] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:36:26.275 [DEBUG] [Thread-171532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:41.332 [DEBUG] [Thread-171533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:36:49.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:36:49.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:36:49.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:36:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 36, 42), 0.03916, 99.662, 0.0, 8.43552, 14.6841, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:36:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:36:42
2026-04-11T14:36:50.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:36:51.103 [DEBUG] [Thread-171534] [transport.py] [_log()] starting thread (client mode): 0xae562020
2026-04-11T14:36:51.103 [DEBUG] [Thread-171534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:36:51.123 [DEBUG] [Thread-171534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:36:51.123 [INFO] [Thread-171534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] client lang: <none>
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] server lang: <none>
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] kex follows: False
2026-04-11T14:36:51.127 [DEBUG] [Thread-171534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:36:51.128 [DEBUG] [Thread-171534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:36:51.128 [DEBUG] [Thread-171534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:36:51.128 [DEBUG] [Thread-171534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:36:51.128 [DEBUG] [Thread-171534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:36:51.128 [DEBUG] [Thread-171534] [transport.py] [_log()] Compression: none
2026-04-11T14:36:51.128 [DEBUG] [Thread-171534] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:36:51.145 [DEBUG] [Thread-171534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:36:51.145 [DEBUG] [Thread-171534] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:36:51.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:36:51.146 [DEBUG] [Thread-171534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:36:51.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:36:51.189 [DEBUG] [Thread-171534] [transport.py] [_log()] userauth is OK
2026-04-11T14:36:51.189 [DEBUG] [Thread-171534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:36:51.189 [DEBUG] [Thread-171534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:36:51.189 [DEBUG] [Thread-171534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:36:51.190 [DEBUG] [Thread-171534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:36:51.221 [INFO] [Thread-171534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:36:51.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:36:51.830 [DEBUG] [Thread-171534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:36:51.830 [DEBUG] [Thread-171534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:36:51.831 [DEBUG] [Thread-171534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:36:51.871 [DEBUG] [Thread-171534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:36:51.871 [DEBUG] [Thread-171534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:36:51.874 [DEBUG] [Thread-171534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:36:51.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:36:51.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:36:51.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:36:51.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:36:51.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:36:51.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:36:51.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:36:51.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:36:51.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:36:51.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.525117 -999.00  +14.50   7.42     93  +13.50 1 3 1 3 1   888    0 1.26 16.32 ----- 7.8 7.4 51.5 10.0 17.5 0.2 17.3 -0.7 17.1 0.0 17.4 0.3
2026-04-11T14:36:51.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:36:51.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:36:51.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.525117
2026-04-11T14:36:51.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:36:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:36:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:36:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:36:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:36:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:36:42', tmtdew=0.03916, humidity=99.662, cloud=0.0, wind=8.43552, temperature=14.6841, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:36:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:36:51.898 [DEBUG] [Thread-171534] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:36:51.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:36:51.990 [DEBUG] [Thread-171537] [transport.py] [_log()] starting thread (client mode): 0xae5e4f70
2026-04-11T14:36:51.991 [DEBUG] [Thread-171537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:36:52.006 [DEBUG] [Thread-171537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:36:52.006 [INFO] [Thread-171537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:36:52.014 [DEBUG] [Thread-171537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:36:52.014 [DEBUG] [Thread-171537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:36:52.014 [DEBUG] [Thread-171537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:36:52.014 [DEBUG] [Thread-171537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:52.014 [DEBUG] [Thread-171537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:36:52.014 [DEBUG] [Thread-171537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] client lang: <none>
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] server lang: <none>
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] kex follows: False
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:36:52.015 [DEBUG] [Thread-171537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:36:52.016 [DEBUG] [Thread-171537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:36:52.016 [DEBUG] [Thread-171537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:36:52.016 [DEBUG] [Thread-171537] [transport.py] [_log()] Compression: none
2026-04-11T14:36:52.016 [DEBUG] [Thread-171537] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:36:52.075 [DEBUG] [Thread-171537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:36:52.075 [DEBUG] [Thread-171537] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:36:52.076 [DEBUG] [Thread-171537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:36:52.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:36:52.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:36:52.134 [DEBUG] [Thread-171537] [transport.py] [_log()] userauth is OK
2026-04-11T14:36:52.134 [DEBUG] [Thread-171537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:36:52.134 [DEBUG] [Thread-171537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:36:52.134 [DEBUG] [Thread-171537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:36:52.134 [DEBUG] [Thread-171537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:36:52.151 [INFO] [Thread-171537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:36:52.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:36:52.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:36:52.966 [DEBUG] [Thread-171537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:36:52.966 [DEBUG] [Thread-171537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:36:53.014 [DEBUG] [Thread-171537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:36:53.014 [DEBUG] [Thread-171537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:36:53.024 [DEBUG] [Thread-171537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:36:53.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:36:53.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:36:53.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-04-11T14:36:53.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:36:53.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:36:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:36:53.060 [DEBUG] [Thread-171537] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:36:56.371 [DEBUG] [Thread-171539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:10.821 [DEBUG] [Thread-171540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:11.423 [DEBUG] [Thread-171541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:11.853 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:11.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:23.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:37:23.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:37:23.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-04-11T14:37:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 36, 42), 0.03916, 99.662, 0.0, 8.43552, 14.6841, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:37:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:36:42
2026-04-11T14:37:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:37:24.873 [DEBUG] [Thread-171542] [transport.py] [_log()] starting thread (client mode): 0xa7952440
2026-04-11T14:37:24.873 [DEBUG] [Thread-171542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:37:24.890 [DEBUG] [Thread-171542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:37:24.891 [INFO] [Thread-171542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] client lang: <none>
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] server lang: <none>
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] kex follows: False
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] Compression: none
2026-04-11T14:37:24.894 [DEBUG] [Thread-171542] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:37:24.910 [DEBUG] [Thread-171542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:37:24.911 [DEBUG] [Thread-171542] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:37:24.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:37:24.912 [DEBUG] [Thread-171542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:37:24.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:37:24.914 [DEBUG] [Thread-171542] [transport.py] [_log()] userauth is OK
2026-04-11T14:37:24.914 [DEBUG] [Thread-171542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:37:24.914 [DEBUG] [Thread-171542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:37:24.914 [DEBUG] [Thread-171542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:37:24.914 [DEBUG] [Thread-171542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:37:24.932 [INFO] [Thread-171542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:37:24.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:37:25.583 [DEBUG] [Thread-171542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:37:25.584 [DEBUG] [Thread-171542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:37:25.584 [DEBUG] [Thread-171542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:37:25.625 [DEBUG] [Thread-171542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:37:25.625 [DEBUG] [Thread-171542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:37:25.628 [DEBUG] [Thread-171542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:37:25.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:37:25.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:37:25.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:37:25.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:37:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:37:25.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:37:25.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:37:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:37:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:37:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.525812 -999.00  +14.50   8.96     93  +13.40 1 3 1 3 1   888    0 1.35 18.95 ----- 7.8 9.0 78.4 10.2 17.6 0.2 17.4 0.1 17.2 -0.4 17.6 0.3
2026-04-11T14:37:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:37:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:37:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.525812
2026-04-11T14:37:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:37:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:37:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:37:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:37:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:37:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:36:42', tmtdew=0.03916, humidity=99.662, cloud=0.0, wind=8.43552, temperature=14.6841, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:37:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:37:25.657 [DEBUG] [Thread-171542] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:37:25.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:37:25.754 [DEBUG] [Thread-171545] [transport.py] [_log()] starting thread (client mode): 0xae508dc0
2026-04-11T14:37:25.754 [DEBUG] [Thread-171545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:37:25.770 [DEBUG] [Thread-171545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:37:25.770 [INFO] [Thread-171545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] client lang: <none>
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] server lang: <none>
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] kex follows: False
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:37:25.779 [DEBUG] [Thread-171545] [transport.py] [_log()] Compression: none
2026-04-11T14:37:25.780 [DEBUG] [Thread-171545] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:37:25.835 [DEBUG] [Thread-171545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:37:25.836 [DEBUG] [Thread-171545] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:37:25.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:37:25.837 [DEBUG] [Thread-171545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:37:25.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:37:25.894 [DEBUG] [Thread-171545] [transport.py] [_log()] userauth is OK
2026-04-11T14:37:25.894 [DEBUG] [Thread-171545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:37:25.894 [DEBUG] [Thread-171545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:37:25.894 [DEBUG] [Thread-171545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:37:25.894 [DEBUG] [Thread-171545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:37:25.913 [INFO] [Thread-171545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:37:25.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:37:25.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:37:26.462 [DEBUG] [Thread-171547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:26.751 [DEBUG] [Thread-171545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:37:26.751 [DEBUG] [Thread-171545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:37:26.799 [DEBUG] [Thread-171545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:37:26.799 [DEBUG] [Thread-171545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:37:26.808 [DEBUG] [Thread-171545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:37:26.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:37:26.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-04-11T14:37:26.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-04-11T14:37:26.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:37:26.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:37:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:37:26.845 [DEBUG] [Thread-171545] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:37:41.523 [DEBUG] [Thread-171548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:56.562 [DEBUG] [Thread-171549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:37:56.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:37:56.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:37:56.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-04-11T14:37:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 37, 17), 0.07475, 99.7978, 0.0, 7.09452, 14.0923, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:37:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:37:17
2026-04-11T14:37:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:37:58.727 [DEBUG] [Thread-171550] [transport.py] [_log()] starting thread (client mode): 0xb0fe8af0
2026-04-11T14:37:58.727 [DEBUG] [Thread-171550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:37:58.747 [DEBUG] [Thread-171550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:37:58.747 [INFO] [Thread-171550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:37:58.750 [DEBUG] [Thread-171550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] client lang: <none>
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] server lang: <none>
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] kex follows: False
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] Compression: none
2026-04-11T14:37:58.751 [DEBUG] [Thread-171550] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:37:58.768 [DEBUG] [Thread-171550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:37:58.769 [DEBUG] [Thread-171550] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:37:58.769 [DEBUG] [Thread-171550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:37:58.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:37:58.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:37:58.771 [DEBUG] [Thread-171550] [transport.py] [_log()] userauth is OK
2026-04-11T14:37:58.771 [DEBUG] [Thread-171550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:37:58.772 [DEBUG] [Thread-171550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:37:58.772 [DEBUG] [Thread-171550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:37:58.772 [DEBUG] [Thread-171550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:37:58.789 [INFO] [Thread-171550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:37:58.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:37:59.432 [DEBUG] [Thread-171550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:37:59.432 [DEBUG] [Thread-171550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:37:59.433 [DEBUG] [Thread-171550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:37:59.473 [DEBUG] [Thread-171550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:37:59.473 [DEBUG] [Thread-171550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:37:59.477 [DEBUG] [Thread-171550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:37:59.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:37:59.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:37:59.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:37:59.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:37:59.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:37:59.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:37:59.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:37:59.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:37:59.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:37:59.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.526159 -999.00  +14.50   7.17     93  +13.40 1 3 1 3 1   888    0 1.41 20.29 ----- 4.6 7.2 73.2 9.7 17.6 -0.5 17.5 -0.3 17.2 -0.8 17.6 0.5
2026-04-11T14:37:59.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:37:59.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:37:59.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.526159
2026-04-11T14:37:59.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:37:59.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:37:59.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:37:59.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:37:59.501 [DEBUG] [Thread-171550] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:37:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:37:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:37:17', tmtdew=0.07475, humidity=99.7978, cloud=0.0, wind=7.09452, temperature=14.0923, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:37:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:37:59.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:37:59.600 [DEBUG] [Thread-171553] [transport.py] [_log()] starting thread (client mode): 0xae5084f0
2026-04-11T14:37:59.600 [DEBUG] [Thread-171553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:37:59.615 [DEBUG] [Thread-171553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:37:59.615 [INFO] [Thread-171553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:37:59.622 [DEBUG] [Thread-171553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] client lang: <none>
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] server lang: <none>
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] kex follows: False
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] Compression: none
2026-04-11T14:37:59.623 [DEBUG] [Thread-171553] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:37:59.685 [DEBUG] [Thread-171553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:37:59.685 [DEBUG] [Thread-171553] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:37:59.686 [DEBUG] [Thread-171553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:37:59.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:37:59.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:37:59.755 [DEBUG] [Thread-171553] [transport.py] [_log()] userauth is OK
2026-04-11T14:37:59.755 [DEBUG] [Thread-171553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:37:59.755 [DEBUG] [Thread-171553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:37:59.755 [DEBUG] [Thread-171553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:37:59.755 [DEBUG] [Thread-171553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:37:59.779 [INFO] [Thread-171553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:37:59.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:37:59.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:38:00.621 [DEBUG] [Thread-171553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:38:00.621 [DEBUG] [Thread-171553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:38:00.669 [DEBUG] [Thread-171553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:38:00.669 [DEBUG] [Thread-171553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:38:00.678 [DEBUG] [Thread-171553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:38:00.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:38:00.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:38:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:38:00.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:38:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:38:00.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:38:00.713 [DEBUG] [Thread-171553] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:38:10.853 [DEBUG] [Thread-171555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:38:11.596 [DEBUG] [Thread-171556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:38:11.994 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:38:11.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:38:26.634 [DEBUG] [Thread-171557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:38:30.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:38:30.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:38:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:38:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 37, 52), 0.05979, 99.5298, 0.0, 6.56568, 14.386, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:38:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:37:52
2026-04-11T14:38:32.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:38:32.633 [DEBUG] [Thread-171558] [transport.py] [_log()] starting thread (client mode): 0xb0fe86a0
2026-04-11T14:38:32.633 [DEBUG] [Thread-171558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:38:32.646 [DEBUG] [Thread-171558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:38:32.646 [INFO] [Thread-171558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] client lang: <none>
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] server lang: <none>
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] kex follows: False
2026-04-11T14:38:32.649 [DEBUG] [Thread-171558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:38:32.650 [DEBUG] [Thread-171558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:38:32.650 [DEBUG] [Thread-171558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:38:32.650 [DEBUG] [Thread-171558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:38:32.650 [DEBUG] [Thread-171558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:38:32.650 [DEBUG] [Thread-171558] [transport.py] [_log()] Compression: none
2026-04-11T14:38:32.650 [DEBUG] [Thread-171558] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:38:32.668 [DEBUG] [Thread-171558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:38:32.669 [DEBUG] [Thread-171558] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:38:32.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:38:32.669 [DEBUG] [Thread-171558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:38:32.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:38:32.671 [DEBUG] [Thread-171558] [transport.py] [_log()] userauth is OK
2026-04-11T14:38:32.671 [DEBUG] [Thread-171558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:38:32.671 [DEBUG] [Thread-171558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:38:32.671 [DEBUG] [Thread-171558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:38:32.671 [DEBUG] [Thread-171558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:38:32.691 [INFO] [Thread-171558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:38:32.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:38:33.335 [DEBUG] [Thread-171558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:38:33.335 [DEBUG] [Thread-171558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:38:33.336 [DEBUG] [Thread-171558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:38:33.376 [DEBUG] [Thread-171558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:38:33.376 [DEBUG] [Thread-171558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:38:33.380 [DEBUG] [Thread-171558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:38:33.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:38:33.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:38:33.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:38:33.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:38:33.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:38:33.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:38:33.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:38:33.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:38:33.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:38:33.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.526506 -999.00  +14.60   8.47     93  +13.50 1 3 1 3 1   888    0 1.44 21.30 ----- 8.0 8.5 69.9 9.6 17.7 0.3 17.6 -5.5 17.4 0.1 17.7 1.0
2026-04-11T14:38:33.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:38:33.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:38:33.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.526506
2026-04-11T14:38:33.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:38:33.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:38:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:38:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:38:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:38:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:37:52', tmtdew=0.05979, humidity=99.5298, cloud=0.0, wind=6.56568, temperature=14.386, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:38:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:38:33.405 [DEBUG] [Thread-171558] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:38:33.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:38:33.498 [DEBUG] [Thread-171561] [transport.py] [_log()] starting thread (client mode): 0xae5b0b80
2026-04-11T14:38:33.498 [DEBUG] [Thread-171561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:38:33.512 [DEBUG] [Thread-171561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:38:33.512 [INFO] [Thread-171561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] client lang: <none>
2026-04-11T14:38:33.520 [DEBUG] [Thread-171561] [transport.py] [_log()] server lang: <none>
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] kex follows: False
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] Compression: none
2026-04-11T14:38:33.521 [DEBUG] [Thread-171561] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:38:33.577 [DEBUG] [Thread-171561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:38:33.578 [DEBUG] [Thread-171561] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:38:33.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:38:33.579 [DEBUG] [Thread-171561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:38:33.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:38:33.634 [DEBUG] [Thread-171561] [transport.py] [_log()] userauth is OK
2026-04-11T14:38:33.635 [DEBUG] [Thread-171561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:38:33.635 [DEBUG] [Thread-171561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:38:33.635 [DEBUG] [Thread-171561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:38:33.635 [DEBUG] [Thread-171561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:38:33.653 [INFO] [Thread-171561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:38:33.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:38:33.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:38:34.469 [DEBUG] [Thread-171561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:38:34.470 [DEBUG] [Thread-171561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:38:34.522 [DEBUG] [Thread-171561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:38:34.522 [DEBUG] [Thread-171561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:38:34.532 [DEBUG] [Thread-171561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:38:34.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:38:34.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-04-11T14:38:34.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-04-11T14:38:34.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:38:34.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:38:34.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:38:34.569 [DEBUG] [Thread-171561] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:38:41.670 [DEBUG] [Thread-171563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:38:56.722 [DEBUG] [Thread-171564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:39:04.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:39:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:39:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 38, 28), 0.079945, 99.7647, 0.0, 5.895, 13.9097, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:39:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:38:28
2026-04-11T14:39:06.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:39:06.502 [DEBUG] [Thread-171565] [transport.py] [_log()] starting thread (client mode): 0xb39c7e20
2026-04-11T14:39:06.502 [DEBUG] [Thread-171565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:39:06.522 [DEBUG] [Thread-171565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:39:06.522 [INFO] [Thread-171565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:39:06.525 [DEBUG] [Thread-171565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:39:06.525 [DEBUG] [Thread-171565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:39:06.525 [DEBUG] [Thread-171565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:39:06.525 [DEBUG] [Thread-171565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] client lang: <none>
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] server lang: <none>
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] kex follows: False
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:39:06.526 [DEBUG] [Thread-171565] [transport.py] [_log()] Compression: none
2026-04-11T14:39:06.527 [DEBUG] [Thread-171565] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:39:06.543 [DEBUG] [Thread-171565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:39:06.543 [DEBUG] [Thread-171565] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:39:06.543 [DEBUG] [Thread-171565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:39:06.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:39:06.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:39:06.544 [DEBUG] [Thread-171565] [transport.py] [_log()] userauth is OK
2026-04-11T14:39:06.544 [DEBUG] [Thread-171565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:39:06.544 [DEBUG] [Thread-171565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:39:06.544 [DEBUG] [Thread-171565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:39:06.544 [DEBUG] [Thread-171565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:39:06.559 [INFO] [Thread-171565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:39:06.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:39:07.315 [DEBUG] [Thread-171565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:39:07.316 [DEBUG] [Thread-171565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:39:07.317 [DEBUG] [Thread-171565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:39:07.357 [DEBUG] [Thread-171565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:39:07.357 [DEBUG] [Thread-171565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:39:07.361 [DEBUG] [Thread-171565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:39:07.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:39:07.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:39:07.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:39:07.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:39:07.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:39:07.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:39:07.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:39:07.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:39:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:39:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.526853 -999.00  +14.60  11.62     92  +13.50 1 3 1 3 1   888    0 1.48 22.36 ----- 11.5 11.6 68.0 12.5 17.7 0.3 17.7 -6.6 17.4 -0.5 17.8 0.1
2026-04-11T14:39:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:39:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:39:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.526853
2026-04-11T14:39:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:39:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:39:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:39:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:39:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:39:07.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:38:28', tmtdew=0.079945, humidity=99.7647, cloud=0.0, wind=5.895, temperature=13.9097, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:38:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:39:07.389 [DEBUG] [Thread-171565] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:39:07.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:39:07.478 [DEBUG] [Thread-171568] [transport.py] [_log()] starting thread (client mode): 0xae562aa0
2026-04-11T14:39:07.478 [DEBUG] [Thread-171568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:39:07.493 [DEBUG] [Thread-171568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:39:07.493 [INFO] [Thread-171568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:07.501 [DEBUG] [Thread-171568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] client lang: <none>
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] server lang: <none>
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] kex follows: False
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] Compression: none
2026-04-11T14:39:07.502 [DEBUG] [Thread-171568] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:39:07.557 [DEBUG] [Thread-171568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:39:07.558 [DEBUG] [Thread-171568] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:39:07.558 [DEBUG] [Thread-171568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:39:07.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:39:07.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:39:07.614 [DEBUG] [Thread-171568] [transport.py] [_log()] userauth is OK
2026-04-11T14:39:07.614 [DEBUG] [Thread-171568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:39:07.614 [DEBUG] [Thread-171568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:39:07.614 [DEBUG] [Thread-171568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:39:07.614 [DEBUG] [Thread-171568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:39:07.632 [INFO] [Thread-171568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:39:07.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:39:07.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:39:08.452 [DEBUG] [Thread-171568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:39:08.452 [DEBUG] [Thread-171568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:39:08.499 [DEBUG] [Thread-171568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:39:08.500 [DEBUG] [Thread-171568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:39:08.508 [DEBUG] [Thread-171568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:39:08.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:39: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')
2026-04-11T14:39:08.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-04-11T14:39:08.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:39:08.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:39:08.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:39:08.550 [DEBUG] [Thread-171568] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:39:10.887 [DEBUG] [Thread-171570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:11.759 [DEBUG] [Thread-171571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:12.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:12.138 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:26.816 [DEBUG] [Thread-171572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:38.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:39:38.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:39:38.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-04-11T14:39:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 39, 4), 0.08767, 99.7149, 0.0, 6.10668, 13.8766, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:39:39.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:39:04
2026-04-11T14:39:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:39:40.387 [DEBUG] [Thread-171573] [transport.py] [_log()] starting thread (client mode): 0xb0feaf80
2026-04-11T14:39:40.387 [DEBUG] [Thread-171573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:39:40.407 [DEBUG] [Thread-171573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:39:40.407 [INFO] [Thread-171573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:39:40.410 [DEBUG] [Thread-171573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] client lang: <none>
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] server lang: <none>
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] kex follows: False
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:39:40.411 [DEBUG] [Thread-171573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:39:40.412 [DEBUG] [Thread-171573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:39:40.412 [DEBUG] [Thread-171573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:39:40.412 [DEBUG] [Thread-171573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:39:40.412 [DEBUG] [Thread-171573] [transport.py] [_log()] Compression: none
2026-04-11T14:39:40.412 [DEBUG] [Thread-171573] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:39:40.431 [DEBUG] [Thread-171573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:39:40.431 [DEBUG] [Thread-171573] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:39:40.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:39:40.433 [DEBUG] [Thread-171573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:39:40.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:39:40.435 [DEBUG] [Thread-171573] [transport.py] [_log()] userauth is OK
2026-04-11T14:39:40.435 [DEBUG] [Thread-171573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:39:40.435 [DEBUG] [Thread-171573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:39:40.436 [DEBUG] [Thread-171573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:39:40.436 [DEBUG] [Thread-171573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:39:40.451 [INFO] [Thread-171573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:39:40.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:39:41.242 [DEBUG] [Thread-171573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:39:41.243 [DEBUG] [Thread-171573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:39:41.243 [DEBUG] [Thread-171573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:39:41.283 [DEBUG] [Thread-171573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:39:41.283 [DEBUG] [Thread-171573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:39:41.287 [DEBUG] [Thread-171573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:39:41.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:39:41.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:39:41.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:39:41.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:39:41.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:39:41.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:39:41.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:39:41.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:39:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:39:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.527201 -999.00  +14.60   8.69     92  +13.40 1 3 1 3 1   888    0 1.51 23.26 ----- 8.6 8.7 54.6 12.0 17.8 0.5 17.6 -7.3 17.4 -1.2 17.8 0.5
2026-04-11T14:39:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:39:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:39:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.527201
2026-04-11T14:39:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:39:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:39:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:39:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:39:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:39:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:39:04', tmtdew=0.08767, humidity=99.7149, cloud=0.0, wind=6.10668, temperature=13.8766, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:39:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:39:41.315 [DEBUG] [Thread-171573] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:39:41.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:39:41.398 [DEBUG] [Thread-171576] [transport.py] [_log()] starting thread (client mode): 0xae560430
2026-04-11T14:39:41.398 [DEBUG] [Thread-171576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:39:41.413 [DEBUG] [Thread-171576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:39:41.413 [INFO] [Thread-171576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:39:41.421 [DEBUG] [Thread-171576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:39:41.421 [DEBUG] [Thread-171576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] client lang: <none>
2026-04-11T14:39:41.422 [DEBUG] [Thread-171576] [transport.py] [_log()] server lang: <none>
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] kex follows: False
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] Compression: none
2026-04-11T14:39:41.423 [DEBUG] [Thread-171576] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:39:41.482 [DEBUG] [Thread-171576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:39:41.483 [DEBUG] [Thread-171576] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:39:41.483 [DEBUG] [Thread-171576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:39:41.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:39:41.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:39:41.542 [DEBUG] [Thread-171576] [transport.py] [_log()] userauth is OK
2026-04-11T14:39:41.542 [DEBUG] [Thread-171576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:39:41.542 [DEBUG] [Thread-171576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:39:41.542 [DEBUG] [Thread-171576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:39:41.542 [DEBUG] [Thread-171576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:39:41.560 [INFO] [Thread-171576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:39:41.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:39:41.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:39:41.851 [DEBUG] [Thread-171578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:39:42.416 [DEBUG] [Thread-171576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:39:42.417 [DEBUG] [Thread-171576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:39:42.464 [DEBUG] [Thread-171576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:39:42.464 [DEBUG] [Thread-171576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:39:42.474 [DEBUG] [Thread-171576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:39:42.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:39:42.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:39:42.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-04-11T14:39:42.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:39:42.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:39:42.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:39:42.511 [DEBUG] [Thread-171576] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:39:56.903 [DEBUG] [Thread-171579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:10.922 [DEBUG] [Thread-171580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:11.939 [DEBUG] [Thread-171581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:12.280 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:12.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:12.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:40:12.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:40:12.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-04-11T14:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 39, 39), 0.065, 99.4962, 0.0, 6.03648, 14.452, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:39:39
2026-04-11T14:40:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:40:14.344 [DEBUG] [Thread-171582] [transport.py] [_log()] starting thread (client mode): 0xb0fea830
2026-04-11T14:40:14.344 [DEBUG] [Thread-171582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:40:14.365 [DEBUG] [Thread-171582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:40:14.365 [INFO] [Thread-171582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:40:14.369 [DEBUG] [Thread-171582] [transport.py] [_log()] client lang: <none>
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] server lang: <none>
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] kex follows: False
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] Compression: none
2026-04-11T14:40:14.370 [DEBUG] [Thread-171582] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:40:14.387 [DEBUG] [Thread-171582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:40:14.387 [DEBUG] [Thread-171582] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:40:14.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:40:14.388 [DEBUG] [Thread-171582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:40:14.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:40:14.391 [DEBUG] [Thread-171582] [transport.py] [_log()] userauth is OK
2026-04-11T14:40:14.391 [DEBUG] [Thread-171582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:40:14.391 [DEBUG] [Thread-171582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:40:14.391 [DEBUG] [Thread-171582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:40:14.391 [DEBUG] [Thread-171582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:40:14.427 [INFO] [Thread-171582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:40:14.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:40:15.737 [DEBUG] [Thread-171582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:40:15.737 [DEBUG] [Thread-171582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:40:15.738 [DEBUG] [Thread-171582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:40:15.778 [DEBUG] [Thread-171582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:40:15.778 [DEBUG] [Thread-171582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:40:15.781 [DEBUG] [Thread-171582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:40:15.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:40:15.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:40:15.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:40:15.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:40:15.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:40:15.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:40:15.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:40:15.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:40:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:40:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.527548 -999.00  +14.70   6.59     92  +13.50 1 3 1 3 1   888    0 1.57 24.49 ----- 7.5 6.6 32.2 9.6 17.9 0.4 17.7 -7.5 17.5 0.3 17.9 0.9
2026-04-11T14:40:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:40:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:40:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.527548
2026-04-11T14:40:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:40:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:40:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:40:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:40:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:40:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:39:39', tmtdew=0.065, humidity=99.4962, cloud=0.0, wind=6.03648, temperature=14.452, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:39:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:40:15.808 [DEBUG] [Thread-171582] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:40:15.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:40:15.904 [DEBUG] [Thread-171585] [transport.py] [_log()] starting thread (client mode): 0xb0fe88e0
2026-04-11T14:40:15.905 [DEBUG] [Thread-171585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:40:15.919 [DEBUG] [Thread-171585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:40:15.919 [INFO] [Thread-171585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:40:15.927 [DEBUG] [Thread-171585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:40:15.927 [DEBUG] [Thread-171585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:40:15.927 [DEBUG] [Thread-171585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:40:15.927 [DEBUG] [Thread-171585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:15.927 [DEBUG] [Thread-171585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:15.927 [DEBUG] [Thread-171585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] client lang: <none>
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] server lang: <none>
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] kex follows: False
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] Compression: none
2026-04-11T14:40:15.928 [DEBUG] [Thread-171585] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:40:15.986 [DEBUG] [Thread-171585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:40:15.986 [DEBUG] [Thread-171585] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:40:15.987 [DEBUG] [Thread-171585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:40:15.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:40:15.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:40:16.042 [DEBUG] [Thread-171585] [transport.py] [_log()] userauth is OK
2026-04-11T14:40:16.042 [DEBUG] [Thread-171585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:40:16.042 [DEBUG] [Thread-171585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:40:16.043 [DEBUG] [Thread-171585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:40:16.043 [DEBUG] [Thread-171585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:40:16.062 [INFO] [Thread-171585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:40:16.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:40:16.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:40:16.892 [DEBUG] [Thread-171585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:40:16.892 [DEBUG] [Thread-171585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:40:16.940 [DEBUG] [Thread-171585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:40:16.940 [DEBUG] [Thread-171585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:40:16.949 [DEBUG] [Thread-171585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:40:16.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:40:16.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:40:16.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-04-11T14:40:16.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:40:16.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:40:16.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:40:16.986 [DEBUG] [Thread-171585] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:40:26.978 [DEBUG] [Thread-171587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:42.031 [DEBUG] [Thread-171588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:40:47.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:40:47.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:40:47.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-04-11T14:40:48.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 40, 15), 0.024785, 99.7976, 0.0, 6.08904, 14.0256, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:40:48.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:40:15
2026-04-11T14:40:48.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:40:48.871 [DEBUG] [Thread-171589] [transport.py] [_log()] starting thread (client mode): 0xb39c7940
2026-04-11T14:40:48.871 [DEBUG] [Thread-171589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:40:48.886 [DEBUG] [Thread-171589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:40:48.886 [INFO] [Thread-171589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] client lang: <none>
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] server lang: <none>
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] kex follows: False
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] Compression: none
2026-04-11T14:40:48.890 [DEBUG] [Thread-171589] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:40:48.908 [DEBUG] [Thread-171589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:40:48.908 [DEBUG] [Thread-171589] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:40:48.909 [DEBUG] [Thread-171589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:40:48.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:40:48.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:40:48.911 [DEBUG] [Thread-171589] [transport.py] [_log()] userauth is OK
2026-04-11T14:40:48.911 [DEBUG] [Thread-171589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:40:48.911 [DEBUG] [Thread-171589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:40:48.911 [DEBUG] [Thread-171589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:40:48.911 [DEBUG] [Thread-171589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:40:48.929 [INFO] [Thread-171589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:40:48.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:40:49.715 [DEBUG] [Thread-171589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:40:49.715 [DEBUG] [Thread-171589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:40:49.716 [DEBUG] [Thread-171589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:40:49.756 [DEBUG] [Thread-171589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:40:49.756 [DEBUG] [Thread-171589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:40:49.759 [DEBUG] [Thread-171589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:40:49.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:40:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:40:49.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:40:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:40:49.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:40:49.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:40:49.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:40:49.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:40:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:40:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.527895 -999.00  +14.70   5.44     92  +13.40 1 3 1 3 1   888    0 1.67 27.51 ----- 8.6 5.4 34.7 7.4 18.0 0.7 17.7 -7.0 17.6 0.8 18.0 1.1
2026-04-11T14:40:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:40:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:40:49.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.527895
2026-04-11T14:40:49.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:40:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:40:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:40:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:40:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:40:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:40:15', tmtdew=0.024785, humidity=99.7976, cloud=0.0, wind=6.08904, temperature=14.0256, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:40:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:40:49.789 [DEBUG] [Thread-171589] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:40:49.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:40:49.892 [DEBUG] [Thread-171592] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T14:40:49.892 [DEBUG] [Thread-171592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:40:49.913 [DEBUG] [Thread-171592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:40:49.913 [INFO] [Thread-171592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:40:49.920 [DEBUG] [Thread-171592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:40:49.920 [DEBUG] [Thread-171592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] client lang: <none>
2026-04-11T14:40:49.921 [DEBUG] [Thread-171592] [transport.py] [_log()] server lang: <none>
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] kex follows: False
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] Compression: none
2026-04-11T14:40:49.922 [DEBUG] [Thread-171592] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:40:49.983 [DEBUG] [Thread-171592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:40:49.983 [DEBUG] [Thread-171592] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:40:49.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:40:49.984 [DEBUG] [Thread-171592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:40:49.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:40:50.042 [DEBUG] [Thread-171592] [transport.py] [_log()] userauth is OK
2026-04-11T14:40:50.042 [DEBUG] [Thread-171592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:40:50.042 [DEBUG] [Thread-171592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:40:50.042 [DEBUG] [Thread-171592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:40:50.042 [DEBUG] [Thread-171592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:40:50.064 [INFO] [Thread-171592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:40:50.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:40:50.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:40:50.877 [DEBUG] [Thread-171592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:40:50.877 [DEBUG] [Thread-171592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:40:50.929 [DEBUG] [Thread-171592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:40:50.929 [DEBUG] [Thread-171592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:40:50.940 [DEBUG] [Thread-171592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:40:50.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:40:50.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-04-11T14:40:50.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:40:50.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:40:50.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:40:50.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:40:50.980 [DEBUG] [Thread-171592] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:40:57.070 [DEBUG] [Thread-171594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:10.955 [DEBUG] [Thread-171595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:12.123 [DEBUG] [Thread-171596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:12.423 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:12.424 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:21.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:41:21.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:41:21.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:41:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 40, 50), 0.04441, 99.6281, 0.0, 6.28344, 14.6837, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:41:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:40:50
2026-04-11T14:41:22.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:41:22.808 [DEBUG] [Thread-171597] [transport.py] [_log()] starting thread (client mode): 0xae5193c0
2026-04-11T14:41:22.808 [DEBUG] [Thread-171597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:41:22.828 [DEBUG] [Thread-171597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:41:22.828 [INFO] [Thread-171597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] client lang: <none>
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] server lang: <none>
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] kex follows: False
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] Compression: none
2026-04-11T14:41:22.832 [DEBUG] [Thread-171597] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:41:22.850 [DEBUG] [Thread-171597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:41:22.850 [DEBUG] [Thread-171597] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:41:22.851 [DEBUG] [Thread-171597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:41:22.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:41:22.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:41:22.853 [DEBUG] [Thread-171597] [transport.py] [_log()] userauth is OK
2026-04-11T14:41:22.853 [DEBUG] [Thread-171597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:41:22.853 [DEBUG] [Thread-171597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:41:22.853 [DEBUG] [Thread-171597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:41:22.853 [DEBUG] [Thread-171597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:41:22.870 [INFO] [Thread-171597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:41:22.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:41:23.665 [DEBUG] [Thread-171597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:41:23.665 [DEBUG] [Thread-171597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:41:23.666 [DEBUG] [Thread-171597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:41:23.706 [DEBUG] [Thread-171597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:41:23.707 [DEBUG] [Thread-171597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:41:23.710 [DEBUG] [Thread-171597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:41:23.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:41:23.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:41:23.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:41:23.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:41:23.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:41:23.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:41:23.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:41:23.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:41:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:41:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.528242 -999.00  +14.70   6.76     92  +13.50 1 3 1 3 1   888    0 1.70 28.42 ----- 6.2 6.8 57.2 8.3 18.1 0.4 17.8 -7.6 17.6 -0.6 18.0 0.9
2026-04-11T14:41:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:41:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:41:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.528242
2026-04-11T14:41:23.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:41:23.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:41:23.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:41:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:41:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:41:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:40:50', tmtdew=0.04441, humidity=99.6281, cloud=0.0, wind=6.28344, temperature=14.6837, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:40:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:41:23.738 [DEBUG] [Thread-171597] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:41:23.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:41:23.830 [DEBUG] [Thread-171600] [transport.py] [_log()] starting thread (client mode): 0xb39c61d0
2026-04-11T14:41:23.831 [DEBUG] [Thread-171600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:41:23.845 [DEBUG] [Thread-171600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:41:23.845 [INFO] [Thread-171600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:41:23.853 [DEBUG] [Thread-171600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:41:23.853 [DEBUG] [Thread-171600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:41:23.853 [DEBUG] [Thread-171600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:41:23.853 [DEBUG] [Thread-171600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] client lang: <none>
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] server lang: <none>
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] kex follows: False
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:41:23.854 [DEBUG] [Thread-171600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:41:23.855 [DEBUG] [Thread-171600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:41:23.855 [DEBUG] [Thread-171600] [transport.py] [_log()] Compression: none
2026-04-11T14:41:23.855 [DEBUG] [Thread-171600] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:41:23.910 [DEBUG] [Thread-171600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:41:23.910 [DEBUG] [Thread-171600] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:41:23.911 [DEBUG] [Thread-171600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:41:23.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:41:23.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:41:23.967 [DEBUG] [Thread-171600] [transport.py] [_log()] userauth is OK
2026-04-11T14:41:23.968 [DEBUG] [Thread-171600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:41:23.968 [DEBUG] [Thread-171600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:41:23.968 [DEBUG] [Thread-171600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:41:23.968 [DEBUG] [Thread-171600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:41:23.990 [INFO] [Thread-171600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:41:23.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:41:23.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:41:24.807 [DEBUG] [Thread-171600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:41:24.807 [DEBUG] [Thread-171600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:41:24.856 [DEBUG] [Thread-171600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:41:24.856 [DEBUG] [Thread-171600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:41:24.866 [DEBUG] [Thread-171600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:41:24.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:41:24.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:41:24.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-04-11T14:41:24.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:41:24.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:41:24.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:41:24.910 [DEBUG] [Thread-171600] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:41:27.161 [DEBUG] [Thread-171602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:42.214 [DEBUG] [Thread-171603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:54.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:41:54.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:41:54.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-04-11T14:41:56.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 41, 26), 0.08254, 99.7478, 0.0, 6.6006, 13.9755, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:41:56.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:41:26
2026-04-11T14:41:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:41:56.766 [DEBUG] [Thread-171604] [transport.py] [_log()] starting thread (client mode): 0xb39c7ee0
2026-04-11T14:41:56.766 [DEBUG] [Thread-171604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:41:56.787 [DEBUG] [Thread-171604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:41:56.787 [INFO] [Thread-171604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:41:56.791 [DEBUG] [Thread-171604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] client lang: <none>
2026-04-11T14:41:56.792 [DEBUG] [Thread-171604] [transport.py] [_log()] server lang: <none>
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] kex follows: False
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] Compression: none
2026-04-11T14:41:56.793 [DEBUG] [Thread-171604] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:41:56.815 [DEBUG] [Thread-171604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:41:56.815 [DEBUG] [Thread-171604] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:41:56.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:41:56.816 [DEBUG] [Thread-171604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:41:56.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:41:56.818 [DEBUG] [Thread-171604] [transport.py] [_log()] userauth is OK
2026-04-11T14:41:56.819 [DEBUG] [Thread-171604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:41:56.819 [DEBUG] [Thread-171604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:41:56.819 [DEBUG] [Thread-171604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:41:56.819 [DEBUG] [Thread-171604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:41:56.843 [INFO] [Thread-171604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:41:56.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:41:57.254 [DEBUG] [Thread-171606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:41:57.661 [DEBUG] [Thread-171604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:41:57.662 [DEBUG] [Thread-171604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:41:57.662 [DEBUG] [Thread-171604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:41:57.704 [DEBUG] [Thread-171604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:41:57.704 [DEBUG] [Thread-171604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:41:57.707 [DEBUG] [Thread-171604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:41:57.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:41:57.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:41:57.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:41:57.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:41:57.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:41:57.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:41:57.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:41:57.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:41:57.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:41:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.528589 -999.00  +14.70   7.77     91  +13.30 1 3 1 3 1   888    0 1.80 30.87 ----- 6.8 7.8 31.2 10.2 18.1 0.3 17.9 -7.9 17.5 0.2 18.1 0.8
2026-04-11T14:41:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:41:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:41:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.528589
2026-04-11T14:41:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:41:57.731 [DEBUG] [Thread-171604] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:41:57.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:41:57.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:41:57.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:41:57.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:41:57.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:41:26', tmtdew=0.08254, humidity=99.7478, cloud=0.0, wind=6.6006, temperature=13.9755, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:41:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:41:57.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:41:57.840 [DEBUG] [Thread-171608] [transport.py] [_log()] starting thread (client mode): 0xae5e4430
2026-04-11T14:41:57.840 [DEBUG] [Thread-171608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:41:57.854 [DEBUG] [Thread-171608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:41:57.855 [INFO] [Thread-171608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:41:57.862 [DEBUG] [Thread-171608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] client lang: <none>
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] server lang: <none>
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] kex follows: False
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:41:57.863 [DEBUG] [Thread-171608] [transport.py] [_log()] Compression: none
2026-04-11T14:41:57.864 [DEBUG] [Thread-171608] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:41:57.921 [DEBUG] [Thread-171608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:41:57.921 [DEBUG] [Thread-171608] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:41:57.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:41:57.922 [DEBUG] [Thread-171608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:41:57.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:41:57.977 [DEBUG] [Thread-171608] [transport.py] [_log()] userauth is OK
2026-04-11T14:41:57.977 [DEBUG] [Thread-171608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:41:57.978 [DEBUG] [Thread-171608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:41:57.978 [DEBUG] [Thread-171608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:41:57.978 [DEBUG] [Thread-171608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:41:58.000 [INFO] [Thread-171608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:41:58.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:41:58.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:41:58.802 [DEBUG] [Thread-171608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:41:58.803 [DEBUG] [Thread-171608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:41:58.849 [DEBUG] [Thread-171608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:41:58.850 [DEBUG] [Thread-171608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:41:58.859 [DEBUG] [Thread-171608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:41:58.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:41:58.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:41:58.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-04-11T14:41:58.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:41:58.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:41:58.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:41:58.894 [DEBUG] [Thread-171608] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:42:10.991 [DEBUG] [Thread-171610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:42:12.290 [DEBUG] [Thread-171611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:42:12.564 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:42:12.566 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:42:27.346 [DEBUG] [Thread-171612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:42:28.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:42:28.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:42:28.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-04-11T14:42:30.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 42, 1), 0.07996, 99.7643, 0.0, 6.38892, 13.9921, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:42:30.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:42:01
2026-04-11T14:42:30.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:42:30.772 [DEBUG] [Thread-171613] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-11T14:42:30.772 [DEBUG] [Thread-171613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:42:30.792 [DEBUG] [Thread-171613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:42:30.792 [INFO] [Thread-171613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:42:30.795 [DEBUG] [Thread-171613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] client lang: <none>
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] server lang: <none>
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] kex follows: False
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] Compression: none
2026-04-11T14:42:30.796 [DEBUG] [Thread-171613] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:42:30.814 [DEBUG] [Thread-171613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:42:30.814 [DEBUG] [Thread-171613] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:42:30.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:42:30.815 [DEBUG] [Thread-171613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:42:30.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:42:30.857 [DEBUG] [Thread-171613] [transport.py] [_log()] userauth is OK
2026-04-11T14:42:30.857 [DEBUG] [Thread-171613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:42:30.857 [DEBUG] [Thread-171613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:42:30.858 [DEBUG] [Thread-171613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:42:30.858 [DEBUG] [Thread-171613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:42:30.888 [INFO] [Thread-171613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:42:30.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:42:31.682 [DEBUG] [Thread-171613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:42:31.682 [DEBUG] [Thread-171613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:42:31.683 [DEBUG] [Thread-171613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:42:31.723 [DEBUG] [Thread-171613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:42:31.723 [DEBUG] [Thread-171613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:42:31.727 [DEBUG] [Thread-171613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:42:31.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:42:31.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:42:31.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:42:31.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:42:31.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:42:31.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:42:31.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:42:31.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:42:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:42:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.529284 -999.00  +14.70   5.91     91  +13.30 1 3 1 3 1   888    0 1.89 32.83 ----- 7.0 5.9 53.8 7.3 18.3 0.4 18.0 -7.9 17.6 -0.6 18.2 1.0
2026-04-11T14:42:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:42:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:42:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.529284
2026-04-11T14:42:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:42:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:42:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:42:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:42:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:42:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:42:01', tmtdew=0.07996, humidity=99.7643, cloud=0.0, wind=6.38892, temperature=13.9921, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:42:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:42:31.755 [DEBUG] [Thread-171613] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:42:31.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:42:31.850 [DEBUG] [Thread-171616] [transport.py] [_log()] starting thread (client mode): 0xae561210
2026-04-11T14:42:31.850 [DEBUG] [Thread-171616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:42:31.864 [DEBUG] [Thread-171616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:42:31.864 [INFO] [Thread-171616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:42:31.872 [DEBUG] [Thread-171616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] client lang: <none>
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] server lang: <none>
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] kex follows: False
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] Compression: none
2026-04-11T14:42:31.873 [DEBUG] [Thread-171616] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:42:31.928 [DEBUG] [Thread-171616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:42:31.929 [DEBUG] [Thread-171616] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:42:31.929 [DEBUG] [Thread-171616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:42:31.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:42:31.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:42:31.986 [DEBUG] [Thread-171616] [transport.py] [_log()] userauth is OK
2026-04-11T14:42:31.986 [DEBUG] [Thread-171616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:42:31.986 [DEBUG] [Thread-171616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:42:31.986 [DEBUG] [Thread-171616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:42:31.986 [DEBUG] [Thread-171616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:42:32.006 [INFO] [Thread-171616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:42:32.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:42:32.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:42:32.855 [DEBUG] [Thread-171616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:42:32.855 [DEBUG] [Thread-171616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:42:32.904 [DEBUG] [Thread-171616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:42:32.904 [DEBUG] [Thread-171616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:42:32.912 [DEBUG] [Thread-171616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:42:32.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:42:32.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-04-11T14:42:32.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-04-11T14:42:32.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:42:32.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:42:32.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:42:32.944 [DEBUG] [Thread-171616] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:42:42.378 [DEBUG] [Thread-171618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:42:57.421 [DEBUG] [Thread-171619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:43:02.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:43:02.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-04-11T14:43:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 42, 36), 0.03934, 99.6611, 0.0, 6.5304, 14.5841, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:43:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:42:36
2026-04-11T14:43:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:43:04.877 [DEBUG] [Thread-171620] [transport.py] [_log()] starting thread (client mode): 0xae5b1000
2026-04-11T14:43:04.877 [DEBUG] [Thread-171620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:43:04.899 [DEBUG] [Thread-171620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:43:04.899 [INFO] [Thread-171620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:43:04.901 [DEBUG] [Thread-171620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] client lang: <none>
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] server lang: <none>
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] kex follows: False
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] Compression: none
2026-04-11T14:43:04.902 [DEBUG] [Thread-171620] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:43:04.920 [DEBUG] [Thread-171620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:43:04.920 [DEBUG] [Thread-171620] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:43:04.921 [DEBUG] [Thread-171620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:43:04.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:43:04.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:43:04.922 [DEBUG] [Thread-171620] [transport.py] [_log()] userauth is OK
2026-04-11T14:43:04.923 [DEBUG] [Thread-171620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:43:04.923 [DEBUG] [Thread-171620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:43:04.923 [DEBUG] [Thread-171620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:43:04.923 [DEBUG] [Thread-171620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:43:04.947 [INFO] [Thread-171620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:43:04.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:43:05.775 [DEBUG] [Thread-171620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:43:05.776 [DEBUG] [Thread-171620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:43:05.776 [DEBUG] [Thread-171620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:43:05.817 [DEBUG] [Thread-171620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:43:05.817 [DEBUG] [Thread-171620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:43:05.820 [DEBUG] [Thread-171620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:43:05.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:43:05.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:43:05.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:43:05.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:43:05.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:43:05.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:43:05.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:43:05.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:43:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:43:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.529631 -999.00  +14.70   7.39     91  +13.40 1 3 1 3 1   888    0 1.92 34.16 ----- 8.0 7.4 35.8 9.7 18.4 -0.2 18.0 -7.7 -999.0 -999.0 18.2 1.1
2026-04-11T14:43:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:43:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:43:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.529631
2026-04-11T14:43:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:43:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:43:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:43:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:43:05.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:43:05.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:42:36', tmtdew=0.03934, humidity=99.6611, cloud=0.0, wind=6.5304, temperature=14.5841, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:42:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:43:05.848 [DEBUG] [Thread-171620] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:43:05.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:43:05.941 [DEBUG] [Thread-171623] [transport.py] [_log()] starting thread (client mode): 0xae5187f0
2026-04-11T14:43:05.941 [DEBUG] [Thread-171623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:43:05.957 [DEBUG] [Thread-171623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:43:05.957 [INFO] [Thread-171623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] client lang: <none>
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] server lang: <none>
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] kex follows: False
2026-04-11T14:43:05.965 [DEBUG] [Thread-171623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:43:05.966 [DEBUG] [Thread-171623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:43:05.966 [DEBUG] [Thread-171623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:43:05.966 [DEBUG] [Thread-171623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:43:05.966 [DEBUG] [Thread-171623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:43:05.966 [DEBUG] [Thread-171623] [transport.py] [_log()] Compression: none
2026-04-11T14:43:05.966 [DEBUG] [Thread-171623] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:43:06.023 [DEBUG] [Thread-171623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:43:06.023 [DEBUG] [Thread-171623] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:43:06.024 [DEBUG] [Thread-171623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:43:06.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:43:06.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:43:06.083 [DEBUG] [Thread-171623] [transport.py] [_log()] userauth is OK
2026-04-11T14:43:06.083 [DEBUG] [Thread-171623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:43:06.083 [DEBUG] [Thread-171623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:43:06.083 [DEBUG] [Thread-171623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:43:06.083 [DEBUG] [Thread-171623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:43:06.102 [INFO] [Thread-171623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:43:06.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:43:06.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:43:06.949 [DEBUG] [Thread-171623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:43:06.949 [DEBUG] [Thread-171623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:43:06.997 [DEBUG] [Thread-171623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:43:06.997 [DEBUG] [Thread-171623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:43:07.008 [DEBUG] [Thread-171623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:43:07.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:43:07.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-04-11T14:43:07.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-04-11T14:43:07.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:43:07.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:43:07.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:43:07.045 [DEBUG] [Thread-171623] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:43:11.041 [DEBUG] [Thread-171625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:12.457 [DEBUG] [Thread-171626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:12.705 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:12.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:27.509 [DEBUG] [Thread-171627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:43:37.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:43:37.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-04-11T14:43:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 43, 12), 0.07485, 99.7973, 0.0, 8.50572, 14.0588, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:43:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:43:12
2026-04-11T14:43:38.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:43:38.990 [DEBUG] [Thread-171628] [transport.py] [_log()] starting thread (client mode): 0xae5b0370
2026-04-11T14:43:38.990 [DEBUG] [Thread-171628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:43:39.010 [DEBUG] [Thread-171628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:43:39.011 [INFO] [Thread-171628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:43:39.013 [DEBUG] [Thread-171628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:43:39.013 [DEBUG] [Thread-171628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] client lang: <none>
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] server lang: <none>
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] kex follows: False
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] Compression: none
2026-04-11T14:43:39.014 [DEBUG] [Thread-171628] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:43:39.031 [DEBUG] [Thread-171628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:43:39.032 [DEBUG] [Thread-171628] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:43:39.032 [DEBUG] [Thread-171628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:43:39.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:43:39.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:43:39.034 [DEBUG] [Thread-171628] [transport.py] [_log()] userauth is OK
2026-04-11T14:43:39.034 [DEBUG] [Thread-171628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:43:39.034 [DEBUG] [Thread-171628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:43:39.035 [DEBUG] [Thread-171628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:43:39.035 [DEBUG] [Thread-171628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:43:39.058 [INFO] [Thread-171628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:43:39.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:43:39.860 [DEBUG] [Thread-171628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:43:39.861 [DEBUG] [Thread-171628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:43:39.862 [DEBUG] [Thread-171628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:43:39.902 [DEBUG] [Thread-171628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:43:39.902 [DEBUG] [Thread-171628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:43:39.906 [DEBUG] [Thread-171628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:43:39.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:43:39.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:43:39.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:43:39.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:43:39.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:43:39.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:43:39.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:43:39.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:43:39.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:43:39.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.529978 -999.00  +14.80   8.94     91  +13.40 1 3 1 3 1   888    0 2.10 39.27 ----- 7.9 8.9 36.2 10.5 18.4 0.2 18.1 -8.5 17.8 -0.1 18.3 0.9
2026-04-11T14:43:39.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:43:39.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:43:39.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.529978
2026-04-11T14:43:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:43:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:43:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:43:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:43:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:43:39.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:43:12', tmtdew=0.07485, humidity=99.7973, cloud=0.0, wind=8.50572, temperature=14.0588, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:43:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:43:39.933 [DEBUG] [Thread-171628] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:43:40.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:43:40.028 [DEBUG] [Thread-171631] [transport.py] [_log()] starting thread (client mode): 0xb39c6170
2026-04-11T14:43:40.028 [DEBUG] [Thread-171631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:43:40.043 [DEBUG] [Thread-171631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:43:40.043 [INFO] [Thread-171631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:43:40.051 [DEBUG] [Thread-171631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:43:40.051 [DEBUG] [Thread-171631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:43:40.052 [DEBUG] [Thread-171631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:43:40.052 [DEBUG] [Thread-171631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:40.052 [DEBUG] [Thread-171631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:43:40.052 [DEBUG] [Thread-171631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:40.052 [DEBUG] [Thread-171631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:43:40.052 [DEBUG] [Thread-171631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] client lang: <none>
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] server lang: <none>
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] kex follows: False
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] Compression: none
2026-04-11T14:43:40.053 [DEBUG] [Thread-171631] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:43:40.110 [DEBUG] [Thread-171631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:43:40.111 [DEBUG] [Thread-171631] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:43:40.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:43:40.112 [DEBUG] [Thread-171631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:43:40.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:43:40.167 [DEBUG] [Thread-171631] [transport.py] [_log()] userauth is OK
2026-04-11T14:43:40.167 [DEBUG] [Thread-171631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:43:40.167 [DEBUG] [Thread-171631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:43:40.168 [DEBUG] [Thread-171631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:43:40.168 [DEBUG] [Thread-171631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:43:40.190 [INFO] [Thread-171631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:43:40.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:43:40.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:43:41.006 [DEBUG] [Thread-171631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:43:41.006 [DEBUG] [Thread-171631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:43:41.054 [DEBUG] [Thread-171631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:43:41.054 [DEBUG] [Thread-171631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:43:41.064 [DEBUG] [Thread-171631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:43:41.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:43:41.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:43:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:43:41.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:43:41.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:43:41.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:43:41.103 [DEBUG] [Thread-171631] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:43:42.546 [DEBUG] [Thread-171633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:43:57.598 [DEBUG] [Thread-171634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:11.074 [DEBUG] [Thread-171635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:11.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:44:11.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:44:11.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-04-11T14:44:12.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 43, 47), 0.04444, 99.6277, 0.0, 7.62408, 14.7829, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:44:12.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:43:47
2026-04-11T14:44:12.636 [DEBUG] [Thread-171636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:12.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:44:12.846 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:12.847 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:12.911 [DEBUG] [Thread-171637] [transport.py] [_log()] starting thread (client mode): 0xb39c7b20
2026-04-11T14:44:12.911 [DEBUG] [Thread-171637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:44:12.929 [DEBUG] [Thread-171637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:44:12.929 [INFO] [Thread-171637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] client lang: <none>
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] server lang: <none>
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] kex follows: False
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] Compression: none
2026-04-11T14:44:12.932 [DEBUG] [Thread-171637] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:44:12.948 [DEBUG] [Thread-171637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:44:12.948 [DEBUG] [Thread-171637] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:44:12.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:44:12.949 [DEBUG] [Thread-171637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:44:12.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:44:12.952 [DEBUG] [Thread-171637] [transport.py] [_log()] userauth is OK
2026-04-11T14:44:12.952 [DEBUG] [Thread-171637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:44:12.952 [DEBUG] [Thread-171637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:44:12.952 [DEBUG] [Thread-171637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:44:12.952 [DEBUG] [Thread-171637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:44:12.970 [INFO] [Thread-171637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:44:12.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:44:13.812 [DEBUG] [Thread-171637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:44:13.812 [DEBUG] [Thread-171637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:44:13.812 [DEBUG] [Thread-171637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:44:13.853 [DEBUG] [Thread-171637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:44:13.853 [DEBUG] [Thread-171637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:44:13.856 [DEBUG] [Thread-171637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:44:13.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:44:13.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:44:13.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:44:13.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:44:13.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:44:13.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:44:13.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:44:13.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:44:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:44:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.530326 -999.00  +14.90   9.71     91  +13.60 1 3 1 3 1   888    0 2.14 40.26 ----- 8.6 9.7 30.2 10.0 18.5 0.4 18.2 -8.4 17.9 0.8 18.4 1.4
2026-04-11T14:44:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:44:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:44:13.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.530326
2026-04-11T14:44:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:44:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:44:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:44:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:44:13.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:44:13.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:43:47', tmtdew=0.04444, humidity=99.6277, cloud=0.0, wind=7.62408, temperature=14.7829, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:43:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:44:13.883 [DEBUG] [Thread-171637] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:44:13.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:44:13.979 [DEBUG] [Thread-171640] [transport.py] [_log()] starting thread (client mode): 0xae537340
2026-04-11T14:44:13.980 [DEBUG] [Thread-171640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:44:13.997 [DEBUG] [Thread-171640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:44:13.997 [INFO] [Thread-171640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:44:14.005 [DEBUG] [Thread-171640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:44:14.005 [DEBUG] [Thread-171640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:44:14.005 [DEBUG] [Thread-171640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:44:14.005 [DEBUG] [Thread-171640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] client lang: <none>
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] server lang: <none>
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] kex follows: False
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] Compression: none
2026-04-11T14:44:14.006 [DEBUG] [Thread-171640] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:44:14.063 [DEBUG] [Thread-171640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:44:14.063 [DEBUG] [Thread-171640] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:44:14.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:44:14.064 [DEBUG] [Thread-171640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:44:14.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:44:14.119 [DEBUG] [Thread-171640] [transport.py] [_log()] userauth is OK
2026-04-11T14:44:14.119 [DEBUG] [Thread-171640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:44:14.119 [DEBUG] [Thread-171640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:44:14.119 [DEBUG] [Thread-171640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:44:14.119 [DEBUG] [Thread-171640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:44:14.138 [INFO] [Thread-171640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:44:14.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:44:14.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:44:14.948 [DEBUG] [Thread-171640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:44:14.949 [DEBUG] [Thread-171640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:44:14.996 [DEBUG] [Thread-171640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:44:14.996 [DEBUG] [Thread-171640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:44:15.005 [DEBUG] [Thread-171640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:44:15.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:44:15.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-04-11T14:44:15.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-04-11T14:44:15.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:44:15.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:44:15.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:44:15.043 [DEBUG] [Thread-171640] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:44:27.679 [DEBUG] [Thread-171642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:42.726 [DEBUG] [Thread-171643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:44:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:44:45.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:44:45.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:44:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 44, 23), 0.072255, 99.8138, 0.0, 7.95888, 14.1917, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:44:46.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:44:23
2026-04-11T14:44:46.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:44:46.906 [DEBUG] [Thread-171644] [transport.py] [_log()] starting thread (client mode): 0xb39c7ee0
2026-04-11T14:44:46.906 [DEBUG] [Thread-171644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:44:46.931 [DEBUG] [Thread-171644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:44:46.932 [INFO] [Thread-171644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:44:46.935 [DEBUG] [Thread-171644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:44:46.935 [DEBUG] [Thread-171644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:44:46.935 [DEBUG] [Thread-171644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:44:46.935 [DEBUG] [Thread-171644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] client lang: <none>
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] server lang: <none>
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] kex follows: False
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:44:46.936 [DEBUG] [Thread-171644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:44:46.937 [DEBUG] [Thread-171644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:44:46.937 [DEBUG] [Thread-171644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:44:46.937 [DEBUG] [Thread-171644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:44:46.937 [DEBUG] [Thread-171644] [transport.py] [_log()] Compression: none
2026-04-11T14:44:46.937 [DEBUG] [Thread-171644] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:44:46.955 [DEBUG] [Thread-171644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:44:46.956 [DEBUG] [Thread-171644] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:44:46.956 [DEBUG] [Thread-171644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:44:46.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:44:46.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:44:46.958 [DEBUG] [Thread-171644] [transport.py] [_log()] userauth is OK
2026-04-11T14:44:46.958 [DEBUG] [Thread-171644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:44:46.958 [DEBUG] [Thread-171644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:44:46.959 [DEBUG] [Thread-171644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:44:46.959 [DEBUG] [Thread-171644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:44:46.981 [INFO] [Thread-171644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:44:46.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:44:47.802 [DEBUG] [Thread-171644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:44:47.802 [DEBUG] [Thread-171644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:44:47.803 [DEBUG] [Thread-171644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:44:47.844 [DEBUG] [Thread-171644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:44:47.844 [DEBUG] [Thread-171644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:44:47.847 [DEBUG] [Thread-171644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:44:47.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:44:47.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:44:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:44:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:44:47.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:44:47.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:44:47.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:44:47.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:44:47.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:44:47.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.530673 -999.00  +15.10  10.61     92  +13.80 1 3 1 3 1   888    0 2.25 43.20 ----- 10.8 10.6 27.4 11.9 18.6 0.1 18.2 -8.4 18.0 0.4 18.4 1.5
2026-04-11T14:44:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:44:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:44:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.530673
2026-04-11T14:44:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:44:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:44:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:44:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:44:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:44:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:44:23', tmtdew=0.072255, humidity=99.8138, cloud=0.0, wind=7.95888, temperature=14.1917, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:44:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:44:47.874 [DEBUG] [Thread-171644] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:44:47.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:44:47.965 [DEBUG] [Thread-171647] [transport.py] [_log()] starting thread (client mode): 0xb39c7bb0
2026-04-11T14:44:47.965 [DEBUG] [Thread-171647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:44:47.980 [DEBUG] [Thread-171647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:44:47.980 [INFO] [Thread-171647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] client lang: <none>
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] server lang: <none>
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] kex follows: False
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] Compression: none
2026-04-11T14:44:47.987 [DEBUG] [Thread-171647] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:44:48.048 [DEBUG] [Thread-171647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:44:48.049 [DEBUG] [Thread-171647] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:44:48.049 [DEBUG] [Thread-171647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:44:48.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:44:48.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:44:48.108 [DEBUG] [Thread-171647] [transport.py] [_log()] userauth is OK
2026-04-11T14:44:48.108 [DEBUG] [Thread-171647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:44:48.109 [DEBUG] [Thread-171647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:44:48.109 [DEBUG] [Thread-171647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:44:48.109 [DEBUG] [Thread-171647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:44:48.130 [INFO] [Thread-171647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:44:48.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:44:48.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:44:48.948 [DEBUG] [Thread-171647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:44:48.948 [DEBUG] [Thread-171647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:44:48.998 [DEBUG] [Thread-171647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:44:48.998 [DEBUG] [Thread-171647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:44:49.006 [DEBUG] [Thread-171647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:44:49.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:44:49.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-04-11T14:44:49.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-04-11T14:44:49.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:44:49.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:44:49.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:44:49.040 [DEBUG] [Thread-171647] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:44:57.760 [DEBUG] [Thread-171649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:11.107 [DEBUG] [Thread-171650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:12.810 [DEBUG] [Thread-171651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:12.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:12.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:45:19.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:45:19.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-04-11T14:45:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 44, 58), 0.03, 99.7641, 0.0, 10.1822, 14.1585, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:45:20.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:44:58
2026-04-11T14:45:20.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:45:20.861 [DEBUG] [Thread-171652] [transport.py] [_log()] starting thread (client mode): 0xb39c7340
2026-04-11T14:45:20.861 [DEBUG] [Thread-171652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:45:20.881 [DEBUG] [Thread-171652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:45:20.881 [INFO] [Thread-171652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:45:20.884 [DEBUG] [Thread-171652] [transport.py] [_log()] client lang: <none>
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] server lang: <none>
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] kex follows: False
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] Compression: none
2026-04-11T14:45:20.885 [DEBUG] [Thread-171652] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:45:20.907 [DEBUG] [Thread-171652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:45:20.907 [DEBUG] [Thread-171652] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:45:20.908 [DEBUG] [Thread-171652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:45:20.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:45:20.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:45:20.910 [DEBUG] [Thread-171652] [transport.py] [_log()] userauth is OK
2026-04-11T14:45:20.910 [DEBUG] [Thread-171652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:45:20.910 [DEBUG] [Thread-171652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:45:20.910 [DEBUG] [Thread-171652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:45:20.910 [DEBUG] [Thread-171652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:45:20.927 [INFO] [Thread-171652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:45:20.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:45:22.034 [DEBUG] [Thread-171652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:45:22.034 [DEBUG] [Thread-171652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:45:22.034 [DEBUG] [Thread-171652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:45:22.075 [DEBUG] [Thread-171652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:45:22.075 [DEBUG] [Thread-171652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:45:22.078 [DEBUG] [Thread-171652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:45:22.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:45:22.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:45:22.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:45:22.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:45:22.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:45:22.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:45:22.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:45:22.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:45:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:45:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.531020 -999.00  +15.10  11.57     91  +13.70 1 3 1 3 1   888    0 2.26 42.63 ----- 10.0 11.6 24.0 12.6 18.6 0.4 18.2 -9.0 18.0 0.6 18.4 1.3
2026-04-11T14:45:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:45:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:45:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.531020
2026-04-11T14:45:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:45:22.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:45:22.108 [DEBUG] [Thread-171652] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:45:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:45:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:45:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:45:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:44:58', tmtdew=0.03, humidity=99.7641, cloud=0.0, wind=10.1822, temperature=14.1585, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:44:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:45:22.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:45:22.203 [DEBUG] [Thread-171655] [transport.py] [_log()] starting thread (client mode): 0xae561c90
2026-04-11T14:45:22.203 [DEBUG] [Thread-171655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:45:22.217 [DEBUG] [Thread-171655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:45:22.217 [INFO] [Thread-171655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:45:22.225 [DEBUG] [Thread-171655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:45:22.225 [DEBUG] [Thread-171655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] client lang: <none>
2026-04-11T14:45:22.226 [DEBUG] [Thread-171655] [transport.py] [_log()] server lang: <none>
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] kex follows: False
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] Compression: none
2026-04-11T14:45:22.227 [DEBUG] [Thread-171655] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:45:22.283 [DEBUG] [Thread-171655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:45:22.284 [DEBUG] [Thread-171655] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:45:22.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:45:22.285 [DEBUG] [Thread-171655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:45:22.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:45:22.343 [DEBUG] [Thread-171655] [transport.py] [_log()] userauth is OK
2026-04-11T14:45:22.343 [DEBUG] [Thread-171655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:45:22.343 [DEBUG] [Thread-171655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:45:22.343 [DEBUG] [Thread-171655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:45:22.343 [DEBUG] [Thread-171655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:45:22.362 [INFO] [Thread-171655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:45:22.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:45:22.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:45:23.165 [DEBUG] [Thread-171655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:45:23.166 [DEBUG] [Thread-171655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:45:23.214 [DEBUG] [Thread-171655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:45:23.215 [DEBUG] [Thread-171655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:45:23.224 [DEBUG] [Thread-171655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:45:23.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:45:23.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-04-11T14:45:23.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-04-11T14:45:23.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:45:23.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:45:23.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:45:23.261 [DEBUG] [Thread-171655] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:45:27.847 [DEBUG] [Thread-171657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:42.895 [DEBUG] [Thread-171658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:45:53.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:45:53.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:45:53.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-04-11T14:45:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 45, 33), 0.04451, 99.6274, 0.0, 9.28224, 14.7164, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:45:54.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:45:33
2026-04-11T14:45:54.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:45:55.126 [DEBUG] [Thread-171659] [transport.py] [_log()] starting thread (client mode): 0xb0feaf80
2026-04-11T14:45:55.126 [DEBUG] [Thread-171659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:45:55.145 [DEBUG] [Thread-171659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:45:55.146 [INFO] [Thread-171659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:45:55.149 [DEBUG] [Thread-171659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:45:55.149 [DEBUG] [Thread-171659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:45:55.149 [DEBUG] [Thread-171659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:45:55.149 [DEBUG] [Thread-171659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:55.149 [DEBUG] [Thread-171659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:55.149 [DEBUG] [Thread-171659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] client lang: <none>
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] server lang: <none>
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] kex follows: False
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] Compression: none
2026-04-11T14:45:55.150 [DEBUG] [Thread-171659] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:45:55.168 [DEBUG] [Thread-171659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:45:55.169 [DEBUG] [Thread-171659] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:45:55.170 [DEBUG] [Thread-171659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:45:55.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:45:55.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:45:55.172 [DEBUG] [Thread-171659] [transport.py] [_log()] userauth is OK
2026-04-11T14:45:55.172 [DEBUG] [Thread-171659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:45:55.173 [DEBUG] [Thread-171659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:45:55.173 [DEBUG] [Thread-171659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:45:55.173 [DEBUG] [Thread-171659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:45:55.208 [INFO] [Thread-171659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:45:55.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:45:56.052 [DEBUG] [Thread-171659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:45:56.053 [DEBUG] [Thread-171659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:45:56.053 [DEBUG] [Thread-171659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:45:56.094 [DEBUG] [Thread-171659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:45:56.094 [DEBUG] [Thread-171659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:45:56.098 [DEBUG] [Thread-171659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:45:56.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:45:56.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:45:56.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:45:56.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:45:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:45:56.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:45:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:45:56.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:45:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:45:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.531367 -999.00  +15.10   6.82     91  +13.70 1 3 1 3 1   888    0 2.37 46.03 ----- 9.3 6.8 21.8 11.0 18.7 0.4 18.3 -8.9 18.1 1.0 18.4 1.2
2026-04-11T14:45:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:45:56.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:45:56.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.531367
2026-04-11T14:45:56.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:45:56.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:45:56.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:45:56.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:45:56.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:45:56.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:45:33', tmtdew=0.04451, humidity=99.6274, cloud=0.0, wind=9.28224, temperature=14.7164, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:45:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:45:56.126 [DEBUG] [Thread-171659] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:45:56.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:45:56.219 [DEBUG] [Thread-171662] [transport.py] [_log()] starting thread (client mode): 0xae51b970
2026-04-11T14:45:56.219 [DEBUG] [Thread-171662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:45:56.234 [DEBUG] [Thread-171662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:45:56.234 [INFO] [Thread-171662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] client lang: <none>
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] server lang: <none>
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] kex follows: False
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:45:56.242 [DEBUG] [Thread-171662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:45:56.243 [DEBUG] [Thread-171662] [transport.py] [_log()] Compression: none
2026-04-11T14:45:56.243 [DEBUG] [Thread-171662] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:45:56.298 [DEBUG] [Thread-171662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:45:56.299 [DEBUG] [Thread-171662] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:45:56.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:45:56.300 [DEBUG] [Thread-171662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:45:56.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:45:56.355 [DEBUG] [Thread-171662] [transport.py] [_log()] userauth is OK
2026-04-11T14:45:56.356 [DEBUG] [Thread-171662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:45:56.356 [DEBUG] [Thread-171662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:45:56.356 [DEBUG] [Thread-171662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:45:56.356 [DEBUG] [Thread-171662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:45:56.375 [INFO] [Thread-171662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:45:56.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:45:56.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:45:57.197 [DEBUG] [Thread-171662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:45:57.197 [DEBUG] [Thread-171662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:45:57.245 [DEBUG] [Thread-171662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:45:57.245 [DEBUG] [Thread-171662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:45:57.254 [DEBUG] [Thread-171662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:45:57.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:45:57.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-04-11T14:45:57.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:45:57.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:45:57.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:45:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:45:57.291 [DEBUG] [Thread-171662] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:45:57.937 [DEBUG] [Thread-171664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:11.140 [DEBUG] [Thread-171665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:12.989 [DEBUG] [Thread-171666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:13.128 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:13.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:46:27.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:46:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:46:28.025 [DEBUG] [Thread-171667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 46, 9), 0.072255, 99.8137, 0.0, 8.73504, 14.2082, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:46:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:46:09
2026-04-11T14:46:28.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:46:29.068 [DEBUG] [Thread-171668] [transport.py] [_log()] starting thread (client mode): 0xae536560
2026-04-11T14:46:29.068 [DEBUG] [Thread-171668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:46:29.092 [DEBUG] [Thread-171668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:46:29.093 [INFO] [Thread-171668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:46:29.096 [DEBUG] [Thread-171668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:46:29.097 [DEBUG] [Thread-171668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] client lang: <none>
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] server lang: <none>
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] kex follows: False
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:46:29.098 [DEBUG] [Thread-171668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:46:29.099 [DEBUG] [Thread-171668] [transport.py] [_log()] Compression: none
2026-04-11T14:46:29.099 [DEBUG] [Thread-171668] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:46:29.119 [DEBUG] [Thread-171668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:46:29.120 [DEBUG] [Thread-171668] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:46:29.120 [DEBUG] [Thread-171668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:46:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:46:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:46:29.122 [DEBUG] [Thread-171668] [transport.py] [_log()] userauth is OK
2026-04-11T14:46:29.122 [DEBUG] [Thread-171668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:46:29.123 [DEBUG] [Thread-171668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:46:29.123 [DEBUG] [Thread-171668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:46:29.123 [DEBUG] [Thread-171668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:46:29.146 [INFO] [Thread-171668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:46:29.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:46:29.984 [DEBUG] [Thread-171668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:46:29.984 [DEBUG] [Thread-171668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:46:29.984 [DEBUG] [Thread-171668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:46:30.025 [DEBUG] [Thread-171668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:46:30.025 [DEBUG] [Thread-171668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:46:30.028 [DEBUG] [Thread-171668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:46:30.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:46:30.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:46:30.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:46:30.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:46:30.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:46:30.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:46:30.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:46:30.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:46:30.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:46:30.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.531714 -999.00  +15.10  11.20     91  +13.80 1 3 1 3 1   888    0 2.24 41.97 ----- 10.8 11.2 31.0 12.1 18.7 0.1 18.4 -9.0 18.1 0.5 18.5 1.0
2026-04-11T14:46:30.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:46:30.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:46:30.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.531714
2026-04-11T14:46:30.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:46:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:46:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:46:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:46:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:46:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:46:09', tmtdew=0.072255, humidity=99.8137, cloud=0.0, wind=8.73504, temperature=14.2082, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:45:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:46:30.056 [DEBUG] [Thread-171668] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:46:30.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:46:30.154 [DEBUG] [Thread-171671] [transport.py] [_log()] starting thread (client mode): 0xb0fea9e0
2026-04-11T14:46:30.154 [DEBUG] [Thread-171671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:46:30.172 [DEBUG] [Thread-171671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:46:30.172 [INFO] [Thread-171671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:46:30.181 [DEBUG] [Thread-171671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:46:30.182 [DEBUG] [Thread-171671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:46:30.182 [DEBUG] [Thread-171671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:46:30.182 [DEBUG] [Thread-171671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:46:30.182 [DEBUG] [Thread-171671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] client lang: <none>
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] server lang: <none>
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] kex follows: False
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] Compression: none
2026-04-11T14:46:30.183 [DEBUG] [Thread-171671] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:46:30.243 [DEBUG] [Thread-171671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:46:30.244 [DEBUG] [Thread-171671] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:46:30.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:46:30.245 [DEBUG] [Thread-171671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:46:30.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:46:30.299 [DEBUG] [Thread-171671] [transport.py] [_log()] userauth is OK
2026-04-11T14:46:30.299 [DEBUG] [Thread-171671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:46:30.299 [DEBUG] [Thread-171671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:46:30.300 [DEBUG] [Thread-171671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:46:30.300 [DEBUG] [Thread-171671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:46:30.319 [INFO] [Thread-171671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:46:30.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:46:30.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:46:31.146 [DEBUG] [Thread-171671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:46:31.147 [DEBUG] [Thread-171671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:46:31.195 [DEBUG] [Thread-171671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:46:31.195 [DEBUG] [Thread-171671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:46:31.204 [DEBUG] [Thread-171671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:46:31.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:46:31.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-04-11T14:46:31.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-04-11T14:46:31.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:46:31.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:46:31.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:46:31.241 [DEBUG] [Thread-171671] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:46:43.064 [DEBUG] [Thread-171673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:46:58.120 [DEBUG] [Thread-171674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:01.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:47:01.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:47:01.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:47:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 46, 44), 0.06519, 99.4947, 0.0, 9.98784, 14.6169, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:47:02.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:46:44
2026-04-11T14:47:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:47:03.102 [DEBUG] [Thread-171675] [transport.py] [_log()] starting thread (client mode): 0xae51a530
2026-04-11T14:47:03.102 [DEBUG] [Thread-171675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:47:03.122 [DEBUG] [Thread-171675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:47:03.122 [INFO] [Thread-171675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] client lang: <none>
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] server lang: <none>
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] kex follows: False
2026-04-11T14:47:03.125 [DEBUG] [Thread-171675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:47:03.126 [DEBUG] [Thread-171675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:47:03.126 [DEBUG] [Thread-171675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:47:03.126 [DEBUG] [Thread-171675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:47:03.126 [DEBUG] [Thread-171675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:47:03.126 [DEBUG] [Thread-171675] [transport.py] [_log()] Compression: none
2026-04-11T14:47:03.126 [DEBUG] [Thread-171675] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:47:03.148 [DEBUG] [Thread-171675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:47:03.148 [DEBUG] [Thread-171675] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:47:03.149 [DEBUG] [Thread-171675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:47:03.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:47:03.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:47:03.151 [DEBUG] [Thread-171675] [transport.py] [_log()] userauth is OK
2026-04-11T14:47:03.151 [DEBUG] [Thread-171675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:47:03.151 [DEBUG] [Thread-171675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:47:03.151 [DEBUG] [Thread-171675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:47:03.151 [DEBUG] [Thread-171675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:47:03.175 [INFO] [Thread-171675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:47:03.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:47:04.021 [DEBUG] [Thread-171675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:47:04.022 [DEBUG] [Thread-171675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:47:04.022 [DEBUG] [Thread-171675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:47:04.062 [DEBUG] [Thread-171675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:47:04.063 [DEBUG] [Thread-171675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:47:04.066 [DEBUG] [Thread-171675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:47:04.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:47:04.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:47:04.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:47:04.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:47:04.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:47:04.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:47:04.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:47:04.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:47:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:47:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.532062 -999.00  +15.10  12.45     90  +13.60 1 3 1 3 1   888    0 2.21 40.46 ----- 12.5 12.4 57.2 13.6 18.7 0.3 18.4 -8.9 -999.0 -999.0 18.6 1.3
2026-04-11T14:47:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:47:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:47:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.532062
2026-04-11T14:47:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:47:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:47:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:47:04.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:47:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:47:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:46:44', tmtdew=0.06519, humidity=99.4947, cloud=0.0, wind=9.98784, temperature=14.6169, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:46:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:47:04.093 [DEBUG] [Thread-171675] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:47:04.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:47:04.185 [DEBUG] [Thread-171678] [transport.py] [_log()] starting thread (client mode): 0xb0fead10
2026-04-11T14:47:04.185 [DEBUG] [Thread-171678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:47:04.200 [DEBUG] [Thread-171678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:47:04.200 [INFO] [Thread-171678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] client lang: <none>
2026-04-11T14:47:04.208 [DEBUG] [Thread-171678] [transport.py] [_log()] server lang: <none>
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] kex follows: False
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] Compression: none
2026-04-11T14:47:04.209 [DEBUG] [Thread-171678] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:47:04.267 [DEBUG] [Thread-171678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:47:04.268 [DEBUG] [Thread-171678] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:47:04.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:47:04.269 [DEBUG] [Thread-171678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:47:04.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:47:04.323 [DEBUG] [Thread-171678] [transport.py] [_log()] userauth is OK
2026-04-11T14:47:04.323 [DEBUG] [Thread-171678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:47:04.324 [DEBUG] [Thread-171678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:47:04.324 [DEBUG] [Thread-171678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:47:04.324 [DEBUG] [Thread-171678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:47:04.344 [INFO] [Thread-171678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:47:04.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:47:04.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:47:05.169 [DEBUG] [Thread-171678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:47:05.169 [DEBUG] [Thread-171678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:47:05.217 [DEBUG] [Thread-171678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:47:05.217 [DEBUG] [Thread-171678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:47:05.226 [DEBUG] [Thread-171678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:47:05.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:47:05.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:47:05.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:47:05.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:47:05.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:47:05.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:47:05.263 [DEBUG] [Thread-171678] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:47:11.186 [DEBUG] [Thread-171680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:13.156 [DEBUG] [Thread-171681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:13.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:13.272 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:28.218 [DEBUG] [Thread-171682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:35.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:47:35.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:47:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:47:36.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 47, 20), 0.085195, 99.7308, 0.0, 7.42968, 14.0924, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:47:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:47:20
2026-04-11T14:47:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:47:37.114 [DEBUG] [Thread-171683] [transport.py] [_log()] starting thread (client mode): 0xb0feaf80
2026-04-11T14:47:37.114 [DEBUG] [Thread-171683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:47:37.134 [DEBUG] [Thread-171683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:47:37.134 [INFO] [Thread-171683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:47:37.137 [DEBUG] [Thread-171683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:47:37.137 [DEBUG] [Thread-171683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:47:37.137 [DEBUG] [Thread-171683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:47:37.137 [DEBUG] [Thread-171683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] client lang: <none>
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] server lang: <none>
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] kex follows: False
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] Compression: none
2026-04-11T14:47:37.138 [DEBUG] [Thread-171683] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:47:37.157 [DEBUG] [Thread-171683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:47:37.158 [DEBUG] [Thread-171683] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:47:37.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:47:37.159 [DEBUG] [Thread-171683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:47:37.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:47:37.161 [DEBUG] [Thread-171683] [transport.py] [_log()] userauth is OK
2026-04-11T14:47:37.161 [DEBUG] [Thread-171683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:47:37.161 [DEBUG] [Thread-171683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:47:37.161 [DEBUG] [Thread-171683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:47:37.162 [DEBUG] [Thread-171683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:47:37.184 [INFO] [Thread-171683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:47:37.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:47:38.010 [DEBUG] [Thread-171683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:47:38.010 [DEBUG] [Thread-171683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:47:38.010 [DEBUG] [Thread-171683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:47:38.051 [DEBUG] [Thread-171683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:47:38.051 [DEBUG] [Thread-171683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:47:38.054 [DEBUG] [Thread-171683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:47:38.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:47:38.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:47:38.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:47:38.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:47:38.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:47:38.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:47:38.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:47:38.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:47:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:47:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.532756 -999.00  +15.10  10.07     91  +13.60 1 3 1 3 1   888    0 2.25 40.54 ----- 10.8 10.1 27.6 12.2 18.7 0.1 18.4 -9.7 18.1 0.2 18.6 0.9
2026-04-11T14:47:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:47:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:47:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.532756
2026-04-11T14:47:38.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:47:38.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:47:38.159 [DEBUG] [Thread-171683] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:47:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:47:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:47:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:47:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:47:20', tmtdew=0.085195, humidity=99.7308, cloud=0.0, wind=7.42968, temperature=14.0924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:47:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:47:38.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:47:38.254 [DEBUG] [Thread-171686] [transport.py] [_log()] starting thread (client mode): 0xae50a680
2026-04-11T14:47:38.254 [DEBUG] [Thread-171686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:47:38.268 [DEBUG] [Thread-171686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:47:38.268 [INFO] [Thread-171686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:47:38.276 [DEBUG] [Thread-171686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:47:38.276 [DEBUG] [Thread-171686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:47:38.276 [DEBUG] [Thread-171686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:47:38.276 [DEBUG] [Thread-171686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] client lang: <none>
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] server lang: <none>
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] kex follows: False
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] Compression: none
2026-04-11T14:47:38.277 [DEBUG] [Thread-171686] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:47:38.335 [DEBUG] [Thread-171686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:47:38.336 [DEBUG] [Thread-171686] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:47:38.337 [DEBUG] [Thread-171686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:47:38.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:47:38.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:47:38.391 [DEBUG] [Thread-171686] [transport.py] [_log()] userauth is OK
2026-04-11T14:47:38.391 [DEBUG] [Thread-171686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:47:38.392 [DEBUG] [Thread-171686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:47:38.392 [DEBUG] [Thread-171686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:47:38.392 [DEBUG] [Thread-171686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:47:38.416 [INFO] [Thread-171686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:47:38.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:47:38.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:47:39.236 [DEBUG] [Thread-171686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:47:39.236 [DEBUG] [Thread-171686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:47:39.284 [DEBUG] [Thread-171686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:47:39.284 [DEBUG] [Thread-171686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:47:39.294 [DEBUG] [Thread-171686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:47:39.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:47:39.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:47:39.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-04-11T14:47:39.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:47:39.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:47:39.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:47:39.330 [DEBUG] [Thread-171686] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:47:43.258 [DEBUG] [Thread-171688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:47:58.313 [DEBUG] [Thread-171689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:09.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:48:09.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:48:09.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-04-11T14:48:10.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 47, 55), 0.035215, 99.7308, 0.0, 10.6762, 13.9261, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:48:10.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:47:55
2026-04-11T14:48:10.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:48:11.151 [DEBUG] [Thread-171690] [transport.py] [_log()] starting thread (client mode): 0xb0fe9a80
2026-04-11T14:48:11.151 [DEBUG] [Thread-171690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:48:11.171 [DEBUG] [Thread-171690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:48:11.171 [INFO] [Thread-171690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] client lang: <none>
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] server lang: <none>
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] kex follows: False
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] Compression: none
2026-04-11T14:48:11.173 [DEBUG] [Thread-171690] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:48:11.185 [DEBUG] [Thread-171690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:48:11.186 [DEBUG] [Thread-171690] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:48:11.186 [DEBUG] [Thread-171690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:48:11.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:48:11.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:48:11.188 [DEBUG] [Thread-171690] [transport.py] [_log()] userauth is OK
2026-04-11T14:48:11.188 [DEBUG] [Thread-171690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:48:11.188 [DEBUG] [Thread-171690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:48:11.189 [DEBUG] [Thread-171690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:48:11.189 [DEBUG] [Thread-171690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:48:11.209 [INFO] [Thread-171690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:48:11.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:48:11.222 [DEBUG] [Thread-171692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:12.041 [DEBUG] [Thread-171690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:48:12.041 [DEBUG] [Thread-171690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:48:12.041 [DEBUG] [Thread-171690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:48:12.082 [DEBUG] [Thread-171690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:48:12.083 [DEBUG] [Thread-171690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:48:12.086 [DEBUG] [Thread-171690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:48:12.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:48:12.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:48:12.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:48:12.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:48:12.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:48:12.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:48:12.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:48:12.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:48:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:48:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.533103 -999.00  +15.10  11.04     91  +13.70 1 3 1 3 1   888    0 2.20 39.28 ----- 10.8 11.0 44.4 13.4 18.7 0.0 18.4 -8.5 18.1 0.3 18.6 0.8
2026-04-11T14:48:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:48:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:48:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.533103
2026-04-11T14:48:12.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:48:12.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:48:12.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:48:12.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:48:12.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:48:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:47:55', tmtdew=0.035215, humidity=99.7308, cloud=0.0, wind=10.6762, temperature=13.9261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:47:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:48:12.115 [DEBUG] [Thread-171690] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:48:12.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:48:12.211 [DEBUG] [Thread-171694] [transport.py] [_log()] starting thread (client mode): 0xb0fe8580
2026-04-11T14:48:12.211 [DEBUG] [Thread-171694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:48:12.226 [DEBUG] [Thread-171694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:48:12.226 [INFO] [Thread-171694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:48:12.233 [DEBUG] [Thread-171694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:12.234 [DEBUG] [Thread-171694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] client lang: <none>
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] server lang: <none>
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] kex follows: False
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] Compression: none
2026-04-11T14:48:12.235 [DEBUG] [Thread-171694] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:48:12.291 [DEBUG] [Thread-171694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:48:12.292 [DEBUG] [Thread-171694] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:48:12.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:48:12.293 [DEBUG] [Thread-171694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:48:12.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:48:12.347 [DEBUG] [Thread-171694] [transport.py] [_log()] userauth is OK
2026-04-11T14:48:12.348 [DEBUG] [Thread-171694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:48:12.348 [DEBUG] [Thread-171694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:48:12.348 [DEBUG] [Thread-171694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:48:12.348 [DEBUG] [Thread-171694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:48:12.366 [INFO] [Thread-171694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:48:12.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:48:12.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:48:13.187 [DEBUG] [Thread-171694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:48:13.188 [DEBUG] [Thread-171694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:48:13.236 [DEBUG] [Thread-171694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:48:13.236 [DEBUG] [Thread-171694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:48:13.246 [DEBUG] [Thread-171694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:48:13.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:48:13.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-04-11T14:48:13.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-04-11T14:48:13.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:48:13.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:48:13.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:48:13.289 [DEBUG] [Thread-171694] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:48:13.349 [DEBUG] [Thread-171696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:13.412 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:13.414 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:28.403 [DEBUG] [Thread-171697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:43.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:48:43.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:48:43.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-04-11T14:48:43.440 [DEBUG] [Thread-171698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:48:44.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 48, 31), 0.030055, 99.7639, 0.0, 10.6938, 13.9758, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:48:44.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:48:31
2026-04-11T14:48:44.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:48:45.094 [DEBUG] [Thread-171699] [transport.py] [_log()] starting thread (client mode): 0xae519a80
2026-04-11T14:48:45.094 [DEBUG] [Thread-171699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:48:45.114 [DEBUG] [Thread-171699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:48:45.114 [INFO] [Thread-171699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:48:45.117 [DEBUG] [Thread-171699] [transport.py] [_log()] client lang: <none>
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] server lang: <none>
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] kex follows: False
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] Compression: none
2026-04-11T14:48:45.118 [DEBUG] [Thread-171699] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:48:45.133 [DEBUG] [Thread-171699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:48:45.134 [DEBUG] [Thread-171699] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:48:45.134 [DEBUG] [Thread-171699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:48:45.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:48:45.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:48:45.137 [DEBUG] [Thread-171699] [transport.py] [_log()] userauth is OK
2026-04-11T14:48:45.137 [DEBUG] [Thread-171699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:48:45.137 [DEBUG] [Thread-171699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:48:45.137 [DEBUG] [Thread-171699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:48:45.137 [DEBUG] [Thread-171699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:48:45.161 [INFO] [Thread-171699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:48:45.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:48:45.910 [DEBUG] [Thread-171699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:48:45.911 [DEBUG] [Thread-171699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:48:45.911 [DEBUG] [Thread-171699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:48:45.952 [DEBUG] [Thread-171699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:48:45.952 [DEBUG] [Thread-171699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:48:45.956 [DEBUG] [Thread-171699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:48:45.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:48:45.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:48:45.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:48:45.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:48:45.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:48:45.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:48:45.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:48:45.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:48:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:48:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.533450 -999.00  +15.00  12.82     91  +13.50 1 3 1 3 1   888    0 2.25 40.38 ----- 12.1 12.8 25.0 14.0 18.7 -0.5 18.5 -9.4 18.1 -0.3 18.6 0.5
2026-04-11T14:48:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:48:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:48:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.533450
2026-04-11T14:48:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:48:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:48:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:48:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:48:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:48:45.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:48:31', tmtdew=0.030055, humidity=99.7639, cloud=0.0, wind=10.6938, temperature=13.9758, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:48:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:48:45.987 [DEBUG] [Thread-171699] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:48:46.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:48:46.079 [DEBUG] [Thread-171702] [transport.py] [_log()] starting thread (client mode): 0xae50b640
2026-04-11T14:48:46.079 [DEBUG] [Thread-171702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:48:46.094 [DEBUG] [Thread-171702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:48:46.094 [INFO] [Thread-171702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:48:46.101 [DEBUG] [Thread-171702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] client lang: <none>
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] server lang: <none>
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] kex follows: False
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] Compression: none
2026-04-11T14:48:46.102 [DEBUG] [Thread-171702] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:48:46.160 [DEBUG] [Thread-171702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:48:46.160 [DEBUG] [Thread-171702] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:48:46.161 [DEBUG] [Thread-171702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:48:46.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:48:46.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:48:46.219 [DEBUG] [Thread-171702] [transport.py] [_log()] userauth is OK
2026-04-11T14:48:46.220 [DEBUG] [Thread-171702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:48:46.220 [DEBUG] [Thread-171702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:48:46.220 [DEBUG] [Thread-171702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:48:46.220 [DEBUG] [Thread-171702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:48:46.238 [INFO] [Thread-171702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:48:46.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:48:46.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:48:47.049 [DEBUG] [Thread-171702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:48:47.049 [DEBUG] [Thread-171702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:48:47.097 [DEBUG] [Thread-171702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:48:47.097 [DEBUG] [Thread-171702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:48:47.105 [DEBUG] [Thread-171702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:48:47.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:48:47.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-04-11T14:48:47.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-04-11T14:48:47.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:48:47.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:48:47.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:48:47.138 [DEBUG] [Thread-171702] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:48:58.476 [DEBUG] [Thread-171704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:11.272 [DEBUG] [Thread-171705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:13.524 [DEBUG] [Thread-171706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:13.555 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:13.556 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:17.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:49:17.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:49:17.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-04-11T14:49:18.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 49, 6), 0.03006, 99.7639, 29.3, 10.8349, 13.9758, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:49:18.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:49:06
2026-04-11T14:49:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:49:19.013 [DEBUG] [Thread-171707] [transport.py] [_log()] starting thread (client mode): 0xae50b8e0
2026-04-11T14:49:19.013 [DEBUG] [Thread-171707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:49:19.030 [DEBUG] [Thread-171707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:49:19.030 [INFO] [Thread-171707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] client lang: <none>
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] server lang: <none>
2026-04-11T14:49:19.033 [DEBUG] [Thread-171707] [transport.py] [_log()] kex follows: False
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] Compression: none
2026-04-11T14:49:19.034 [DEBUG] [Thread-171707] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:49:19.048 [DEBUG] [Thread-171707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:49:19.049 [DEBUG] [Thread-171707] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:49:19.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:49:19.050 [DEBUG] [Thread-171707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:49:19.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:49:19.053 [DEBUG] [Thread-171707] [transport.py] [_log()] userauth is OK
2026-04-11T14:49:19.053 [DEBUG] [Thread-171707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:49:19.053 [DEBUG] [Thread-171707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:49:19.053 [DEBUG] [Thread-171707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:49:19.053 [DEBUG] [Thread-171707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:49:19.091 [INFO] [Thread-171707] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:49:19.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:49:19.934 [DEBUG] [Thread-171707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:49:19.935 [DEBUG] [Thread-171707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:49:19.935 [DEBUG] [Thread-171707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:49:19.976 [DEBUG] [Thread-171707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:49:19.976 [DEBUG] [Thread-171707] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:49:19.980 [DEBUG] [Thread-171707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:49:19.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:49:19.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:49:19.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:49:19.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:49:20.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:49:20.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:49:20.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:49:20.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:49:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:49:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.533798 -999.00  +15.10  11.02     91  +13.70 1 3 1 3 1   888    0 2.22 38.65 ----- 11.3 11.0 34.6 11.6 18.7 -0.6 18.5 -9.0 18.1 -0.5 18.5 0.8
2026-04-11T14:49:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:49:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:49:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.533798
2026-04-11T14:49:20.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:49:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:49:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:49:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:49:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:49:20.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:49:06', tmtdew=0.03006, humidity=99.7639, cloud=29.3, wind=10.8349, temperature=13.9758, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:48:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:49:20.006 [DEBUG] [Thread-171707] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:49:20.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:49:20.100 [DEBUG] [Thread-171710] [transport.py] [_log()] starting thread (client mode): 0xae509150
2026-04-11T14:49:20.100 [DEBUG] [Thread-171710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:49:20.115 [DEBUG] [Thread-171710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:49:20.115 [INFO] [Thread-171710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:49:20.123 [DEBUG] [Thread-171710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] client lang: <none>
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] server lang: <none>
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] kex follows: False
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] Compression: none
2026-04-11T14:49:20.124 [DEBUG] [Thread-171710] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:49:20.184 [DEBUG] [Thread-171710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:49:20.185 [DEBUG] [Thread-171710] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:49:20.186 [DEBUG] [Thread-171710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:49:20.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:49:20.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:49:20.244 [DEBUG] [Thread-171710] [transport.py] [_log()] userauth is OK
2026-04-11T14:49:20.244 [DEBUG] [Thread-171710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:49:20.245 [DEBUG] [Thread-171710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:49:20.245 [DEBUG] [Thread-171710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:49:20.245 [DEBUG] [Thread-171710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:49:20.265 [INFO] [Thread-171710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:49:20.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:49:20.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:49:21.059 [DEBUG] [Thread-171710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:49:21.059 [DEBUG] [Thread-171710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:49:21.107 [DEBUG] [Thread-171710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:49:21.107 [DEBUG] [Thread-171710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:49:21.117 [DEBUG] [Thread-171710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:49:21.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:49:21.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-04-11T14:49:21.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-04-11T14:49:21.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:49:21.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:49:21.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:49:21.154 [DEBUG] [Thread-171710] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:49:28.562 [DEBUG] [Thread-171712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:43.650 [DEBUG] [Thread-171713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:49:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:49:51.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:49:51.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-04-11T14:49:52.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 49, 41), 0.07044, 99.4615, 29.3, 10.7287, 14.2521, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:49:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:49:41
2026-04-11T14:49:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:49:53.037 [DEBUG] [Thread-171714] [transport.py] [_log()] starting thread (client mode): 0xae50aa40
2026-04-11T14:49:53.037 [DEBUG] [Thread-171714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:49:53.060 [DEBUG] [Thread-171714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:49:53.061 [INFO] [Thread-171714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:49:53.064 [DEBUG] [Thread-171714] [transport.py] [_log()] client lang: <none>
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] server lang: <none>
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] kex follows: False
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] Compression: none
2026-04-11T14:49:53.065 [DEBUG] [Thread-171714] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:49:53.082 [DEBUG] [Thread-171714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:49:53.083 [DEBUG] [Thread-171714] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:49:53.083 [DEBUG] [Thread-171714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:49:53.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:49:53.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:49:53.085 [DEBUG] [Thread-171714] [transport.py] [_log()] userauth is OK
2026-04-11T14:49:53.086 [DEBUG] [Thread-171714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:49:53.086 [DEBUG] [Thread-171714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:49:53.086 [DEBUG] [Thread-171714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:49:53.086 [DEBUG] [Thread-171714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:49:53.122 [INFO] [Thread-171714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:49:53.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:49:53.902 [DEBUG] [Thread-171714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:49:53.902 [DEBUG] [Thread-171714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:49:53.903 [DEBUG] [Thread-171714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:49:53.943 [DEBUG] [Thread-171714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:49:53.943 [DEBUG] [Thread-171714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:49:53.947 [DEBUG] [Thread-171714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:49:53.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:49:53.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:49:53.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:49:53.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:49:53.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:49:53.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:49:53.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:49:53.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:49:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:49:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.534145 -999.00  +15.10  13.23     91  +13.70 1 3 1 3 1   888    0 2.32 41.59 ----- 13.1 13.2 36.8 15.4 18.7 -1.4 18.4 -9.0 18.0 -1.0 18.5 0.3
2026-04-11T14:49:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:49:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:49:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.534145
2026-04-11T14:49:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:49:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:49:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:49:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:49:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:49:53.976 [DEBUG] [Thread-171714] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:49:53.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:49:41', tmtdew=0.07044, humidity=99.4615, cloud=29.3, wind=10.7287, temperature=14.2521, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:49:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:49:54.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:49:54.069 [DEBUG] [Thread-171717] [transport.py] [_log()] starting thread (client mode): 0xb0fe9e10
2026-04-11T14:49:54.069 [DEBUG] [Thread-171717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:49:54.084 [DEBUG] [Thread-171717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:49:54.084 [INFO] [Thread-171717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] client lang: <none>
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] server lang: <none>
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] kex follows: False
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:49:54.092 [DEBUG] [Thread-171717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:49:54.093 [DEBUG] [Thread-171717] [transport.py] [_log()] Compression: none
2026-04-11T14:49:54.093 [DEBUG] [Thread-171717] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:49:54.152 [DEBUG] [Thread-171717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:49:54.153 [DEBUG] [Thread-171717] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:49:54.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:49:54.154 [DEBUG] [Thread-171717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:49:54.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:49:54.213 [DEBUG] [Thread-171717] [transport.py] [_log()] userauth is OK
2026-04-11T14:49:54.213 [DEBUG] [Thread-171717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:49:54.213 [DEBUG] [Thread-171717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:49:54.213 [DEBUG] [Thread-171717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:49:54.213 [DEBUG] [Thread-171717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:49:54.232 [INFO] [Thread-171717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:49:54.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:49:54.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:49:55.027 [DEBUG] [Thread-171717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:49:55.027 [DEBUG] [Thread-171717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:49:55.075 [DEBUG] [Thread-171717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:49:55.075 [DEBUG] [Thread-171717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:49:55.085 [DEBUG] [Thread-171717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:49:55.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:49:55.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:49:55.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-04-11T14:49:55.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:49:55.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:49:55.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:49:55.121 [DEBUG] [Thread-171717] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:49:58.688 [DEBUG] [Thread-171719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:11.307 [DEBUG] [Thread-171720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:13.697 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:13.698 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:13.742 [DEBUG] [Thread-171721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:50:25.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:50:25.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-04-11T14:50:26.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 50, 17), 0.027465, 99.7804, 29.3, 9.77652, 14.1587, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:50:26.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:50:17
2026-04-11T14:50:26.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:50:26.942 [DEBUG] [Thread-171722] [transport.py] [_log()] starting thread (client mode): 0xae534610
2026-04-11T14:50:26.942 [DEBUG] [Thread-171722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:50:26.963 [DEBUG] [Thread-171722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:50:26.964 [INFO] [Thread-171722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:50:26.967 [DEBUG] [Thread-171722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] client lang: <none>
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] server lang: <none>
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] kex follows: False
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] Compression: none
2026-04-11T14:50:26.968 [DEBUG] [Thread-171722] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:50:26.986 [DEBUG] [Thread-171722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:50:26.986 [DEBUG] [Thread-171722] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:50:26.987 [DEBUG] [Thread-171722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:50:26.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:50:26.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:50:26.989 [DEBUG] [Thread-171722] [transport.py] [_log()] userauth is OK
2026-04-11T14:50:26.989 [DEBUG] [Thread-171722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:50:26.989 [DEBUG] [Thread-171722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:50:26.989 [DEBUG] [Thread-171722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:50:26.989 [DEBUG] [Thread-171722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:50:27.025 [INFO] [Thread-171722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:50:27.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:50:28.221 [DEBUG] [Thread-171722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:50:28.222 [DEBUG] [Thread-171722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:50:28.222 [DEBUG] [Thread-171722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:50:28.262 [DEBUG] [Thread-171722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:50:28.262 [DEBUG] [Thread-171722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:50:28.265 [DEBUG] [Thread-171722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:50:28.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:50:28.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:50:28.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:50:28.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:50:28.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:50:28.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:50:28.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:50:28.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:50:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:50:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.534492 -999.00  +15.00  10.48     90  +13.40 1 3 1 3 1   888    0 2.35 42.25 ----- 10.1 10.5 39.2 15.2 18.5 -0.9 18.4 -9.2 17.9 -1.3 18.4 0.1
2026-04-11T14:50:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:50:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:50:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.534492
2026-04-11T14:50:28.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:50:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:50:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:50:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:50:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:50:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:50:17', tmtdew=0.027465, humidity=99.7804, cloud=29.3, wind=9.77652, temperature=14.1587, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:49:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:50:28.286 [DEBUG] [Thread-171722] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:50:28.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:50:28.393 [DEBUG] [Thread-171725] [transport.py] [_log()] starting thread (client mode): 0xae50a6e0
2026-04-11T14:50:28.393 [DEBUG] [Thread-171725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:50:28.408 [DEBUG] [Thread-171725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:50:28.408 [INFO] [Thread-171725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] client lang: <none>
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] server lang: <none>
2026-04-11T14:50:28.420 [DEBUG] [Thread-171725] [transport.py] [_log()] kex follows: False
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] Compression: none
2026-04-11T14:50:28.421 [DEBUG] [Thread-171725] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:50:28.484 [DEBUG] [Thread-171725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:50:28.484 [DEBUG] [Thread-171725] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:50:28.485 [DEBUG] [Thread-171725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:50:28.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:50:28.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:50:28.543 [DEBUG] [Thread-171725] [transport.py] [_log()] userauth is OK
2026-04-11T14:50:28.543 [DEBUG] [Thread-171725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:50:28.544 [DEBUG] [Thread-171725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:50:28.544 [DEBUG] [Thread-171725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:50:28.544 [DEBUG] [Thread-171725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:50:28.562 [INFO] [Thread-171725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:50:28.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:50:28.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:50:28.782 [DEBUG] [Thread-171727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:29.417 [DEBUG] [Thread-171725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:50:29.418 [DEBUG] [Thread-171725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:50:29.465 [DEBUG] [Thread-171725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:50:29.465 [DEBUG] [Thread-171725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:50:29.475 [DEBUG] [Thread-171725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:50:29.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:50:29.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-04-11T14:50:29.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-04-11T14:50:29.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:50:29.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:50:29.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:50:29.511 [DEBUG] [Thread-171725] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:50:43.833 [DEBUG] [Thread-171728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:58.874 [DEBUG] [Thread-171729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:50:59.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:50:59.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:50:59.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:51:00.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 50, 52), 0.05492, 99.5609, 29.3, 12.9514, 14.5505, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:51:00.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:50:52
2026-04-11T14:51:01.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:51:01.368 [DEBUG] [Thread-171730] [transport.py] [_log()] starting thread (client mode): 0xb39c71c0
2026-04-11T14:51:01.368 [DEBUG] [Thread-171730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:51:01.386 [DEBUG] [Thread-171730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:51:01.386 [INFO] [Thread-171730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:51:01.389 [DEBUG] [Thread-171730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] client lang: <none>
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] server lang: <none>
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] kex follows: False
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] Compression: none
2026-04-11T14:51:01.390 [DEBUG] [Thread-171730] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:51:01.406 [DEBUG] [Thread-171730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:51:01.407 [DEBUG] [Thread-171730] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:51:01.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:51:01.407 [DEBUG] [Thread-171730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:51:01.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:51:01.410 [DEBUG] [Thread-171730] [transport.py] [_log()] userauth is OK
2026-04-11T14:51:01.410 [DEBUG] [Thread-171730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:51:01.410 [DEBUG] [Thread-171730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:51:01.410 [DEBUG] [Thread-171730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:51:01.410 [DEBUG] [Thread-171730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:51:01.443 [INFO] [Thread-171730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:51:01.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:51:02.261 [DEBUG] [Thread-171730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:51:02.261 [DEBUG] [Thread-171730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:51:02.261 [DEBUG] [Thread-171730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:51:02.302 [DEBUG] [Thread-171730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:51:02.302 [DEBUG] [Thread-171730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:51:02.306 [DEBUG] [Thread-171730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:51:02.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:51:02.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:51:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:51:02.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:51:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:51:02.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:51:02.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:51:02.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:51:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:51:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.534839 -999.00  +15.10  11.19     90  +13.60 1 3 1 3 1   888    0 2.43 44.01 ----- 10.8 11.2 13.1 13.9 18.6 -0.6 18.4 -8.9 17.9 -0.2 18.4 0.4
2026-04-11T14:51:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:51:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:51:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.534839
2026-04-11T14:51:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:51:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:51:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:51:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:51:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:51:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:50:52', tmtdew=0.05492, humidity=99.5609, cloud=29.3, wind=12.9514, temperature=14.5505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:50:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:51:02.334 [DEBUG] [Thread-171730] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:51: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-04-11T14:51:02.426 [DEBUG] [Thread-171733] [transport.py] [_log()] starting thread (client mode): 0xae51bb50
2026-04-11T14:51:02.427 [DEBUG] [Thread-171733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:51:02.442 [DEBUG] [Thread-171733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:51:02.442 [INFO] [Thread-171733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] client lang: <none>
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] server lang: <none>
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] kex follows: False
2026-04-11T14:51:02.450 [DEBUG] [Thread-171733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:51:02.451 [DEBUG] [Thread-171733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:51:02.451 [DEBUG] [Thread-171733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:51:02.451 [DEBUG] [Thread-171733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:51:02.451 [DEBUG] [Thread-171733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:51:02.451 [DEBUG] [Thread-171733] [transport.py] [_log()] Compression: none
2026-04-11T14:51:02.451 [DEBUG] [Thread-171733] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:51:02.508 [DEBUG] [Thread-171733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:51:02.508 [DEBUG] [Thread-171733] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:51:02.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:51:02.509 [DEBUG] [Thread-171733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:51:02.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:51:02.563 [DEBUG] [Thread-171733] [transport.py] [_log()] userauth is OK
2026-04-11T14:51:02.564 [DEBUG] [Thread-171733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:51:02.564 [DEBUG] [Thread-171733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:51:02.564 [DEBUG] [Thread-171733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:51:02.564 [DEBUG] [Thread-171733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:51:02.582 [INFO] [Thread-171733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:51:02.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:51:02.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:51:03.427 [DEBUG] [Thread-171733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:51:03.427 [DEBUG] [Thread-171733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:51:03.475 [DEBUG] [Thread-171733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:51:03.475 [DEBUG] [Thread-171733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:51:03.485 [DEBUG] [Thread-171733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:51:03.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:51:03.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:51:03.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:51:03.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:51:03.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:51:03.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:51:03.522 [DEBUG] [Thread-171733] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:51:11.355 [DEBUG] [Thread-171735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:51:13.839 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:51:13.840 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:51:13.909 [DEBUG] [Thread-171736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:51:28.962 [DEBUG] [Thread-171737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:51:33.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:51:33.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:51:33.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-04-11T14:51:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 50, 52), 0.05492, 99.5609, 29.3, 12.9514, 14.5505, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:51:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:50:52
2026-04-11T14:51:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:51:35.488 [DEBUG] [Thread-171738] [transport.py] [_log()] starting thread (client mode): 0xa79533a0
2026-04-11T14:51:35.488 [DEBUG] [Thread-171738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:51:35.508 [DEBUG] [Thread-171738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:51:35.508 [INFO] [Thread-171738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] client lang: <none>
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] server lang: <none>
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] kex follows: False
2026-04-11T14:51:35.509 [DEBUG] [Thread-171738] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:51:35.510 [DEBUG] [Thread-171738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:51:35.510 [DEBUG] [Thread-171738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:51:35.510 [DEBUG] [Thread-171738] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:51:35.510 [DEBUG] [Thread-171738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:51:35.510 [DEBUG] [Thread-171738] [transport.py] [_log()] Compression: none
2026-04-11T14:51:35.510 [DEBUG] [Thread-171738] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:51:35.518 [DEBUG] [Thread-171738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:51:35.518 [DEBUG] [Thread-171738] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:51:35.519 [DEBUG] [Thread-171738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:51:35.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:51:35.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:51:35.521 [DEBUG] [Thread-171738] [transport.py] [_log()] userauth is OK
2026-04-11T14:51:35.521 [DEBUG] [Thread-171738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:51:35.521 [DEBUG] [Thread-171738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:51:35.521 [DEBUG] [Thread-171738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:51:35.521 [DEBUG] [Thread-171738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:51:35.540 [INFO] [Thread-171738] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:51:35.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:51:36.391 [DEBUG] [Thread-171738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:51:36.391 [DEBUG] [Thread-171738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:51:36.392 [DEBUG] [Thread-171738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:51:36.432 [DEBUG] [Thread-171738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:51:36.432 [DEBUG] [Thread-171738] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:51:36.436 [DEBUG] [Thread-171738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:51:36.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:51:36.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:51:36.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:51:36.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:51:36.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:51:36.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:51:36.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:51:36.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:51:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:51:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.535187 -999.00  +15.10  11.45     90  +13.50 1 3 1 3 1   888    0 2.36 41.37 ----- 9.9 11.4 42.0 14.8 18.5 -0.6 18.4 -7.6 17.8 -0.3 18.3 -0.0
2026-04-11T14:51:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:51:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:51:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.535187
2026-04-11T14:51:36.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:51:36.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:51:36.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:51:36.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:51:36.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:51:36.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:50:52', tmtdew=0.05492, humidity=99.5609, cloud=29.3, wind=12.9514, temperature=14.5505, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:50:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:51:36.465 [DEBUG] [Thread-171738] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:51:36.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:51:36.569 [DEBUG] [Thread-171741] [transport.py] [_log()] starting thread (client mode): 0xae508520
2026-04-11T14:51:36.569 [DEBUG] [Thread-171741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:51:36.584 [DEBUG] [Thread-171741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:51:36.584 [INFO] [Thread-171741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:51:36.592 [DEBUG] [Thread-171741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:51:36.592 [DEBUG] [Thread-171741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:51:36.592 [DEBUG] [Thread-171741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:51:36.592 [DEBUG] [Thread-171741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:36.592 [DEBUG] [Thread-171741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:51:36.592 [DEBUG] [Thread-171741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] client lang: <none>
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] server lang: <none>
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] kex follows: False
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:51:36.593 [DEBUG] [Thread-171741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:51:36.594 [DEBUG] [Thread-171741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:51:36.594 [DEBUG] [Thread-171741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:51:36.594 [DEBUG] [Thread-171741] [transport.py] [_log()] Compression: none
2026-04-11T14:51:36.594 [DEBUG] [Thread-171741] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:51:36.652 [DEBUG] [Thread-171741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:51:36.653 [DEBUG] [Thread-171741] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:51:36.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:51:36.655 [DEBUG] [Thread-171741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:51:36.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:51:36.711 [DEBUG] [Thread-171741] [transport.py] [_log()] userauth is OK
2026-04-11T14:51:36.711 [DEBUG] [Thread-171741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:51:36.711 [DEBUG] [Thread-171741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:51:36.711 [DEBUG] [Thread-171741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:51:36.711 [DEBUG] [Thread-171741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:51:36.725 [INFO] [Thread-171741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:51:36.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:51:36.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:51:37.567 [DEBUG] [Thread-171741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:51:37.567 [DEBUG] [Thread-171741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:51:37.615 [DEBUG] [Thread-171741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:51:37.615 [DEBUG] [Thread-171741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:51:37.625 [DEBUG] [Thread-171741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:51:37.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:51:37.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-04-11T14:51:37.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-04-11T14:51:37.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:51:37.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:51:37.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:51:37.662 [DEBUG] [Thread-171741] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:51:43.999 [DEBUG] [Thread-171743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:51:59.054 [DEBUG] [Thread-171744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:07.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:52:07.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:52:07.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-04-11T14:52:09.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 51, 28), 0.072305, 99.8136, 29.3, 10.1117, 14.0918, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:52:09.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:51:28
2026-04-11T14:52:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:52:09.762 [DEBUG] [Thread-171745] [transport.py] [_log()] starting thread (client mode): 0xae5e44c0
2026-04-11T14:52:09.762 [DEBUG] [Thread-171745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:52:09.783 [DEBUG] [Thread-171745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:52:09.783 [INFO] [Thread-171745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] client lang: <none>
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] server lang: <none>
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] kex follows: False
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:52:09.786 [DEBUG] [Thread-171745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:52:09.787 [DEBUG] [Thread-171745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:52:09.787 [DEBUG] [Thread-171745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:52:09.787 [DEBUG] [Thread-171745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:52:09.787 [DEBUG] [Thread-171745] [transport.py] [_log()] Compression: none
2026-04-11T14:52:09.787 [DEBUG] [Thread-171745] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:52:09.804 [DEBUG] [Thread-171745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:52:09.804 [DEBUG] [Thread-171745] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:52:09.805 [DEBUG] [Thread-171745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:52:09.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:52:09.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:52:09.807 [DEBUG] [Thread-171745] [transport.py] [_log()] userauth is OK
2026-04-11T14:52:09.807 [DEBUG] [Thread-171745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:52:09.807 [DEBUG] [Thread-171745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:52:09.807 [DEBUG] [Thread-171745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:52:09.807 [DEBUG] [Thread-171745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:52:09.831 [INFO] [Thread-171745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:52:09.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:52:10.691 [DEBUG] [Thread-171745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:52:10.692 [DEBUG] [Thread-171745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:52:10.692 [DEBUG] [Thread-171745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:52:10.733 [DEBUG] [Thread-171745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:52:10.733 [DEBUG] [Thread-171745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:52:10.737 [DEBUG] [Thread-171745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:52:10.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:52:10.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:52:10.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:52:10.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:52:10.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:52:10.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:52:10.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:52:10.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:52:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:52:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.535534 -999.00  +15.00  11.74     90  +13.40 1 3 1 3 1   888    0 2.28 38.93 ----- 11.0 11.7 60.4 12.7 18.5 -1.0 18.4 -7.7 17.7 -1.4 18.3 0.2
2026-04-11T14:52:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:52:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:52:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.535534
2026-04-11T14:52:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:52:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:52:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:52:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:52:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:52:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:51:28', tmtdew=0.072305, humidity=99.8136, cloud=29.3, wind=10.1117, temperature=14.0918, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:51:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:52:10.765 [DEBUG] [Thread-171745] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:52:10.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:52:10.855 [DEBUG] [Thread-171748] [transport.py] [_log()] starting thread (client mode): 0xae5b37c0
2026-04-11T14:52:10.855 [DEBUG] [Thread-171748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:52:10.870 [DEBUG] [Thread-171748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:52:10.870 [INFO] [Thread-171748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:52:10.879 [DEBUG] [Thread-171748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:52:10.879 [DEBUG] [Thread-171748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] client lang: <none>
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] server lang: <none>
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] kex follows: False
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] Compression: none
2026-04-11T14:52:10.880 [DEBUG] [Thread-171748] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:52:10.940 [DEBUG] [Thread-171748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:52:10.940 [DEBUG] [Thread-171748] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:52:10.941 [DEBUG] [Thread-171748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:52:10.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:52:10.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:52:10.995 [DEBUG] [Thread-171748] [transport.py] [_log()] userauth is OK
2026-04-11T14:52:10.996 [DEBUG] [Thread-171748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:52:10.996 [DEBUG] [Thread-171748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:52:10.996 [DEBUG] [Thread-171748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:52:10.996 [DEBUG] [Thread-171748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:52:11.016 [INFO] [Thread-171748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:52:11.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:52:11.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:52:11.405 [DEBUG] [Thread-171750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:11.897 [DEBUG] [Thread-171748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:52:11.897 [DEBUG] [Thread-171748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:52:11.944 [DEBUG] [Thread-171748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:52:11.944 [DEBUG] [Thread-171748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:52:11.953 [DEBUG] [Thread-171748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:52:11.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:52:11.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-04-11T14:52:11.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-04-11T14:52:11.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:52:11.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:52:11.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:52:11.987 [DEBUG] [Thread-171748] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:52:13.981 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:13.983 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:14.093 [DEBUG] [Thread-171751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:29.151 [DEBUG] [Thread-171752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:42.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:52:42.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:52:42.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-04-11T14:52:43.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 52, 3), 0.08002, 99.7638, 29.3, 10.7467, 14.1581, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:52:43.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:52:03
2026-04-11T14:52:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:52:44.017 [DEBUG] [Thread-171753] [transport.py] [_log()] starting thread (client mode): 0xae5b1960
2026-04-11T14:52:44.017 [DEBUG] [Thread-171753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:52:44.032 [DEBUG] [Thread-171753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:52:44.033 [INFO] [Thread-171753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] client lang: <none>
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] server lang: <none>
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] kex follows: False
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:52:44.036 [DEBUG] [Thread-171753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:52:44.037 [DEBUG] [Thread-171753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:52:44.037 [DEBUG] [Thread-171753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:52:44.037 [DEBUG] [Thread-171753] [transport.py] [_log()] Compression: none
2026-04-11T14:52:44.037 [DEBUG] [Thread-171753] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:52:44.054 [DEBUG] [Thread-171753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:52:44.055 [DEBUG] [Thread-171753] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:52:44.055 [DEBUG] [Thread-171753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:52:44.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:52:44.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:52:44.057 [DEBUG] [Thread-171753] [transport.py] [_log()] userauth is OK
2026-04-11T14:52:44.058 [DEBUG] [Thread-171753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:52:44.058 [DEBUG] [Thread-171753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:52:44.058 [DEBUG] [Thread-171753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:52:44.058 [DEBUG] [Thread-171753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:52:44.073 [INFO] [Thread-171753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:52:44.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:52:44.192 [DEBUG] [Thread-171755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:52:44.833 [DEBUG] [Thread-171753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:52:44.833 [DEBUG] [Thread-171753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:52:44.833 [DEBUG] [Thread-171753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:52:44.874 [DEBUG] [Thread-171753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:52:44.874 [DEBUG] [Thread-171753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:52:44.877 [DEBUG] [Thread-171753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:52:44.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:52:44.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:52:44.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:52:44.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:52:44.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:52:44.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:52:44.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:52:44.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:52:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:52:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.535881 -999.00  +15.00  10.19     90  +13.50 1 3 1 3 1   888    0 2.34 39.76 ----- 10.5 10.2 32.8 14.0 18.5 -0.7 18.3 -7.2 17.8 -0.9 18.2 0.0
2026-04-11T14:52:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:52:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:52:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.535881
2026-04-11T14:52:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:52:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:52:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:52:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:52:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:52:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:52:03', tmtdew=0.08002, humidity=99.7638, cloud=29.3, wind=10.7467, temperature=14.1581, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:51:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:52:44.913 [DEBUG] [Thread-171753] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:52:44.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:52:45.007 [DEBUG] [Thread-171757] [transport.py] [_log()] starting thread (client mode): 0xae5e7b50
2026-04-11T14:52:45.007 [DEBUG] [Thread-171757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:52:45.021 [DEBUG] [Thread-171757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:52:45.021 [INFO] [Thread-171757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:52:45.029 [DEBUG] [Thread-171757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] client lang: <none>
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] server lang: <none>
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] kex follows: False
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] Compression: none
2026-04-11T14:52:45.030 [DEBUG] [Thread-171757] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:52:45.089 [DEBUG] [Thread-171757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:52:45.090 [DEBUG] [Thread-171757] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:52:45.090 [DEBUG] [Thread-171757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:52:45.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:52:45.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:52:45.148 [DEBUG] [Thread-171757] [transport.py] [_log()] userauth is OK
2026-04-11T14:52:45.148 [DEBUG] [Thread-171757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:52:45.148 [DEBUG] [Thread-171757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:52:45.149 [DEBUG] [Thread-171757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:52:45.149 [DEBUG] [Thread-171757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:52:45.167 [INFO] [Thread-171757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:52:45.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:52:45.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:52:46.003 [DEBUG] [Thread-171757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:52:46.003 [DEBUG] [Thread-171757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:52:46.051 [DEBUG] [Thread-171757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:52:46.052 [DEBUG] [Thread-171757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:52:46.066 [DEBUG] [Thread-171757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:52:46.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:52:46.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:52:46.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-04-11T14:52:46.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:52:46.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:52:46.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:52:46.106 [DEBUG] [Thread-171757] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:52:59.230 [DEBUG] [Thread-171759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:11.440 [DEBUG] [Thread-171760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:14.123 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:14.124 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:14.282 [DEBUG] [Thread-171761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:16.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:53:16.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:53:16.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:53:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 52, 39), 0.04451, 99.6271, 29.3, 9.28224, 14.8819, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:53:17.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:52:39
2026-04-11T14:53:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:53:17.976 [DEBUG] [Thread-171762] [transport.py] [_log()] starting thread (client mode): 0xae5e40a0
2026-04-11T14:53:17.976 [DEBUG] [Thread-171762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:53:17.995 [DEBUG] [Thread-171762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:53:17.995 [INFO] [Thread-171762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] client lang: <none>
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] server lang: <none>
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] kex follows: False
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] Compression: none
2026-04-11T14:53:17.997 [DEBUG] [Thread-171762] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:53:18.007 [DEBUG] [Thread-171762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:53:18.007 [DEBUG] [Thread-171762] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:53:18.008 [DEBUG] [Thread-171762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:53:18.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:53:18.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:53:18.009 [DEBUG] [Thread-171762] [transport.py] [_log()] userauth is OK
2026-04-11T14:53:18.009 [DEBUG] [Thread-171762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:53:18.010 [DEBUG] [Thread-171762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:53:18.010 [DEBUG] [Thread-171762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:53:18.010 [DEBUG] [Thread-171762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:53:18.028 [INFO] [Thread-171762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:53:18.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:53:18.625 [DEBUG] [Thread-171762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:53:18.625 [DEBUG] [Thread-171762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:53:18.626 [DEBUG] [Thread-171762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:53:18.665 [DEBUG] [Thread-171762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:53:18.666 [DEBUG] [Thread-171762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:53:18.668 [DEBUG] [Thread-171762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:53:18.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:53:18.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:53:18.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:53:18.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:53:18.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:53:18.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:53:18.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:53:18.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:53:18.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:53:18.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.536923 -999.00  +15.10  10.16     91  +13.70 1 3 1 3 1   888    0 2.67 48.96 ----- 12.0 10.2 38.0 14.9 18.4 -0.9 18.2 -7.0 17.7 -1.5 18.1 0.2
2026-04-11T14:53:18.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:53:18.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:53:18.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.536923
2026-04-11T14:53:18.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:53:18.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:53:18.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:53:18.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:53:18.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:53:18.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:52:39', tmtdew=0.04451, humidity=99.6271, cloud=29.3, wind=9.28224, temperature=14.8819, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:53:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:53:18.692 [DEBUG] [Thread-171762] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:53:18.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:53:18.787 [DEBUG] [Thread-171765] [transport.py] [_log()] starting thread (client mode): 0xa79539a0
2026-04-11T14:53:18.787 [DEBUG] [Thread-171765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:53:18.803 [DEBUG] [Thread-171765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:53:18.803 [INFO] [Thread-171765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] client lang: <none>
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] server lang: <none>
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] kex follows: False
2026-04-11T14:53:18.810 [DEBUG] [Thread-171765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:53:18.811 [DEBUG] [Thread-171765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:53:18.811 [DEBUG] [Thread-171765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:53:18.811 [DEBUG] [Thread-171765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:53:18.811 [DEBUG] [Thread-171765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:53:18.811 [DEBUG] [Thread-171765] [transport.py] [_log()] Compression: none
2026-04-11T14:53:18.811 [DEBUG] [Thread-171765] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:53:18.866 [DEBUG] [Thread-171765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:53:18.867 [DEBUG] [Thread-171765] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:53:18.867 [DEBUG] [Thread-171765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:53:18.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:53:18.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:53:18.923 [DEBUG] [Thread-171765] [transport.py] [_log()] userauth is OK
2026-04-11T14:53:18.923 [DEBUG] [Thread-171765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:53:18.923 [DEBUG] [Thread-171765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:53:18.923 [DEBUG] [Thread-171765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:53:18.923 [DEBUG] [Thread-171765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:53:18.946 [INFO] [Thread-171765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:53:18.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:53:18.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:53:19.786 [DEBUG] [Thread-171765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:53:19.786 [DEBUG] [Thread-171765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:53:19.835 [DEBUG] [Thread-171765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:53:19.835 [DEBUG] [Thread-171765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:53:19.844 [DEBUG] [Thread-171765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:53:19.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:53:19.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:53:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:53:19.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:53:19.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:53:19.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:53:19.878 [DEBUG] [Thread-171765] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:53:29.317 [DEBUG] [Thread-171767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:44.380 [DEBUG] [Thread-171768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:53:49.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:53:49.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:53:49.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-04-11T14:53:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 53, 15), 0.06712, 99.8467, 29.3, 10.9584, 14.2747, 2, 2, 0, 0, 0, 0),)
2026-04-11T14:53:51.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:53:15
2026-04-11T14:53:51.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:53:51.643 [DEBUG] [Thread-171769] [transport.py] [_log()] starting thread (client mode): 0xa79500a0
2026-04-11T14:53:51.643 [DEBUG] [Thread-171769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:53:51.663 [DEBUG] [Thread-171769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:53:51.663 [INFO] [Thread-171769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] client lang: <none>
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] server lang: <none>
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] kex follows: False
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] Compression: none
2026-04-11T14:53:51.665 [DEBUG] [Thread-171769] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:53:51.676 [DEBUG] [Thread-171769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:53:51.676 [DEBUG] [Thread-171769] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:53:51.677 [DEBUG] [Thread-171769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:53:51.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:53:51.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:53:51.679 [DEBUG] [Thread-171769] [transport.py] [_log()] userauth is OK
2026-04-11T14:53:51.679 [DEBUG] [Thread-171769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:53:51.679 [DEBUG] [Thread-171769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:53:51.679 [DEBUG] [Thread-171769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:53:51.679 [DEBUG] [Thread-171769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:53:51.703 [INFO] [Thread-171769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:53:51.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:53:52.292 [DEBUG] [Thread-171769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:53:52.292 [DEBUG] [Thread-171769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:53:52.293 [DEBUG] [Thread-171769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:53:52.333 [DEBUG] [Thread-171769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:53:52.334 [DEBUG] [Thread-171769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:53:52.336 [DEBUG] [Thread-171769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:53:52.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:53:52.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:53:52.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:53:52.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:53:52.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:53:52.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:53:52.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:53:52.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:53:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:53:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.537270 -999.00  +14.90   9.27     91  +13.50 1 3 1 3 1   888    0 2.83 54.27 ----- 9.6 9.3 40.6 13.0 18.4 -1.3 18.1 -6.6 17.5 -1.4 18.0 -0.0
2026-04-11T14:53:52.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:53:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:53:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.537270
2026-04-11T14:53:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:53:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:53:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:53:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:53:52.357 [DEBUG] [Thread-171769] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:53:52.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:53:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:53:15', tmtdew=0.06712, humidity=99.8467, cloud=29.3, wind=10.9584, temperature=14.2747, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:53:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:53:52.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:53:52.450 [DEBUG] [Thread-171772] [transport.py] [_log()] starting thread (client mode): 0xa7953790
2026-04-11T14:53:52.450 [DEBUG] [Thread-171772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:53:52.465 [DEBUG] [Thread-171772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:53:52.465 [INFO] [Thread-171772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:52.473 [DEBUG] [Thread-171772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] client lang: <none>
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] server lang: <none>
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] kex follows: False
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:53:52.474 [DEBUG] [Thread-171772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:53:52.475 [DEBUG] [Thread-171772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:53:52.475 [DEBUG] [Thread-171772] [transport.py] [_log()] Compression: none
2026-04-11T14:53:52.475 [DEBUG] [Thread-171772] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:53:52.532 [DEBUG] [Thread-171772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:53:52.532 [DEBUG] [Thread-171772] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:53:52.533 [DEBUG] [Thread-171772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:53:52.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:53:52.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:53:52.588 [DEBUG] [Thread-171772] [transport.py] [_log()] userauth is OK
2026-04-11T14:53:52.588 [DEBUG] [Thread-171772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:53:52.588 [DEBUG] [Thread-171772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:53:52.588 [DEBUG] [Thread-171772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:53:52.588 [DEBUG] [Thread-171772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:53:52.607 [INFO] [Thread-171772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:53: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-04-11T14:53:52.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:53:53.402 [DEBUG] [Thread-171772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:53:53.403 [DEBUG] [Thread-171772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:53:53.451 [DEBUG] [Thread-171772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:53:53.451 [DEBUG] [Thread-171772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:53:53.461 [DEBUG] [Thread-171772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:53:53.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:53:53.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-04-11T14:53:53.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-04-11T14:53:53.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:53:53.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:53:53.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:53:53.498 [DEBUG] [Thread-171772] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:53:59.416 [DEBUG] [Thread-171774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:11.472 [DEBUG] [Thread-171775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:14.263 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:14.264 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:14.466 [DEBUG] [Thread-171776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:23.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:54:23.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:54:23.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-04-11T14:54:24.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 53, 50), 0.06009, 99.5276, 0.0, 13.7628, 14.5172, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:54:24.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:53:50
2026-04-11T14:54:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:54:25.295 [DEBUG] [Thread-171777] [transport.py] [_log()] starting thread (client mode): 0xa79508b0
2026-04-11T14:54:25.295 [DEBUG] [Thread-171777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:54:25.315 [DEBUG] [Thread-171777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:54:25.315 [INFO] [Thread-171777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:54:25.317 [DEBUG] [Thread-171777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] client lang: <none>
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] server lang: <none>
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] kex follows: False
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] Compression: none
2026-04-11T14:54:25.318 [DEBUG] [Thread-171777] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:54:25.327 [DEBUG] [Thread-171777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:54:25.328 [DEBUG] [Thread-171777] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:54:25.328 [DEBUG] [Thread-171777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:54:25.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:54:25.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:54:25.330 [DEBUG] [Thread-171777] [transport.py] [_log()] userauth is OK
2026-04-11T14:54:25.330 [DEBUG] [Thread-171777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:54:25.330 [DEBUG] [Thread-171777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:54:25.330 [DEBUG] [Thread-171777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:54:25.331 [DEBUG] [Thread-171777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:54:25.350 [INFO] [Thread-171777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:54:25.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:54:25.955 [DEBUG] [Thread-171777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:54:25.955 [DEBUG] [Thread-171777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:54:25.955 [DEBUG] [Thread-171777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:54:25.996 [DEBUG] [Thread-171777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:54:25.996 [DEBUG] [Thread-171777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:54:26.001 [DEBUG] [Thread-171777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:54:26.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:54:26.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:54:26.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:54:26.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:54:26.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:54:26.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:54:26.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:54:26.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:54:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:54:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.537617 -999.00  +14.90   8.30     91  +13.50 1 3 1 3 1   888    0 2.66 48.14 ----- 8.4 8.3 41.2 11.1 18.2 -0.6 18.1 -6.1 17.6 -0.1 18.0 0.1
2026-04-11T14:54:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:54:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:54:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.537617
2026-04-11T14:54:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:54:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:54:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:54:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:54:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:54:26.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:53:50', tmtdew=0.06009, humidity=99.5276, cloud=0.0, wind=13.7628, temperature=14.5172, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:54:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:54:26.027 [DEBUG] [Thread-171777] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:54:26.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:54:26.120 [DEBUG] [Thread-171780] [transport.py] [_log()] starting thread (client mode): 0xa7953970
2026-04-11T14:54:26.120 [DEBUG] [Thread-171780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:54:26.135 [DEBUG] [Thread-171780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:54:26.135 [INFO] [Thread-171780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:26.143 [DEBUG] [Thread-171780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] client lang: <none>
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] server lang: <none>
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] kex follows: False
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:54:26.144 [DEBUG] [Thread-171780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:54:26.145 [DEBUG] [Thread-171780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:54:26.145 [DEBUG] [Thread-171780] [transport.py] [_log()] Compression: none
2026-04-11T14:54:26.145 [DEBUG] [Thread-171780] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:54:26.203 [DEBUG] [Thread-171780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:54:26.203 [DEBUG] [Thread-171780] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:54:26.204 [DEBUG] [Thread-171780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:54:26.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:54:26.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:54:26.264 [DEBUG] [Thread-171780] [transport.py] [_log()] userauth is OK
2026-04-11T14:54:26.265 [DEBUG] [Thread-171780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:54:26.265 [DEBUG] [Thread-171780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:54:26.265 [DEBUG] [Thread-171780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:54:26.265 [DEBUG] [Thread-171780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:54:26.289 [INFO] [Thread-171780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:54:26.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:54:26.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:54:27.135 [DEBUG] [Thread-171780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:54:27.135 [DEBUG] [Thread-171780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:54:27.186 [DEBUG] [Thread-171780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:54:27.186 [DEBUG] [Thread-171780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:54:27.196 [DEBUG] [Thread-171780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:54:27.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:54:27.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-04-11T14:54:27.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-04-11T14:54:27.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:54:27.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:54:27.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:54:27.233 [DEBUG] [Thread-171780] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:54:29.503 [DEBUG] [Thread-171782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:44.555 [DEBUG] [Thread-171783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:54:57.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:54:57.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-04-11T14:54:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 54, 26), 0.02489, 99.797, 0.0, 7.72956, 14.1418, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:54:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:54:26
2026-04-11T14:54:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:54:59.061 [DEBUG] [Thread-171784] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T14:54:59.061 [DEBUG] [Thread-171784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:54:59.079 [DEBUG] [Thread-171784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:54:59.079 [INFO] [Thread-171784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:54:59.081 [DEBUG] [Thread-171784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] client lang: <none>
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] server lang: <none>
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] kex follows: False
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:54:59.082 [DEBUG] [Thread-171784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:54:59.083 [DEBUG] [Thread-171784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:54:59.083 [DEBUG] [Thread-171784] [transport.py] [_log()] Compression: none
2026-04-11T14:54:59.083 [DEBUG] [Thread-171784] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:54:59.097 [DEBUG] [Thread-171784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:54:59.098 [DEBUG] [Thread-171784] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:54:59.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:54:59.100 [DEBUG] [Thread-171784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:54:59.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:54:59.103 [DEBUG] [Thread-171784] [transport.py] [_log()] userauth is OK
2026-04-11T14:54:59.103 [DEBUG] [Thread-171784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:54:59.103 [DEBUG] [Thread-171784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:54:59.104 [DEBUG] [Thread-171784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:54:59.104 [DEBUG] [Thread-171784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:54:59.122 [INFO] [Thread-171784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:54:59.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:54:59.592 [DEBUG] [Thread-171786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:54:59.707 [DEBUG] [Thread-171784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:54:59.707 [DEBUG] [Thread-171784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:54:59.708 [DEBUG] [Thread-171784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:54:59.748 [DEBUG] [Thread-171784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:54:59.748 [DEBUG] [Thread-171784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:54:59.751 [DEBUG] [Thread-171784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:54:59.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:54:59.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:54:59.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:54:59.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:54:59.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:54:59.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:54:59.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:54:59.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:54:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:54:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.537964 -999.00  +14.90  12.57     91  +13.50 1 3 1 3 1   888    0 2.58 45.76 ----- 11.0 12.6 36.4 16.9 18.3 -0.6 18.1 -5.5 17.5 -0.4 18.0 -0.2
2026-04-11T14:54:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:54:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:54:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.537964
2026-04-11T14:54:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:54:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:54:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:54:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:54:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:54:59.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:54:26', tmtdew=0.02489, humidity=99.797, cloud=0.0, wind=7.72956, temperature=14.1418, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:54:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:54:59.777 [DEBUG] [Thread-171784] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:54:59.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:54:59.869 [DEBUG] [Thread-171788] [transport.py] [_log()] starting thread (client mode): 0xae5e4730
2026-04-11T14:54:59.869 [DEBUG] [Thread-171788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:54:59.885 [DEBUG] [Thread-171788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:54:59.885 [INFO] [Thread-171788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:54:59.893 [DEBUG] [Thread-171788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] client lang: <none>
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] server lang: <none>
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] kex follows: False
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] Compression: none
2026-04-11T14:54:59.894 [DEBUG] [Thread-171788] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:54:59.951 [DEBUG] [Thread-171788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:54:59.951 [DEBUG] [Thread-171788] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:54:59.952 [DEBUG] [Thread-171788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:54:59.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:54:59.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:55:00.007 [DEBUG] [Thread-171788] [transport.py] [_log()] userauth is OK
2026-04-11T14:55:00.007 [DEBUG] [Thread-171788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:55:00.007 [DEBUG] [Thread-171788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:55:00.007 [DEBUG] [Thread-171788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:55:00.007 [DEBUG] [Thread-171788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:55:00.021 [INFO] [Thread-171788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:55:00.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:55:00.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:55:00.864 [DEBUG] [Thread-171788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:55:00.864 [DEBUG] [Thread-171788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:55:00.912 [DEBUG] [Thread-171788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:55:00.913 [DEBUG] [Thread-171788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:55:00.922 [DEBUG] [Thread-171788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:55:00.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:55:00.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:55:00.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-04-11T14:55:00.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:55:00.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:55:00.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:55:00.959 [DEBUG] [Thread-171788] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:55:11.516 [DEBUG] [Thread-171790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:55:14.406 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:55:14.408 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:55:14.629 [DEBUG] [Thread-171791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:55:29.678 [DEBUG] [Thread-171792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:55:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:55:30.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:55:30.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-04-11T14:55:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 55, 1), 0.03005, 99.7638, 0.0, 7.35912, 14.1252, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:55:32.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:55:01
2026-04-11T14:55:32.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:55:32.800 [DEBUG] [Thread-171793] [transport.py] [_log()] starting thread (client mode): 0xae50ae30
2026-04-11T14:55:32.800 [DEBUG] [Thread-171793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:55:32.819 [DEBUG] [Thread-171793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:55:32.819 [INFO] [Thread-171793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:55:32.823 [DEBUG] [Thread-171793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:55:32.823 [DEBUG] [Thread-171793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:55:32.823 [DEBUG] [Thread-171793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:55:32.823 [DEBUG] [Thread-171793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:55:32.823 [DEBUG] [Thread-171793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:55:32.823 [DEBUG] [Thread-171793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] client lang: <none>
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] server lang: <none>
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] kex follows: False
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] Compression: none
2026-04-11T14:55:32.824 [DEBUG] [Thread-171793] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:55:32.843 [DEBUG] [Thread-171793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:55:32.844 [DEBUG] [Thread-171793] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:55:32.845 [DEBUG] [Thread-171793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:55:32.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:55:32.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:55:32.847 [DEBUG] [Thread-171793] [transport.py] [_log()] userauth is OK
2026-04-11T14:55:32.847 [DEBUG] [Thread-171793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:55:32.847 [DEBUG] [Thread-171793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:55:32.847 [DEBUG] [Thread-171793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:55:32.847 [DEBUG] [Thread-171793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:55:32.883 [INFO] [Thread-171793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:55:32.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:55:33.502 [DEBUG] [Thread-171793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:55:33.503 [DEBUG] [Thread-171793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:55:33.503 [DEBUG] [Thread-171793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:55:33.543 [DEBUG] [Thread-171793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:55:33.544 [DEBUG] [Thread-171793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:55:33.548 [DEBUG] [Thread-171793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:55:33.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:55:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:55:33.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:55:33.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:55:33.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:55:33.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:55:33.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.538312 -999.00  +14.90  10.35     91  +13.50 1 3 1 3 1   888    0 2.52 43.48 ----- 10.0 10.3 34.6 14.4 18.2 -0.9 18.1 -5.1 17.6 -1.1 17.9 -0.0
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.538312
2026-04-11T14:55:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:55:33.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:55:33.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:55:33.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:55:33.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:55:33.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:55:01', tmtdew=0.03005, humidity=99.7638, cloud=0.0, wind=7.35912, temperature=14.1252, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:55:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:55:33.571 [DEBUG] [Thread-171793] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:55:33.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:55:33.655 [DEBUG] [Thread-171796] [transport.py] [_log()] starting thread (client mode): 0xae537d30
2026-04-11T14:55:33.655 [DEBUG] [Thread-171796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:55:33.670 [DEBUG] [Thread-171796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:55:33.670 [INFO] [Thread-171796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:55:33.678 [DEBUG] [Thread-171796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:55:33.678 [DEBUG] [Thread-171796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:55:33.678 [DEBUG] [Thread-171796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:55:33.678 [DEBUG] [Thread-171796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:55:33.678 [DEBUG] [Thread-171796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] client lang: <none>
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] server lang: <none>
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] kex follows: False
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] Compression: none
2026-04-11T14:55:33.679 [DEBUG] [Thread-171796] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:55:33.736 [DEBUG] [Thread-171796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:55:33.736 [DEBUG] [Thread-171796] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:55:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:55:33.737 [DEBUG] [Thread-171796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:55:33.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:55:33.792 [DEBUG] [Thread-171796] [transport.py] [_log()] userauth is OK
2026-04-11T14:55:33.792 [DEBUG] [Thread-171796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:55:33.792 [DEBUG] [Thread-171796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:55:33.792 [DEBUG] [Thread-171796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:55:33.792 [DEBUG] [Thread-171796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:55:33.810 [INFO] [Thread-171796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:55:33.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:55:33.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:55:34.641 [DEBUG] [Thread-171796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:55:34.641 [DEBUG] [Thread-171796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:55:34.689 [DEBUG] [Thread-171796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:55:34.689 [DEBUG] [Thread-171796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:55:34.698 [DEBUG] [Thread-171796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:55:34.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:55:34.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-04-11T14:55:34.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-04-11T14:55:34.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:55:34.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:55:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:55:34.735 [DEBUG] [Thread-171796] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:55:44.718 [DEBUG] [Thread-171798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:55:59.772 [DEBUG] [Thread-171799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:04.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:56:04.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:56:04.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-04-11T14:56:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 55, 37), 0.0601, 99.5276, 0.0, 7.27128, 14.5504, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:56:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:55:37
2026-04-11T14:56:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:56:06.662 [DEBUG] [Thread-171800] [transport.py] [_log()] starting thread (client mode): 0xae509e10
2026-04-11T14:56:06.662 [DEBUG] [Thread-171800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:56:06.673 [DEBUG] [Thread-171800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:56:06.673 [INFO] [Thread-171800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] client lang: <none>
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] server lang: <none>
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] kex follows: False
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:56:06.676 [DEBUG] [Thread-171800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:56:06.677 [DEBUG] [Thread-171800] [transport.py] [_log()] Compression: none
2026-04-11T14:56:06.677 [DEBUG] [Thread-171800] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:56:06.696 [DEBUG] [Thread-171800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:56:06.697 [DEBUG] [Thread-171800] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:56:06.697 [DEBUG] [Thread-171800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:56:06.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:56:06.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:56:06.699 [DEBUG] [Thread-171800] [transport.py] [_log()] userauth is OK
2026-04-11T14:56:06.699 [DEBUG] [Thread-171800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:56:06.699 [DEBUG] [Thread-171800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:56:06.700 [DEBUG] [Thread-171800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:56:06.700 [DEBUG] [Thread-171800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:56:06.718 [INFO] [Thread-171800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:56:06.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:56:07.289 [DEBUG] [Thread-171800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:56:07.290 [DEBUG] [Thread-171800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:56:07.290 [DEBUG] [Thread-171800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:56:07.330 [DEBUG] [Thread-171800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:56:07.330 [DEBUG] [Thread-171800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:56:07.333 [DEBUG] [Thread-171800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:56:07.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:56:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:56:07.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:56:07.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:56:07.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:56:07.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:56:07.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:56:07.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:56:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:56:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.538659 -999.00  +14.90   8.90     91  +13.50 1 3 1 3 1   888    0 2.52 42.28 ----- 6.6 8.9 44.6 12.3 18.2 -1.1 18.0 -4.8 17.5 -0.2 17.9 0.0
2026-04-11T14:56:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:56:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:56:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.538659
2026-04-11T14:56:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:56:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:56:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:56:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:56:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:56:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:55:37', tmtdew=0.0601, humidity=99.5276, cloud=0.0, wind=7.27128, temperature=14.5504, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:55:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:56:07.359 [DEBUG] [Thread-171800] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:56:07.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:56:07.447 [DEBUG] [Thread-171803] [transport.py] [_log()] starting thread (client mode): 0xae509090
2026-04-11T14:56:07.447 [DEBUG] [Thread-171803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:56:07.462 [DEBUG] [Thread-171803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:56:07.462 [INFO] [Thread-171803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] client lang: <none>
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] server lang: <none>
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] kex follows: False
2026-04-11T14:56:07.470 [DEBUG] [Thread-171803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:56:07.471 [DEBUG] [Thread-171803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:56:07.471 [DEBUG] [Thread-171803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:56:07.471 [DEBUG] [Thread-171803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:56:07.471 [DEBUG] [Thread-171803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:56:07.471 [DEBUG] [Thread-171803] [transport.py] [_log()] Compression: none
2026-04-11T14:56:07.471 [DEBUG] [Thread-171803] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:56:07.529 [DEBUG] [Thread-171803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:56:07.530 [DEBUG] [Thread-171803] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:56:07.531 [DEBUG] [Thread-171803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:56:07.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:56:07.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:56:07.588 [DEBUG] [Thread-171803] [transport.py] [_log()] userauth is OK
2026-04-11T14:56:07.588 [DEBUG] [Thread-171803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:56:07.588 [DEBUG] [Thread-171803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:56:07.588 [DEBUG] [Thread-171803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:56:07.588 [DEBUG] [Thread-171803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:56:07.613 [INFO] [Thread-171803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:56:07.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:56:07.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:56:08.434 [DEBUG] [Thread-171803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:56:08.434 [DEBUG] [Thread-171803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:56:08.482 [DEBUG] [Thread-171803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:56:08.482 [DEBUG] [Thread-171803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:56:08.491 [DEBUG] [Thread-171803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:56:08.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:56:08.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-04-11T14:56:08.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-04-11T14:56:08.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:56:08.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:56:08.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:56:08.524 [DEBUG] [Thread-171803] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:56:11.561 [DEBUG] [Thread-171805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:14.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:14.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:14.809 [DEBUG] [Thread-171806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:29.861 [DEBUG] [Thread-171807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:38.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:56:38.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:56:38.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-04-11T14:56:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 56, 12), 0.024885, 99.7969, 0.0, 9.79416, 14.2583, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:56:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:56:12
2026-04-11T14:56:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:56:40.326 [DEBUG] [Thread-171808] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T14:56:40.326 [DEBUG] [Thread-171808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:56:40.336 [DEBUG] [Thread-171808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:56:40.336 [INFO] [Thread-171808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] client lang: <none>
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] server lang: <none>
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] kex follows: False
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:56:40.339 [DEBUG] [Thread-171808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:56:40.340 [DEBUG] [Thread-171808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:56:40.340 [DEBUG] [Thread-171808] [transport.py] [_log()] Compression: none
2026-04-11T14:56:40.340 [DEBUG] [Thread-171808] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:56:40.350 [DEBUG] [Thread-171808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:56:40.351 [DEBUG] [Thread-171808] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:56:40.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:56:40.351 [DEBUG] [Thread-171808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:56:40.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:56:40.352 [DEBUG] [Thread-171808] [transport.py] [_log()] userauth is OK
2026-04-11T14:56:40.352 [DEBUG] [Thread-171808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:56:40.353 [DEBUG] [Thread-171808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:56:40.353 [DEBUG] [Thread-171808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:56:40.353 [DEBUG] [Thread-171808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:56:40.377 [INFO] [Thread-171808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:56:40.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:56:40.950 [DEBUG] [Thread-171808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:56:40.951 [DEBUG] [Thread-171808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:56:40.951 [DEBUG] [Thread-171808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:56:40.992 [DEBUG] [Thread-171808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:56:40.992 [DEBUG] [Thread-171808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:56:40.994 [DEBUG] [Thread-171808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:56:41.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:56:41.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:56:41.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:56:41.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:56:41.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:56:41.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:56:41.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:56:41.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:56:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:56:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.539006 -999.00  +14.80   8.51     91  +13.40 1 3 1 3 1   888    0 2.48 42.64 ----- 8.2 8.5 35.8 8.9 18.2 -0.7 18.0 -3.9 17.5 -1.2 17.9 -0.0
2026-04-11T14:56:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:56:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.539006
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:56:41.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:56:12', tmtdew=0.024885, humidity=99.7969, cloud=0.0, wind=9.79416, temperature=14.2583, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:56:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:56:41.015 [DEBUG] [Thread-171808] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:56:41.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:56:41.094 [DEBUG] [Thread-171811] [transport.py] [_log()] starting thread (client mode): 0xa7951900
2026-04-11T14:56:41.094 [DEBUG] [Thread-171811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:56:41.109 [DEBUG] [Thread-171811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:56:41.109 [INFO] [Thread-171811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] client lang: <none>
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] server lang: <none>
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] kex follows: False
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] Compression: none
2026-04-11T14:56:41.117 [DEBUG] [Thread-171811] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:56:41.175 [DEBUG] [Thread-171811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:56:41.176 [DEBUG] [Thread-171811] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:56:41.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:56:41.177 [DEBUG] [Thread-171811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:56:41.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:56:41.232 [DEBUG] [Thread-171811] [transport.py] [_log()] userauth is OK
2026-04-11T14:56:41.232 [DEBUG] [Thread-171811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:56:41.232 [DEBUG] [Thread-171811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:56:41.232 [DEBUG] [Thread-171811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:56:41.232 [DEBUG] [Thread-171811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:56:41.252 [INFO] [Thread-171811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:56:41.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:56:41.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:56:42.062 [DEBUG] [Thread-171811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:56:42.062 [DEBUG] [Thread-171811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:56:42.110 [DEBUG] [Thread-171811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:56:42.110 [DEBUG] [Thread-171811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:56:42.120 [DEBUG] [Thread-171811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:56:42.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:56:42.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-04-11T14:56:42.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:56:42.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:56:42.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:56:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:56:42.157 [DEBUG] [Thread-171811] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:56:44.902 [DEBUG] [Thread-171813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:56:59.957 [DEBUG] [Thread-171814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:11.607 [DEBUG] [Thread-171815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:12.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:57:12.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:57:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T14:57:13.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 56, 48), 0.04458, 99.627, 0.0, 9.10584, 14.7161, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:57:13.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:56:48
2026-04-11T14:57:13.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:57:13.980 [DEBUG] [Thread-171816] [transport.py] [_log()] starting thread (client mode): 0xae50b760
2026-04-11T14:57:13.980 [DEBUG] [Thread-171816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:57:13.999 [DEBUG] [Thread-171816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:57:14.000 [INFO] [Thread-171816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] client lang: <none>
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] server lang: <none>
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] kex follows: False
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:57:14.001 [DEBUG] [Thread-171816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:57:14.002 [DEBUG] [Thread-171816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:57:14.002 [DEBUG] [Thread-171816] [transport.py] [_log()] Compression: none
2026-04-11T14:57:14.002 [DEBUG] [Thread-171816] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:57:14.015 [DEBUG] [Thread-171816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:57:14.016 [DEBUG] [Thread-171816] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:57:14.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:57:14.017 [DEBUG] [Thread-171816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:57:14.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:57:14.019 [DEBUG] [Thread-171816] [transport.py] [_log()] userauth is OK
2026-04-11T14:57:14.019 [DEBUG] [Thread-171816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:57:14.019 [DEBUG] [Thread-171816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:57:14.019 [DEBUG] [Thread-171816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:57:14.020 [DEBUG] [Thread-171816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:57:14.041 [INFO] [Thread-171816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:57:14.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:57:14.655 [DEBUG] [Thread-171816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:57:14.656 [DEBUG] [Thread-171816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:57:14.656 [DEBUG] [Thread-171816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:57:14.690 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:14.691 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:14.696 [DEBUG] [Thread-171816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:57:14.696 [DEBUG] [Thread-171816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:57:14.700 [DEBUG] [Thread-171816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:57:14.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:57:14.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:57:14.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:57:14.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:57:14.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:57:14.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:57:14.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:57:14.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:57:14.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:57:14.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.539353 -999.00  +14.90   9.37     91  +13.50 1 3 1 3 1   888    0 2.45 40.50 ----- 6.8 9.4 39.6 10.8 18.2 -0.9 18.0 -3.7 17.5 -0.2 17.8 -0.1
2026-04-11T14:57:14.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:57:14.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:57:14.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.539353
2026-04-11T14:57:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:57:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:57:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:57:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:57:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:57:14.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:56:48', tmtdew=0.04458, humidity=99.627, cloud=0.0, wind=9.10584, temperature=14.7161, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:56:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:57:14.726 [DEBUG] [Thread-171816] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:57:14.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:57:14.818 [DEBUG] [Thread-171819] [transport.py] [_log()] starting thread (client mode): 0xae5b3f10
2026-04-11T14:57:14.818 [DEBUG] [Thread-171819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:57:14.834 [DEBUG] [Thread-171819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:57:14.834 [INFO] [Thread-171819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:57:14.842 [DEBUG] [Thread-171819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:57:14.842 [DEBUG] [Thread-171819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:57:14.842 [DEBUG] [Thread-171819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:57:14.842 [DEBUG] [Thread-171819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:14.842 [DEBUG] [Thread-171819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] client lang: <none>
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] server lang: <none>
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] kex follows: False
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:57:14.843 [DEBUG] [Thread-171819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:57:14.844 [DEBUG] [Thread-171819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:57:14.844 [DEBUG] [Thread-171819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:57:14.844 [DEBUG] [Thread-171819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:57:14.844 [DEBUG] [Thread-171819] [transport.py] [_log()] Compression: none
2026-04-11T14:57:14.844 [DEBUG] [Thread-171819] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:57:14.900 [DEBUG] [Thread-171819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:57:14.901 [DEBUG] [Thread-171819] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:57:14.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:57:14.902 [DEBUG] [Thread-171819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:57:14.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:57:14.956 [DEBUG] [Thread-171819] [transport.py] [_log()] userauth is OK
2026-04-11T14:57:14.956 [DEBUG] [Thread-171819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:57:14.956 [DEBUG] [Thread-171819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:57:14.957 [DEBUG] [Thread-171819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:57:14.957 [DEBUG] [Thread-171819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:57:14.976 [INFO] [Thread-171819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:57:14.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:57:14.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:57:14.997 [DEBUG] [Thread-171821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:15.829 [DEBUG] [Thread-171819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:57:15.830 [DEBUG] [Thread-171819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:57:15.878 [DEBUG] [Thread-171819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:57:15.878 [DEBUG] [Thread-171819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:57:15.887 [DEBUG] [Thread-171819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:57:15.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:57:15.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-04-11T14:57:15.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-04-11T14:57:15.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:57:15.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:57:15.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:57:15.924 [DEBUG] [Thread-171819] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:57:30.050 [DEBUG] [Thread-171822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:45.085 [DEBUG] [Thread-171823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:57:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:57:45.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:57:45.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-04-11T14:57:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 57, 23), 0.074865, 99.7969, 0.0, 7.62372, 14.3081, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:57:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:57:23
2026-04-11T14:57:47.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:57:47.763 [DEBUG] [Thread-171824] [transport.py] [_log()] starting thread (client mode): 0xae50bdf0
2026-04-11T14:57:47.763 [DEBUG] [Thread-171824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:57:47.778 [DEBUG] [Thread-171824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:57:47.778 [INFO] [Thread-171824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] client lang: <none>
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] server lang: <none>
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] kex follows: False
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:57:47.781 [DEBUG] [Thread-171824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:57:47.782 [DEBUG] [Thread-171824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:57:47.782 [DEBUG] [Thread-171824] [transport.py] [_log()] Compression: none
2026-04-11T14:57:47.782 [DEBUG] [Thread-171824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:57:47.801 [DEBUG] [Thread-171824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:57:47.801 [DEBUG] [Thread-171824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:57:47.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:57:47.803 [DEBUG] [Thread-171824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:57:47.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:57:47.804 [DEBUG] [Thread-171824] [transport.py] [_log()] userauth is OK
2026-04-11T14:57:47.805 [DEBUG] [Thread-171824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:57:47.805 [DEBUG] [Thread-171824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:57:47.805 [DEBUG] [Thread-171824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:57:47.805 [DEBUG] [Thread-171824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:57:47.827 [INFO] [Thread-171824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:57:47.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:57:48.498 [DEBUG] [Thread-171824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:57:48.498 [DEBUG] [Thread-171824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:57:48.499 [DEBUG] [Thread-171824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:57:48.539 [DEBUG] [Thread-171824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:57:48.539 [DEBUG] [Thread-171824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:57:48.541 [DEBUG] [Thread-171824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:57:48.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:57:48.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:57:48.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:57:48.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:57:48.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:57:48.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:57:48.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:57:48.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:57:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:57:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.540048 -999.00  +15.10   9.64     92  +13.80 1 3 1 3 1   888    0 2.31 34.99 ----- 10.1 9.6 41.0 18.6 18.1 -1.1 17.9 -3.7 17.6 -0.1 17.8 0.1
2026-04-11T14:57:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:57:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:57:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.540048
2026-04-11T14:57:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:57:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:57:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:57:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:57:48.569 [DEBUG] [Thread-171824] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:57:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:57:48.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:57:23', tmtdew=0.074865, humidity=99.7969, cloud=0.0, wind=7.62372, temperature=14.3081, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:57:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:57:48.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:57:48.665 [DEBUG] [Thread-171827] [transport.py] [_log()] starting thread (client mode): 0xae534250
2026-04-11T14:57:48.665 [DEBUG] [Thread-171827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:57:48.680 [DEBUG] [Thread-171827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:57:48.680 [INFO] [Thread-171827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] client lang: <none>
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] server lang: <none>
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] kex follows: False
2026-04-11T14:57:48.688 [DEBUG] [Thread-171827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:57:48.689 [DEBUG] [Thread-171827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:57:48.689 [DEBUG] [Thread-171827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:57:48.689 [DEBUG] [Thread-171827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:57:48.689 [DEBUG] [Thread-171827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:57:48.689 [DEBUG] [Thread-171827] [transport.py] [_log()] Compression: none
2026-04-11T14:57:48.689 [DEBUG] [Thread-171827] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:57:48.748 [DEBUG] [Thread-171827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:57:48.749 [DEBUG] [Thread-171827] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:57:48.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:57:48.750 [DEBUG] [Thread-171827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:57:48.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:57:48.807 [DEBUG] [Thread-171827] [transport.py] [_log()] userauth is OK
2026-04-11T14:57:48.808 [DEBUG] [Thread-171827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:57:48.808 [DEBUG] [Thread-171827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:57:48.808 [DEBUG] [Thread-171827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:57:48.808 [DEBUG] [Thread-171827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:57:48.826 [INFO] [Thread-171827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:57:48.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:57:48.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:57:49.687 [DEBUG] [Thread-171827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:57:49.687 [DEBUG] [Thread-171827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:57:49.735 [DEBUG] [Thread-171827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:57:49.735 [DEBUG] [Thread-171827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:57:49.744 [DEBUG] [Thread-171827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:57:49.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:57:49.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:57:49.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-04-11T14:57:49.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:57:49.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:57:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:57:49.781 [DEBUG] [Thread-171827] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:58:00.119 [DEBUG] [Thread-171829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:11.641 [DEBUG] [Thread-171830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:14.831 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:14.833 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:15.178 [DEBUG] [Thread-171831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:19.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:58:19.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:58:19.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-04-11T14:58:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 57, 59), 0.07225, 99.8135, 0.0, 7.23564, 14.4741, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:58:21.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:57:59
2026-04-11T14:58:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:58:21.702 [DEBUG] [Thread-171832] [transport.py] [_log()] starting thread (client mode): 0xae5e7e50
2026-04-11T14:58:21.702 [DEBUG] [Thread-171832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:58:21.714 [DEBUG] [Thread-171832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:58:21.714 [INFO] [Thread-171832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:58:21.717 [DEBUG] [Thread-171832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] client lang: <none>
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] server lang: <none>
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] kex follows: False
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] Compression: none
2026-04-11T14:58:21.718 [DEBUG] [Thread-171832] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:58:21.734 [DEBUG] [Thread-171832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:58:21.735 [DEBUG] [Thread-171832] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:58:21.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:58:21.736 [DEBUG] [Thread-171832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:58:21.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:58:21.738 [DEBUG] [Thread-171832] [transport.py] [_log()] userauth is OK
2026-04-11T14:58:21.738 [DEBUG] [Thread-171832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:58:21.738 [DEBUG] [Thread-171832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:58:21.739 [DEBUG] [Thread-171832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:58:21.739 [DEBUG] [Thread-171832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:58:21.763 [INFO] [Thread-171832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:58:21.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:58:22.417 [DEBUG] [Thread-171832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:58:22.417 [DEBUG] [Thread-171832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:58:22.418 [DEBUG] [Thread-171832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:58:22.458 [DEBUG] [Thread-171832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:58:22.458 [DEBUG] [Thread-171832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:58:22.462 [DEBUG] [Thread-171832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:58:22.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:58:22.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:58:22.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:58:22.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:58:22.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:58:22.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:58:22.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:58:22.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:58:22.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:58:22.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.540395 -999.00  +15.00  11.92     91  +13.60 1 3 1 3 1   888    0 2.34 35.15 ----- 7.1 11.9 26.6 12.9 18.1 -0.9 17.9 -4.2 17.5 -1.2 17.8 -0.4
2026-04-11T14:58:22.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:58:22.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:58:22.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.540395
2026-04-11T14:58:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:58:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:58:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:58:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:58:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:58:22.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:57:59', tmtdew=0.07225, humidity=99.8135, cloud=0.0, wind=7.23564, temperature=14.4741, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:58:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:58:22.490 [DEBUG] [Thread-171832] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:58:22.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:58:22.584 [DEBUG] [Thread-171835] [transport.py] [_log()] starting thread (client mode): 0xae50b2b0
2026-04-11T14:58:22.584 [DEBUG] [Thread-171835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:58:22.598 [DEBUG] [Thread-171835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:58:22.598 [INFO] [Thread-171835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:22.606 [DEBUG] [Thread-171835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] client lang: <none>
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] server lang: <none>
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] kex follows: False
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] Compression: none
2026-04-11T14:58:22.607 [DEBUG] [Thread-171835] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:58:22.664 [DEBUG] [Thread-171835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:58:22.665 [DEBUG] [Thread-171835] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:58:22.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:58:22.666 [DEBUG] [Thread-171835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:58:22.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:58:22.719 [DEBUG] [Thread-171835] [transport.py] [_log()] userauth is OK
2026-04-11T14:58:22.720 [DEBUG] [Thread-171835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:58:22.720 [DEBUG] [Thread-171835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:58:22.720 [DEBUG] [Thread-171835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:58:22.720 [DEBUG] [Thread-171835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:58:22.738 [INFO] [Thread-171835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:58:22.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:58:22.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:58:23.568 [DEBUG] [Thread-171835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:58:23.568 [DEBUG] [Thread-171835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:58:23.616 [DEBUG] [Thread-171835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:58:23.616 [DEBUG] [Thread-171835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:58:23.625 [DEBUG] [Thread-171835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:58:23.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:58:23.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-04-11T14:58:23.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:58:23.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:58:23.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:58:23.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:58:23.662 [DEBUG] [Thread-171835] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:58:30.219 [DEBUG] [Thread-171837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:45.276 [DEBUG] [Thread-171838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:58:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:58:53.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:58:53.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-04-11T14:58:55.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 58, 34), 0.04976, 99.5939, 0.0, 7.13016, 14.6498, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:58:55.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:58:34
2026-04-11T14:58:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:58:55.600 [DEBUG] [Thread-171839] [transport.py] [_log()] starting thread (client mode): 0xae509f60
2026-04-11T14:58:55.600 [DEBUG] [Thread-171839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:58:55.622 [DEBUG] [Thread-171839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:58:55.622 [INFO] [Thread-171839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] client lang: <none>
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] server lang: <none>
2026-04-11T14:58:55.623 [DEBUG] [Thread-171839] [transport.py] [_log()] kex follows: False
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] Compression: none
2026-04-11T14:58:55.624 [DEBUG] [Thread-171839] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:58:55.634 [DEBUG] [Thread-171839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:58:55.634 [DEBUG] [Thread-171839] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:58:55.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:58:55.635 [DEBUG] [Thread-171839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:58:55.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:58:55.637 [DEBUG] [Thread-171839] [transport.py] [_log()] userauth is OK
2026-04-11T14:58:55.637 [DEBUG] [Thread-171839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:58:55.637 [DEBUG] [Thread-171839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:58:55.638 [DEBUG] [Thread-171839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:58:55.638 [DEBUG] [Thread-171839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:58:55.663 [INFO] [Thread-171839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:58:55.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:58:56.303 [DEBUG] [Thread-171839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:58:56.311 [DEBUG] [Thread-171839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:58:56.311 [DEBUG] [Thread-171839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:58:56.345 [DEBUG] [Thread-171839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:58:56.345 [DEBUG] [Thread-171839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:58:56.349 [DEBUG] [Thread-171839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:58:56.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:58:56.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:58:56.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:58:56.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:58:56.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:58:56.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:58:56.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:58:56.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:58:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:58:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.540742 -999.00  +14.80   7.52     91  +13.40 1 3 1 3 1   888    0 2.27 33.18 ----- 8.1 7.5 29.4 10.9 18.0 -1.1 17.9 -4.1 17.5 -0.8 17.7 -0.1
2026-04-11T14:58:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:58:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:58:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.540742
2026-04-11T14:58:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:58:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:58:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:58:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:58:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:58:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:58:34', tmtdew=0.04976, humidity=99.5939, cloud=0.0, wind=7.13016, temperature=14.6498, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:58:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:58:56.377 [DEBUG] [Thread-171839] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:58: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-04-11T14:58:56.471 [DEBUG] [Thread-171842] [transport.py] [_log()] starting thread (client mode): 0xae518ac0
2026-04-11T14:58:56.472 [DEBUG] [Thread-171842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:58:56.486 [DEBUG] [Thread-171842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:58:56.486 [INFO] [Thread-171842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] client lang: <none>
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] server lang: <none>
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] kex follows: False
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:58:56.494 [DEBUG] [Thread-171842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:58:56.495 [DEBUG] [Thread-171842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:58:56.495 [DEBUG] [Thread-171842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:58:56.495 [DEBUG] [Thread-171842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:58:56.495 [DEBUG] [Thread-171842] [transport.py] [_log()] Compression: none
2026-04-11T14:58:56.495 [DEBUG] [Thread-171842] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:58:56.558 [DEBUG] [Thread-171842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:58:56.559 [DEBUG] [Thread-171842] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:58:56.560 [DEBUG] [Thread-171842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:58:56.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:58:56.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:58:56.616 [DEBUG] [Thread-171842] [transport.py] [_log()] userauth is OK
2026-04-11T14:58:56.616 [DEBUG] [Thread-171842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:58:56.616 [DEBUG] [Thread-171842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:58:56.617 [DEBUG] [Thread-171842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:58:56.617 [DEBUG] [Thread-171842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:58:56.636 [INFO] [Thread-171842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:58:56.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:58:56.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:58:57.478 [DEBUG] [Thread-171842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:58:57.478 [DEBUG] [Thread-171842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:58:57.526 [DEBUG] [Thread-171842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:58:57.526 [DEBUG] [Thread-171842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:58:57.536 [DEBUG] [Thread-171842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:58:57.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:58:57.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-04-11T14:58:57.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-04-11T14:58:57.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:58:57.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:58:57.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:58:57.570 [DEBUG] [Thread-171842] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:59:00.312 [DEBUG] [Thread-171844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:59:11.686 [DEBUG] [Thread-171845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:59:14.974 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:59:14.975 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:59:15.364 [DEBUG] [Thread-171846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:59:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T14:59:27.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T14:59:27.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-04-11T14:59:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 59, 9), 0.03011, 99.7634, 0.0, 8.94672, 14.2915, 2, 2, 0, 2, 0, 0),)
2026-04-11T14:59:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:59:09
2026-04-11T14:59:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T14:59:29.399 [DEBUG] [Thread-171847] [transport.py] [_log()] starting thread (client mode): 0xae508640
2026-04-11T14:59:29.399 [DEBUG] [Thread-171847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:59:29.420 [DEBUG] [Thread-171847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T14:59:29.420 [INFO] [Thread-171847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T14:59:29.423 [DEBUG] [Thread-171847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] client lang: <none>
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] server lang: <none>
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] kex follows: False
2026-04-11T14:59:29.424 [DEBUG] [Thread-171847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:59:29.425 [DEBUG] [Thread-171847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:59:29.425 [DEBUG] [Thread-171847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:59:29.425 [DEBUG] [Thread-171847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:59:29.425 [DEBUG] [Thread-171847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:59:29.425 [DEBUG] [Thread-171847] [transport.py] [_log()] Compression: none
2026-04-11T14:59:29.425 [DEBUG] [Thread-171847] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:59:29.443 [DEBUG] [Thread-171847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:59:29.444 [DEBUG] [Thread-171847] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:59:29.445 [DEBUG] [Thread-171847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T14:59:29.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T14:59:29.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:59:29.489 [DEBUG] [Thread-171847] [transport.py] [_log()] userauth is OK
2026-04-11T14:59:29.490 [DEBUG] [Thread-171847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:59:29.490 [DEBUG] [Thread-171847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:59:29.490 [DEBUG] [Thread-171847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T14:59:29.490 [DEBUG] [Thread-171847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:59:29.522 [INFO] [Thread-171847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:59:29.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:59:30.211 [DEBUG] [Thread-171847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:59:30.211 [DEBUG] [Thread-171847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:59:30.211 [DEBUG] [Thread-171847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T14:59:30.252 [DEBUG] [Thread-171847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:59:30.252 [DEBUG] [Thread-171847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:59:30.256 [DEBUG] [Thread-171847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:59:30.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:59:30.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T14:59:30.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T14:59:30.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T14:59:30.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:59:30.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T14:59:30.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:59:30.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:59:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T14:59:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.541089 -999.00  +14.90   7.16     91  +13.50 1 3 1 3 1   888    0 2.19 30.69 ----- 9.7 7.2 19.2 9.5 18.0 -1.1 17.9 -3.7 17.5 -0.4 17.8 -0.0
2026-04-11T14:59:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T14:59:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T14:59:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.541089
2026-04-11T14:59:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T14:59:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T14:59:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T14:59:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T14:59:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T14:59:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:59:09', tmtdew=0.03011, humidity=99.7634, cloud=0.0, wind=8.94672, temperature=14.2915, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:59:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T14:59:30.285 [DEBUG] [Thread-171847] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:59:30.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T14:59:30.378 [DEBUG] [Thread-171850] [transport.py] [_log()] starting thread (client mode): 0xae537f10
2026-04-11T14:59:30.378 [DEBUG] [Thread-171850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T14:59:30.392 [DEBUG] [Thread-171850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T14:59:30.392 [INFO] [Thread-171850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T14:59:30.400 [DEBUG] [Thread-171850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T14:59:30.400 [DEBUG] [Thread-171850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T14:59:30.400 [DEBUG] [Thread-171850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T14:59:30.400 [DEBUG] [Thread-171850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] client lang: <none>
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] server lang: <none>
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] kex follows: False
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] Compression: none
2026-04-11T14:59:30.401 [DEBUG] [Thread-171850] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T14:59:30.404 [DEBUG] [Thread-171852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T14:59:30.459 [DEBUG] [Thread-171850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T14:59:30.460 [DEBUG] [Thread-171850] [transport.py] [_log()] Switch to new keys ...
2026-04-11T14:59:30.460 [DEBUG] [Thread-171850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T14:59:30.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T14:59:30.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T14:59:30.516 [DEBUG] [Thread-171850] [transport.py] [_log()] userauth is OK
2026-04-11T14:59:30.516 [DEBUG] [Thread-171850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T14:59:30.516 [DEBUG] [Thread-171850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T14:59:30.516 [DEBUG] [Thread-171850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T14:59:30.516 [DEBUG] [Thread-171850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T14:59:30.535 [INFO] [Thread-171850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T14:59:30.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T14:59:30.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T14:59:31.341 [DEBUG] [Thread-171850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T14:59:31.342 [DEBUG] [Thread-171850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T14:59:31.389 [DEBUG] [Thread-171850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T14:59:31.389 [DEBUG] [Thread-171850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T14:59:31.398 [DEBUG] [Thread-171850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T14:59:31.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T14:59:31.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T14:59:31.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T14:59:31.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T14:59:31.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T14:59:31.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T14:59:31.435 [DEBUG] [Thread-171850] [transport.py] [_log()] EOF in transport thread
2026-04-11T14:59:45.456 [DEBUG] [Thread-171853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:00.492 [DEBUG] [Thread-171854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:01.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:00:01.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:00:01.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:00:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 14, 59, 45), 0.04471, 99.6262, 0.0, 6.91848, 14.6824, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:00:02.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 14:59:45
2026-04-11T15:00:03.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:00:03.285 [DEBUG] [Thread-171855] [transport.py] [_log()] starting thread (client mode): 0xae519270
2026-04-11T15:00:03.285 [DEBUG] [Thread-171855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:00:03.305 [DEBUG] [Thread-171855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:00:03.305 [INFO] [Thread-171855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] client lang: <none>
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] server lang: <none>
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] kex follows: False
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:00:03.306 [DEBUG] [Thread-171855] [transport.py] [_log()] Compression: none
2026-04-11T15:00:03.307 [DEBUG] [Thread-171855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:00:03.314 [DEBUG] [Thread-171855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:00:03.314 [DEBUG] [Thread-171855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:00:03.314 [DEBUG] [Thread-171855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:00:03.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:00:03.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:00:03.315 [DEBUG] [Thread-171855] [transport.py] [_log()] userauth is OK
2026-04-11T15:00:03.315 [DEBUG] [Thread-171855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:00:03.315 [DEBUG] [Thread-171855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:00:03.315 [DEBUG] [Thread-171855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:00:03.315 [DEBUG] [Thread-171855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:00:03.332 [INFO] [Thread-171855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:00:03.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:00:04.414 [DEBUG] [Thread-171855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:00:04.414 [DEBUG] [Thread-171855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:00:04.415 [DEBUG] [Thread-171855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:00:04.456 [DEBUG] [Thread-171855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:00:04.456 [DEBUG] [Thread-171855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:00:04.460 [DEBUG] [Thread-171855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:00:04.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:00:04.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:00:04.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:00:04.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:00:04.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:00:04.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:00:04.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:00:04.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:00:04.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:00:04.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.541436 -999.00  +15.00   8.09     91  +13.60 1 3 1 3 1   888    0 2.10 27.37 ----- 9.4 8.1 48.4 12.2 18.0 -1.1 17.9 -3.6 17.4 -1.6 17.7 0.1
2026-04-11T15:00:04.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:00:04.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:00:04.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.541436
2026-04-11T15:00:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:00:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:00:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:00:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:00:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:00:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T14:59:45', tmtdew=0.04471, humidity=99.6262, cloud=0.0, wind=6.91848, temperature=14.6824, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T12:59:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:00:04.498 [DEBUG] [Thread-171855] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:00:04.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:00:04.592 [DEBUG] [Thread-171858] [transport.py] [_log()] starting thread (client mode): 0xae509810
2026-04-11T15:00:04.592 [DEBUG] [Thread-171858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:00:04.607 [DEBUG] [Thread-171858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:00:04.607 [INFO] [Thread-171858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:04.615 [DEBUG] [Thread-171858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] client lang: <none>
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] server lang: <none>
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] kex follows: False
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:00:04.616 [DEBUG] [Thread-171858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:00:04.617 [DEBUG] [Thread-171858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:00:04.617 [DEBUG] [Thread-171858] [transport.py] [_log()] Compression: none
2026-04-11T15:00:04.617 [DEBUG] [Thread-171858] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:00:04.673 [DEBUG] [Thread-171858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:00:04.674 [DEBUG] [Thread-171858] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:00:04.674 [DEBUG] [Thread-171858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:00:04.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:00:04.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:00:04.732 [DEBUG] [Thread-171858] [transport.py] [_log()] userauth is OK
2026-04-11T15:00:04.732 [DEBUG] [Thread-171858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:00:04.733 [DEBUG] [Thread-171858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:00:04.733 [DEBUG] [Thread-171858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:00:04.733 [DEBUG] [Thread-171858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:00:04.753 [INFO] [Thread-171858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:00:04.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:00:04.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:00:05.586 [DEBUG] [Thread-171858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:00:05.586 [DEBUG] [Thread-171858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:00:05.633 [DEBUG] [Thread-171858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:00:05.634 [DEBUG] [Thread-171858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:00:05.642 [DEBUG] [Thread-171858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:00:05.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:00:05.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-04-11T15:00: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-04-11T15:00:05.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:00:05.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:00:05.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:00:05.673 [DEBUG] [Thread-171858] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:00:11.730 [DEBUG] [Thread-171860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:15.114 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:15.115 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:15.529 [DEBUG] [Thread-171861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:30.579 [DEBUG] [Thread-171862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:00:35.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:00:35.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:00:35.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-04-11T15:00:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 0, 21), 0.02248, 99.8124, 0.0, 9.21132, 14.2907, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:00:37.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:00:21
2026-04-11T15:00:37.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:00:37.611 [DEBUG] [Thread-171863] [transport.py] [_log()] starting thread (client mode): 0xae509c00
2026-04-11T15:00:37.611 [DEBUG] [Thread-171863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:00:37.631 [DEBUG] [Thread-171863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:00:37.631 [INFO] [Thread-171863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:00:37.632 [DEBUG] [Thread-171863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:00:37.632 [DEBUG] [Thread-171863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:00:37.632 [DEBUG] [Thread-171863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:00:37.632 [DEBUG] [Thread-171863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:37.632 [DEBUG] [Thread-171863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] client lang: <none>
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] server lang: <none>
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] kex follows: False
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] Compression: none
2026-04-11T15:00:37.633 [DEBUG] [Thread-171863] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:00:37.644 [DEBUG] [Thread-171863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:00:37.644 [DEBUG] [Thread-171863] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:00:37.645 [DEBUG] [Thread-171863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:00:37.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:00:37.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:00:37.648 [DEBUG] [Thread-171863] [transport.py] [_log()] userauth is OK
2026-04-11T15:00:37.648 [DEBUG] [Thread-171863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:00:37.648 [DEBUG] [Thread-171863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:00:37.648 [DEBUG] [Thread-171863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:00:37.648 [DEBUG] [Thread-171863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:00:37.668 [INFO] [Thread-171863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:00:37.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:00:38.295 [DEBUG] [Thread-171863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:00:38.296 [DEBUG] [Thread-171863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:00:38.296 [DEBUG] [Thread-171863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:00:38.337 [DEBUG] [Thread-171863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:00:38.337 [DEBUG] [Thread-171863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:00:38.341 [DEBUG] [Thread-171863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:00:38.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:00:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:00:38.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:00:38.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:00:38.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:00:38.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:00:38.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:00:38.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:00:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:00:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.541783 -999.00  +14.90  10.48     91  +13.60 1 3 1 3 1   888    0 2.01 24.07 ----- 11.8 10.5 60.8 12.6 17.9 -0.9 17.9 -4.2 17.3 -1.3 17.7 -0.6
2026-04-11T15:00:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:00:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:00:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.541783
2026-04-11T15:00:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:00:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:00:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:00:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:00:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:00:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:00:21', tmtdew=0.02248, humidity=99.8124, cloud=0.0, wind=9.21132, temperature=14.2907, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:00:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:00:38.362 [DEBUG] [Thread-171863] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:00:38.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:00:38.459 [DEBUG] [Thread-171866] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-11T15:00:38.459 [DEBUG] [Thread-171866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:00:38.474 [DEBUG] [Thread-171866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:00:38.474 [INFO] [Thread-171866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:00:38.481 [DEBUG] [Thread-171866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:00:38.481 [DEBUG] [Thread-171866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:00:38.481 [DEBUG] [Thread-171866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:00:38.481 [DEBUG] [Thread-171866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:38.481 [DEBUG] [Thread-171866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] client lang: <none>
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] server lang: <none>
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] kex follows: False
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:00:38.482 [DEBUG] [Thread-171866] [transport.py] [_log()] Compression: none
2026-04-11T15:00:38.483 [DEBUG] [Thread-171866] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:00:38.540 [DEBUG] [Thread-171866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:00:38.541 [DEBUG] [Thread-171866] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:00:38.541 [DEBUG] [Thread-171866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:00:38.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:00:38.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:00:38.596 [DEBUG] [Thread-171866] [transport.py] [_log()] userauth is OK
2026-04-11T15:00:38.596 [DEBUG] [Thread-171866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:00:38.596 [DEBUG] [Thread-171866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:00:38.597 [DEBUG] [Thread-171866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:00:38.597 [DEBUG] [Thread-171866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:00:38.615 [INFO] [Thread-171866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:00:38.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:00:38.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:00:39.447 [DEBUG] [Thread-171866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:00:39.447 [DEBUG] [Thread-171866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:00:39.495 [DEBUG] [Thread-171866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:00:39.495 [DEBUG] [Thread-171866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:00:39.504 [DEBUG] [Thread-171866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:00:39.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:00:39.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-04-11T15:00:39.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-04-11T15:00:39.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:00:39.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:00:39.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:00:39.541 [DEBUG] [Thread-171866] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:00:45.614 [DEBUG] [Thread-171868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:00.664 [DEBUG] [Thread-171869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:01:09.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:01:09.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-04-11T15:01:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 0, 57), 0.072485, 99.8124, 0.0, 8.20584, 14.3242, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:01:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:00:57
2026-04-11T15:01:11.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:01:11.409 [DEBUG] [Thread-171870] [transport.py] [_log()] starting thread (client mode): 0xae562c20
2026-04-11T15:01:11.409 [DEBUG] [Thread-171870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:01:11.429 [DEBUG] [Thread-171870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:01:11.429 [INFO] [Thread-171870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:01:11.432 [DEBUG] [Thread-171870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:01:11.432 [DEBUG] [Thread-171870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:01:11.432 [DEBUG] [Thread-171870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:01:11.432 [DEBUG] [Thread-171870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:11.432 [DEBUG] [Thread-171870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:11.432 [DEBUG] [Thread-171870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] client lang: <none>
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] server lang: <none>
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] kex follows: False
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:01:11.433 [DEBUG] [Thread-171870] [transport.py] [_log()] Compression: none
2026-04-11T15:01:11.434 [DEBUG] [Thread-171870] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:01:11.454 [DEBUG] [Thread-171870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:01:11.454 [DEBUG] [Thread-171870] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:01:11.455 [DEBUG] [Thread-171870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:01:11.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:01:11.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:01:11.457 [DEBUG] [Thread-171870] [transport.py] [_log()] userauth is OK
2026-04-11T15:01:11.457 [DEBUG] [Thread-171870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:01:11.457 [DEBUG] [Thread-171870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:01:11.457 [DEBUG] [Thread-171870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:01:11.457 [DEBUG] [Thread-171870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:01:11.480 [INFO] [Thread-171870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:01:11.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:01:11.795 [DEBUG] [Thread-171872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:12.121 [DEBUG] [Thread-171870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:01:12.121 [DEBUG] [Thread-171870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:01:12.122 [DEBUG] [Thread-171870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:01:12.162 [DEBUG] [Thread-171870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:01:12.162 [DEBUG] [Thread-171870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:01:12.165 [DEBUG] [Thread-171870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:01:12.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:01:12.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:01:12.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:01:12.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:01:12.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:01:12.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:01:12.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:01:12.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:01:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:01:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.542131 -999.00  +14.90  10.68     91  +13.50 1 3 1 3 1   888    0 2.04 23.37 ----- 11.4 10.7 56.8 12.3 17.9 -0.9 17.8 -4.1 17.3 -1.4 17.6 -0.6
2026-04-11T15:01:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:01:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:01:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.542131
2026-04-11T15:01:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:01:12.189 [DEBUG] [Thread-171870] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:01:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:01:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:01:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:01:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:01:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:00:57', tmtdew=0.072485, humidity=99.8124, cloud=0.0, wind=8.20584, temperature=14.3242, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:00:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:01:12.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:01:12.287 [DEBUG] [Thread-171874] [transport.py] [_log()] starting thread (client mode): 0xa7952380
2026-04-11T15:01:12.287 [DEBUG] [Thread-171874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:01:12.306 [DEBUG] [Thread-171874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:01:12.306 [INFO] [Thread-171874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:01:12.315 [DEBUG] [Thread-171874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:01:12.315 [DEBUG] [Thread-171874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:01:12.315 [DEBUG] [Thread-171874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:01:12.315 [DEBUG] [Thread-171874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:12.315 [DEBUG] [Thread-171874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:12.315 [DEBUG] [Thread-171874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] client lang: <none>
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] server lang: <none>
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] kex follows: False
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:01:12.316 [DEBUG] [Thread-171874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:01:12.317 [DEBUG] [Thread-171874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:01:12.317 [DEBUG] [Thread-171874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:01:12.317 [DEBUG] [Thread-171874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:01:12.317 [DEBUG] [Thread-171874] [transport.py] [_log()] Compression: none
2026-04-11T15:01:12.317 [DEBUG] [Thread-171874] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:01:12.373 [DEBUG] [Thread-171874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:01:12.374 [DEBUG] [Thread-171874] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:01:12.375 [DEBUG] [Thread-171874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:01:12.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:01:12.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:01:12.434 [DEBUG] [Thread-171874] [transport.py] [_log()] userauth is OK
2026-04-11T15:01:12.434 [DEBUG] [Thread-171874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:01:12.435 [DEBUG] [Thread-171874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:01:12.435 [DEBUG] [Thread-171874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:01:12.435 [DEBUG] [Thread-171874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:01:12.454 [INFO] [Thread-171874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:01:12.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:01:12.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:01:13.278 [DEBUG] [Thread-171874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:01:13.279 [DEBUG] [Thread-171874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:01:13.327 [DEBUG] [Thread-171874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:01:13.327 [DEBUG] [Thread-171874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:01:13.336 [DEBUG] [Thread-171874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:01:13.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:01:13.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-04-11T15:01:13.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-04-11T15:01:13.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:01:13.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:01:13.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:01:13.374 [DEBUG] [Thread-171874] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:01:15.258 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:15.259 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:15.700 [DEBUG] [Thread-171876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:30.750 [DEBUG] [Thread-171877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:43.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:01:43.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:01:43.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-04-11T15:01:44.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 1, 32), 0.07767, 99.779, 0.0, 6.1596, 14.3075, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:01:44.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:01:32
2026-04-11T15:01:45.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:01:45.237 [DEBUG] [Thread-171878] [transport.py] [_log()] starting thread (client mode): 0xae5633a0
2026-04-11T15:01:45.237 [DEBUG] [Thread-171878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:01:45.257 [DEBUG] [Thread-171878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:01:45.257 [INFO] [Thread-171878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:01:45.260 [DEBUG] [Thread-171878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:01:45.260 [DEBUG] [Thread-171878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:01:45.260 [DEBUG] [Thread-171878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:01:45.260 [DEBUG] [Thread-171878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] client lang: <none>
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] server lang: <none>
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] kex follows: False
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] Compression: none
2026-04-11T15:01:45.261 [DEBUG] [Thread-171878] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:01:45.278 [DEBUG] [Thread-171878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:01:45.278 [DEBUG] [Thread-171878] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:01:45.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:01:45.279 [DEBUG] [Thread-171878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:01:45.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:01:45.281 [DEBUG] [Thread-171878] [transport.py] [_log()] userauth is OK
2026-04-11T15:01:45.281 [DEBUG] [Thread-171878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:01:45.281 [DEBUG] [Thread-171878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:01:45.281 [DEBUG] [Thread-171878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:01:45.281 [DEBUG] [Thread-171878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:01:45.316 [INFO] [Thread-171878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:01:45.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:01:45.784 [DEBUG] [Thread-171880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:01:45.878 [DEBUG] [Thread-171878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:01:45.878 [DEBUG] [Thread-171878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:01:45.879 [DEBUG] [Thread-171878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:01:45.919 [DEBUG] [Thread-171878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:01:45.919 [DEBUG] [Thread-171878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:01:45.921 [DEBUG] [Thread-171878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:01:45.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:01:45.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:01:45.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:01:45.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:01:45.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:01:45.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:01:45.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:01:45.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:01:45.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:01:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.542478 -999.00  +14.80   9.70     91  +13.50 1 3 1 3 1   888    0 1.93 20.52 ----- 9.8 9.7 60.6 12.6 17.8 -1.1 17.7 -4.1 17.2 -1.3 17.6 -1.0
2026-04-11T15:01:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:01:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:01:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.542478
2026-04-11T15:01:45.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:01:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:01:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:01:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:01:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:01:45.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:01:32', tmtdew=0.07767, humidity=99.779, cloud=0.0, wind=6.1596, temperature=14.3075, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:01:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:01:45.944 [DEBUG] [Thread-171878] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:01:46.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:01:46.046 [DEBUG] [Thread-171882] [transport.py] [_log()] starting thread (client mode): 0xae561a80
2026-04-11T15:01:46.046 [DEBUG] [Thread-171882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:01:46.064 [DEBUG] [Thread-171882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:01:46.064 [INFO] [Thread-171882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:01:46.071 [DEBUG] [Thread-171882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] client lang: <none>
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] server lang: <none>
2026-04-11T15:01:46.072 [DEBUG] [Thread-171882] [transport.py] [_log()] kex follows: False
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] Compression: none
2026-04-11T15:01:46.073 [DEBUG] [Thread-171882] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:01:46.130 [DEBUG] [Thread-171882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:01:46.131 [DEBUG] [Thread-171882] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:01:46.131 [DEBUG] [Thread-171882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:01:46.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:01:46.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:01:46.187 [DEBUG] [Thread-171882] [transport.py] [_log()] userauth is OK
2026-04-11T15:01:46.187 [DEBUG] [Thread-171882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:01:46.187 [DEBUG] [Thread-171882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:01:46.187 [DEBUG] [Thread-171882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:01:46.187 [DEBUG] [Thread-171882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:01:46.206 [INFO] [Thread-171882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:01:46.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:01:46.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:01:47.064 [DEBUG] [Thread-171882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:01:47.064 [DEBUG] [Thread-171882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:01:47.111 [DEBUG] [Thread-171882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:01:47.112 [DEBUG] [Thread-171882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:01:47.120 [DEBUG] [Thread-171882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:01:47.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:01:47.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-04-11T15:01:47.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-04-11T15:01:47.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:01:47.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:01:47.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:01:47.154 [DEBUG] [Thread-171882] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:02:00.819 [DEBUG] [Thread-171884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:11.845 [DEBUG] [Thread-171885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:15.408 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:15.410 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:15.872 [DEBUG] [Thread-171886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:02:17.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:02:17.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-04-11T15:02:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 2, 7), 0.08025, 99.7624, 0.0, 7.72956, 14.2909, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:02:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:02:07
2026-04-11T15:02:18.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:02:18.974 [DEBUG] [Thread-171887] [transport.py] [_log()] starting thread (client mode): 0xae5a5f30
2026-04-11T15:02:18.974 [DEBUG] [Thread-171887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:02:18.994 [DEBUG] [Thread-171887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:02:18.994 [INFO] [Thread-171887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] client lang: <none>
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] server lang: <none>
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] kex follows: False
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:02:18.997 [DEBUG] [Thread-171887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:02:18.998 [DEBUG] [Thread-171887] [transport.py] [_log()] Compression: none
2026-04-11T15:02:18.998 [DEBUG] [Thread-171887] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:02:19.015 [DEBUG] [Thread-171887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:02:19.016 [DEBUG] [Thread-171887] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:02:19.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:02:19.017 [DEBUG] [Thread-171887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:02:19.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:02:19.019 [DEBUG] [Thread-171887] [transport.py] [_log()] userauth is OK
2026-04-11T15:02:19.019 [DEBUG] [Thread-171887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:02:19.019 [DEBUG] [Thread-171887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:02:19.019 [DEBUG] [Thread-171887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:02:19.019 [DEBUG] [Thread-171887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:02:19.034 [INFO] [Thread-171887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:02:19.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:02:19.683 [DEBUG] [Thread-171887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:02:19.684 [DEBUG] [Thread-171887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:02:19.684 [DEBUG] [Thread-171887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:02:19.724 [DEBUG] [Thread-171887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:02:19.724 [DEBUG] [Thread-171887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:02:19.728 [DEBUG] [Thread-171887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:02:19.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:02:19.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:02:19.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:02:19.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:02:19.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:02:19.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:02:19.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:02:19.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:02:19.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:02:19.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.542825 -999.00  +14.70  10.32     91  +13.40 1 3 1 3 1   888    0 1.90 19.14 ----- 10.2 10.3 47.6 13.2 17.7 -1.0 17.6 -4.3 17.2 -1.3 17.6 -0.4
2026-04-11T15:02:19.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:02:19.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:02:19.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.542825
2026-04-11T15:02:19.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:02:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:02:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:02:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:02:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:02:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:02:07', tmtdew=0.08025, humidity=99.7624, cloud=0.0, wind=7.72956, temperature=14.2909, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:01:40.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:02:19.755 [DEBUG] [Thread-171887] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:02:19.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:02:19.855 [DEBUG] [Thread-171890] [transport.py] [_log()] starting thread (client mode): 0xae51ace0
2026-04-11T15:02:19.855 [DEBUG] [Thread-171890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:02:19.869 [DEBUG] [Thread-171890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:02:19.870 [INFO] [Thread-171890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] client lang: <none>
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] server lang: <none>
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] kex follows: False
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] Compression: none
2026-04-11T15:02:19.878 [DEBUG] [Thread-171890] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:02:19.935 [DEBUG] [Thread-171890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:02:19.936 [DEBUG] [Thread-171890] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:02:19.936 [DEBUG] [Thread-171890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:02:19.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:02:19.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:02:19.992 [DEBUG] [Thread-171890] [transport.py] [_log()] userauth is OK
2026-04-11T15:02:19.992 [DEBUG] [Thread-171890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:02:19.992 [DEBUG] [Thread-171890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:02:19.992 [DEBUG] [Thread-171890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:02:19.992 [DEBUG] [Thread-171890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:02:20.011 [INFO] [Thread-171890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:02:20.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:02:20.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:02:20.851 [DEBUG] [Thread-171890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:02:20.851 [DEBUG] [Thread-171890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:02:20.899 [DEBUG] [Thread-171890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:02:20.899 [DEBUG] [Thread-171890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:02:20.908 [DEBUG] [Thread-171890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:02:20.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:02:20.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-04-11T15:02:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:02:20.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:02:20.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:02:20.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:02:20.946 [DEBUG] [Thread-171890] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:02:30.913 [DEBUG] [Thread-171892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:45.970 [DEBUG] [Thread-171893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:02:50.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:02:50.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:02:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:02:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 2, 43), 0.05035, 99.5901, 0.0, 8.75304, 14.6474, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:02:52.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:02:43
2026-04-11T15:02:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:02:52.799 [DEBUG] [Thread-171894] [transport.py] [_log()] starting thread (client mode): 0xa7950430
2026-04-11T15:02:52.799 [DEBUG] [Thread-171894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:02:52.820 [DEBUG] [Thread-171894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:02:52.820 [INFO] [Thread-171894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] client lang: <none>
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] server lang: <none>
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] kex follows: False
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] Compression: none
2026-04-11T15:02:52.823 [DEBUG] [Thread-171894] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:02:52.843 [DEBUG] [Thread-171894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:02:52.844 [DEBUG] [Thread-171894] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:02:52.844 [DEBUG] [Thread-171894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:02:52.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:02:52.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:02:52.846 [DEBUG] [Thread-171894] [transport.py] [_log()] userauth is OK
2026-04-11T15:02:52.847 [DEBUG] [Thread-171894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:02:52.847 [DEBUG] [Thread-171894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:02:52.847 [DEBUG] [Thread-171894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:02:52.847 [DEBUG] [Thread-171894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:02:52.871 [INFO] [Thread-171894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:02:52.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:02:53.511 [DEBUG] [Thread-171894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:02:53.512 [DEBUG] [Thread-171894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:02:53.512 [DEBUG] [Thread-171894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:02:53.553 [DEBUG] [Thread-171894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:02:53.553 [DEBUG] [Thread-171894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:02:53.557 [DEBUG] [Thread-171894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:02:53.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:02:53.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:02:53.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:02:53.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:02:53.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:02:53.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:02:53.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:02:53.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:02:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:02:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.543520 -999.00  +14.70   8.54     92  +13.50 1 3 1 3 1   888    0 1.75 14.91 ----- 9.2 8.5 60.8 10.2 17.6 -1.1 17.5 -3.7 17.1 -0.5 17.4 -0.7
2026-04-11T15:02:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:02:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:02:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.543520
2026-04-11T15:02:53.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:02:53.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:02:53.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:02:53.582 [DEBUG] [Thread-171894] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:02:53.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:02:53.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:02:53.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:02:43', tmtdew=0.05035, humidity=99.5901, cloud=0.0, wind=8.75304, temperature=14.6474, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:02:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:02:53.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:02:53.675 [DEBUG] [Thread-171897] [transport.py] [_log()] starting thread (client mode): 0xae562560
2026-04-11T15:02:53.675 [DEBUG] [Thread-171897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:02:53.690 [DEBUG] [Thread-171897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:02:53.690 [INFO] [Thread-171897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:02:53.697 [DEBUG] [Thread-171897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] client lang: <none>
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] server lang: <none>
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] kex follows: False
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:02:53.698 [DEBUG] [Thread-171897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:02:53.699 [DEBUG] [Thread-171897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:02:53.699 [DEBUG] [Thread-171897] [transport.py] [_log()] Compression: none
2026-04-11T15:02:53.699 [DEBUG] [Thread-171897] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:02:53.756 [DEBUG] [Thread-171897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:02:53.756 [DEBUG] [Thread-171897] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:02:53.757 [DEBUG] [Thread-171897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:02:53.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:02:53.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:02:53.812 [DEBUG] [Thread-171897] [transport.py] [_log()] userauth is OK
2026-04-11T15:02:53.812 [DEBUG] [Thread-171897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:02:53.813 [DEBUG] [Thread-171897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:02:53.813 [DEBUG] [Thread-171897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:02:53.813 [DEBUG] [Thread-171897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:02:53.832 [INFO] [Thread-171897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:02:53.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:02:53.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:02:54.653 [DEBUG] [Thread-171897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:02:54.653 [DEBUG] [Thread-171897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:02:54.701 [DEBUG] [Thread-171897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:02:54.701 [DEBUG] [Thread-171897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:02:54.710 [DEBUG] [Thread-171897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:02:54.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:02:54.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:02:54.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:02:54.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:02:54.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:02:54.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:02:54.748 [DEBUG] [Thread-171897] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:03:01.007 [DEBUG] [Thread-171899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:11.898 [DEBUG] [Thread-171900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:15.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:15.551 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:16.062 [DEBUG] [Thread-171901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:03:24.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:03:24.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-04-11T15:03:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 3, 18), 0.02776, 99.7785, 0.0, 7.51788, 14.1571, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:03:26.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:03:18
2026-04-11T15:03:26.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:03:26.560 [DEBUG] [Thread-171902] [transport.py] [_log()] starting thread (client mode): 0xae561b40
2026-04-11T15:03:26.560 [DEBUG] [Thread-171902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:03:26.580 [DEBUG] [Thread-171902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:03:26.580 [INFO] [Thread-171902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:03:26.583 [DEBUG] [Thread-171902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] client lang: <none>
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] server lang: <none>
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] kex follows: False
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] Compression: none
2026-04-11T15:03:26.584 [DEBUG] [Thread-171902] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:03:26.602 [DEBUG] [Thread-171902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:03:26.603 [DEBUG] [Thread-171902] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:03:26.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:03:26.604 [DEBUG] [Thread-171902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:03:26.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:03:26.606 [DEBUG] [Thread-171902] [transport.py] [_log()] userauth is OK
2026-04-11T15:03:26.606 [DEBUG] [Thread-171902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:03:26.606 [DEBUG] [Thread-171902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:03:26.606 [DEBUG] [Thread-171902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:03:26.607 [DEBUG] [Thread-171902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:03:26.628 [INFO] [Thread-171902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:03:26.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:03:27.292 [DEBUG] [Thread-171902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:03:27.292 [DEBUG] [Thread-171902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:03:27.292 [DEBUG] [Thread-171902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:03:27.333 [DEBUG] [Thread-171902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:03:27.333 [DEBUG] [Thread-171902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:03:27.334 [DEBUG] [Thread-171902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:03:27.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:03:27.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:03:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:03:27.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:03:27.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:03:27.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:03:27.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.543867 -999.00  +14.70  10.32     92  +13.50 1 3 1 3 1   888    0 1.72 13.11 ----- 10.3 10.3 41.0 15.7 17.6 -1.0 17.5 -3.5 17.1 -0.9 17.4 -0.7
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.543867
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:03:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:03:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:03:27.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:03:18', tmtdew=0.02776, humidity=99.7785, cloud=0.0, wind=7.51788, temperature=14.1571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:03:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:03:27.353 [DEBUG] [Thread-171902] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:03:27.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:03:27.443 [DEBUG] [Thread-171905] [transport.py] [_log()] starting thread (client mode): 0xae5601c0
2026-04-11T15:03:27.444 [DEBUG] [Thread-171905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:03:27.463 [DEBUG] [Thread-171905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:03:27.463 [INFO] [Thread-171905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:03:27.471 [DEBUG] [Thread-171905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:03:27.471 [DEBUG] [Thread-171905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:03:27.471 [DEBUG] [Thread-171905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:03:27.471 [DEBUG] [Thread-171905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:03:27.472 [DEBUG] [Thread-171905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:03:27.472 [DEBUG] [Thread-171905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:03:27.472 [DEBUG] [Thread-171905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:03:27.472 [DEBUG] [Thread-171905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:03:27.472 [DEBUG] [Thread-171905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:03:27.472 [DEBUG] [Thread-171905] [transport.py] [_log()] client lang: <none>
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] server lang: <none>
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] kex follows: False
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] Compression: none
2026-04-11T15:03:27.473 [DEBUG] [Thread-171905] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:03:27.532 [DEBUG] [Thread-171905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:03:27.533 [DEBUG] [Thread-171905] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:03:27.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:03:27.534 [DEBUG] [Thread-171905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:03:27.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:03:27.588 [DEBUG] [Thread-171905] [transport.py] [_log()] userauth is OK
2026-04-11T15:03:27.588 [DEBUG] [Thread-171905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:03:27.588 [DEBUG] [Thread-171905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:03:27.588 [DEBUG] [Thread-171905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:03:27.588 [DEBUG] [Thread-171905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:03:27.607 [INFO] [Thread-171905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:03:27.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:03:27.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:03:28.432 [DEBUG] [Thread-171905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:03:28.432 [DEBUG] [Thread-171905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:03:28.480 [DEBUG] [Thread-171905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:03:28.480 [DEBUG] [Thread-171905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:03:28.489 [DEBUG] [Thread-171905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:03:28.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:03:28.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-04-11T15:03:28.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-04-11T15:03:28.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:03:28.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:03:28.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:03:28.532 [DEBUG] [Thread-171905] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:03:31.098 [DEBUG] [Thread-171907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:46.152 [DEBUG] [Thread-171908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:03:58.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:03:58.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:03:58.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-04-11T15:03:59.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 3, 18), 0.02776, 99.7785, 0.0, 7.51788, 14.1571, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:03:59.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:03:18
2026-04-11T15:04:00.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:04:00.369 [DEBUG] [Thread-171909] [transport.py] [_log()] starting thread (client mode): 0xae5b3f70
2026-04-11T15:04:00.369 [DEBUG] [Thread-171909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:04:00.390 [DEBUG] [Thread-171909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:04:00.390 [INFO] [Thread-171909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:04:00.394 [DEBUG] [Thread-171909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] client lang: <none>
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] server lang: <none>
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] kex follows: False
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:04:00.395 [DEBUG] [Thread-171909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:04:00.396 [DEBUG] [Thread-171909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:04:00.396 [DEBUG] [Thread-171909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:04:00.396 [DEBUG] [Thread-171909] [transport.py] [_log()] Compression: none
2026-04-11T15:04:00.396 [DEBUG] [Thread-171909] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:04:00.412 [DEBUG] [Thread-171909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:04:00.413 [DEBUG] [Thread-171909] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:04:00.413 [DEBUG] [Thread-171909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:04:00.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:04:00.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:04:00.415 [DEBUG] [Thread-171909] [transport.py] [_log()] userauth is OK
2026-04-11T15:04:00.415 [DEBUG] [Thread-171909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:04:00.416 [DEBUG] [Thread-171909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:04:00.416 [DEBUG] [Thread-171909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:04:00.416 [DEBUG] [Thread-171909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:04:00.440 [INFO] [Thread-171909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:04:00.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:04:01.191 [DEBUG] [Thread-171911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:04:01.195 [DEBUG] [Thread-171909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:04:01.195 [DEBUG] [Thread-171909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:04:01.195 [DEBUG] [Thread-171909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:04:01.236 [DEBUG] [Thread-171909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:04:01.236 [DEBUG] [Thread-171909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:04:01.239 [DEBUG] [Thread-171909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:04:01.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:04:01.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:04:01.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:04:01.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:04:01.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:04:01.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:04:01.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:04:01.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.544214 -999.00  +14.70  10.02     92  +13.50 1 3 1 3 1   888    0 1.67 11.32 ----- 11.7 10.0 51.2 12.1 17.5 -1.1 17.4 -3.6 17.1 -0.6 17.4 -0.4
2026-04-11T15:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.544214
2026-04-11T15:04:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:04:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:04:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:04:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:04:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:04:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:03:18', tmtdew=0.02776, humidity=99.7785, cloud=0.0, wind=7.51788, temperature=14.1571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:03:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:04:01.269 [DEBUG] [Thread-171909] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:04: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-04-11T15:04:01.362 [DEBUG] [Thread-171913] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T15:04:01.362 [DEBUG] [Thread-171913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:04:01.377 [DEBUG] [Thread-171913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:04:01.378 [INFO] [Thread-171913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:04:01.385 [DEBUG] [Thread-171913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:04:01.385 [DEBUG] [Thread-171913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:04:01.385 [DEBUG] [Thread-171913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] client lang: <none>
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] server lang: <none>
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] kex follows: False
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] Compression: none
2026-04-11T15:04:01.386 [DEBUG] [Thread-171913] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:04:01.442 [DEBUG] [Thread-171913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:04:01.442 [DEBUG] [Thread-171913] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:04:01.442 [DEBUG] [Thread-171913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:04:01.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:04:01.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:04:01.499 [DEBUG] [Thread-171913] [transport.py] [_log()] userauth is OK
2026-04-11T15:04:01.500 [DEBUG] [Thread-171913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:04:01.500 [DEBUG] [Thread-171913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:04:01.500 [DEBUG] [Thread-171913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:04:01.500 [DEBUG] [Thread-171913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:04:01.522 [INFO] [Thread-171913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:04: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-04-11T15:04:01.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:04:02.366 [DEBUG] [Thread-171913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:04:02.367 [DEBUG] [Thread-171913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:04:02.415 [DEBUG] [Thread-171913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:04:02.415 [DEBUG] [Thread-171913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:04:02.424 [DEBUG] [Thread-171913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:04:02.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:04:02.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-04-11T15:04:02.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-04-11T15:04:02.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:04:02.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:04:02.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:04:02.461 [DEBUG] [Thread-171913] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:04:11.951 [DEBUG] [Thread-171915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:04:15.692 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:04:15.693 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:04:16.228 [DEBUG] [Thread-171916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:04:31.281 [DEBUG] [Thread-171917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:04:32.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:04:32.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:04: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-04-11T15:04:33.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 3, 54), 0.06599, 99.4897, 0.0, 7.27128, 14.5141, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:04:33.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:03:54
2026-04-11T15:04:34.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:04:34.335 [DEBUG] [Thread-171918] [transport.py] [_log()] starting thread (client mode): 0xb0febd60
2026-04-11T15:04:34.335 [DEBUG] [Thread-171918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:04:34.352 [DEBUG] [Thread-171918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:04:34.352 [INFO] [Thread-171918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:04:34.355 [DEBUG] [Thread-171918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] client lang: <none>
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] server lang: <none>
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] kex follows: False
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] Compression: none
2026-04-11T15:04:34.356 [DEBUG] [Thread-171918] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:04:34.376 [DEBUG] [Thread-171918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:04:34.376 [DEBUG] [Thread-171918] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:04:34.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:04:34.377 [DEBUG] [Thread-171918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:04:34.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:04:34.379 [DEBUG] [Thread-171918] [transport.py] [_log()] userauth is OK
2026-04-11T15:04:34.379 [DEBUG] [Thread-171918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:04:34.380 [DEBUG] [Thread-171918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:04:34.380 [DEBUG] [Thread-171918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:04:34.380 [DEBUG] [Thread-171918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:04:34.404 [INFO] [Thread-171918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:04:34.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:04:35.060 [DEBUG] [Thread-171918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:04:35.061 [DEBUG] [Thread-171918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:04:35.061 [DEBUG] [Thread-171918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:04:35.102 [DEBUG] [Thread-171918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:04:35.102 [DEBUG] [Thread-171918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:04:35.106 [DEBUG] [Thread-171918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:04:35.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:04:35.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:04:35.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:04:35.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:04:35.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:04:35.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:04:35.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:04:35.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:04:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:04:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.544561 -999.00  +14.70  10.75     92  +13.50 1 3 1 3 1   888    0 1.63 9.56 ----- 10.3 10.8 52.2 14.3 17.5 -0.8 17.4 -3.6 17.0 -1.5 17.4 -0.3
2026-04-11T15:04:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:04:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:04:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.544561
2026-04-11T15:04:35.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:04:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:04:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:04:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:04:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:04:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:03:54', tmtdew=0.06599, humidity=99.4897, cloud=0.0, wind=7.27128, temperature=14.5141, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:04:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:04:35.136 [DEBUG] [Thread-171918] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:04:35.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:04:35.229 [DEBUG] [Thread-171921] [transport.py] [_log()] starting thread (client mode): 0xb0fe85b0
2026-04-11T15:04:35.229 [DEBUG] [Thread-171921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:04:35.244 [DEBUG] [Thread-171921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:04:35.244 [INFO] [Thread-171921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] client lang: <none>
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] server lang: <none>
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] kex follows: False
2026-04-11T15:04:35.252 [DEBUG] [Thread-171921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:04:35.253 [DEBUG] [Thread-171921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:04:35.253 [DEBUG] [Thread-171921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:04:35.253 [DEBUG] [Thread-171921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:04:35.253 [DEBUG] [Thread-171921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:04:35.253 [DEBUG] [Thread-171921] [transport.py] [_log()] Compression: none
2026-04-11T15:04:35.253 [DEBUG] [Thread-171921] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:04:35.312 [DEBUG] [Thread-171921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:04:35.312 [DEBUG] [Thread-171921] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:04:35.313 [DEBUG] [Thread-171921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:04:35.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:04:35.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:04:35.368 [DEBUG] [Thread-171921] [transport.py] [_log()] userauth is OK
2026-04-11T15:04:35.368 [DEBUG] [Thread-171921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:04:35.368 [DEBUG] [Thread-171921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:04:35.368 [DEBUG] [Thread-171921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:04:35.369 [DEBUG] [Thread-171921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:04:35.387 [INFO] [Thread-171921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:04:35.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:04:35.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:04:36.215 [DEBUG] [Thread-171921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:04:36.216 [DEBUG] [Thread-171921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:04:36.263 [DEBUG] [Thread-171921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:04:36.263 [DEBUG] [Thread-171921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:04:36.273 [DEBUG] [Thread-171921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:04:36.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:04:36.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-04-11T15:04:36.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-04-11T15:04:36.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:04:36.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:04:36.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:04:36.309 [DEBUG] [Thread-171921] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:04:46.321 [DEBUG] [Thread-171923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:01.374 [DEBUG] [Thread-171924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:06.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:05:06.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:05:06.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-04-11T15:05:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 4, 29), 0.075245, 99.7946, 0.0, 10.0764, 14.2234, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:05:07.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:04:29
2026-04-11T15:05:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:05:08.259 [DEBUG] [Thread-171925] [transport.py] [_log()] starting thread (client mode): 0xae5187f0
2026-04-11T15:05:08.259 [DEBUG] [Thread-171925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:05:08.274 [DEBUG] [Thread-171925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:05:08.274 [INFO] [Thread-171925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:05:08.275 [DEBUG] [Thread-171925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] client lang: <none>
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] server lang: <none>
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] kex follows: False
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] Compression: none
2026-04-11T15:05:08.276 [DEBUG] [Thread-171925] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:05:08.286 [DEBUG] [Thread-171925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:05:08.286 [DEBUG] [Thread-171925] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:05:08.287 [DEBUG] [Thread-171925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:05:08.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:05:08.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:05:08.288 [DEBUG] [Thread-171925] [transport.py] [_log()] userauth is OK
2026-04-11T15:05:08.289 [DEBUG] [Thread-171925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:05:08.289 [DEBUG] [Thread-171925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:05:08.289 [DEBUG] [Thread-171925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:05:08.289 [DEBUG] [Thread-171925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:05:08.317 [INFO] [Thread-171925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:05:08.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:05:09.287 [DEBUG] [Thread-171925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:05:09.287 [DEBUG] [Thread-171925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:05:09.287 [DEBUG] [Thread-171925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:05:09.328 [DEBUG] [Thread-171925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:05:09.328 [DEBUG] [Thread-171925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:05:09.331 [DEBUG] [Thread-171925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:05:09.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:05:09.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:05:09.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:05:09.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:05:09.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:05:09.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:05:09.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:05:09.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:05:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:05:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.544909 -999.00  +14.70  11.59     92  +13.50 1 3 1 3 1   888    0 1.59 7.80 ----- 13.3 11.6 62.0 13.9 17.4 -0.9 17.4 -3.5 17.0 -1.1 17.4 -0.4
2026-04-11T15:05:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:05:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:05:09.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.544909
2026-04-11T15:05:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:05:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:05:09.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:05:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:05:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:05:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:04:29', tmtdew=0.075245, humidity=99.7946, cloud=0.0, wind=10.0764, temperature=14.2234, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:04:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:05:09.362 [DEBUG] [Thread-171925] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:05:09.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:05:09.465 [DEBUG] [Thread-171928] [transport.py] [_log()] starting thread (client mode): 0xae5188e0
2026-04-11T15:05:09.465 [DEBUG] [Thread-171928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:05:09.480 [DEBUG] [Thread-171928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:05:09.481 [INFO] [Thread-171928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:05:09.488 [DEBUG] [Thread-171928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:05:09.489 [DEBUG] [Thread-171928] [transport.py] [_log()] client lang: <none>
2026-04-11T15:05:09.490 [DEBUG] [Thread-171928] [transport.py] [_log()] server lang: <none>
2026-04-11T15:05:09.490 [DEBUG] [Thread-171928] [transport.py] [_log()] kex follows: False
2026-04-11T15:05:09.490 [DEBUG] [Thread-171928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:05:09.490 [DEBUG] [Thread-171928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:05:09.490 [DEBUG] [Thread-171928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:05:09.490 [DEBUG] [Thread-171928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:05:09.491 [DEBUG] [Thread-171928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:05:09.491 [DEBUG] [Thread-171928] [transport.py] [_log()] Compression: none
2026-04-11T15:05:09.491 [DEBUG] [Thread-171928] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:05:09.554 [DEBUG] [Thread-171928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:05:09.555 [DEBUG] [Thread-171928] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:05:09.555 [DEBUG] [Thread-171928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:05:09.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:05:09.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:05:09.612 [DEBUG] [Thread-171928] [transport.py] [_log()] userauth is OK
2026-04-11T15:05:09.612 [DEBUG] [Thread-171928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:05:09.613 [DEBUG] [Thread-171928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:05:09.613 [DEBUG] [Thread-171928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:05:09.613 [DEBUG] [Thread-171928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:05:09.642 [INFO] [Thread-171928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:05:09.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:05:10.466 [DEBUG] [Thread-171928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:05:10.466 [DEBUG] [Thread-171928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:05:10.514 [DEBUG] [Thread-171928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:05:10.514 [DEBUG] [Thread-171928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:05:10.524 [DEBUG] [Thread-171928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:05:10.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:05:10.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:05:10.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-04-11T15:05:10.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:05:10.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:05:10.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:05:10.565 [DEBUG] [Thread-171928] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:05:12.003 [DEBUG] [Thread-171930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:15.833 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:15.835 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:16.410 [DEBUG] [Thread-171931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:31.466 [DEBUG] [Thread-171932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:05:40.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:05:40.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:05:40.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-04-11T15:05:41.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 5, 5), 0.075305, 99.7942, 0.0, 9.22968, 14.2066, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:05:41.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:05:05
2026-04-11T15:05:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:05:42.445 [DEBUG] [Thread-171933] [transport.py] [_log()] starting thread (client mode): 0xae5621a0
2026-04-11T15:05:42.445 [DEBUG] [Thread-171933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:05:42.466 [DEBUG] [Thread-171933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:05:42.466 [INFO] [Thread-171933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:05:42.469 [DEBUG] [Thread-171933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:05:42.469 [DEBUG] [Thread-171933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] client lang: <none>
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] server lang: <none>
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] kex follows: False
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] Compression: none
2026-04-11T15:05:42.470 [DEBUG] [Thread-171933] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:05:42.488 [DEBUG] [Thread-171933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:05:42.488 [DEBUG] [Thread-171933] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:05:42.489 [DEBUG] [Thread-171933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:05:42.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:05:42.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:05:42.491 [DEBUG] [Thread-171933] [transport.py] [_log()] userauth is OK
2026-04-11T15:05:42.491 [DEBUG] [Thread-171933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:05:42.491 [DEBUG] [Thread-171933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:05:42.492 [DEBUG] [Thread-171933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:05:42.492 [DEBUG] [Thread-171933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:05:42.510 [INFO] [Thread-171933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:05:42.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:05:43.133 [DEBUG] [Thread-171933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:05:43.134 [DEBUG] [Thread-171933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:05:43.134 [DEBUG] [Thread-171933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:05:43.175 [DEBUG] [Thread-171933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:05:43.175 [DEBUG] [Thread-171933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:05:43.179 [DEBUG] [Thread-171933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:05:43.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:05:43.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:05:43.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:05:43.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:05:43.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:05:43.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:05:43.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:05:43.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:05:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:05:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.545256 -999.00  +14.70  10.93     92  +13.50 1 3 1 3 1   888    0 1.52 6.06 ----- 9.6 10.9 48.2 13.1 17.4 -1.0 17.3 -3.8 16.9 -1.5 17.3 -0.2
2026-04-11T15:05:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:05:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:05:43.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.545256
2026-04-11T15:05:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:05:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:05:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:05:43.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:05:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:05:43.205 [DEBUG] [Thread-171933] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:05:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:05:05', tmtdew=0.075305, humidity=99.7942, cloud=0.0, wind=9.22968, temperature=14.2066, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:05:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:05:43.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:05:43.300 [DEBUG] [Thread-171936] [transport.py] [_log()] starting thread (client mode): 0xae561fc0
2026-04-11T15:05:43.300 [DEBUG] [Thread-171936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:05:43.317 [DEBUG] [Thread-171936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:05:43.317 [INFO] [Thread-171936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] client lang: <none>
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] server lang: <none>
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] kex follows: False
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:05:43.325 [DEBUG] [Thread-171936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:05:43.326 [DEBUG] [Thread-171936] [transport.py] [_log()] Compression: none
2026-04-11T15:05:43.326 [DEBUG] [Thread-171936] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:05:43.385 [DEBUG] [Thread-171936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:05:43.386 [DEBUG] [Thread-171936] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:05:43.387 [DEBUG] [Thread-171936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:05:43.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:05:43.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:05:43.444 [DEBUG] [Thread-171936] [transport.py] [_log()] userauth is OK
2026-04-11T15:05:43.444 [DEBUG] [Thread-171936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:05:43.445 [DEBUG] [Thread-171936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:05:43.445 [DEBUG] [Thread-171936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:05:43.445 [DEBUG] [Thread-171936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:05:43.467 [INFO] [Thread-171936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:05:43.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:05:43.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:05:44.292 [DEBUG] [Thread-171936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:05:44.293 [DEBUG] [Thread-171936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:05:44.340 [DEBUG] [Thread-171936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:05:44.340 [DEBUG] [Thread-171936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:05:44.350 [DEBUG] [Thread-171936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:05:44.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:05:44.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-04-11T15:05:44.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-04-11T15:05:44.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:05:44.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:05:44.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:05:44.389 [DEBUG] [Thread-171936] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:05:46.503 [DEBUG] [Thread-171938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:01.550 [DEBUG] [Thread-171939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:12.053 [DEBUG] [Thread-171940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:06:14.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:06:14.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-04-11T15:06:15.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 5, 40), 0.06094, 99.5222, 0.0, 6.81264, 14.5137, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:06:15.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:05:40
2026-04-11T15:06:15.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:15.977 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:06:16.202 [DEBUG] [Thread-171941] [transport.py] [_log()] starting thread (client mode): 0xb0fea2f0
2026-04-11T15:06:16.202 [DEBUG] [Thread-171941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:06:16.215 [DEBUG] [Thread-171941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:06:16.215 [INFO] [Thread-171941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] client lang: <none>
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] server lang: <none>
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] kex follows: False
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] Compression: none
2026-04-11T15:06:16.217 [DEBUG] [Thread-171941] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:06:16.232 [DEBUG] [Thread-171941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:06:16.232 [DEBUG] [Thread-171941] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:06:16.233 [DEBUG] [Thread-171941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:06:16.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:06:16.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:06:16.234 [DEBUG] [Thread-171941] [transport.py] [_log()] userauth is OK
2026-04-11T15:06:16.235 [DEBUG] [Thread-171941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:06:16.235 [DEBUG] [Thread-171941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:06:16.235 [DEBUG] [Thread-171941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:06:16.235 [DEBUG] [Thread-171941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:06:16.259 [INFO] [Thread-171941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:06:16.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:06:16.581 [DEBUG] [Thread-171943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:16.902 [DEBUG] [Thread-171941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:06:16.902 [DEBUG] [Thread-171941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:06:16.902 [DEBUG] [Thread-171941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:06:16.943 [DEBUG] [Thread-171941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:06:16.943 [DEBUG] [Thread-171941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:06:16.947 [DEBUG] [Thread-171941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:06:16.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:06:16.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:06:16.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:06:16.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:06:16.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:06:16.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:06:16.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:06:16.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:06:16.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:06:16.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.545603 -999.00  +14.70  11.36     92  +13.50 1 3 1 3 1   888    0 1.45 3.89 ----- 7.5 11.4 21.8 12.7 17.4 -0.8 17.3 -3.8 16.9 -0.6 17.4 -0.3
2026-04-11T15:06:16.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:06:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:06:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.545603
2026-04-11T15:06:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:06:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:06:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:06:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:06:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:06:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:05:40', tmtdew=0.06094, humidity=99.5222, cloud=0.0, wind=6.81264, temperature=14.5137, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:05:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:06:16.975 [DEBUG] [Thread-171941] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:06:17.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:06:17.068 [DEBUG] [Thread-171945] [transport.py] [_log()] starting thread (client mode): 0xb0fe8280
2026-04-11T15:06:17.068 [DEBUG] [Thread-171945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:06:17.083 [DEBUG] [Thread-171945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:06:17.084 [INFO] [Thread-171945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:06:17.091 [DEBUG] [Thread-171945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] client lang: <none>
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] server lang: <none>
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] kex follows: False
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] Compression: none
2026-04-11T15:06:17.092 [DEBUG] [Thread-171945] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:06:17.152 [DEBUG] [Thread-171945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:06:17.153 [DEBUG] [Thread-171945] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:06:17.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:06:17.154 [DEBUG] [Thread-171945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:06:17.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:06:17.212 [DEBUG] [Thread-171945] [transport.py] [_log()] userauth is OK
2026-04-11T15:06:17.212 [DEBUG] [Thread-171945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:06:17.212 [DEBUG] [Thread-171945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:06:17.213 [DEBUG] [Thread-171945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:06:17.213 [DEBUG] [Thread-171945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:06:17.232 [INFO] [Thread-171945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:06:17.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:06:17.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:06:18.070 [DEBUG] [Thread-171945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:06:18.070 [DEBUG] [Thread-171945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:06:18.119 [DEBUG] [Thread-171945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:06:18.119 [DEBUG] [Thread-171945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:06:18.128 [DEBUG] [Thread-171945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:06:18.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:06:18.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-04-11T15:06:18.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-04-11T15:06:18.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:06:18.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:06:18.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:06:18.162 [DEBUG] [Thread-171945] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:06:31.618 [DEBUG] [Thread-171947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:46.680 [DEBUG] [Thread-171948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:06:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:06:48.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:06:48.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-04-11T15:06:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 6, 16), 0.025355, 99.7939, 0.0, 6.88284, 14.1898, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:06:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:06:16
2026-04-11T15:06:49.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:06:50.024 [DEBUG] [Thread-171949] [transport.py] [_log()] starting thread (client mode): 0xae5181c0
2026-04-11T15:06:50.024 [DEBUG] [Thread-171949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:06:50.044 [DEBUG] [Thread-171949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:06:50.044 [INFO] [Thread-171949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:06:50.047 [DEBUG] [Thread-171949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:06:50.047 [DEBUG] [Thread-171949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] client lang: <none>
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] server lang: <none>
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] kex follows: False
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] Compression: none
2026-04-11T15:06:50.048 [DEBUG] [Thread-171949] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:06:50.056 [DEBUG] [Thread-171949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:06:50.057 [DEBUG] [Thread-171949] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:06:50.057 [DEBUG] [Thread-171949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:06:50.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:06:50.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:06:50.058 [DEBUG] [Thread-171949] [transport.py] [_log()] userauth is OK
2026-04-11T15:06:50.058 [DEBUG] [Thread-171949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:06:50.059 [DEBUG] [Thread-171949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:06:50.059 [DEBUG] [Thread-171949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:06:50.059 [DEBUG] [Thread-171949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:06:50.075 [INFO] [Thread-171949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:06:50.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:06:50.676 [DEBUG] [Thread-171949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:06:50.676 [DEBUG] [Thread-171949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:06:50.677 [DEBUG] [Thread-171949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:06:50.717 [DEBUG] [Thread-171949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:06:50.717 [DEBUG] [Thread-171949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:06:50.721 [DEBUG] [Thread-171949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:06:50.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:06:50.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:06:50.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:06:50.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:06:50.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:06:50.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:06:50.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:06:50.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:06:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:06:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.545950 -999.00  +14.80   6.20     92  +13.60 1 3 1 3 1   888    0 1.41 2.13 ----- 7.3 6.2 355.7 13.0 17.4 -0.6 17.3 -3.9 17.0 -0.3 17.2 -0.0
2026-04-11T15:06:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:06:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:06:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.545950
2026-04-11T15:06:50.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:06:50.747 [DEBUG] [Thread-171949] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:06:50.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:06:50.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:06:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:06:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:06:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:06:16', tmtdew=0.025355, humidity=99.7939, cloud=0.0, wind=6.88284, temperature=14.1898, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:06:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:06:50.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:06:50.841 [DEBUG] [Thread-171952] [transport.py] [_log()] starting thread (client mode): 0xae536440
2026-04-11T15:06:50.841 [DEBUG] [Thread-171952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:06:50.855 [DEBUG] [Thread-171952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:06:50.856 [INFO] [Thread-171952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:06:50.863 [DEBUG] [Thread-171952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:06:50.863 [DEBUG] [Thread-171952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:06:50.863 [DEBUG] [Thread-171952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:06:50.863 [DEBUG] [Thread-171952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:50.863 [DEBUG] [Thread-171952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] client lang: <none>
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] server lang: <none>
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] kex follows: False
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:06:50.864 [DEBUG] [Thread-171952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:06:50.865 [DEBUG] [Thread-171952] [transport.py] [_log()] Compression: none
2026-04-11T15:06:50.865 [DEBUG] [Thread-171952] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:06:50.922 [DEBUG] [Thread-171952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:06:50.922 [DEBUG] [Thread-171952] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:06:50.922 [DEBUG] [Thread-171952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:06:50.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:06:50.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:06:50.979 [DEBUG] [Thread-171952] [transport.py] [_log()] userauth is OK
2026-04-11T15:06:50.979 [DEBUG] [Thread-171952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:06:50.979 [DEBUG] [Thread-171952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:06:50.979 [DEBUG] [Thread-171952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:06:50.979 [DEBUG] [Thread-171952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:06:50.993 [INFO] [Thread-171952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:06:50.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:06:50.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:06:51.817 [DEBUG] [Thread-171952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:06:51.818 [DEBUG] [Thread-171952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:06:51.865 [DEBUG] [Thread-171952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:06:51.865 [DEBUG] [Thread-171952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:06:51.874 [DEBUG] [Thread-171952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:06:51.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:06:51.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-04-11T15:06:51.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-04-11T15:06:51.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:06:51.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:06:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:06:51.907 [DEBUG] [Thread-171952] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:07:01.720 [DEBUG] [Thread-171954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:12.101 [DEBUG] [Thread-171955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:16.117 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:16.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:16.771 [DEBUG] [Thread-171956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:07:21.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:07:21.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-04-11T15:07:23.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 6, 51), 0.06624, 99.488, 0.0, 6.0012, 14.6125, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:07:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:06:51
2026-04-11T15:07:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:07:23.784 [DEBUG] [Thread-171957] [transport.py] [_log()] starting thread (client mode): 0xb0fe8d30
2026-04-11T15:07:23.784 [DEBUG] [Thread-171957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:07:23.804 [DEBUG] [Thread-171957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:07:23.805 [INFO] [Thread-171957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:07:23.807 [DEBUG] [Thread-171957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] client lang: <none>
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] server lang: <none>
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] kex follows: False
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:07:23.808 [DEBUG] [Thread-171957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:07:23.809 [DEBUG] [Thread-171957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:07:23.809 [DEBUG] [Thread-171957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:07:23.809 [DEBUG] [Thread-171957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:07:23.809 [DEBUG] [Thread-171957] [transport.py] [_log()] Compression: none
2026-04-11T15:07:23.809 [DEBUG] [Thread-171957] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:07:23.826 [DEBUG] [Thread-171957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:07:23.827 [DEBUG] [Thread-171957] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:07:23.827 [DEBUG] [Thread-171957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:07:23.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:07:23.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:07:23.829 [DEBUG] [Thread-171957] [transport.py] [_log()] userauth is OK
2026-04-11T15:07:23.829 [DEBUG] [Thread-171957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:07:23.830 [DEBUG] [Thread-171957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:07:23.830 [DEBUG] [Thread-171957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:07:23.830 [DEBUG] [Thread-171957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:07:23.848 [INFO] [Thread-171957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:07:23.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:07:24.462 [DEBUG] [Thread-171957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:07:24.462 [DEBUG] [Thread-171957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:07:24.462 [DEBUG] [Thread-171957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:07:24.503 [DEBUG] [Thread-171957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:07:24.503 [DEBUG] [Thread-171957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:07:24.507 [DEBUG] [Thread-171957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:07:24.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:07:24.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:07:24.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:07:24.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:07:24.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:07:24.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:07:24.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:07:24.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:07:24.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:07:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.546297 -999.00  +14.80   9.69     92  +13.70 1 3 1 3 1   888    0 1.34 -0.46 ----- 8.2 9.7 45.2 11.7 17.4 -0.6 17.3 -3.5 17.0 -0.2 17.4 -0.0
2026-04-11T15:07:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:07:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:07:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.546297
2026-04-11T15:07:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:07:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:07:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:07:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:07:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:07:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:06:51', tmtdew=0.06624, humidity=99.488, cloud=0.0, wind=6.0012, temperature=14.6125, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:06:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:07:24.535 [DEBUG] [Thread-171957] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:07:24.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:07:24.630 [DEBUG] [Thread-171960] [transport.py] [_log()] starting thread (client mode): 0xae51bac0
2026-04-11T15:07:24.630 [DEBUG] [Thread-171960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:07:24.645 [DEBUG] [Thread-171960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:07:24.645 [INFO] [Thread-171960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] client lang: <none>
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] server lang: <none>
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] kex follows: False
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:07:24.653 [DEBUG] [Thread-171960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:07:24.654 [DEBUG] [Thread-171960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:07:24.654 [DEBUG] [Thread-171960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:07:24.654 [DEBUG] [Thread-171960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:07:24.654 [DEBUG] [Thread-171960] [transport.py] [_log()] Compression: none
2026-04-11T15:07:24.654 [DEBUG] [Thread-171960] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:07:24.711 [DEBUG] [Thread-171960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:07:24.712 [DEBUG] [Thread-171960] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:07:24.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:07:24.713 [DEBUG] [Thread-171960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:07:24.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:07:24.772 [DEBUG] [Thread-171960] [transport.py] [_log()] userauth is OK
2026-04-11T15:07:24.772 [DEBUG] [Thread-171960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:07:24.772 [DEBUG] [Thread-171960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:07:24.773 [DEBUG] [Thread-171960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:07:24.773 [DEBUG] [Thread-171960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:07:24.790 [INFO] [Thread-171960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:07:24.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:07:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:07:25.641 [DEBUG] [Thread-171960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:07:25.641 [DEBUG] [Thread-171960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:07:25.689 [DEBUG] [Thread-171960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:07:25.689 [DEBUG] [Thread-171960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:07:25.697 [DEBUG] [Thread-171960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:07:25.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:07: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-04-11T15:07: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-04-11T15:07:25.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:07:25.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:07:25.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:07:25.734 [DEBUG] [Thread-171960] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:07:31.808 [DEBUG] [Thread-171962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:46.853 [DEBUG] [Thread-171963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:07:55.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:07:55.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:07:55.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-04-11T15:07:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 7, 26), 0.025355, 99.7937, 0.0, 10.341, 14.3057, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:07:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:07:26
2026-04-11T15:07:57.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:07:57.587 [DEBUG] [Thread-171964] [transport.py] [_log()] starting thread (client mode): 0xb0fe8dc0
2026-04-11T15:07:57.587 [DEBUG] [Thread-171964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:07:57.608 [DEBUG] [Thread-171964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:07:57.608 [INFO] [Thread-171964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:07:57.610 [DEBUG] [Thread-171964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:07:57.610 [DEBUG] [Thread-171964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] client lang: <none>
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] server lang: <none>
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] kex follows: False
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] Compression: none
2026-04-11T15:07:57.611 [DEBUG] [Thread-171964] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:07:57.628 [DEBUG] [Thread-171964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:07:57.628 [DEBUG] [Thread-171964] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:07:57.629 [DEBUG] [Thread-171964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:07:57.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:07:57.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:07:57.631 [DEBUG] [Thread-171964] [transport.py] [_log()] userauth is OK
2026-04-11T15:07:57.631 [DEBUG] [Thread-171964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:07:57.631 [DEBUG] [Thread-171964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:07:57.631 [DEBUG] [Thread-171964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:07:57.631 [DEBUG] [Thread-171964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:07:57.652 [INFO] [Thread-171964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:07:57.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:07:58.275 [DEBUG] [Thread-171964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:07:58.276 [DEBUG] [Thread-171964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:07:58.276 [DEBUG] [Thread-171964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:07:58.317 [DEBUG] [Thread-171964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:07:58.317 [DEBUG] [Thread-171964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:07:58.321 [DEBUG] [Thread-171964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:07:58.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:07:58.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:07:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:07:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:07:58.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:07:58.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:07:58.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:07:58.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:07:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:07:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.546992 -999.00  +14.90   8.49     93  +13.90 1 3 1 3 1   888    0 1.12 -5.91 ----- 5.5 8.5 36.2 11.1 17.5 -0.5 17.4 -3.1 17.1 -0.1 17.3 -0.4
2026-04-11T15:07:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:07:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:07:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.546992
2026-04-11T15:07:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:07:26', tmtdew=0.025355, humidity=99.7937, cloud=0.0, wind=10.341, temperature=14.3057, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:07:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:07:58.347 [DEBUG] [Thread-171964] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:07:58.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:07:58.440 [DEBUG] [Thread-171967] [transport.py] [_log()] starting thread (client mode): 0xb39c6170
2026-04-11T15:07:58.440 [DEBUG] [Thread-171967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:07:58.454 [DEBUG] [Thread-171967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:07:58.454 [INFO] [Thread-171967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] client lang: <none>
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] server lang: <none>
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] kex follows: False
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:07:58.462 [DEBUG] [Thread-171967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:07:58.463 [DEBUG] [Thread-171967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:07:58.463 [DEBUG] [Thread-171967] [transport.py] [_log()] Compression: none
2026-04-11T15:07:58.463 [DEBUG] [Thread-171967] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:07:58.520 [DEBUG] [Thread-171967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:07:58.521 [DEBUG] [Thread-171967] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:07:58.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:07:58.522 [DEBUG] [Thread-171967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:07:58.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:07:58.576 [DEBUG] [Thread-171967] [transport.py] [_log()] userauth is OK
2026-04-11T15:07:58.576 [DEBUG] [Thread-171967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:07:58.576 [DEBUG] [Thread-171967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:07:58.576 [DEBUG] [Thread-171967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:07:58.576 [DEBUG] [Thread-171967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:07:58.595 [INFO] [Thread-171967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:07:58.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:07:58.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:07:59.409 [DEBUG] [Thread-171967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:07:59.409 [DEBUG] [Thread-171967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:07:59.458 [DEBUG] [Thread-171967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:07:59.458 [DEBUG] [Thread-171967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:07:59.467 [DEBUG] [Thread-171967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:07:59.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:07:59.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-04-11T15:07:59.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:07:59.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:07:59.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:07:59.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:07:59.504 [DEBUG] [Thread-171967] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:08:01.893 [DEBUG] [Thread-171969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:08:12.169 [DEBUG] [Thread-171970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:08:16.258 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:08:16.260 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:08:16.948 [DEBUG] [Thread-171971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:08:29.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:08:29.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:08:29.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-04-11T15:08:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 8, 2), 0.022745, 99.8103, 0.0, 8.38296, 14.3886, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:08:30.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:08:02
2026-04-11T15:08:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:08:31.360 [DEBUG] [Thread-171972] [transport.py] [_log()] starting thread (client mode): 0xae519c60
2026-04-11T15:08:31.360 [DEBUG] [Thread-171972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:08:31.379 [DEBUG] [Thread-171972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:08:31.379 [INFO] [Thread-171972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] client lang: <none>
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] server lang: <none>
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] kex follows: False
2026-04-11T15:08:31.382 [DEBUG] [Thread-171972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:08:31.383 [DEBUG] [Thread-171972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:08:31.383 [DEBUG] [Thread-171972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:08:31.383 [DEBUG] [Thread-171972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:08:31.383 [DEBUG] [Thread-171972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:08:31.383 [DEBUG] [Thread-171972] [transport.py] [_log()] Compression: none
2026-04-11T15:08:31.383 [DEBUG] [Thread-171972] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:08:31.391 [DEBUG] [Thread-171972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:08:31.391 [DEBUG] [Thread-171972] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:08:31.392 [DEBUG] [Thread-171972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:08:31.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:08:31.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:08:31.394 [DEBUG] [Thread-171972] [transport.py] [_log()] userauth is OK
2026-04-11T15:08:31.394 [DEBUG] [Thread-171972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:08:31.394 [DEBUG] [Thread-171972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:08:31.394 [DEBUG] [Thread-171972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:08:31.394 [DEBUG] [Thread-171972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:08:31.423 [INFO] [Thread-171972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:08:31.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:08:31.985 [DEBUG] [Thread-171974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:08:32.058 [DEBUG] [Thread-171972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:08:32.058 [DEBUG] [Thread-171972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:08:32.059 [DEBUG] [Thread-171972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:08:32.099 [DEBUG] [Thread-171972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:08:32.099 [DEBUG] [Thread-171972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:08:32.102 [DEBUG] [Thread-171972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:08:32.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:08:32.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:08:32.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:08:32.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:08:32.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:08:32.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:08:32.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:08:32.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:08:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:08:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.547339 -999.00  +14.70   9.95     92  +13.50 1 3 1 3 1   888    0 1.08 -8.09 ----- 10.0 9.9 19.8 13.9 17.4 -0.8 17.3 -3.5 17.1 -0.4 17.2 -1.0
2026-04-11T15:08:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:08:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:08:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.547339
2026-04-11T15:08:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:08:32.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:08:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:08:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:08:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:08:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:08:02', tmtdew=0.022745, humidity=99.8103, cloud=0.0, wind=8.38296, temperature=14.3886, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:08:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:08:32.129 [DEBUG] [Thread-171972] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:08:32.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:08:32.224 [DEBUG] [Thread-171976] [transport.py] [_log()] starting thread (client mode): 0xae5e7310
2026-04-11T15:08:32.224 [DEBUG] [Thread-171976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:08:32.238 [DEBUG] [Thread-171976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:08:32.238 [INFO] [Thread-171976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:08:32.245 [DEBUG] [Thread-171976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] client lang: <none>
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] server lang: <none>
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] kex follows: False
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] Compression: none
2026-04-11T15:08:32.246 [DEBUG] [Thread-171976] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:08:32.303 [DEBUG] [Thread-171976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:08:32.303 [DEBUG] [Thread-171976] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:08:32.304 [DEBUG] [Thread-171976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:08:32.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:08:32.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:08:32.359 [DEBUG] [Thread-171976] [transport.py] [_log()] userauth is OK
2026-04-11T15:08:32.360 [DEBUG] [Thread-171976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:08:32.360 [DEBUG] [Thread-171976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:08:32.360 [DEBUG] [Thread-171976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:08:32.360 [DEBUG] [Thread-171976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:08:32.379 [INFO] [Thread-171976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:08:32.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:08:32.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:08:33.208 [DEBUG] [Thread-171976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:08:33.208 [DEBUG] [Thread-171976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:08:33.261 [DEBUG] [Thread-171976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:08:33.261 [DEBUG] [Thread-171976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:08:33.275 [DEBUG] [Thread-171976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:08:33.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:08:33.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:08:33.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-04-11T15:08:33.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:08:33.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:08:33.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:08:33.332 [DEBUG] [Thread-171976] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:08:47.024 [DEBUG] [Thread-171978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:02.077 [DEBUG] [Thread-171979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:09:03.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:09:03.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:09:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 8, 37), 0.06097, 99.5216, 0.0, 9.59976, 14.8117, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:09:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:08:37
2026-04-11T15:09:05.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:09:05.186 [DEBUG] [Thread-171980] [transport.py] [_log()] starting thread (client mode): 0xae535a50
2026-04-11T15:09:05.186 [DEBUG] [Thread-171980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:09:05.207 [DEBUG] [Thread-171980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:09:05.207 [INFO] [Thread-171980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] client lang: <none>
2026-04-11T15:09:05.210 [DEBUG] [Thread-171980] [transport.py] [_log()] server lang: <none>
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] kex follows: False
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] Compression: none
2026-04-11T15:09:05.211 [DEBUG] [Thread-171980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:09:05.229 [DEBUG] [Thread-171980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:09:05.229 [DEBUG] [Thread-171980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:09:05.230 [DEBUG] [Thread-171980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:09:05.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:09:05.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:09:05.232 [DEBUG] [Thread-171980] [transport.py] [_log()] userauth is OK
2026-04-11T15:09:05.232 [DEBUG] [Thread-171980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:09:05.232 [DEBUG] [Thread-171980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:09:05.232 [DEBUG] [Thread-171980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:09:05.232 [DEBUG] [Thread-171980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:09:05.269 [INFO] [Thread-171980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:09:05.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:09:06.027 [DEBUG] [Thread-171980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:09:06.027 [DEBUG] [Thread-171980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:09:06.028 [DEBUG] [Thread-171980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:09:06.068 [DEBUG] [Thread-171980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:09:06.068 [DEBUG] [Thread-171980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:09:06.071 [DEBUG] [Thread-171980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:09:06.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:09:06.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:09:06.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:09:06.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:09:06.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:09:06.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:09:06.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:09:06.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:09:06.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:09:06.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.547686 -999.00  +14.80   9.28     92  +13.50 1 3 1 3 1   888    0 1.03 -9.86 ----- 9.4 9.3 38.8 12.7 17.4 -1.2 17.3 -3.6 17.0 -1.0 17.2 -0.1
2026-04-11T15:09:06.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:09:06.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:09:06.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.547686
2026-04-11T15:09:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:09:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:09:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:09:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:09:06.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:09:06.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:08:37', tmtdew=0.06097, humidity=99.5216, cloud=0.0, wind=9.59976, temperature=14.8117, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:08:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:09:06.093 [DEBUG] [Thread-171980] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:09:06.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:09:06.186 [DEBUG] [Thread-171983] [transport.py] [_log()] starting thread (client mode): 0xae5096f0
2026-04-11T15:09:06.186 [DEBUG] [Thread-171983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:09:06.201 [DEBUG] [Thread-171983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:09:06.201 [INFO] [Thread-171983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:09:06.208 [DEBUG] [Thread-171983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] client lang: <none>
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] server lang: <none>
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] kex follows: False
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] Compression: none
2026-04-11T15:09:06.209 [DEBUG] [Thread-171983] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:09:06.268 [DEBUG] [Thread-171983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:09:06.268 [DEBUG] [Thread-171983] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:09:06.269 [DEBUG] [Thread-171983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:09:06.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:09:06.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:09:06.324 [DEBUG] [Thread-171983] [transport.py] [_log()] userauth is OK
2026-04-11T15:09:06.324 [DEBUG] [Thread-171983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:09:06.324 [DEBUG] [Thread-171983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:09:06.324 [DEBUG] [Thread-171983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:09:06.325 [DEBUG] [Thread-171983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:09:06.344 [INFO] [Thread-171983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:09:06.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:09:06.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:09:07.187 [DEBUG] [Thread-171983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:09:07.188 [DEBUG] [Thread-171983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:09:07.236 [DEBUG] [Thread-171983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:09:07.236 [DEBUG] [Thread-171983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:09:07.246 [DEBUG] [Thread-171983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:09:07.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:09:07.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-04-11T15:09:07.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:09:07.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:09:07.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:09:07.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:09:07.282 [DEBUG] [Thread-171983] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:09:12.202 [DEBUG] [Thread-171985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:16.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:16.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:17.117 [DEBUG] [Thread-171986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:32.169 [DEBUG] [Thread-171987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:09:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:09:37.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:09:37.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-04-11T15:09:38.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 9, 13), 0.08053, 99.7606, 0.0, 7.25328, 14.3225, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:09:38.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:09:13
2026-04-11T15:09:38.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:09:39.078 [DEBUG] [Thread-171988] [transport.py] [_log()] starting thread (client mode): 0xae50a3e0
2026-04-11T15:09:39.078 [DEBUG] [Thread-171988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:09:39.098 [DEBUG] [Thread-171988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:09:39.098 [INFO] [Thread-171988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] client lang: <none>
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] server lang: <none>
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] kex follows: False
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] Compression: none
2026-04-11T15:09:39.101 [DEBUG] [Thread-171988] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:09:39.123 [DEBUG] [Thread-171988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:09:39.124 [DEBUG] [Thread-171988] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:09:39.124 [DEBUG] [Thread-171988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:09:39.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:09:39.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:09:39.126 [DEBUG] [Thread-171988] [transport.py] [_log()] userauth is OK
2026-04-11T15:09:39.126 [DEBUG] [Thread-171988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:09:39.126 [DEBUG] [Thread-171988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:09:39.126 [DEBUG] [Thread-171988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:09:39.127 [DEBUG] [Thread-171988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:09:39.147 [INFO] [Thread-171988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:09:39.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:09:39.952 [DEBUG] [Thread-171988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:09:39.952 [DEBUG] [Thread-171988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:09:39.952 [DEBUG] [Thread-171988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:09:39.993 [DEBUG] [Thread-171988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:09:39.993 [DEBUG] [Thread-171988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:09:39.997 [DEBUG] [Thread-171988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:09:40.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:09:40.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:09:40.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:09:40.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:09:40.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:09:40.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:09:40.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:09:40.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:09:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:09:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.548034 -999.00  +14.90   8.44     92  +13.70 1 3 1 3 1   888    0 0.96 -12.26 ----- 7.7 8.4 32.8 10.8 17.4 -0.8 17.3 -3.4 17.0 -0.6 17.2 -0.1
2026-04-11T15:09:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:09:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:09:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.548034
2026-04-11T15:09:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:09:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:09:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:09:40.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:09:40.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:09:40.024 [DEBUG] [Thread-171988] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:09:40.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:09:13', tmtdew=0.08053, humidity=99.7606, cloud=0.0, wind=7.25328, temperature=14.3225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:09:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:09:40.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:09:40.118 [DEBUG] [Thread-171991] [transport.py] [_log()] starting thread (client mode): 0xb0fe9420
2026-04-11T15:09:40.118 [DEBUG] [Thread-171991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:09:40.132 [DEBUG] [Thread-171991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:09:40.132 [INFO] [Thread-171991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:09:40.140 [DEBUG] [Thread-171991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:09:40.140 [DEBUG] [Thread-171991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:09:40.140 [DEBUG] [Thread-171991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:09:40.140 [DEBUG] [Thread-171991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] client lang: <none>
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] server lang: <none>
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] kex follows: False
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:09:40.141 [DEBUG] [Thread-171991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:09:40.142 [DEBUG] [Thread-171991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:09:40.142 [DEBUG] [Thread-171991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:09:40.142 [DEBUG] [Thread-171991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:09:40.142 [DEBUG] [Thread-171991] [transport.py] [_log()] Compression: none
2026-04-11T15:09:40.142 [DEBUG] [Thread-171991] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:09:40.200 [DEBUG] [Thread-171991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:09:40.201 [DEBUG] [Thread-171991] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:09:40.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:09:40.203 [DEBUG] [Thread-171991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:09:40.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:09:40.260 [DEBUG] [Thread-171991] [transport.py] [_log()] userauth is OK
2026-04-11T15:09:40.260 [DEBUG] [Thread-171991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:09:40.260 [DEBUG] [Thread-171991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:09:40.260 [DEBUG] [Thread-171991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:09:40.260 [DEBUG] [Thread-171991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:09:40.283 [INFO] [Thread-171991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:09:40.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:09:40.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:09:41.091 [DEBUG] [Thread-171991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:09:41.091 [DEBUG] [Thread-171991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:09:41.140 [DEBUG] [Thread-171991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:09:41.141 [DEBUG] [Thread-171991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:09:41.150 [DEBUG] [Thread-171991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:09:41.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:09:41.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-04-11T15:09:41.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-04-11T15:09:41.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:09:41.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:09:41.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:09:41.187 [DEBUG] [Thread-171991] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:09:47.207 [DEBUG] [Thread-171993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:02.262 [DEBUG] [Thread-171994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:10:11.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:10:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:10:12.252 [DEBUG] [Thread-171995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:12.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 9, 48), 0.06623, 99.488, 0.0, 7.90632, 14.6788, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:10:12.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:09:48
2026-04-11T15:10:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:10:12.992 [DEBUG] [Thread-171996] [transport.py] [_log()] starting thread (client mode): 0xae5633a0
2026-04-11T15:10:12.992 [DEBUG] [Thread-171996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:10:13.016 [DEBUG] [Thread-171996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:10:13.016 [INFO] [Thread-171996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] client lang: <none>
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] server lang: <none>
2026-04-11T15:10:13.019 [DEBUG] [Thread-171996] [transport.py] [_log()] kex follows: False
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] Compression: none
2026-04-11T15:10:13.020 [DEBUG] [Thread-171996] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:10:13.038 [DEBUG] [Thread-171996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:10:13.039 [DEBUG] [Thread-171996] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:10:13.039 [DEBUG] [Thread-171996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:10:13.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:10:13.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:10:13.042 [DEBUG] [Thread-171996] [transport.py] [_log()] userauth is OK
2026-04-11T15:10:13.042 [DEBUG] [Thread-171996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:10:13.042 [DEBUG] [Thread-171996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:10:13.042 [DEBUG] [Thread-171996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:10:13.042 [DEBUG] [Thread-171996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:10:13.065 [INFO] [Thread-171996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:10:13.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:10:14.247 [DEBUG] [Thread-171996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:10:14.247 [DEBUG] [Thread-171996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:10:14.247 [DEBUG] [Thread-171996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:10:14.288 [DEBUG] [Thread-171996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:10:14.288 [DEBUG] [Thread-171996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:10:14.291 [DEBUG] [Thread-171996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:10:14.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:10:14.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:10:14.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:10:14.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:10:14.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:10:14.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:10:14.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:10:14.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:10:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:10:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.548381 -999.00  +14.90  11.10     93  +13.80 1 3 1 3 1   888    0 0.94 -13.90 ----- 12.2 11.1 47.8 12.8 17.4 -0.9 17.3 -3.2 17.0 -0.3 17.2 -0.3
2026-04-11T15:10:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:10:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:10:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.548381
2026-04-11T15:10:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:10:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:10:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:10:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:10:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:10:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:09:48', tmtdew=0.06623, humidity=99.488, cloud=0.0, wind=7.90632, temperature=14.6788, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:09:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:10:14.322 [DEBUG] [Thread-171996] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:10:14.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:10:14.414 [DEBUG] [Thread-171999] [transport.py] [_log()] starting thread (client mode): 0xae5619f0
2026-04-11T15:10:14.415 [DEBUG] [Thread-171999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:10:14.429 [DEBUG] [Thread-171999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:10:14.430 [INFO] [Thread-171999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:10:14.437 [DEBUG] [Thread-171999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] client lang: <none>
2026-04-11T15:10:14.438 [DEBUG] [Thread-171999] [transport.py] [_log()] server lang: <none>
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] kex follows: False
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] Compression: none
2026-04-11T15:10:14.439 [DEBUG] [Thread-171999] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:10:14.498 [DEBUG] [Thread-171999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:10:14.498 [DEBUG] [Thread-171999] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:10:14.499 [DEBUG] [Thread-171999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:10:14.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:10:14.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:10:14.559 [DEBUG] [Thread-171999] [transport.py] [_log()] userauth is OK
2026-04-11T15:10:14.559 [DEBUG] [Thread-171999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:10:14.559 [DEBUG] [Thread-171999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:10:14.559 [DEBUG] [Thread-171999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:10:14.559 [DEBUG] [Thread-171999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:10:14.578 [INFO] [Thread-171999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:10:14.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:10:14.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:10:15.456 [DEBUG] [Thread-171999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:10:15.456 [DEBUG] [Thread-171999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:10:15.503 [DEBUG] [Thread-171999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:10:15.504 [DEBUG] [Thread-171999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:10:15.512 [DEBUG] [Thread-171999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:10:15.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:10:15.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-04-11T15:10:15.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:10:15.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:10:15.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:10:15.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:10:15.545 [DEBUG] [Thread-171999] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:10:16.542 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:16.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:17.297 [DEBUG] [Thread-172001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:32.346 [DEBUG] [Thread-172002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:10:45.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:10:45.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-04-11T15:10:46.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 10, 23), 0.088285, 99.7108, 0.0, 7.48188, 14.2231, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:10:46.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:10:23
2026-04-11T15:10:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:10:47.387 [DEBUG] [Thread-172003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:10:47.404 [DEBUG] [Thread-172004] [transport.py] [_log()] starting thread (client mode): 0xb39c6830
2026-04-11T15:10:47.404 [DEBUG] [Thread-172004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:10:47.424 [DEBUG] [Thread-172004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:10:47.424 [INFO] [Thread-172004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] client lang: <none>
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] server lang: <none>
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] kex follows: False
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:10:47.426 [DEBUG] [Thread-172004] [transport.py] [_log()] Compression: none
2026-04-11T15:10:47.427 [DEBUG] [Thread-172004] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:10:47.444 [DEBUG] [Thread-172004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:10:47.445 [DEBUG] [Thread-172004] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:10:47.445 [DEBUG] [Thread-172004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:10:47.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:10:47.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:10:47.448 [DEBUG] [Thread-172004] [transport.py] [_log()] userauth is OK
2026-04-11T15:10:47.448 [DEBUG] [Thread-172004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:10:47.448 [DEBUG] [Thread-172004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:10:47.448 [DEBUG] [Thread-172004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:10:47.448 [DEBUG] [Thread-172004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:10:47.472 [INFO] [Thread-172004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:10:47.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:10:48.250 [DEBUG] [Thread-172004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:10:48.251 [DEBUG] [Thread-172004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:10:48.251 [DEBUG] [Thread-172004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:10:48.292 [DEBUG] [Thread-172004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:10:48.292 [DEBUG] [Thread-172004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:10:48.295 [DEBUG] [Thread-172004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:10:48.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:10:48.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:10:48.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:10:48.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:10:48.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:10:48.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:10:48.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:10:48.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:10:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:10:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.548728 -999.00  +14.90  11.24     93  +13.80 1 3 1 3 1   888    0 0.85 -15.48 ----- 9.4 11.2 25.2 14.5 17.4 -0.9 17.3 -3.0 17.0 -0.1 17.2 -0.2
2026-04-11T15:10:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:10:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:10:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.548728
2026-04-11T15:10:48.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:10:48.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:10:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:10:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:10:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:10:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:10:23', tmtdew=0.088285, humidity=99.7108, cloud=0.0, wind=7.48188, temperature=14.2231, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:10:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:10:48.324 [DEBUG] [Thread-172004] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:10:48.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:10:48.417 [DEBUG] [Thread-172007] [transport.py] [_log()] starting thread (client mode): 0xae561540
2026-04-11T15:10:48.417 [DEBUG] [Thread-172007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:10:48.432 [DEBUG] [Thread-172007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:10:48.432 [INFO] [Thread-172007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:10:48.439 [DEBUG] [Thread-172007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:10:48.440 [DEBUG] [Thread-172007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] client lang: <none>
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] server lang: <none>
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] kex follows: False
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:10:48.441 [DEBUG] [Thread-172007] [transport.py] [_log()] Compression: none
2026-04-11T15:10:48.442 [DEBUG] [Thread-172007] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:10:48.500 [DEBUG] [Thread-172007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:10:48.501 [DEBUG] [Thread-172007] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:10:48.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:10:48.502 [DEBUG] [Thread-172007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:10:48.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:10:48.556 [DEBUG] [Thread-172007] [transport.py] [_log()] userauth is OK
2026-04-11T15:10:48.556 [DEBUG] [Thread-172007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:10:48.556 [DEBUG] [Thread-172007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:10:48.556 [DEBUG] [Thread-172007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:10:48.556 [DEBUG] [Thread-172007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:10:48.576 [INFO] [Thread-172007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:10:48.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:10:48.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:10:49.402 [DEBUG] [Thread-172007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:10:49.402 [DEBUG] [Thread-172007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:10:49.450 [DEBUG] [Thread-172007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:10:49.450 [DEBUG] [Thread-172007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:10:49.459 [DEBUG] [Thread-172007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:10:49.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:10:49.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:10:49.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:10:49.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:10:49.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:10:49.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:10:49.496 [DEBUG] [Thread-172007] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:11:02.420 [DEBUG] [Thread-172009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:12.307 [DEBUG] [Thread-172010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:16.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:16.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:17.473 [DEBUG] [Thread-172011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:11:19.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:11:19.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-04-11T15:11:20.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 10, 59), 0.077925, 99.7774, 0.0, 8.4006, 14.323, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:11:20.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:10:59
2026-04-11T15:11:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:11:21.385 [DEBUG] [Thread-172012] [transport.py] [_log()] starting thread (client mode): 0xae5e4460
2026-04-11T15:11:21.385 [DEBUG] [Thread-172012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:11:21.406 [DEBUG] [Thread-172012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:11:21.406 [INFO] [Thread-172012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:11:21.409 [DEBUG] [Thread-172012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] client lang: <none>
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] server lang: <none>
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] kex follows: False
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] Compression: none
2026-04-11T15:11:21.410 [DEBUG] [Thread-172012] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:11:21.426 [DEBUG] [Thread-172012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:11:21.427 [DEBUG] [Thread-172012] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:11:21.427 [DEBUG] [Thread-172012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:11:21.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:11:21.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:11:21.430 [DEBUG] [Thread-172012] [transport.py] [_log()] userauth is OK
2026-04-11T15:11:21.430 [DEBUG] [Thread-172012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:11:21.430 [DEBUG] [Thread-172012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:11:21.430 [DEBUG] [Thread-172012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:11:21.431 [DEBUG] [Thread-172012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:11:21.454 [INFO] [Thread-172012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:11:21.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:11:22.215 [DEBUG] [Thread-172012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:11:22.215 [DEBUG] [Thread-172012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:11:22.215 [DEBUG] [Thread-172012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:11:22.256 [DEBUG] [Thread-172012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:11:22.256 [DEBUG] [Thread-172012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:11:22.260 [DEBUG] [Thread-172012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:11:22.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:11:22.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:11:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:11:22.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:11:22.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:11:22.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:11:22.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:11:22.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:11:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:11:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.549075 -999.00  +14.80  13.06     93  +13.80 1 3 1 3 1   888    0 0.85 -15.89 ----- 15.1 13.1 42.2 14.3 17.4 -1.1 17.2 -3.4 17.0 -1.2 17.2 -0.3
2026-04-11T15:11:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:11:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:11:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.549075
2026-04-11T15:11:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:11:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:11:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:11:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:11:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:11:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:10:59', tmtdew=0.077925, humidity=99.7774, cloud=0.0, wind=8.4006, temperature=14.323, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:10:40.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:11:22.289 [DEBUG] [Thread-172012] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:11:22.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:11:22.382 [DEBUG] [Thread-172015] [transport.py] [_log()] starting thread (client mode): 0xa7950610
2026-04-11T15:11:22.382 [DEBUG] [Thread-172015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:11:22.399 [DEBUG] [Thread-172015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:11:22.399 [INFO] [Thread-172015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] client lang: <none>
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] server lang: <none>
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] kex follows: False
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:11:22.407 [DEBUG] [Thread-172015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:11:22.408 [DEBUG] [Thread-172015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:11:22.408 [DEBUG] [Thread-172015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:11:22.408 [DEBUG] [Thread-172015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:11:22.408 [DEBUG] [Thread-172015] [transport.py] [_log()] Compression: none
2026-04-11T15:11:22.408 [DEBUG] [Thread-172015] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:11:22.467 [DEBUG] [Thread-172015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:11:22.468 [DEBUG] [Thread-172015] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:11:22.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:11:22.469 [DEBUG] [Thread-172015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:11:22.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:11:22.523 [DEBUG] [Thread-172015] [transport.py] [_log()] userauth is OK
2026-04-11T15:11:22.524 [DEBUG] [Thread-172015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:11:22.524 [DEBUG] [Thread-172015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:11:22.524 [DEBUG] [Thread-172015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:11:22.524 [DEBUG] [Thread-172015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:11:22.542 [INFO] [Thread-172015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:11:22.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:11:22.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:11:23.387 [DEBUG] [Thread-172015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:11:23.388 [DEBUG] [Thread-172015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:11:23.436 [DEBUG] [Thread-172015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:11:23.436 [DEBUG] [Thread-172015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:11:23.445 [DEBUG] [Thread-172015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:11:23.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:11:23.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-04-11T15:11:23.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:11:23.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:11:23.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:11:23.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:11:23.482 [DEBUG] [Thread-172015] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:11:32.511 [DEBUG] [Thread-172017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:47.564 [DEBUG] [Thread-172018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:11:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:11:53.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:11:53.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-04-11T15:11:54.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 11, 34), 0.06093, 99.5219, 0.0, 8.32968, 14.7125, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:11:54.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:11:34
2026-04-11T15:11:55.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:11:55.390 [DEBUG] [Thread-172019] [transport.py] [_log()] starting thread (client mode): 0xb39c6170
2026-04-11T15:11:55.390 [DEBUG] [Thread-172019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:11:55.412 [DEBUG] [Thread-172019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:11:55.412 [INFO] [Thread-172019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:11:55.414 [DEBUG] [Thread-172019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:11:55.414 [DEBUG] [Thread-172019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:11:55.414 [DEBUG] [Thread-172019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:11:55.414 [DEBUG] [Thread-172019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:55.414 [DEBUG] [Thread-172019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:55.414 [DEBUG] [Thread-172019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] client lang: <none>
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] server lang: <none>
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] kex follows: False
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] Compression: none
2026-04-11T15:11:55.415 [DEBUG] [Thread-172019] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:11:55.428 [DEBUG] [Thread-172019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:11:55.429 [DEBUG] [Thread-172019] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:11:55.429 [DEBUG] [Thread-172019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:11:55.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:11:55.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:11:55.431 [DEBUG] [Thread-172019] [transport.py] [_log()] userauth is OK
2026-04-11T15:11:55.431 [DEBUG] [Thread-172019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:11:55.431 [DEBUG] [Thread-172019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:11:55.432 [DEBUG] [Thread-172019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:11:55.432 [DEBUG] [Thread-172019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:11:55.446 [INFO] [Thread-172019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:11:55.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:11:56.280 [DEBUG] [Thread-172019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:11:56.281 [DEBUG] [Thread-172019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:11:56.281 [DEBUG] [Thread-172019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:11:56.322 [DEBUG] [Thread-172019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:11:56.322 [DEBUG] [Thread-172019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:11:56.325 [DEBUG] [Thread-172019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:11:56.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:11:56.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:11:56.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:11:56.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:11:56.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:11:56.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:11:56.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:11:56.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:11:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:11:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.549422 -999.00  +14.70  10.45     93  +13.60 1 3 1 3 1   888    0 0.77 -18.32 ----- 9.4 10.4 42.8 12.8 17.3 -1.4 17.2 -3.1 16.8 -1.3 17.1 -0.1
2026-04-11T15:11:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:11:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:11:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.549422
2026-04-11T15:11:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:11:56.352 [DEBUG] [Thread-172019] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:11:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:11:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:11:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:11:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:11:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:11:34', tmtdew=0.06093, humidity=99.5219, cloud=0.0, wind=8.32968, temperature=14.7125, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:11:10.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:11:56.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:11:56.448 [DEBUG] [Thread-172022] [transport.py] [_log()] starting thread (client mode): 0xae508910
2026-04-11T15:11:56.448 [DEBUG] [Thread-172022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:11:56.463 [DEBUG] [Thread-172022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:11:56.463 [INFO] [Thread-172022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:11:56.470 [DEBUG] [Thread-172022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:11:56.470 [DEBUG] [Thread-172022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:11:56.470 [DEBUG] [Thread-172022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:11:56.470 [DEBUG] [Thread-172022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] client lang: <none>
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] server lang: <none>
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] kex follows: False
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] Compression: none
2026-04-11T15:11:56.471 [DEBUG] [Thread-172022] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:11:56.527 [DEBUG] [Thread-172022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:11:56.528 [DEBUG] [Thread-172022] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:11:56.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:11:56.529 [DEBUG] [Thread-172022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:11:56.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:11:56.583 [DEBUG] [Thread-172022] [transport.py] [_log()] userauth is OK
2026-04-11T15:11:56.583 [DEBUG] [Thread-172022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:11:56.584 [DEBUG] [Thread-172022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:11:56.584 [DEBUG] [Thread-172022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:11:56.584 [DEBUG] [Thread-172022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:11:56.602 [INFO] [Thread-172022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:11:56.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:11:56.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:11:57.418 [DEBUG] [Thread-172022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:11:57.419 [DEBUG] [Thread-172022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:11:57.467 [DEBUG] [Thread-172022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:11:57.467 [DEBUG] [Thread-172022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:11:57.477 [DEBUG] [Thread-172022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:11:57.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:11:57.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:11:57.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-04-11T15:11:57.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:11:57.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:11:57.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:11:57.513 [DEBUG] [Thread-172022] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:12:02.600 [DEBUG] [Thread-172024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:12:12.361 [DEBUG] [Thread-172025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:12:16.826 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:12:16.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:12:17.652 [DEBUG] [Thread-172026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:12:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:12:27.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:12:27.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-04-11T15:12:28.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 12, 10), 0.022715, 99.8107, 0.0, 8.91144, 14.3894, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:12:28.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:12:10
2026-04-11T15:12:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:12:29.340 [DEBUG] [Thread-172027] [transport.py] [_log()] starting thread (client mode): 0xb39c7e80
2026-04-11T15:12:29.340 [DEBUG] [Thread-172027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:12:29.363 [DEBUG] [Thread-172027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:12:29.363 [INFO] [Thread-172027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] client lang: <none>
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] server lang: <none>
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] kex follows: False
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] Compression: none
2026-04-11T15:12:29.365 [DEBUG] [Thread-172027] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:12:29.385 [DEBUG] [Thread-172027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:12:29.385 [DEBUG] [Thread-172027] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:12:29.386 [DEBUG] [Thread-172027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:12:29.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:12:29.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:12:29.387 [DEBUG] [Thread-172027] [transport.py] [_log()] userauth is OK
2026-04-11T15:12:29.388 [DEBUG] [Thread-172027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:12:29.388 [DEBUG] [Thread-172027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:12:29.388 [DEBUG] [Thread-172027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:12:29.388 [DEBUG] [Thread-172027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:12:29.409 [INFO] [Thread-172027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:12:29.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:12:30.231 [DEBUG] [Thread-172027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:12:30.232 [DEBUG] [Thread-172027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:12:30.232 [DEBUG] [Thread-172027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:12:30.272 [DEBUG] [Thread-172027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:12:30.273 [DEBUG] [Thread-172027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:12:30.275 [DEBUG] [Thread-172027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:12:30.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:12:30.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:12:30.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:12:30.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:12:30.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:12:30.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:12:30.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:12:30.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:12:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:12:30.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.549770 -999.00  +14.80   9.02     93  +13.80 1 3 1 3 1   888    0 0.65 -20.66 ----- 9.5 9.0 31.0 11.5 17.3 -0.8 17.2 -2.9 16.9 -0.6 17.1 -0.1
2026-04-11T15:12:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:12:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:12:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.549770
2026-04-11T15:12:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:12:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:12:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:12:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:12:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:12:30.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:12:10', tmtdew=0.022715, humidity=99.8107, cloud=0.0, wind=8.91144, temperature=14.3894, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:11:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:12:30.301 [DEBUG] [Thread-172027] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:12:30.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:12:30.401 [DEBUG] [Thread-172030] [transport.py] [_log()] starting thread (client mode): 0xae5e4f40
2026-04-11T15:12:30.401 [DEBUG] [Thread-172030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:12:30.416 [DEBUG] [Thread-172030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:12:30.416 [INFO] [Thread-172030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:12:30.423 [DEBUG] [Thread-172030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:12:30.423 [DEBUG] [Thread-172030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:12:30.423 [DEBUG] [Thread-172030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] client lang: <none>
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] server lang: <none>
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] kex follows: False
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] Compression: none
2026-04-11T15:12:30.424 [DEBUG] [Thread-172030] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:12:30.483 [DEBUG] [Thread-172030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:12:30.484 [DEBUG] [Thread-172030] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:12:30.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:12:30.484 [DEBUG] [Thread-172030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:12:30.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:12:30.539 [DEBUG] [Thread-172030] [transport.py] [_log()] userauth is OK
2026-04-11T15:12:30.539 [DEBUG] [Thread-172030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:12:30.539 [DEBUG] [Thread-172030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:12:30.539 [DEBUG] [Thread-172030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:12:30.539 [DEBUG] [Thread-172030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:12:30.553 [INFO] [Thread-172030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:12:30.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:12:30.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:12:31.388 [DEBUG] [Thread-172030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:12:31.388 [DEBUG] [Thread-172030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:12:31.436 [DEBUG] [Thread-172030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:12:31.436 [DEBUG] [Thread-172030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:12:31.446 [DEBUG] [Thread-172030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:12:31.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:12:31.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-04-11T15:12:31.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:12:31.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:12:31.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:12:31.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:12:31.483 [DEBUG] [Thread-172030] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:12:32.686 [DEBUG] [Thread-172032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:12:47.737 [DEBUG] [Thread-172033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:01.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:13:01.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:13:01.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-04-11T15:13:02.773 [DEBUG] [Thread-172034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:02.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 12, 45), 0.06101, 99.5214, 0.0, 9.42336, 14.7453, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:13:02.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:12:45
2026-04-11T15:13:03.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:13:03.355 [DEBUG] [Thread-172035] [transport.py] [_log()] starting thread (client mode): 0xae50af20
2026-04-11T15:13:03.355 [DEBUG] [Thread-172035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:13:03.375 [DEBUG] [Thread-172035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:13:03.375 [INFO] [Thread-172035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] client lang: <none>
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] server lang: <none>
2026-04-11T15:13:03.378 [DEBUG] [Thread-172035] [transport.py] [_log()] kex follows: False
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] Compression: none
2026-04-11T15:13:03.379 [DEBUG] [Thread-172035] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:13:03.391 [DEBUG] [Thread-172035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:13:03.392 [DEBUG] [Thread-172035] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:13:03.392 [DEBUG] [Thread-172035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:13:03.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:13:03.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:13:03.394 [DEBUG] [Thread-172035] [transport.py] [_log()] userauth is OK
2026-04-11T15:13:03.394 [DEBUG] [Thread-172035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:13:03.394 [DEBUG] [Thread-172035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:13:03.394 [DEBUG] [Thread-172035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:13:03.394 [DEBUG] [Thread-172035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:13:03.408 [INFO] [Thread-172035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:13:03.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:13:04.254 [DEBUG] [Thread-172035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:13:04.254 [DEBUG] [Thread-172035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:13:04.255 [DEBUG] [Thread-172035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:13:04.295 [DEBUG] [Thread-172035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:13:04.295 [DEBUG] [Thread-172035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:13:04.299 [DEBUG] [Thread-172035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:13:04.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:13:04.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:13:04.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:13:04.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:13:04.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:13:04.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:13:04.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:13:04.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:13:04.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:13:04.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.550464 -999.00  +14.80  12.19     93  +13.80 1 3 1 3 1   888    0 0.57 -23.85 ----- 12.5 12.2 30.0 13.2 17.3 -1.0 17.2 -3.1 16.9 -0.7 17.1 -0.0
2026-04-11T15:13:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:13:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:13:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.550464
2026-04-11T15:13:04.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:13:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:13:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:13:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:13:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:13:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:12:45', tmtdew=0.06101, humidity=99.5214, cloud=0.0, wind=9.42336, temperature=14.7453, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:12:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:13:04.328 [DEBUG] [Thread-172035] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:13:04.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:13:12.410 [DEBUG] [Thread-172038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:16.968 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:16.968 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:17.811 [DEBUG] [Thread-172039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:32.859 [DEBUG] [Thread-172040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:13:47.895 [DEBUG] [Thread-172041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:02.930 [DEBUG] [Thread-172042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:12.463 [DEBUG] [Thread-172043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:17.109 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:17.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:17.969 [DEBUG] [Thread-172044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:33.006 [DEBUG] [Thread-172045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:14:48.037 [DEBUG] [Thread-172046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:03.072 [DEBUG] [Thread-172047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:12.517 [DEBUG] [Thread-172048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:15.967 [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-04-11T15:15:17.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:17.252 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:18.112 [DEBUG] [Thread-172049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:33.145 [DEBUG] [Thread-172050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:45.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:15:45.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:15:45.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-04-11T15:15:47.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 15, 7), 0.02538, 99.7935, 0.0, 8.75268, 14.4387, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:15:47.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:15:07
2026-04-11T15:15:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:15:47.866 [DEBUG] [Thread-172051] [transport.py] [_log()] starting thread (client mode): 0xa79506d0
2026-04-11T15:15:47.866 [DEBUG] [Thread-172051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:15:47.887 [DEBUG] [Thread-172051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:15:47.887 [INFO] [Thread-172051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:15:47.889 [DEBUG] [Thread-172051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:15:47.889 [DEBUG] [Thread-172051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:15:47.889 [DEBUG] [Thread-172051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:15:47.889 [DEBUG] [Thread-172051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] client lang: <none>
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] server lang: <none>
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] kex follows: False
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] Compression: none
2026-04-11T15:15:47.890 [DEBUG] [Thread-172051] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:15:47.906 [DEBUG] [Thread-172051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:15:47.907 [DEBUG] [Thread-172051] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:15:47.907 [DEBUG] [Thread-172051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:15:47.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:15:47.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:15:47.909 [DEBUG] [Thread-172051] [transport.py] [_log()] userauth is OK
2026-04-11T15:15:47.909 [DEBUG] [Thread-172051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:15:47.910 [DEBUG] [Thread-172051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:15:47.910 [DEBUG] [Thread-172051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:15:47.910 [DEBUG] [Thread-172051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:15:47.934 [INFO] [Thread-172051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:15:47.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:15:48.182 [DEBUG] [Thread-172053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:15:48.745 [DEBUG] [Thread-172051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:15:48.745 [DEBUG] [Thread-172051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:15:48.745 [DEBUG] [Thread-172051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:15:48.786 [DEBUG] [Thread-172051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:15:48.786 [DEBUG] [Thread-172051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:15:48.789 [DEBUG] [Thread-172051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:15:48.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:15:48.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:15:48.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:15:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:15:48.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:15:48.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:15:48.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:15:48.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:15:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:15:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.552200 -999.00  +14.70  10.14     93  +13.70 1 3 1 3 1   888    0 0.49 -25.45 ----- 11.3 10.1 46.0 15.3 17.2 -0.6 17.1 -3.4 16.7 -0.8 17.0 0.0
2026-04-11T15:15:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:15:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:15:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.552200
2026-04-11T15:15:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:15:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:15:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:15:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:15:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:15:48.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:15:07', tmtdew=0.02538, humidity=99.7935, cloud=0.0, wind=8.75268, temperature=14.4387, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:15:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:15:48.814 [DEBUG] [Thread-172051] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:15:48.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:15:48.911 [DEBUG] [Thread-172055] [transport.py] [_log()] starting thread (client mode): 0xae537c40
2026-04-11T15:15:48.911 [DEBUG] [Thread-172055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:15:48.926 [DEBUG] [Thread-172055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:15:48.926 [INFO] [Thread-172055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:15:48.934 [DEBUG] [Thread-172055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:15:48.934 [DEBUG] [Thread-172055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:15:48.934 [DEBUG] [Thread-172055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:15:48.934 [DEBUG] [Thread-172055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] client lang: <none>
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] server lang: <none>
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] kex follows: False
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] Compression: none
2026-04-11T15:15:48.935 [DEBUG] [Thread-172055] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:15:48.993 [DEBUG] [Thread-172055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:15:48.994 [DEBUG] [Thread-172055] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:15:48.994 [DEBUG] [Thread-172055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:15:48.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:15:48.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:15:49.049 [DEBUG] [Thread-172055] [transport.py] [_log()] userauth is OK
2026-04-11T15:15:49.050 [DEBUG] [Thread-172055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:15:49.050 [DEBUG] [Thread-172055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:15:49.050 [DEBUG] [Thread-172055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:15:49.050 [DEBUG] [Thread-172055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:15:49.071 [INFO] [Thread-172055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:15:49.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:15:49.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:15:49.937 [DEBUG] [Thread-172055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:15:49.938 [DEBUG] [Thread-172055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:15:49.985 [DEBUG] [Thread-172055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:15:49.985 [DEBUG] [Thread-172055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:15:49.995 [DEBUG] [Thread-172055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:15:50.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:15:50.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:15:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:15:50.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:15:50.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:15:50.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:15:50.032 [DEBUG] [Thread-172055] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:16:03.221 [DEBUG] [Thread-172057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:12.572 [DEBUG] [Thread-172058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:17.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:17.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:18.286 [DEBUG] [Thread-172059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:20.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:16:20.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:16:20.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-04-11T15:16:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 15, 42), 0.05077, 99.587, 0.0, 11.7166, 14.8442, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:16:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:15:42
2026-04-11T15:16:21.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:16:21.907 [DEBUG] [Thread-172060] [transport.py] [_log()] starting thread (client mode): 0xa79538e0
2026-04-11T15:16:21.907 [DEBUG] [Thread-172060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:16:21.929 [DEBUG] [Thread-172060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:16:21.929 [INFO] [Thread-172060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] client lang: <none>
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] server lang: <none>
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] kex follows: False
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:16:21.932 [DEBUG] [Thread-172060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:16:21.933 [DEBUG] [Thread-172060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:16:21.933 [DEBUG] [Thread-172060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:16:21.933 [DEBUG] [Thread-172060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:16:21.933 [DEBUG] [Thread-172060] [transport.py] [_log()] Compression: none
2026-04-11T15:16:21.933 [DEBUG] [Thread-172060] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:16:21.949 [DEBUG] [Thread-172060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:16:21.950 [DEBUG] [Thread-172060] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:16:21.950 [DEBUG] [Thread-172060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:16:21.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:16:21.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:16:21.953 [DEBUG] [Thread-172060] [transport.py] [_log()] userauth is OK
2026-04-11T15:16:21.953 [DEBUG] [Thread-172060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:16:21.954 [DEBUG] [Thread-172060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:16:21.954 [DEBUG] [Thread-172060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:16:21.954 [DEBUG] [Thread-172060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:16:21.977 [INFO] [Thread-172060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:16:21.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:16:22.749 [DEBUG] [Thread-172060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:16:22.749 [DEBUG] [Thread-172060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:16:22.749 [DEBUG] [Thread-172060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:16:22.790 [DEBUG] [Thread-172060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:16:22.790 [DEBUG] [Thread-172060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:16:22.793 [DEBUG] [Thread-172060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:16:22.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:16:22.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:16:22.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:16:22.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:16:22.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:16:22.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:16:22.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:16:22.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:16:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:16:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.552547 -999.00  +14.80   9.86     93  +13.80 1 3 1 3 1   888    0 0.42 -27.45 ----- 7.9 9.9 21.0 12.2 17.2 -0.7 17.1 -3.6 16.7 -0.3 17.0 -0.1
2026-04-11T15:16:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:16:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:16:22.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.552547
2026-04-11T15:16:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:16:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:16:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:16:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:16:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:16:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:15:42', tmtdew=0.05077, humidity=99.587, cloud=0.0, wind=11.7166, temperature=14.8442, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:15:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:16:22.820 [DEBUG] [Thread-172060] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:16: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-04-11T15:16:22.915 [DEBUG] [Thread-172063] [transport.py] [_log()] starting thread (client mode): 0xae5350f0
2026-04-11T15:16:22.916 [DEBUG] [Thread-172063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:16:22.933 [DEBUG] [Thread-172063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:16:22.933 [INFO] [Thread-172063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:16:22.941 [DEBUG] [Thread-172063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:16:22.941 [DEBUG] [Thread-172063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:16:22.941 [DEBUG] [Thread-172063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] client lang: <none>
2026-04-11T15:16:22.942 [DEBUG] [Thread-172063] [transport.py] [_log()] server lang: <none>
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] kex follows: False
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] Compression: none
2026-04-11T15:16:22.943 [DEBUG] [Thread-172063] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:16:22.999 [DEBUG] [Thread-172063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:16:23.000 [DEBUG] [Thread-172063] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:16:23.001 [DEBUG] [Thread-172063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:16:23.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:16:23.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:16:23.055 [DEBUG] [Thread-172063] [transport.py] [_log()] userauth is OK
2026-04-11T15:16:23.056 [DEBUG] [Thread-172063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:16:23.056 [DEBUG] [Thread-172063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:16:23.056 [DEBUG] [Thread-172063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:16:23.056 [DEBUG] [Thread-172063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:16:23.075 [INFO] [Thread-172063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:16:23.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:16:23.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:16:23.900 [DEBUG] [Thread-172063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:16:23.901 [DEBUG] [Thread-172063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:16:23.948 [DEBUG] [Thread-172063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:16:23.948 [DEBUG] [Thread-172063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:16:23.957 [DEBUG] [Thread-172063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:16:23.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:16:23.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:16:23.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-04-11T15:16:23.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:16:23.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:16:23.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:16:23.997 [DEBUG] [Thread-172063] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:16:33.326 [DEBUG] [Thread-172065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:48.382 [DEBUG] [Thread-172066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:16:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:16:53.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:16:54.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-04-11T15:16:55.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 16, 20), 0.080585, 99.7602, 0.0, 12.5644, 14.3389, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:16:55.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:16:20
2026-04-11T15:16:55.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:16:55.802 [DEBUG] [Thread-172067] [transport.py] [_log()] starting thread (client mode): 0xa7952a70
2026-04-11T15:16:55.803 [DEBUG] [Thread-172067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:16:55.822 [DEBUG] [Thread-172067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:16:55.822 [INFO] [Thread-172067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:55.825 [DEBUG] [Thread-172067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] client lang: <none>
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] server lang: <none>
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] kex follows: False
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] Compression: none
2026-04-11T15:16:55.826 [DEBUG] [Thread-172067] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:16:55.844 [DEBUG] [Thread-172067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:16:55.844 [DEBUG] [Thread-172067] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:16:55.845 [DEBUG] [Thread-172067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:16:55.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:16:55.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:16:55.847 [DEBUG] [Thread-172067] [transport.py] [_log()] userauth is OK
2026-04-11T15:16:55.847 [DEBUG] [Thread-172067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:16:55.847 [DEBUG] [Thread-172067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:16:55.847 [DEBUG] [Thread-172067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:16:55.847 [DEBUG] [Thread-172067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:16:55.864 [INFO] [Thread-172067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:16:55.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:16:56.654 [DEBUG] [Thread-172067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:16:56.654 [DEBUG] [Thread-172067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:16:56.654 [DEBUG] [Thread-172067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:16:56.695 [DEBUG] [Thread-172067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:16:56.695 [DEBUG] [Thread-172067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:16:56.699 [DEBUG] [Thread-172067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:16:56.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:16:56.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:16:56.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:16:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:16:56.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:16:56.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:16:56.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:16:56.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:16:56.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:16:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.552895 -999.00  +14.80   8.58     93  +13.90 1 3 1 3 1   888    0 0.38 -28.94 ----- 11.7 8.6 28.6 14.4 17.2 -0.8 17.1 -3.1 16.7 -0.7 17.0 -0.1
2026-04-11T15:16:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:16:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:16:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.552895
2026-04-11T15:16:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:16:56.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:16:56.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:16:56.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:16:56.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:16:56.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:16:20', tmtdew=0.080585, humidity=99.7602, cloud=0.0, wind=12.5644, temperature=14.3389, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:16:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:16:56.726 [DEBUG] [Thread-172067] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:16:56.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:16:56.819 [DEBUG] [Thread-172070] [transport.py] [_log()] starting thread (client mode): 0xb39c7940
2026-04-11T15:16:56.820 [DEBUG] [Thread-172070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:16:56.835 [DEBUG] [Thread-172070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:16:56.835 [INFO] [Thread-172070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:16:56.842 [DEBUG] [Thread-172070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] client lang: <none>
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] server lang: <none>
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] kex follows: False
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] Compression: none
2026-04-11T15:16:56.843 [DEBUG] [Thread-172070] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:16:56.902 [DEBUG] [Thread-172070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:16:56.902 [DEBUG] [Thread-172070] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:16:56.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:16:56.903 [DEBUG] [Thread-172070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:16:56.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:16:56.957 [DEBUG] [Thread-172070] [transport.py] [_log()] userauth is OK
2026-04-11T15:16:56.957 [DEBUG] [Thread-172070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:16:56.957 [DEBUG] [Thread-172070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:16:56.957 [DEBUG] [Thread-172070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:16:56.957 [DEBUG] [Thread-172070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:16:56.971 [INFO] [Thread-172070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:16:56.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:16:56.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:16:57.794 [DEBUG] [Thread-172070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:16:57.794 [DEBUG] [Thread-172070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:16:57.843 [DEBUG] [Thread-172070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:16:57.844 [DEBUG] [Thread-172070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:16:57.852 [DEBUG] [Thread-172070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:16:57.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:16:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:16: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-04-11T15:16:57.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:16:57.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:16:57.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:16:57.885 [DEBUG] [Thread-172070] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:17:03.419 [DEBUG] [Thread-172072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:17:12.624 [DEBUG] [Thread-172073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:17:17.543 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:17:17.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:17:18.474 [DEBUG] [Thread-172074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:17:27.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:17:27.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:17:27.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-04-11T15:17:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 16, 56), 0.080585, 99.7602, 0.0, 9.05256, 14.3889, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:17:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:16:56
2026-04-11T15:17:29.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:17:29.740 [DEBUG] [Thread-172075] [transport.py] [_log()] starting thread (client mode): 0xae5a6440
2026-04-11T15:17:29.740 [DEBUG] [Thread-172075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:17:29.762 [DEBUG] [Thread-172075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:17:29.762 [INFO] [Thread-172075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:17:29.766 [DEBUG] [Thread-172075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:17:29.766 [DEBUG] [Thread-172075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:17:29.766 [DEBUG] [Thread-172075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:17:29.766 [DEBUG] [Thread-172075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:17:29.766 [DEBUG] [Thread-172075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] client lang: <none>
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] server lang: <none>
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] kex follows: False
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:17:29.767 [DEBUG] [Thread-172075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:17:29.768 [DEBUG] [Thread-172075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:17:29.768 [DEBUG] [Thread-172075] [transport.py] [_log()] Compression: none
2026-04-11T15:17:29.768 [DEBUG] [Thread-172075] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:17:29.784 [DEBUG] [Thread-172075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:17:29.785 [DEBUG] [Thread-172075] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:17:29.785 [DEBUG] [Thread-172075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:17:29.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:17:29.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:17:29.787 [DEBUG] [Thread-172075] [transport.py] [_log()] userauth is OK
2026-04-11T15:17:29.787 [DEBUG] [Thread-172075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:17:29.787 [DEBUG] [Thread-172075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:17:29.788 [DEBUG] [Thread-172075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:17:29.788 [DEBUG] [Thread-172075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:17:29.822 [INFO] [Thread-172075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:17:29.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:17:30.596 [DEBUG] [Thread-172075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:17:30.596 [DEBUG] [Thread-172075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:17:30.596 [DEBUG] [Thread-172075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:17:30.637 [DEBUG] [Thread-172075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:17:30.637 [DEBUG] [Thread-172075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:17:30.641 [DEBUG] [Thread-172075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:17:30.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:17:30.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:17:30.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:17:30.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:17:30.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:17:30.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:17:30.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:17:30.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:17:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:17:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.553242 -999.00  +14.70  15.18     93  +13.60 1 3 1 3 1   888    0 0.29 -31.50 ----- 13.1 15.2 40.4 17.1 17.2 -1.0 17.1 -3.5 16.7 -1.4 17.0 -0.3
2026-04-11T15:17:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:17:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:17:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.553242
2026-04-11T15:17:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:17:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:17:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:17:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:17:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:17:30.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:16:56', tmtdew=0.080585, humidity=99.7602, cloud=0.0, wind=9.05256, temperature=14.3889, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:16:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:17:30.666 [DEBUG] [Thread-172075] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:17:30.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:17:30.759 [DEBUG] [Thread-172078] [transport.py] [_log()] starting thread (client mode): 0xae5a4310
2026-04-11T15:17:30.759 [DEBUG] [Thread-172078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:17:30.777 [DEBUG] [Thread-172078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:17:30.777 [INFO] [Thread-172078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:17:30.784 [DEBUG] [Thread-172078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:17:30.784 [DEBUG] [Thread-172078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:17:30.784 [DEBUG] [Thread-172078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:17:30.784 [DEBUG] [Thread-172078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:17:30.784 [DEBUG] [Thread-172078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:17:30.784 [DEBUG] [Thread-172078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] client lang: <none>
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] server lang: <none>
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] kex follows: False
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] Compression: none
2026-04-11T15:17:30.785 [DEBUG] [Thread-172078] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:17:30.848 [DEBUG] [Thread-172078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:17:30.849 [DEBUG] [Thread-172078] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:17:30.849 [DEBUG] [Thread-172078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:17:30.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:17:30.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:17:30.914 [DEBUG] [Thread-172078] [transport.py] [_log()] userauth is OK
2026-04-11T15:17:30.914 [DEBUG] [Thread-172078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:17:30.914 [DEBUG] [Thread-172078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:17:30.914 [DEBUG] [Thread-172078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:17:30.914 [DEBUG] [Thread-172078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:17:30.934 [INFO] [Thread-172078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:17:30.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:17:30.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:17:31.817 [DEBUG] [Thread-172078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:17:31.817 [DEBUG] [Thread-172078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:17:31.867 [DEBUG] [Thread-172078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:17:31.867 [DEBUG] [Thread-172078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:17:31.879 [DEBUG] [Thread-172078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:17:31.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:17:31.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:17: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') -> 00000000
2026-04-11T15:17:31.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:17:31.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:17:31.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:17:31.920 [DEBUG] [Thread-172078] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:17:33.512 [DEBUG] [Thread-172080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:17:48.566 [DEBUG] [Thread-172081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:01.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:18:01.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:18:01.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-04-11T15:18:03.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 17, 31), 0.090945, 99.6938, 0.0, 10.746, 14.2396, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:18:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:17:31
2026-04-11T15:18:03.604 [DEBUG] [Thread-172082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:18:03.814 [DEBUG] [Thread-172083] [transport.py] [_log()] starting thread (client mode): 0xae5e48b0
2026-04-11T15:18:03.814 [DEBUG] [Thread-172083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:18:03.832 [DEBUG] [Thread-172083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:18:03.833 [INFO] [Thread-172083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] client lang: <none>
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] server lang: <none>
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] kex follows: False
2026-04-11T15:18:03.836 [DEBUG] [Thread-172083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:18:03.837 [DEBUG] [Thread-172083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:18:03.837 [DEBUG] [Thread-172083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:18:03.837 [DEBUG] [Thread-172083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:18:03.837 [DEBUG] [Thread-172083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:18:03.837 [DEBUG] [Thread-172083] [transport.py] [_log()] Compression: none
2026-04-11T15:18:03.837 [DEBUG] [Thread-172083] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:18:03.853 [DEBUG] [Thread-172083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:18:03.853 [DEBUG] [Thread-172083] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:18:03.854 [DEBUG] [Thread-172083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:18:03.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:18:03.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:18:03.856 [DEBUG] [Thread-172083] [transport.py] [_log()] userauth is OK
2026-04-11T15:18:03.856 [DEBUG] [Thread-172083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:18:03.856 [DEBUG] [Thread-172083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:18:03.856 [DEBUG] [Thread-172083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:18:03.857 [DEBUG] [Thread-172083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:18:03.882 [INFO] [Thread-172083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:18:03.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:18:04.660 [DEBUG] [Thread-172083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:18:04.660 [DEBUG] [Thread-172083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:18:04.661 [DEBUG] [Thread-172083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:18:04.701 [DEBUG] [Thread-172083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:18:04.701 [DEBUG] [Thread-172083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:18:04.705 [DEBUG] [Thread-172083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:18:04.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:18:04.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:18:04.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:18:04.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:18:04.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:18:04.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:18:04.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:18:04.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.553936 -999.00  +14.70   9.46     93  +13.70 1 3 1 3 1   888    0 0.12 -36.22 ----- 9.9 9.5 52.6 13.1 17.1 -1.0 17.0 -2.9 16.6 -0.4 16.9 -0.2
2026-04-11T15:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:18:04.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.553936
2026-04-11T15:18:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:18:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:18:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:18:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:18:04.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:18:04.731 [DEBUG] [Thread-172083] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:18:04.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:17:31', tmtdew=0.090945, humidity=99.6938, cloud=0.0, wind=10.746, temperature=14.2396, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:17:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:18:04.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:18:04.824 [DEBUG] [Thread-172086] [transport.py] [_log()] starting thread (client mode): 0xae5e4490
2026-04-11T15:18:04.824 [DEBUG] [Thread-172086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:18:04.839 [DEBUG] [Thread-172086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:18:04.839 [INFO] [Thread-172086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:18:04.847 [DEBUG] [Thread-172086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:18:04.847 [DEBUG] [Thread-172086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:18:04.847 [DEBUG] [Thread-172086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:18:04.847 [DEBUG] [Thread-172086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:04.847 [DEBUG] [Thread-172086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:04.847 [DEBUG] [Thread-172086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] client lang: <none>
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] server lang: <none>
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] kex follows: False
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] Compression: none
2026-04-11T15:18:04.848 [DEBUG] [Thread-172086] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:18:04.906 [DEBUG] [Thread-172086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:18:04.907 [DEBUG] [Thread-172086] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:18:04.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:18:04.908 [DEBUG] [Thread-172086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:18:04.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:18:04.965 [DEBUG] [Thread-172086] [transport.py] [_log()] userauth is OK
2026-04-11T15:18:04.965 [DEBUG] [Thread-172086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:18:04.965 [DEBUG] [Thread-172086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:18:04.966 [DEBUG] [Thread-172086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:18:04.966 [DEBUG] [Thread-172086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:18:04.984 [INFO] [Thread-172086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:18:04.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:18:04.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:18:05.793 [DEBUG] [Thread-172086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:18:05.793 [DEBUG] [Thread-172086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:18:05.841 [DEBUG] [Thread-172086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:18:05.841 [DEBUG] [Thread-172086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:18:05.850 [DEBUG] [Thread-172086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:18:05.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:18:05.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-04-11T15:18:05.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-04-11T15:18:05.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:18:05.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:18:05.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:18:05.889 [DEBUG] [Thread-172086] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:18:12.677 [DEBUG] [Thread-172088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:17.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:17.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:18.641 [DEBUG] [Thread-172089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:33.693 [DEBUG] [Thread-172090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:18:35.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:18:35.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:18:35.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-04-11T15:18:37.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 18, 6), 0.083225, 99.7434, 0.0, 9.96984, 14.223, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:18:37.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:18:06
2026-04-11T15:18:37.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:18:37.702 [DEBUG] [Thread-172091] [transport.py] [_log()] starting thread (client mode): 0xae5e6c20
2026-04-11T15:18:37.702 [DEBUG] [Thread-172091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:18:37.722 [DEBUG] [Thread-172091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:18:37.722 [INFO] [Thread-172091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] client lang: <none>
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] server lang: <none>
2026-04-11T15:18:37.725 [DEBUG] [Thread-172091] [transport.py] [_log()] kex follows: False
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] Compression: none
2026-04-11T15:18:37.726 [DEBUG] [Thread-172091] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:18:37.745 [DEBUG] [Thread-172091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:18:37.745 [DEBUG] [Thread-172091] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:18:37.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:18:37.746 [DEBUG] [Thread-172091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:18:37.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:18:37.748 [DEBUG] [Thread-172091] [transport.py] [_log()] userauth is OK
2026-04-11T15:18:37.748 [DEBUG] [Thread-172091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:18:37.748 [DEBUG] [Thread-172091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:18:37.748 [DEBUG] [Thread-172091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:18:37.748 [DEBUG] [Thread-172091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:18:37.765 [INFO] [Thread-172091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:18:37.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:18:38.484 [DEBUG] [Thread-172091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:18:38.484 [DEBUG] [Thread-172091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:18:38.485 [DEBUG] [Thread-172091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:18:38.525 [DEBUG] [Thread-172091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:18:38.525 [DEBUG] [Thread-172091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:18:38.529 [DEBUG] [Thread-172091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:18:38.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:18:38.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:18:38.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:18:38.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:18:38.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:18:38.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:18:38.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:18:38.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:18:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:18:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.554283 -999.00  +14.80   8.81     93  +13.80 1 3 1 3 1   888    0 0.11 -36.25 ----- 8.6 8.8 34.0 12.7 17.1 -0.7 17.0 -2.8 16.6 -0.8 16.9 -0.2
2026-04-11T15:18:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:18:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:18:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.554283
2026-04-11T15:18:38.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:18:38.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:18:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:18:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:18:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:18:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:18:06', tmtdew=0.083225, humidity=99.7434, cloud=0.0, wind=9.96984, temperature=14.223, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:18:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:18:38.555 [DEBUG] [Thread-172091] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:18:38.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:18:38.649 [DEBUG] [Thread-172094] [transport.py] [_log()] starting thread (client mode): 0xae5e7310
2026-04-11T15:18:38.649 [DEBUG] [Thread-172094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:18:38.664 [DEBUG] [Thread-172094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:18:38.664 [INFO] [Thread-172094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] client lang: <none>
2026-04-11T15:18:38.672 [DEBUG] [Thread-172094] [transport.py] [_log()] server lang: <none>
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] kex follows: False
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] Compression: none
2026-04-11T15:18:38.673 [DEBUG] [Thread-172094] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:18:38.730 [DEBUG] [Thread-172094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:18:38.731 [DEBUG] [Thread-172094] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:18:38.731 [DEBUG] [Thread-172094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:18:38.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:18:38.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:18:38.786 [DEBUG] [Thread-172094] [transport.py] [_log()] userauth is OK
2026-04-11T15:18:38.787 [DEBUG] [Thread-172094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:18:38.787 [DEBUG] [Thread-172094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:18:38.787 [DEBUG] [Thread-172094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:18:38.787 [DEBUG] [Thread-172094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:18:38.806 [INFO] [Thread-172094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:18:38.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:18:38.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:18:39.609 [DEBUG] [Thread-172094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:18:39.610 [DEBUG] [Thread-172094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:18:39.658 [DEBUG] [Thread-172094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:18:39.658 [DEBUG] [Thread-172094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:18:39.667 [DEBUG] [Thread-172094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:18:39.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:18: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')
2026-04-11T15:18:39.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:18:39.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:18:39.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:18:39.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:18:39.705 [DEBUG] [Thread-172094] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:18:48.729 [DEBUG] [Thread-172096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:03.777 [DEBUG] [Thread-172097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:19:09.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:19:09.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-04-11T15:19:10.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 18, 42), 0.07159, 99.4537, 0.0, 10.9404, 14.5123, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:19:10.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:18:42
2026-04-11T15:19:11.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:19:11.499 [DEBUG] [Thread-172098] [transport.py] [_log()] starting thread (client mode): 0xae5a5780
2026-04-11T15:19:11.499 [DEBUG] [Thread-172098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:19:11.520 [DEBUG] [Thread-172098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:19:11.520 [INFO] [Thread-172098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:19:11.523 [DEBUG] [Thread-172098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] client lang: <none>
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] server lang: <none>
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] kex follows: False
2026-04-11T15:19:11.524 [DEBUG] [Thread-172098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:19:11.525 [DEBUG] [Thread-172098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:19:11.525 [DEBUG] [Thread-172098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:19:11.525 [DEBUG] [Thread-172098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:19:11.525 [DEBUG] [Thread-172098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:19:11.525 [DEBUG] [Thread-172098] [transport.py] [_log()] Compression: none
2026-04-11T15:19:11.525 [DEBUG] [Thread-172098] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:19:11.542 [DEBUG] [Thread-172098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:19:11.543 [DEBUG] [Thread-172098] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:19:11.543 [DEBUG] [Thread-172098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:19:11.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:19:11.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:19:11.545 [DEBUG] [Thread-172098] [transport.py] [_log()] userauth is OK
2026-04-11T15:19:11.546 [DEBUG] [Thread-172098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:19:11.546 [DEBUG] [Thread-172098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:19:11.546 [DEBUG] [Thread-172098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:19:11.546 [DEBUG] [Thread-172098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:19:11.570 [INFO] [Thread-172098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:19:11.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:19:12.406 [DEBUG] [Thread-172098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:19:12.407 [DEBUG] [Thread-172098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:19:12.407 [DEBUG] [Thread-172098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:19:12.448 [DEBUG] [Thread-172098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:19:12.448 [DEBUG] [Thread-172098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:19:12.451 [DEBUG] [Thread-172098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:19:12.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:19:12.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:19:12.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:19:12.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:19:12.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:19:12.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:19:12.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:19:12.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:19:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:19:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.554631 -999.00  +14.90  10.52     94  +13.90 1 3 1 3 1   888    0 0.17 -34.76 ----- 14.4 10.5 40.0 16.2 17.1 -0.9 17.0 -2.9 16.6 -0.5 16.9 -0.1
2026-04-11T15:19:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:19:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:19:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.554631
2026-04-11T15:19:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:19:12.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:19:12.481 [DEBUG] [Thread-172098] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:19:12.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:19:12.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:19:12.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:19:12.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:18:42', tmtdew=0.07159, humidity=99.4537, cloud=0.0, wind=10.9404, temperature=14.5123, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:18:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:19:12.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:19:12.574 [DEBUG] [Thread-172101] [transport.py] [_log()] starting thread (client mode): 0xae5a5c30
2026-04-11T15:19:12.574 [DEBUG] [Thread-172101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:19:12.589 [DEBUG] [Thread-172101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:19:12.589 [INFO] [Thread-172101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:19:12.596 [DEBUG] [Thread-172101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] client lang: <none>
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] server lang: <none>
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] kex follows: False
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] Compression: none
2026-04-11T15:19:12.597 [DEBUG] [Thread-172101] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:19:12.656 [DEBUG] [Thread-172101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:19:12.657 [DEBUG] [Thread-172101] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:19:12.657 [DEBUG] [Thread-172101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:19:12.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:19:12.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:19:12.726 [DEBUG] [Thread-172103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:12.781 [DEBUG] [Thread-172101] [transport.py] [_log()] userauth is OK
2026-04-11T15:19:12.781 [DEBUG] [Thread-172101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:19:12.781 [DEBUG] [Thread-172101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:19:12.781 [DEBUG] [Thread-172101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:19:12.782 [DEBUG] [Thread-172101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:19:12.805 [INFO] [Thread-172101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:19:12.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:19:12.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:19:13.616 [DEBUG] [Thread-172101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:19:13.617 [DEBUG] [Thread-172101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:19:13.665 [DEBUG] [Thread-172101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:19:13.665 [DEBUG] [Thread-172101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:19:13.674 [DEBUG] [Thread-172101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:19:13.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:19:13.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:19:13.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-04-11T15:19:13.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:19:13.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:19:13.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:19:13.710 [DEBUG] [Thread-172101] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:19:17.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:17.825 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:18.813 [DEBUG] [Thread-172104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:33.865 [DEBUG] [Thread-172105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:19:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:19:43.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:19:43.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-04-11T15:19:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 19, 17), 0.088375, 99.7103, 0.0, 8.22276, 14.3061, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:19:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:19:17
2026-04-11T15:19:45.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:19:45.510 [DEBUG] [Thread-172106] [transport.py] [_log()] starting thread (client mode): 0xa7953190
2026-04-11T15:19:45.510 [DEBUG] [Thread-172106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:19:45.522 [DEBUG] [Thread-172106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:19:45.522 [INFO] [Thread-172106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] client lang: <none>
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] server lang: <none>
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] kex follows: False
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] Compression: none
2026-04-11T15:19:45.526 [DEBUG] [Thread-172106] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:19:45.542 [DEBUG] [Thread-172106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:19:45.542 [DEBUG] [Thread-172106] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:19:45.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:19:45.543 [DEBUG] [Thread-172106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:19:45.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:19:45.545 [DEBUG] [Thread-172106] [transport.py] [_log()] userauth is OK
2026-04-11T15:19:45.546 [DEBUG] [Thread-172106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:19:45.546 [DEBUG] [Thread-172106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:19:45.546 [DEBUG] [Thread-172106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:19:45.546 [DEBUG] [Thread-172106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:19:45.571 [INFO] [Thread-172106] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:19:45.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:19:46.368 [DEBUG] [Thread-172106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:19:46.369 [DEBUG] [Thread-172106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:19:46.369 [DEBUG] [Thread-172106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:19:46.410 [DEBUG] [Thread-172106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:19:46.410 [DEBUG] [Thread-172106] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:19:46.414 [DEBUG] [Thread-172106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:19:46.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:19:46.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:19:46.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:19:46.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:19:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:19:46.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:19:46.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:19:46.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:19:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:19:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.554978 -999.00  +14.60  15.25     93  +13.60 1 3 1 3 1   888    0 0.17 -33.82 ----- 16.3 15.2 37.6 18.8 17.0 -1.2 16.9 -3.5 16.5 -1.3 16.8 -0.5
2026-04-11T15:19:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:19:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:19:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.554978
2026-04-11T15:19:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:19:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:19:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:19:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:19:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:19:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:19:17', tmtdew=0.088375, humidity=99.7103, cloud=0.0, wind=8.22276, temperature=14.3061, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:19:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:19:46.440 [DEBUG] [Thread-172106] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:19:46.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:19:48.902 [DEBUG] [Thread-172109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:03.954 [DEBUG] [Thread-172110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:12.770 [DEBUG] [Thread-172111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:17.964 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:17.965 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:18.991 [DEBUG] [Thread-172112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:34.030 [DEBUG] [Thread-172113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:20:49.068 [DEBUG] [Thread-172114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:04.102 [DEBUG] [Thread-172115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:12.804 [DEBUG] [Thread-172116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:18.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:18.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:19.139 [DEBUG] [Thread-172117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:34.178 [DEBUG] [Thread-172118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:21:49.216 [DEBUG] [Thread-172119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:01.472 [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-04-11T15:22:04.253 [DEBUG] [Thread-172120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:12.839 [DEBUG] [Thread-172121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:18.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:18.250 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:19.283 [DEBUG] [Thread-172122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:31.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:22:31.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:22:31.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-04-11T15:22:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 22, 14), 0.08583, 99.7267, 0.0, 12.9524, 14.0895, 2, 2, 0, 2, 0, 0),)
2026-04-11T15:22:32.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:22:14
2026-04-11T15:22:33.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:22:33.347 [DEBUG] [Thread-172123] [transport.py] [_log()] starting thread (client mode): 0xa7950df0
2026-04-11T15:22:33.347 [DEBUG] [Thread-172123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:22:33.368 [DEBUG] [Thread-172123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:22:33.368 [INFO] [Thread-172123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] client lang: <none>
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] server lang: <none>
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] kex follows: False
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] Compression: none
2026-04-11T15:22:33.372 [DEBUG] [Thread-172123] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:22:33.390 [DEBUG] [Thread-172123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:22:33.391 [DEBUG] [Thread-172123] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:22:33.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:22:33.392 [DEBUG] [Thread-172123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:22:33.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:22:33.394 [DEBUG] [Thread-172123] [transport.py] [_log()] userauth is OK
2026-04-11T15:22:33.394 [DEBUG] [Thread-172123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:22:33.394 [DEBUG] [Thread-172123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:22:33.394 [DEBUG] [Thread-172123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:22:33.394 [DEBUG] [Thread-172123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:22:33.427 [INFO] [Thread-172123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:22:33.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:22:34.232 [DEBUG] [Thread-172123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:22:34.232 [DEBUG] [Thread-172123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:22:34.232 [DEBUG] [Thread-172123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:22:34.273 [DEBUG] [Thread-172123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:22:34.273 [DEBUG] [Thread-172123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:22:34.277 [DEBUG] [Thread-172123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:22:34.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:22:34.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:22:34.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:22:34.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:22:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:22:34.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:22:34.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:22:34.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:22:34.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:22:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.556714 -999.00  +14.70  13.76     93  +13.70 1 3 1 3 1   888    0 0.22 -30.13 ----- 14.1 13.8 39.4 16.4 16.9 -0.9 16.8 -3.8 16.4 -2.1 16.7 -0.2
2026-04-11T15:22:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:22:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:22:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.556714
2026-04-11T15:22:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:22:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:22:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:22:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:22:34.303 [DEBUG] [Thread-172123] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:22:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:22:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:22:14', tmtdew=0.08583, humidity=99.7267, cloud=0.0, wind=12.9524, temperature=14.0895, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:21:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:22:34.320 [DEBUG] [Thread-172126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:22:34.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:22:34.396 [DEBUG] [Thread-172127] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-11T15:22:34.397 [DEBUG] [Thread-172127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:22:34.412 [DEBUG] [Thread-172127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:22:34.412 [INFO] [Thread-172127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:22:34.419 [DEBUG] [Thread-172127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] client lang: <none>
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] server lang: <none>
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] kex follows: False
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:22:34.420 [DEBUG] [Thread-172127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:22:34.421 [DEBUG] [Thread-172127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:22:34.421 [DEBUG] [Thread-172127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:22:34.421 [DEBUG] [Thread-172127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:22:34.421 [DEBUG] [Thread-172127] [transport.py] [_log()] Compression: none
2026-04-11T15:22:34.421 [DEBUG] [Thread-172127] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:22:34.479 [DEBUG] [Thread-172127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:22:34.479 [DEBUG] [Thread-172127] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:22:34.480 [DEBUG] [Thread-172127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:22:34.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:22:34.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:22:34.535 [DEBUG] [Thread-172127] [transport.py] [_log()] userauth is OK
2026-04-11T15:22:34.536 [DEBUG] [Thread-172127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:22:34.536 [DEBUG] [Thread-172127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:22:34.536 [DEBUG] [Thread-172127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:22:34.536 [DEBUG] [Thread-172127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:22:34.554 [INFO] [Thread-172127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:22:34.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:22:34.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:22:35.387 [DEBUG] [Thread-172127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:22:35.387 [DEBUG] [Thread-172127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:22:35.435 [DEBUG] [Thread-172127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:22:35.435 [DEBUG] [Thread-172127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:22:35.444 [DEBUG] [Thread-172127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:22:35.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:22: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-04-11T15:22:35.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-04-11T15:22:35.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:22:35.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:22:35.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:22:35.481 [DEBUG] [Thread-172127] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:22:49.363 [DEBUG] [Thread-172129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:04.397 [DEBUG] [Thread-172130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:05.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:23:05.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:23:05.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-04-11T15:23:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 22, 49), 0.07682, 99.4201, 0.0, 7.83576, 14.4789, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:23:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:22:49
2026-04-11T15:23:07.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:23:07.316 [DEBUG] [Thread-172131] [transport.py] [_log()] starting thread (client mode): 0xae5e7880
2026-04-11T15:23:07.316 [DEBUG] [Thread-172131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:23:07.336 [DEBUG] [Thread-172131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:23:07.336 [INFO] [Thread-172131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:23:07.339 [DEBUG] [Thread-172131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:23:07.339 [DEBUG] [Thread-172131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:23:07.339 [DEBUG] [Thread-172131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:23:07.339 [DEBUG] [Thread-172131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:07.339 [DEBUG] [Thread-172131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:07.339 [DEBUG] [Thread-172131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] client lang: <none>
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] server lang: <none>
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] kex follows: False
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] Compression: none
2026-04-11T15:23:07.340 [DEBUG] [Thread-172131] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:23:07.354 [DEBUG] [Thread-172131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:23:07.354 [DEBUG] [Thread-172131] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:23:07.355 [DEBUG] [Thread-172131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:23:07.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:23:07.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:23:07.356 [DEBUG] [Thread-172131] [transport.py] [_log()] userauth is OK
2026-04-11T15:23:07.356 [DEBUG] [Thread-172131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:23:07.357 [DEBUG] [Thread-172131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:23:07.357 [DEBUG] [Thread-172131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:23:07.357 [DEBUG] [Thread-172131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:23:07.380 [INFO] [Thread-172131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:23:07.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:23:08.180 [DEBUG] [Thread-172131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:23:08.180 [DEBUG] [Thread-172131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:23:08.180 [DEBUG] [Thread-172131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:23:08.221 [DEBUG] [Thread-172131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:23:08.221 [DEBUG] [Thread-172131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:23:08.223 [DEBUG] [Thread-172131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:23:08.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:23:08.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:23:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:23:08.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:23:08.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:23:08.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:23:08.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:23:08.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:23:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:23:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.557409 -999.00  +14.50  12.73     93  +13.40 1 3 1 3 1   888    0 0.16 -31.24 ----- 11.9 12.7 40.4 14.2 16.9 -1.1 16.8 -4.0 16.4 -2.3 16.6 -0.2
2026-04-11T15:23:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:23:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:23:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.557409
2026-04-11T15:23:08.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:23:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:23:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:23:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:23:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:23:08.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:22:49', tmtdew=0.07682, humidity=99.4201, cloud=0.0, wind=7.83576, temperature=14.4789, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:22:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:23:08.249 [DEBUG] [Thread-172131] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:23:08.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:23:08.345 [DEBUG] [Thread-172134] [transport.py] [_log()] starting thread (client mode): 0xae5e4430
2026-04-11T15:23:08.345 [DEBUG] [Thread-172134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:23:08.360 [DEBUG] [Thread-172134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:23:08.360 [INFO] [Thread-172134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] client lang: <none>
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] server lang: <none>
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] kex follows: False
2026-04-11T15:23:08.367 [DEBUG] [Thread-172134] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:23:08.368 [DEBUG] [Thread-172134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:23:08.368 [DEBUG] [Thread-172134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:23:08.368 [DEBUG] [Thread-172134] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:23:08.368 [DEBUG] [Thread-172134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:23:08.368 [DEBUG] [Thread-172134] [transport.py] [_log()] Compression: none
2026-04-11T15:23:08.368 [DEBUG] [Thread-172134] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:23:08.424 [DEBUG] [Thread-172134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:23:08.424 [DEBUG] [Thread-172134] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:23:08.425 [DEBUG] [Thread-172134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:23:08.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:23:08.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:23:08.481 [DEBUG] [Thread-172134] [transport.py] [_log()] userauth is OK
2026-04-11T15:23:08.481 [DEBUG] [Thread-172134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:23:08.481 [DEBUG] [Thread-172134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:23:08.481 [DEBUG] [Thread-172134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:23:08.481 [DEBUG] [Thread-172134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:23:08.504 [INFO] [Thread-172134] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:23:08.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:23:08.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:23:09.332 [DEBUG] [Thread-172134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:23:09.332 [DEBUG] [Thread-172134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:23:09.384 [DEBUG] [Thread-172134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:23:09.384 [DEBUG] [Thread-172134] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:23:09.394 [DEBUG] [Thread-172134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:23:09.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:23:09.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:23:09.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:23:09.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:23:09.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:23:09.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:23:09.438 [DEBUG] [Thread-172134] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:23:12.868 [DEBUG] [Thread-172136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:18.391 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:18.392 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:19.432 [DEBUG] [Thread-172137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:34.496 [DEBUG] [Thread-172138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:23:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:23:39.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:23:39.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-04-11T15:23:40.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 23, 25), 0.090995, 99.6935, 0.0, 9.49356, 14.0397, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:23:40.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:23:25
2026-04-11T15:23:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:23:41.275 [DEBUG] [Thread-172139] [transport.py] [_log()] starting thread (client mode): 0xae5e4850
2026-04-11T15:23:41.275 [DEBUG] [Thread-172139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:23:41.293 [DEBUG] [Thread-172139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:23:41.293 [INFO] [Thread-172139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:23:41.296 [DEBUG] [Thread-172139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] client lang: <none>
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] server lang: <none>
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] kex follows: False
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] Compression: none
2026-04-11T15:23:41.297 [DEBUG] [Thread-172139] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:23:41.315 [DEBUG] [Thread-172139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:23:41.315 [DEBUG] [Thread-172139] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:23:41.316 [DEBUG] [Thread-172139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:23:41.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:23:41.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:23:41.318 [DEBUG] [Thread-172139] [transport.py] [_log()] userauth is OK
2026-04-11T15:23:41.318 [DEBUG] [Thread-172139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:23:41.318 [DEBUG] [Thread-172139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:23:41.318 [DEBUG] [Thread-172139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:23:41.319 [DEBUG] [Thread-172139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:23:41.341 [INFO] [Thread-172139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:23:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:23:42.117 [DEBUG] [Thread-172139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:23:42.117 [DEBUG] [Thread-172139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:23:42.117 [DEBUG] [Thread-172139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:23:42.158 [DEBUG] [Thread-172139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:23:42.158 [DEBUG] [Thread-172139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:23:42.162 [DEBUG] [Thread-172139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:23:42.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:23:42.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:23:42.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:23:42.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:23:42.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:23:42.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:23:42.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:23:42.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:23:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:23:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.557756 -999.00  +14.50  11.78     93  +13.40 1 3 1 3 1   888    0 0.37 -24.76 ----- 11.5 11.8 41.8 12.8 16.8 -1.1 16.7 -4.1 16.4 -2.6 16.6 -0.1
2026-04-11T15:23:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:23:42.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:23:42.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.557756
2026-04-11T15:23:42.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:23:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:23:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:23:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:23:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:23:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:23:25', tmtdew=0.090995, humidity=99.6935, cloud=0.0, wind=9.49356, temperature=14.0397, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:23:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:23:42.189 [DEBUG] [Thread-172139] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:23:42.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:23:42.282 [DEBUG] [Thread-172142] [transport.py] [_log()] starting thread (client mode): 0xa79507c0
2026-04-11T15:23:42.282 [DEBUG] [Thread-172142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:23:42.298 [DEBUG] [Thread-172142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:23:42.298 [INFO] [Thread-172142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] client lang: <none>
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] server lang: <none>
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] kex follows: False
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:23:42.306 [DEBUG] [Thread-172142] [transport.py] [_log()] Compression: none
2026-04-11T15:23:42.307 [DEBUG] [Thread-172142] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:23:42.366 [DEBUG] [Thread-172142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:23:42.366 [DEBUG] [Thread-172142] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:23:42.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:23:42.368 [DEBUG] [Thread-172142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:23:42.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:23:42.421 [DEBUG] [Thread-172142] [transport.py] [_log()] userauth is OK
2026-04-11T15:23:42.422 [DEBUG] [Thread-172142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:23:42.422 [DEBUG] [Thread-172142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:23:42.422 [DEBUG] [Thread-172142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:23:42.422 [DEBUG] [Thread-172142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:23:42.446 [INFO] [Thread-172142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:23:42.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:23:42.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:23:43.258 [DEBUG] [Thread-172142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:23:43.258 [DEBUG] [Thread-172142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:23:43.306 [DEBUG] [Thread-172142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:23:43.306 [DEBUG] [Thread-172142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:23:43.315 [DEBUG] [Thread-172142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:23:43.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:23:43.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-04-11T15:23:43.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:23:43.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:23:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:23:43.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:23:43.354 [DEBUG] [Thread-172142] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:23:49.539 [DEBUG] [Thread-172144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:04.597 [DEBUG] [Thread-172145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:12.922 [DEBUG] [Thread-172146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:13.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:24:13.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:24:13.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-04-11T15:24:14.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 23, 25), 0.090995, 99.6935, 0.0, 11.2936, 14.0397, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:24:14.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:23:25
2026-04-11T15:24:15.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:24:15.267 [DEBUG] [Thread-172147] [transport.py] [_log()] starting thread (client mode): 0xae5a7250
2026-04-11T15:24:15.267 [DEBUG] [Thread-172147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:24:15.287 [DEBUG] [Thread-172147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:24:15.287 [INFO] [Thread-172147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] client lang: <none>
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] server lang: <none>
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] kex follows: False
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] Compression: none
2026-04-11T15:24:15.290 [DEBUG] [Thread-172147] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:24:15.307 [DEBUG] [Thread-172147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:24:15.307 [DEBUG] [Thread-172147] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:24:15.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:24:15.309 [DEBUG] [Thread-172147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:24:15.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:24:15.349 [DEBUG] [Thread-172147] [transport.py] [_log()] userauth is OK
2026-04-11T15:24:15.349 [DEBUG] [Thread-172147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:24:15.350 [DEBUG] [Thread-172147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:24:15.350 [DEBUG] [Thread-172147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:24:15.350 [DEBUG] [Thread-172147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:24:15.376 [INFO] [Thread-172147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:24:15.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:24:16.116 [DEBUG] [Thread-172147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:24:16.116 [DEBUG] [Thread-172147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:24:16.117 [DEBUG] [Thread-172147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:24:16.157 [DEBUG] [Thread-172147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:24:16.157 [DEBUG] [Thread-172147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:24:16.161 [DEBUG] [Thread-172147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:24:16.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:24:16.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:24:16.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:24:16.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:24:16.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:24:16.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:24:16.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:24:16.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:24:16.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:24:16.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.558103 -999.00  +14.50  11.16     93  +13.40 1 3 1 3 1   888    0 0.48 -22.34 ----- 10.4 11.2 45.6 11.8 16.8 -0.9 16.7 -4.0 16.3 -2.4 16.6 -0.2
2026-04-11T15:24:16.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:24:16.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:24:16.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.558103
2026-04-11T15:24:16.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:24:16.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:24:16.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:24:16.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:24:16.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:24:16.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:23:25', tmtdew=0.090995, humidity=99.6935, cloud=0.0, wind=11.2936, temperature=14.0397, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:23:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:24:16.190 [DEBUG] [Thread-172147] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:24:16.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:24:16.283 [DEBUG] [Thread-172150] [transport.py] [_log()] starting thread (client mode): 0xa7950d00
2026-04-11T15:24:16.283 [DEBUG] [Thread-172150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:24:16.298 [DEBUG] [Thread-172150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:24:16.298 [INFO] [Thread-172150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:24:16.306 [DEBUG] [Thread-172150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] client lang: <none>
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] server lang: <none>
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] kex follows: False
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] Compression: none
2026-04-11T15:24:16.307 [DEBUG] [Thread-172150] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:24:16.366 [DEBUG] [Thread-172150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:24:16.367 [DEBUG] [Thread-172150] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:24:16.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:24:16.368 [DEBUG] [Thread-172150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:24:16.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:24:16.423 [DEBUG] [Thread-172150] [transport.py] [_log()] userauth is OK
2026-04-11T15:24:16.423 [DEBUG] [Thread-172150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:24:16.424 [DEBUG] [Thread-172150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:24:16.424 [DEBUG] [Thread-172150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:24:16.424 [DEBUG] [Thread-172150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:24:16.443 [INFO] [Thread-172150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:24:16.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:24:16.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:24:17.259 [DEBUG] [Thread-172150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:24:17.260 [DEBUG] [Thread-172150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:24:17.308 [DEBUG] [Thread-172150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:24:17.308 [DEBUG] [Thread-172150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:24:17.318 [DEBUG] [Thread-172150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:24:17.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:24:17.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-04-11T15:24:17.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-04-11T15:24:17.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:24:17.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:24:17.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:24:17.356 [DEBUG] [Thread-172150] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:24:18.533 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:18.535 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:19.637 [DEBUG] [Thread-172152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:34.692 [DEBUG] [Thread-172153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:24:47.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:24:47.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-04-11T15:24:48.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 24, 35), 0.09231, 99.3206, 0.0, 9.1764, 14.4457, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:24:48.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:24:35
2026-04-11T15:24:49.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:24:49.208 [DEBUG] [Thread-172154] [transport.py] [_log()] starting thread (client mode): 0xa79510f0
2026-04-11T15:24:49.208 [DEBUG] [Thread-172154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:24:49.230 [DEBUG] [Thread-172154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:24:49.230 [INFO] [Thread-172154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] client lang: <none>
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] server lang: <none>
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] kex follows: False
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:24:49.233 [DEBUG] [Thread-172154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:24:49.234 [DEBUG] [Thread-172154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:24:49.234 [DEBUG] [Thread-172154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:24:49.234 [DEBUG] [Thread-172154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:24:49.234 [DEBUG] [Thread-172154] [transport.py] [_log()] Compression: none
2026-04-11T15:24:49.234 [DEBUG] [Thread-172154] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:24:49.251 [DEBUG] [Thread-172154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:24:49.251 [DEBUG] [Thread-172154] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:24:49.252 [DEBUG] [Thread-172154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:24:49.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:24:49.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:24:49.254 [DEBUG] [Thread-172154] [transport.py] [_log()] userauth is OK
2026-04-11T15:24:49.254 [DEBUG] [Thread-172154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:24:49.254 [DEBUG] [Thread-172154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:24:49.254 [DEBUG] [Thread-172154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:24:49.254 [DEBUG] [Thread-172154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:24:49.279 [INFO] [Thread-172154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:24:49.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:24:49.730 [DEBUG] [Thread-172156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:24:50.119 [DEBUG] [Thread-172154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:24:50.119 [DEBUG] [Thread-172154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:24:50.119 [DEBUG] [Thread-172154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:24:50.160 [DEBUG] [Thread-172154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:24:50.160 [DEBUG] [Thread-172154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:24:50.163 [DEBUG] [Thread-172154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:24:50.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:24:50.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:24:50.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:24:50.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:24:50.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:24:50.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:24:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:24:50.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:24:50.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:24:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.558450 -999.00  +14.50   8.73     93  +13.40 1 3 1 3 1   888    0 0.47 -21.69 ----- 10.8 8.7 42.4 12.9 16.8 -0.9 16.7 -4.1 16.2 -2.9 16.6 -0.2
2026-04-11T15:24:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:24:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:24:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.558450
2026-04-11T15:24:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:24:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:24:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:24:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:24:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:24:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:24:35', tmtdew=0.09231, humidity=99.3206, cloud=0.0, wind=9.1764, temperature=14.4457, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:24:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:24:50.190 [DEBUG] [Thread-172154] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:24:50.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:24:50.282 [DEBUG] [Thread-172158] [transport.py] [_log()] starting thread (client mode): 0xa7952410
2026-04-11T15:24:50.282 [DEBUG] [Thread-172158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:24:50.297 [DEBUG] [Thread-172158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:24:50.297 [INFO] [Thread-172158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:24:50.305 [DEBUG] [Thread-172158] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:24:50.305 [DEBUG] [Thread-172158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:24:50.305 [DEBUG] [Thread-172158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:24:50.305 [DEBUG] [Thread-172158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] client lang: <none>
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] server lang: <none>
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] kex follows: False
2026-04-11T15:24:50.306 [DEBUG] [Thread-172158] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:24:50.307 [DEBUG] [Thread-172158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:24:50.307 [DEBUG] [Thread-172158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:24:50.307 [DEBUG] [Thread-172158] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:24:50.307 [DEBUG] [Thread-172158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:24:50.307 [DEBUG] [Thread-172158] [transport.py] [_log()] Compression: none
2026-04-11T15:24:50.307 [DEBUG] [Thread-172158] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:24:50.364 [DEBUG] [Thread-172158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:24:50.365 [DEBUG] [Thread-172158] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:24:50.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:24:50.366 [DEBUG] [Thread-172158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:24:50.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:24:50.423 [DEBUG] [Thread-172158] [transport.py] [_log()] userauth is OK
2026-04-11T15:24:50.424 [DEBUG] [Thread-172158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:24:50.424 [DEBUG] [Thread-172158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:24:50.424 [DEBUG] [Thread-172158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:24:50.424 [DEBUG] [Thread-172158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:24:50.442 [INFO] [Thread-172158] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:24:50.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:24:50.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:24:51.261 [DEBUG] [Thread-172158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:24:51.261 [DEBUG] [Thread-172158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:24:51.309 [DEBUG] [Thread-172158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:24:51.309 [DEBUG] [Thread-172158] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:24:51.318 [DEBUG] [Thread-172158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:24:51.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:24:51.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-04-11T15:24:51.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-04-11T15:24:51.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:24:51.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:24:51.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:24:51.354 [DEBUG] [Thread-172158] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:25:04.768 [DEBUG] [Thread-172160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:12.978 [DEBUG] [Thread-172161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:18.674 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:18.675 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:19.817 [DEBUG] [Thread-172162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:21.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:25:21.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:25:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:25:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 25, 11), 0.088425, 99.71, 0.0, 10.4468, 14.1228, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:25:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:25:11
2026-04-11T15:25:23.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:25:23.201 [DEBUG] [Thread-172163] [transport.py] [_log()] starting thread (client mode): 0xae5e46d0
2026-04-11T15:25:23.201 [DEBUG] [Thread-172163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:25:23.224 [DEBUG] [Thread-172163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:25:23.224 [INFO] [Thread-172163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] client lang: <none>
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] server lang: <none>
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] kex follows: False
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:25:23.225 [DEBUG] [Thread-172163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:25:23.226 [DEBUG] [Thread-172163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:25:23.226 [DEBUG] [Thread-172163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:25:23.226 [DEBUG] [Thread-172163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:25:23.226 [DEBUG] [Thread-172163] [transport.py] [_log()] Compression: none
2026-04-11T15:25:23.226 [DEBUG] [Thread-172163] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:25:23.246 [DEBUG] [Thread-172163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:25:23.247 [DEBUG] [Thread-172163] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:25:23.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:25:23.248 [DEBUG] [Thread-172163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:25:23.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:25:23.250 [DEBUG] [Thread-172163] [transport.py] [_log()] userauth is OK
2026-04-11T15:25:23.250 [DEBUG] [Thread-172163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:25:23.250 [DEBUG] [Thread-172163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:25:23.250 [DEBUG] [Thread-172163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:25:23.250 [DEBUG] [Thread-172163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:25:23.285 [INFO] [Thread-172163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:25:23.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:25:24.369 [DEBUG] [Thread-172163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:25:24.370 [DEBUG] [Thread-172163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:25:24.370 [DEBUG] [Thread-172163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:25:24.411 [DEBUG] [Thread-172163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:25:24.411 [DEBUG] [Thread-172163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:25:24.415 [DEBUG] [Thread-172163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:25:24.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:25:24.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:25:24.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:25:24.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:25:24.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:25:24.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:25:24.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:25:24.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:25:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:25:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.558797 -999.00  +14.50  10.74     93  +13.50 1 3 1 3 1   888    0 0.48 -20.53 ----- 8.5 10.7 65.0 13.8 16.8 -1.1 16.6 -3.9 16.2 -3.0 16.6 -0.4
2026-04-11T15:25:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:25:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:25:24.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.558797
2026-04-11T15:25:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:25:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:25:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:25:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:25:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:25:24.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:25:11', tmtdew=0.088425, humidity=99.71, cloud=0.0, wind=10.4468, temperature=14.1228, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:24:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:25:24.445 [DEBUG] [Thread-172163] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:25:24.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:25:24.543 [DEBUG] [Thread-172166] [transport.py] [_log()] starting thread (client mode): 0xae5e44c0
2026-04-11T15:25:24.543 [DEBUG] [Thread-172166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:25:24.558 [DEBUG] [Thread-172166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:25:24.558 [INFO] [Thread-172166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] client lang: <none>
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] server lang: <none>
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] kex follows: False
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] Compression: none
2026-04-11T15:25:24.566 [DEBUG] [Thread-172166] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:25:24.628 [DEBUG] [Thread-172166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:25:24.628 [DEBUG] [Thread-172166] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:25:24.629 [DEBUG] [Thread-172166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:25:24.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:25:24.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:25:24.684 [DEBUG] [Thread-172166] [transport.py] [_log()] userauth is OK
2026-04-11T15:25:24.685 [DEBUG] [Thread-172166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:25:24.685 [DEBUG] [Thread-172166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:25:24.685 [DEBUG] [Thread-172166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:25:24.685 [DEBUG] [Thread-172166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:25:24.704 [INFO] [Thread-172166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:25:24.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:25:24.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:25:25.551 [DEBUG] [Thread-172166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:25:25.553 [DEBUG] [Thread-172166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:25:25.599 [DEBUG] [Thread-172166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:25:25.599 [DEBUG] [Thread-172166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:25:25.608 [DEBUG] [Thread-172166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:25:25.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:25:25.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-04-11T15:25:25.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-04-11T15:25:25.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:25:25.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:25:25.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:25:25.645 [DEBUG] [Thread-172166] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:25:34.857 [DEBUG] [Thread-172168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:49.918 [DEBUG] [Thread-172169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:25:55.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:25:55.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:25:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:25:56.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 25, 46), 0.08716, 99.3537, 0.0, 11.1521, 14.3794, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:25:56.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:25:46
2026-04-11T15:25:57.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:25:57.471 [DEBUG] [Thread-172170] [transport.py] [_log()] starting thread (client mode): 0xae5a70a0
2026-04-11T15:25:57.471 [DEBUG] [Thread-172170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:25:57.493 [DEBUG] [Thread-172170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:25:57.493 [INFO] [Thread-172170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] client lang: <none>
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] server lang: <none>
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] kex follows: False
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:25:57.496 [DEBUG] [Thread-172170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:25:57.497 [DEBUG] [Thread-172170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:25:57.497 [DEBUG] [Thread-172170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:25:57.497 [DEBUG] [Thread-172170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:25:57.497 [DEBUG] [Thread-172170] [transport.py] [_log()] Compression: none
2026-04-11T15:25:57.497 [DEBUG] [Thread-172170] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:25:57.517 [DEBUG] [Thread-172170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:25:57.517 [DEBUG] [Thread-172170] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:25:57.518 [DEBUG] [Thread-172170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:25:57.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:25:57.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:25:57.520 [DEBUG] [Thread-172170] [transport.py] [_log()] userauth is OK
2026-04-11T15:25:57.520 [DEBUG] [Thread-172170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:25:57.520 [DEBUG] [Thread-172170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:25:57.521 [DEBUG] [Thread-172170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:25:57.521 [DEBUG] [Thread-172170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:25:57.544 [INFO] [Thread-172170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:25:57.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:25:58.349 [DEBUG] [Thread-172170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:25:58.350 [DEBUG] [Thread-172170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:25:58.350 [DEBUG] [Thread-172170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:25:58.391 [DEBUG] [Thread-172170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:25:58.391 [DEBUG] [Thread-172170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:25:58.395 [DEBUG] [Thread-172170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:25:58.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:25:58.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:25:58.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:25:58.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:25:58.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:25:58.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:25:58.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:25:58.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:25:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:25:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.559145 -999.00  +14.60   8.63     93  +13.50 1 3 1 3 1   888    0 0.53 -19.63 ----- 8.6 8.6 54.1 10.3 16.8 -0.6 16.6 -3.4 16.2 -2.3 16.6 -0.2
2026-04-11T15:25:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:25:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:25:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.559145
2026-04-11T15:25:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:25:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:25:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:25:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:25:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:25:58.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:25:46', tmtdew=0.08716, humidity=99.3537, cloud=0.0, wind=11.1521, temperature=14.3794, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:25:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:25:58.425 [DEBUG] [Thread-172170] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:25:58.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:25:58.518 [DEBUG] [Thread-172173] [transport.py] [_log()] starting thread (client mode): 0xae5612d0
2026-04-11T15:25:58.518 [DEBUG] [Thread-172173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:25:58.533 [DEBUG] [Thread-172173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:25:58.533 [INFO] [Thread-172173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:58.541 [DEBUG] [Thread-172173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] client lang: <none>
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] server lang: <none>
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] kex follows: False
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] Compression: none
2026-04-11T15:25:58.542 [DEBUG] [Thread-172173] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:25:58.601 [DEBUG] [Thread-172173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:25:58.601 [DEBUG] [Thread-172173] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:25:58.602 [DEBUG] [Thread-172173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:25:58.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:25:58.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:25:58.657 [DEBUG] [Thread-172173] [transport.py] [_log()] userauth is OK
2026-04-11T15:25:58.657 [DEBUG] [Thread-172173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:25:58.657 [DEBUG] [Thread-172173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:25:58.657 [DEBUG] [Thread-172173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:25:58.658 [DEBUG] [Thread-172173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:25:58.677 [INFO] [Thread-172173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:25:58.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:25:58.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:25:59.499 [DEBUG] [Thread-172173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:25:59.500 [DEBUG] [Thread-172173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:25:59.547 [DEBUG] [Thread-172173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:25:59.547 [DEBUG] [Thread-172173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:25:59.556 [DEBUG] [Thread-172173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:25:59.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:25:59.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:25:59.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-04-11T15:25:59.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:25:59.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:25:59.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:25:59.591 [DEBUG] [Thread-172173] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:26:04.956 [DEBUG] [Thread-172175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:26:13.026 [DEBUG] [Thread-172176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:26:18.815 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:26:18.816 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:26:20.012 [DEBUG] [Thread-172177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:26:29.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:26:29.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:26:29.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-04-11T15:26:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 26, 22), 0.088425, 99.71, 0.0, 9.75816, 14.1062, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:26:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:26:22
2026-04-11T15:26:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:26:31.506 [DEBUG] [Thread-172178] [transport.py] [_log()] starting thread (client mode): 0xae5e4490
2026-04-11T15:26:31.506 [DEBUG] [Thread-172178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:26:31.527 [DEBUG] [Thread-172178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:26:31.527 [INFO] [Thread-172178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:26:31.530 [DEBUG] [Thread-172178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] client lang: <none>
2026-04-11T15:26:31.531 [DEBUG] [Thread-172178] [transport.py] [_log()] server lang: <none>
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] kex follows: False
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] Compression: none
2026-04-11T15:26:31.532 [DEBUG] [Thread-172178] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:26:31.551 [DEBUG] [Thread-172178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:26:31.552 [DEBUG] [Thread-172178] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:26:31.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:26:31.553 [DEBUG] [Thread-172178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:26:31.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:26:31.555 [DEBUG] [Thread-172178] [transport.py] [_log()] userauth is OK
2026-04-11T15:26:31.555 [DEBUG] [Thread-172178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:26:31.556 [DEBUG] [Thread-172178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:26:31.556 [DEBUG] [Thread-172178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:26:31.556 [DEBUG] [Thread-172178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:26:31.592 [INFO] [Thread-172178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:26:31.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:26:32.445 [DEBUG] [Thread-172178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:26:32.446 [DEBUG] [Thread-172178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:26:32.446 [DEBUG] [Thread-172178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:26:32.487 [DEBUG] [Thread-172178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:26:32.487 [DEBUG] [Thread-172178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:26:32.490 [DEBUG] [Thread-172178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:26:32.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:26:32.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:26:32.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:26:32.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:26:32.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:26:32.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:26:32.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:26:32.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:26:32.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:26:32.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.559492 -999.00  +14.50   9.22     93  +13.50 1 3 1 3 1   888    0 0.54 -18.86 ----- 11.0 9.2 38.0 12.6 16.8 -0.8 16.6 -3.2 16.2 -2.0 16.6 -0.3
2026-04-11T15:26:32.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:26:32.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:26:32.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.559492
2026-04-11T15:26:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:26:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:26:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:26:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:26:32.512 [DEBUG] [Thread-172178] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:26:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:26:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:26:22', tmtdew=0.088425, humidity=99.71, cloud=0.0, wind=9.75816, temperature=14.1062, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:25:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:26:32.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:26:32.608 [DEBUG] [Thread-172181] [transport.py] [_log()] starting thread (client mode): 0xa7952110
2026-04-11T15:26:32.608 [DEBUG] [Thread-172181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:26:32.622 [DEBUG] [Thread-172181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:26:32.622 [INFO] [Thread-172181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:26:32.630 [DEBUG] [Thread-172181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:26:32.630 [DEBUG] [Thread-172181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:26:32.630 [DEBUG] [Thread-172181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:26:32.630 [DEBUG] [Thread-172181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:26:32.630 [DEBUG] [Thread-172181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:26:32.630 [DEBUG] [Thread-172181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] client lang: <none>
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] server lang: <none>
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] kex follows: False
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:26:32.631 [DEBUG] [Thread-172181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:26:32.632 [DEBUG] [Thread-172181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:26:32.632 [DEBUG] [Thread-172181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:26:32.632 [DEBUG] [Thread-172181] [transport.py] [_log()] Compression: none
2026-04-11T15:26:32.632 [DEBUG] [Thread-172181] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:26:32.694 [DEBUG] [Thread-172181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:26:32.695 [DEBUG] [Thread-172181] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:26:32.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:26:32.696 [DEBUG] [Thread-172181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:26:32.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:26:32.750 [DEBUG] [Thread-172181] [transport.py] [_log()] userauth is OK
2026-04-11T15:26:32.750 [DEBUG] [Thread-172181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:26:32.751 [DEBUG] [Thread-172181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:26:32.751 [DEBUG] [Thread-172181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:26:32.751 [DEBUG] [Thread-172181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:26:32.770 [INFO] [Thread-172181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:26:32.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:26:32.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:26:33.551 [DEBUG] [Thread-172181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:26:33.551 [DEBUG] [Thread-172181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:26:33.599 [DEBUG] [Thread-172181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:26:33.599 [DEBUG] [Thread-172181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:26:33.612 [DEBUG] [Thread-172181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:26:33.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:26:33.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:26:33.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-04-11T15:26:33.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:26:33.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:26:33.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:26:33.651 [DEBUG] [Thread-172181] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:26:35.049 [DEBUG] [Thread-172183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:26:50.104 [DEBUG] [Thread-172184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:03.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:27:03.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:27:03.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-04-11T15:27:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 26, 57), 0.09616, 99.6603, 0.0, 13.0583, 14.1894, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:27:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:26:57
2026-04-11T15:27:05.143 [DEBUG] [Thread-172185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:05.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:27:05.464 [DEBUG] [Thread-172186] [transport.py] [_log()] starting thread (client mode): 0xae5083a0
2026-04-11T15:27:05.464 [DEBUG] [Thread-172186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:27:05.487 [DEBUG] [Thread-172186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:27:05.487 [INFO] [Thread-172186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] client lang: <none>
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] server lang: <none>
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] kex follows: False
2026-04-11T15:27:05.490 [DEBUG] [Thread-172186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:27:05.491 [DEBUG] [Thread-172186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:27:05.491 [DEBUG] [Thread-172186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:27:05.491 [DEBUG] [Thread-172186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:27:05.491 [DEBUG] [Thread-172186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:27:05.491 [DEBUG] [Thread-172186] [transport.py] [_log()] Compression: none
2026-04-11T15:27:05.491 [DEBUG] [Thread-172186] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:27:05.500 [DEBUG] [Thread-172186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:27:05.500 [DEBUG] [Thread-172186] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:27:05.501 [DEBUG] [Thread-172186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:27:05.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:27:05.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:27:05.503 [DEBUG] [Thread-172186] [transport.py] [_log()] userauth is OK
2026-04-11T15:27:05.503 [DEBUG] [Thread-172186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:27:05.503 [DEBUG] [Thread-172186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:27:05.504 [DEBUG] [Thread-172186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:27:05.504 [DEBUG] [Thread-172186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:27:05.528 [INFO] [Thread-172186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:27:05.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:27:06.330 [DEBUG] [Thread-172186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:27:06.330 [DEBUG] [Thread-172186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:27:06.331 [DEBUG] [Thread-172186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:27:06.371 [DEBUG] [Thread-172186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:27:06.371 [DEBUG] [Thread-172186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:27:06.373 [DEBUG] [Thread-172186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:27:06.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:27:06.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:27:06.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:27:06.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:27:06.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:27:06.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:27:06.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:27:06.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:27:06.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:27:06.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.559839 -999.00  +14.60  11.40     93  +13.60 1 3 1 3 1   888    0 0.48 -20.44 ----- 10.9 11.4 37.5 12.4 16.7 -0.9 16.6 -3.1 16.2 -2.3 16.6 -0.2
2026-04-11T15:27:06.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:27:06.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:27:06.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.559839
2026-04-11T15:27:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:27:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:27:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:27:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:27:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:27:06.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:26:57', tmtdew=0.09616, humidity=99.6603, cloud=0.0, wind=13.0583, temperature=14.1894, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:26:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:27:06.402 [DEBUG] [Thread-172186] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:27:06.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:27:06.496 [DEBUG] [Thread-172189] [transport.py] [_log()] starting thread (client mode): 0xae537370
2026-04-11T15:27:06.496 [DEBUG] [Thread-172189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:27:06.511 [DEBUG] [Thread-172189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:27:06.511 [INFO] [Thread-172189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:27:06.518 [DEBUG] [Thread-172189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] client lang: <none>
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] server lang: <none>
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] kex follows: False
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:27:06.519 [DEBUG] [Thread-172189] [transport.py] [_log()] Compression: none
2026-04-11T15:27:06.520 [DEBUG] [Thread-172189] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:27:06.579 [DEBUG] [Thread-172189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:27:06.580 [DEBUG] [Thread-172189] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:27:06.580 [DEBUG] [Thread-172189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:27:06.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:27:06.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:27:06.638 [DEBUG] [Thread-172189] [transport.py] [_log()] userauth is OK
2026-04-11T15:27:06.639 [DEBUG] [Thread-172189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:27:06.639 [DEBUG] [Thread-172189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:27:06.639 [DEBUG] [Thread-172189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:27:06.639 [DEBUG] [Thread-172189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:27:06.658 [INFO] [Thread-172189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:27:06.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:27:06.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:27:07.474 [DEBUG] [Thread-172189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:27:07.474 [DEBUG] [Thread-172189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:27:07.522 [DEBUG] [Thread-172189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:27:07.522 [DEBUG] [Thread-172189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:27:07.532 [DEBUG] [Thread-172189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:27:07.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:27:07.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-04-11T15:27:07.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-04-11T15:27:07.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:27:07.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:27:07.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:27:07.570 [DEBUG] [Thread-172189] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:27:13.069 [DEBUG] [Thread-172191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:18.964 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:18.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:20.182 [DEBUG] [Thread-172192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:35.235 [DEBUG] [Thread-172193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:27:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:27:37.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:27:37.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-04-11T15:27:38.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 26, 57), 0.09616, 99.6603, 0.0, 13.0583, 14.1894, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:27:38.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:26:57
2026-04-11T15:27:39.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:27:39.465 [DEBUG] [Thread-172194] [transport.py] [_log()] starting thread (client mode): 0xae5a7b20
2026-04-11T15:27:39.466 [DEBUG] [Thread-172194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:27:39.486 [DEBUG] [Thread-172194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:27:39.486 [INFO] [Thread-172194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] client lang: <none>
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] server lang: <none>
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] kex follows: False
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:27:39.490 [DEBUG] [Thread-172194] [transport.py] [_log()] Compression: none
2026-04-11T15:27:39.491 [DEBUG] [Thread-172194] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:27:39.506 [DEBUG] [Thread-172194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:27:39.506 [DEBUG] [Thread-172194] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:27:39.507 [DEBUG] [Thread-172194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:27:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:27:39.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:27:39.509 [DEBUG] [Thread-172194] [transport.py] [_log()] userauth is OK
2026-04-11T15:27:39.509 [DEBUG] [Thread-172194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:27:39.509 [DEBUG] [Thread-172194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:27:39.509 [DEBUG] [Thread-172194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:27:39.509 [DEBUG] [Thread-172194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:27:39.533 [INFO] [Thread-172194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:27:39.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:27:40.318 [DEBUG] [Thread-172194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:27:40.319 [DEBUG] [Thread-172194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:27:40.319 [DEBUG] [Thread-172194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:27:40.360 [DEBUG] [Thread-172194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:27:40.361 [DEBUG] [Thread-172194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:27:40.364 [DEBUG] [Thread-172194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:27:40.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:27:40.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:27:40.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:27:40.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:27:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:27:40.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:27:40.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:27:40.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:27:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:27:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.560186 -999.00  +14.60  10.27     93  +13.60 1 3 1 3 1   888    0 0.52 -19.30 ----- 9.2 10.3 29.4 13.9 16.7 -0.9 16.6 -3.2 16.2 -2.0 16.5 -1.1
2026-04-11T15:27:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:27:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:27:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.560186
2026-04-11T15:27:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:27:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:27:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:27:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:27:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:27:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:26:57', tmtdew=0.09616, humidity=99.6603, cloud=0.0, wind=13.0583, temperature=14.1894, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:26:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:27:40.394 [DEBUG] [Thread-172194] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:27:40.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:27:40.486 [DEBUG] [Thread-172197] [transport.py] [_log()] starting thread (client mode): 0xb0fe86a0
2026-04-11T15:27:40.486 [DEBUG] [Thread-172197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:27:40.500 [DEBUG] [Thread-172197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:27:40.501 [INFO] [Thread-172197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:27:40.508 [DEBUG] [Thread-172197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:27:40.509 [DEBUG] [Thread-172197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] client lang: <none>
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] server lang: <none>
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] kex follows: False
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] Compression: none
2026-04-11T15:27:40.510 [DEBUG] [Thread-172197] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:27:40.567 [DEBUG] [Thread-172197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:27:40.568 [DEBUG] [Thread-172197] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:27:40.569 [DEBUG] [Thread-172197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:27:40.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:27:40.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:27:40.623 [DEBUG] [Thread-172197] [transport.py] [_log()] userauth is OK
2026-04-11T15:27:40.623 [DEBUG] [Thread-172197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:27:40.624 [DEBUG] [Thread-172197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:27:40.624 [DEBUG] [Thread-172197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:27:40.624 [DEBUG] [Thread-172197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:27:40.642 [INFO] [Thread-172197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:27:40.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:27:40.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:27:41.461 [DEBUG] [Thread-172197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:27:41.462 [DEBUG] [Thread-172197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:27:41.509 [DEBUG] [Thread-172197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:27:41.509 [DEBUG] [Thread-172197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:27:41.519 [DEBUG] [Thread-172197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:27:41.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:27:41.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-04-11T15:27:41.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-04-11T15:27:41.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:27:41.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:27:41.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:27:41.556 [DEBUG] [Thread-172197] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:27:50.276 [DEBUG] [Thread-172199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:05.338 [DEBUG] [Thread-172200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:11.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:28:11.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:28:11.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-04-11T15:28:12.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 27, 33), 0.09874, 99.6437, 0.0, 12.2292, 14.1397, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:28:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:27:33
2026-04-11T15:28:13.115 [DEBUG] [Thread-172201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:13.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:28:13.430 [DEBUG] [Thread-172202] [transport.py] [_log()] starting thread (client mode): 0xb0fe8850
2026-04-11T15:28:13.430 [DEBUG] [Thread-172202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:28:13.450 [DEBUG] [Thread-172202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:28:13.450 [INFO] [Thread-172202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:28:13.453 [DEBUG] [Thread-172202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:28:13.453 [DEBUG] [Thread-172202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:28:13.453 [DEBUG] [Thread-172202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] client lang: <none>
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] server lang: <none>
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] kex follows: False
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:28:13.454 [DEBUG] [Thread-172202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:28:13.455 [DEBUG] [Thread-172202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:28:13.455 [DEBUG] [Thread-172202] [transport.py] [_log()] Compression: none
2026-04-11T15:28:13.455 [DEBUG] [Thread-172202] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:28:13.472 [DEBUG] [Thread-172202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:28:13.473 [DEBUG] [Thread-172202] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:28:13.473 [DEBUG] [Thread-172202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:28:13.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:28:13.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:28:13.475 [DEBUG] [Thread-172202] [transport.py] [_log()] userauth is OK
2026-04-11T15:28:13.476 [DEBUG] [Thread-172202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:28:13.476 [DEBUG] [Thread-172202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:28:13.476 [DEBUG] [Thread-172202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:28:13.476 [DEBUG] [Thread-172202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:28:13.513 [INFO] [Thread-172202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:28:13.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:28:14.314 [DEBUG] [Thread-172202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:28:14.314 [DEBUG] [Thread-172202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:28:14.314 [DEBUG] [Thread-172202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:28:14.355 [DEBUG] [Thread-172202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:28:14.355 [DEBUG] [Thread-172202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:28:14.358 [DEBUG] [Thread-172202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:28:14.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:28:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:28:14.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:28:14.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:28:14.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:28:14.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:28:14.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:28:14.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:28:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:28:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.560533 -999.00  +14.60  10.98     93  +13.50 1 3 1 3 1   888    0 0.57 -18.23 ----- 11.6 11.0 41.4 14.5 16.6 -1.0 16.5 -4.1 16.1 -3.2 16.4 -0.5
2026-04-11T15:28:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:28:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:28:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.560533
2026-04-11T15:28:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:28:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:28:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:28:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:28:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:28:14.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:27:33', tmtdew=0.09874, humidity=99.6437, cloud=0.0, wind=12.2292, temperature=14.1397, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:27:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:28:14.383 [DEBUG] [Thread-172202] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:28:14.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:28:14.479 [DEBUG] [Thread-172205] [transport.py] [_log()] starting thread (client mode): 0xae561bd0
2026-04-11T15:28:14.479 [DEBUG] [Thread-172205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:28:14.494 [DEBUG] [Thread-172205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:28:14.494 [INFO] [Thread-172205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:14.502 [DEBUG] [Thread-172205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] client lang: <none>
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] server lang: <none>
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] kex follows: False
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] Compression: none
2026-04-11T15:28:14.503 [DEBUG] [Thread-172205] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:28:14.560 [DEBUG] [Thread-172205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:28:14.561 [DEBUG] [Thread-172205] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:28:14.561 [DEBUG] [Thread-172205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:28:14.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:28:14.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:28:14.616 [DEBUG] [Thread-172205] [transport.py] [_log()] userauth is OK
2026-04-11T15:28:14.616 [DEBUG] [Thread-172205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:28:14.616 [DEBUG] [Thread-172205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:28:14.617 [DEBUG] [Thread-172205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:28:14.617 [DEBUG] [Thread-172205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:28:14.642 [INFO] [Thread-172205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:28:14.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:28:14.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:28:15.524 [DEBUG] [Thread-172205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:28:15.524 [DEBUG] [Thread-172205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:28:15.572 [DEBUG] [Thread-172205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:28:15.572 [DEBUG] [Thread-172205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:28:15.581 [DEBUG] [Thread-172205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:28:15.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:28:15.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-04-11T15:28:15.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:28:15.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:28:15.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:28:15.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:28:15.618 [DEBUG] [Thread-172205] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:28:19.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:19.119 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:20.374 [DEBUG] [Thread-172207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:35.429 [DEBUG] [Thread-172208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:28:45.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:28:45.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:28:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:28:46.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 28, 8), 0.093585, 99.6768, 0.0, 12.6173, 14.1894, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:28:46.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:28:08
2026-04-11T15:28:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:28:47.524 [DEBUG] [Thread-172209] [transport.py] [_log()] starting thread (client mode): 0xae561510
2026-04-11T15:28:47.524 [DEBUG] [Thread-172209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:28:47.545 [DEBUG] [Thread-172209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:28:47.545 [INFO] [Thread-172209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] client lang: <none>
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] server lang: <none>
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] kex follows: False
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] Compression: none
2026-04-11T15:28:47.548 [DEBUG] [Thread-172209] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:28:47.564 [DEBUG] [Thread-172209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:28:47.564 [DEBUG] [Thread-172209] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:28:47.565 [DEBUG] [Thread-172209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:28:47.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:28:47.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:28:47.567 [DEBUG] [Thread-172209] [transport.py] [_log()] userauth is OK
2026-04-11T15:28:47.567 [DEBUG] [Thread-172209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:28:47.567 [DEBUG] [Thread-172209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:28:47.567 [DEBUG] [Thread-172209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:28:47.567 [DEBUG] [Thread-172209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:28:47.582 [INFO] [Thread-172209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:28:47.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:28:48.359 [DEBUG] [Thread-172209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:28:48.360 [DEBUG] [Thread-172209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:28:48.360 [DEBUG] [Thread-172209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:28:48.401 [DEBUG] [Thread-172209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:28:48.401 [DEBUG] [Thread-172209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:28:48.405 [DEBUG] [Thread-172209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:28:48.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:28:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:28:48.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:28:48.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:28:48.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:28:48.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:28:48.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:28:48.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:28:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:28:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.561228 -999.00  +14.60  11.49     93  +13.50 1 3 1 3 1   888    0 0.64 -15.59 ----- 11.1 11.5 24.8 15.9 16.4 -1.1 16.3 -3.3 16.0 -2.4 16.1 -1.5
2026-04-11T15:28:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:28:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:28:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.561228
2026-04-11T15:28:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:28:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:28:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:28:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:28:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:28:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:28:08', tmtdew=0.093585, humidity=99.6768, cloud=0.0, wind=12.6173, temperature=14.1894, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:28:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:28:48.432 [DEBUG] [Thread-172209] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:28:48.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:28:48.525 [DEBUG] [Thread-172212] [transport.py] [_log()] starting thread (client mode): 0xa7951780
2026-04-11T15:28:48.526 [DEBUG] [Thread-172212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:28:48.540 [DEBUG] [Thread-172212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:28:48.540 [INFO] [Thread-172212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] client lang: <none>
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] server lang: <none>
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] kex follows: False
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] Compression: none
2026-04-11T15:28:48.548 [DEBUG] [Thread-172212] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:28:48.608 [DEBUG] [Thread-172212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:28:48.609 [DEBUG] [Thread-172212] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:28:48.609 [DEBUG] [Thread-172212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:28:48.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:28:48.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:28:48.665 [DEBUG] [Thread-172212] [transport.py] [_log()] userauth is OK
2026-04-11T15:28:48.665 [DEBUG] [Thread-172212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:28:48.665 [DEBUG] [Thread-172212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:28:48.665 [DEBUG] [Thread-172212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:28:48.666 [DEBUG] [Thread-172212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:28:48.687 [INFO] [Thread-172212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:28: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-04-11T15:28:48.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:28:49.529 [DEBUG] [Thread-172212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:28:49.529 [DEBUG] [Thread-172212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:28:49.577 [DEBUG] [Thread-172212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:28:49.577 [DEBUG] [Thread-172212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:28:49.586 [DEBUG] [Thread-172212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:28:49.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:28:49.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-04-11T15:28:49.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-04-11T15:28:49.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:28:49.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:28:49.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:28:49.623 [DEBUG] [Thread-172212] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:28:50.466 [DEBUG] [Thread-172214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:05.518 [DEBUG] [Thread-172215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:13.156 [DEBUG] [Thread-172216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:19.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:19.262 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:29:19.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:29:19.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-04-11T15:29:20.555 [DEBUG] [Thread-172217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 28, 44), 0.07683, 99.4199, 0.0, 14.5037, 14.6777, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:29:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:28:44
2026-04-11T15:29:21.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:29:21.481 [DEBUG] [Thread-172218] [transport.py] [_log()] starting thread (client mode): 0xae5e4e80
2026-04-11T15:29:21.481 [DEBUG] [Thread-172218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:29:21.504 [DEBUG] [Thread-172218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:29:21.504 [INFO] [Thread-172218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] client lang: <none>
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] server lang: <none>
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] kex follows: False
2026-04-11T15:29:21.506 [DEBUG] [Thread-172218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:29:21.507 [DEBUG] [Thread-172218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:29:21.507 [DEBUG] [Thread-172218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:29:21.507 [DEBUG] [Thread-172218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:29:21.507 [DEBUG] [Thread-172218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:29:21.507 [DEBUG] [Thread-172218] [transport.py] [_log()] Compression: none
2026-04-11T15:29:21.507 [DEBUG] [Thread-172218] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:29:21.527 [DEBUG] [Thread-172218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:29:21.527 [DEBUG] [Thread-172218] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:29:21.528 [DEBUG] [Thread-172218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:29:21.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:29:21.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:29:21.530 [DEBUG] [Thread-172218] [transport.py] [_log()] userauth is OK
2026-04-11T15:29:21.530 [DEBUG] [Thread-172218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:29:21.530 [DEBUG] [Thread-172218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:29:21.530 [DEBUG] [Thread-172218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:29:21.530 [DEBUG] [Thread-172218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:29:21.554 [INFO] [Thread-172218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:29:21.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:29:22.307 [DEBUG] [Thread-172218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:29:22.307 [DEBUG] [Thread-172218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:29:22.307 [DEBUG] [Thread-172218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:29:22.348 [DEBUG] [Thread-172218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:29:22.348 [DEBUG] [Thread-172218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:29:22.353 [DEBUG] [Thread-172218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:29:22.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:29:22.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:29:22.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:29:22.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:29:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:29:22.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:29:22.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:29:22.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:29:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:29:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.561922 -999.00  +14.50  11.64     93  +13.50 1 3 1 3 1   888    0 0.65 -13.63 ----- 16.4 11.6 14.4 15.7 16.3 -0.9 16.1 -2.6 15.9 -1.5 15.9 -2.0
2026-04-11T15:29:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:29:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:29:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.561922
2026-04-11T15:29:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:29:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:29:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:29:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:29:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:29:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:28:44', tmtdew=0.07683, humidity=99.4199, cloud=0.0, wind=14.5037, temperature=14.6777, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:29:10.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:29:22.383 [DEBUG] [Thread-172218] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:29:22.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:29:22.480 [DEBUG] [Thread-172221] [transport.py] [_log()] starting thread (client mode): 0xae5619f0
2026-04-11T15:29:22.480 [DEBUG] [Thread-172221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:29:22.498 [DEBUG] [Thread-172221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:29:22.499 [INFO] [Thread-172221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:22.509 [DEBUG] [Thread-172221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] client lang: <none>
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] server lang: <none>
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] kex follows: False
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] Compression: none
2026-04-11T15:29:22.510 [DEBUG] [Thread-172221] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:29:22.565 [DEBUG] [Thread-172221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:29:22.566 [DEBUG] [Thread-172221] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:29:22.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:29:22.567 [DEBUG] [Thread-172221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:29:22.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:29:22.621 [DEBUG] [Thread-172221] [transport.py] [_log()] userauth is OK
2026-04-11T15:29:22.621 [DEBUG] [Thread-172221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:29:22.621 [DEBUG] [Thread-172221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:29:22.622 [DEBUG] [Thread-172221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:29:22.622 [DEBUG] [Thread-172221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:29:22.640 [INFO] [Thread-172221] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:29:22.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:29:22.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:29:23.485 [DEBUG] [Thread-172221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:29:23.485 [DEBUG] [Thread-172221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:29:23.533 [DEBUG] [Thread-172221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:29:23.533 [DEBUG] [Thread-172221] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:29:23.542 [DEBUG] [Thread-172221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:29:23.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:29:23.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:29:23.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:29:23.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:29:23.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:29:23.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:29:23.585 [DEBUG] [Thread-172221] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:29:35.592 [DEBUG] [Thread-172223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:50.648 [DEBUG] [Thread-172224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:29:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:29:53.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:29:53.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-04-11T15:29:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 29, 19), 0.08067, 99.7597, 0.0, 12.2461, 14.2888, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:29:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:29:19
2026-04-11T15:29:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:29:55.399 [DEBUG] [Thread-172225] [transport.py] [_log()] starting thread (client mode): 0xae5603d0
2026-04-11T15:29:55.399 [DEBUG] [Thread-172225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:29:55.415 [DEBUG] [Thread-172225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:29:55.415 [INFO] [Thread-172225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] client lang: <none>
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] server lang: <none>
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] kex follows: False
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] Compression: none
2026-04-11T15:29:55.418 [DEBUG] [Thread-172225] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:29:55.431 [DEBUG] [Thread-172225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:29:55.432 [DEBUG] [Thread-172225] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:29:55.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:29:55.432 [DEBUG] [Thread-172225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:29:55.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:29:55.433 [DEBUG] [Thread-172225] [transport.py] [_log()] userauth is OK
2026-04-11T15:29:55.433 [DEBUG] [Thread-172225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:29:55.433 [DEBUG] [Thread-172225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:29:55.433 [DEBUG] [Thread-172225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:29:55.433 [DEBUG] [Thread-172225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:29:55.446 [INFO] [Thread-172225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:29:55.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:29:56.077 [DEBUG] [Thread-172225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:29:56.078 [DEBUG] [Thread-172225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:29:56.078 [DEBUG] [Thread-172225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:29:56.118 [DEBUG] [Thread-172225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:29:56.118 [DEBUG] [Thread-172225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:29:56.120 [DEBUG] [Thread-172225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:29:56.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:29:56.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:29:56.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:29:56.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:29:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:29:56.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:29:56.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.562269 -999.00  +14.40  13.48     93  +13.40 1 3 1 3 1   888    0 0.70 -12.67 ----- 9.2 13.5 33.8 17.7 16.1 -0.9 16.1 -3.4 15.7 -1.4 15.9 -1.6
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.562269
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:29:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:29:19', tmtdew=0.08067, humidity=99.7597, cloud=0.0, wind=12.2461, temperature=14.2888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:29:40.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:29:56.140 [DEBUG] [Thread-172225] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:29:56.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:29:56.222 [DEBUG] [Thread-172228] [transport.py] [_log()] starting thread (client mode): 0xae5639a0
2026-04-11T15:29:56.222 [DEBUG] [Thread-172228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:29:56.236 [DEBUG] [Thread-172228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:29:56.236 [INFO] [Thread-172228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:29:56.244 [DEBUG] [Thread-172228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:29:56.244 [DEBUG] [Thread-172228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:29:56.244 [DEBUG] [Thread-172228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:29:56.244 [DEBUG] [Thread-172228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:56.244 [DEBUG] [Thread-172228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:29:56.244 [DEBUG] [Thread-172228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] client lang: <none>
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] server lang: <none>
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] kex follows: False
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:29:56.245 [DEBUG] [Thread-172228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:29:56.246 [DEBUG] [Thread-172228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:29:56.246 [DEBUG] [Thread-172228] [transport.py] [_log()] Compression: none
2026-04-11T15:29:56.246 [DEBUG] [Thread-172228] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:29:56.302 [DEBUG] [Thread-172228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:29:56.303 [DEBUG] [Thread-172228] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:29:56.304 [DEBUG] [Thread-172228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:29:56.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:29:56.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:29:56.361 [DEBUG] [Thread-172228] [transport.py] [_log()] userauth is OK
2026-04-11T15:29:56.362 [DEBUG] [Thread-172228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:29:56.362 [DEBUG] [Thread-172228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:29:56.362 [DEBUG] [Thread-172228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:29:56.362 [DEBUG] [Thread-172228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:29:56.381 [INFO] [Thread-172228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:29:56.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:29:56.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:29:57.283 [DEBUG] [Thread-172228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:29:57.284 [DEBUG] [Thread-172228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:29:57.332 [DEBUG] [Thread-172228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:29:57.332 [DEBUG] [Thread-172228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:29:57.341 [DEBUG] [Thread-172228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:29:57.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:29:57.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-04-11T15:29:57.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:29:57.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:29:57.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:29:57.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:29:57.379 [DEBUG] [Thread-172228] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:30:05.683 [DEBUG] [Thread-172230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:30:13.192 [DEBUG] [Thread-172231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:30:19.402 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:30:19.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:30:20.744 [DEBUG] [Thread-172232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:30:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:30:27.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:30:27.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-04-11T15:30:28.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 29, 55), 0.035825, 99.7265, 0.0, 9.45828, 14.272, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:30:28.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:29:55
2026-04-11T15:30:29.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:30:29.232 [DEBUG] [Thread-172233] [transport.py] [_log()] starting thread (client mode): 0xae535450
2026-04-11T15:30:29.232 [DEBUG] [Thread-172233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:30:29.247 [DEBUG] [Thread-172233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:30:29.248 [INFO] [Thread-172233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] client lang: <none>
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] server lang: <none>
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] kex follows: False
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] Compression: none
2026-04-11T15:30:29.251 [DEBUG] [Thread-172233] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:30:29.268 [DEBUG] [Thread-172233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:30:29.269 [DEBUG] [Thread-172233] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:30:29.269 [DEBUG] [Thread-172233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:30:29.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:30:29.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:30:29.271 [DEBUG] [Thread-172233] [transport.py] [_log()] userauth is OK
2026-04-11T15:30:29.272 [DEBUG] [Thread-172233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:30:29.272 [DEBUG] [Thread-172233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:30:29.272 [DEBUG] [Thread-172233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:30:29.272 [DEBUG] [Thread-172233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:30:29.296 [INFO] [Thread-172233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:30:29.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:30:29.910 [DEBUG] [Thread-172233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:30:29.910 [DEBUG] [Thread-172233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:30:29.911 [DEBUG] [Thread-172233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:30:29.951 [DEBUG] [Thread-172233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:30:29.951 [DEBUG] [Thread-172233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:30:29.954 [DEBUG] [Thread-172233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:30:29.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:30:29.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:30:29.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:30:29.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:30:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:30:29.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:30:29.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:30:29.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:30:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:30:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.562616 -999.00  +14.40  13.68     93  +13.40 1 3 1 3 1   888    0 0.74 -11.99 ----- 13.4 13.7 22.0 16.8 16.1 -0.9 16.0 -3.0 15.7 -1.3 15.7 -2.5
2026-04-11T15:30:29.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:30:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:30:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.562616
2026-04-11T15:30:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:30:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:30:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:30:29.976 [DEBUG] [Thread-172233] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:30:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:30:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:30:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:29:55', tmtdew=0.035825, humidity=99.7265, cloud=0.0, wind=9.45828, temperature=14.272, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:30:10.022', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:30:30.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:30:30.087 [DEBUG] [Thread-172236] [transport.py] [_log()] starting thread (client mode): 0xa7952110
2026-04-11T15:30:30.087 [DEBUG] [Thread-172236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:30:30.101 [DEBUG] [Thread-172236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:30:30.101 [INFO] [Thread-172236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] client lang: <none>
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] server lang: <none>
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] kex follows: False
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:30:30.109 [DEBUG] [Thread-172236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:30:30.110 [DEBUG] [Thread-172236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:30:30.110 [DEBUG] [Thread-172236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:30:30.110 [DEBUG] [Thread-172236] [transport.py] [_log()] Compression: none
2026-04-11T15:30:30.110 [DEBUG] [Thread-172236] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:30:30.166 [DEBUG] [Thread-172236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:30:30.167 [DEBUG] [Thread-172236] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:30:30.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:30:30.168 [DEBUG] [Thread-172236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:30:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:30:30.222 [DEBUG] [Thread-172236] [transport.py] [_log()] userauth is OK
2026-04-11T15:30:30.222 [DEBUG] [Thread-172236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:30:30.223 [DEBUG] [Thread-172236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:30:30.223 [DEBUG] [Thread-172236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:30:30.223 [DEBUG] [Thread-172236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:30:30.241 [INFO] [Thread-172236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:30:30.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:30:30.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:30:31.063 [DEBUG] [Thread-172236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:30:31.063 [DEBUG] [Thread-172236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:30:31.112 [DEBUG] [Thread-172236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:30:31.112 [DEBUG] [Thread-172236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:30:31.126 [DEBUG] [Thread-172236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:30:31.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:30:31.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-04-11T15:30:31.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:30:31.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:30:31.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:30:31.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:30:31.163 [DEBUG] [Thread-172236] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:30:35.782 [DEBUG] [Thread-172238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:30:50.835 [DEBUG] [Thread-172239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:01.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:31:01.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:31:01.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-04-11T15:31:02.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 30, 30), 0.03324, 99.7431, 0.0, 10.2874, 14.3051, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:31:02.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:30:30
2026-04-11T15:31:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:31:03.067 [DEBUG] [Thread-172240] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T15:31:03.068 [DEBUG] [Thread-172240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:31:03.085 [DEBUG] [Thread-172240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:31:03.085 [INFO] [Thread-172240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] client lang: <none>
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] server lang: <none>
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] kex follows: False
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:31:03.089 [DEBUG] [Thread-172240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:31:03.090 [DEBUG] [Thread-172240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:31:03.090 [DEBUG] [Thread-172240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:31:03.090 [DEBUG] [Thread-172240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:31:03.090 [DEBUG] [Thread-172240] [transport.py] [_log()] Compression: none
2026-04-11T15:31:03.090 [DEBUG] [Thread-172240] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:31:03.098 [DEBUG] [Thread-172240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:31:03.098 [DEBUG] [Thread-172240] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:31:03.099 [DEBUG] [Thread-172240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:31:03.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:31:03.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:31:03.100 [DEBUG] [Thread-172240] [transport.py] [_log()] userauth is OK
2026-04-11T15:31:03.100 [DEBUG] [Thread-172240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:31:03.100 [DEBUG] [Thread-172240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:31:03.101 [DEBUG] [Thread-172240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:31:03.101 [DEBUG] [Thread-172240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:31:03.118 [INFO] [Thread-172240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:31:03.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:31:03.724 [DEBUG] [Thread-172240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:31:03.724 [DEBUG] [Thread-172240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:31:03.725 [DEBUG] [Thread-172240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:31:03.765 [DEBUG] [Thread-172240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:31:03.765 [DEBUG] [Thread-172240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:31:03.769 [DEBUG] [Thread-172240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:31:03.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:31:03.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:31:03.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:31:03.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:31:03.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:31:03.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:31:03.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:31:03.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:31:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:31:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.562964 -999.00  +14.40  13.94     93  +13.40 1 3 1 3 1   888    0 0.74 -10.88 ----- 12.4 13.9 39.2 17.1 16.0 -0.7 15.9 -2.7 15.5 -1.1 15.7 -1.6
2026-04-11T15:31:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:31:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:31:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.562964
2026-04-11T15:31:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:31:03.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:31:03.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:31:03.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:31:03.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:31:03.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:30:30', tmtdew=0.03324, humidity=99.7431, cloud=0.0, wind=10.2874, temperature=14.3051, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:30:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:31:03.787 [DEBUG] [Thread-172240] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:31:03.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:31:03.879 [DEBUG] [Thread-172243] [transport.py] [_log()] starting thread (client mode): 0xae5e5900
2026-04-11T15:31:03.880 [DEBUG] [Thread-172243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:31:03.894 [DEBUG] [Thread-172243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:31:03.894 [INFO] [Thread-172243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:31:03.902 [DEBUG] [Thread-172243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:31:03.902 [DEBUG] [Thread-172243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] client lang: <none>
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] server lang: <none>
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] kex follows: False
2026-04-11T15:31:03.903 [DEBUG] [Thread-172243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:31:03.904 [DEBUG] [Thread-172243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:31:03.904 [DEBUG] [Thread-172243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:31:03.904 [DEBUG] [Thread-172243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:31:03.904 [DEBUG] [Thread-172243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:31:03.904 [DEBUG] [Thread-172243] [transport.py] [_log()] Compression: none
2026-04-11T15:31:03.904 [DEBUG] [Thread-172243] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:31:03.964 [DEBUG] [Thread-172243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:31:03.965 [DEBUG] [Thread-172243] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:31:03.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:31:03.967 [DEBUG] [Thread-172243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:31:03.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:31:04.023 [DEBUG] [Thread-172243] [transport.py] [_log()] userauth is OK
2026-04-11T15:31:04.023 [DEBUG] [Thread-172243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:31:04.024 [DEBUG] [Thread-172243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:31:04.024 [DEBUG] [Thread-172243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:31:04.024 [DEBUG] [Thread-172243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:31:04.043 [INFO] [Thread-172243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:31:04.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:31:04.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:31:04.874 [DEBUG] [Thread-172243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:31:04.875 [DEBUG] [Thread-172243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:31:04.922 [DEBUG] [Thread-172243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:31:04.922 [DEBUG] [Thread-172243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:31:04.932 [DEBUG] [Thread-172243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:31:04.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:31:04.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:31:04.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:31:04.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:31:04.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:31:04.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:31:04.969 [DEBUG] [Thread-172243] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:31:05.877 [DEBUG] [Thread-172245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:13.225 [DEBUG] [Thread-172246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:19.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:19.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:20.929 [DEBUG] [Thread-172247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:34.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:31:34.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:31:34.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-04-11T15:31:35.970 [DEBUG] [Thread-172248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:31:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 31, 5), 0.035825, 99.7265, 0.0, 11.628, 14.272, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:31:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:31:05
2026-04-11T15:31:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:31:36.832 [DEBUG] [Thread-172249] [transport.py] [_log()] starting thread (client mode): 0xae5e7400
2026-04-11T15:31:36.832 [DEBUG] [Thread-172249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:31:36.853 [DEBUG] [Thread-172249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:31:36.853 [INFO] [Thread-172249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:31:36.856 [DEBUG] [Thread-172249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] client lang: <none>
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] server lang: <none>
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] kex follows: False
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:31:36.857 [DEBUG] [Thread-172249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:31:36.858 [DEBUG] [Thread-172249] [transport.py] [_log()] Compression: none
2026-04-11T15:31:36.858 [DEBUG] [Thread-172249] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:31:36.874 [DEBUG] [Thread-172249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:31:36.874 [DEBUG] [Thread-172249] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:31:36.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:31:36.875 [DEBUG] [Thread-172249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:31:36.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:31:36.877 [DEBUG] [Thread-172249] [transport.py] [_log()] userauth is OK
2026-04-11T15:31:36.877 [DEBUG] [Thread-172249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:31:36.877 [DEBUG] [Thread-172249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:31:36.877 [DEBUG] [Thread-172249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:31:36.878 [DEBUG] [Thread-172249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:31:36.900 [INFO] [Thread-172249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:31:36.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:31:37.506 [DEBUG] [Thread-172249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:31:37.507 [DEBUG] [Thread-172249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:31:37.507 [DEBUG] [Thread-172249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:31:37.548 [DEBUG] [Thread-172249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:31:37.548 [DEBUG] [Thread-172249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:31:37.552 [DEBUG] [Thread-172249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:31:37.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:31:37.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:31:37.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:31:37.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:31:37.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:31:37.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:31:37.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:31:37.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:31:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:31:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.563311 -999.00  +14.50  11.64     94  +13.60 1 3 1 3 1   888    0 0.73 -10.64 ----- 12.4 11.6 18.4 13.2 16.0 -0.6 15.9 -1.4 15.6 -0.5 15.7 -1.3
2026-04-11T15:31:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:31:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:31:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.563311
2026-04-11T15:31:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:31:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:31:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:31:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:31:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:31:37.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:31:05', tmtdew=0.035825, humidity=99.7265, cloud=0.0, wind=11.628, temperature=14.272, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:31:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:31:37.578 [DEBUG] [Thread-172249] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:31:37.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:31:37.674 [DEBUG] [Thread-172252] [transport.py] [_log()] starting thread (client mode): 0xae5353c0
2026-04-11T15:31:37.674 [DEBUG] [Thread-172252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:31:37.691 [DEBUG] [Thread-172252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:31:37.691 [INFO] [Thread-172252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] client lang: <none>
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] server lang: <none>
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] kex follows: False
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:31:37.702 [DEBUG] [Thread-172252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:31:37.703 [DEBUG] [Thread-172252] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:31:37.703 [DEBUG] [Thread-172252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:31:37.703 [DEBUG] [Thread-172252] [transport.py] [_log()] Compression: none
2026-04-11T15:31:37.703 [DEBUG] [Thread-172252] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:31:37.755 [DEBUG] [Thread-172252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:31:37.756 [DEBUG] [Thread-172252] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:31:37.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:31:37.757 [DEBUG] [Thread-172252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:31:37.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:31:37.811 [DEBUG] [Thread-172252] [transport.py] [_log()] userauth is OK
2026-04-11T15:31:37.811 [DEBUG] [Thread-172252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:31:37.811 [DEBUG] [Thread-172252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:31:37.812 [DEBUG] [Thread-172252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:31:37.812 [DEBUG] [Thread-172252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:31:37.832 [INFO] [Thread-172252] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:31:37.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:31:37.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:31:38.657 [DEBUG] [Thread-172252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:31:38.657 [DEBUG] [Thread-172252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:31:38.705 [DEBUG] [Thread-172252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:31:38.705 [DEBUG] [Thread-172252] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:31:38.714 [DEBUG] [Thread-172252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:31:38.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:31:38.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:31:38.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-04-11T15:31:38.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:31:38.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:31:38.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:31:38.751 [DEBUG] [Thread-172252] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:31:51.006 [DEBUG] [Thread-172254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:06.067 [DEBUG] [Thread-172255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:08.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:32:08.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:32:08.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-04-11T15:32:10.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 31, 41), 0.07168, 99.4531, 0.0, 13.163, 14.6445, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:32:10.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:31:41
2026-04-11T15:32:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:32:10.547 [DEBUG] [Thread-172256] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T15:32:10.547 [DEBUG] [Thread-172256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:32:10.570 [DEBUG] [Thread-172256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:32:10.571 [INFO] [Thread-172256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] client lang: <none>
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] server lang: <none>
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] kex follows: False
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] Compression: none
2026-04-11T15:32:10.572 [DEBUG] [Thread-172256] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:32:10.584 [DEBUG] [Thread-172256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:32:10.584 [DEBUG] [Thread-172256] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:32:10.584 [DEBUG] [Thread-172256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:32:10.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:32:10.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:32:10.586 [DEBUG] [Thread-172256] [transport.py] [_log()] userauth is OK
2026-04-11T15:32:10.586 [DEBUG] [Thread-172256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:32:10.586 [DEBUG] [Thread-172256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:32:10.586 [DEBUG] [Thread-172256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:32:10.586 [DEBUG] [Thread-172256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:32:10.600 [INFO] [Thread-172256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:32:10.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:32:11.203 [DEBUG] [Thread-172256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:32:11.204 [DEBUG] [Thread-172256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:32:11.204 [DEBUG] [Thread-172256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:32:11.245 [DEBUG] [Thread-172256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:32:11.245 [DEBUG] [Thread-172256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:32:11.248 [DEBUG] [Thread-172256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:32:11.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:32:11.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:32:11.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:32:11.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:32:11.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:32:11.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:32:11.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:32:11.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:32:11.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:32:11.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.563658 -999.00  +14.40  15.00     94  +13.50 1 3 1 3 1   888    0 0.78 -9.47 ----- 15.0 15.0 16.8 16.9 15.9 -0.7 15.8 -1.5 15.5 -0.7 15.6 -0.9
2026-04-11T15:32:11.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:32:11.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:32:11.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.563658
2026-04-11T15:32:11.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:32:11.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:32:11.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:32:11.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:32:11.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:32:11.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:31:41', tmtdew=0.07168, humidity=99.4531, cloud=0.0, wind=13.163, temperature=14.6445, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:31:40.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:32:11.268 [DEBUG] [Thread-172256] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:32:11.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:32:11.367 [DEBUG] [Thread-172259] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T15:32:11.367 [DEBUG] [Thread-172259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:32:11.382 [DEBUG] [Thread-172259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:32:11.383 [INFO] [Thread-172259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:11.390 [DEBUG] [Thread-172259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] client lang: <none>
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] server lang: <none>
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] kex follows: False
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] Compression: none
2026-04-11T15:32:11.391 [DEBUG] [Thread-172259] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:32:11.447 [DEBUG] [Thread-172259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:32:11.448 [DEBUG] [Thread-172259] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:32:11.448 [DEBUG] [Thread-172259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:32:11.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:32:11.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:32:11.508 [DEBUG] [Thread-172259] [transport.py] [_log()] userauth is OK
2026-04-11T15:32:11.508 [DEBUG] [Thread-172259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:32:11.508 [DEBUG] [Thread-172259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:32:11.508 [DEBUG] [Thread-172259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:32:11.509 [DEBUG] [Thread-172259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:32:11.528 [INFO] [Thread-172259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:32:11.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:32:11.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:32:12.380 [DEBUG] [Thread-172259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:32:12.381 [DEBUG] [Thread-172259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:32:12.430 [DEBUG] [Thread-172259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:32:12.430 [DEBUG] [Thread-172259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:32:12.442 [DEBUG] [Thread-172259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:32:12.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:32:12.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-04-11T15:32:12.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-04-11T15:32:12.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:32:12.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:32:12.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:32:12.478 [DEBUG] [Thread-172259] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:32:13.279 [DEBUG] [Thread-172261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:19.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:19.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:21.109 [DEBUG] [Thread-172262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:36.164 [DEBUG] [Thread-172263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:32:42.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:32:42.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:32:42.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-04-11T15:32:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 32, 16), 0.085835, 99.7265, 0.0, 10.0933, 14.2388, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:32:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:32:16
2026-04-11T15:32:44.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:32:44.368 [DEBUG] [Thread-172264] [transport.py] [_log()] starting thread (client mode): 0xae534bb0
2026-04-11T15:32:44.369 [DEBUG] [Thread-172264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:32:44.389 [DEBUG] [Thread-172264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:32:44.389 [INFO] [Thread-172264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:32:44.392 [DEBUG] [Thread-172264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:32:44.392 [DEBUG] [Thread-172264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] client lang: <none>
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] server lang: <none>
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] kex follows: False
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:32:44.393 [DEBUG] [Thread-172264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:32:44.394 [DEBUG] [Thread-172264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:32:44.394 [DEBUG] [Thread-172264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:32:44.394 [DEBUG] [Thread-172264] [transport.py] [_log()] Compression: none
2026-04-11T15:32:44.394 [DEBUG] [Thread-172264] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:32:44.409 [DEBUG] [Thread-172264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:32:44.410 [DEBUG] [Thread-172264] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:32:44.410 [DEBUG] [Thread-172264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:32:44.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:32:44.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:32:44.412 [DEBUG] [Thread-172264] [transport.py] [_log()] userauth is OK
2026-04-11T15:32:44.413 [DEBUG] [Thread-172264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:32:44.413 [DEBUG] [Thread-172264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:32:44.413 [DEBUG] [Thread-172264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:32:44.413 [DEBUG] [Thread-172264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:32:44.436 [INFO] [Thread-172264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:32:44.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:32:45.095 [DEBUG] [Thread-172264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:32:45.095 [DEBUG] [Thread-172264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:32:45.095 [DEBUG] [Thread-172264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:32:45.136 [DEBUG] [Thread-172264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:32:45.136 [DEBUG] [Thread-172264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:32:45.140 [DEBUG] [Thread-172264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:32:45.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:32:45.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:32:45.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:32:45.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:32:45.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:32:45.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:32:45.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:32:45.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:32:45.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:32:45.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.564006 -999.00  +14.40  15.43     94  +13.40 1 3 1 3 1   888    0 0.79 -8.90 ----- 11.2 15.4 25.6 17.6 15.8 -0.9 15.8 -1.6 15.4 -0.4 15.5 -1.2
2026-04-11T15:32:45.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:32:45.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:32:45.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.564006
2026-04-11T15:32:45.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:32:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:32:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:32:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:32:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:32:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:32:16', tmtdew=0.085835, humidity=99.7265, cloud=0.0, wind=10.0933, temperature=14.2388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:32:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:32:45.168 [DEBUG] [Thread-172264] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:32:45.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:32:45.262 [DEBUG] [Thread-172267] [transport.py] [_log()] starting thread (client mode): 0xb0feadd0
2026-04-11T15:32:45.262 [DEBUG] [Thread-172267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:32:45.277 [DEBUG] [Thread-172267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:32:45.278 [INFO] [Thread-172267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] client lang: <none>
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] server lang: <none>
2026-04-11T15:32:45.286 [DEBUG] [Thread-172267] [transport.py] [_log()] kex follows: False
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] Compression: none
2026-04-11T15:32:45.287 [DEBUG] [Thread-172267] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:32:45.348 [DEBUG] [Thread-172267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:32:45.349 [DEBUG] [Thread-172267] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:32:45.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:32:45.350 [DEBUG] [Thread-172267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:32:45.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:32:45.404 [DEBUG] [Thread-172267] [transport.py] [_log()] userauth is OK
2026-04-11T15:32:45.405 [DEBUG] [Thread-172267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:32:45.405 [DEBUG] [Thread-172267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:32:45.405 [DEBUG] [Thread-172267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:32:45.405 [DEBUG] [Thread-172267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:32:45.423 [INFO] [Thread-172267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:32:45.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:32:45.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:32:46.246 [DEBUG] [Thread-172267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:32:46.247 [DEBUG] [Thread-172267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:32:46.294 [DEBUG] [Thread-172267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:32:46.294 [DEBUG] [Thread-172267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:32:46.304 [DEBUG] [Thread-172267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:32:46.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:32:46.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:32:46.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-04-11T15:32:46.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:32:46.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:32:46.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:32:46.340 [DEBUG] [Thread-172267] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:32:51.201 [DEBUG] [Thread-172269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:06.255 [DEBUG] [Thread-172270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:13.312 [DEBUG] [Thread-172271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:33:16.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:33:16.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-04-11T15:33:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 32, 52), 0.07167, 99.453, 0.0, 16.6205, 14.7108, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:33:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:32:52
2026-04-11T15:33:18.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:33:18.218 [DEBUG] [Thread-172272] [transport.py] [_log()] starting thread (client mode): 0xae5e7b50
2026-04-11T15:33:18.219 [DEBUG] [Thread-172272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:33:18.237 [DEBUG] [Thread-172272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:33:18.237 [INFO] [Thread-172272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:33:18.247 [DEBUG] [Thread-172272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] client lang: <none>
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] server lang: <none>
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] kex follows: False
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] Compression: none
2026-04-11T15:33:18.248 [DEBUG] [Thread-172272] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:33:18.266 [DEBUG] [Thread-172272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:33:18.267 [DEBUG] [Thread-172272] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:33:18.267 [DEBUG] [Thread-172272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:33:18.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:33:18.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:33:18.270 [DEBUG] [Thread-172272] [transport.py] [_log()] userauth is OK
2026-04-11T15:33:18.270 [DEBUG] [Thread-172272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:33:18.270 [DEBUG] [Thread-172272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:33:18.270 [DEBUG] [Thread-172272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:33:18.270 [DEBUG] [Thread-172272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:33:18.292 [INFO] [Thread-172272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:33:18.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:33:18.939 [DEBUG] [Thread-172272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:33:18.939 [DEBUG] [Thread-172272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:33:18.939 [DEBUG] [Thread-172272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:33:18.980 [DEBUG] [Thread-172272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:33:18.980 [DEBUG] [Thread-172272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:33:18.984 [DEBUG] [Thread-172272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:33:18.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:33:18.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:33:18.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:33:19.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:33:19.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:33:19.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:33:19.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:33:19.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:33:19.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:33:19.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.564700 -999.00  +14.40  10.51     94  +13.50 1 3 1 3 1   887    0 0.82 -7.55 ----- 11.0 10.5 10.6 15.2 15.7 -0.8 15.7 -1.8 15.3 -0.6 15.4 -0.6
2026-04-11T15:33:19.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:33:19.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:33:19.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.564700
2026-04-11T15:33:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:33:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:33:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:33:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:33:19.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:33:19.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:32:52', tmtdew=0.07167, humidity=99.453, cloud=0.0, wind=16.6205, temperature=14.7108, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:33:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:33:19.010 [DEBUG] [Thread-172272] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:33:19.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:33:19.108 [DEBUG] [Thread-172275] [transport.py] [_log()] starting thread (client mode): 0xae519090
2026-04-11T15:33:19.108 [DEBUG] [Thread-172275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:33:19.123 [DEBUG] [Thread-172275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:33:19.123 [INFO] [Thread-172275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] client lang: <none>
2026-04-11T15:33:19.131 [DEBUG] [Thread-172275] [transport.py] [_log()] server lang: <none>
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] kex follows: False
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] Compression: none
2026-04-11T15:33:19.132 [DEBUG] [Thread-172275] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:33:19.193 [DEBUG] [Thread-172275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:33:19.194 [DEBUG] [Thread-172275] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:33:19.195 [DEBUG] [Thread-172275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:33:19.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:33:19.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:33:19.253 [DEBUG] [Thread-172275] [transport.py] [_log()] userauth is OK
2026-04-11T15:33:19.254 [DEBUG] [Thread-172275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:33:19.254 [DEBUG] [Thread-172275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:33:19.254 [DEBUG] [Thread-172275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:33:19.254 [DEBUG] [Thread-172275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:33:19.273 [INFO] [Thread-172275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:33:19.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:33:19.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:33:19.826 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:19.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:20.077 [DEBUG] [Thread-172275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:33:20.077 [DEBUG] [Thread-172275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:33:20.125 [DEBUG] [Thread-172275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:33:20.125 [DEBUG] [Thread-172275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:33:20.135 [DEBUG] [Thread-172275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:33:20.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:33:20.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:33:20.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:33:20.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:33:20.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:33:20.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:33:20.170 [DEBUG] [Thread-172275] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:33:21.295 [DEBUG] [Thread-172277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:36.350 [DEBUG] [Thread-172278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:33:50.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:33:50.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-04-11T15:33:51.382 [DEBUG] [Thread-172279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:33:51.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 33, 27), 0.04617, 99.6602, 0.0, 12.5989, 14.2222, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:33:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:33:27
2026-04-11T15:33:51.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:33:52.012 [DEBUG] [Thread-172280] [transport.py] [_log()] starting thread (client mode): 0xae536e00
2026-04-11T15:33:52.012 [DEBUG] [Thread-172280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:33:52.033 [DEBUG] [Thread-172280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:33:52.033 [INFO] [Thread-172280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:33:52.036 [DEBUG] [Thread-172280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:33:52.036 [DEBUG] [Thread-172280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:33:52.036 [DEBUG] [Thread-172280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:33:52.036 [DEBUG] [Thread-172280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:52.036 [DEBUG] [Thread-172280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] client lang: <none>
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] server lang: <none>
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] kex follows: False
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] Compression: none
2026-04-11T15:33:52.037 [DEBUG] [Thread-172280] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:33:52.046 [DEBUG] [Thread-172280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:33:52.046 [DEBUG] [Thread-172280] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:33:52.047 [DEBUG] [Thread-172280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:33:52.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:33:52.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:33:52.048 [DEBUG] [Thread-172280] [transport.py] [_log()] userauth is OK
2026-04-11T15:33:52.049 [DEBUG] [Thread-172280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:33:52.049 [DEBUG] [Thread-172280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:33:52.049 [DEBUG] [Thread-172280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:33:52.049 [DEBUG] [Thread-172280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:33:52.067 [INFO] [Thread-172280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:33:52.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:33:52.702 [DEBUG] [Thread-172280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:33:52.702 [DEBUG] [Thread-172280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:33:52.702 [DEBUG] [Thread-172280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:33:52.743 [DEBUG] [Thread-172280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:33:52.743 [DEBUG] [Thread-172280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:33:52.747 [DEBUG] [Thread-172280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:33:52.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:33:52.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:33:52.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:33:52.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:33:52.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:33:52.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:33:52.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:33:52.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:33:52.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:33:52.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.565047 -999.00  +14.30  14.98     94  +13.40 1 3 1 3 1   887    0 0.84 -6.68 ----- 11.7 15.0 13.4 16.9 15.7 -1.1 15.7 -2.2 15.3 -0.7 15.3 -0.6
2026-04-11T15:33:52.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:33:52.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:33:52.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.565047
2026-04-11T15:33:52.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:33:52.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:33:52.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:33:52.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:33:52.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:33:52.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:33:27', tmtdew=0.04617, humidity=99.6602, cloud=0.0, wind=12.5989, temperature=14.2222, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:33:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:33:52.772 [DEBUG] [Thread-172280] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:33:52.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:33:52.866 [DEBUG] [Thread-172283] [transport.py] [_log()] starting thread (client mode): 0xae5198d0
2026-04-11T15:33:52.866 [DEBUG] [Thread-172283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:33:52.882 [DEBUG] [Thread-172283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:33:52.882 [INFO] [Thread-172283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] client lang: <none>
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] server lang: <none>
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] kex follows: False
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:33:52.890 [DEBUG] [Thread-172283] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:33:52.891 [DEBUG] [Thread-172283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:33:52.891 [DEBUG] [Thread-172283] [transport.py] [_log()] Compression: none
2026-04-11T15:33:52.891 [DEBUG] [Thread-172283] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:33:52.950 [DEBUG] [Thread-172283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:33:52.950 [DEBUG] [Thread-172283] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:33:52.951 [DEBUG] [Thread-172283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:33:52.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:33:52.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:33:53.009 [DEBUG] [Thread-172283] [transport.py] [_log()] userauth is OK
2026-04-11T15:33:53.010 [DEBUG] [Thread-172283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:33:53.010 [DEBUG] [Thread-172283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:33:53.010 [DEBUG] [Thread-172283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:33:53.010 [DEBUG] [Thread-172283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:33:53.028 [INFO] [Thread-172283] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:33:53.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:33:53.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:33:53.845 [DEBUG] [Thread-172283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:33:53.845 [DEBUG] [Thread-172283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:33:53.893 [DEBUG] [Thread-172283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:33:53.893 [DEBUG] [Thread-172283] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:33:53.904 [DEBUG] [Thread-172283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:33:53.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:33:53.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-04-11T15:33:53.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-04-11T15:33:53.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:33:53.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:33:53.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:33:53.942 [DEBUG] [Thread-172283] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:34:06.418 [DEBUG] [Thread-172285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:13.357 [DEBUG] [Thread-172286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:19.976 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:19.977 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:21.471 [DEBUG] [Thread-172287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:34:23.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:34:23.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-04-11T15:34:25.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 34, 2), 0.046165, 99.6602, 0.0, 13.5338, 14.1559, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:34:25.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:34:02
2026-04-11T15:34:25.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:34:25.775 [DEBUG] [Thread-172288] [transport.py] [_log()] starting thread (client mode): 0xae536dd0
2026-04-11T15:34:25.776 [DEBUG] [Thread-172288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:34:25.796 [DEBUG] [Thread-172288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:34:25.796 [INFO] [Thread-172288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] client lang: <none>
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] server lang: <none>
2026-04-11T15:34:25.799 [DEBUG] [Thread-172288] [transport.py] [_log()] kex follows: False
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] Compression: none
2026-04-11T15:34:25.800 [DEBUG] [Thread-172288] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:34:25.818 [DEBUG] [Thread-172288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:34:25.819 [DEBUG] [Thread-172288] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:34:25.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:34:25.820 [DEBUG] [Thread-172288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:34:25.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:34:25.822 [DEBUG] [Thread-172288] [transport.py] [_log()] userauth is OK
2026-04-11T15:34:25.822 [DEBUG] [Thread-172288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:34:25.823 [DEBUG] [Thread-172288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:34:25.823 [DEBUG] [Thread-172288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:34:25.823 [DEBUG] [Thread-172288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:34:25.841 [INFO] [Thread-172288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:34:25.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:34:26.476 [DEBUG] [Thread-172288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:34:26.476 [DEBUG] [Thread-172288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:34:26.477 [DEBUG] [Thread-172288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:34:26.517 [DEBUG] [Thread-172288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:34:26.517 [DEBUG] [Thread-172288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:34:26.520 [DEBUG] [Thread-172288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:34:26.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:34:26.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:34:26.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:34:26.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:34:26.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:34:26.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:34:26.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:34:26.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:34:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:34:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.565394 -999.00  +14.20   9.04     94  +13.30 1 3 1 3 1   887    0 0.85 -6.52 ----- 12.6 9.0 339.2 18.7 15.6 -1.1 15.6 -2.4 15.2 -0.7 15.2 -0.2
2026-04-11T15:34:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:34:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:34:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.565394
2026-04-11T15:34:26.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:34:26.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:34:26.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:34:26.547 [DEBUG] [Thread-172288] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:34:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:34:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:34:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:34:02', tmtdew=0.046165, humidity=99.6602, cloud=0.0, wind=13.5338, temperature=14.1559, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:34:10.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:34:26.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:34:26.642 [DEBUG] [Thread-172291] [transport.py] [_log()] starting thread (client mode): 0xae5081f0
2026-04-11T15:34:26.642 [DEBUG] [Thread-172291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:34:26.657 [DEBUG] [Thread-172291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:34:26.657 [INFO] [Thread-172291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:34:26.664 [DEBUG] [Thread-172291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:34:26.664 [DEBUG] [Thread-172291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] client lang: <none>
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] server lang: <none>
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] kex follows: False
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] Compression: none
2026-04-11T15:34:26.665 [DEBUG] [Thread-172291] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:34:26.726 [DEBUG] [Thread-172291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:34:26.727 [DEBUG] [Thread-172291] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:34:26.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:34:26.728 [DEBUG] [Thread-172291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:34:26.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:34:26.782 [DEBUG] [Thread-172291] [transport.py] [_log()] userauth is OK
2026-04-11T15:34:26.782 [DEBUG] [Thread-172291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:34:26.782 [DEBUG] [Thread-172291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:34:26.782 [DEBUG] [Thread-172291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:34:26.782 [DEBUG] [Thread-172291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:34:26.801 [INFO] [Thread-172291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:34: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-04-11T15:34:26.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:34:27.620 [DEBUG] [Thread-172291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:34:27.621 [DEBUG] [Thread-172291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:34:27.669 [DEBUG] [Thread-172291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:34:27.669 [DEBUG] [Thread-172291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:34:27.678 [DEBUG] [Thread-172291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:34:27.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:34:27.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:34:27.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:34:27.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:34:27.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:34:27.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:34:27.711 [DEBUG] [Thread-172291] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:34:36.508 [DEBUG] [Thread-172293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:51.563 [DEBUG] [Thread-172294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:34:57.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:34:57.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:34:57.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:34:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 34, 38), 0.10254, 99.2549, 0.0, 18.3845, 14.5124, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:34:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:34:38
2026-04-11T15:34:59.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:34:59.539 [DEBUG] [Thread-172295] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T15:34:59.539 [DEBUG] [Thread-172295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:34:59.558 [DEBUG] [Thread-172295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:34:59.558 [INFO] [Thread-172295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:34:59.561 [DEBUG] [Thread-172295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] client lang: <none>
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] server lang: <none>
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] kex follows: False
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] Compression: none
2026-04-11T15:34:59.562 [DEBUG] [Thread-172295] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:34:59.578 [DEBUG] [Thread-172295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:34:59.579 [DEBUG] [Thread-172295] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:34:59.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:34:59.580 [DEBUG] [Thread-172295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:34:59.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:34:59.582 [DEBUG] [Thread-172295] [transport.py] [_log()] userauth is OK
2026-04-11T15:34:59.582 [DEBUG] [Thread-172295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:34:59.582 [DEBUG] [Thread-172295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:34:59.582 [DEBUG] [Thread-172295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:34:59.582 [DEBUG] [Thread-172295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:34:59.599 [INFO] [Thread-172295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:34:59.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:35:00.269 [DEBUG] [Thread-172295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:35:00.270 [DEBUG] [Thread-172295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:35:00.270 [DEBUG] [Thread-172295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:35:00.310 [DEBUG] [Thread-172295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:35:00.310 [DEBUG] [Thread-172295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:35:00.313 [DEBUG] [Thread-172295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:35:00.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:35:00.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:35:00.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:35:00.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:35:00.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:35:00.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:35:00.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:35:00.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:35:00.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:35:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.565742 -999.00  +14.20  14.20     94  +13.20 1 3 1 3 1   887    0 0.83 -6.54 ----- 13.1 14.2 24.4 17.2 15.5 -0.8 15.5 -3.5 15.1 -0.8 15.2 -0.3
2026-04-11T15:35:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:35:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:35:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.565742
2026-04-11T15:35:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:35:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:35:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:35:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:35:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:35:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:34:38', tmtdew=0.10254, humidity=99.2549, cloud=0.0, wind=18.3845, temperature=14.5124, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:34:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:35:00.339 [DEBUG] [Thread-172295] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:35:00.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:35:00.429 [DEBUG] [Thread-172298] [transport.py] [_log()] starting thread (client mode): 0xae5341f0
2026-04-11T15:35:00.429 [DEBUG] [Thread-172298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:35:00.443 [DEBUG] [Thread-172298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:35:00.443 [INFO] [Thread-172298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:35:00.451 [DEBUG] [Thread-172298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:35:00.451 [DEBUG] [Thread-172298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:35:00.451 [DEBUG] [Thread-172298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:35:00.451 [DEBUG] [Thread-172298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:35:00.451 [DEBUG] [Thread-172298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] client lang: <none>
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] server lang: <none>
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] kex follows: False
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] Compression: none
2026-04-11T15:35:00.452 [DEBUG] [Thread-172298] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:35:00.510 [DEBUG] [Thread-172298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:35:00.510 [DEBUG] [Thread-172298] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:35:00.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:35:00.511 [DEBUG] [Thread-172298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:35:00.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:35:00.566 [DEBUG] [Thread-172298] [transport.py] [_log()] userauth is OK
2026-04-11T15:35:00.566 [DEBUG] [Thread-172298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:35:00.567 [DEBUG] [Thread-172298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:35:00.567 [DEBUG] [Thread-172298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:35:00.567 [DEBUG] [Thread-172298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:35:00.585 [INFO] [Thread-172298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:35:00.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:35:00.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:35:01.391 [DEBUG] [Thread-172298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:35:01.392 [DEBUG] [Thread-172298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:35:01.438 [DEBUG] [Thread-172298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:35:01.438 [DEBUG] [Thread-172298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:35:01.447 [DEBUG] [Thread-172298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:35:01.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:35:01.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-04-11T15:35:01.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:35:01.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:35:01.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:35:01.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:35:01.479 [DEBUG] [Thread-172298] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:35:06.600 [DEBUG] [Thread-172300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:35:13.402 [DEBUG] [Thread-172301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:35:20.116 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:35:20.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:35:21.656 [DEBUG] [Thread-172302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:35:31.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:35:31.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:35:31.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-04-11T15:35:32.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 35, 13), 0.106435, 99.5942, 0.0, 19.904, 13.9401, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:35:32.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:35:13
2026-04-11T15:35:33.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:35:33.327 [DEBUG] [Thread-172303] [transport.py] [_log()] starting thread (client mode): 0xae535ae0
2026-04-11T15:35:33.327 [DEBUG] [Thread-172303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:35:33.347 [DEBUG] [Thread-172303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:35:33.347 [INFO] [Thread-172303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:35:33.350 [DEBUG] [Thread-172303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:35:33.350 [DEBUG] [Thread-172303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] client lang: <none>
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] server lang: <none>
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] kex follows: False
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] Compression: none
2026-04-11T15:35:33.351 [DEBUG] [Thread-172303] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:35:33.372 [DEBUG] [Thread-172303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:35:33.373 [DEBUG] [Thread-172303] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:35:33.373 [DEBUG] [Thread-172303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:35:33.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:35:33.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:35:33.375 [DEBUG] [Thread-172303] [transport.py] [_log()] userauth is OK
2026-04-11T15:35:33.376 [DEBUG] [Thread-172303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:35:33.376 [DEBUG] [Thread-172303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:35:33.376 [DEBUG] [Thread-172303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:35:33.376 [DEBUG] [Thread-172303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:35:33.412 [INFO] [Thread-172303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:35:33.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:35:34.066 [DEBUG] [Thread-172303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:35:34.066 [DEBUG] [Thread-172303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:35:34.067 [DEBUG] [Thread-172303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:35:34.107 [DEBUG] [Thread-172303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:35:34.107 [DEBUG] [Thread-172303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:35:34.111 [DEBUG] [Thread-172303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:35:34.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:35:34.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:35:34.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:35:34.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:35:34.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:35:34.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:35:34.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:35:34.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:35:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:35:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.566089 -999.00  +14.20  11.85     93  +13.20 1 3 1 3 1   887    0 0.82 -6.78 ----- 9.9 11.8 356.8 19.6 15.4 -1.5 15.4 -3.3 15.1 -0.6 15.1 -3.1
2026-04-11T15:35:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:35:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:35:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.566089
2026-04-11T15:35:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:35:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:35:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:35:34.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:35:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:35:34.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:35:13', tmtdew=0.106435, humidity=99.5942, cloud=0.0, wind=19.904, temperature=13.9401, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:35:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:35:34.137 [DEBUG] [Thread-172303] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:35:34.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:35:34.231 [DEBUG] [Thread-172306] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-11T15:35:34.231 [DEBUG] [Thread-172306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:35:34.246 [DEBUG] [Thread-172306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:35:34.247 [INFO] [Thread-172306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:35:34.254 [DEBUG] [Thread-172306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:35:34.254 [DEBUG] [Thread-172306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:35:34.254 [DEBUG] [Thread-172306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] client lang: <none>
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] server lang: <none>
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] kex follows: False
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:35:34.255 [DEBUG] [Thread-172306] [transport.py] [_log()] Compression: none
2026-04-11T15:35:34.256 [DEBUG] [Thread-172306] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:35:34.317 [DEBUG] [Thread-172306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:35:34.317 [DEBUG] [Thread-172306] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:35:34.318 [DEBUG] [Thread-172306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:35:34.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:35:34.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:35:34.379 [DEBUG] [Thread-172306] [transport.py] [_log()] userauth is OK
2026-04-11T15:35:34.379 [DEBUG] [Thread-172306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:35:34.380 [DEBUG] [Thread-172306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:35:34.380 [DEBUG] [Thread-172306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:35:34.380 [DEBUG] [Thread-172306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:35:34.402 [INFO] [Thread-172306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:35:34.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:35:34.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:35:35.209 [DEBUG] [Thread-172306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:35:35.209 [DEBUG] [Thread-172306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:35:35.257 [DEBUG] [Thread-172306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:35:35.257 [DEBUG] [Thread-172306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:35:35.267 [DEBUG] [Thread-172306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:35:35.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:35:35.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:35:35.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-04-11T15:35:35.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:35:35.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:35:35.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:35:35.303 [DEBUG] [Thread-172306] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:35:36.694 [DEBUG] [Thread-172308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:35:51.746 [DEBUG] [Thread-172309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:05.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:36:05.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:36:05.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:36:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 35, 49), 0.11284, 99.1885, 0.0, 22.3711, 14.0482, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:36:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:35:49
2026-04-11T15:36:06.780 [DEBUG] [Thread-172310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:06.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:36:07.144 [DEBUG] [Thread-172311] [transport.py] [_log()] starting thread (client mode): 0xae537550
2026-04-11T15:36:07.144 [DEBUG] [Thread-172311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:36:07.164 [DEBUG] [Thread-172311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:36:07.164 [INFO] [Thread-172311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:36:07.167 [DEBUG] [Thread-172311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:36:07.167 [DEBUG] [Thread-172311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:36:07.167 [DEBUG] [Thread-172311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] client lang: <none>
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] server lang: <none>
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] kex follows: False
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:36:07.168 [DEBUG] [Thread-172311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:36:07.169 [DEBUG] [Thread-172311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:36:07.169 [DEBUG] [Thread-172311] [transport.py] [_log()] Compression: none
2026-04-11T15:36:07.169 [DEBUG] [Thread-172311] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:36:07.188 [DEBUG] [Thread-172311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:36:07.189 [DEBUG] [Thread-172311] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:36:07.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:36:07.190 [DEBUG] [Thread-172311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:36:07.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:36:07.192 [DEBUG] [Thread-172311] [transport.py] [_log()] userauth is OK
2026-04-11T15:36:07.192 [DEBUG] [Thread-172311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:36:07.192 [DEBUG] [Thread-172311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:36:07.192 [DEBUG] [Thread-172311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:36:07.193 [DEBUG] [Thread-172311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:36:07.216 [INFO] [Thread-172311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:36:07.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:36:07.871 [DEBUG] [Thread-172311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:36:07.871 [DEBUG] [Thread-172311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:36:07.871 [DEBUG] [Thread-172311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:36:07.913 [DEBUG] [Thread-172311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:36:07.913 [DEBUG] [Thread-172311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:36:07.916 [DEBUG] [Thread-172311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:36:07.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:36:07.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:36:07.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:36:07.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:36:07.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:36:07.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:36:07.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:36:07.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:36:07.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:36:07.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.566436 -999.00  +14.20   9.86     93  +13.20 1 3 1 3 1   887    0 0.85 -6.22 ----- 13.7 9.9 339.6 15.1 15.3 -0.7 15.3 -1.7 14.9 -0.6 15.1 -1.7
2026-04-11T15:36:07.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:36:07.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:36:07.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.566436
2026-04-11T15:36:07.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:36:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:36:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:36:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:36:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:36:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:35:49', tmtdew=0.11284, humidity=99.1885, cloud=0.0, wind=22.3711, temperature=14.0482, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:35:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:36:07.938 [DEBUG] [Thread-172311] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:36:08.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:36:08.038 [DEBUG] [Thread-172314] [transport.py] [_log()] starting thread (client mode): 0xb0febe80
2026-04-11T15:36:08.038 [DEBUG] [Thread-172314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:36:08.052 [DEBUG] [Thread-172314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:36:08.052 [INFO] [Thread-172314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] client lang: <none>
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] server lang: <none>
2026-04-11T15:36:08.060 [DEBUG] [Thread-172314] [transport.py] [_log()] kex follows: False
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] Compression: none
2026-04-11T15:36:08.061 [DEBUG] [Thread-172314] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:36:08.118 [DEBUG] [Thread-172314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:36:08.119 [DEBUG] [Thread-172314] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:36:08.119 [DEBUG] [Thread-172314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:36:08.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:36:08.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:36:08.174 [DEBUG] [Thread-172314] [transport.py] [_log()] userauth is OK
2026-04-11T15:36:08.175 [DEBUG] [Thread-172314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:36:08.175 [DEBUG] [Thread-172314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:36:08.175 [DEBUG] [Thread-172314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:36:08.175 [DEBUG] [Thread-172314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:36:08.194 [INFO] [Thread-172314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:36:08.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:36:08.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:36:08.995 [DEBUG] [Thread-172314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:36:08.996 [DEBUG] [Thread-172314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:36:09.043 [DEBUG] [Thread-172314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:36:09.043 [DEBUG] [Thread-172314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:36:09.052 [DEBUG] [Thread-172314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:36:09.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:36:09.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-04-11T15:36:09.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:36:09.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:36:09.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:36:09.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:36:09.088 [DEBUG] [Thread-172314] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:36:13.447 [DEBUG] [Thread-172316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:20.258 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:20.260 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:21.819 [DEBUG] [Thread-172317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:36.874 [DEBUG] [Thread-172318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:36:39.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:36:39.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:36:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:36:40.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 36, 24), 0.064135, 99.5445, 0.0, 19.1977, 13.6578, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:36:40.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:36:24
2026-04-11T15:36:40.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:36:40.953 [DEBUG] [Thread-172319] [transport.py] [_log()] starting thread (client mode): 0xae535e40
2026-04-11T15:36:40.953 [DEBUG] [Thread-172319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:36:40.973 [DEBUG] [Thread-172319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:36:40.974 [INFO] [Thread-172319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] client lang: <none>
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] server lang: <none>
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] kex follows: False
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:36:40.977 [DEBUG] [Thread-172319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:36:40.978 [DEBUG] [Thread-172319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:36:40.978 [DEBUG] [Thread-172319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:36:40.978 [DEBUG] [Thread-172319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:36:40.978 [DEBUG] [Thread-172319] [transport.py] [_log()] Compression: none
2026-04-11T15:36:40.978 [DEBUG] [Thread-172319] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:36:40.995 [DEBUG] [Thread-172319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:36:40.995 [DEBUG] [Thread-172319] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:36:40.996 [DEBUG] [Thread-172319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:36:40.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:36:40.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:36:40.998 [DEBUG] [Thread-172319] [transport.py] [_log()] userauth is OK
2026-04-11T15:36:40.998 [DEBUG] [Thread-172319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:36:40.998 [DEBUG] [Thread-172319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:36:40.998 [DEBUG] [Thread-172319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:36:40.999 [DEBUG] [Thread-172319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:36:41.023 [INFO] [Thread-172319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:36:41.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:36:41.649 [DEBUG] [Thread-172319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:36:41.649 [DEBUG] [Thread-172319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:36:41.649 [DEBUG] [Thread-172319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:36:41.690 [DEBUG] [Thread-172319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:36:41.690 [DEBUG] [Thread-172319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:36:41.694 [DEBUG] [Thread-172319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:36:41.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:36:41.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:36:41.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:36:41.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:36:41.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:36:41.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:36:41.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:36:41.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:36:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:36:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.566783 -999.00  +14.20  13.29     93  +13.20 1 3 1 3 1   887    0 0.86 -5.85 ----- 18.8 13.3 320.3 22.2 15.2 -1.1 15.2 -1.2 14.9 -0.6 14.9 -2.6
2026-04-11T15:36:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:36:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:36:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.566783
2026-04-11T15:36:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:36:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:36:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:36:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:36:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:36:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:36:24', tmtdew=0.064135, humidity=99.5445, cloud=0.0, wind=19.1977, temperature=13.6578, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:36:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:36:41.722 [DEBUG] [Thread-172319] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:36:41.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:36:41.811 [DEBUG] [Thread-172322] [transport.py] [_log()] starting thread (client mode): 0xae509240
2026-04-11T15:36:41.811 [DEBUG] [Thread-172322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:36:41.830 [DEBUG] [Thread-172322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:36:41.830 [INFO] [Thread-172322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] client lang: <none>
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] server lang: <none>
2026-04-11T15:36:41.838 [DEBUG] [Thread-172322] [transport.py] [_log()] kex follows: False
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] Compression: none
2026-04-11T15:36:41.839 [DEBUG] [Thread-172322] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:36:41.895 [DEBUG] [Thread-172322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:36:41.896 [DEBUG] [Thread-172322] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:36:41.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:36:41.897 [DEBUG] [Thread-172322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:36:41.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:36:41.951 [DEBUG] [Thread-172322] [transport.py] [_log()] userauth is OK
2026-04-11T15:36:41.952 [DEBUG] [Thread-172322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:36:41.952 [DEBUG] [Thread-172322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:36:41.952 [DEBUG] [Thread-172322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:36:41.952 [DEBUG] [Thread-172322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:36:41.971 [INFO] [Thread-172322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:36:41.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:36:41.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:36:42.779 [DEBUG] [Thread-172322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:36:42.780 [DEBUG] [Thread-172322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:36:42.828 [DEBUG] [Thread-172322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:36:42.829 [DEBUG] [Thread-172322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:36:42.838 [DEBUG] [Thread-172322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:36:42.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:36:42.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-04-11T15:36:42.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-04-11T15:36:42.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:36:42.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:36:42.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:36:42.875 [DEBUG] [Thread-172322] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:36:51.912 [DEBUG] [Thread-172324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:06.968 [DEBUG] [Thread-172325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:12.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:37:12.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:37:12.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-04-11T15:37:13.481 [DEBUG] [Thread-172326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 36, 24), 0.064135, 99.5445, 0.0, 19.1977, 13.6578, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:37:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:36:24
2026-04-11T15:37:14.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:37:14.851 [DEBUG] [Thread-172327] [transport.py] [_log()] starting thread (client mode): 0xae50bd60
2026-04-11T15:37:14.851 [DEBUG] [Thread-172327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:37:14.872 [DEBUG] [Thread-172327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:37:14.872 [INFO] [Thread-172327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:37:14.875 [DEBUG] [Thread-172327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:37:14.875 [DEBUG] [Thread-172327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:37:14.875 [DEBUG] [Thread-172327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:37:14.875 [DEBUG] [Thread-172327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:14.875 [DEBUG] [Thread-172327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] client lang: <none>
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] server lang: <none>
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] kex follows: False
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] Compression: none
2026-04-11T15:37:14.876 [DEBUG] [Thread-172327] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:37:14.890 [DEBUG] [Thread-172327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:37:14.891 [DEBUG] [Thread-172327] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:37:14.892 [DEBUG] [Thread-172327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:37:14.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:37:14.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:37:14.894 [DEBUG] [Thread-172327] [transport.py] [_log()] userauth is OK
2026-04-11T15:37:14.895 [DEBUG] [Thread-172327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:37:14.895 [DEBUG] [Thread-172327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:37:14.895 [DEBUG] [Thread-172327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:37:14.895 [DEBUG] [Thread-172327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:37:14.916 [INFO] [Thread-172327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:37:14.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:37:15.555 [DEBUG] [Thread-172327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:37:15.555 [DEBUG] [Thread-172327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:37:15.555 [DEBUG] [Thread-172327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:37:15.596 [DEBUG] [Thread-172327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:37:15.596 [DEBUG] [Thread-172327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:37:15.600 [DEBUG] [Thread-172327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:37:15.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:37:15.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:37:15.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:37:15.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:37:15.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:37:15.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:37:15.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:37:15.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:37:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:37:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.567130 -999.00  +14.00  20.16     92  +12.80 1 3 1 3 1   887    0 0.85 -5.37 ----- 15.4 20.2 348.6 25.9 15.0 -1.5 15.0 -2.1 14.8 -1.2 14.7 -1.5
2026-04-11T15:37:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:37:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:37:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.567130
2026-04-11T15:37:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:37:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:37:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:37:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:37:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:37:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:36:24', tmtdew=0.064135, humidity=99.5445, cloud=0.0, wind=19.1977, temperature=13.6578, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:36:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:37:15.626 [DEBUG] [Thread-172327] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:37:15.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:37:15.719 [DEBUG] [Thread-172330] [transport.py] [_log()] starting thread (client mode): 0xae51b700
2026-04-11T15:37:15.719 [DEBUG] [Thread-172330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:37:15.734 [DEBUG] [Thread-172330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:37:15.734 [INFO] [Thread-172330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:37:15.742 [DEBUG] [Thread-172330] [transport.py] [_log()] client lang: <none>
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] server lang: <none>
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] kex follows: False
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] Compression: none
2026-04-11T15:37:15.743 [DEBUG] [Thread-172330] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:37:15.800 [DEBUG] [Thread-172330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:37:15.801 [DEBUG] [Thread-172330] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:37:15.801 [DEBUG] [Thread-172330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:37:15.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:37:15.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:37:15.856 [DEBUG] [Thread-172330] [transport.py] [_log()] userauth is OK
2026-04-11T15:37:15.856 [DEBUG] [Thread-172330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:37:15.856 [DEBUG] [Thread-172330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:37:15.856 [DEBUG] [Thread-172330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:37:15.856 [DEBUG] [Thread-172330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:37:15.875 [INFO] [Thread-172330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:37:15.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:37:15.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:37:16.710 [DEBUG] [Thread-172330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:37:16.710 [DEBUG] [Thread-172330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:37:16.758 [DEBUG] [Thread-172330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:37:16.758 [DEBUG] [Thread-172330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:37:16.766 [DEBUG] [Thread-172330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:37:16.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:37:16.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-04-11T15:37:16.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:37:16.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:37:16.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:37:16.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:37:16.803 [DEBUG] [Thread-172330] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:37:20.398 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:20.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:22.008 [DEBUG] [Thread-172332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:37.066 [DEBUG] [Thread-172333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:37:46.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:37:46.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:37:46.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:37:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 37, 35), 0.11286, 99.1882, 0.0, 15.8443, 13.9486, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:37:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:37:35
2026-04-11T15:37:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:37:48.594 [DEBUG] [Thread-172334] [transport.py] [_log()] starting thread (client mode): 0xae536140
2026-04-11T15:37:48.594 [DEBUG] [Thread-172334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:37:48.615 [DEBUG] [Thread-172334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:37:48.615 [INFO] [Thread-172334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] client lang: <none>
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] server lang: <none>
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] kex follows: False
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:37:48.619 [DEBUG] [Thread-172334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:37:48.620 [DEBUG] [Thread-172334] [transport.py] [_log()] Compression: none
2026-04-11T15:37:48.620 [DEBUG] [Thread-172334] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:37:48.637 [DEBUG] [Thread-172334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:37:48.638 [DEBUG] [Thread-172334] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:37:48.639 [DEBUG] [Thread-172334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:37:48.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:37:48.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:37:48.641 [DEBUG] [Thread-172334] [transport.py] [_log()] userauth is OK
2026-04-11T15:37:48.641 [DEBUG] [Thread-172334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:37:48.641 [DEBUG] [Thread-172334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:37:48.641 [DEBUG] [Thread-172334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:37:48.641 [DEBUG] [Thread-172334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:37:48.664 [INFO] [Thread-172334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:37:48.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:37:49.245 [DEBUG] [Thread-172334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:37:49.246 [DEBUG] [Thread-172334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:37:49.246 [DEBUG] [Thread-172334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:37:49.286 [DEBUG] [Thread-172334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:37:49.286 [DEBUG] [Thread-172334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:37:49.290 [DEBUG] [Thread-172334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:37:49.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:37:49.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:37:49.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:37:49.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:37:49.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:37:49.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:37:49.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:37:49.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:37:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:37:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.567478 -999.00  +14.00  13.35     92  +12.80 1 3 1 3 1   887    0 0.91 -3.86 ----- 14.8 13.3 355.2 21.5 14.8 -2.8 14.8 -1.5 14.6 -1.0 14.5 -2.1
2026-04-11T15:37:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:37:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:37:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.567478
2026-04-11T15:37:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:37:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:37:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:37:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:37:49.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:37:49.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:37:35', tmtdew=0.11286, humidity=99.1882, cloud=0.0, wind=15.8443, temperature=13.9486, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:37:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:37:49.318 [DEBUG] [Thread-172334] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:37:49.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:37:49.411 [DEBUG] [Thread-172337] [transport.py] [_log()] starting thread (client mode): 0xb0feae30
2026-04-11T15:37:49.411 [DEBUG] [Thread-172337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:37:49.428 [DEBUG] [Thread-172337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:37:49.428 [INFO] [Thread-172337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:37:49.435 [DEBUG] [Thread-172337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] client lang: <none>
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] server lang: <none>
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] kex follows: False
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:37:49.436 [DEBUG] [Thread-172337] [transport.py] [_log()] Compression: none
2026-04-11T15:37:49.437 [DEBUG] [Thread-172337] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:37:49.496 [DEBUG] [Thread-172337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:37:49.497 [DEBUG] [Thread-172337] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:37:49.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:37:49.498 [DEBUG] [Thread-172337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:37:49.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:37:49.552 [DEBUG] [Thread-172337] [transport.py] [_log()] userauth is OK
2026-04-11T15:37:49.552 [DEBUG] [Thread-172337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:37:49.553 [DEBUG] [Thread-172337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:37:49.553 [DEBUG] [Thread-172337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:37:49.553 [DEBUG] [Thread-172337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:37:49.572 [INFO] [Thread-172337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:37:49.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:37:49.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:37:50.406 [DEBUG] [Thread-172337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:37:50.406 [DEBUG] [Thread-172337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:37:50.454 [DEBUG] [Thread-172337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:37:50.454 [DEBUG] [Thread-172337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:37:50.464 [DEBUG] [Thread-172337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:37:50.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:37:50.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-04-11T15:37:50.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-04-11T15:37:50.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:37:50.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:37:50.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:37:50.501 [DEBUG] [Thread-172337] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:37:52.106 [DEBUG] [Thread-172339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:07.168 [DEBUG] [Thread-172340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:13.518 [DEBUG] [Thread-172341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:20.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:38:20.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:38:20.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-04-11T15:38:20.540 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:20.541 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:21.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 38, 11), 0.10643, 99.5941, 0.0, 17.505, 13.3577, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:38:21.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:38:11
2026-04-11T15:38:22.207 [DEBUG] [Thread-172342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:22.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:38:22.382 [DEBUG] [Thread-172343] [transport.py] [_log()] starting thread (client mode): 0xae5362f0
2026-04-11T15:38:22.382 [DEBUG] [Thread-172343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:38:22.402 [DEBUG] [Thread-172343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:38:22.402 [INFO] [Thread-172343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] client lang: <none>
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] server lang: <none>
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] kex follows: False
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:38:22.405 [DEBUG] [Thread-172343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:38:22.406 [DEBUG] [Thread-172343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:38:22.406 [DEBUG] [Thread-172343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:38:22.406 [DEBUG] [Thread-172343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:38:22.406 [DEBUG] [Thread-172343] [transport.py] [_log()] Compression: none
2026-04-11T15:38:22.406 [DEBUG] [Thread-172343] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:38:22.423 [DEBUG] [Thread-172343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:38:22.423 [DEBUG] [Thread-172343] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:38:22.424 [DEBUG] [Thread-172343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:38:22.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:38:22.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:38:22.426 [DEBUG] [Thread-172343] [transport.py] [_log()] userauth is OK
2026-04-11T15:38:22.427 [DEBUG] [Thread-172343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:38:22.427 [DEBUG] [Thread-172343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:38:22.427 [DEBUG] [Thread-172343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:38:22.427 [DEBUG] [Thread-172343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:38:22.451 [INFO] [Thread-172343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:38:22.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:38:23.091 [DEBUG] [Thread-172343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:38:23.091 [DEBUG] [Thread-172343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:38:23.091 [DEBUG] [Thread-172343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:38:23.132 [DEBUG] [Thread-172343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:38:23.132 [DEBUG] [Thread-172343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:38:23.135 [DEBUG] [Thread-172343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:38:23.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:38:23.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:38:23.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:38:23.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:38:23.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:38:23.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:38:23.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:38:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:38:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:38:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.568172 -999.00  +13.90  13.92     92  +12.70 1 3 1 3 1   887    0 1.00 -1.41 ----- 9.3 13.9 16.0 15.5 14.6 -0.7 14.6 -0.6 14.3 -0.6 14.3 -1.4
2026-04-11T15:38:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:38:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:38:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.568172
2026-04-11T15:38:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:38:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:38:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T15:38:23.161 [DEBUG] [Thread-172343] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:38:23.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:38:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T15:38:23.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:38:11', tmtdew=0.10643, humidity=99.5941, cloud=0.0, wind=17.505, temperature=13.3577, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:38:10.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:38:23.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:38:23.256 [DEBUG] [Thread-172346] [transport.py] [_log()] starting thread (client mode): 0xa7951a80
2026-04-11T15:38:23.256 [DEBUG] [Thread-172346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:38:23.274 [DEBUG] [Thread-172346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:38:23.274 [INFO] [Thread-172346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:38:23.283 [DEBUG] [Thread-172346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:38:23.283 [DEBUG] [Thread-172346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:38:23.283 [DEBUG] [Thread-172346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:38:23.283 [DEBUG] [Thread-172346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] client lang: <none>
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] server lang: <none>
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] kex follows: False
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] Compression: none
2026-04-11T15:38:23.284 [DEBUG] [Thread-172346] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:38:23.342 [DEBUG] [Thread-172346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:38:23.343 [DEBUG] [Thread-172346] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:38:23.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:38:23.344 [DEBUG] [Thread-172346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:38:23.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:38:23.400 [DEBUG] [Thread-172346] [transport.py] [_log()] userauth is OK
2026-04-11T15:38:23.400 [DEBUG] [Thread-172346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:38:23.400 [DEBUG] [Thread-172346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:38:23.400 [DEBUG] [Thread-172346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:38:23.400 [DEBUG] [Thread-172346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:38:23.421 [INFO] [Thread-172346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:38:23.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:38:23.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:38:24.257 [DEBUG] [Thread-172346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:38:24.258 [DEBUG] [Thread-172346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:38:24.306 [DEBUG] [Thread-172346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:38:24.306 [DEBUG] [Thread-172346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:38:24.315 [DEBUG] [Thread-172346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:38:24.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:38:24.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:38:24.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-04-11T15:38:24.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:38:24.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:38:24.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:38:24.353 [DEBUG] [Thread-172346] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:38:37.248 [DEBUG] [Thread-172348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:52.302 [DEBUG] [Thread-172349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:38:54.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:38:54.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:38:54.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-04-11T15:38:55.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 38, 46), 0.10246, 99.2553, 0.0, 17.0086, 13.949, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:38:55.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:38:46
2026-04-11T15:38:56.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:38:56.212 [DEBUG] [Thread-172350] [transport.py] [_log()] starting thread (client mode): 0xa7953550
2026-04-11T15:38:56.212 [DEBUG] [Thread-172350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:38:56.232 [DEBUG] [Thread-172350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:38:56.232 [INFO] [Thread-172350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:38:56.233 [DEBUG] [Thread-172350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:38:56.233 [DEBUG] [Thread-172350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] client lang: <none>
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] server lang: <none>
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] kex follows: False
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:38:56.234 [DEBUG] [Thread-172350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:38:56.235 [DEBUG] [Thread-172350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:38:56.235 [DEBUG] [Thread-172350] [transport.py] [_log()] Compression: none
2026-04-11T15:38:56.235 [DEBUG] [Thread-172350] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:38:56.248 [DEBUG] [Thread-172350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:38:56.249 [DEBUG] [Thread-172350] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:38:56.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:38:56.251 [DEBUG] [Thread-172350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:38:56.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:38:56.253 [DEBUG] [Thread-172350] [transport.py] [_log()] userauth is OK
2026-04-11T15:38:56.254 [DEBUG] [Thread-172350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:38:56.254 [DEBUG] [Thread-172350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:38:56.254 [DEBUG] [Thread-172350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:38:56.254 [DEBUG] [Thread-172350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:38:56.290 [INFO] [Thread-172350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:38:56.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:38:56.921 [DEBUG] [Thread-172350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:38:56.921 [DEBUG] [Thread-172350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:38:56.921 [DEBUG] [Thread-172350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:38:56.962 [DEBUG] [Thread-172350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:38:56.962 [DEBUG] [Thread-172350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:38:56.966 [DEBUG] [Thread-172350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:38:56.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:38:56.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:38:56.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:38:56.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:38:56.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:38:56.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:38:56.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:38:56.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:38:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:38:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.568519   +0.00  +14.00  12.23     91  +12.60 3 0 1 3 1   887    0 1.05 0.33 ----- 12.8 12.2 35.8 14.0 14.5 -1.6 14.4 -0.8 14.2 -0.6 14.3 -1.3
2026-04-11T15:38:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:38:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:38:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.568519
2026-04-11T15:38:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:38:56.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:38:56.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:38:56.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:38:56.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:38:56.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:38:46', tmtdew=0.10246, humidity=99.2553, cloud=0.0, wind=17.0086, temperature=13.949, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:38:40.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:38:56.995 [DEBUG] [Thread-172350] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:38:57.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:38:57.087 [DEBUG] [Thread-172353] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-11T15:38:57.087 [DEBUG] [Thread-172353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:38:57.104 [DEBUG] [Thread-172353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:38:57.105 [INFO] [Thread-172353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:38:57.112 [DEBUG] [Thread-172353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:38:57.113 [DEBUG] [Thread-172353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:38:57.113 [DEBUG] [Thread-172353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:38:57.113 [DEBUG] [Thread-172353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:57.113 [DEBUG] [Thread-172353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:38:57.113 [DEBUG] [Thread-172353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:57.113 [DEBUG] [Thread-172353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] client lang: <none>
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] server lang: <none>
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] kex follows: False
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] Compression: none
2026-04-11T15:38:57.114 [DEBUG] [Thread-172353] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:38:57.173 [DEBUG] [Thread-172353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:38:57.174 [DEBUG] [Thread-172353] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:38:57.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:38:57.175 [DEBUG] [Thread-172353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:38:57.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:38:57.229 [DEBUG] [Thread-172353] [transport.py] [_log()] userauth is OK
2026-04-11T15:38:57.229 [DEBUG] [Thread-172353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:38:57.229 [DEBUG] [Thread-172353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:38:57.229 [DEBUG] [Thread-172353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:38:57.230 [DEBUG] [Thread-172353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:38:57.249 [INFO] [Thread-172353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:38:57.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:38:57.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:38:58.076 [DEBUG] [Thread-172353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:38:58.076 [DEBUG] [Thread-172353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:38:58.124 [DEBUG] [Thread-172353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:38:58.125 [DEBUG] [Thread-172353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:38:58.133 [DEBUG] [Thread-172353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:38:58.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:38:58.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-04-11T15:38:58.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:38:58.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:38:58.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:38:58.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:38:58.167 [DEBUG] [Thread-172353] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:39:07.340 [DEBUG] [Thread-172355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:39:13.552 [DEBUG] [Thread-172356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:39:20.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:39:20.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:39:22.402 [DEBUG] [Thread-172357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:39:28.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:39:28.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:39:28.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-04-11T15:39:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 39, 21), 0.111505, 99.5613, 0.0, 15.8983, 13.3251, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:39:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:39:21
2026-04-11T15:39:29.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:39:29.978 [DEBUG] [Thread-172358] [transport.py] [_log()] starting thread (client mode): 0xae518c10
2026-04-11T15:39:29.978 [DEBUG] [Thread-172358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:39:29.998 [DEBUG] [Thread-172358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:39:29.999 [INFO] [Thread-172358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:39:30.000 [DEBUG] [Thread-172358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:39:30.000 [DEBUG] [Thread-172358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:39:30.000 [DEBUG] [Thread-172358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:39:30.000 [DEBUG] [Thread-172358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] client lang: <none>
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] server lang: <none>
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] kex follows: False
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] Compression: none
2026-04-11T15:39:30.001 [DEBUG] [Thread-172358] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:39:30.020 [DEBUG] [Thread-172358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:39:30.021 [DEBUG] [Thread-172358] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:39:30.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:39:30.022 [DEBUG] [Thread-172358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:39:30.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:39:30.024 [DEBUG] [Thread-172358] [transport.py] [_log()] userauth is OK
2026-04-11T15:39:30.024 [DEBUG] [Thread-172358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:39:30.024 [DEBUG] [Thread-172358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:39:30.025 [DEBUG] [Thread-172358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:39:30.025 [DEBUG] [Thread-172358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:39:30.041 [INFO] [Thread-172358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:39:30.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:39:30.668 [DEBUG] [Thread-172358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:39:30.669 [DEBUG] [Thread-172358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:39:30.669 [DEBUG] [Thread-172358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:39:30.709 [DEBUG] [Thread-172358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:39:30.709 [DEBUG] [Thread-172358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:39:30.713 [DEBUG] [Thread-172358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:39:30.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:39:30.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:39:30.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:39:30.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:39:30.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:39:30.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:39:30.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:39:30.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:39:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:39:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.568867   +0.00  +14.00  13.01     91  +12.60 3 0 1 3 1   887    0 1.13 2.61 ----- 13.7 13.0 37.8 14.7 14.4 -0.9 14.4 -0.5 14.2 -0.4 14.3 -0.9
2026-04-11T15:39:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:39:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:39:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.568867
2026-04-11T15:39:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:39:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:39:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:39:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:39:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:39:30.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:39:21', tmtdew=0.111505, humidity=99.5613, cloud=0.0, wind=15.8983, temperature=13.3251, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:39:10.109', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:39:30.741 [DEBUG] [Thread-172358] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:39:30.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:39:30.837 [DEBUG] [Thread-172361] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-11T15:39:30.838 [DEBUG] [Thread-172361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:39:30.852 [DEBUG] [Thread-172361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:39:30.852 [INFO] [Thread-172361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:39:30.860 [DEBUG] [Thread-172361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:39:30.860 [DEBUG] [Thread-172361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:39:30.860 [DEBUG] [Thread-172361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] client lang: <none>
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] server lang: <none>
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] kex follows: False
2026-04-11T15:39:30.861 [DEBUG] [Thread-172361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:39:30.862 [DEBUG] [Thread-172361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:39:30.862 [DEBUG] [Thread-172361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:39:30.862 [DEBUG] [Thread-172361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:39:30.862 [DEBUG] [Thread-172361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:39:30.862 [DEBUG] [Thread-172361] [transport.py] [_log()] Compression: none
2026-04-11T15:39:30.862 [DEBUG] [Thread-172361] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:39:30.922 [DEBUG] [Thread-172361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:39:30.922 [DEBUG] [Thread-172361] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:39:30.923 [DEBUG] [Thread-172361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:39:30.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:39:30.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:39:30.985 [DEBUG] [Thread-172361] [transport.py] [_log()] userauth is OK
2026-04-11T15:39:30.985 [DEBUG] [Thread-172361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:39:30.985 [DEBUG] [Thread-172361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:39:30.986 [DEBUG] [Thread-172361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:39:30.986 [DEBUG] [Thread-172361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:39:31.005 [INFO] [Thread-172361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:39:31.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:39:31.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:39:31.823 [DEBUG] [Thread-172361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:39:31.823 [DEBUG] [Thread-172361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:39:31.872 [DEBUG] [Thread-172361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:39:31.872 [DEBUG] [Thread-172361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:39:31.881 [DEBUG] [Thread-172361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:39:31.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:39:31.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:39:31.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-04-11T15:39:31.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:39:31.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:39:31.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:39:31.920 [DEBUG] [Thread-172361] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:39:37.440 [DEBUG] [Thread-172363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:39:52.494 [DEBUG] [Thread-172364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:01.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:40:01.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:40: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-04-11T15:40:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 39, 21), 0.111505, 99.5613, 0.0, 15.8983, 13.3251, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:40:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:39:21
2026-04-11T15:40:03.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:40:03.786 [DEBUG] [Thread-172365] [transport.py] [_log()] starting thread (client mode): 0xa79535e0
2026-04-11T15:40:03.786 [DEBUG] [Thread-172365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:40:03.806 [DEBUG] [Thread-172365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:40:03.806 [INFO] [Thread-172365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:40:03.809 [DEBUG] [Thread-172365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:40:03.809 [DEBUG] [Thread-172365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:40:03.809 [DEBUG] [Thread-172365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:40:03.809 [DEBUG] [Thread-172365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:03.809 [DEBUG] [Thread-172365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:03.809 [DEBUG] [Thread-172365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] client lang: <none>
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] server lang: <none>
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] kex follows: False
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] Compression: none
2026-04-11T15:40:03.810 [DEBUG] [Thread-172365] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:40:03.829 [DEBUG] [Thread-172365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:40:03.829 [DEBUG] [Thread-172365] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:40:03.830 [DEBUG] [Thread-172365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:40:03.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:40:03.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:40:03.832 [DEBUG] [Thread-172365] [transport.py] [_log()] userauth is OK
2026-04-11T15:40:03.832 [DEBUG] [Thread-172365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:40:03.832 [DEBUG] [Thread-172365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:40:03.833 [DEBUG] [Thread-172365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:40:03.833 [DEBUG] [Thread-172365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:40:03.856 [INFO] [Thread-172365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:40:03.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:40:04.644 [DEBUG] [Thread-172365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:40:04.644 [DEBUG] [Thread-172365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:40:04.644 [DEBUG] [Thread-172365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:40:04.685 [DEBUG] [Thread-172365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:40:04.685 [DEBUG] [Thread-172365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:40:04.687 [DEBUG] [Thread-172365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:40:04.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:40:04.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:40:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:40:04.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:40:04.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:40:04.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:40:04.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:40:04.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:40:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:40:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.569214   +0.00  +14.00  15.99     92  +12.80 3 0 1 3 1   887    0 1.17 3.84 ----- 13.3 16.0 29.4 17.5 14.4 -1.7 14.3 -1.1 14.1 -0.4 14.3 -0.5
2026-04-11T15:40:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:40:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:40:04.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.569214
2026-04-11T15:40:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:40:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:40:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:40:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:40:04.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:40:04.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:39:21', tmtdew=0.111505, humidity=99.5613, cloud=0.0, wind=15.8983, temperature=13.3251, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:39:40.090', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:40:04.712 [DEBUG] [Thread-172365] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:40:04.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:40:04.805 [DEBUG] [Thread-172368] [transport.py] [_log()] starting thread (client mode): 0xae518b80
2026-04-11T15:40:04.806 [DEBUG] [Thread-172368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:40:04.820 [DEBUG] [Thread-172368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:40:04.820 [INFO] [Thread-172368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] client lang: <none>
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] server lang: <none>
2026-04-11T15:40:04.827 [DEBUG] [Thread-172368] [transport.py] [_log()] kex follows: False
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] Compression: none
2026-04-11T15:40:04.828 [DEBUG] [Thread-172368] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:40:04.889 [DEBUG] [Thread-172368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:40:04.889 [DEBUG] [Thread-172368] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:40:04.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:40:04.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:40:04.891 [DEBUG] [Thread-172368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:40:04.945 [DEBUG] [Thread-172368] [transport.py] [_log()] userauth is OK
2026-04-11T15:40:04.945 [DEBUG] [Thread-172368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:40:04.945 [DEBUG] [Thread-172368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:40:04.945 [DEBUG] [Thread-172368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:40:04.945 [DEBUG] [Thread-172368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:40:04.964 [INFO] [Thread-172368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:40:04.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:40:04.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:40:05.789 [DEBUG] [Thread-172368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:40:05.789 [DEBUG] [Thread-172368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:40:05.836 [DEBUG] [Thread-172368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:40:05.837 [DEBUG] [Thread-172368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:40:05.845 [DEBUG] [Thread-172368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:40:05.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:40:05.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-04-11T15:40:05.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-04-11T15:40:05.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:40:05.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:40:05.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:40:05.879 [DEBUG] [Thread-172368] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:40:07.529 [DEBUG] [Thread-172370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:13.584 [DEBUG] [Thread-172371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:20.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:20.824 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:22.577 [DEBUG] [Thread-172372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:35.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:40:35.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:40:35.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-04-11T15:40:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 39, 57), 0.10889, 99.5782, 0.0, 13.8514, 13.3418, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:40:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:39:57
2026-04-11T15:40:37.613 [DEBUG] [Thread-172373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:40:37.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:40:37.817 [DEBUG] [Thread-172374] [transport.py] [_log()] starting thread (client mode): 0xae5a4d00
2026-04-11T15:40:37.817 [DEBUG] [Thread-172374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:40:37.837 [DEBUG] [Thread-172374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:40:37.837 [INFO] [Thread-172374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:40:37.840 [DEBUG] [Thread-172374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:40:37.840 [DEBUG] [Thread-172374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:40:37.840 [DEBUG] [Thread-172374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:40:37.840 [DEBUG] [Thread-172374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:37.840 [DEBUG] [Thread-172374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] client lang: <none>
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] server lang: <none>
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] kex follows: False
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] Compression: none
2026-04-11T15:40:37.841 [DEBUG] [Thread-172374] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:40:37.859 [DEBUG] [Thread-172374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:40:37.859 [DEBUG] [Thread-172374] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:40:37.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:40:37.860 [DEBUG] [Thread-172374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:40:37.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:40:37.862 [DEBUG] [Thread-172374] [transport.py] [_log()] userauth is OK
2026-04-11T15:40:37.863 [DEBUG] [Thread-172374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:40:37.863 [DEBUG] [Thread-172374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:40:37.863 [DEBUG] [Thread-172374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:40:37.863 [DEBUG] [Thread-172374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:40:37.886 [INFO] [Thread-172374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:40:37.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:40:38.521 [DEBUG] [Thread-172374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:40:38.522 [DEBUG] [Thread-172374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:40:38.522 [DEBUG] [Thread-172374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:40:38.562 [DEBUG] [Thread-172374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:40:38.562 [DEBUG] [Thread-172374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:40:38.565 [DEBUG] [Thread-172374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:40:38.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:40:38.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:40:38.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:40:38.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:40:38.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:40:38.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:40:38.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:40:38.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:40:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:40:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.569561   +0.00  +13.90  13.65     92  +12.80 3 0 1 3 1   887    0 1.20 4.73 ----- 14.8 13.7 40.8 15.6 14.4 -1.4 14.3 -1.9 14.1 -0.2 14.3 -1.2
2026-04-11T15:40:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:40:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:40:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.569561
2026-04-11T15:40:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:40:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:40:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:40:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:40:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:40:38.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:39:57', tmtdew=0.10889, humidity=99.5782, cloud=0.0, wind=13.8514, temperature=13.3418, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:40:10.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:40:38.591 [DEBUG] [Thread-172374] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:40:38.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:40:38.684 [DEBUG] [Thread-172377] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-11T15:40:38.684 [DEBUG] [Thread-172377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:40:38.699 [DEBUG] [Thread-172377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:40:38.699 [INFO] [Thread-172377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:38.707 [DEBUG] [Thread-172377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] client lang: <none>
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] server lang: <none>
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] kex follows: False
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] Compression: none
2026-04-11T15:40:38.708 [DEBUG] [Thread-172377] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:40:38.765 [DEBUG] [Thread-172377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:40:38.766 [DEBUG] [Thread-172377] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:40:38.767 [DEBUG] [Thread-172377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:40:38.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:40:38.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:40:38.822 [DEBUG] [Thread-172377] [transport.py] [_log()] userauth is OK
2026-04-11T15:40:38.822 [DEBUG] [Thread-172377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:40:38.822 [DEBUG] [Thread-172377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:40:38.822 [DEBUG] [Thread-172377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:40:38.823 [DEBUG] [Thread-172377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:40:38.841 [INFO] [Thread-172377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:40:38.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:40:38.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:40:39.660 [DEBUG] [Thread-172377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:40:39.660 [DEBUG] [Thread-172377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:40:39.708 [DEBUG] [Thread-172377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:40:39.708 [DEBUG] [Thread-172377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:40:39.717 [DEBUG] [Thread-172377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:40:39.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:40:39.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-04-11T15:40:39.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-04-11T15:40:39.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:40:39.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:40:39.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:40:39.754 [DEBUG] [Thread-172377] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:40:52.651 [DEBUG] [Thread-172379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:07.705 [DEBUG] [Thread-172380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:09.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:41:09.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:41:09.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-04-11T15:41:11.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 40, 33), 0.11145, 99.5616, 0.0, 10.8173, 13.2589, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:41:11.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:40:33
2026-04-11T15:41:11.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:41:11.631 [DEBUG] [Thread-172381] [transport.py] [_log()] starting thread (client mode): 0xb39c6d10
2026-04-11T15:41:11.631 [DEBUG] [Thread-172381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:41:11.652 [DEBUG] [Thread-172381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:41:11.652 [INFO] [Thread-172381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:41:11.655 [DEBUG] [Thread-172381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] client lang: <none>
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] server lang: <none>
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] kex follows: False
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:41:11.656 [DEBUG] [Thread-172381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:41:11.657 [DEBUG] [Thread-172381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:41:11.657 [DEBUG] [Thread-172381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:41:11.657 [DEBUG] [Thread-172381] [transport.py] [_log()] Compression: none
2026-04-11T15:41:11.657 [DEBUG] [Thread-172381] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:41:11.673 [DEBUG] [Thread-172381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:41:11.674 [DEBUG] [Thread-172381] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:41:11.674 [DEBUG] [Thread-172381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:41:11.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:41:11.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:41:11.676 [DEBUG] [Thread-172381] [transport.py] [_log()] userauth is OK
2026-04-11T15:41:11.676 [DEBUG] [Thread-172381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:41:11.676 [DEBUG] [Thread-172381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:41:11.676 [DEBUG] [Thread-172381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:41:11.676 [DEBUG] [Thread-172381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:41:11.694 [INFO] [Thread-172381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:41:11.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:41:12.346 [DEBUG] [Thread-172381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:41:12.347 [DEBUG] [Thread-172381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:41:12.347 [DEBUG] [Thread-172381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:41:12.388 [DEBUG] [Thread-172381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:41:12.388 [DEBUG] [Thread-172381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:41:12.392 [DEBUG] [Thread-172381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:41:12.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:41:12.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:41:12.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:41:12.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:41:12.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:41:12.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:41:12.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:41:12.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:41:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:41:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.569908   +0.00  +13.90  13.38     92  +12.70 3 0 1 3 1   887    0 1.20 5.14 ----- 7.6 13.4 36.8 18.0 14.4 -1.7 14.3 -1.5 14.1 -0.2 14.3 -2.2
2026-04-11T15:41:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:41:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:41:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.569908
2026-04-11T15:41:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:41:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:41:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:41:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:41:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:41:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:40:33', tmtdew=0.11145, humidity=99.5616, cloud=0.0, wind=10.8173, temperature=13.2589, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:40:40.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:41:12.420 [DEBUG] [Thread-172381] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:41:12.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:41:12.512 [DEBUG] [Thread-172384] [transport.py] [_log()] starting thread (client mode): 0xa79539a0
2026-04-11T15:41:12.512 [DEBUG] [Thread-172384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:41:12.527 [DEBUG] [Thread-172384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:41:12.528 [INFO] [Thread-172384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:41:12.536 [DEBUG] [Thread-172384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:41:12.536 [DEBUG] [Thread-172384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:41:12.536 [DEBUG] [Thread-172384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] client lang: <none>
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] server lang: <none>
2026-04-11T15:41:12.537 [DEBUG] [Thread-172384] [transport.py] [_log()] kex follows: False
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] Compression: none
2026-04-11T15:41:12.538 [DEBUG] [Thread-172384] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:41:12.594 [DEBUG] [Thread-172384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:41:12.595 [DEBUG] [Thread-172384] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:41:12.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:41:12.596 [DEBUG] [Thread-172384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:41:12.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:41:12.654 [DEBUG] [Thread-172384] [transport.py] [_log()] userauth is OK
2026-04-11T15:41:12.655 [DEBUG] [Thread-172384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:41:12.655 [DEBUG] [Thread-172384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:41:12.655 [DEBUG] [Thread-172384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:41:12.655 [DEBUG] [Thread-172384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:41:12.680 [INFO] [Thread-172384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:41:12.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:41:12.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:41:13.495 [DEBUG] [Thread-172384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:41:13.495 [DEBUG] [Thread-172384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:41:13.548 [DEBUG] [Thread-172384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:41:13.548 [DEBUG] [Thread-172384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:41:13.557 [DEBUG] [Thread-172384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:41:13.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:41:13.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:41:13.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:41:13.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:41:13.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:41:13.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:41:13.594 [DEBUG] [Thread-172384] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:41:13.617 [DEBUG] [Thread-172386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:20.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:20.967 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:22.744 [DEBUG] [Thread-172387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:37.797 [DEBUG] [Thread-172388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:41:43.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:41:43.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:41:43.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-04-11T15:41:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 41, 8), 0.108915, 99.578, 0.0, 12.7577, 13.3086, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:41:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:41:08
2026-04-11T15:41:45.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:41:45.446 [DEBUG] [Thread-172389] [transport.py] [_log()] starting thread (client mode): 0xae5a6410
2026-04-11T15:41:45.447 [DEBUG] [Thread-172389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:41:45.467 [DEBUG] [Thread-172389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:41:45.467 [INFO] [Thread-172389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:41:45.470 [DEBUG] [Thread-172389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:41:45.470 [DEBUG] [Thread-172389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:41:45.470 [DEBUG] [Thread-172389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] client lang: <none>
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] server lang: <none>
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] kex follows: False
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] Compression: none
2026-04-11T15:41:45.471 [DEBUG] [Thread-172389] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:41:45.487 [DEBUG] [Thread-172389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:41:45.487 [DEBUG] [Thread-172389] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:41:45.488 [DEBUG] [Thread-172389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:41:45.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:41:45.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:41:45.490 [DEBUG] [Thread-172389] [transport.py] [_log()] userauth is OK
2026-04-11T15:41:45.490 [DEBUG] [Thread-172389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:41:45.490 [DEBUG] [Thread-172389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:41:45.490 [DEBUG] [Thread-172389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:41:45.490 [DEBUG] [Thread-172389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:41:45.514 [INFO] [Thread-172389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:41:45.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:41:46.161 [DEBUG] [Thread-172389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:41:46.161 [DEBUG] [Thread-172389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:41:46.162 [DEBUG] [Thread-172389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:41:46.202 [DEBUG] [Thread-172389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:41:46.202 [DEBUG] [Thread-172389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:41:46.206 [DEBUG] [Thread-172389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:41:46.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:41:46.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:41:46.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:41:46.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:41:46.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:41:46.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:41:46.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:41:46.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:41:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:41:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.570255   +0.00  +13.80  12.55     92  +12.60 3 0 1 3 1   887    0 1.21 5.66 ----- 11.2 12.6 29.0 15.1 14.3 -2.0 14.3 -1.7 14.0 -0.1 14.2 -0.8
2026-04-11T15:41:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:41:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:41:46.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.570255
2026-04-11T15:41:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:41:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:41:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:41:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:41:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:41:46.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:41:08', tmtdew=0.108915, humidity=99.578, cloud=0.0, wind=12.7577, temperature=13.3086, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:41:10.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:41:46.233 [DEBUG] [Thread-172389] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:41:46.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:41:46.330 [DEBUG] [Thread-172392] [transport.py] [_log()] starting thread (client mode): 0xae536b00
2026-04-11T15:41:46.330 [DEBUG] [Thread-172392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:41:46.345 [DEBUG] [Thread-172392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:41:46.345 [INFO] [Thread-172392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:41:46.353 [DEBUG] [Thread-172392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:41:46.354 [DEBUG] [Thread-172392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] client lang: <none>
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] server lang: <none>
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] kex follows: False
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:41:46.355 [DEBUG] [Thread-172392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:41:46.356 [DEBUG] [Thread-172392] [transport.py] [_log()] Compression: none
2026-04-11T15:41:46.356 [DEBUG] [Thread-172392] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:41:46.415 [DEBUG] [Thread-172392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:41:46.415 [DEBUG] [Thread-172392] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:41:46.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:41:46.416 [DEBUG] [Thread-172392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:41:46.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:41:46.470 [DEBUG] [Thread-172392] [transport.py] [_log()] userauth is OK
2026-04-11T15:41:46.471 [DEBUG] [Thread-172392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:41:46.471 [DEBUG] [Thread-172392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:41:46.471 [DEBUG] [Thread-172392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:41:46.471 [DEBUG] [Thread-172392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:41:46.489 [INFO] [Thread-172392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:41:46.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:41:46.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:41:47.345 [DEBUG] [Thread-172392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:41:47.345 [DEBUG] [Thread-172392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:41:47.393 [DEBUG] [Thread-172392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:41:47.393 [DEBUG] [Thread-172392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:41:47.404 [DEBUG] [Thread-172392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:41:47.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:41:47.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-04-11T15:41:47.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-04-11T15:41:47.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:41:47.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:41:47.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:41:47.439 [DEBUG] [Thread-172392] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:41:52.831 [DEBUG] [Thread-172394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:07.883 [DEBUG] [Thread-172395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:13.651 [DEBUG] [Thread-172396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:17.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:42:17.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:42:17.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-04-11T15:42:18.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 41, 44), 0.10755, 99.2223, 0.0, 11.2226, 13.7171, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:42:18.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:41:44
2026-04-11T15:42:19.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:42:19.252 [DEBUG] [Thread-172397] [transport.py] [_log()] starting thread (client mode): 0xae5a7ca0
2026-04-11T15:42:19.252 [DEBUG] [Thread-172397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:42:19.267 [DEBUG] [Thread-172397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:42:19.267 [INFO] [Thread-172397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] client lang: <none>
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] server lang: <none>
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] kex follows: False
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] Compression: none
2026-04-11T15:42:19.271 [DEBUG] [Thread-172397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:42:19.287 [DEBUG] [Thread-172397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:42:19.288 [DEBUG] [Thread-172397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:42:19.288 [DEBUG] [Thread-172397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:42:19.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:42:19.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:42:19.290 [DEBUG] [Thread-172397] [transport.py] [_log()] userauth is OK
2026-04-11T15:42:19.290 [DEBUG] [Thread-172397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:42:19.290 [DEBUG] [Thread-172397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:42:19.290 [DEBUG] [Thread-172397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:42:19.291 [DEBUG] [Thread-172397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:42:19.314 [INFO] [Thread-172397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:42:19.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:42:19.905 [DEBUG] [Thread-172397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:42:19.905 [DEBUG] [Thread-172397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:42:19.905 [DEBUG] [Thread-172397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:42:19.946 [DEBUG] [Thread-172397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:42:19.946 [DEBUG] [Thread-172397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:42:19.950 [DEBUG] [Thread-172397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:42:19.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:42:19.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:42:19.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:42:19.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:42:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:42:19.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:42:19.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:42:19.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:42:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:42:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.570603   +0.00  +13.80  13.57     92  +12.60 3 0 1 3 1   887    0 1.25 6.48 ----- 9.9 13.6 22.2 17.8 14.3 -1.9 14.2 -0.8 14.0 -0.3 14.2 -0.8
2026-04-11T15:42:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:42:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:42:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.570603
2026-04-11T15:42:19.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:42:19.980 [DEBUG] [Thread-172397] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:42:19.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:42:19.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:42:19.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:42:19.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:42:19.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:41:44', tmtdew=0.10755, humidity=99.2223, cloud=0.0, wind=11.2226, temperature=13.7171, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:41:40.099', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:42:20.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:42:20.082 [DEBUG] [Thread-172400] [transport.py] [_log()] starting thread (client mode): 0xae5a5390
2026-04-11T15:42:20.082 [DEBUG] [Thread-172400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:42:20.100 [DEBUG] [Thread-172400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:42:20.101 [INFO] [Thread-172400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:42:20.109 [DEBUG] [Thread-172400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:42:20.109 [DEBUG] [Thread-172400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:42:20.109 [DEBUG] [Thread-172400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:42:20.109 [DEBUG] [Thread-172400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] client lang: <none>
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] server lang: <none>
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] kex follows: False
2026-04-11T15:42:20.110 [DEBUG] [Thread-172400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:42:20.111 [DEBUG] [Thread-172400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:42:20.111 [DEBUG] [Thread-172400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:42:20.111 [DEBUG] [Thread-172400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:42:20.111 [DEBUG] [Thread-172400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:42:20.111 [DEBUG] [Thread-172400] [transport.py] [_log()] Compression: none
2026-04-11T15:42:20.111 [DEBUG] [Thread-172400] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:42:20.167 [DEBUG] [Thread-172400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:42:20.167 [DEBUG] [Thread-172400] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:42:20.168 [DEBUG] [Thread-172400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:42:20.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:42:20.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:42:20.226 [DEBUG] [Thread-172400] [transport.py] [_log()] userauth is OK
2026-04-11T15:42:20.226 [DEBUG] [Thread-172400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:42:20.226 [DEBUG] [Thread-172400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:42:20.226 [DEBUG] [Thread-172400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:42:20.226 [DEBUG] [Thread-172400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:42:20.245 [INFO] [Thread-172400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:42:20.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:42:20.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:42:21.054 [DEBUG] [Thread-172400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:42:21.055 [DEBUG] [Thread-172400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:42:21.103 [DEBUG] [Thread-172400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:42:21.103 [DEBUG] [Thread-172400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:42:21.108 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:21.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:21.112 [DEBUG] [Thread-172400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:42:21.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:42:21.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:42:21.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-04-11T15:42:21.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:42:21.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:42:21.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:42:21.154 [DEBUG] [Thread-172400] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:42:22.920 [DEBUG] [Thread-172402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:37.975 [DEBUG] [Thread-172403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:51.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:42:51.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:42:51.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-04-11T15:42:52.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 42, 19), 0.058945, 99.5779, 0.0, 13.9403, 13.4413, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:42:52.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:42:19
2026-04-11T15:42:52.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:42:52.942 [DEBUG] [Thread-172404] [transport.py] [_log()] starting thread (client mode): 0xae534940
2026-04-11T15:42:52.942 [DEBUG] [Thread-172404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:42:52.963 [DEBUG] [Thread-172404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:42:52.963 [INFO] [Thread-172404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:42:52.966 [DEBUG] [Thread-172404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] client lang: <none>
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] server lang: <none>
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] kex follows: False
2026-04-11T15:42:52.967 [DEBUG] [Thread-172404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:42:52.968 [DEBUG] [Thread-172404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:42:52.968 [DEBUG] [Thread-172404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:42:52.968 [DEBUG] [Thread-172404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:42:52.968 [DEBUG] [Thread-172404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:42:52.968 [DEBUG] [Thread-172404] [transport.py] [_log()] Compression: none
2026-04-11T15:42:52.968 [DEBUG] [Thread-172404] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:42:52.986 [DEBUG] [Thread-172404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:42:52.986 [DEBUG] [Thread-172404] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:42:52.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:42:52.987 [DEBUG] [Thread-172404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:42:52.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:42:52.989 [DEBUG] [Thread-172404] [transport.py] [_log()] userauth is OK
2026-04-11T15:42:52.990 [DEBUG] [Thread-172404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:42:52.990 [DEBUG] [Thread-172404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:42:52.990 [DEBUG] [Thread-172404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:42:52.990 [DEBUG] [Thread-172404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:42:53.006 [INFO] [Thread-172404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:42:53.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:42:53.010 [DEBUG] [Thread-172406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:42:53.612 [DEBUG] [Thread-172404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:42:53.612 [DEBUG] [Thread-172404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:42:53.612 [DEBUG] [Thread-172404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:42:53.653 [DEBUG] [Thread-172404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:42:53.653 [DEBUG] [Thread-172404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:42:53.657 [DEBUG] [Thread-172404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:42:53.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:42:53.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:42:53.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:42:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:42:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:42:53.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:42:53.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:42:53.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:42:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:42:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.570950   +0.00  +13.80   8.78     91  +12.50 3 0 1 3 1   887    0 1.27 6.64 ----- 10.0 8.8 5.6 13.6 14.3 -2.0 14.2 -0.9 14.0 -0.1 14.2 -1.0
2026-04-11T15:42:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:42:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:42:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.570950
2026-04-11T15:42:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:42:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:42:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:42:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:42:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:42:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:42:19', tmtdew=0.058945, humidity=99.5779, cloud=0.0, wind=13.9403, temperature=13.4413, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:42:10.080', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:42:53.685 [DEBUG] [Thread-172404] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:42:53.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:42:53.778 [DEBUG] [Thread-172408] [transport.py] [_log()] starting thread (client mode): 0xae535030
2026-04-11T15:42:53.779 [DEBUG] [Thread-172408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:42:53.793 [DEBUG] [Thread-172408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:42:53.793 [INFO] [Thread-172408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:42:53.801 [DEBUG] [Thread-172408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] client lang: <none>
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] server lang: <none>
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] kex follows: False
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] Compression: none
2026-04-11T15:42:53.802 [DEBUG] [Thread-172408] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:42:53.863 [DEBUG] [Thread-172408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:42:53.864 [DEBUG] [Thread-172408] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:42:53.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:42:53.865 [DEBUG] [Thread-172408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:42:53.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:42:53.919 [DEBUG] [Thread-172408] [transport.py] [_log()] userauth is OK
2026-04-11T15:42:53.919 [DEBUG] [Thread-172408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:42:53.920 [DEBUG] [Thread-172408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:42:53.920 [DEBUG] [Thread-172408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:42:53.920 [DEBUG] [Thread-172408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:42:53.940 [INFO] [Thread-172408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:42:53.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:42:53.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:42:54.742 [DEBUG] [Thread-172408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:42:54.742 [DEBUG] [Thread-172408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:42:54.790 [DEBUG] [Thread-172408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:42:54.790 [DEBUG] [Thread-172408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:42:54.800 [DEBUG] [Thread-172408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:42:54.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:42:54.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-04-11T15:42:54.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-04-11T15:42:54.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:42:54.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:42:54.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:42:54.837 [DEBUG] [Thread-172408] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:43:08.046 [DEBUG] [Thread-172410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:13.685 [DEBUG] [Thread-172411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:21.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:21.252 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:23.095 [DEBUG] [Thread-172412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:24.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:43:24.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:43:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:43:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 42, 55), 0.11151, 99.5613, 0.0, 11.8757, 13.375, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:43:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:42:55
2026-04-11T15:43:26.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:43:26.664 [DEBUG] [Thread-172413] [transport.py] [_log()] starting thread (client mode): 0xae535300
2026-04-11T15:43:26.664 [DEBUG] [Thread-172413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:43:26.685 [DEBUG] [Thread-172413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:43:26.685 [INFO] [Thread-172413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] client lang: <none>
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] server lang: <none>
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] kex follows: False
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] Compression: none
2026-04-11T15:43:26.688 [DEBUG] [Thread-172413] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:43:26.707 [DEBUG] [Thread-172413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:43:26.708 [DEBUG] [Thread-172413] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:43:26.709 [DEBUG] [Thread-172413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:43:26.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:43:26.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:43:26.711 [DEBUG] [Thread-172413] [transport.py] [_log()] userauth is OK
2026-04-11T15:43:26.711 [DEBUG] [Thread-172413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:43:26.711 [DEBUG] [Thread-172413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:43:26.711 [DEBUG] [Thread-172413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:43:26.711 [DEBUG] [Thread-172413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:43:26.747 [INFO] [Thread-172413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:43:26.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:43:27.382 [DEBUG] [Thread-172413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:43:27.382 [DEBUG] [Thread-172413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:43:27.383 [DEBUG] [Thread-172413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:43:27.423 [DEBUG] [Thread-172413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:43:27.423 [DEBUG] [Thread-172413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:43:27.427 [DEBUG] [Thread-172413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:43:27.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:43:27.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:43:27.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:43:27.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:43:27.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:43:27.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:43:27.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:43:27.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:43:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:43:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.571644   +0.00  +13.90   7.60     92  +12.70 3 0 1 3 1   887    0 1.29 7.47 ----- 14.9 7.6 349.7 16.3 14.3 -2.1 14.2 -1.8 14.0 -0.1 14.2 -1.6
2026-04-11T15:43:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:43:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:43:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.571644
2026-04-11T15:43:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:43:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:43:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:43:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:43:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:43:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:42:55', tmtdew=0.11151, humidity=99.5613, cloud=0.0, wind=11.8757, temperature=13.375, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:43:10.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:43:27.456 [DEBUG] [Thread-172413] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:43:27.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:43:27.549 [DEBUG] [Thread-172416] [transport.py] [_log()] starting thread (client mode): 0xae534b80
2026-04-11T15:43:27.549 [DEBUG] [Thread-172416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:43:27.564 [DEBUG] [Thread-172416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:43:27.565 [INFO] [Thread-172416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:43:27.572 [DEBUG] [Thread-172416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:43:27.572 [DEBUG] [Thread-172416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:43:27.573 [DEBUG] [Thread-172416] [transport.py] [_log()] client lang: <none>
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] server lang: <none>
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] kex follows: False
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] Compression: none
2026-04-11T15:43:27.574 [DEBUG] [Thread-172416] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:43:27.635 [DEBUG] [Thread-172416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:43:27.636 [DEBUG] [Thread-172416] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:43:27.637 [DEBUG] [Thread-172416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:43:27.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:43:27.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:43:27.694 [DEBUG] [Thread-172416] [transport.py] [_log()] userauth is OK
2026-04-11T15:43:27.695 [DEBUG] [Thread-172416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:43:27.695 [DEBUG] [Thread-172416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:43:27.695 [DEBUG] [Thread-172416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:43:27.695 [DEBUG] [Thread-172416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:43:27.718 [INFO] [Thread-172416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:43:27.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:43:27.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:43:28.578 [DEBUG] [Thread-172416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:43:28.578 [DEBUG] [Thread-172416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:43:28.626 [DEBUG] [Thread-172416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:43:28.627 [DEBUG] [Thread-172416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:43:28.636 [DEBUG] [Thread-172416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:43:28.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:43:28.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-04-11T15:43:28.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-04-11T15:43:28.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:43:28.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:43:28.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:43:28.673 [DEBUG] [Thread-172416] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:43:38.132 [DEBUG] [Thread-172418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:53.184 [DEBUG] [Thread-172419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:43:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:43:58.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:43:58.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:43:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 43, 30), 0.10891, 99.5782, 0.0, 11.8404, 13.5078, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:43:59.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:43:30
2026-04-11T15:44:00.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:44:00.540 [DEBUG] [Thread-172420] [transport.py] [_log()] starting thread (client mode): 0xae5a6350
2026-04-11T15:44:00.540 [DEBUG] [Thread-172420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:44:00.559 [DEBUG] [Thread-172420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:44:00.559 [INFO] [Thread-172420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:44:00.562 [DEBUG] [Thread-172420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] client lang: <none>
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] server lang: <none>
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] kex follows: False
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] Compression: none
2026-04-11T15:44:00.563 [DEBUG] [Thread-172420] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:44:00.571 [DEBUG] [Thread-172420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:44:00.572 [DEBUG] [Thread-172420] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:44:00.572 [DEBUG] [Thread-172420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:44:00.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:44:00.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:44:00.574 [DEBUG] [Thread-172420] [transport.py] [_log()] userauth is OK
2026-04-11T15:44:00.574 [DEBUG] [Thread-172420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:44:00.574 [DEBUG] [Thread-172420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:44:00.574 [DEBUG] [Thread-172420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:44:00.574 [DEBUG] [Thread-172420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:44:00.592 [INFO] [Thread-172420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:44:00.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:44:01.408 [DEBUG] [Thread-172420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:44:01.408 [DEBUG] [Thread-172420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:44:01.408 [DEBUG] [Thread-172420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:44:01.449 [DEBUG] [Thread-172420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:44:01.449 [DEBUG] [Thread-172420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:44:01.451 [DEBUG] [Thread-172420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:44:01.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:44:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:44:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:44:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:44:01.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:44:01.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:44:01.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:44:01.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:44:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:44:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.571991   +0.00  +13.90  11.96     92  +12.80 3 0 1 3 1   887    0 1.31 7.84 ----- 11.4 12.0 330.2 17.4 14.4 -2.1 14.2 -1.7 14.0 -0.1 14.2 -1.3
2026-04-11T15:44:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:44:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:44:01.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.571991
2026-04-11T15:44:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:44:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:44:01.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:44:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:44:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:44:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:43:30', tmtdew=0.10891, humidity=99.5782, cloud=0.0, wind=11.8404, temperature=13.5078, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:43:40.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:44:01.475 [DEBUG] [Thread-172420] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:44:01.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:44:01.567 [DEBUG] [Thread-172423] [transport.py] [_log()] starting thread (client mode): 0xae5a46d0
2026-04-11T15:44:01.567 [DEBUG] [Thread-172423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:44:01.582 [DEBUG] [Thread-172423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:44:01.582 [INFO] [Thread-172423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:01.590 [DEBUG] [Thread-172423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] client lang: <none>
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] server lang: <none>
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] kex follows: False
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:44:01.591 [DEBUG] [Thread-172423] [transport.py] [_log()] Compression: none
2026-04-11T15:44:01.592 [DEBUG] [Thread-172423] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:44:01.652 [DEBUG] [Thread-172423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:44:01.653 [DEBUG] [Thread-172423] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:44:01.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:44:01.654 [DEBUG] [Thread-172423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:44:01.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:44:01.713 [DEBUG] [Thread-172423] [transport.py] [_log()] userauth is OK
2026-04-11T15:44:01.714 [DEBUG] [Thread-172423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:44:01.714 [DEBUG] [Thread-172423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:44:01.715 [DEBUG] [Thread-172423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:44:01.715 [DEBUG] [Thread-172423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:44:01.734 [INFO] [Thread-172423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:44:01.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:44:01.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:44:02.565 [DEBUG] [Thread-172423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:44:02.566 [DEBUG] [Thread-172423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:44:02.614 [DEBUG] [Thread-172423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:44:02.614 [DEBUG] [Thread-172423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:44:02.623 [DEBUG] [Thread-172423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:44:02.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:44:02.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:44: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-04-11T15:44:02.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:44:02.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:44:02.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:44:02.660 [DEBUG] [Thread-172423] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:44:08.220 [DEBUG] [Thread-172425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:44:13.721 [DEBUG] [Thread-172426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:44:21.392 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:44:21.394 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:44:23.267 [DEBUG] [Thread-172427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:44:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:44:32.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:44:32.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-04-11T15:44:33.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 44, 6), 0.1115, 99.5616, 0.0, 11.6464, 13.5576, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:44:33.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:44:06
2026-04-11T15:44:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:44:34.550 [DEBUG] [Thread-172428] [transport.py] [_log()] starting thread (client mode): 0xae534640
2026-04-11T15:44:34.550 [DEBUG] [Thread-172428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:44:34.569 [DEBUG] [Thread-172428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:44:34.569 [INFO] [Thread-172428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:44:34.572 [DEBUG] [Thread-172428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] client lang: <none>
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] server lang: <none>
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] kex follows: False
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] Compression: none
2026-04-11T15:44:34.573 [DEBUG] [Thread-172428] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:44:34.589 [DEBUG] [Thread-172428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:44:34.590 [DEBUG] [Thread-172428] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:44:34.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:44:34.591 [DEBUG] [Thread-172428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:44:34.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:44:34.593 [DEBUG] [Thread-172428] [transport.py] [_log()] userauth is OK
2026-04-11T15:44:34.593 [DEBUG] [Thread-172428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:44:34.593 [DEBUG] [Thread-172428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:44:34.593 [DEBUG] [Thread-172428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:44:34.593 [DEBUG] [Thread-172428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:44:34.619 [INFO] [Thread-172428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:44:34.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:44:35.389 [DEBUG] [Thread-172428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:44:35.389 [DEBUG] [Thread-172428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:44:35.390 [DEBUG] [Thread-172428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:44:35.430 [DEBUG] [Thread-172428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:44:35.430 [DEBUG] [Thread-172428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:44:35.434 [DEBUG] [Thread-172428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:44:35.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:44:35.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:44:35.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:44:35.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:44:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:44:35.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:44:35.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:44:35.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:44:35.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:44:35.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.572339   +0.00  +13.80  11.98     92  +12.60 3 0 1 3 1   887    0 1.32 8.02 ----- 13.1 12.0 337.2 13.9 14.4 -2.4 14.2 -1.7 14.0 -0.3 14.3 -1.3
2026-04-11T15:44:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:44:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:44:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.572339
2026-04-11T15:44:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:44:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:44:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:44:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:44:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:44:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:44:06', tmtdew=0.1115, humidity=99.5616, cloud=0.0, wind=11.6464, temperature=13.5576, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:44:10.090', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:44:35.463 [DEBUG] [Thread-172428] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:44:35.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:44:35.556 [DEBUG] [Thread-172431] [transport.py] [_log()] starting thread (client mode): 0xae535180
2026-04-11T15:44:35.556 [DEBUG] [Thread-172431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:44:35.572 [DEBUG] [Thread-172431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:44:35.573 [INFO] [Thread-172431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:44:35.580 [DEBUG] [Thread-172431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:44:35.580 [DEBUG] [Thread-172431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:44:35.580 [DEBUG] [Thread-172431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:44:35.580 [DEBUG] [Thread-172431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:35.580 [DEBUG] [Thread-172431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] client lang: <none>
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] server lang: <none>
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] kex follows: False
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] Compression: none
2026-04-11T15:44:35.581 [DEBUG] [Thread-172431] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:44:35.640 [DEBUG] [Thread-172431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:44:35.640 [DEBUG] [Thread-172431] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:44:35.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:44:35.642 [DEBUG] [Thread-172431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:44:35.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:44:35.696 [DEBUG] [Thread-172431] [transport.py] [_log()] userauth is OK
2026-04-11T15:44:35.696 [DEBUG] [Thread-172431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:44:35.697 [DEBUG] [Thread-172431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:44:35.697 [DEBUG] [Thread-172431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:44:35.697 [DEBUG] [Thread-172431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:44:35.716 [INFO] [Thread-172431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:44:35.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:44:35.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:44:36.558 [DEBUG] [Thread-172431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:44:36.559 [DEBUG] [Thread-172431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:44:36.606 [DEBUG] [Thread-172431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:44:36.606 [DEBUG] [Thread-172431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:44:36.616 [DEBUG] [Thread-172431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:44:36.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:44:36.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:44:36.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-04-11T15:44:36.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:44:36.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:44:36.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:44:36.654 [DEBUG] [Thread-172431] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:44:38.304 [DEBUG] [Thread-172433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:44:53.357 [DEBUG] [Thread-172434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:06.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:45:06.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:45:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 44, 41), 0.11777, 99.1568, 0.0, 11.9635, 14.1486, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:44:41
2026-04-11T15:45:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:45:08.391 [DEBUG] [Thread-172435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:08.478 [DEBUG] [Thread-172436] [transport.py] [_log()] starting thread (client mode): 0xae5347f0
2026-04-11T15:45:08.478 [DEBUG] [Thread-172436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:45:08.499 [DEBUG] [Thread-172436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:45:08.499 [INFO] [Thread-172436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:45:08.502 [DEBUG] [Thread-172436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:45:08.502 [DEBUG] [Thread-172436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:45:08.502 [DEBUG] [Thread-172436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:45:08.502 [DEBUG] [Thread-172436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] client lang: <none>
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] server lang: <none>
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] kex follows: False
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] Compression: none
2026-04-11T15:45:08.503 [DEBUG] [Thread-172436] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:45:08.522 [DEBUG] [Thread-172436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:45:08.522 [DEBUG] [Thread-172436] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:45:08.523 [DEBUG] [Thread-172436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:45:08.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:45:08.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:45:08.525 [DEBUG] [Thread-172436] [transport.py] [_log()] userauth is OK
2026-04-11T15:45:08.525 [DEBUG] [Thread-172436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:45:08.526 [DEBUG] [Thread-172436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:45:08.526 [DEBUG] [Thread-172436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:45:08.526 [DEBUG] [Thread-172436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:45:08.536 [INFO] [Thread-172436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:45:08.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:45:09.654 [DEBUG] [Thread-172436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:45:09.654 [DEBUG] [Thread-172436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:45:09.654 [DEBUG] [Thread-172436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:45:09.695 [DEBUG] [Thread-172436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:45:09.695 [DEBUG] [Thread-172436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:45:09.698 [DEBUG] [Thread-172436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:45:09.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:45:09.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:45:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:45:09.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:45:09.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:45:09.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:45:09.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:45:09.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:45:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:45:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.572686   +0.00  +13.90  13.01     92  +12.70 3 0 1 3 1   887    0 1.34 8.78 ----- 8.7 13.0 330.2 14.8 14.4 -2.4 14.2 -1.8 13.9 -0.0 14.3 -0.8
2026-04-11T15:45:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:45:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:45:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.572686
2026-04-11T15:45:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:45:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:45:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:45:09.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:45:09.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:45:09.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:44:41', tmtdew=0.11777, humidity=99.1568, cloud=0.0, wind=11.9635, temperature=14.1486, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:44:40.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:45:09.733 [DEBUG] [Thread-172436] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:45:09.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:45:09.824 [DEBUG] [Thread-172439] [transport.py] [_log()] starting thread (client mode): 0xae5a57b0
2026-04-11T15:45:09.824 [DEBUG] [Thread-172439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:45:09.839 [DEBUG] [Thread-172439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:45:09.839 [INFO] [Thread-172439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] client lang: <none>
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] server lang: <none>
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] kex follows: False
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:45:09.847 [DEBUG] [Thread-172439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:45:09.848 [DEBUG] [Thread-172439] [transport.py] [_log()] Compression: none
2026-04-11T15:45:09.848 [DEBUG] [Thread-172439] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:45:09.904 [DEBUG] [Thread-172439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:45:09.905 [DEBUG] [Thread-172439] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:45:09.905 [DEBUG] [Thread-172439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:45:09.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:45:09.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:45:09.960 [DEBUG] [Thread-172439] [transport.py] [_log()] userauth is OK
2026-04-11T15:45:09.961 [DEBUG] [Thread-172439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:45:09.961 [DEBUG] [Thread-172439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:45:09.961 [DEBUG] [Thread-172439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:45:09.961 [DEBUG] [Thread-172439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:45:09.980 [INFO] [Thread-172439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:45:09.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:45:09.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:45:10.781 [DEBUG] [Thread-172439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:45:10.781 [DEBUG] [Thread-172439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:45:10.828 [DEBUG] [Thread-172439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:45:10.829 [DEBUG] [Thread-172439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:45:10.837 [DEBUG] [Thread-172439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:45:10.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:45:10.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-04-11T15:45: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') -> 00000000
2026-04-11T15:45:10.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:45:10.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:45:10.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:45:10.874 [DEBUG] [Thread-172439] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:45:13.782 [DEBUG] [Thread-172441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:21.535 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:21.537 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:23.427 [DEBUG] [Thread-172442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:38.479 [DEBUG] [Thread-172443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:45:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:45:40.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:45:40.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-04-11T15:45:42.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 45, 17), 0.111475, 99.5618, 0.0, 11.9286, 13.7406, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:45:42.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:45:17
2026-04-11T15:45:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:45:42.720 [DEBUG] [Thread-172444] [transport.py] [_log()] starting thread (client mode): 0xa7953070
2026-04-11T15:45:42.720 [DEBUG] [Thread-172444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:45:42.736 [DEBUG] [Thread-172444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:45:42.737 [INFO] [Thread-172444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:45:42.739 [DEBUG] [Thread-172444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:45:42.739 [DEBUG] [Thread-172444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:45:42.739 [DEBUG] [Thread-172444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] client lang: <none>
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] server lang: <none>
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] kex follows: False
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] Compression: none
2026-04-11T15:45:42.740 [DEBUG] [Thread-172444] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:45:42.755 [DEBUG] [Thread-172444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:45:42.756 [DEBUG] [Thread-172444] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:45:42.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:45:42.758 [DEBUG] [Thread-172444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:45:42.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:45:42.760 [DEBUG] [Thread-172444] [transport.py] [_log()] userauth is OK
2026-04-11T15:45:42.760 [DEBUG] [Thread-172444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:45:42.760 [DEBUG] [Thread-172444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:45:42.760 [DEBUG] [Thread-172444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:45:42.760 [DEBUG] [Thread-172444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:45:42.785 [INFO] [Thread-172444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:45:42.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:45:43.607 [DEBUG] [Thread-172444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:45:43.607 [DEBUG] [Thread-172444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:45:43.608 [DEBUG] [Thread-172444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:45:43.648 [DEBUG] [Thread-172444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:45:43.648 [DEBUG] [Thread-172444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:45:43.651 [DEBUG] [Thread-172444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:45:43.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:45:43.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:45:43.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:45:43.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:45:43.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:45:43.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:45:43.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:45:43.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:45:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:45:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.573033   +0.00  +13.90   9.93     92  +12.70 3 0 1 3 1   887    0 1.35 8.75 ----- 6.3 9.9 338.8 16.5 14.5 -2.5 14.3 -1.9 14.1 -0.1 14.3 -0.8
2026-04-11T15:45:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:45:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:45:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.573033
2026-04-11T15:45:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:45:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:45:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:45:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:45:43.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:45:43.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:45:17', tmtdew=0.111475, humidity=99.5618, cloud=0.0, wind=11.9286, temperature=13.7406, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:45:10.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:45:43.677 [DEBUG] [Thread-172444] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:45:43.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:45:43.769 [DEBUG] [Thread-172447] [transport.py] [_log()] starting thread (client mode): 0xae536ce0
2026-04-11T15:45:43.769 [DEBUG] [Thread-172447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:45:43.785 [DEBUG] [Thread-172447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:45:43.785 [INFO] [Thread-172447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:45:43.793 [DEBUG] [Thread-172447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:45:43.793 [DEBUG] [Thread-172447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:45:43.793 [DEBUG] [Thread-172447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:45:43.793 [DEBUG] [Thread-172447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:43.793 [DEBUG] [Thread-172447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] client lang: <none>
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] server lang: <none>
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] kex follows: False
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:45:43.794 [DEBUG] [Thread-172447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:45:43.795 [DEBUG] [Thread-172447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:45:43.795 [DEBUG] [Thread-172447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:45:43.795 [DEBUG] [Thread-172447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:45:43.795 [DEBUG] [Thread-172447] [transport.py] [_log()] Compression: none
2026-04-11T15:45:43.795 [DEBUG] [Thread-172447] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:45:43.853 [DEBUG] [Thread-172447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:45:43.854 [DEBUG] [Thread-172447] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:45:43.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:45:43.855 [DEBUG] [Thread-172447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:45:43.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:45:43.909 [DEBUG] [Thread-172447] [transport.py] [_log()] userauth is OK
2026-04-11T15:45:43.909 [DEBUG] [Thread-172447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:45:43.909 [DEBUG] [Thread-172447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:45:43.909 [DEBUG] [Thread-172447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:45:43.909 [DEBUG] [Thread-172447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:45:43.928 [INFO] [Thread-172447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:45:43.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:45:43.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:45:44.722 [DEBUG] [Thread-172447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:45:44.723 [DEBUG] [Thread-172447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:45:44.770 [DEBUG] [Thread-172447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:45:44.770 [DEBUG] [Thread-172447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:45:44.780 [DEBUG] [Thread-172447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:45:44.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:45:44.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-04-11T15:45:44.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-04-11T15:45:44.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:45:44.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:45:44.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:45:44.818 [DEBUG] [Thread-172447] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:45:53.517 [DEBUG] [Thread-172449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:08.569 [DEBUG] [Thread-172450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:13.823 [DEBUG] [Thread-172451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:46:14.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:46:14.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-04-11T15:46:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 45, 52), 0.11773, 99.1572, 0.0, 12.2105, 14.2815, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:46:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:45:52
2026-04-11T15:46:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:46:16.649 [DEBUG] [Thread-172452] [transport.py] [_log()] starting thread (client mode): 0xa7952ec0
2026-04-11T15:46:16.649 [DEBUG] [Thread-172452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:46:16.669 [DEBUG] [Thread-172452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:46:16.669 [INFO] [Thread-172452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:46:16.672 [DEBUG] [Thread-172452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] client lang: <none>
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] server lang: <none>
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] kex follows: False
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:46:16.673 [DEBUG] [Thread-172452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:46:16.674 [DEBUG] [Thread-172452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:46:16.674 [DEBUG] [Thread-172452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:46:16.674 [DEBUG] [Thread-172452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:46:16.674 [DEBUG] [Thread-172452] [transport.py] [_log()] Compression: none
2026-04-11T15:46:16.674 [DEBUG] [Thread-172452] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:46:16.693 [DEBUG] [Thread-172452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:46:16.693 [DEBUG] [Thread-172452] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:46:16.694 [DEBUG] [Thread-172452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:46:16.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:46:16.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:46:16.696 [DEBUG] [Thread-172452] [transport.py] [_log()] userauth is OK
2026-04-11T15:46:16.696 [DEBUG] [Thread-172452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:46:16.696 [DEBUG] [Thread-172452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:46:16.696 [DEBUG] [Thread-172452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:46:16.696 [DEBUG] [Thread-172452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:46:16.721 [INFO] [Thread-172452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:46:16.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:46:17.500 [DEBUG] [Thread-172452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:46:17.500 [DEBUG] [Thread-172452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:46:17.500 [DEBUG] [Thread-172452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:46:17.541 [DEBUG] [Thread-172452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:46:17.541 [DEBUG] [Thread-172452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:46:17.545 [DEBUG] [Thread-172452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:46:17.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:46:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:46:17.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:46:17.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:46:17.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:46:17.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:46:17.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:46:17.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:46:17.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:46:17.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.573380   +0.00  +14.00  10.99     93  +12.80 3 0 1 3 1   887    0 1.41 10.49 ----- 11.4 11.0 331.0 14.0 14.5 -2.6 14.3 -1.6 14.1 -0.0 14.4 -0.7
2026-04-11T15:46:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:46:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:46:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.573380
2026-04-11T15:46:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:46:17.572 [DEBUG] [Thread-172452] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:46:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:46:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:46:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:46:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:46:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:45:52', tmtdew=0.11773, humidity=99.1572, cloud=0.0, wind=12.2105, temperature=14.2815, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:45:40.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:46:17.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:46:17.675 [DEBUG] [Thread-172455] [transport.py] [_log()] starting thread (client mode): 0xae5a5600
2026-04-11T15:46:17.675 [DEBUG] [Thread-172455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:46:17.693 [DEBUG] [Thread-172455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:46:17.693 [INFO] [Thread-172455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] client lang: <none>
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] server lang: <none>
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] kex follows: False
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:46:17.700 [DEBUG] [Thread-172455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:46:17.701 [DEBUG] [Thread-172455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:46:17.701 [DEBUG] [Thread-172455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:46:17.701 [DEBUG] [Thread-172455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:46:17.701 [DEBUG] [Thread-172455] [transport.py] [_log()] Compression: none
2026-04-11T15:46:17.701 [DEBUG] [Thread-172455] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:46:17.757 [DEBUG] [Thread-172455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:46:17.757 [DEBUG] [Thread-172455] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:46:17.758 [DEBUG] [Thread-172455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:46:17.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:46:17.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:46:17.812 [DEBUG] [Thread-172455] [transport.py] [_log()] userauth is OK
2026-04-11T15:46:17.813 [DEBUG] [Thread-172455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:46:17.813 [DEBUG] [Thread-172455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:46:17.813 [DEBUG] [Thread-172455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:46:17.813 [DEBUG] [Thread-172455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:46:17.838 [INFO] [Thread-172455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:46:17.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:46:17.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:46:18.703 [DEBUG] [Thread-172455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:46:18.703 [DEBUG] [Thread-172455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:46:18.752 [DEBUG] [Thread-172455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:46:18.752 [DEBUG] [Thread-172455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:46:18.761 [DEBUG] [Thread-172455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:46:18.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:46:18.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-04-11T15:46:18.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-04-11T15:46:18.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:46:18.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:46:18.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:46:18.798 [DEBUG] [Thread-172455] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:46:21.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:21.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:23.608 [DEBUG] [Thread-172457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:38.657 [DEBUG] [Thread-172458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:46:48.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:46:48.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:46:48.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-04-11T15:46:50.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 46, 28), 0.058915, 99.5783, 0.0, 9.05328, 13.7403, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:46:50.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:46:28
2026-04-11T15:46:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:46:50.604 [DEBUG] [Thread-172459] [transport.py] [_log()] starting thread (client mode): 0xa7951600
2026-04-11T15:46:50.604 [DEBUG] [Thread-172459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:46:50.623 [DEBUG] [Thread-172459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:46:50.623 [INFO] [Thread-172459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:46:50.626 [DEBUG] [Thread-172459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] client lang: <none>
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] server lang: <none>
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] kex follows: False
2026-04-11T15:46:50.627 [DEBUG] [Thread-172459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:46:50.628 [DEBUG] [Thread-172459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:46:50.628 [DEBUG] [Thread-172459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:46:50.628 [DEBUG] [Thread-172459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:46:50.628 [DEBUG] [Thread-172459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:46:50.628 [DEBUG] [Thread-172459] [transport.py] [_log()] Compression: none
2026-04-11T15:46:50.628 [DEBUG] [Thread-172459] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:46:50.647 [DEBUG] [Thread-172459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:46:50.648 [DEBUG] [Thread-172459] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:46:50.649 [DEBUG] [Thread-172459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:46:50.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:46:50.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:46:50.651 [DEBUG] [Thread-172459] [transport.py] [_log()] userauth is OK
2026-04-11T15:46:50.651 [DEBUG] [Thread-172459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:46:50.651 [DEBUG] [Thread-172459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:46:50.651 [DEBUG] [Thread-172459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:46:50.651 [DEBUG] [Thread-172459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:46:50.675 [INFO] [Thread-172459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:46:50.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:46:51.466 [DEBUG] [Thread-172459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:46:51.466 [DEBUG] [Thread-172459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:46:51.467 [DEBUG] [Thread-172459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:46:51.507 [DEBUG] [Thread-172459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:46:51.507 [DEBUG] [Thread-172459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:46:51.511 [DEBUG] [Thread-172459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:46:51.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:46:51.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:46:51.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:46:51.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:46:51.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:46:51.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:46:51.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:46:51.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:46:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:46:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.573728   +0.00  +13.90   7.95     93  +12.80 3 0 1 3 1   887    0 1.39 9.85 ----- 8.2 8.0 351.4 10.9 14.5 -2.9 14.3 -1.5 14.1 -0.0 14.4 -1.3
2026-04-11T15:46:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:46:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:46:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.573728
2026-04-11T15:46:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:46:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:46:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:46:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:46:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:46:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:46:28', tmtdew=0.058915, humidity=99.5783, cloud=0.0, wind=9.05328, temperature=13.7403, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:46:10.099', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:46:51.541 [DEBUG] [Thread-172459] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:46:51.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:46:51.635 [DEBUG] [Thread-172462] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T15:46:51.635 [DEBUG] [Thread-172462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:46:51.650 [DEBUG] [Thread-172462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:46:51.650 [INFO] [Thread-172462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:46:51.657 [DEBUG] [Thread-172462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] client lang: <none>
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] server lang: <none>
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] kex follows: False
2026-04-11T15:46:51.658 [DEBUG] [Thread-172462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:46:51.659 [DEBUG] [Thread-172462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:46:51.659 [DEBUG] [Thread-172462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:46:51.659 [DEBUG] [Thread-172462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:46:51.659 [DEBUG] [Thread-172462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:46:51.659 [DEBUG] [Thread-172462] [transport.py] [_log()] Compression: none
2026-04-11T15:46:51.659 [DEBUG] [Thread-172462] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:46:51.717 [DEBUG] [Thread-172462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:46:51.717 [DEBUG] [Thread-172462] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:46:51.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:46:51.718 [DEBUG] [Thread-172462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:46:51.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:46:51.773 [DEBUG] [Thread-172462] [transport.py] [_log()] userauth is OK
2026-04-11T15:46:51.774 [DEBUG] [Thread-172462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:46:51.774 [DEBUG] [Thread-172462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:46:51.774 [DEBUG] [Thread-172462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:46:51.774 [DEBUG] [Thread-172462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:46:51.792 [INFO] [Thread-172462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:46:51.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:46:51.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:46:52.623 [DEBUG] [Thread-172462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:46:52.623 [DEBUG] [Thread-172462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:46:52.671 [DEBUG] [Thread-172462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:46:52.671 [DEBUG] [Thread-172462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:46:52.680 [DEBUG] [Thread-172462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:46:52.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:46:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:46:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:46:52.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:46:52.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:46:52.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:46:52.717 [DEBUG] [Thread-172462] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:46:53.695 [DEBUG] [Thread-172464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:08.745 [DEBUG] [Thread-172465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:13.876 [DEBUG] [Thread-172466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:21.826 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:21.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:22.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:47:22.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:47:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:47:23.788 [DEBUG] [Thread-172467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 47, 3), 0.061495, 99.5618, 0.0, 10.1646, 13.7403, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:47:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:47:03
2026-04-11T15:47:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:47:24.526 [DEBUG] [Thread-172468] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T15:47:24.526 [DEBUG] [Thread-172468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:47:24.546 [DEBUG] [Thread-172468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:47:24.546 [INFO] [Thread-172468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:47:24.549 [DEBUG] [Thread-172468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] client lang: <none>
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] server lang: <none>
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] kex follows: False
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] Compression: none
2026-04-11T15:47:24.550 [DEBUG] [Thread-172468] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:47:24.567 [DEBUG] [Thread-172468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:47:24.568 [DEBUG] [Thread-172468] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:47:24.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:47:24.569 [DEBUG] [Thread-172468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:47:24.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:47:24.571 [DEBUG] [Thread-172468] [transport.py] [_log()] userauth is OK
2026-04-11T15:47:24.571 [DEBUG] [Thread-172468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:47:24.571 [DEBUG] [Thread-172468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:47:24.571 [DEBUG] [Thread-172468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:47:24.571 [DEBUG] [Thread-172468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:47:24.597 [INFO] [Thread-172468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:47:24.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:47:25.365 [DEBUG] [Thread-172468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:47:25.365 [DEBUG] [Thread-172468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:47:25.365 [DEBUG] [Thread-172468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:47:25.407 [DEBUG] [Thread-172468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:47:25.407 [DEBUG] [Thread-172468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:47:25.410 [DEBUG] [Thread-172468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:47:25.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:47:25.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:47:25.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:47:25.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:47:25.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:47:25.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:47:25.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:47:25.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:47:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:47:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.574075   +0.00  +13.90   8.78     93  +12.80 3 0 1 3 1   887    0 1.43 10.70 ----- 8.4 8.8 322.4 10.4 14.6 -2.9 14.3 -1.6 14.1 0.0 14.4 -0.5
2026-04-11T15:47:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:47:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:47:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.574075
2026-04-11T15:47:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:47:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:47:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:47:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:47:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:47:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:47:03', tmtdew=0.061495, humidity=99.5618, cloud=0.0, wind=10.1646, temperature=13.7403, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:46:40.080', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:47:25.440 [DEBUG] [Thread-172468] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:47:25.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:47:25.538 [DEBUG] [Thread-172471] [transport.py] [_log()] starting thread (client mode): 0xb39c62f0
2026-04-11T15:47:25.538 [DEBUG] [Thread-172471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:47:25.552 [DEBUG] [Thread-172471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:47:25.552 [INFO] [Thread-172471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:47:25.560 [DEBUG] [Thread-172471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:47:25.560 [DEBUG] [Thread-172471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:47:25.560 [DEBUG] [Thread-172471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:47:25.560 [DEBUG] [Thread-172471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:25.560 [DEBUG] [Thread-172471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] client lang: <none>
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] server lang: <none>
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] kex follows: False
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] Compression: none
2026-04-11T15:47:25.561 [DEBUG] [Thread-172471] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:47:25.618 [DEBUG] [Thread-172471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:47:25.618 [DEBUG] [Thread-172471] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:47:25.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:47:25.619 [DEBUG] [Thread-172471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:47:25.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:47:25.673 [DEBUG] [Thread-172471] [transport.py] [_log()] userauth is OK
2026-04-11T15:47:25.674 [DEBUG] [Thread-172471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:47:25.674 [DEBUG] [Thread-172471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:47:25.674 [DEBUG] [Thread-172471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:47:25.674 [DEBUG] [Thread-172471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:47:25.693 [INFO] [Thread-172471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:47:25.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:47:25.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:47:26.534 [DEBUG] [Thread-172471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:47:26.535 [DEBUG] [Thread-172471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:47:26.582 [DEBUG] [Thread-172471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:47:26.582 [DEBUG] [Thread-172471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:47:26.592 [DEBUG] [Thread-172471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:47:26.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:47:26.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-04-11T15:47:26.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:47:26.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:47:26.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:47:26.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:47:26.629 [DEBUG] [Thread-172471] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:47:38.827 [DEBUG] [Thread-172473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:53.881 [DEBUG] [Thread-172474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:47:56.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:47:56.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:47:56.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-04-11T15:47:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 47, 39), 0.12815, 99.0904, 0.0, 8.61192, 14.3143, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:47:57.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:47:39
2026-04-11T15:47:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:47:58.450 [DEBUG] [Thread-172475] [transport.py] [_log()] starting thread (client mode): 0xae5350f0
2026-04-11T15:47:58.450 [DEBUG] [Thread-172475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:47:58.469 [DEBUG] [Thread-172475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:47:58.469 [INFO] [Thread-172475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] client lang: <none>
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] server lang: <none>
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] kex follows: False
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] Compression: none
2026-04-11T15:47:58.471 [DEBUG] [Thread-172475] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:47:58.479 [DEBUG] [Thread-172475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:47:58.480 [DEBUG] [Thread-172475] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:47:58.480 [DEBUG] [Thread-172475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:47:58.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:47:58.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:47:58.481 [DEBUG] [Thread-172475] [transport.py] [_log()] userauth is OK
2026-04-11T15:47:58.482 [DEBUG] [Thread-172475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:47:58.482 [DEBUG] [Thread-172475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:47:58.482 [DEBUG] [Thread-172475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:47:58.482 [DEBUG] [Thread-172475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:47:58.500 [INFO] [Thread-172475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:47:58.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:47:59.274 [DEBUG] [Thread-172475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:47:59.274 [DEBUG] [Thread-172475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:47:59.275 [DEBUG] [Thread-172475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:47:59.315 [DEBUG] [Thread-172475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:47:59.315 [DEBUG] [Thread-172475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:47:59.316 [DEBUG] [Thread-172475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:47:59.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:47:59.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:47:59.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:47:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:47:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:47:59.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:47:59.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.574422   +0.00  +14.00   7.96     93  +12.90 3 0 1 3 1   887    0 1.38 9.70 ----- 7.7 8.0 7.7 10.4 14.6 -3.1 14.4 -1.6 14.1 -0.0 14.5 -0.4
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.574422
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:47:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:47:39', tmtdew=0.12815, humidity=99.0904, cloud=0.0, wind=8.61192, temperature=14.3143, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:47:10.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:47:59.331 [DEBUG] [Thread-172475] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:47:59.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:47:59.414 [DEBUG] [Thread-172478] [transport.py] [_log()] starting thread (client mode): 0xae518220
2026-04-11T15:47:59.414 [DEBUG] [Thread-172478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:47:59.427 [DEBUG] [Thread-172478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:47:59.428 [INFO] [Thread-172478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] client lang: <none>
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] server lang: <none>
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] kex follows: False
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] Compression: none
2026-04-11T15:47:59.435 [DEBUG] [Thread-172478] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:47:59.492 [DEBUG] [Thread-172478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:47:59.493 [DEBUG] [Thread-172478] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:47:59.493 [DEBUG] [Thread-172478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:47:59.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:47:59.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:47:59.549 [DEBUG] [Thread-172478] [transport.py] [_log()] userauth is OK
2026-04-11T15:47:59.550 [DEBUG] [Thread-172478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:47:59.550 [DEBUG] [Thread-172478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:47:59.550 [DEBUG] [Thread-172478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:47:59.550 [DEBUG] [Thread-172478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:47:59.570 [INFO] [Thread-172478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:47:59.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:47:59.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:48:00.349 [DEBUG] [Thread-172478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:48:00.350 [DEBUG] [Thread-172478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:48:00.398 [DEBUG] [Thread-172478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:48:00.398 [DEBUG] [Thread-172478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:48:00.410 [DEBUG] [Thread-172478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:48:00.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:48:00.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-04-11T15:48:00.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:48:00.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:48:00.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:48:00.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:48:00.446 [DEBUG] [Thread-172478] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:48:08.921 [DEBUG] [Thread-172480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:48:13.941 [DEBUG] [Thread-172481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:48:21.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:48:21.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:48:23.974 [DEBUG] [Thread-172482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:48:30.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:48:30.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:48:30.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-04-11T15:48:31.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 48, 14), 0.06404, 99.5454, 0.0, 7.0416, 13.7407, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:48:31.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:48:14
2026-04-11T15:48:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:48:32.374 [DEBUG] [Thread-172483] [transport.py] [_log()] starting thread (client mode): 0xae519b70
2026-04-11T15:48:32.374 [DEBUG] [Thread-172483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:48:32.394 [DEBUG] [Thread-172483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:48:32.394 [INFO] [Thread-172483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] client lang: <none>
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] server lang: <none>
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] kex follows: False
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:48:32.398 [DEBUG] [Thread-172483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:48:32.399 [DEBUG] [Thread-172483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:48:32.399 [DEBUG] [Thread-172483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:48:32.399 [DEBUG] [Thread-172483] [transport.py] [_log()] Compression: none
2026-04-11T15:48:32.399 [DEBUG] [Thread-172483] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:48:32.415 [DEBUG] [Thread-172483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:48:32.415 [DEBUG] [Thread-172483] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:48:32.415 [DEBUG] [Thread-172483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:48:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:48:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:48:32.417 [DEBUG] [Thread-172483] [transport.py] [_log()] userauth is OK
2026-04-11T15:48:32.417 [DEBUG] [Thread-172483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:48:32.417 [DEBUG] [Thread-172483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:48:32.417 [DEBUG] [Thread-172483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:48:32.417 [DEBUG] [Thread-172483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:48:32.433 [INFO] [Thread-172483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:48:32.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:48:33.202 [DEBUG] [Thread-172483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:48:33.202 [DEBUG] [Thread-172483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:48:33.202 [DEBUG] [Thread-172483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:48:33.242 [DEBUG] [Thread-172483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:48:33.243 [DEBUG] [Thread-172483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:48:33.246 [DEBUG] [Thread-172483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:48:33.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:48:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:48:33.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:48:33.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:48:33.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:48:33.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:48:33.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:48:33.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:48:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:48:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.575116   +0.00  +13.90   7.72     93  +12.80 3 0 1 3 1   887    0 1.35 9.06 ----- 8.7 7.7 9.2 11.5 14.6 -3.0 14.4 -1.6 14.1 -0.0 14.5 -0.2
2026-04-11T15:48:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:48:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:48:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.575116
2026-04-11T15:48:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:48:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:48:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:48:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:48:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:48:33.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:48:14', tmtdew=0.06404, humidity=99.5454, cloud=0.0, wind=7.0416, temperature=13.7407, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:48:10.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:48:33.268 [DEBUG] [Thread-172483] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:48:33.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:48:33.357 [DEBUG] [Thread-172486] [transport.py] [_log()] starting thread (client mode): 0xae50bb20
2026-04-11T15:48:33.357 [DEBUG] [Thread-172486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:48:33.372 [DEBUG] [Thread-172486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:48:33.372 [INFO] [Thread-172486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] client lang: <none>
2026-04-11T15:48:33.379 [DEBUG] [Thread-172486] [transport.py] [_log()] server lang: <none>
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] kex follows: False
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] Compression: none
2026-04-11T15:48:33.380 [DEBUG] [Thread-172486] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:48:33.438 [DEBUG] [Thread-172486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:48:33.438 [DEBUG] [Thread-172486] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:48:33.439 [DEBUG] [Thread-172486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:48:33.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:48:33.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:48:33.494 [DEBUG] [Thread-172486] [transport.py] [_log()] userauth is OK
2026-04-11T15:48:33.494 [DEBUG] [Thread-172486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:48:33.494 [DEBUG] [Thread-172486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:48:33.494 [DEBUG] [Thread-172486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:48:33.494 [DEBUG] [Thread-172486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:48:33.514 [INFO] [Thread-172486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:48:33.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:48:33.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:48:34.362 [DEBUG] [Thread-172486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:48:34.362 [DEBUG] [Thread-172486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:48:34.417 [DEBUG] [Thread-172486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:48:34.417 [DEBUG] [Thread-172486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:48:34.425 [DEBUG] [Thread-172486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:48:34.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:48:34.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-04-11T15:48:34.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:48:34.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:48:34.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:48:34.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:48:34.459 [DEBUG] [Thread-172486] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:48:39.009 [DEBUG] [Thread-172488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:48:54.059 [DEBUG] [Thread-172489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:04.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:49:04.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:49:04.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-04-11T15:49:05.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 48, 50), 0.12287, 99.1243, 0.0, 9.63504, 14.3147, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:49:05.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:48:50
2026-04-11T15:49:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:49:06.320 [DEBUG] [Thread-172490] [transport.py] [_log()] starting thread (client mode): 0xae51b8e0
2026-04-11T15:49:06.320 [DEBUG] [Thread-172490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:49:06.340 [DEBUG] [Thread-172490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:49:06.340 [INFO] [Thread-172490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:49:06.343 [DEBUG] [Thread-172490] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:49:06.343 [DEBUG] [Thread-172490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] client lang: <none>
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] server lang: <none>
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] kex follows: False
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] Compression: none
2026-04-11T15:49:06.344 [DEBUG] [Thread-172490] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:49:06.352 [DEBUG] [Thread-172490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:49:06.353 [DEBUG] [Thread-172490] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:49:06.353 [DEBUG] [Thread-172490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:49:06.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:49:06.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:49:06.355 [DEBUG] [Thread-172490] [transport.py] [_log()] userauth is OK
2026-04-11T15:49:06.355 [DEBUG] [Thread-172490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:49:06.355 [DEBUG] [Thread-172490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:49:06.355 [DEBUG] [Thread-172490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:49:06.355 [DEBUG] [Thread-172490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:49:06.391 [INFO] [Thread-172490] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:49:06.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:49:07.204 [DEBUG] [Thread-172490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:49:07.204 [DEBUG] [Thread-172490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:49:07.204 [DEBUG] [Thread-172490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:49:07.245 [DEBUG] [Thread-172490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:49:07.246 [DEBUG] [Thread-172490] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:49:07.249 [DEBUG] [Thread-172490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:49:07.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:49:07.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:49:07.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:49:07.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:49:07.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:49:07.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:49:07.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:49:07.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:49:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.575464   +0.00  +13.80   8.85     92  +12.60 3 0 1 3 1   887    0 1.32 8.44 ----- 12.2 8.8 352.6 14.7 14.6 -3.4 14.4 -1.8 14.2 -0.2 14.5 -0.4
2026-04-11T15:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.575464
2026-04-11T15:49:07.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:49:07.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:49:07.277 [DEBUG] [Thread-172490] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:49:07.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:49:07.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:49:07.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:49:07.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:48:50', tmtdew=0.12287, humidity=99.1243, cloud=0.0, wind=9.63504, temperature=14.3147, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:48:40.090', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:49:07.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:49:07.381 [DEBUG] [Thread-172493] [transport.py] [_log()] starting thread (client mode): 0xae51ae60
2026-04-11T15:49:07.381 [DEBUG] [Thread-172493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:49:07.396 [DEBUG] [Thread-172493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:49:07.396 [INFO] [Thread-172493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] client lang: <none>
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] server lang: <none>
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] kex follows: False
2026-04-11T15:49:07.404 [DEBUG] [Thread-172493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:49:07.405 [DEBUG] [Thread-172493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:49:07.405 [DEBUG] [Thread-172493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:49:07.405 [DEBUG] [Thread-172493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:49:07.405 [DEBUG] [Thread-172493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:49:07.405 [DEBUG] [Thread-172493] [transport.py] [_log()] Compression: none
2026-04-11T15:49:07.405 [DEBUG] [Thread-172493] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:49:07.469 [DEBUG] [Thread-172493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:49:07.469 [DEBUG] [Thread-172493] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:49:07.470 [DEBUG] [Thread-172493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:49:07.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:49:07.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:49:07.533 [DEBUG] [Thread-172493] [transport.py] [_log()] userauth is OK
2026-04-11T15:49:07.533 [DEBUG] [Thread-172493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:49:07.534 [DEBUG] [Thread-172493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:49:07.534 [DEBUG] [Thread-172493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:49:07.534 [DEBUG] [Thread-172493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:49:07.556 [INFO] [Thread-172493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:49:07.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:49:07.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:49:08.399 [DEBUG] [Thread-172493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:49:08.399 [DEBUG] [Thread-172493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:49:08.447 [DEBUG] [Thread-172493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:49:08.447 [DEBUG] [Thread-172493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:49:08.456 [DEBUG] [Thread-172493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:49:08.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:49:08.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-04-11T15:49:08.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:49:08.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:49:08.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:49:08.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:49:08.493 [DEBUG] [Thread-172493] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:49:09.096 [DEBUG] [Thread-172495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:13.988 [DEBUG] [Thread-172496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:22.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:22.111 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:24.154 [DEBUG] [Thread-172497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:49:38.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:49:38.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-04-11T15:49:39.192 [DEBUG] [Thread-172498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:49:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 49, 25), 0.11917, 99.5124, 0.0, 7.64136, 13.7742, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:49:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:49:25
2026-04-11T15:49:40.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:49:40.341 [DEBUG] [Thread-172499] [transport.py] [_log()] starting thread (client mode): 0xae509a50
2026-04-11T15:49:40.341 [DEBUG] [Thread-172499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:49:40.362 [DEBUG] [Thread-172499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:49:40.363 [INFO] [Thread-172499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:40.366 [DEBUG] [Thread-172499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] client lang: <none>
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] server lang: <none>
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] kex follows: False
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] Compression: none
2026-04-11T15:49:40.367 [DEBUG] [Thread-172499] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:49:40.384 [DEBUG] [Thread-172499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:49:40.385 [DEBUG] [Thread-172499] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:49:40.385 [DEBUG] [Thread-172499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:49:40.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:49:40.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:49:40.387 [DEBUG] [Thread-172499] [transport.py] [_log()] userauth is OK
2026-04-11T15:49:40.388 [DEBUG] [Thread-172499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:49:40.388 [DEBUG] [Thread-172499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:49:40.388 [DEBUG] [Thread-172499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:49:40.388 [DEBUG] [Thread-172499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:49:40.412 [INFO] [Thread-172499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:49:40.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:49:41.208 [DEBUG] [Thread-172499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:49:41.209 [DEBUG] [Thread-172499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:49:41.209 [DEBUG] [Thread-172499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:49:41.250 [DEBUG] [Thread-172499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:49:41.250 [DEBUG] [Thread-172499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:49:41.254 [DEBUG] [Thread-172499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:49:41.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:49:41.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:49:41.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:49:41.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:49:41.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:49:41.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:49:41.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:49:41.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:49:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:49:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.575811   +0.00  +13.80   6.52     92  +12.60 3 0 1 3 1   887    0 1.36 9.27 ----- 6.5 6.5 350.6 11.7 14.6 -3.2 14.4 -1.8 14.2 -0.1 14.5 -0.4
2026-04-11T15:49:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:49:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:49:41.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.575811
2026-04-11T15:49:41.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:49:41.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:49:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:49:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:49:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:49:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:49:25', tmtdew=0.11917, humidity=99.5124, cloud=0.0, wind=7.64136, temperature=13.7742, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:49:10.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:49:41.283 [DEBUG] [Thread-172499] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:49:41.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:49:41.376 [DEBUG] [Thread-172502] [transport.py] [_log()] starting thread (client mode): 0xae5b37c0
2026-04-11T15:49:41.377 [DEBUG] [Thread-172502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:49:41.391 [DEBUG] [Thread-172502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:49:41.391 [INFO] [Thread-172502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:49:41.398 [DEBUG] [Thread-172502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] client lang: <none>
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] server lang: <none>
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] kex follows: False
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] Compression: none
2026-04-11T15:49:41.399 [DEBUG] [Thread-172502] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:49:41.464 [DEBUG] [Thread-172502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:49:41.465 [DEBUG] [Thread-172502] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:49:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:49:41.466 [DEBUG] [Thread-172502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:49:41.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:49:41.521 [DEBUG] [Thread-172502] [transport.py] [_log()] userauth is OK
2026-04-11T15:49:41.522 [DEBUG] [Thread-172502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:49:41.522 [DEBUG] [Thread-172502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:49:41.522 [DEBUG] [Thread-172502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:49:41.522 [DEBUG] [Thread-172502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:49:41.540 [INFO] [Thread-172502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:49:41.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:49:41.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:49:42.364 [DEBUG] [Thread-172502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:49:42.365 [DEBUG] [Thread-172502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:49:42.413 [DEBUG] [Thread-172502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:49:42.413 [DEBUG] [Thread-172502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:49:42.422 [DEBUG] [Thread-172502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:49:42.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:49:42.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-04-11T15:49:42.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-04-11T15:49:42.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:49:42.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:49:42.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:49:42.461 [DEBUG] [Thread-172502] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:49:54.235 [DEBUG] [Thread-172504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:09.290 [DEBUG] [Thread-172505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:50:12.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:50: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-04-11T15:50:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 50), 0.12687, 99.4627, 0.0, 10.3586, 13.6582, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:50:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:50:00
2026-04-11T15:50:14.048 [DEBUG] [Thread-172506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:50:14.307 [DEBUG] [Thread-172507] [transport.py] [_log()] starting thread (client mode): 0xae5e4c40
2026-04-11T15:50:14.308 [DEBUG] [Thread-172507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:50:14.327 [DEBUG] [Thread-172507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:50:14.328 [INFO] [Thread-172507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] client lang: <none>
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] server lang: <none>
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] kex follows: False
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:50:14.331 [DEBUG] [Thread-172507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:50:14.332 [DEBUG] [Thread-172507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:50:14.332 [DEBUG] [Thread-172507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:50:14.332 [DEBUG] [Thread-172507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:50:14.332 [DEBUG] [Thread-172507] [transport.py] [_log()] Compression: none
2026-04-11T15:50:14.332 [DEBUG] [Thread-172507] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:50:14.340 [DEBUG] [Thread-172507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:50:14.341 [DEBUG] [Thread-172507] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:50:14.341 [DEBUG] [Thread-172507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:50:14.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:50:14.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:50:14.343 [DEBUG] [Thread-172507] [transport.py] [_log()] userauth is OK
2026-04-11T15:50:14.343 [DEBUG] [Thread-172507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:50:14.343 [DEBUG] [Thread-172507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:50:14.343 [DEBUG] [Thread-172507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:50:14.343 [DEBUG] [Thread-172507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:50:14.367 [INFO] [Thread-172507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:50:14.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:50:15.635 [DEBUG] [Thread-172507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:50:15.636 [DEBUG] [Thread-172507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:50:15.636 [DEBUG] [Thread-172507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:50:15.677 [DEBUG] [Thread-172507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:50:15.677 [DEBUG] [Thread-172507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:50:15.680 [DEBUG] [Thread-172507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:50:15.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:50:15.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:50:15.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:50:15.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:50:15.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:50:15.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:50:15.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:50:15.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:50:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:50:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.576158   +0.00  +13.80   8.78     92  +12.60 3 0 1 3 1   887    0 1.37 9.77 ----- 6.5 8.8 349.8 11.1 14.6 -3.1 14.3 -2.1 14.2 -0.2 14.4 -0.4
2026-04-11T15:50:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:50:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:50:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.576158
2026-04-11T15:50:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:50:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:50:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:50:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:50:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:50:15.772 [DEBUG] [Thread-172507] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:50:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:50:00', tmtdew=0.12687, humidity=99.4627, cloud=0.0, wind=10.3586, temperature=13.6582, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:49:40.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:50: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-04-11T15:50:15.865 [DEBUG] [Thread-172510] [transport.py] [_log()] starting thread (client mode): 0xae5e40a0
2026-04-11T15:50:15.866 [DEBUG] [Thread-172510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:50:15.880 [DEBUG] [Thread-172510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:50:15.880 [INFO] [Thread-172510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:50:15.887 [DEBUG] [Thread-172510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] client lang: <none>
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] server lang: <none>
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] kex follows: False
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] Compression: none
2026-04-11T15:50:15.888 [DEBUG] [Thread-172510] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:50:15.946 [DEBUG] [Thread-172510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:50:15.947 [DEBUG] [Thread-172510] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:50:15.948 [DEBUG] [Thread-172510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:50:15.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:50:15.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:50:16.002 [DEBUG] [Thread-172510] [transport.py] [_log()] userauth is OK
2026-04-11T15:50:16.003 [DEBUG] [Thread-172510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:50:16.003 [DEBUG] [Thread-172510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:50:16.003 [DEBUG] [Thread-172510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:50:16.003 [DEBUG] [Thread-172510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:50:16.021 [INFO] [Thread-172510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:50:16.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:50:16.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:50:16.818 [DEBUG] [Thread-172510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:50:16.818 [DEBUG] [Thread-172510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:50:16.866 [DEBUG] [Thread-172510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:50:16.866 [DEBUG] [Thread-172510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:50:16.876 [DEBUG] [Thread-172510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:50:16.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:50:16.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:50:16.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:50:16.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:50:16.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:50:16.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:50:16.913 [DEBUG] [Thread-172510] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:50:22.262 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:22.263 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:24.329 [DEBUG] [Thread-172512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:39.391 [DEBUG] [Thread-172513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:50:46.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:50:46.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:50:46.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-04-11T15:50:48.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 50, 36), 0.16385, 98.8601, 0.0, 9.95256, 13.9176, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:50:48.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:50:36
2026-04-11T15:50:48.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:50:48.791 [DEBUG] [Thread-172514] [transport.py] [_log()] starting thread (client mode): 0xae5e4e80
2026-04-11T15:50:48.791 [DEBUG] [Thread-172514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:50:48.810 [DEBUG] [Thread-172514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:50:48.811 [INFO] [Thread-172514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:50:48.813 [DEBUG] [Thread-172514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] client lang: <none>
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] server lang: <none>
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] kex follows: False
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] Compression: none
2026-04-11T15:50:48.814 [DEBUG] [Thread-172514] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:50:48.831 [DEBUG] [Thread-172514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:50:48.831 [DEBUG] [Thread-172514] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:50:48.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:50:48.832 [DEBUG] [Thread-172514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:50:48.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:50:48.834 [DEBUG] [Thread-172514] [transport.py] [_log()] userauth is OK
2026-04-11T15:50:48.834 [DEBUG] [Thread-172514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:50:48.834 [DEBUG] [Thread-172514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:50:48.835 [DEBUG] [Thread-172514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:50:48.835 [DEBUG] [Thread-172514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:50:48.852 [INFO] [Thread-172514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:50:48.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:50:49.634 [DEBUG] [Thread-172514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:50:49.634 [DEBUG] [Thread-172514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:50:49.634 [DEBUG] [Thread-172514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:50:49.675 [DEBUG] [Thread-172514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:50:49.675 [DEBUG] [Thread-172514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:50:49.678 [DEBUG] [Thread-172514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:50:49.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:50:49.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:50:49.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:50:49.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:50:49.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:50:49.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:50:49.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:50:49.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:50:49.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:50:49.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.576505   +0.00  +13.90   8.31     92  +12.70 3 0 1 3 1   887    0 1.41 10.08 ----- 6.4 8.3 334.4 10.3 14.6 -2.9 14.4 -1.7 14.1 -0.1 14.4 -0.1
2026-04-11T15:50:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:50:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:50:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.576505
2026-04-11T15:50:49.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:50:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:50:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:50:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:50:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:50:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:50:36', tmtdew=0.16385, humidity=98.8601, cloud=0.0, wind=9.95256, temperature=13.9176, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:50:10.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:50:49.704 [DEBUG] [Thread-172514] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:50:49.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:50:49.798 [DEBUG] [Thread-172517] [transport.py] [_log()] starting thread (client mode): 0xae5e4f70
2026-04-11T15:50:49.798 [DEBUG] [Thread-172517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:50:49.814 [DEBUG] [Thread-172517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:50:49.814 [INFO] [Thread-172517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] client lang: <none>
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] server lang: <none>
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] kex follows: False
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] Compression: none
2026-04-11T15:50:49.822 [DEBUG] [Thread-172517] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:50:49.879 [DEBUG] [Thread-172517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:50:49.879 [DEBUG] [Thread-172517] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:50:49.879 [DEBUG] [Thread-172517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:50:49.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:50:49.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:50:49.935 [DEBUG] [Thread-172517] [transport.py] [_log()] userauth is OK
2026-04-11T15:50:49.936 [DEBUG] [Thread-172517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:50:49.936 [DEBUG] [Thread-172517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:50:49.936 [DEBUG] [Thread-172517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:50:49.936 [DEBUG] [Thread-172517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:50:49.956 [INFO] [Thread-172517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:50:49.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:50:49.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:50:50.781 [DEBUG] [Thread-172517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:50:50.781 [DEBUG] [Thread-172517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:50:50.828 [DEBUG] [Thread-172517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:50:50.829 [DEBUG] [Thread-172517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:50:50.838 [DEBUG] [Thread-172517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:50:50.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:50:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:50:50.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:50:50.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:50:50.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:50:50.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:50:50.873 [DEBUG] [Thread-172517] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:50:54.427 [DEBUG] [Thread-172519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:09.480 [DEBUG] [Thread-172520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:14.109 [DEBUG] [Thread-172521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:20.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:51:20.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:51:20.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-04-11T15:51:22.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 51, 11), 0.126715, 99.4637, 0.0, 8.96436, 13.5422, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:51:22.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:51:11
2026-04-11T15:51:22.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:22.405 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:51:22.683 [DEBUG] [Thread-172522] [transport.py] [_log()] starting thread (client mode): 0xae560e50
2026-04-11T15:51:22.683 [DEBUG] [Thread-172522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:51:22.704 [DEBUG] [Thread-172522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:51:22.704 [INFO] [Thread-172522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] client lang: <none>
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] server lang: <none>
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] kex follows: False
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] Compression: none
2026-04-11T15:51:22.707 [DEBUG] [Thread-172522] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:51:22.726 [DEBUG] [Thread-172522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:51:22.727 [DEBUG] [Thread-172522] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:51:22.728 [DEBUG] [Thread-172522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:51:22.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:51:22.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:51:22.730 [DEBUG] [Thread-172522] [transport.py] [_log()] userauth is OK
2026-04-11T15:51:22.730 [DEBUG] [Thread-172522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:51:22.730 [DEBUG] [Thread-172522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:51:22.730 [DEBUG] [Thread-172522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:51:22.730 [DEBUG] [Thread-172522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:51:22.745 [INFO] [Thread-172522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:51:22.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:51:23.542 [DEBUG] [Thread-172522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:51:23.542 [DEBUG] [Thread-172522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:51:23.542 [DEBUG] [Thread-172522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:51:23.583 [DEBUG] [Thread-172522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:51:23.584 [DEBUG] [Thread-172522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:51:23.587 [DEBUG] [Thread-172522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:51:23.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:51:23.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:51:23.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:51:23.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:51:23.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:51:23.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:51:23.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:51:23.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:51:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:51:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.576852   +0.00  +13.90   8.42     93  +12.80 3 0 1 3 1   887    0 1.41 9.95 ----- 9.5 8.4 336.6 9.1 14.6 -2.9 14.4 -1.7 14.2 0.0 14.4 -0.1
2026-04-11T15:51:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:51:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:51:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.576852
2026-04-11T15:51:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:51:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:51:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:51:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:51:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:51:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:51:11', tmtdew=0.126715, humidity=99.4637, cloud=0.0, wind=8.96436, temperature=13.5422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:50:40.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:51:23.614 [DEBUG] [Thread-172522] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:51: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-04-11T15:51:23.710 [DEBUG] [Thread-172525] [transport.py] [_log()] starting thread (client mode): 0xb0fe9ed0
2026-04-11T15:51:23.710 [DEBUG] [Thread-172525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:51:23.724 [DEBUG] [Thread-172525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:51:23.724 [INFO] [Thread-172525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:51:23.731 [DEBUG] [Thread-172525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] client lang: <none>
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] server lang: <none>
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] kex follows: False
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] Compression: none
2026-04-11T15:51:23.732 [DEBUG] [Thread-172525] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:51:23.789 [DEBUG] [Thread-172525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:51:23.790 [DEBUG] [Thread-172525] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:51:23.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:51:23.791 [DEBUG] [Thread-172525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:51:23.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:51:23.845 [DEBUG] [Thread-172525] [transport.py] [_log()] userauth is OK
2026-04-11T15:51:23.845 [DEBUG] [Thread-172525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:51:23.846 [DEBUG] [Thread-172525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:51:23.846 [DEBUG] [Thread-172525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:51:23.846 [DEBUG] [Thread-172525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:51:23.864 [INFO] [Thread-172525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:51:23.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:51:23.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:51:24.516 [DEBUG] [Thread-172527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:24.749 [DEBUG] [Thread-172525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:51:24.750 [DEBUG] [Thread-172525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:51:24.798 [DEBUG] [Thread-172525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:51:24.798 [DEBUG] [Thread-172525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:51:24.808 [DEBUG] [Thread-172525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:51:24.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:51:24.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-04-11T15:51:24.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:51:24.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:51:24.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:51:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:51:24.845 [DEBUG] [Thread-172525] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:51:39.571 [DEBUG] [Thread-172528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:54.609 [DEBUG] [Thread-172529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:51:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:51:54.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:51:54.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:51:56.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 51, 47), 0.14827, 98.9605, 0.0, 10.0584, 13.9845, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:51:56.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:51:47
2026-04-11T15:51:56.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:51:56.676 [DEBUG] [Thread-172530] [transport.py] [_log()] starting thread (client mode): 0xae561f30
2026-04-11T15:51:56.676 [DEBUG] [Thread-172530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:51:56.697 [DEBUG] [Thread-172530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:51:56.697 [INFO] [Thread-172530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:51:56.700 [DEBUG] [Thread-172530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] client lang: <none>
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] server lang: <none>
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] kex follows: False
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:51:56.701 [DEBUG] [Thread-172530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:51:56.702 [DEBUG] [Thread-172530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:51:56.702 [DEBUG] [Thread-172530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:51:56.702 [DEBUG] [Thread-172530] [transport.py] [_log()] Compression: none
2026-04-11T15:51:56.702 [DEBUG] [Thread-172530] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:51:56.719 [DEBUG] [Thread-172530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:51:56.720 [DEBUG] [Thread-172530] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:51:56.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:51:56.721 [DEBUG] [Thread-172530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:51:56.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:51:56.723 [DEBUG] [Thread-172530] [transport.py] [_log()] userauth is OK
2026-04-11T15:51:56.724 [DEBUG] [Thread-172530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:51:56.724 [DEBUG] [Thread-172530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:51:56.724 [DEBUG] [Thread-172530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:51:56.724 [DEBUG] [Thread-172530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:51:56.749 [INFO] [Thread-172530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:51:56.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:51:57.529 [DEBUG] [Thread-172530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:51:57.530 [DEBUG] [Thread-172530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:51:57.530 [DEBUG] [Thread-172530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:51:57.570 [DEBUG] [Thread-172530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:51:57.570 [DEBUG] [Thread-172530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:51:57.573 [DEBUG] [Thread-172530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:51:57.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:51:57.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:51:57.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:51:57.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:51:57.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:51:57.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:51:57.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:51:57.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:51:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:51:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.577200   +0.00  +13.90   9.07     93  +12.80 3 0 1 3 1   887    0 1.40 9.66 ----- 8.3 9.1 337.4 10.3 14.6 -2.9 14.5 -1.0 14.2 -0.1 14.5 0.1
2026-04-11T15:51:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:51:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:51:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.577200
2026-04-11T15:51:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:51:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:51:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:51:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:51:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:51:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:51:47', tmtdew=0.14827, humidity=98.9605, cloud=0.0, wind=10.0584, temperature=13.9845, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:51:10.080', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:51:57.600 [DEBUG] [Thread-172530] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:51:57.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:51:57.693 [DEBUG] [Thread-172533] [transport.py] [_log()] starting thread (client mode): 0xae5365f0
2026-04-11T15:51:57.693 [DEBUG] [Thread-172533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:51:57.708 [DEBUG] [Thread-172533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:51:57.708 [INFO] [Thread-172533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:51:57.715 [DEBUG] [Thread-172533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] client lang: <none>
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] server lang: <none>
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] kex follows: False
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] Compression: none
2026-04-11T15:51:57.716 [DEBUG] [Thread-172533] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:51:57.776 [DEBUG] [Thread-172533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:51:57.776 [DEBUG] [Thread-172533] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:51:57.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:51:57.778 [DEBUG] [Thread-172533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:51:57.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:51:57.834 [DEBUG] [Thread-172533] [transport.py] [_log()] userauth is OK
2026-04-11T15:51:57.835 [DEBUG] [Thread-172533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:51:57.835 [DEBUG] [Thread-172533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:51:57.835 [DEBUG] [Thread-172533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:51:57.835 [DEBUG] [Thread-172533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:51:57.860 [INFO] [Thread-172533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:51:57.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:51:57.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:51:58.709 [DEBUG] [Thread-172533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:51:58.709 [DEBUG] [Thread-172533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:51:58.757 [DEBUG] [Thread-172533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:51:58.757 [DEBUG] [Thread-172533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:51:58.767 [DEBUG] [Thread-172533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:51:58.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:51:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:51:58.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:51:58.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:51:58.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:51:58.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:51:58.807 [DEBUG] [Thread-172533] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:52:09.646 [DEBUG] [Thread-172535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:52:14.163 [DEBUG] [Thread-172536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:52:22.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:52:22.546 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:52:24.704 [DEBUG] [Thread-172537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:52:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:52:28.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:52:28.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-04-11T15:52:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 52, 22), 0.071515, 99.4971, 0.0, 8.64684, 13.5756, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:52:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:52:22
2026-04-11T15:52:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:52:30.647 [DEBUG] [Thread-172538] [transport.py] [_log()] starting thread (client mode): 0xae5b37c0
2026-04-11T15:52:30.647 [DEBUG] [Thread-172538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:52:30.668 [DEBUG] [Thread-172538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:52:30.668 [INFO] [Thread-172538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:52:30.671 [DEBUG] [Thread-172538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:52:30.671 [DEBUG] [Thread-172538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:52:30.671 [DEBUG] [Thread-172538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] client lang: <none>
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] server lang: <none>
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] kex follows: False
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] Compression: none
2026-04-11T15:52:30.672 [DEBUG] [Thread-172538] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:52:30.690 [DEBUG] [Thread-172538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:52:30.690 [DEBUG] [Thread-172538] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:52:30.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:52:30.692 [DEBUG] [Thread-172538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:52:30.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:52:30.694 [DEBUG] [Thread-172538] [transport.py] [_log()] userauth is OK
2026-04-11T15:52:30.694 [DEBUG] [Thread-172538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:52:30.694 [DEBUG] [Thread-172538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:52:30.694 [DEBUG] [Thread-172538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:52:30.694 [DEBUG] [Thread-172538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:52:30.718 [INFO] [Thread-172538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:52:30.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:52:31.488 [DEBUG] [Thread-172538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:52:31.488 [DEBUG] [Thread-172538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:52:31.489 [DEBUG] [Thread-172538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:52:31.529 [DEBUG] [Thread-172538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:52:31.530 [DEBUG] [Thread-172538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:52:31.533 [DEBUG] [Thread-172538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:52:31.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:52:31.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:52:31.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:52:31.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:52:31.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:52:31.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:52:31.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:52:31.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:52:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:52:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.577547   +0.00  +13.80   8.01     93  +12.70 3 0 1 3 1   887    0 1.33 8.94 ----- 7.4 8.0 341.0 10.0 14.6 -2.9 14.5 -1.3 14.2 -0.0 14.5 -0.0
2026-04-11T15:52:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:52:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:52:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.577547
2026-04-11T15:52:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:52:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:52:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:52:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:52:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:52:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:52:22', tmtdew=0.071515, humidity=99.4971, cloud=0.0, wind=8.64684, temperature=13.5756, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:51:40.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:52:31.559 [DEBUG] [Thread-172538] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:52: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-04-11T15:52:31.653 [DEBUG] [Thread-172541] [transport.py] [_log()] starting thread (client mode): 0xa7952ce0
2026-04-11T15:52:31.653 [DEBUG] [Thread-172541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:52:31.667 [DEBUG] [Thread-172541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:52:31.668 [INFO] [Thread-172541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:52:31.675 [DEBUG] [Thread-172541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:52:31.675 [DEBUG] [Thread-172541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:52:31.675 [DEBUG] [Thread-172541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:52:31.675 [DEBUG] [Thread-172541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:52:31.675 [DEBUG] [Thread-172541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] client lang: <none>
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] server lang: <none>
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] kex follows: False
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] Compression: none
2026-04-11T15:52:31.676 [DEBUG] [Thread-172541] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:52:31.732 [DEBUG] [Thread-172541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:52:31.733 [DEBUG] [Thread-172541] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:52:31.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:52:31.734 [DEBUG] [Thread-172541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:52:31.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:52:31.789 [DEBUG] [Thread-172541] [transport.py] [_log()] userauth is OK
2026-04-11T15:52:31.789 [DEBUG] [Thread-172541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:52:31.789 [DEBUG] [Thread-172541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:52:31.790 [DEBUG] [Thread-172541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:52:31.790 [DEBUG] [Thread-172541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:52:31.809 [INFO] [Thread-172541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:52:31.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:52:31.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:52:32.609 [DEBUG] [Thread-172541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:52:32.609 [DEBUG] [Thread-172541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:52:32.657 [DEBUG] [Thread-172541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:52:32.658 [DEBUG] [Thread-172541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:52:32.667 [DEBUG] [Thread-172541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:52:32.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:52:32.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-04-11T15:52:32.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-04-11T15:52:32.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:52:32.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:52:32.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:52:32.704 [DEBUG] [Thread-172541] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:52:39.740 [DEBUG] [Thread-172543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:52:54.788 [DEBUG] [Thread-172544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:53:02.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:53:02.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-04-11T15:53:04.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 52, 22), 0.071515, 99.4971, 0.0, 8.64684, 13.5756, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:53:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:52:22
2026-04-11T15:53:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:53:04.725 [DEBUG] [Thread-172545] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-11T15:53:04.725 [DEBUG] [Thread-172545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:53:04.746 [DEBUG] [Thread-172545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:53:04.746 [INFO] [Thread-172545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] client lang: <none>
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] server lang: <none>
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] kex follows: False
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] Compression: none
2026-04-11T15:53:04.750 [DEBUG] [Thread-172545] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:53:04.767 [DEBUG] [Thread-172545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:53:04.768 [DEBUG] [Thread-172545] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:53:04.768 [DEBUG] [Thread-172545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:53:04.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:53:04.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:53:04.770 [DEBUG] [Thread-172545] [transport.py] [_log()] userauth is OK
2026-04-11T15:53:04.770 [DEBUG] [Thread-172545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:53:04.771 [DEBUG] [Thread-172545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:53:04.771 [DEBUG] [Thread-172545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:53:04.771 [DEBUG] [Thread-172545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:53:04.794 [INFO] [Thread-172545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:53:04.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:53:05.571 [DEBUG] [Thread-172545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:53:05.571 [DEBUG] [Thread-172545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:53:05.572 [DEBUG] [Thread-172545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:53:05.612 [DEBUG] [Thread-172545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:53:05.612 [DEBUG] [Thread-172545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:53:05.616 [DEBUG] [Thread-172545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:53:05.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:53:05.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:53:05.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:53:05.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:53:05.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:53:05.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:53:05.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:53:05.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:53:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:53:05.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.577894   +0.00  +13.80   5.71     93  +12.80 3 0 1 3 1   887    0 1.37 8.91 ----- 5.6 5.7 13.4 9.4 14.6 -2.3 14.5 -1.1 14.2 -0.1 14.6 0.0
2026-04-11T15:53:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:53:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:53:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.577894
2026-04-11T15:53:05.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:53:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:53:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:53:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:53:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:53:05.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:52:22', tmtdew=0.071515, humidity=99.4971, cloud=0.0, wind=8.64684, temperature=13.5756, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:52:10.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:53:05.645 [DEBUG] [Thread-172545] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:53:05.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:53:05.750 [DEBUG] [Thread-172548] [transport.py] [_log()] starting thread (client mode): 0xae562dd0
2026-04-11T15:53:05.750 [DEBUG] [Thread-172548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:53:05.764 [DEBUG] [Thread-172548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:53:05.764 [INFO] [Thread-172548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] client lang: <none>
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] server lang: <none>
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] kex follows: False
2026-04-11T15:53:05.772 [DEBUG] [Thread-172548] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:53:05.773 [DEBUG] [Thread-172548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:53:05.773 [DEBUG] [Thread-172548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:53:05.773 [DEBUG] [Thread-172548] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:53:05.773 [DEBUG] [Thread-172548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:53:05.773 [DEBUG] [Thread-172548] [transport.py] [_log()] Compression: none
2026-04-11T15:53:05.773 [DEBUG] [Thread-172548] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:53:05.831 [DEBUG] [Thread-172548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:53:05.832 [DEBUG] [Thread-172548] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:53:05.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:53:05.833 [DEBUG] [Thread-172548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:53:05.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:53:05.887 [DEBUG] [Thread-172548] [transport.py] [_log()] userauth is OK
2026-04-11T15:53:05.887 [DEBUG] [Thread-172548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:53:05.888 [DEBUG] [Thread-172548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:53:05.888 [DEBUG] [Thread-172548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:53:05.888 [DEBUG] [Thread-172548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:53:05.906 [INFO] [Thread-172548] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:53:05.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:53:05.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:53:06.738 [DEBUG] [Thread-172548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:53:06.739 [DEBUG] [Thread-172548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:53:06.787 [DEBUG] [Thread-172548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:53:06.787 [DEBUG] [Thread-172548] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:53:06.796 [DEBUG] [Thread-172548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:53:06.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:53:06.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:53:06.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-04-11T15:53:06.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:53:06.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:53:06.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:53:06.833 [DEBUG] [Thread-172548] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:53:09.824 [DEBUG] [Thread-172550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:14.224 [DEBUG] [Thread-172551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:22.687 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:22.688 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:24.878 [DEBUG] [Thread-172552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:36.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:53:36.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:53:36.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:53:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 52, 57), 0.11893, 99.5137, 0.0, 8.48808, 13.6756, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:53:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:52:57
2026-04-11T15:53:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:53:38.716 [DEBUG] [Thread-172553] [transport.py] [_log()] starting thread (client mode): 0xae5e4f70
2026-04-11T15:53:38.716 [DEBUG] [Thread-172553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:53:38.736 [DEBUG] [Thread-172553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:53:38.736 [INFO] [Thread-172553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:53:38.739 [DEBUG] [Thread-172553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:53:38.739 [DEBUG] [Thread-172553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:53:38.739 [DEBUG] [Thread-172553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:53:38.739 [DEBUG] [Thread-172553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] client lang: <none>
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] server lang: <none>
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] kex follows: False
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:53:38.740 [DEBUG] [Thread-172553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:53:38.741 [DEBUG] [Thread-172553] [transport.py] [_log()] Compression: none
2026-04-11T15:53:38.741 [DEBUG] [Thread-172553] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:53:38.760 [DEBUG] [Thread-172553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:53:38.761 [DEBUG] [Thread-172553] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:53:38.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:53:38.762 [DEBUG] [Thread-172553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:53:38.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:53:38.764 [DEBUG] [Thread-172553] [transport.py] [_log()] userauth is OK
2026-04-11T15:53:38.764 [DEBUG] [Thread-172553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:53:38.765 [DEBUG] [Thread-172553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:53:38.765 [DEBUG] [Thread-172553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:53:38.765 [DEBUG] [Thread-172553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:53:38.791 [INFO] [Thread-172553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:53:38.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:53:39.585 [DEBUG] [Thread-172553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:53:39.585 [DEBUG] [Thread-172553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:53:39.586 [DEBUG] [Thread-172553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:53:39.626 [DEBUG] [Thread-172553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:53:39.626 [DEBUG] [Thread-172553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:53:39.629 [DEBUG] [Thread-172553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:53:39.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:53:39.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:53:39.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:53:39.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:53:39.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:53:39.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:53:39.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:53:39.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:53:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:53:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.578241   +0.00  +13.80   8.97     93  +12.70 3 0 1 3 1   887    0 1.35 8.12 ----- 6.4 9.0 6.0 10.7 14.6 -2.3 14.5 -2.4 14.3 -0.2 14.5 -0.2
2026-04-11T15:53:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:53:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:53:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.578241
2026-04-11T15:53:39.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:53:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:53:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:53:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:53:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:53:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:52:57', tmtdew=0.11893, humidity=99.5137, cloud=0.0, wind=8.48808, temperature=13.6756, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:52:40.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:53:39.655 [DEBUG] [Thread-172553] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:53:39.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:53:39.749 [DEBUG] [Thread-172556] [transport.py] [_log()] starting thread (client mode): 0xae562440
2026-04-11T15:53:39.749 [DEBUG] [Thread-172556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:53:39.764 [DEBUG] [Thread-172556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:53:39.765 [INFO] [Thread-172556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:53:39.772 [DEBUG] [Thread-172556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:53:39.772 [DEBUG] [Thread-172556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] client lang: <none>
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] server lang: <none>
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] kex follows: False
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] Compression: none
2026-04-11T15:53:39.773 [DEBUG] [Thread-172556] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:53:39.829 [DEBUG] [Thread-172556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:53:39.829 [DEBUG] [Thread-172556] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:53:39.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:53:39.831 [DEBUG] [Thread-172556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:53:39.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:53:39.885 [DEBUG] [Thread-172556] [transport.py] [_log()] userauth is OK
2026-04-11T15:53:39.886 [DEBUG] [Thread-172556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:53:39.886 [DEBUG] [Thread-172556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:53:39.886 [DEBUG] [Thread-172556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:53:39.886 [DEBUG] [Thread-172556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:53:39.905 [INFO] [Thread-172556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:53:39.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:53:39.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:53:39.919 [DEBUG] [Thread-172558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:53:40.730 [DEBUG] [Thread-172556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:53:40.730 [DEBUG] [Thread-172556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:53:40.779 [DEBUG] [Thread-172556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:53:40.779 [DEBUG] [Thread-172556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:53:40.788 [DEBUG] [Thread-172556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:53:40.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:53:40.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:53:40.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-04-11T15:53:40.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:53:40.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:53:40.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:53:40.822 [DEBUG] [Thread-172556] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:53:54.982 [DEBUG] [Thread-172559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:10.020 [DEBUG] [Thread-172560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:54:10.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:54:10.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:54:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 53, 33), 0.14809, 98.9617, 0.0, 9.84672, 14.0184, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:54:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:53:33
2026-04-11T15:54:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:54:12.684 [DEBUG] [Thread-172561] [transport.py] [_log()] starting thread (client mode): 0xb0febe50
2026-04-11T15:54:12.684 [DEBUG] [Thread-172561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:54:12.704 [DEBUG] [Thread-172561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:54:12.704 [INFO] [Thread-172561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] client lang: <none>
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] server lang: <none>
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] kex follows: False
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:54:12.707 [DEBUG] [Thread-172561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:54:12.708 [DEBUG] [Thread-172561] [transport.py] [_log()] Compression: none
2026-04-11T15:54:12.708 [DEBUG] [Thread-172561] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:54:12.725 [DEBUG] [Thread-172561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:54:12.725 [DEBUG] [Thread-172561] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:54:12.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:54:12.726 [DEBUG] [Thread-172561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:54:12.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:54:12.729 [DEBUG] [Thread-172561] [transport.py] [_log()] userauth is OK
2026-04-11T15:54:12.729 [DEBUG] [Thread-172561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:54:12.729 [DEBUG] [Thread-172561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:54:12.729 [DEBUG] [Thread-172561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:54:12.729 [DEBUG] [Thread-172561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:54:12.754 [INFO] [Thread-172561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:54:12.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:54:13.521 [DEBUG] [Thread-172561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:54:13.521 [DEBUG] [Thread-172561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:54:13.522 [DEBUG] [Thread-172561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:54:13.562 [DEBUG] [Thread-172561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:54:13.562 [DEBUG] [Thread-172561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:54:13.565 [DEBUG] [Thread-172561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:54:13.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:54:13.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:54:13.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:54:13.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:54:13.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:54:13.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:54:13.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:54:13.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:54:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:54:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.578936   +0.00  +13.70   9.08     93  +12.60 3 0 1 3 1   887    0 1.33 8.14 ----- 7.2 9.1 345.4 11.1 14.6 -0.6 14.4 -2.5 14.2 -0.4 14.4 -0.6
2026-04-11T15:54:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:54:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:54:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.578936
2026-04-11T15:54:13.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:54:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:54:13.589 [DEBUG] [Thread-172561] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:54:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:54:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:54:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:54:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:53:33', tmtdew=0.14809, humidity=98.9617, cloud=0.0, wind=9.84672, temperature=14.0184, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:53:40.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:54:13.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:54:13.685 [DEBUG] [Thread-172564] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-11T15:54:13.685 [DEBUG] [Thread-172564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:54:13.701 [DEBUG] [Thread-172564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:54:13.701 [INFO] [Thread-172564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:13.708 [DEBUG] [Thread-172564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] client lang: <none>
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] server lang: <none>
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] kex follows: False
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] Compression: none
2026-04-11T15:54:13.709 [DEBUG] [Thread-172564] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:54:13.767 [DEBUG] [Thread-172564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:54:13.768 [DEBUG] [Thread-172564] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:54:13.769 [DEBUG] [Thread-172564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:54:13.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:54:13.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:54:13.823 [DEBUG] [Thread-172564] [transport.py] [_log()] userauth is OK
2026-04-11T15:54:13.823 [DEBUG] [Thread-172564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:54:13.824 [DEBUG] [Thread-172564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:54:13.824 [DEBUG] [Thread-172564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:54:13.824 [DEBUG] [Thread-172564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:54:13.842 [INFO] [Thread-172564] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:54:13.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:54:13.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:54:14.288 [DEBUG] [Thread-172566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:14.659 [DEBUG] [Thread-172564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:54:14.660 [DEBUG] [Thread-172564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:54:14.707 [DEBUG] [Thread-172564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:54:14.707 [DEBUG] [Thread-172564] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:54:14.716 [DEBUG] [Thread-172564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:54:14.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:54:14.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-04-11T15:54:14.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:54:14.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:54:14.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:54:14.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:54:14.754 [DEBUG] [Thread-172564] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:54:22.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:22.829 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:25.058 [DEBUG] [Thread-172567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:40.113 [DEBUG] [Thread-172568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:54:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:54:44.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:54:44.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-04-11T15:54:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 54, 8), 0.121485, 99.4974, 0.0, 9.17604, 13.709, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:54:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:54:08
2026-04-11T15:54:46.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:54:46.625 [DEBUG] [Thread-172569] [transport.py] [_log()] starting thread (client mode): 0xb0fe8040
2026-04-11T15:54:46.625 [DEBUG] [Thread-172569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:54:46.646 [DEBUG] [Thread-172569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:54:46.646 [INFO] [Thread-172569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:46.649 [DEBUG] [Thread-172569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] client lang: <none>
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] server lang: <none>
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] kex follows: False
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] Compression: none
2026-04-11T15:54:46.650 [DEBUG] [Thread-172569] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:54:46.665 [DEBUG] [Thread-172569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:54:46.665 [DEBUG] [Thread-172569] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:54:46.665 [DEBUG] [Thread-172569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:54:46.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:54:46.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:54:46.666 [DEBUG] [Thread-172569] [transport.py] [_log()] userauth is OK
2026-04-11T15:54:46.667 [DEBUG] [Thread-172569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:54:46.667 [DEBUG] [Thread-172569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:54:46.667 [DEBUG] [Thread-172569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:54:46.667 [DEBUG] [Thread-172569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:54:46.683 [INFO] [Thread-172569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:54:46.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:54:47.487 [DEBUG] [Thread-172569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:54:47.487 [DEBUG] [Thread-172569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:54:47.487 [DEBUG] [Thread-172569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:54:47.528 [DEBUG] [Thread-172569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:54:47.528 [DEBUG] [Thread-172569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:54:47.532 [DEBUG] [Thread-172569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:54:47.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:54:47.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:54:47.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:54:47.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:54:47.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:54:47.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:54:47.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:54:47.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:54:47.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:54:47.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.579283   +0.00  +13.80   6.71     92  +12.60 3 0 1 3 1   887    0 1.40 8.68 ----- 8.0 6.7 3.2 8.6 14.5 -0.4 14.4 -2.6 14.2 -0.4 14.4 -0.1
2026-04-11T15:54:47.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:54:47.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:54:47.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.579283
2026-04-11T15:54:47.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:54:47.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:54:47.559 [DEBUG] [Thread-172569] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:54:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:54:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:54:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:54:47.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:54:08', tmtdew=0.121485, humidity=99.4974, cloud=0.0, wind=9.17604, temperature=13.709, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:54:10.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:54:47.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:54:47.654 [DEBUG] [Thread-172572] [transport.py] [_log()] starting thread (client mode): 0xb0febd90
2026-04-11T15:54:47.654 [DEBUG] [Thread-172572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:54:47.668 [DEBUG] [Thread-172572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:54:47.669 [INFO] [Thread-172572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:54:47.676 [DEBUG] [Thread-172572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] client lang: <none>
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] server lang: <none>
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] kex follows: False
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] Compression: none
2026-04-11T15:54:47.677 [DEBUG] [Thread-172572] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:54:47.735 [DEBUG] [Thread-172572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:54:47.736 [DEBUG] [Thread-172572] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:54:47.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:54:47.737 [DEBUG] [Thread-172572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:54:47.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:54:47.793 [DEBUG] [Thread-172572] [transport.py] [_log()] userauth is OK
2026-04-11T15:54:47.794 [DEBUG] [Thread-172572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:54:47.794 [DEBUG] [Thread-172572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:54:47.794 [DEBUG] [Thread-172572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:54:47.794 [DEBUG] [Thread-172572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:54:47.817 [INFO] [Thread-172572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:54:47.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:54:47.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:54:48.620 [DEBUG] [Thread-172572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:54:48.620 [DEBUG] [Thread-172572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:54:48.668 [DEBUG] [Thread-172572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:54:48.668 [DEBUG] [Thread-172572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:54:48.677 [DEBUG] [Thread-172572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:54:48.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:54:48.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:54:48.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:54:48.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:54:48.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:54:48.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:54:48.715 [DEBUG] [Thread-172572] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:54:55.153 [DEBUG] [Thread-172574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:10.206 [DEBUG] [Thread-172575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:14.338 [DEBUG] [Thread-172576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:18.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:55:18.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:55:18.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-04-11T15:55:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 54, 44), 0.14806, 98.9622, 0.0, 10.6582, 14.1182, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:55:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:54:44
2026-04-11T15:55:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:55:20.504 [DEBUG] [Thread-172577] [transport.py] [_log()] starting thread (client mode): 0xae5e6170
2026-04-11T15:55:20.505 [DEBUG] [Thread-172577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:55:20.525 [DEBUG] [Thread-172577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:55:20.525 [INFO] [Thread-172577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:55:20.528 [DEBUG] [Thread-172577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:55:20.528 [DEBUG] [Thread-172577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:55:20.528 [DEBUG] [Thread-172577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:55:20.528 [DEBUG] [Thread-172577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] client lang: <none>
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] server lang: <none>
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] kex follows: False
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] Compression: none
2026-04-11T15:55:20.529 [DEBUG] [Thread-172577] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:55:20.546 [DEBUG] [Thread-172577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:55:20.546 [DEBUG] [Thread-172577] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:55:20.547 [DEBUG] [Thread-172577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:55:20.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:55:20.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:55:20.549 [DEBUG] [Thread-172577] [transport.py] [_log()] userauth is OK
2026-04-11T15:55:20.549 [DEBUG] [Thread-172577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:55:20.549 [DEBUG] [Thread-172577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:55:20.549 [DEBUG] [Thread-172577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:55:20.549 [DEBUG] [Thread-172577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:55:20.573 [INFO] [Thread-172577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:55:20.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:55:21.828 [DEBUG] [Thread-172577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:55:21.828 [DEBUG] [Thread-172577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:55:21.829 [DEBUG] [Thread-172577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:55:21.869 [DEBUG] [Thread-172577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:55:21.869 [DEBUG] [Thread-172577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:55:21.872 [DEBUG] [Thread-172577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:55:21.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:55:21.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:55:21.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:55:21.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:55:21.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:55:21.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:55:21.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:55:21.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:55:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:55:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.579630   +0.00  +13.80   7.47     92  +12.60 3 0 1 3 1   887    0 1.37 8.88 ----- 7.1 7.5 359.8 10.4 14.5 -0.5 14.4 -2.2 14.2 -0.3 14.4 -0.2
2026-04-11T15:55:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:55:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.579630
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:55:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:54:44', tmtdew=0.14806, humidity=98.9622, cloud=0.0, wind=10.6582, temperature=14.1182, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:54:40.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:55:21.954 [DEBUG] [Thread-172577] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:55:22.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:55:22.047 [DEBUG] [Thread-172580] [transport.py] [_log()] starting thread (client mode): 0xae51ae90
2026-04-11T15:55:22.047 [DEBUG] [Thread-172580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:55:22.066 [DEBUG] [Thread-172580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:55:22.066 [INFO] [Thread-172580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:55:22.074 [DEBUG] [Thread-172580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:55:22.074 [DEBUG] [Thread-172580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:55:22.074 [DEBUG] [Thread-172580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:55:22.074 [DEBUG] [Thread-172580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] client lang: <none>
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] server lang: <none>
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] kex follows: False
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] Compression: none
2026-04-11T15:55:22.075 [DEBUG] [Thread-172580] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:55:22.132 [DEBUG] [Thread-172580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:55:22.133 [DEBUG] [Thread-172580] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:55:22.134 [DEBUG] [Thread-172580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:55:22.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:55:22.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:55:22.188 [DEBUG] [Thread-172580] [transport.py] [_log()] userauth is OK
2026-04-11T15:55:22.189 [DEBUG] [Thread-172580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:55:22.189 [DEBUG] [Thread-172580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:55:22.189 [DEBUG] [Thread-172580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:55:22.189 [DEBUG] [Thread-172580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:55:22.208 [INFO] [Thread-172580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:55: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-04-11T15:55:22.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:55:22.967 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:22.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:23.034 [DEBUG] [Thread-172580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:55:23.035 [DEBUG] [Thread-172580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:55:23.084 [DEBUG] [Thread-172580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:55:23.084 [DEBUG] [Thread-172580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:55:23.094 [DEBUG] [Thread-172580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:55:23.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:55:23.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:55:23.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-04-11T15:55:23.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:55:23.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:55:23.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:55:23.135 [DEBUG] [Thread-172580] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:55:25.243 [DEBUG] [Thread-172582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:40.305 [DEBUG] [Thread-172583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:55:53.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:55:53.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-04-11T15:55:54.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 55, 19), 0.124025, 99.4811, 0.0, 10.7467, 13.5425, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:55:54.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:55:19
2026-04-11T15:55:54.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:55:54.964 [DEBUG] [Thread-172584] [transport.py] [_log()] starting thread (client mode): 0xae519f30
2026-04-11T15:55:54.965 [DEBUG] [Thread-172584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:55:54.984 [DEBUG] [Thread-172584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:55:54.984 [INFO] [Thread-172584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:55:54.987 [DEBUG] [Thread-172584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:55:54.987 [DEBUG] [Thread-172584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:55:54.987 [DEBUG] [Thread-172584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:55:54.987 [DEBUG] [Thread-172584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:54.987 [DEBUG] [Thread-172584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] client lang: <none>
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] server lang: <none>
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] kex follows: False
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] Compression: none
2026-04-11T15:55:54.988 [DEBUG] [Thread-172584] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:55:55.006 [DEBUG] [Thread-172584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:55:55.007 [DEBUG] [Thread-172584] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:55:55.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:55:55.008 [DEBUG] [Thread-172584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:55:55.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:55:55.010 [DEBUG] [Thread-172584] [transport.py] [_log()] userauth is OK
2026-04-11T15:55:55.010 [DEBUG] [Thread-172584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:55:55.010 [DEBUG] [Thread-172584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:55:55.011 [DEBUG] [Thread-172584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:55:55.011 [DEBUG] [Thread-172584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:55:55.034 [INFO] [Thread-172584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:55:55.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:55:55.344 [DEBUG] [Thread-172586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:55:55.840 [DEBUG] [Thread-172584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:55:55.840 [DEBUG] [Thread-172584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:55:55.840 [DEBUG] [Thread-172584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:55:55.881 [DEBUG] [Thread-172584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:55:55.881 [DEBUG] [Thread-172584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:55:55.884 [DEBUG] [Thread-172584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:55:55.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:55:55.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:55:55.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:55:55.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:55:55.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:55:55.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:55:55.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:55:55.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:55:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:55:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.579977   +0.00  +13.80   7.68     93  +12.70 3 0 1 3 1   887    0 1.40 9.18 ----- 7.3 7.7 5.6 9.3 14.6 -0.4 14.4 -2.0 14.2 -0.3 14.4 -0.7
2026-04-11T15:55:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:55:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:55:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.579977
2026-04-11T15:55:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:55:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:55:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:55:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:55:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:55:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:55:19', tmtdew=0.124025, humidity=99.4811, cloud=0.0, wind=10.7467, temperature=13.5425, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:55:10.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:55:55.906 [DEBUG] [Thread-172584] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:55:55.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:55:56.001 [DEBUG] [Thread-172588] [transport.py] [_log()] starting thread (client mode): 0xae562620
2026-04-11T15:55:56.001 [DEBUG] [Thread-172588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:55:56.016 [DEBUG] [Thread-172588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:55:56.016 [INFO] [Thread-172588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:55:56.023 [DEBUG] [Thread-172588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] client lang: <none>
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] server lang: <none>
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] kex follows: False
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:55:56.024 [DEBUG] [Thread-172588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:55:56.025 [DEBUG] [Thread-172588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:55:56.025 [DEBUG] [Thread-172588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:55:56.025 [DEBUG] [Thread-172588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:55:56.025 [DEBUG] [Thread-172588] [transport.py] [_log()] Compression: none
2026-04-11T15:55:56.025 [DEBUG] [Thread-172588] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:55:56.085 [DEBUG] [Thread-172588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:55:56.086 [DEBUG] [Thread-172588] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:55:56.087 [DEBUG] [Thread-172588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:55:56.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:55:56.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:55:56.143 [DEBUG] [Thread-172588] [transport.py] [_log()] userauth is OK
2026-04-11T15:55:56.143 [DEBUG] [Thread-172588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:55:56.143 [DEBUG] [Thread-172588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:55:56.143 [DEBUG] [Thread-172588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:55:56.143 [DEBUG] [Thread-172588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:55:56.169 [INFO] [Thread-172588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:55:56.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:55:56.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:55:56.973 [DEBUG] [Thread-172588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:55:56.973 [DEBUG] [Thread-172588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:55:57.021 [DEBUG] [Thread-172588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:55:57.021 [DEBUG] [Thread-172588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:55:57.030 [DEBUG] [Thread-172588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:55:57.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:55:57.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-04-11T15:55:57.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-04-11T15:55:57.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:55:57.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:55:57.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:55:57.068 [DEBUG] [Thread-172588] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:56:10.381 [DEBUG] [Thread-172590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:56:14.392 [DEBUG] [Thread-172591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:56:23.109 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:56:23.110 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:56:25.434 [DEBUG] [Thread-172592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:56:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:56:27.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:56:27.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-04-11T15:56:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 55, 55), 0.14796, 98.9625, 0.0, 10.6582, 14.019, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:56:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:55:55
2026-04-11T15:56:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:56:28.910 [DEBUG] [Thread-172593] [transport.py] [_log()] starting thread (client mode): 0xae5e40a0
2026-04-11T15:56:28.910 [DEBUG] [Thread-172593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:56:28.925 [DEBUG] [Thread-172593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:56:28.925 [INFO] [Thread-172593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] client lang: <none>
2026-04-11T15:56:28.929 [DEBUG] [Thread-172593] [transport.py] [_log()] server lang: <none>
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] kex follows: False
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] Compression: none
2026-04-11T15:56:28.930 [DEBUG] [Thread-172593] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:56:28.948 [DEBUG] [Thread-172593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:56:28.949 [DEBUG] [Thread-172593] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:56:28.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:56:28.951 [DEBUG] [Thread-172593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:56:28.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:56:28.952 [DEBUG] [Thread-172593] [transport.py] [_log()] userauth is OK
2026-04-11T15:56:28.953 [DEBUG] [Thread-172593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:56:28.953 [DEBUG] [Thread-172593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:56:28.953 [DEBUG] [Thread-172593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:56:28.953 [DEBUG] [Thread-172593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:56:28.977 [INFO] [Thread-172593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:56:28.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:56:29.753 [DEBUG] [Thread-172593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:56:29.753 [DEBUG] [Thread-172593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:56:29.753 [DEBUG] [Thread-172593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:56:29.794 [DEBUG] [Thread-172593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:56:29.794 [DEBUG] [Thread-172593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:56:29.797 [DEBUG] [Thread-172593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:56:29.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:56:29.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:56:29.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:56:29.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:56:29.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:56:29.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:56:29.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:56:29.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:56:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:56:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.580325   +0.00  +13.80   9.05     93  +12.70 3 0 1 3 1   887    0 1.41 10.34 ----- 10.7 9.1 11.0 11.2 14.5 -0.3 14.4 -2.1 14.2 -0.6 14.4 -0.4
2026-04-11T15:56:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:56:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:56:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.580325
2026-04-11T15:56:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:56:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:56:29.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:56:29.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:56:29.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:56:29.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:55:55', tmtdew=0.14796, humidity=98.9625, cloud=0.0, wind=10.6582, temperature=14.019, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:55:40.080', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:56:29.816 [DEBUG] [Thread-172593] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:56:29.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:56:29.908 [DEBUG] [Thread-172596] [transport.py] [_log()] starting thread (client mode): 0xae509090
2026-04-11T15:56:29.909 [DEBUG] [Thread-172596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:56:29.924 [DEBUG] [Thread-172596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:56:29.924 [INFO] [Thread-172596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:56:29.932 [DEBUG] [Thread-172596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:56:29.932 [DEBUG] [Thread-172596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] client lang: <none>
2026-04-11T15:56:29.933 [DEBUG] [Thread-172596] [transport.py] [_log()] server lang: <none>
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] kex follows: False
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] Compression: none
2026-04-11T15:56:29.934 [DEBUG] [Thread-172596] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:56:29.991 [DEBUG] [Thread-172596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:56:29.991 [DEBUG] [Thread-172596] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:56:29.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:56:29.992 [DEBUG] [Thread-172596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:56:29.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:56:30.049 [DEBUG] [Thread-172596] [transport.py] [_log()] userauth is OK
2026-04-11T15:56:30.050 [DEBUG] [Thread-172596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:56:30.050 [DEBUG] [Thread-172596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:56:30.050 [DEBUG] [Thread-172596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:56:30.050 [DEBUG] [Thread-172596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:56:30.069 [INFO] [Thread-172596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:56:30.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:56:30.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:56:30.873 [DEBUG] [Thread-172596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:56:30.873 [DEBUG] [Thread-172596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:56:30.921 [DEBUG] [Thread-172596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:56:30.921 [DEBUG] [Thread-172596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:56:30.931 [DEBUG] [Thread-172596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:56:30.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:56:30.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:56:30.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-04-11T15:56:30.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:56:30.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:56:30.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:56:30.969 [DEBUG] [Thread-172596] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:56:40.472 [DEBUG] [Thread-172598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:56:55.528 [DEBUG] [Thread-172599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:57:00.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:57:00.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-04-11T15:57:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 56, 30), 0.076555, 99.4647, 0.0, 9.37008, 13.4929, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:57:02.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:56:30
2026-04-11T15:57:02.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:57:02.802 [DEBUG] [Thread-172600] [transport.py] [_log()] starting thread (client mode): 0xae50b460
2026-04-11T15:57:02.802 [DEBUG] [Thread-172600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:57:02.824 [DEBUG] [Thread-172600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:57:02.824 [INFO] [Thread-172600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:02.832 [DEBUG] [Thread-172600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] client lang: <none>
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] server lang: <none>
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] kex follows: False
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] Compression: none
2026-04-11T15:57:02.833 [DEBUG] [Thread-172600] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:57:02.848 [DEBUG] [Thread-172600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:57:02.849 [DEBUG] [Thread-172600] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:57:02.849 [DEBUG] [Thread-172600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:57:02.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:57:02.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:57:02.852 [DEBUG] [Thread-172600] [transport.py] [_log()] userauth is OK
2026-04-11T15:57:02.852 [DEBUG] [Thread-172600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:57:02.852 [DEBUG] [Thread-172600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:57:02.852 [DEBUG] [Thread-172600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:57:02.852 [DEBUG] [Thread-172600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:57:02.872 [INFO] [Thread-172600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:57:02.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:57:03.563 [DEBUG] [Thread-172600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:57:03.563 [DEBUG] [Thread-172600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:57:03.564 [DEBUG] [Thread-172600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:57:03.604 [DEBUG] [Thread-172600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:57:03.604 [DEBUG] [Thread-172600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:57:03.606 [DEBUG] [Thread-172600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:57:03.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:57:03.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:57:03.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:57:03.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:57:03.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:57:03.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:57:03.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.581019   +0.00  +13.80  10.17     93  +12.90 3 0 1 3 1   887    0 1.30 6.30 ----- 10.7 10.2 13.8 11.8 14.6 -0.3 14.4 -1.3 14.2 0.0 14.4 -0.2
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.581019
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:57:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:56:30', tmtdew=0.076555, humidity=99.4647, cloud=0.0, wind=9.37008, temperature=13.4929, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:56:40.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:57:03.630 [DEBUG] [Thread-172600] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:57:03.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:57:03.713 [DEBUG] [Thread-172603] [transport.py] [_log()] starting thread (client mode): 0xae537550
2026-04-11T15:57:03.713 [DEBUG] [Thread-172603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:57:03.730 [DEBUG] [Thread-172603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:57:03.730 [INFO] [Thread-172603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:57:03.737 [DEBUG] [Thread-172603] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] client lang: <none>
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] server lang: <none>
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] kex follows: False
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] Compression: none
2026-04-11T15:57:03.738 [DEBUG] [Thread-172603] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:57:03.795 [DEBUG] [Thread-172603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:57:03.795 [DEBUG] [Thread-172603] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:57:03.795 [DEBUG] [Thread-172603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:57:03.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:57:03.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:57:03.851 [DEBUG] [Thread-172603] [transport.py] [_log()] userauth is OK
2026-04-11T15:57:03.852 [DEBUG] [Thread-172603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:57:03.852 [DEBUG] [Thread-172603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:57:03.852 [DEBUG] [Thread-172603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:57:03.852 [DEBUG] [Thread-172603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:57:03.866 [INFO] [Thread-172603] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:57:03.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:57:03.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:57:04.657 [DEBUG] [Thread-172603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:57:04.657 [DEBUG] [Thread-172603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:57:04.705 [DEBUG] [Thread-172603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:57:04.705 [DEBUG] [Thread-172603] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:57:04.715 [DEBUG] [Thread-172603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:57:04.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:57:04.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:57:04.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-04-11T15:57:04.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:57:04.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:57:04.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:57:04.751 [DEBUG] [Thread-172603] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:57:10.562 [DEBUG] [Thread-172605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:14.448 [DEBUG] [Thread-172606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:23.252 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:23.253 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:25.615 [DEBUG] [Thread-172607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:34.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:57:34.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:57:34.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-04-11T15:57:36.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 57, 5), 0.07911, 99.4482, 0.0, 9.29952, 13.4764, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:57:36.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:57:05
2026-04-11T15:57:36.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:57:36.600 [DEBUG] [Thread-172608] [transport.py] [_log()] starting thread (client mode): 0xae5082b0
2026-04-11T15:57:36.600 [DEBUG] [Thread-172608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:57:36.610 [DEBUG] [Thread-172608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:57:36.610 [INFO] [Thread-172608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] client lang: <none>
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] server lang: <none>
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] kex follows: False
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] Compression: none
2026-04-11T15:57:36.613 [DEBUG] [Thread-172608] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:57:36.626 [DEBUG] [Thread-172608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:57:36.626 [DEBUG] [Thread-172608] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:57:36.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:57:36.627 [DEBUG] [Thread-172608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:57:36.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:57:36.629 [DEBUG] [Thread-172608] [transport.py] [_log()] userauth is OK
2026-04-11T15:57:36.629 [DEBUG] [Thread-172608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:57:36.630 [DEBUG] [Thread-172608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:57:36.630 [DEBUG] [Thread-172608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:57:36.630 [DEBUG] [Thread-172608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:57:36.653 [INFO] [Thread-172608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:57:36.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:57:37.230 [DEBUG] [Thread-172608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:57:37.231 [DEBUG] [Thread-172608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:57:37.231 [DEBUG] [Thread-172608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:57:37.271 [DEBUG] [Thread-172608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:57:37.271 [DEBUG] [Thread-172608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:57:37.274 [DEBUG] [Thread-172608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:57:37.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:57:37.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:57:37.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:57:37.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:57:37.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:57:37.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:57:37.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:57:37.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:57:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:57:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.581366   +0.00  +13.80  11.93     94  +12.90 3 0 1 3 1   887    0 1.30 6.25 ----- 12.2 11.9 14.0 13.3 14.6 -0.3 14.4 -1.1 14.2 -0.1 14.4 -0.0
2026-04-11T15:57:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:57:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:57:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.581366
2026-04-11T15:57:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:57:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:57:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:57:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:57:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:57:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:57:05', tmtdew=0.07911, humidity=99.4482, cloud=0.0, wind=9.29952, temperature=13.4764, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:57:10.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:57:37.302 [DEBUG] [Thread-172608] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:57: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-04-11T15:57:37.395 [DEBUG] [Thread-172611] [transport.py] [_log()] starting thread (client mode): 0xae5e48b0
2026-04-11T15:57:37.395 [DEBUG] [Thread-172611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:57:37.410 [DEBUG] [Thread-172611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:57:37.410 [INFO] [Thread-172611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:57:37.417 [DEBUG] [Thread-172611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] client lang: <none>
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] server lang: <none>
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] kex follows: False
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:57:37.418 [DEBUG] [Thread-172611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:57:37.419 [DEBUG] [Thread-172611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:57:37.419 [DEBUG] [Thread-172611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:57:37.419 [DEBUG] [Thread-172611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:57:37.419 [DEBUG] [Thread-172611] [transport.py] [_log()] Compression: none
2026-04-11T15:57:37.419 [DEBUG] [Thread-172611] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:57:37.475 [DEBUG] [Thread-172611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:57:37.475 [DEBUG] [Thread-172611] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:57:37.476 [DEBUG] [Thread-172611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:57:37.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:57:37.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:57:37.531 [DEBUG] [Thread-172611] [transport.py] [_log()] userauth is OK
2026-04-11T15:57:37.531 [DEBUG] [Thread-172611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:57:37.531 [DEBUG] [Thread-172611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:57:37.531 [DEBUG] [Thread-172611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:57:37.531 [DEBUG] [Thread-172611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:57:37.556 [INFO] [Thread-172611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:57:37.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:57:37.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:57:38.382 [DEBUG] [Thread-172611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:57:38.383 [DEBUG] [Thread-172611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:57:38.430 [DEBUG] [Thread-172611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:57:38.431 [DEBUG] [Thread-172611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:57:38.440 [DEBUG] [Thread-172611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:57:38.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:57:38.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:57:38.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-04-11T15:57:38.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:57:38.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:57:38.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:57:38.475 [DEBUG] [Thread-172611] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:57:40.652 [DEBUG] [Thread-172613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:57:55.712 [DEBUG] [Thread-172614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:58:08.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:58:08.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-04-11T15:58:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 57, 41), 0.16848, 98.8302, 0.0, 11.7518, 13.8534, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:58:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:57:41
2026-04-11T15:58:10.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:58:10.290 [DEBUG] [Thread-172615] [transport.py] [_log()] starting thread (client mode): 0xae5a7d90
2026-04-11T15:58:10.290 [DEBUG] [Thread-172615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:58:10.310 [DEBUG] [Thread-172615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:58:10.310 [INFO] [Thread-172615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] client lang: <none>
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] server lang: <none>
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] kex follows: False
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:58:10.313 [DEBUG] [Thread-172615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:58:10.314 [DEBUG] [Thread-172615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:58:10.314 [DEBUG] [Thread-172615] [transport.py] [_log()] Compression: none
2026-04-11T15:58:10.314 [DEBUG] [Thread-172615] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:58:10.331 [DEBUG] [Thread-172615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:58:10.331 [DEBUG] [Thread-172615] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:58:10.332 [DEBUG] [Thread-172615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:58:10.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:58:10.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:58:10.334 [DEBUG] [Thread-172615] [transport.py] [_log()] userauth is OK
2026-04-11T15:58:10.334 [DEBUG] [Thread-172615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:58:10.334 [DEBUG] [Thread-172615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:58:10.334 [DEBUG] [Thread-172615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:58:10.334 [DEBUG] [Thread-172615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:58:10.357 [INFO] [Thread-172615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:58:10.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:58:10.748 [DEBUG] [Thread-172617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:10.933 [DEBUG] [Thread-172615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:58:10.934 [DEBUG] [Thread-172615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:58:10.934 [DEBUG] [Thread-172615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:58:10.974 [DEBUG] [Thread-172615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:58:10.974 [DEBUG] [Thread-172615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:58:10.978 [DEBUG] [Thread-172615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:58:10.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:58:10.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:58:10.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:58:10.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:58:10.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:58:11.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:58:11.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:58:11.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:58:11.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:58:11.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.581714   +0.00  +13.80   8.88     94  +13.00 3 0 1 3 1   887    0 1.24 4.74 ----- 7.8 8.9 357.4 12.2 14.6 -0.1 14.5 -1.2 14.2 -0.2 14.4 -0.0
2026-04-11T15:58:11.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:58:11.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:58:11.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.581714
2026-04-11T15:58:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:58:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:58:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:58:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:58:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:58:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:57:41', tmtdew=0.16848, humidity=98.8302, cloud=0.0, wind=11.7518, temperature=13.8534, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:57:40.090', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:58:11.003 [DEBUG] [Thread-172615] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:58:11.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:58:11.097 [DEBUG] [Thread-172619] [transport.py] [_log()] starting thread (client mode): 0xae5a6260
2026-04-11T15:58:11.097 [DEBUG] [Thread-172619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:58:11.112 [DEBUG] [Thread-172619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:58:11.112 [INFO] [Thread-172619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] client lang: <none>
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] server lang: <none>
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] kex follows: False
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:58:11.120 [DEBUG] [Thread-172619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:58:11.121 [DEBUG] [Thread-172619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:58:11.121 [DEBUG] [Thread-172619] [transport.py] [_log()] Compression: none
2026-04-11T15:58:11.121 [DEBUG] [Thread-172619] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:58:11.184 [DEBUG] [Thread-172619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:58:11.184 [DEBUG] [Thread-172619] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:58:11.185 [DEBUG] [Thread-172619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:58:11.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:58:11.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:58:11.246 [DEBUG] [Thread-172619] [transport.py] [_log()] userauth is OK
2026-04-11T15:58:11.246 [DEBUG] [Thread-172619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:58:11.246 [DEBUG] [Thread-172619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:58:11.246 [DEBUG] [Thread-172619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:58:11.246 [DEBUG] [Thread-172619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:58:11.272 [INFO] [Thread-172619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:58:11.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:58:11.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:58:12.086 [DEBUG] [Thread-172619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:58:12.086 [DEBUG] [Thread-172619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:58:12.134 [DEBUG] [Thread-172619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:58:12.135 [DEBUG] [Thread-172619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:58:12.144 [DEBUG] [Thread-172619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:58:12.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:58:12.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:58:12.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:58:12.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:58:12.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:58:12.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:58:12.180 [DEBUG] [Thread-172619] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:58:14.511 [DEBUG] [Thread-172621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:23.391 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:23.393 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:25.790 [DEBUG] [Thread-172622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:40.843 [DEBUG] [Thread-172623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:58:42.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:58:42.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:58:42.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-04-11T15:58:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 58, 17), 0.13168, 99.4318, 0.0, 10.8173, 13.6431, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:58:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:58:17
2026-04-11T15:58:43.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:58:44.037 [DEBUG] [Thread-172624] [transport.py] [_log()] starting thread (client mode): 0xae51b970
2026-04-11T15:58:44.038 [DEBUG] [Thread-172624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:58:44.057 [DEBUG] [Thread-172624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:58:44.058 [INFO] [Thread-172624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:58:44.060 [DEBUG] [Thread-172624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] client lang: <none>
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] server lang: <none>
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] kex follows: False
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] Compression: none
2026-04-11T15:58:44.061 [DEBUG] [Thread-172624] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:58:44.078 [DEBUG] [Thread-172624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:58:44.079 [DEBUG] [Thread-172624] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:58:44.079 [DEBUG] [Thread-172624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:58:44.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:58:44.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:58:44.090 [DEBUG] [Thread-172624] [transport.py] [_log()] userauth is OK
2026-04-11T15:58:44.090 [DEBUG] [Thread-172624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:58:44.091 [DEBUG] [Thread-172624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:58:44.091 [DEBUG] [Thread-172624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:58:44.091 [DEBUG] [Thread-172624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:58:44.115 [INFO] [Thread-172624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:58:44.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:58:44.712 [DEBUG] [Thread-172624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:58:44.712 [DEBUG] [Thread-172624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:58:44.713 [DEBUG] [Thread-172624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:58:44.753 [DEBUG] [Thread-172624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:58:44.753 [DEBUG] [Thread-172624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:58:44.755 [DEBUG] [Thread-172624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:58:44.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:58:44.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:58:44.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:58:44.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:58:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:58:44.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:58:44.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:58:44.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:58:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:58:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.582061   +0.00  +13.80   6.90     94  +13.00 3 0 1 3 1   887    0 1.17 2.69 ----- 7.9 6.9 355.2 12.9 14.6 -0.4 14.5 -1.1 14.2 -0.3 14.5 -0.1
2026-04-11T15:58:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:58:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:58:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.582061
2026-04-11T15:58:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:58:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:58:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:58:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:58:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:58:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:58:17', tmtdew=0.13168, humidity=99.4318, cloud=0.0, wind=10.8173, temperature=13.6431, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:58:10.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:58:44.777 [DEBUG] [Thread-172624] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:58:44.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:58:44.873 [DEBUG] [Thread-172627] [transport.py] [_log()] starting thread (client mode): 0xae560880
2026-04-11T15:58:44.873 [DEBUG] [Thread-172627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:58:44.889 [DEBUG] [Thread-172627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:58:44.889 [INFO] [Thread-172627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] client lang: <none>
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] server lang: <none>
2026-04-11T15:58:44.897 [DEBUG] [Thread-172627] [transport.py] [_log()] kex follows: False
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] Compression: none
2026-04-11T15:58:44.898 [DEBUG] [Thread-172627] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:58:44.957 [DEBUG] [Thread-172627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:58:44.957 [DEBUG] [Thread-172627] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:58:44.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:58:44.959 [DEBUG] [Thread-172627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:58:44.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:58:45.013 [DEBUG] [Thread-172627] [transport.py] [_log()] userauth is OK
2026-04-11T15:58:45.013 [DEBUG] [Thread-172627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:58:45.014 [DEBUG] [Thread-172627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:58:45.014 [DEBUG] [Thread-172627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:58:45.014 [DEBUG] [Thread-172627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:58:45.033 [INFO] [Thread-172627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:58:45.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:58:45.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:58:45.870 [DEBUG] [Thread-172627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:58:45.871 [DEBUG] [Thread-172627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:58:45.918 [DEBUG] [Thread-172627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:58:45.918 [DEBUG] [Thread-172627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:58:45.930 [DEBUG] [Thread-172627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:58:45.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:58:45.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T15:58:45.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T15:58:45.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:58:45.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:58:45.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:58:45.974 [DEBUG] [Thread-172627] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:58:55.881 [DEBUG] [Thread-172629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:10.940 [DEBUG] [Thread-172630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:14.573 [DEBUG] [Thread-172631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:15.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:59:15.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:59:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T15:59:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 58, 52), 0.16852, 98.8304, 0.0, 9.95256, 13.9861, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:59:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:58:52
2026-04-11T15:59:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:59:17.905 [DEBUG] [Thread-172632] [transport.py] [_log()] starting thread (client mode): 0xae5379a0
2026-04-11T15:59:17.906 [DEBUG] [Thread-172632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:59:17.916 [DEBUG] [Thread-172632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:59:17.916 [INFO] [Thread-172632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] client lang: <none>
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] server lang: <none>
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] kex follows: False
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] Compression: none
2026-04-11T15:59:17.918 [DEBUG] [Thread-172632] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:59:17.928 [DEBUG] [Thread-172632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:59:17.928 [DEBUG] [Thread-172632] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:59:17.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:59:17.928 [DEBUG] [Thread-172632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:59:17.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:59:17.929 [DEBUG] [Thread-172632] [transport.py] [_log()] userauth is OK
2026-04-11T15:59:17.929 [DEBUG] [Thread-172632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:59:17.929 [DEBUG] [Thread-172632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:59:17.929 [DEBUG] [Thread-172632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:59:17.929 [DEBUG] [Thread-172632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:59:17.939 [INFO] [Thread-172632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:59:17.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:59:18.501 [DEBUG] [Thread-172632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:59:18.501 [DEBUG] [Thread-172632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:59:18.502 [DEBUG] [Thread-172632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:59:18.542 [DEBUG] [Thread-172632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:59:18.542 [DEBUG] [Thread-172632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:59:18.545 [DEBUG] [Thread-172632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:59:18.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:59:18.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:59:18.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:59:18.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:59:18.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:59:18.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:59:18.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:59:18.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:59:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:59:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.582755   +0.00  +13.80   7.51     94  +13.00 3 0 1 3 1   887    0 1.03 -1.37 ----- 7.5 7.5 11.2 11.5 14.6 -0.3 14.5 -1.8 14.3 -0.1 14.6 -0.1
2026-04-11T15:59:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:59:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:59:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.582755
2026-04-11T15:59:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:59:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:59:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:59:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:59:18.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:59:18.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:58:52', tmtdew=0.16852, humidity=98.8304, cloud=0.0, wind=9.95256, temperature=13.9861, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:59:10.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:59:18.567 [DEBUG] [Thread-172632] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:59:18.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:59:18.673 [DEBUG] [Thread-172635] [transport.py] [_log()] starting thread (client mode): 0xae51a1d0
2026-04-11T15:59:18.673 [DEBUG] [Thread-172635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:59:18.686 [DEBUG] [Thread-172635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:59:18.687 [INFO] [Thread-172635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:59:18.694 [DEBUG] [Thread-172635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] client lang: <none>
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] server lang: <none>
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] kex follows: False
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] Compression: none
2026-04-11T15:59:18.695 [DEBUG] [Thread-172635] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:59:18.755 [DEBUG] [Thread-172635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:59:18.755 [DEBUG] [Thread-172635] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:59:18.756 [DEBUG] [Thread-172635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:59:18.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:59:18.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:59:18.811 [DEBUG] [Thread-172635] [transport.py] [_log()] userauth is OK
2026-04-11T15:59:18.811 [DEBUG] [Thread-172635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:59:18.811 [DEBUG] [Thread-172635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:59:18.811 [DEBUG] [Thread-172635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:59:18.812 [DEBUG] [Thread-172635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:59:18.830 [INFO] [Thread-172635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:59:18.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:59:18.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:59:19.637 [DEBUG] [Thread-172635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:59:19.637 [DEBUG] [Thread-172635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:59:19.688 [DEBUG] [Thread-172635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:59:19.688 [DEBUG] [Thread-172635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:59:19.696 [DEBUG] [Thread-172635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:59:19.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:59:19.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-04-11T15:59: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') -> 00000000
2026-04-11T15:59:19.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:59:19.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:59:19.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:59:19.731 [DEBUG] [Thread-172635] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:59:23.532 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:23.533 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:25.975 [DEBUG] [Thread-172637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:41.033 [DEBUG] [Thread-172638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T15:59:49.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T15:59:49.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T15:59:49.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-04-11T15:59:51.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 15, 59, 27), 0.13678, 99.3987, 0.0, 10.1293, 13.6102, 2, 2, 2, 2, 0, 0),)
2026-04-11T15:59:51.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 15:59:27
2026-04-11T15:59:51.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T15:59:51.570 [DEBUG] [Thread-172639] [transport.py] [_log()] starting thread (client mode): 0xae537400
2026-04-11T15:59:51.570 [DEBUG] [Thread-172639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:59:51.590 [DEBUG] [Thread-172639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T15:59:51.590 [INFO] [Thread-172639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T15:59:51.593 [DEBUG] [Thread-172639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:59:51.593 [DEBUG] [Thread-172639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T15:59:51.593 [DEBUG] [Thread-172639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:59:51.593 [DEBUG] [Thread-172639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:51.593 [DEBUG] [Thread-172639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:51.593 [DEBUG] [Thread-172639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] client lang: <none>
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] server lang: <none>
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] kex follows: False
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] Compression: none
2026-04-11T15:59:51.594 [DEBUG] [Thread-172639] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:59:51.612 [DEBUG] [Thread-172639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:59:51.613 [DEBUG] [Thread-172639] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:59:51.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T15:59:51.614 [DEBUG] [Thread-172639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T15:59:51.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:59:51.616 [DEBUG] [Thread-172639] [transport.py] [_log()] userauth is OK
2026-04-11T15:59:51.616 [DEBUG] [Thread-172639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:59:51.616 [DEBUG] [Thread-172639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:59:51.616 [DEBUG] [Thread-172639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T15:59:51.616 [DEBUG] [Thread-172639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:59:51.640 [INFO] [Thread-172639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:59:51.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:59:52.248 [DEBUG] [Thread-172639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:59:52.249 [DEBUG] [Thread-172639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:59:52.249 [DEBUG] [Thread-172639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T15:59:52.290 [DEBUG] [Thread-172639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:59:52.290 [DEBUG] [Thread-172639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:59:52.294 [DEBUG] [Thread-172639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:59:52.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:59:52.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T15:59:52.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T15:59:52.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T15:59:52.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:59:52.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T15:59:52.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:59:52.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:59:52.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T15:59:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.583102   +0.00  +13.80   5.77     94  +13.00 3 0 1 3 1   887    0 0.98 -3.07 ----- 5.5 5.8 355.4 9.2 14.6 -0.4 14.5 -1.4 14.3 -0.1 14.6 -0.2
2026-04-11T15:59:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T15:59:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T15:59:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.583102
2026-04-11T15:59:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T15:59:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T15:59:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T15:59:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T15:59:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T15:59:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T15:59:27', tmtdew=0.13678, humidity=99.3987, cloud=0.0, wind=10.1293, temperature=13.6102, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T13:59:40.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T15:59:52.322 [DEBUG] [Thread-172639] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:59:52.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T15:59:52.419 [DEBUG] [Thread-172642] [transport.py] [_log()] starting thread (client mode): 0xae562a10
2026-04-11T15:59:52.419 [DEBUG] [Thread-172642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T15:59:52.433 [DEBUG] [Thread-172642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T15:59:52.433 [INFO] [Thread-172642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T15:59:52.441 [DEBUG] [Thread-172642] [transport.py] [_log()] client lang: <none>
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] server lang: <none>
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] kex follows: False
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] Compression: none
2026-04-11T15:59:52.442 [DEBUG] [Thread-172642] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T15:59:52.499 [DEBUG] [Thread-172642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T15:59:52.499 [DEBUG] [Thread-172642] [transport.py] [_log()] Switch to new keys ...
2026-04-11T15:59:52.500 [DEBUG] [Thread-172642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T15:59:52.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T15:59:52.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T15:59:52.555 [DEBUG] [Thread-172642] [transport.py] [_log()] userauth is OK
2026-04-11T15:59:52.555 [DEBUG] [Thread-172642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T15:59:52.555 [DEBUG] [Thread-172642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T15:59:52.555 [DEBUG] [Thread-172642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T15:59:52.556 [DEBUG] [Thread-172642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T15:59:52.580 [INFO] [Thread-172642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T15:59:52.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T15:59:52.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T15:59:53.372 [DEBUG] [Thread-172642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T15:59:53.372 [DEBUG] [Thread-172642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T15:59:53.420 [DEBUG] [Thread-172642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T15:59:53.420 [DEBUG] [Thread-172642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T15:59:53.429 [DEBUG] [Thread-172642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T15:59:53.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T15:59:53.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-04-11T15:59:53.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-04-11T15:59:53.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T15:59:53.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T15:59:53.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T15:59:53.466 [DEBUG] [Thread-172642] [transport.py] [_log()] EOF in transport thread
2026-04-11T15:59:56.071 [DEBUG] [Thread-172644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:11.129 [DEBUG] [Thread-172645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:14.628 [DEBUG] [Thread-172646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:00:23.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:00:23.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-04-11T16:00:23.675 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:23.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:24.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 0, 3), 0.131645, 99.4319, 0.0, 10.0411, 13.66, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:00:24.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:00:03
2026-04-11T16:00:25.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:00:25.257 [DEBUG] [Thread-172647] [transport.py] [_log()] starting thread (client mode): 0xae5a4b50
2026-04-11T16:00:25.257 [DEBUG] [Thread-172647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:00:25.278 [DEBUG] [Thread-172647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:00:25.278 [INFO] [Thread-172647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:00:25.279 [DEBUG] [Thread-172647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:00:25.279 [DEBUG] [Thread-172647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:00:25.279 [DEBUG] [Thread-172647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:00:25.279 [DEBUG] [Thread-172647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] client lang: <none>
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] server lang: <none>
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] kex follows: False
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] Compression: none
2026-04-11T16:00:25.280 [DEBUG] [Thread-172647] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:00:25.288 [DEBUG] [Thread-172647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:00:25.289 [DEBUG] [Thread-172647] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:00:25.289 [DEBUG] [Thread-172647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:00:25.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:00:25.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:00:25.290 [DEBUG] [Thread-172647] [transport.py] [_log()] userauth is OK
2026-04-11T16:00:25.290 [DEBUG] [Thread-172647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:00:25.290 [DEBUG] [Thread-172647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:00:25.290 [DEBUG] [Thread-172647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:00:25.290 [DEBUG] [Thread-172647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:00:25.308 [INFO] [Thread-172647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:00:25.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:00:26.170 [DEBUG] [Thread-172649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:37.383 [DEBUG] [Thread-172647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:00:37.384 [DEBUG] [Thread-172647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:00:37.385 [DEBUG] [Thread-172647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:00:37.425 [DEBUG] [Thread-172647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:00:37.425 [DEBUG] [Thread-172647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:00:37.429 [DEBUG] [Thread-172647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:00:37.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:00:37.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:00:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:00:37.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:00:37.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:00:37.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:00:37.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:00:37.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:00:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:00:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.583449   +0.00  +13.80   5.42     94  +13.00 3 0 1 3 1   887    0 0.94 -4.72 ----- 6.1 5.4 350.2 10.3 14.7 -0.3 14.6 -1.4 14.3 -0.2 14.6 0.1
2026-04-11T16:00:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:00:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:00:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.583449
2026-04-11T16:00:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:00:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:00:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:00:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:00:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:00:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:00:03', tmtdew=0.131645, humidity=99.4319, cloud=0.0, wind=10.0411, temperature=13.66, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:00:09.994', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:00:37.486 [DEBUG] [Thread-172647] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:00:37.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:00:37.579 [DEBUG] [Thread-172651] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T16:00:37.579 [DEBUG] [Thread-172651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:00:37.594 [DEBUG] [Thread-172651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:00:37.594 [INFO] [Thread-172651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:00:37.602 [DEBUG] [Thread-172651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] client lang: <none>
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] server lang: <none>
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] kex follows: False
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] Compression: none
2026-04-11T16:00:37.603 [DEBUG] [Thread-172651] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:00:37.663 [DEBUG] [Thread-172651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:00:37.663 [DEBUG] [Thread-172651] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:00:37.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:00:37.665 [DEBUG] [Thread-172651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:00:37.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:00:37.721 [DEBUG] [Thread-172651] [transport.py] [_log()] userauth is OK
2026-04-11T16:00:37.722 [DEBUG] [Thread-172651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:00:37.722 [DEBUG] [Thread-172651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:00:37.722 [DEBUG] [Thread-172651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:00:37.722 [DEBUG] [Thread-172651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:00:37.745 [INFO] [Thread-172651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:00:37.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:00:37.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:00:38.572 [DEBUG] [Thread-172651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:00:38.573 [DEBUG] [Thread-172651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:00:38.621 [DEBUG] [Thread-172651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:00:38.621 [DEBUG] [Thread-172651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:00:38.631 [DEBUG] [Thread-172651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:00:38.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:00:38.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:00:38.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-04-11T16:00:38.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:00:38.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:00:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:00:38.668 [DEBUG] [Thread-172651] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:00:41.207 [DEBUG] [Thread-172653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:00:56.258 [DEBUG] [Thread-172654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:08.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:01:08.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:01:08.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-04-11T16:01:09.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 0, 38), 0.17872, 98.7644, 0.0, 6.8832, 13.8537, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:01:09.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:00:38
2026-04-11T16:01:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:01:10.476 [DEBUG] [Thread-172655] [transport.py] [_log()] starting thread (client mode): 0xa79524a0
2026-04-11T16:01:10.476 [DEBUG] [Thread-172655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:01:10.491 [DEBUG] [Thread-172655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:01:10.491 [INFO] [Thread-172655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] client lang: <none>
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] server lang: <none>
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] kex follows: False
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:01:10.494 [DEBUG] [Thread-172655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:01:10.495 [DEBUG] [Thread-172655] [transport.py] [_log()] Compression: none
2026-04-11T16:01:10.495 [DEBUG] [Thread-172655] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:01:10.502 [DEBUG] [Thread-172655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:01:10.503 [DEBUG] [Thread-172655] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:01:10.503 [DEBUG] [Thread-172655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:01:10.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:01:10.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:01:10.504 [DEBUG] [Thread-172655] [transport.py] [_log()] userauth is OK
2026-04-11T16:01:10.504 [DEBUG] [Thread-172655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:01:10.504 [DEBUG] [Thread-172655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:01:10.504 [DEBUG] [Thread-172655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:01:10.504 [DEBUG] [Thread-172655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:01:10.518 [INFO] [Thread-172655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:01:10.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:01:11.109 [DEBUG] [Thread-172655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:01:11.110 [DEBUG] [Thread-172655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:01:11.110 [DEBUG] [Thread-172655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:01:11.151 [DEBUG] [Thread-172655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:01:11.151 [DEBUG] [Thread-172655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:01:11.155 [DEBUG] [Thread-172655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:01:11.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:01:11.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:01:11.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:01:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:01:11.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:01:11.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:01:11.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:01:11.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:01:11.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:01:11.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.583797   +0.00  +13.70   6.27     94  +12.90 3 0 1 3 1   887    0 0.88 -6.01 ----- 6.5 6.3 7.4 10.9 14.7 -0.5 14.6 -1.4 14.3 -0.1 14.6 -0.5
2026-04-11T16:01:11.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:01:11.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:01:11.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.583797
2026-04-11T16:01:11.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:01:11.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:01:11.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:01:11.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:01:11.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:01:11.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:00:38', tmtdew=0.17872, humidity=98.7644, cloud=0.0, wind=6.8832, temperature=13.8537, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:00:40.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:01:11.181 [DEBUG] [Thread-172655] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:01:11.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:01:11.274 [DEBUG] [Thread-172658] [transport.py] [_log()] starting thread (client mode): 0xae5a5660
2026-04-11T16:01:11.274 [DEBUG] [Thread-172658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:01:11.288 [DEBUG] [Thread-172658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:01:11.289 [INFO] [Thread-172658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:01:11.293 [DEBUG] [Thread-172660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] client lang: <none>
2026-04-11T16:01:11.296 [DEBUG] [Thread-172658] [transport.py] [_log()] server lang: <none>
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] kex follows: False
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] Compression: none
2026-04-11T16:01:11.297 [DEBUG] [Thread-172658] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:01:11.357 [DEBUG] [Thread-172658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:01:11.357 [DEBUG] [Thread-172658] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:01:11.358 [DEBUG] [Thread-172658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:01:11.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:01:11.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:01:11.413 [DEBUG] [Thread-172658] [transport.py] [_log()] userauth is OK
2026-04-11T16:01:11.414 [DEBUG] [Thread-172658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:01:11.414 [DEBUG] [Thread-172658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:01:11.414 [DEBUG] [Thread-172658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:01:11.414 [DEBUG] [Thread-172658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:01:11.432 [INFO] [Thread-172658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:01:11.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:01:11.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:01:12.280 [DEBUG] [Thread-172658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:01:12.280 [DEBUG] [Thread-172658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:01:12.328 [DEBUG] [Thread-172658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:01:12.329 [DEBUG] [Thread-172658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:01:12.338 [DEBUG] [Thread-172658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:01:12.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:01:12.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-04-11T16:01:12.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:01:12.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:01:12.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:01:12.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:01:12.375 [DEBUG] [Thread-172658] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:01:14.682 [DEBUG] [Thread-172661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:23.816 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:23.817 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:26.344 [DEBUG] [Thread-172662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:41.379 [DEBUG] [Thread-172663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:01:42.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:01:42.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:01:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:01:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 1, 15), 0.073915, 99.4817, 0.0, 6.45948, 13.6097, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:01:43.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:01:15
2026-04-11T16:01:44.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:01:44.220 [DEBUG] [Thread-172664] [transport.py] [_log()] starting thread (client mode): 0xa79519f0
2026-04-11T16:01:44.220 [DEBUG] [Thread-172664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:01:44.241 [DEBUG] [Thread-172664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:01:44.241 [INFO] [Thread-172664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:01:44.244 [DEBUG] [Thread-172664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] client lang: <none>
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] server lang: <none>
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] kex follows: False
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:01:44.245 [DEBUG] [Thread-172664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:01:44.246 [DEBUG] [Thread-172664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:01:44.246 [DEBUG] [Thread-172664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:01:44.246 [DEBUG] [Thread-172664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:01:44.246 [DEBUG] [Thread-172664] [transport.py] [_log()] Compression: none
2026-04-11T16:01:44.246 [DEBUG] [Thread-172664] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:01:44.265 [DEBUG] [Thread-172664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:01:44.266 [DEBUG] [Thread-172664] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:01:44.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:01:44.268 [DEBUG] [Thread-172664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:01:44.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:01:44.270 [DEBUG] [Thread-172664] [transport.py] [_log()] userauth is OK
2026-04-11T16:01:44.270 [DEBUG] [Thread-172664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:01:44.270 [DEBUG] [Thread-172664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:01:44.270 [DEBUG] [Thread-172664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:01:44.270 [DEBUG] [Thread-172664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:01:44.295 [INFO] [Thread-172664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:01:44.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:01:44.878 [DEBUG] [Thread-172664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:01:44.878 [DEBUG] [Thread-172664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:01:44.879 [DEBUG] [Thread-172664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:01:44.919 [DEBUG] [Thread-172664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:01:44.919 [DEBUG] [Thread-172664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:01:44.923 [DEBUG] [Thread-172664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:01:44.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:01:44.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:01:44.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:01:44.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:01:44.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:01:44.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:01:44.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:01:44.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:01:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:01:44.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.584491   +0.00  +13.70   5.58     94  +12.80 3 0 1 3 1   887    0 0.79 -8.98 ----- 5.5 5.6 29.0 8.1 14.7 -0.3 14.6 -1.3 14.3 -0.2 14.6 -2.8
2026-04-11T16:01:44.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:01:44.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:01:44.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.584491
2026-04-11T16:01:44.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:01:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:01:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:01:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:01:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:01:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:01:15', tmtdew=0.073915, humidity=99.4817, cloud=0.0, wind=6.45948, temperature=13.6097, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:01:40.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:01:44.952 [DEBUG] [Thread-172664] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:01:45.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:01:45.045 [DEBUG] [Thread-172667] [transport.py] [_log()] starting thread (client mode): 0xae5341c0
2026-04-11T16:01:45.045 [DEBUG] [Thread-172667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:01:45.060 [DEBUG] [Thread-172667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:01:45.061 [INFO] [Thread-172667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:01:45.068 [DEBUG] [Thread-172667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] client lang: <none>
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] server lang: <none>
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] kex follows: False
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] Compression: none
2026-04-11T16:01:45.069 [DEBUG] [Thread-172667] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:01:45.128 [DEBUG] [Thread-172667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:01:45.129 [DEBUG] [Thread-172667] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:01:45.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:01:45.130 [DEBUG] [Thread-172667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:01:45.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:01:45.184 [DEBUG] [Thread-172667] [transport.py] [_log()] userauth is OK
2026-04-11T16:01:45.184 [DEBUG] [Thread-172667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:01:45.185 [DEBUG] [Thread-172667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:01:45.185 [DEBUG] [Thread-172667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:01:45.185 [DEBUG] [Thread-172667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:01:45.203 [INFO] [Thread-172667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:01:45.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:01:45.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:01:46.009 [DEBUG] [Thread-172667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:01:46.010 [DEBUG] [Thread-172667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:01:46.057 [DEBUG] [Thread-172667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:01:46.057 [DEBUG] [Thread-172667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:01:46.066 [DEBUG] [Thread-172667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:01:46.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:01:46.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:01:46.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-04-11T16:01:46.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:01:46.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:01:46.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:01:46.104 [DEBUG] [Thread-172667] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:01:56.417 [DEBUG] [Thread-172669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:11.468 [DEBUG] [Thread-172670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:14.729 [DEBUG] [Thread-172671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:16.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:02:16.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:02:16.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-04-11T16:02:17.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 1, 50), 0.14785, 98.9634, 0.0, 5.40144, 14.0859, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:02:17.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:01:50
2026-04-11T16:02:17.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:02:18.020 [DEBUG] [Thread-172672] [transport.py] [_log()] starting thread (client mode): 0xae563820
2026-04-11T16:02:18.021 [DEBUG] [Thread-172672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:02:18.040 [DEBUG] [Thread-172672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:02:18.040 [INFO] [Thread-172672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] client lang: <none>
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] server lang: <none>
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] kex follows: False
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] Compression: none
2026-04-11T16:02:18.042 [DEBUG] [Thread-172672] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:02:18.050 [DEBUG] [Thread-172672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:02:18.051 [DEBUG] [Thread-172672] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:02:18.051 [DEBUG] [Thread-172672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:02:18.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:02:18.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:02:18.053 [DEBUG] [Thread-172672] [transport.py] [_log()] userauth is OK
2026-04-11T16:02:18.053 [DEBUG] [Thread-172672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:02:18.053 [DEBUG] [Thread-172672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:02:18.053 [DEBUG] [Thread-172672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:02:18.053 [DEBUG] [Thread-172672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:02:18.076 [INFO] [Thread-172672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:02:18.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:02:18.644 [DEBUG] [Thread-172672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:02:18.644 [DEBUG] [Thread-172672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:02:18.644 [DEBUG] [Thread-172672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:02:18.685 [DEBUG] [Thread-172672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:02:18.685 [DEBUG] [Thread-172672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:02:18.688 [DEBUG] [Thread-172672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:02:18.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:02:18.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:02:18.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:02:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:02:18.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:02:18.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:02:18.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:02:18.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:02:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:02:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.584839   +0.00  +13.70   5.23     94  +12.80 3 0 1 3 1   887    0 0.76 -10.03 ----- 4.8 5.2 327.8 6.8 14.7 -0.3 14.6 -1.5 14.3 -0.0 14.6 -3.0
2026-04-11T16:02:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:02:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:02:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.584839
2026-04-11T16:02:18.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:02:18.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:02:18.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:02:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:02:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:02:18.713 [DEBUG] [Thread-172672] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:02:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:01:50', tmtdew=0.14785, humidity=98.9634, cloud=0.0, wind=5.40144, temperature=14.0859, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:02:10.090', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:02:18.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:02:18.803 [DEBUG] [Thread-172675] [transport.py] [_log()] starting thread (client mode): 0xae5e5900
2026-04-11T16:02:18.803 [DEBUG] [Thread-172675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:02:18.818 [DEBUG] [Thread-172675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:02:18.818 [INFO] [Thread-172675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:18.826 [DEBUG] [Thread-172675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] client lang: <none>
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] server lang: <none>
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] kex follows: False
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] Compression: none
2026-04-11T16:02:18.827 [DEBUG] [Thread-172675] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:02:18.883 [DEBUG] [Thread-172675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:02:18.883 [DEBUG] [Thread-172675] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:02:18.884 [DEBUG] [Thread-172675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:02:18.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:02:18.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:02:18.940 [DEBUG] [Thread-172675] [transport.py] [_log()] userauth is OK
2026-04-11T16:02:18.940 [DEBUG] [Thread-172675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:02:18.940 [DEBUG] [Thread-172675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:02:18.940 [DEBUG] [Thread-172675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:02:18.941 [DEBUG] [Thread-172675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:02:18.965 [INFO] [Thread-172675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:02:18.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:02:18.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:02:19.782 [DEBUG] [Thread-172675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:02:19.782 [DEBUG] [Thread-172675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:02:19.830 [DEBUG] [Thread-172675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:02:19.830 [DEBUG] [Thread-172675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:02:19.839 [DEBUG] [Thread-172675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:02:19.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:02:19.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-04-11T16:02:19.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:02:19.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:02:19.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:02:19.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:02:19.876 [DEBUG] [Thread-172675] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:02:23.959 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:23.960 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:26.504 [DEBUG] [Thread-172677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:41.556 [DEBUG] [Thread-172678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:02:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:02:49.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:02:49.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-04-11T16:02:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 2, 25), 0.1239, 99.4818, 0.0, 8.3124, 13.6098, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:02:51.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:02:25
2026-04-11T16:02:51.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:02:51.727 [DEBUG] [Thread-172679] [transport.py] [_log()] starting thread (client mode): 0xae518c40
2026-04-11T16:02:51.727 [DEBUG] [Thread-172679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:02:51.749 [DEBUG] [Thread-172679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:02:51.749 [INFO] [Thread-172679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:02:51.752 [DEBUG] [Thread-172679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:02:51.752 [DEBUG] [Thread-172679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] client lang: <none>
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] server lang: <none>
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] kex follows: False
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:02:51.753 [DEBUG] [Thread-172679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:02:51.754 [DEBUG] [Thread-172679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:02:51.754 [DEBUG] [Thread-172679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:02:51.754 [DEBUG] [Thread-172679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:02:51.754 [DEBUG] [Thread-172679] [transport.py] [_log()] Compression: none
2026-04-11T16:02:51.754 [DEBUG] [Thread-172679] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:02:51.764 [DEBUG] [Thread-172679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:02:51.765 [DEBUG] [Thread-172679] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:02:51.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:02:51.766 [DEBUG] [Thread-172679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:02:51.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:02:51.767 [DEBUG] [Thread-172679] [transport.py] [_log()] userauth is OK
2026-04-11T16:02:51.768 [DEBUG] [Thread-172679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:02:51.768 [DEBUG] [Thread-172679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:02:51.768 [DEBUG] [Thread-172679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:02:51.768 [DEBUG] [Thread-172679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:02:51.796 [INFO] [Thread-172679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:02:51.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:02:52.400 [DEBUG] [Thread-172679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:02:52.400 [DEBUG] [Thread-172679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:02:52.400 [DEBUG] [Thread-172679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:02:52.441 [DEBUG] [Thread-172679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:02:52.441 [DEBUG] [Thread-172679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:02:52.444 [DEBUG] [Thread-172679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:02:52.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:02:52.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:02:52.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:02:52.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:02:52.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:02:52.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:02:52.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:02:52.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:02:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:02:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.585186   +0.00  +13.60   5.97     94  +12.70 3 0 1 3 1   887    0 0.71 -11.60 ----- 5.3 6.0 356.9 7.4 14.8 -0.3 14.6 -1.5 14.3 -0.0 14.7 -2.7
2026-04-11T16:02:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:02:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:02:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.585186
2026-04-11T16:02:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:02:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:02:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:02:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:02:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:02:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:02:25', tmtdew=0.1239, humidity=99.4818, cloud=0.0, wind=8.3124, temperature=13.6098, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:02:40.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:02:52.476 [DEBUG] [Thread-172679] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:02:52.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:02:52.571 [DEBUG] [Thread-172682] [transport.py] [_log()] starting thread (client mode): 0xae5a54e0
2026-04-11T16:02:52.571 [DEBUG] [Thread-172682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:02:52.587 [DEBUG] [Thread-172682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:02:52.587 [INFO] [Thread-172682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] client lang: <none>
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] server lang: <none>
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] kex follows: False
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:02:52.595 [DEBUG] [Thread-172682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:02:52.596 [DEBUG] [Thread-172682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:02:52.596 [DEBUG] [Thread-172682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:02:52.596 [DEBUG] [Thread-172682] [transport.py] [_log()] Compression: none
2026-04-11T16:02:52.596 [DEBUG] [Thread-172682] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:02:52.655 [DEBUG] [Thread-172682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:02:52.655 [DEBUG] [Thread-172682] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:02:52.656 [DEBUG] [Thread-172682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:02:52.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:02:52.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:02:52.710 [DEBUG] [Thread-172682] [transport.py] [_log()] userauth is OK
2026-04-11T16:02:52.711 [DEBUG] [Thread-172682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:02:52.711 [DEBUG] [Thread-172682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:02:52.711 [DEBUG] [Thread-172682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:02:52.711 [DEBUG] [Thread-172682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:02:52.730 [INFO] [Thread-172682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:02:52.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:02:52.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:02:53.563 [DEBUG] [Thread-172682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:02:53.563 [DEBUG] [Thread-172682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:02:53.612 [DEBUG] [Thread-172682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:02:53.612 [DEBUG] [Thread-172682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:02:53.621 [DEBUG] [Thread-172682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:02:53.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:02:53.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-04-11T16:02:53.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-04-11T16:02:53.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:02:53.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:02:53.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:02:53.658 [DEBUG] [Thread-172682] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:02:56.592 [DEBUG] [Thread-172684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:11.643 [DEBUG] [Thread-172685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:14.793 [DEBUG] [Thread-172686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:03:23.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:03:23.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-04-11T16:03:24.100 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:24.101 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 3, 1), 0.126475, 99.4652, 0.0, 6.49476, 13.5432, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:03:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:03:01
2026-04-11T16:03:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:03:25.489 [DEBUG] [Thread-172687] [transport.py] [_log()] starting thread (client mode): 0xa7951780
2026-04-11T16:03:25.489 [DEBUG] [Thread-172687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:03:25.509 [DEBUG] [Thread-172687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:03:25.509 [INFO] [Thread-172687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:03:25.511 [DEBUG] [Thread-172687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] client lang: <none>
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] server lang: <none>
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] kex follows: False
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] Compression: none
2026-04-11T16:03:25.512 [DEBUG] [Thread-172687] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:03:25.528 [DEBUG] [Thread-172687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:03:25.529 [DEBUG] [Thread-172687] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:03:25.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:03:25.530 [DEBUG] [Thread-172687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:03:25.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:03:25.532 [DEBUG] [Thread-172687] [transport.py] [_log()] userauth is OK
2026-04-11T16:03:25.532 [DEBUG] [Thread-172687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:03:25.532 [DEBUG] [Thread-172687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:03:25.533 [DEBUG] [Thread-172687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:03:25.533 [DEBUG] [Thread-172687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:03:25.550 [INFO] [Thread-172687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:03:25.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:03:26.120 [DEBUG] [Thread-172687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:03:26.120 [DEBUG] [Thread-172687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:03:26.120 [DEBUG] [Thread-172687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:03:26.161 [DEBUG] [Thread-172687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:03:26.162 [DEBUG] [Thread-172687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:03:26.164 [DEBUG] [Thread-172687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:03:26.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:03:26.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:03:26.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:03:26.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:03:26.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:03:26.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:03:26.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:03:26.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:03:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:03:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.585533   +0.00  +13.60   4.43     94  +12.70 3 0 1 3 1   887    0 0.63 -14.16 ----- 4.2 4.4 341.0 6.5 14.8 -0.3 14.6 -1.8 14.3 -0.1 14.6 -3.1
2026-04-11T16:03:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:03:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:03:26.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.585533
2026-04-11T16:03:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:03:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:03:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:03:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:03:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:03:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:03:01', tmtdew=0.126475, humidity=99.4652, cloud=0.0, wind=6.49476, temperature=13.5432, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:03:10.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:03:26.185 [DEBUG] [Thread-172687] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:03:26.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:03:26.276 [DEBUG] [Thread-172690] [transport.py] [_log()] starting thread (client mode): 0xae5379a0
2026-04-11T16:03:26.277 [DEBUG] [Thread-172690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:03:26.290 [DEBUG] [Thread-172690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:03:26.291 [INFO] [Thread-172690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:03:26.298 [DEBUG] [Thread-172690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:03:26.298 [DEBUG] [Thread-172690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:03:26.298 [DEBUG] [Thread-172690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:03:26.298 [DEBUG] [Thread-172690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] client lang: <none>
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] server lang: <none>
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] kex follows: False
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] Compression: none
2026-04-11T16:03:26.299 [DEBUG] [Thread-172690] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:03:26.358 [DEBUG] [Thread-172690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:03:26.359 [DEBUG] [Thread-172690] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:03:26.359 [DEBUG] [Thread-172690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:03:26.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:03:26.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:03:26.418 [DEBUG] [Thread-172690] [transport.py] [_log()] userauth is OK
2026-04-11T16:03:26.418 [DEBUG] [Thread-172690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:03:26.418 [DEBUG] [Thread-172690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:03:26.419 [DEBUG] [Thread-172690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:03:26.419 [DEBUG] [Thread-172690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:03:26.437 [INFO] [Thread-172690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:03:26.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:03:26.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:03:26.685 [DEBUG] [Thread-172692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:27.258 [DEBUG] [Thread-172690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:03:27.258 [DEBUG] [Thread-172690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:03:27.305 [DEBUG] [Thread-172690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:03:27.306 [DEBUG] [Thread-172690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:03:27.314 [DEBUG] [Thread-172690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:03:27.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:03:27.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-04-11T16:03:27.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-04-11T16:03:27.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:03:27.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:03:27.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:03:27.349 [DEBUG] [Thread-172690] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:03:41.736 [DEBUG] [Thread-172693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:56.778 [DEBUG] [Thread-172694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:03:57.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:03:57.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:03:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:03:58.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 3, 37), 0.16832, 98.831, 0.0, 6.28344, 13.7876, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:03:58.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:03:37
2026-04-11T16:03:59.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:03:59.173 [DEBUG] [Thread-172695] [transport.py] [_log()] starting thread (client mode): 0xae5f3250
2026-04-11T16:03:59.173 [DEBUG] [Thread-172695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:03:59.193 [DEBUG] [Thread-172695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:03:59.193 [INFO] [Thread-172695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:03:59.194 [DEBUG] [Thread-172695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] client lang: <none>
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] server lang: <none>
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] kex follows: False
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] Compression: none
2026-04-11T16:03:59.195 [DEBUG] [Thread-172695] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:03:59.203 [DEBUG] [Thread-172695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:03:59.204 [DEBUG] [Thread-172695] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:03:59.204 [DEBUG] [Thread-172695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:03:59.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:03:59.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:03:59.206 [DEBUG] [Thread-172695] [transport.py] [_log()] userauth is OK
2026-04-11T16:03:59.206 [DEBUG] [Thread-172695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:03:59.206 [DEBUG] [Thread-172695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:03:59.206 [DEBUG] [Thread-172695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:03:59.206 [DEBUG] [Thread-172695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:03:59.224 [INFO] [Thread-172695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:03:59.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:03:59.869 [DEBUG] [Thread-172695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:03:59.869 [DEBUG] [Thread-172695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:03:59.870 [DEBUG] [Thread-172695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:03:59.911 [DEBUG] [Thread-172695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:03:59.911 [DEBUG] [Thread-172695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:03:59.913 [DEBUG] [Thread-172695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:03:59.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:03:59.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:03:59.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:03:59.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:03:59.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:03:59.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:03:59.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:03:59.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:03:59.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:03:59.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.585880   +0.00  +13.70   6.83     94  +12.80 3 0 1 3 1   887    0 0.60 -15.03 ----- 7.1 6.8 33.2 7.4 14.8 -0.2 14.7 -1.4 14.4 -0.0 14.7 -3.1
2026-04-11T16:03:59.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:03:59.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:03:59.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.585880
2026-04-11T16:03:59.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:03:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:03:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:03:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:03:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:03:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:03:37', tmtdew=0.16832, humidity=98.831, cloud=0.0, wind=6.28344, temperature=13.7876, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:03:40.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:03:59.935 [DEBUG] [Thread-172695] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:04:00.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:04:00.036 [DEBUG] [Thread-172698] [transport.py] [_log()] starting thread (client mode): 0xae5f1600
2026-04-11T16:04:00.036 [DEBUG] [Thread-172698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:04:00.050 [DEBUG] [Thread-172698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:04:00.050 [INFO] [Thread-172698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] client lang: <none>
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] server lang: <none>
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] kex follows: False
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] Compression: none
2026-04-11T16:04:00.058 [DEBUG] [Thread-172698] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:04:00.116 [DEBUG] [Thread-172698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:04:00.116 [DEBUG] [Thread-172698] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:04:00.116 [DEBUG] [Thread-172698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:04:00.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:04:00.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:04:00.173 [DEBUG] [Thread-172698] [transport.py] [_log()] userauth is OK
2026-04-11T16:04:00.173 [DEBUG] [Thread-172698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:04:00.173 [DEBUG] [Thread-172698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:04:00.173 [DEBUG] [Thread-172698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:04:00.173 [DEBUG] [Thread-172698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:04:00.188 [INFO] [Thread-172698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:04:00.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:04:00.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:04:01.031 [DEBUG] [Thread-172698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:04:01.031 [DEBUG] [Thread-172698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:04:01.079 [DEBUG] [Thread-172698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:04:01.079 [DEBUG] [Thread-172698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:04:01.088 [DEBUG] [Thread-172698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:04:01.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:04:01.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:04:01.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:04:01.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:04:01.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:04:01.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:04:01.125 [DEBUG] [Thread-172698] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:04:11.813 [DEBUG] [Thread-172700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:04:14.828 [DEBUG] [Thread-172701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:04:24.240 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:04:24.241 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:04:26.869 [DEBUG] [Thread-172702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:04:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:04:31.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:04:31.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:04:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 4, 12), 0.131605, 99.4321, 0.0, 7.35912, 13.4435, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:04:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:04:12
2026-04-11T16:04:32.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:04:32.943 [DEBUG] [Thread-172703] [transport.py] [_log()] starting thread (client mode): 0xae535b10
2026-04-11T16:04:32.943 [DEBUG] [Thread-172703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:04:32.963 [DEBUG] [Thread-172703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:04:32.963 [INFO] [Thread-172703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] client lang: <none>
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] server lang: <none>
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] kex follows: False
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] Compression: none
2026-04-11T16:04:32.967 [DEBUG] [Thread-172703] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:04:32.982 [DEBUG] [Thread-172703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:04:32.983 [DEBUG] [Thread-172703] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:04:32.983 [DEBUG] [Thread-172703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:04:32.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:04:32.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:04:33.024 [DEBUG] [Thread-172703] [transport.py] [_log()] userauth is OK
2026-04-11T16:04:33.024 [DEBUG] [Thread-172703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:04:33.024 [DEBUG] [Thread-172703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:04:33.024 [DEBUG] [Thread-172703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:04:33.024 [DEBUG] [Thread-172703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:04:33.051 [INFO] [Thread-172703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:04:33.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:04:33.710 [DEBUG] [Thread-172703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:04:33.711 [DEBUG] [Thread-172703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:04:33.711 [DEBUG] [Thread-172703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:04:33.753 [DEBUG] [Thread-172703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:04:33.753 [DEBUG] [Thread-172703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:04:33.756 [DEBUG] [Thread-172703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:04:33.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:04:33.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:04:33.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:04:33.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:04:33.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:04:33.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:04:33.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.586227   +0.00  +13.70   4.49     94  +12.80 3 0 1 3 1   887    0 0.57 -16.01 ----- 4.3 4.5 27.8 7.0 14.8 -0.3 14.7 -1.6 14.4 -0.1 14.7 -3.5
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.586227
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:04:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:04:12', tmtdew=0.131605, humidity=99.4321, cloud=0.0, wind=7.35912, temperature=13.4435, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:04:10.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:04:33.773 [DEBUG] [Thread-172703] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:04:33.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:04:33.854 [DEBUG] [Thread-172706] [transport.py] [_log()] starting thread (client mode): 0xb0fe9090
2026-04-11T16:04:33.854 [DEBUG] [Thread-172706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:04:33.869 [DEBUG] [Thread-172706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:04:33.869 [INFO] [Thread-172706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:04:33.877 [DEBUG] [Thread-172706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] client lang: <none>
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] server lang: <none>
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] kex follows: False
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] Compression: none
2026-04-11T16:04:33.878 [DEBUG] [Thread-172706] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:04:33.937 [DEBUG] [Thread-172706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:04:33.937 [DEBUG] [Thread-172706] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:04:33.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:04:33.939 [DEBUG] [Thread-172706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:04:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:04:33.993 [DEBUG] [Thread-172706] [transport.py] [_log()] userauth is OK
2026-04-11T16:04:33.993 [DEBUG] [Thread-172706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:04:33.993 [DEBUG] [Thread-172706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:04:33.993 [DEBUG] [Thread-172706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:04:33.994 [DEBUG] [Thread-172706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:04:34.013 [INFO] [Thread-172706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:04:34.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:04:34.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:04:34.853 [DEBUG] [Thread-172706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:04:34.853 [DEBUG] [Thread-172706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:04:34.901 [DEBUG] [Thread-172706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:04:34.901 [DEBUG] [Thread-172706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:04:34.911 [DEBUG] [Thread-172706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:04:34.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:04:34.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-04-11T16:04:34.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-04-11T16:04:34.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:04:34.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:04:34.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:04:34.948 [DEBUG] [Thread-172706] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:04:41.906 [DEBUG] [Thread-172708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:04:56.963 [DEBUG] [Thread-172709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:04.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:05:04.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:05:04.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-04-11T16:05:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 4, 47), 0.1529, 98.9305, 0.0, 7.90632, 13.9202, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:05:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:04:47
2026-04-11T16:05:06.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:05:06.794 [DEBUG] [Thread-172710] [transport.py] [_log()] starting thread (client mode): 0xae5e7880
2026-04-11T16:05:06.794 [DEBUG] [Thread-172710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:05:06.815 [DEBUG] [Thread-172710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:05:06.815 [INFO] [Thread-172710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] client lang: <none>
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] server lang: <none>
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] kex follows: False
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] Compression: none
2026-04-11T16:05:06.819 [DEBUG] [Thread-172710] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:05:06.838 [DEBUG] [Thread-172710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:05:06.838 [DEBUG] [Thread-172710] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:05:06.839 [DEBUG] [Thread-172710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:05:06.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:05:06.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:05:06.841 [DEBUG] [Thread-172710] [transport.py] [_log()] userauth is OK
2026-04-11T16:05:06.841 [DEBUG] [Thread-172710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:05:06.842 [DEBUG] [Thread-172710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:05:06.842 [DEBUG] [Thread-172710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:05:06.842 [DEBUG] [Thread-172710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:05:06.856 [INFO] [Thread-172710] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:05:06.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:05:07.539 [DEBUG] [Thread-172710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:05:07.540 [DEBUG] [Thread-172710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:05:07.540 [DEBUG] [Thread-172710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:05:07.581 [DEBUG] [Thread-172710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:05:07.582 [DEBUG] [Thread-172710] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:05:07.585 [DEBUG] [Thread-172710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:05:07.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:05:07.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:05:07.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:05:07.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:05:07.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:05:07.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:05:07.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:05:07.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:05:07.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:05:07.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.586575   +0.00  +13.70   4.38     94  +12.80 3 0 1 3 1   887    0 0.54 -16.77 ----- 5.3 4.4 22.4 5.9 14.8 -0.2 14.7 -1.4 14.5 0.1 14.7 -2.2
2026-04-11T16:05:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:05:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:05:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.586575
2026-04-11T16:05:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:05:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:05:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:05:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:05:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:05:07.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:04:47', tmtdew=0.1529, humidity=98.9305, cloud=0.0, wind=7.90632, temperature=13.9202, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:04:40.080', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:05:07.605 [DEBUG] [Thread-172710] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:05:07.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:05:07.714 [DEBUG] [Thread-172713] [transport.py] [_log()] starting thread (client mode): 0xae5e77c0
2026-04-11T16:05:07.715 [DEBUG] [Thread-172713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:05:07.729 [DEBUG] [Thread-172713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:05:07.729 [INFO] [Thread-172713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:05:07.737 [DEBUG] [Thread-172713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] client lang: <none>
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] server lang: <none>
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] kex follows: False
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] Compression: none
2026-04-11T16:05:07.738 [DEBUG] [Thread-172713] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:05:07.796 [DEBUG] [Thread-172713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:05:07.797 [DEBUG] [Thread-172713] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:05:07.797 [DEBUG] [Thread-172713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:05:07.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:05:07.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:05:07.856 [DEBUG] [Thread-172713] [transport.py] [_log()] userauth is OK
2026-04-11T16:05:07.857 [DEBUG] [Thread-172713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:05:07.857 [DEBUG] [Thread-172713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:05:07.857 [DEBUG] [Thread-172713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:05:07.857 [DEBUG] [Thread-172713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:05:07.880 [INFO] [Thread-172713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:05:07.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:05:07.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:05:08.679 [DEBUG] [Thread-172713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:05:08.680 [DEBUG] [Thread-172713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:05:08.728 [DEBUG] [Thread-172713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:05:08.729 [DEBUG] [Thread-172713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:05:08.738 [DEBUG] [Thread-172713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:05:08.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:05:08.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-04-11T16:05:08.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-04-11T16:05:08.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:05:08.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:05:08.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:05:08.775 [DEBUG] [Thread-172713] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:05:12.002 [DEBUG] [Thread-172715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:14.861 [DEBUG] [Thread-172716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:24.383 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:24.384 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:27.064 [DEBUG] [Thread-172717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:38.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:05:38.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:05:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:05:40.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 5, 23), 0.13161, 99.4321, 0.0, 5.859, 13.4601, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:05:40.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:05:23
2026-04-11T16:05:40.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:05:40.630 [DEBUG] [Thread-172718] [transport.py] [_log()] starting thread (client mode): 0xae5f07c0
2026-04-11T16:05:40.630 [DEBUG] [Thread-172718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:05:40.646 [DEBUG] [Thread-172718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:05:40.646 [INFO] [Thread-172718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:05:40.649 [DEBUG] [Thread-172718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] client lang: <none>
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] server lang: <none>
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] kex follows: False
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] Compression: none
2026-04-11T16:05:40.650 [DEBUG] [Thread-172718] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:05:40.665 [DEBUG] [Thread-172718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:05:40.665 [DEBUG] [Thread-172718] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:05:40.666 [DEBUG] [Thread-172718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:05:40.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:05:40.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:05:40.668 [DEBUG] [Thread-172718] [transport.py] [_log()] userauth is OK
2026-04-11T16:05:40.668 [DEBUG] [Thread-172718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:05:40.668 [DEBUG] [Thread-172718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:05:40.668 [DEBUG] [Thread-172718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:05:40.668 [DEBUG] [Thread-172718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:05:40.693 [INFO] [Thread-172718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:05:40.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:05:41.298 [DEBUG] [Thread-172718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:05:41.298 [DEBUG] [Thread-172718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:05:41.299 [DEBUG] [Thread-172718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:05:41.339 [DEBUG] [Thread-172718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:05:41.339 [DEBUG] [Thread-172718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:05:41.342 [DEBUG] [Thread-172718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:05:41.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:05:41.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:05:41.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:05:41.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:05:41.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:05:41.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:05:41.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:05:41.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:05:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:05:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.586922   +0.00  +13.70   5.64     94  +12.80 3 0 1 3 1   887    0 0.49 -19.03 ----- 5.5 5.6 19.6 6.5 14.8 -0.2 14.8 -1.6 14.4 0.0 14.7 -2.0
2026-04-11T16:05:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:05:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:05:41.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.586922
2026-04-11T16:05:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:05:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:05:41.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:05:41.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:05:41.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:05:41.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:05:23', tmtdew=0.13161, humidity=99.4321, cloud=0.0, wind=5.859, temperature=13.4601, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:05:10.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:05:41.365 [DEBUG] [Thread-172718] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:05:41.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:05:41.476 [DEBUG] [Thread-172721] [transport.py] [_log()] starting thread (client mode): 0xae5e64d0
2026-04-11T16:05:41.476 [DEBUG] [Thread-172721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:05:41.490 [DEBUG] [Thread-172721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:05:41.490 [INFO] [Thread-172721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] client lang: <none>
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] server lang: <none>
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] kex follows: False
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:05:41.498 [DEBUG] [Thread-172721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:05:41.499 [DEBUG] [Thread-172721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:05:41.499 [DEBUG] [Thread-172721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:05:41.499 [DEBUG] [Thread-172721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:05:41.499 [DEBUG] [Thread-172721] [transport.py] [_log()] Compression: none
2026-04-11T16:05:41.499 [DEBUG] [Thread-172721] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:05:41.555 [DEBUG] [Thread-172721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:05:41.555 [DEBUG] [Thread-172721] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:05:41.556 [DEBUG] [Thread-172721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:05:41.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:05:41.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:05:41.611 [DEBUG] [Thread-172721] [transport.py] [_log()] userauth is OK
2026-04-11T16:05:41.612 [DEBUG] [Thread-172721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:05:41.612 [DEBUG] [Thread-172721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:05:41.612 [DEBUG] [Thread-172721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:05:41.612 [DEBUG] [Thread-172721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:05:41.635 [INFO] [Thread-172721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:05:41.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:05:41.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:05:42.097 [DEBUG] [Thread-172723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:05:42.461 [DEBUG] [Thread-172721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:05:42.461 [DEBUG] [Thread-172721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:05:42.508 [DEBUG] [Thread-172721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:05:42.509 [DEBUG] [Thread-172721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:05:42.518 [DEBUG] [Thread-172721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:05:42.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:05:42.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-04-11T16:05:42.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-04-11T16:05:42.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:05:42.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:05:42.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:05:42.552 [DEBUG] [Thread-172721] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:05:57.146 [DEBUG] [Thread-172724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:12.184 [DEBUG] [Thread-172725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:12.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:06:12.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:06:12.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-04-11T16:06:13.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 5, 58), 0.12646, 99.4653, 0.0, 6.70644, 13.5433, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:06:13.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:05:58
2026-04-11T16:06:14.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:06:14.467 [DEBUG] [Thread-172726] [transport.py] [_log()] starting thread (client mode): 0xae5e4f40
2026-04-11T16:06:14.467 [DEBUG] [Thread-172726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:06:14.479 [DEBUG] [Thread-172726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:06:14.479 [INFO] [Thread-172726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] client lang: <none>
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] server lang: <none>
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] kex follows: False
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] Compression: none
2026-04-11T16:06:14.482 [DEBUG] [Thread-172726] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:06:14.501 [DEBUG] [Thread-172726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:06:14.502 [DEBUG] [Thread-172726] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:06:14.502 [DEBUG] [Thread-172726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:06:14.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:06:14.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:06:14.549 [DEBUG] [Thread-172726] [transport.py] [_log()] userauth is OK
2026-04-11T16:06:14.549 [DEBUG] [Thread-172726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:06:14.549 [DEBUG] [Thread-172726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:06:14.549 [DEBUG] [Thread-172726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:06:14.549 [DEBUG] [Thread-172726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:06:14.564 [INFO] [Thread-172726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:06:14.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:06:14.888 [DEBUG] [Thread-172728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:15.126 [DEBUG] [Thread-172726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:06:15.126 [DEBUG] [Thread-172726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:06:15.127 [DEBUG] [Thread-172726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:06:15.167 [DEBUG] [Thread-172726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:06:15.167 [DEBUG] [Thread-172726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:06:15.171 [DEBUG] [Thread-172726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:06:15.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:06:15.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:06:15.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:06:15.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:06:15.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:06:15.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:06:15.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:06:15.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:06:15.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.587616   +0.00  +13.80   4.98     94  +12.90 3 0 1 3 1   887    0 0.42 -20.74 ----- 4.3 5.0 5.0 7.6 14.8 -0.2 14.7 -1.3 14.5 -0.1 14.8 -1.9
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.587616
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:06:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:05:58', tmtdew=0.12646, humidity=99.4653, cloud=0.0, wind=6.70644, temperature=13.5433, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:06:10.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:06:15.196 [DEBUG] [Thread-172726] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:06:15.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:06:15.290 [DEBUG] [Thread-172730] [transport.py] [_log()] starting thread (client mode): 0xae5e4430
2026-04-11T16:06:15.290 [DEBUG] [Thread-172730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:06:15.304 [DEBUG] [Thread-172730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:06:15.305 [INFO] [Thread-172730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:06:15.312 [DEBUG] [Thread-172730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:06:15.312 [DEBUG] [Thread-172730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:06:15.312 [DEBUG] [Thread-172730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:06:15.312 [DEBUG] [Thread-172730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] client lang: <none>
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] server lang: <none>
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] kex follows: False
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:06:15.313 [DEBUG] [Thread-172730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:06:15.314 [DEBUG] [Thread-172730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:06:15.314 [DEBUG] [Thread-172730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:06:15.314 [DEBUG] [Thread-172730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:06:15.314 [DEBUG] [Thread-172730] [transport.py] [_log()] Compression: none
2026-04-11T16:06:15.314 [DEBUG] [Thread-172730] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:06:15.372 [DEBUG] [Thread-172730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:06:15.372 [DEBUG] [Thread-172730] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:06:15.373 [DEBUG] [Thread-172730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:06:15.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:06:15.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:06:15.431 [DEBUG] [Thread-172730] [transport.py] [_log()] userauth is OK
2026-04-11T16:06:15.432 [DEBUG] [Thread-172730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:06:15.432 [DEBUG] [Thread-172730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:06:15.432 [DEBUG] [Thread-172730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:06:15.432 [DEBUG] [Thread-172730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:06:15.453 [INFO] [Thread-172730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:06:15.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:06:15.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:06:16.241 [DEBUG] [Thread-172730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:06:16.242 [DEBUG] [Thread-172730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:06:16.290 [DEBUG] [Thread-172730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:06:16.290 [DEBUG] [Thread-172730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:06:16.300 [DEBUG] [Thread-172730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:06:16.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:06:16.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-04-11T16:06:16.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:06:16.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:06:16.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:06:16.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:06:16.337 [DEBUG] [Thread-172730] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:06:24.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:24.528 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:27.224 [DEBUG] [Thread-172732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:42.287 [DEBUG] [Thread-172733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:06:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:06:46.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:06:46.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-04-11T16:06:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 6, 34), 0.1683, 98.8311, 0.0, 5.04864, 13.7877, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:06:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:06:34
2026-04-11T16:06:48.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:06:48.183 [DEBUG] [Thread-172734] [transport.py] [_log()] starting thread (client mode): 0xae5e6a10
2026-04-11T16:06:48.183 [DEBUG] [Thread-172734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:06:48.202 [DEBUG] [Thread-172734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:06:48.202 [INFO] [Thread-172734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] client lang: <none>
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] server lang: <none>
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] kex follows: False
2026-04-11T16:06:48.203 [DEBUG] [Thread-172734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:06:48.204 [DEBUG] [Thread-172734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:06:48.204 [DEBUG] [Thread-172734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:06:48.204 [DEBUG] [Thread-172734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:06:48.204 [DEBUG] [Thread-172734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:06:48.204 [DEBUG] [Thread-172734] [transport.py] [_log()] Compression: none
2026-04-11T16:06:48.204 [DEBUG] [Thread-172734] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:06:48.211 [DEBUG] [Thread-172734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:06:48.211 [DEBUG] [Thread-172734] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:06:48.211 [DEBUG] [Thread-172734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:06:48.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:06:48.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:06:48.212 [DEBUG] [Thread-172734] [transport.py] [_log()] userauth is OK
2026-04-11T16:06:48.212 [DEBUG] [Thread-172734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:06:48.212 [DEBUG] [Thread-172734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:06:48.212 [DEBUG] [Thread-172734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:06:48.212 [DEBUG] [Thread-172734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:06:48.221 [INFO] [Thread-172734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:06:48.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:06:48.842 [DEBUG] [Thread-172734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:06:48.842 [DEBUG] [Thread-172734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:06:48.843 [DEBUG] [Thread-172734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:06:48.883 [DEBUG] [Thread-172734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:06:48.883 [DEBUG] [Thread-172734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:06:48.887 [DEBUG] [Thread-172734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:06:48.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:06:48.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:06:48.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:06:48.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:06:48.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:06:48.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:06:48.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:06:48.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:06:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:06:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.587963   +0.00  +13.80   6.85     94  +12.90 3 0 1 3 1   887    0 0.31 -24.40 ----- 7.5 6.8 6.6 8.6 14.9 -0.2 14.8 -1.2 14.5 0.0 14.7 -1.5
2026-04-11T16:06:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:06:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:06:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.587963
2026-04-11T16:06:48.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:06:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:06:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:06:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:06:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:06:48.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:06:34', tmtdew=0.1683, humidity=98.8311, cloud=0.0, wind=5.04864, temperature=13.7877, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:06:40.003', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:06:48.906 [DEBUG] [Thread-172734] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:06:48.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:06:48.998 [DEBUG] [Thread-172737] [transport.py] [_log()] starting thread (client mode): 0xae5f28f0
2026-04-11T16:06:48.998 [DEBUG] [Thread-172737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:06:49.018 [DEBUG] [Thread-172737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:06:49.018 [INFO] [Thread-172737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] client lang: <none>
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] server lang: <none>
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] kex follows: False
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:06:49.027 [DEBUG] [Thread-172737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:06:49.028 [DEBUG] [Thread-172737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:06:49.028 [DEBUG] [Thread-172737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:06:49.028 [DEBUG] [Thread-172737] [transport.py] [_log()] Compression: none
2026-04-11T16:06:49.028 [DEBUG] [Thread-172737] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:06:49.086 [DEBUG] [Thread-172737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:06:49.087 [DEBUG] [Thread-172737] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:06:49.087 [DEBUG] [Thread-172737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:06:49.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:06:49.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:06:49.143 [DEBUG] [Thread-172737] [transport.py] [_log()] userauth is OK
2026-04-11T16:06:49.144 [DEBUG] [Thread-172737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:06:49.144 [DEBUG] [Thread-172737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:06:49.144 [DEBUG] [Thread-172737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:06:49.144 [DEBUG] [Thread-172737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:06:49.162 [INFO] [Thread-172737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:06:49.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:06:49.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:06:49.968 [DEBUG] [Thread-172737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:06:49.968 [DEBUG] [Thread-172737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:06:50.016 [DEBUG] [Thread-172737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:06:50.017 [DEBUG] [Thread-172737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:06:50.028 [DEBUG] [Thread-172737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:06:50.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:06:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:06:50.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-04-11T16:06:50.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:06:50.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:06:50.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:06:50.067 [DEBUG] [Thread-172737] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:06:57.324 [DEBUG] [Thread-172739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:12.369 [DEBUG] [Thread-172740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:14.920 [DEBUG] [Thread-172741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:20.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:07:20.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:07:20.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-04-11T16:07:21.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 7, 10), 0.086725, 99.399, 0.0, 7.6068, 13.3938, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:07:21.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:07:10
2026-04-11T16:07:21.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:07:21.879 [DEBUG] [Thread-172742] [transport.py] [_log()] starting thread (client mode): 0xae5e57b0
2026-04-11T16:07:21.879 [DEBUG] [Thread-172742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:07:21.899 [DEBUG] [Thread-172742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:07:21.899 [INFO] [Thread-172742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] client lang: <none>
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] server lang: <none>
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] kex follows: False
2026-04-11T16:07:21.902 [DEBUG] [Thread-172742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:07:21.903 [DEBUG] [Thread-172742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:07:21.903 [DEBUG] [Thread-172742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:07:21.903 [DEBUG] [Thread-172742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:07:21.903 [DEBUG] [Thread-172742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:07:21.903 [DEBUG] [Thread-172742] [transport.py] [_log()] Compression: none
2026-04-11T16:07:21.903 [DEBUG] [Thread-172742] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:07:21.916 [DEBUG] [Thread-172742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:07:21.916 [DEBUG] [Thread-172742] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:07:21.916 [DEBUG] [Thread-172742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:07:21.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:07:21.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:07:21.918 [DEBUG] [Thread-172742] [transport.py] [_log()] userauth is OK
2026-04-11T16:07:21.918 [DEBUG] [Thread-172742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:07:21.919 [DEBUG] [Thread-172742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:07:21.919 [DEBUG] [Thread-172742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:07:21.919 [DEBUG] [Thread-172742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:07:21.942 [INFO] [Thread-172742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:07:21.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:07:22.531 [DEBUG] [Thread-172742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:07:22.531 [DEBUG] [Thread-172742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:07:22.532 [DEBUG] [Thread-172742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:07:22.572 [DEBUG] [Thread-172742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:07:22.572 [DEBUG] [Thread-172742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:07:22.576 [DEBUG] [Thread-172742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:07:22.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:07:22.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:07:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:07:22.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:07:22.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:07:22.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:07:22.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:07:22.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:07:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:07:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.588311   +0.00  +13.70   5.64     94  +12.80 3 0 1 3 1   887    0 0.35 -23.09 ----- 5.5 5.6 347.5 9.2 14.8 -0.3 14.8 -1.4 14.5 -0.1 14.7 -1.7
2026-04-11T16:07:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:07:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:07:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.588311
2026-04-11T16:07:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:07:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:07:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:07:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:07:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:07:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:07:10', tmtdew=0.086725, humidity=99.399, cloud=0.0, wind=7.6068, temperature=13.3938, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:07:10.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:07:22.608 [DEBUG] [Thread-172742] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:07:22.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:07:22.699 [DEBUG] [Thread-172745] [transport.py] [_log()] starting thread (client mode): 0xae5f2a40
2026-04-11T16:07:22.699 [DEBUG] [Thread-172745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:07:22.714 [DEBUG] [Thread-172745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:07:22.715 [INFO] [Thread-172745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:22.722 [DEBUG] [Thread-172745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] client lang: <none>
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] server lang: <none>
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] kex follows: False
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] Compression: none
2026-04-11T16:07:22.723 [DEBUG] [Thread-172745] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:07:22.782 [DEBUG] [Thread-172745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:07:22.782 [DEBUG] [Thread-172745] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:07:22.783 [DEBUG] [Thread-172745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:07:22.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:07:22.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:07:22.838 [DEBUG] [Thread-172745] [transport.py] [_log()] userauth is OK
2026-04-11T16:07:22.839 [DEBUG] [Thread-172745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:07:22.839 [DEBUG] [Thread-172745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:07:22.839 [DEBUG] [Thread-172745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:07:22.839 [DEBUG] [Thread-172745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:07:22.858 [INFO] [Thread-172745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:07:22.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:07:22.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:07:23.704 [DEBUG] [Thread-172745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:07:23.704 [DEBUG] [Thread-172745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:07:23.752 [DEBUG] [Thread-172745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:07:23.753 [DEBUG] [Thread-172745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:07:23.762 [DEBUG] [Thread-172745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:07:23.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:07:23.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-04-11T16:07:23.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-04-11T16:07:23.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:07:23.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:07:23.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:07:23.799 [DEBUG] [Thread-172745] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:07:24.667 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:24.668 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:27.407 [DEBUG] [Thread-172747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:42.460 [DEBUG] [Thread-172748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:07:53.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:07:53.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-04-11T16:07:55.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 7, 46), 0.16824, 98.8311, 0.0, 5.6484, 13.6882, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:07:55.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:07:46
2026-04-11T16:07:55.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:07:55.644 [DEBUG] [Thread-172749] [transport.py] [_log()] starting thread (client mode): 0xae5f14b0
2026-04-11T16:07:55.644 [DEBUG] [Thread-172749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:07:55.665 [DEBUG] [Thread-172749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:07:55.665 [INFO] [Thread-172749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] client lang: <none>
2026-04-11T16:07:55.667 [DEBUG] [Thread-172749] [transport.py] [_log()] server lang: <none>
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] kex follows: False
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] Compression: none
2026-04-11T16:07:55.668 [DEBUG] [Thread-172749] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:07:55.680 [DEBUG] [Thread-172749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:07:55.680 [DEBUG] [Thread-172749] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:07:55.681 [DEBUG] [Thread-172749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:07:55.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:07:55.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:07:55.683 [DEBUG] [Thread-172749] [transport.py] [_log()] userauth is OK
2026-04-11T16:07:55.683 [DEBUG] [Thread-172749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:07:55.683 [DEBUG] [Thread-172749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:07:55.683 [DEBUG] [Thread-172749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:07:55.683 [DEBUG] [Thread-172749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:07:55.708 [INFO] [Thread-172749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:07:55.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:07:56.280 [DEBUG] [Thread-172749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:07:56.280 [DEBUG] [Thread-172749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:07:56.281 [DEBUG] [Thread-172749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:07:56.321 [DEBUG] [Thread-172749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:07:56.321 [DEBUG] [Thread-172749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:07:56.325 [DEBUG] [Thread-172749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:07:56.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:07:56.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:07:56.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:07:56.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:07:56.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:07:56.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:07:56.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:07:56.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:07:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:07:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.588658   +0.00  +13.80   6.84     94  +12.80 3 0 1 3 1   887    0 0.37 -21.75 ----- 7.4 6.8 24.0 8.4 14.9 -0.2 14.8 -1.3 14.5 -0.2 14.8 -1.0
2026-04-11T16:07:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:07:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:07:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.588658
2026-04-11T16:07:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:07:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:07:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:07:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:07:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:07:56.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:07:46', tmtdew=0.16824, humidity=98.8311, cloud=0.0, wind=5.6484, temperature=13.6882, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:07:40.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:07:56.352 [DEBUG] [Thread-172749] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:07:56.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:07:56.445 [DEBUG] [Thread-172752] [transport.py] [_log()] starting thread (client mode): 0xae5f0070
2026-04-11T16:07:56.445 [DEBUG] [Thread-172752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:07:56.460 [DEBUG] [Thread-172752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:07:56.460 [INFO] [Thread-172752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] client lang: <none>
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] server lang: <none>
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] kex follows: False
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:07:56.468 [DEBUG] [Thread-172752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:07:56.469 [DEBUG] [Thread-172752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:07:56.469 [DEBUG] [Thread-172752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:07:56.469 [DEBUG] [Thread-172752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:07:56.469 [DEBUG] [Thread-172752] [transport.py] [_log()] Compression: none
2026-04-11T16:07:56.469 [DEBUG] [Thread-172752] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:07:56.526 [DEBUG] [Thread-172752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:07:56.527 [DEBUG] [Thread-172752] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:07:56.527 [DEBUG] [Thread-172752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:07:56.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:07:56.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:07:56.582 [DEBUG] [Thread-172752] [transport.py] [_log()] userauth is OK
2026-04-11T16:07:56.582 [DEBUG] [Thread-172752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:07:56.582 [DEBUG] [Thread-172752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:07:56.582 [DEBUG] [Thread-172752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:07:56.582 [DEBUG] [Thread-172752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:07:56.607 [INFO] [Thread-172752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:07:56.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:07:56.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:07:57.437 [DEBUG] [Thread-172752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:07:57.438 [DEBUG] [Thread-172752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:07:57.485 [DEBUG] [Thread-172752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:07:57.485 [DEBUG] [Thread-172752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:07:57.495 [DEBUG] [Thread-172754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:07:57.496 [DEBUG] [Thread-172752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:07:57.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:07:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:07:57.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:07:57.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:07:57.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:07:57.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:07:57.532 [DEBUG] [Thread-172752] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:08:12.551 [DEBUG] [Thread-172755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:08:14.954 [DEBUG] [Thread-172756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:08:24.810 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:08:24.811 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:08:27.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:08:27.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:08:27.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:08:27.593 [DEBUG] [Thread-172757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:08:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 7, 46), 0.16824, 98.8311, 0.0, 5.6484, 13.6882, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:08:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:07:46
2026-04-11T16:08:29.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:08:29.405 [DEBUG] [Thread-172758] [transport.py] [_log()] starting thread (client mode): 0xae5f2230
2026-04-11T16:08:29.405 [DEBUG] [Thread-172758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:08:29.424 [DEBUG] [Thread-172758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:08:29.424 [INFO] [Thread-172758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] client lang: <none>
2026-04-11T16:08:29.427 [DEBUG] [Thread-172758] [transport.py] [_log()] server lang: <none>
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] kex follows: False
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] Compression: none
2026-04-11T16:08:29.428 [DEBUG] [Thread-172758] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:08:29.439 [DEBUG] [Thread-172758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:08:29.439 [DEBUG] [Thread-172758] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:08:29.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:08:29.441 [DEBUG] [Thread-172758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:08:29.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:08:29.443 [DEBUG] [Thread-172758] [transport.py] [_log()] userauth is OK
2026-04-11T16:08:29.443 [DEBUG] [Thread-172758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:08:29.443 [DEBUG] [Thread-172758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:08:29.443 [DEBUG] [Thread-172758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:08:29.443 [DEBUG] [Thread-172758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:08:29.467 [INFO] [Thread-172758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:08:29.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:08:30.145 [DEBUG] [Thread-172758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:08:30.145 [DEBUG] [Thread-172758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:08:30.146 [DEBUG] [Thread-172758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:08:30.186 [DEBUG] [Thread-172758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:08:30.186 [DEBUG] [Thread-172758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:08:30.190 [DEBUG] [Thread-172758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:08:30.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:08:30.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:08:30.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:08:30.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:08:30.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:08:30.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:08:30.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:08:30.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:08:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:08:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.589005   +0.00  +13.80   6.25     94  +12.90 3 0 1 3 1   887    0 0.41 -20.29 ----- 7.0 6.2 9.8 7.8 14.9 -0.2 14.8 -1.1 14.5 0.0 14.8 -1.0
2026-04-11T16:08:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:08:30.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:08:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.589005
2026-04-11T16:08:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:08:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:08:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:08:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:08:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:08:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:07:46', tmtdew=0.16824, humidity=98.8311, cloud=0.0, wind=5.6484, temperature=13.6882, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:08:10.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:08:30.217 [DEBUG] [Thread-172758] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:08:30.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:08:30.310 [DEBUG] [Thread-172761] [transport.py] [_log()] starting thread (client mode): 0xa7952ec0
2026-04-11T16:08:30.310 [DEBUG] [Thread-172761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:08:30.325 [DEBUG] [Thread-172761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:08:30.326 [INFO] [Thread-172761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:08:30.334 [DEBUG] [Thread-172761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] client lang: <none>
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] server lang: <none>
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] kex follows: False
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] Compression: none
2026-04-11T16:08:30.335 [DEBUG] [Thread-172761] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:08:30.393 [DEBUG] [Thread-172761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:08:30.394 [DEBUG] [Thread-172761] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:08:30.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:08:30.395 [DEBUG] [Thread-172761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:08:30.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:08:30.449 [DEBUG] [Thread-172761] [transport.py] [_log()] userauth is OK
2026-04-11T16:08:30.450 [DEBUG] [Thread-172761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:08:30.450 [DEBUG] [Thread-172761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:08:30.450 [DEBUG] [Thread-172761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:08:30.450 [DEBUG] [Thread-172761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:08:30.468 [INFO] [Thread-172761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:08:30.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:08:30.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:08:31.264 [DEBUG] [Thread-172761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:08:31.264 [DEBUG] [Thread-172761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:08:31.312 [DEBUG] [Thread-172761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:08:31.312 [DEBUG] [Thread-172761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:08:31.322 [DEBUG] [Thread-172761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:08:31.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:08:31.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-04-11T16:08:31.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:08:31.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:08:31.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:08:31.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:08:31.359 [DEBUG] [Thread-172761] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:08:42.632 [DEBUG] [Thread-172763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:08:57.683 [DEBUG] [Thread-172764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:01.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:09:01.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:09:01.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-04-11T16:09:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 8, 21), 0.081555, 99.4322, 0.0, 7.8714, 13.3607, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:09:02.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:08:21
2026-04-11T16:09:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:09:03.258 [DEBUG] [Thread-172765] [transport.py] [_log()] starting thread (client mode): 0xa79530d0
2026-04-11T16:09:03.258 [DEBUG] [Thread-172765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:09:03.279 [DEBUG] [Thread-172765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:09:03.279 [INFO] [Thread-172765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] client lang: <none>
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] server lang: <none>
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] kex follows: False
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] Compression: none
2026-04-11T16:09:03.283 [DEBUG] [Thread-172765] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:09:03.300 [DEBUG] [Thread-172765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:09:03.300 [DEBUG] [Thread-172765] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:09:03.301 [DEBUG] [Thread-172765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:09:03.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:09:03.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:09:03.302 [DEBUG] [Thread-172765] [transport.py] [_log()] userauth is OK
2026-04-11T16:09:03.303 [DEBUG] [Thread-172765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:09:03.303 [DEBUG] [Thread-172765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:09:03.303 [DEBUG] [Thread-172765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:09:03.303 [DEBUG] [Thread-172765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:09:03.337 [INFO] [Thread-172765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:09:03.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:09:03.975 [DEBUG] [Thread-172765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:09:03.975 [DEBUG] [Thread-172765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:09:03.975 [DEBUG] [Thread-172765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:09:04.016 [DEBUG] [Thread-172765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:09:04.016 [DEBUG] [Thread-172765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:09:04.020 [DEBUG] [Thread-172765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:09:04.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:09:04.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:09:04.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:09:04.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:09:04.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:09:04.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:09:04.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:09:04.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:09:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:09:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.589352   +0.00  +13.80   4.89     94  +12.80 3 0 1 3 1   887    0 0.36 -21.64 ----- 5.4 4.9 311.2 7.3 14.9 -0.3 14.8 -1.2 14.5 0.2 14.8 -2.5
2026-04-11T16:09:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:09:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:09:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.589352
2026-04-11T16:09:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:09:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:09:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:09:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:09:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:09:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:08:21', tmtdew=0.081555, humidity=99.4322, cloud=0.0, wind=7.8714, temperature=13.3607, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:08:40.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:09:04.049 [DEBUG] [Thread-172765] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:09:04.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:09:04.142 [DEBUG] [Thread-172768] [transport.py] [_log()] starting thread (client mode): 0xae5f02e0
2026-04-11T16:09:04.142 [DEBUG] [Thread-172768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:09:04.158 [DEBUG] [Thread-172768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:09:04.158 [INFO] [Thread-172768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:09:04.165 [DEBUG] [Thread-172768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:09:04.165 [DEBUG] [Thread-172768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:09:04.165 [DEBUG] [Thread-172768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] client lang: <none>
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] server lang: <none>
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] kex follows: False
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] Compression: none
2026-04-11T16:09:04.166 [DEBUG] [Thread-172768] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:09:04.225 [DEBUG] [Thread-172768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:09:04.226 [DEBUG] [Thread-172768] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:09:04.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:09:04.227 [DEBUG] [Thread-172768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:09:04.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:09:04.283 [DEBUG] [Thread-172768] [transport.py] [_log()] userauth is OK
2026-04-11T16:09:04.283 [DEBUG] [Thread-172768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:09:04.283 [DEBUG] [Thread-172768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:09:04.283 [DEBUG] [Thread-172768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:09:04.283 [DEBUG] [Thread-172768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:09:04.302 [INFO] [Thread-172768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:09:04.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:09:04.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:09:05.163 [DEBUG] [Thread-172768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:09:05.163 [DEBUG] [Thread-172768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:09:05.212 [DEBUG] [Thread-172768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:09:05.212 [DEBUG] [Thread-172768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:09:05.221 [DEBUG] [Thread-172768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:09:05.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:09:05.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-04-11T16:09:05.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-04-11T16:09:05.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:09:05.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:09:05.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:09:05.257 [DEBUG] [Thread-172768] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:09:12.722 [DEBUG] [Thread-172770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:14.986 [DEBUG] [Thread-172771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:24.952 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:24.953 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:27.773 [DEBUG] [Thread-172772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:09:35.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:09:35.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-04-11T16:09:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 8, 57), 0.134145, 99.4156, 0.0, 5.93028, 13.4439, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:09:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:08:57
2026-04-11T16:09:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:09:37.180 [DEBUG] [Thread-172773] [transport.py] [_log()] starting thread (client mode): 0xae5a5090
2026-04-11T16:09:37.180 [DEBUG] [Thread-172773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:09:37.201 [DEBUG] [Thread-172773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:09:37.202 [INFO] [Thread-172773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:09:37.205 [DEBUG] [Thread-172773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:09:37.205 [DEBUG] [Thread-172773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:09:37.205 [DEBUG] [Thread-172773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] client lang: <none>
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] server lang: <none>
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] kex follows: False
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:09:37.206 [DEBUG] [Thread-172773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:09:37.207 [DEBUG] [Thread-172773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:09:37.207 [DEBUG] [Thread-172773] [transport.py] [_log()] Compression: none
2026-04-11T16:09:37.207 [DEBUG] [Thread-172773] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:09:37.224 [DEBUG] [Thread-172773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:09:37.224 [DEBUG] [Thread-172773] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:09:37.225 [DEBUG] [Thread-172773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:09:37.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:09:37.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:09:37.226 [DEBUG] [Thread-172773] [transport.py] [_log()] userauth is OK
2026-04-11T16:09:37.227 [DEBUG] [Thread-172773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:09:37.227 [DEBUG] [Thread-172773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:09:37.227 [DEBUG] [Thread-172773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:09:37.227 [DEBUG] [Thread-172773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:09:37.251 [INFO] [Thread-172773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:09:37.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:09:37.870 [DEBUG] [Thread-172773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:09:37.870 [DEBUG] [Thread-172773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:09:37.871 [DEBUG] [Thread-172773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:09:37.911 [DEBUG] [Thread-172773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:09:37.911 [DEBUG] [Thread-172773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:09:37.914 [DEBUG] [Thread-172773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:09:37.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:09:37.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:09:37.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:09:37.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:09:37.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:09:37.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:09:37.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:09:37.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:09:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:09:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.589700   +0.00  +13.70   5.37     94  +12.80 3 0 1 3 1   887    0 0.43 -19.80 ----- 3.9 5.4 342.0 6.7 15.0 -0.3 14.9 -1.2 14.6 0.2 14.8 -2.3
2026-04-11T16:09:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:09:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:09:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.589700
2026-04-11T16:09:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:09:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:09:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:09:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:09:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:09:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:08:57', tmtdew=0.134145, humidity=99.4156, cloud=0.0, wind=5.93028, temperature=13.4439, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:09:10.080', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:09:37.937 [DEBUG] [Thread-172773] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:09:38.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:09:38.033 [DEBUG] [Thread-172776] [transport.py] [_log()] starting thread (client mode): 0xae5a4220
2026-04-11T16:09:38.033 [DEBUG] [Thread-172776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:09:38.047 [DEBUG] [Thread-172776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:09:38.047 [INFO] [Thread-172776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:09:38.055 [DEBUG] [Thread-172776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] client lang: <none>
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] server lang: <none>
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] kex follows: False
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:09:38.056 [DEBUG] [Thread-172776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:09:38.057 [DEBUG] [Thread-172776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:09:38.057 [DEBUG] [Thread-172776] [transport.py] [_log()] Compression: none
2026-04-11T16:09:38.057 [DEBUG] [Thread-172776] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:09:38.113 [DEBUG] [Thread-172776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:09:38.113 [DEBUG] [Thread-172776] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:09:38.114 [DEBUG] [Thread-172776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:09:38.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:09:38.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:09:38.168 [DEBUG] [Thread-172776] [transport.py] [_log()] userauth is OK
2026-04-11T16:09:38.168 [DEBUG] [Thread-172776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:09:38.168 [DEBUG] [Thread-172776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:09:38.168 [DEBUG] [Thread-172776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:09:38.169 [DEBUG] [Thread-172776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:09:38.193 [INFO] [Thread-172776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:09:38.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:09:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:09:39.017 [DEBUG] [Thread-172776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:09:39.017 [DEBUG] [Thread-172776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:09:39.065 [DEBUG] [Thread-172776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:09:39.065 [DEBUG] [Thread-172776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:09:39.074 [DEBUG] [Thread-172776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:09:39.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:09:39.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-04-11T16:09:39.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-04-11T16:09:39.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:09:39.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:09:39.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:09:39.111 [DEBUG] [Thread-172776] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:09:42.808 [DEBUG] [Thread-172778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:09:57.860 [DEBUG] [Thread-172779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:09.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:10:09.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:10:09.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-04-11T16:10:10.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 9, 33), 0.136705, 99.399, 0.0, 6.01848, 13.4107, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:10:10.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:09:33
2026-04-11T16:10:10.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:10:10.964 [DEBUG] [Thread-172780] [transport.py] [_log()] starting thread (client mode): 0xae5f0d00
2026-04-11T16:10:10.964 [DEBUG] [Thread-172780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:10:10.979 [DEBUG] [Thread-172780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:10:10.979 [INFO] [Thread-172780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] client lang: <none>
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] server lang: <none>
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] kex follows: False
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:10:10.982 [DEBUG] [Thread-172780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:10:10.983 [DEBUG] [Thread-172780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:10:10.983 [DEBUG] [Thread-172780] [transport.py] [_log()] Compression: none
2026-04-11T16:10:10.983 [DEBUG] [Thread-172780] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:10:11.000 [DEBUG] [Thread-172780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:10:11.000 [DEBUG] [Thread-172780] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:10:11.001 [DEBUG] [Thread-172780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:10:11.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:10:11.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:10:11.003 [DEBUG] [Thread-172780] [transport.py] [_log()] userauth is OK
2026-04-11T16:10:11.003 [DEBUG] [Thread-172780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:10:11.003 [DEBUG] [Thread-172780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:10:11.004 [DEBUG] [Thread-172780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:10:11.004 [DEBUG] [Thread-172780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:10:11.022 [INFO] [Thread-172780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:10:11.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:10:11.639 [DEBUG] [Thread-172780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:10:11.639 [DEBUG] [Thread-172780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:10:11.639 [DEBUG] [Thread-172780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:10:11.680 [DEBUG] [Thread-172780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:10:11.680 [DEBUG] [Thread-172780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:10:11.682 [DEBUG] [Thread-172780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:10:11.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:10:11.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:10:11.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:10:11.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:10:11.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:10:11.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:10:11.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:10:11.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.590047   +0.00  +13.70   5.99     94  +12.80 3 0 1 3 1   887    0 0.40 -19.86 ----- 6.2 6.0 328.4 7.3 14.9 -0.1 14.8 -1.1 14.6 0.1 14.8 -1.7
2026-04-11T16:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.590047
2026-04-11T16:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:10:11.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:10:11.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:10:11.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:10:11.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:10:11.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:09:33', tmtdew=0.136705, humidity=99.399, cloud=0.0, wind=6.01848, temperature=13.4107, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:09:40.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:10:11.703 [DEBUG] [Thread-172780] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:10:11.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:10:11.796 [DEBUG] [Thread-172783] [transport.py] [_log()] starting thread (client mode): 0xa79517b0
2026-04-11T16:10:11.796 [DEBUG] [Thread-172783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:10:11.811 [DEBUG] [Thread-172783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:10:11.811 [INFO] [Thread-172783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] client lang: <none>
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] server lang: <none>
2026-04-11T16:10:11.818 [DEBUG] [Thread-172783] [transport.py] [_log()] kex follows: False
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] Compression: none
2026-04-11T16:10:11.819 [DEBUG] [Thread-172783] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:10:11.876 [DEBUG] [Thread-172783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:10:11.877 [DEBUG] [Thread-172783] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:10:11.877 [DEBUG] [Thread-172783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:10:11.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:10:11.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:10:11.932 [DEBUG] [Thread-172783] [transport.py] [_log()] userauth is OK
2026-04-11T16:10:11.933 [DEBUG] [Thread-172783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:10:11.933 [DEBUG] [Thread-172783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:10:11.933 [DEBUG] [Thread-172783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:10:11.933 [DEBUG] [Thread-172783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:10:11.952 [INFO] [Thread-172783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:10:11.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:10:11.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:10:12.801 [DEBUG] [Thread-172783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:10:12.802 [DEBUG] [Thread-172783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:10:12.848 [DEBUG] [Thread-172783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:10:12.849 [DEBUG] [Thread-172783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:10:12.857 [DEBUG] [Thread-172783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:10:12.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:10:12.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-04-11T16:10:12.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-04-11T16:10:12.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:10:12.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:10:12.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:10:12.889 [DEBUG] [Thread-172783] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:10:12.901 [DEBUG] [Thread-172785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:15.023 [DEBUG] [Thread-172786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:25.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:25.094 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:27.953 [DEBUG] [Thread-172787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:42.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:10:42.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:10:42.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:10:42.988 [DEBUG] [Thread-172788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:10:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 10, 8), 0.12899, 99.4488, 0.0, 5.91264, 13.4439, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:10:44.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:10:08
2026-04-11T16:10:44.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:10:44.740 [DEBUG] [Thread-172789] [transport.py] [_log()] starting thread (client mode): 0xae5e4c40
2026-04-11T16:10:44.740 [DEBUG] [Thread-172789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:10:44.761 [DEBUG] [Thread-172789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:10:44.761 [INFO] [Thread-172789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:10:44.763 [DEBUG] [Thread-172789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:10:44.763 [DEBUG] [Thread-172789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:10:44.763 [DEBUG] [Thread-172789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:10:44.763 [DEBUG] [Thread-172789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:44.763 [DEBUG] [Thread-172789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] client lang: <none>
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] server lang: <none>
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] kex follows: False
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] Compression: none
2026-04-11T16:10:44.764 [DEBUG] [Thread-172789] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:10:44.783 [DEBUG] [Thread-172789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:10:44.784 [DEBUG] [Thread-172789] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:10:44.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:10:44.785 [DEBUG] [Thread-172789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:10:44.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:10:44.786 [DEBUG] [Thread-172789] [transport.py] [_log()] userauth is OK
2026-04-11T16:10:44.786 [DEBUG] [Thread-172789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:10:44.786 [DEBUG] [Thread-172789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:10:44.787 [DEBUG] [Thread-172789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:10:44.787 [DEBUG] [Thread-172789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:10:44.808 [INFO] [Thread-172789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:10:44.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:10:45.345 [DEBUG] [Thread-172789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:10:45.346 [DEBUG] [Thread-172789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:10:45.346 [DEBUG] [Thread-172789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:10:45.387 [DEBUG] [Thread-172789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:10:45.388 [DEBUG] [Thread-172789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:10:45.390 [DEBUG] [Thread-172789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:10:45.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:10:45.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:10:45.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:10:45.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:10:45.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:10:45.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:10:45.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:10:45.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:10:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:10:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.590741   +0.00  +13.70   5.47     94  +12.70 3 0 1 3 1   887    0 0.43 -18.31 ----- 6.4 5.5 331.2 7.1 14.9 -0.1 14.8 -0.8 14.6 0.2 14.9 -1.7
2026-04-11T16:10:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:10:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:10:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.590741
2026-04-11T16:10:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:10:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:10:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:10:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:10:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:10:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:10:08', tmtdew=0.12899, humidity=99.4488, cloud=0.0, wind=5.91264, temperature=13.4439, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:10:40.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:10:45.412 [DEBUG] [Thread-172789] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:10:45.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:10:45.502 [DEBUG] [Thread-172792] [transport.py] [_log()] starting thread (client mode): 0xa79515d0
2026-04-11T16:10:45.502 [DEBUG] [Thread-172792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:10:45.517 [DEBUG] [Thread-172792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:10:45.518 [INFO] [Thread-172792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:10:45.525 [DEBUG] [Thread-172792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:10:45.526 [DEBUG] [Thread-172792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:10:45.526 [DEBUG] [Thread-172792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:10:45.526 [DEBUG] [Thread-172792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:45.526 [DEBUG] [Thread-172792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:10:45.526 [DEBUG] [Thread-172792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:45.526 [DEBUG] [Thread-172792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] client lang: <none>
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] server lang: <none>
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] kex follows: False
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] Compression: none
2026-04-11T16:10:45.527 [DEBUG] [Thread-172792] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:10:45.584 [DEBUG] [Thread-172792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:10:45.584 [DEBUG] [Thread-172792] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:10:45.585 [DEBUG] [Thread-172792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:10:45.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:10:45.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:10:45.641 [DEBUG] [Thread-172792] [transport.py] [_log()] userauth is OK
2026-04-11T16:10:45.641 [DEBUG] [Thread-172792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:10:45.641 [DEBUG] [Thread-172792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:10:45.641 [DEBUG] [Thread-172792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:10:45.641 [DEBUG] [Thread-172792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:10:45.661 [INFO] [Thread-172792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:10:45.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:10:45.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:10:46.514 [DEBUG] [Thread-172792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:10:46.514 [DEBUG] [Thread-172792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:10:46.562 [DEBUG] [Thread-172792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:10:46.562 [DEBUG] [Thread-172792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:10:46.571 [DEBUG] [Thread-172792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:10:46.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:10:46.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-04-11T16:10:46.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-04-11T16:10:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:10:46.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:10:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:10:46.608 [DEBUG] [Thread-172792] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:10:58.025 [DEBUG] [Thread-172794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:13.086 [DEBUG] [Thread-172795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:15.061 [DEBUG] [Thread-172796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:16.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:11:16.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:11:16.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-04-11T16:11:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 10, 43), 0.16313, 98.8644, 0.0, 5.472, 13.7877, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:11:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:10:43
2026-04-11T16:11:18.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:11:18.405 [DEBUG] [Thread-172797] [transport.py] [_log()] starting thread (client mode): 0xae560a60
2026-04-11T16:11:18.405 [DEBUG] [Thread-172797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:11:18.428 [DEBUG] [Thread-172797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:11:18.428 [INFO] [Thread-172797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:11:18.431 [DEBUG] [Thread-172797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:11:18.431 [DEBUG] [Thread-172797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:11:18.431 [DEBUG] [Thread-172797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:11:18.431 [DEBUG] [Thread-172797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] client lang: <none>
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] server lang: <none>
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] kex follows: False
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:11:18.432 [DEBUG] [Thread-172797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:11:18.433 [DEBUG] [Thread-172797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:11:18.433 [DEBUG] [Thread-172797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:11:18.433 [DEBUG] [Thread-172797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:11:18.433 [DEBUG] [Thread-172797] [transport.py] [_log()] Compression: none
2026-04-11T16:11:18.433 [DEBUG] [Thread-172797] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:11:18.450 [DEBUG] [Thread-172797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:11:18.450 [DEBUG] [Thread-172797] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:11:18.450 [DEBUG] [Thread-172797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:11:18.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:11:18.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:11:18.451 [DEBUG] [Thread-172797] [transport.py] [_log()] userauth is OK
2026-04-11T16:11:18.451 [DEBUG] [Thread-172797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:11:18.451 [DEBUG] [Thread-172797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:11:18.451 [DEBUG] [Thread-172797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:11:18.451 [DEBUG] [Thread-172797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:11:18.460 [INFO] [Thread-172797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:11:18.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:11:19.036 [DEBUG] [Thread-172797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:11:19.036 [DEBUG] [Thread-172797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:11:19.037 [DEBUG] [Thread-172797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:11:19.077 [DEBUG] [Thread-172797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:11:19.078 [DEBUG] [Thread-172797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:11:19.081 [DEBUG] [Thread-172797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:11:19.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:11:19.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:11:19.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:11:19.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:11:19.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:11:19.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:11:19.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.591088   +0.00  +13.70   4.09     94  +12.80 3 0 1 3 1   887    0 0.50 -16.76 ----- 5.0 4.1 341.8 7.8 15.0 -0.1 14.9 -0.7 14.6 0.1 14.9 -0.8
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.591088
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:11:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:10:43', tmtdew=0.16313, humidity=98.8644, cloud=0.0, wind=5.472, temperature=13.7877, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:11:10.003', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:11:19.102 [DEBUG] [Thread-172797] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:11:19.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:11:19.182 [DEBUG] [Thread-172800] [transport.py] [_log()] starting thread (client mode): 0xb0fe9c30
2026-04-11T16:11:19.182 [DEBUG] [Thread-172800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:11:19.197 [DEBUG] [Thread-172800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:11:19.198 [INFO] [Thread-172800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] client lang: <none>
2026-04-11T16:11:19.205 [DEBUG] [Thread-172800] [transport.py] [_log()] server lang: <none>
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] kex follows: False
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] Compression: none
2026-04-11T16:11:19.206 [DEBUG] [Thread-172800] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:11:19.263 [DEBUG] [Thread-172800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:11:19.264 [DEBUG] [Thread-172800] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:11:19.264 [DEBUG] [Thread-172800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:11:19.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:11:19.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:11:19.319 [DEBUG] [Thread-172800] [transport.py] [_log()] userauth is OK
2026-04-11T16:11:19.319 [DEBUG] [Thread-172800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:11:19.320 [DEBUG] [Thread-172800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:11:19.320 [DEBUG] [Thread-172800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:11:19.320 [DEBUG] [Thread-172800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:11:19.341 [INFO] [Thread-172800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:11:19.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:11:19.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:11:20.171 [DEBUG] [Thread-172800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:11:20.172 [DEBUG] [Thread-172800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:11:20.220 [DEBUG] [Thread-172800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:11:20.221 [DEBUG] [Thread-172800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:11:20.230 [DEBUG] [Thread-172800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:11:20.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:11:20.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-04-11T16:11:20.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-04-11T16:11:20.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:11:20.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:11:20.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:11:20.269 [DEBUG] [Thread-172800] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:11:25.235 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:25.236 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:28.123 [DEBUG] [Thread-172802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:43.181 [DEBUG] [Thread-172803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:11:50.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:11:50.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:11:50.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-04-11T16:11:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 11, 19), 0.128985, 99.4488, 0.0, 6.65352, 13.4939, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:11:51.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:11:19
2026-04-11T16:11:51.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:11:52.077 [DEBUG] [Thread-172804] [transport.py] [_log()] starting thread (client mode): 0xae5a7910
2026-04-11T16:11:52.077 [DEBUG] [Thread-172804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:11:52.096 [DEBUG] [Thread-172804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:11:52.097 [INFO] [Thread-172804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:11:52.099 [DEBUG] [Thread-172804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] client lang: <none>
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] server lang: <none>
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] kex follows: False
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] Compression: none
2026-04-11T16:11:52.100 [DEBUG] [Thread-172804] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:11:52.117 [DEBUG] [Thread-172804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:11:52.118 [DEBUG] [Thread-172804] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:11:52.118 [DEBUG] [Thread-172804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:11:52.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:11:52.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:11:52.120 [DEBUG] [Thread-172804] [transport.py] [_log()] userauth is OK
2026-04-11T16:11:52.121 [DEBUG] [Thread-172804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:11:52.121 [DEBUG] [Thread-172804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:11:52.121 [DEBUG] [Thread-172804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:11:52.121 [DEBUG] [Thread-172804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:11:52.145 [INFO] [Thread-172804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:11:52.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:11:52.747 [DEBUG] [Thread-172804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:11:52.748 [DEBUG] [Thread-172804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:11:52.748 [DEBUG] [Thread-172804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:11:52.789 [DEBUG] [Thread-172804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:11:52.789 [DEBUG] [Thread-172804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:11:52.792 [DEBUG] [Thread-172804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:11:52.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:11:52.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:11:52.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:11:52.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:11:52.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:11:52.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:11:52.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:11:52.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:11:52.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:11:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.591436   +0.00  +13.70   5.72     94  +12.70 3 0 1 3 1   887    0 0.48 -16.72 ----- 6.8 5.7 333.2 7.2 15.1 -0.2 14.9 -0.7 14.6 0.1 14.9 -0.8
2026-04-11T16:11:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:11:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:11:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.591436
2026-04-11T16:11:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:11:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:11:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:11:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:11:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:11:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:11:19', tmtdew=0.128985, humidity=99.4488, cloud=0.0, wind=6.65352, temperature=13.4939, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:11:40.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:11:52.814 [DEBUG] [Thread-172804] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:11:52.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:11:52.909 [DEBUG] [Thread-172807] [transport.py] [_log()] starting thread (client mode): 0xa79531c0
2026-04-11T16:11:52.909 [DEBUG] [Thread-172807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:11:52.924 [DEBUG] [Thread-172807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:11:52.924 [INFO] [Thread-172807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] client lang: <none>
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] server lang: <none>
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] kex follows: False
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:11:52.932 [DEBUG] [Thread-172807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:11:52.933 [DEBUG] [Thread-172807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:11:52.933 [DEBUG] [Thread-172807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:11:52.933 [DEBUG] [Thread-172807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:11:52.933 [DEBUG] [Thread-172807] [transport.py] [_log()] Compression: none
2026-04-11T16:11:52.933 [DEBUG] [Thread-172807] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:11:52.991 [DEBUG] [Thread-172807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:11:52.992 [DEBUG] [Thread-172807] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:11:52.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:11:52.993 [DEBUG] [Thread-172807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:11:52.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:11:53.047 [DEBUG] [Thread-172807] [transport.py] [_log()] userauth is OK
2026-04-11T16:11:53.048 [DEBUG] [Thread-172807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:11:53.048 [DEBUG] [Thread-172807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:11:53.048 [DEBUG] [Thread-172807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:11:53.048 [DEBUG] [Thread-172807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:11:53.067 [INFO] [Thread-172807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:11: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-04-11T16:11:53.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:11:53.874 [DEBUG] [Thread-172807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:11:53.874 [DEBUG] [Thread-172807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:11:53.922 [DEBUG] [Thread-172807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:11:53.922 [DEBUG] [Thread-172807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:11:53.932 [DEBUG] [Thread-172807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:11:53.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:11:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:11:53.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:11:53.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:11:53.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:11:53.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:11:53.968 [DEBUG] [Thread-172807] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:11:58.217 [DEBUG] [Thread-172809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:13.268 [DEBUG] [Thread-172810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:15.089 [DEBUG] [Thread-172811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:23.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:12:23.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:12:23.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-04-11T16:12:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 11, 54), 0.1734, 98.7981, 0.0, 8.01216, 13.7214, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:12:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:11:54
2026-04-11T16:12:25.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:25.378 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:25.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:12:25.813 [DEBUG] [Thread-172812] [transport.py] [_log()] starting thread (client mode): 0xae5a7df0
2026-04-11T16:12:25.813 [DEBUG] [Thread-172812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:12:25.827 [DEBUG] [Thread-172812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:12:25.828 [INFO] [Thread-172812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] client lang: <none>
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] server lang: <none>
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] kex follows: False
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:12:25.831 [DEBUG] [Thread-172812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:12:25.832 [DEBUG] [Thread-172812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:12:25.832 [DEBUG] [Thread-172812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:12:25.832 [DEBUG] [Thread-172812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:12:25.832 [DEBUG] [Thread-172812] [transport.py] [_log()] Compression: none
2026-04-11T16:12:25.832 [DEBUG] [Thread-172812] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:12:25.849 [DEBUG] [Thread-172812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:12:25.850 [DEBUG] [Thread-172812] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:12:25.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:12:25.850 [DEBUG] [Thread-172812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:12:25.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:12:25.852 [DEBUG] [Thread-172812] [transport.py] [_log()] userauth is OK
2026-04-11T16:12:25.852 [DEBUG] [Thread-172812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:12:25.852 [DEBUG] [Thread-172812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:12:25.853 [DEBUG] [Thread-172812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:12:25.853 [DEBUG] [Thread-172812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:12:25.874 [INFO] [Thread-172812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:12:25.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:12:26.536 [DEBUG] [Thread-172812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:12:26.536 [DEBUG] [Thread-172812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:12:26.536 [DEBUG] [Thread-172812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:12:26.577 [DEBUG] [Thread-172812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:12:26.578 [DEBUG] [Thread-172812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:12:26.581 [DEBUG] [Thread-172812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:12:26.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:12:26.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:12:26.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:12:26.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:12:26.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:12:26.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:12:26.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:12:26.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:12:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:12:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.591783   +0.00  +13.80   7.83     94  +12.90 3 0 1 3 1   887    0 0.50 -16.02 ----- 8.8 7.8 340.4 8.5 15.1 -0.1 14.9 -0.5 14.6 0.2 14.8 -0.4
2026-04-11T16:12:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:12:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:12:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.591783
2026-04-11T16:12:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:12:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:12:26.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:12:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:12:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:12:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:11:54', tmtdew=0.1734, humidity=98.7981, cloud=0.0, wind=8.01216, temperature=13.7214, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:12:10.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:12:26.608 [DEBUG] [Thread-172812] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:12:26.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:12:26.700 [DEBUG] [Thread-172815] [transport.py] [_log()] starting thread (client mode): 0xae5628c0
2026-04-11T16:12:26.700 [DEBUG] [Thread-172815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:12:26.714 [DEBUG] [Thread-172815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:12:26.714 [INFO] [Thread-172815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:12:26.722 [DEBUG] [Thread-172815] [transport.py] [_log()] client lang: <none>
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] server lang: <none>
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] kex follows: False
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] Compression: none
2026-04-11T16:12:26.723 [DEBUG] [Thread-172815] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:12:26.781 [DEBUG] [Thread-172815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:12:26.782 [DEBUG] [Thread-172815] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:12:26.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:12:26.783 [DEBUG] [Thread-172815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:12:26.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:12:26.843 [DEBUG] [Thread-172815] [transport.py] [_log()] userauth is OK
2026-04-11T16:12:26.844 [DEBUG] [Thread-172815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:12:26.844 [DEBUG] [Thread-172815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:12:26.844 [DEBUG] [Thread-172815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:12:26.844 [DEBUG] [Thread-172815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:12:26.862 [INFO] [Thread-172815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:12:26.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:12:26.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:12:27.681 [DEBUG] [Thread-172815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:12:27.681 [DEBUG] [Thread-172815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:12:27.729 [DEBUG] [Thread-172815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:12:27.729 [DEBUG] [Thread-172815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:12:27.738 [DEBUG] [Thread-172815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:12:27.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:12:27.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-04-11T16:12:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:12:27.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:12:27.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:12:27.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:12:27.771 [DEBUG] [Thread-172815] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:12:28.308 [DEBUG] [Thread-172817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:43.363 [DEBUG] [Thread-172818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:12:57.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:12:57.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-04-11T16:12:58.402 [DEBUG] [Thread-172819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:12:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 12, 30), 0.131545, 99.4322, 0.0, 7.97652, 13.4107, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:12:59.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:12:30
2026-04-11T16:12:59.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:12:59.609 [DEBUG] [Thread-172820] [transport.py] [_log()] starting thread (client mode): 0xae5f1030
2026-04-11T16:12:59.609 [DEBUG] [Thread-172820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:12:59.630 [DEBUG] [Thread-172820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:12:59.630 [INFO] [Thread-172820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:12:59.633 [DEBUG] [Thread-172820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] client lang: <none>
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] server lang: <none>
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] kex follows: False
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:12:59.634 [DEBUG] [Thread-172820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:12:59.635 [DEBUG] [Thread-172820] [transport.py] [_log()] Compression: none
2026-04-11T16:12:59.635 [DEBUG] [Thread-172820] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:12:59.652 [DEBUG] [Thread-172820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:12:59.652 [DEBUG] [Thread-172820] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:12:59.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:12:59.653 [DEBUG] [Thread-172820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:12:59.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:12:59.656 [DEBUG] [Thread-172820] [transport.py] [_log()] userauth is OK
2026-04-11T16:12:59.656 [DEBUG] [Thread-172820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:12:59.656 [DEBUG] [Thread-172820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:12:59.656 [DEBUG] [Thread-172820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:12:59.656 [DEBUG] [Thread-172820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:12:59.670 [INFO] [Thread-172820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:12:59.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:13:00.315 [DEBUG] [Thread-172820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:13:00.315 [DEBUG] [Thread-172820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:13:00.316 [DEBUG] [Thread-172820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:13:00.356 [DEBUG] [Thread-172820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:13:00.356 [DEBUG] [Thread-172820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:13:00.360 [DEBUG] [Thread-172820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:13:00.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:13:00.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:13:00.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:13:00.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:13:00.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:13:00.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:13:00.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:13:00.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:13:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:13:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.592130   +0.00  +13.80   8.84     94  +12.90 3 0 1 3 1   887    0 0.51 -15.69 ----- 10.5 8.8 341.2 10.6 15.1 -0.2 14.9 -0.7 14.7 0.0 14.9 -0.3
2026-04-11T16:13:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:13:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:13:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.592130
2026-04-11T16:13:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:13:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:13:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:13:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:13:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:13:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:12:30', tmtdew=0.131545, humidity=99.4322, cloud=0.0, wind=7.97652, temperature=13.4107, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:12:40.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:13:00.391 [DEBUG] [Thread-172820] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:13:00.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:13:00.484 [DEBUG] [Thread-172823] [transport.py] [_log()] starting thread (client mode): 0xa79531c0
2026-04-11T16:13:00.484 [DEBUG] [Thread-172823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:13:00.499 [DEBUG] [Thread-172823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:13:00.499 [INFO] [Thread-172823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:13:00.507 [DEBUG] [Thread-172823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] client lang: <none>
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] server lang: <none>
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] kex follows: False
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] Compression: none
2026-04-11T16:13:00.508 [DEBUG] [Thread-172823] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:13:00.566 [DEBUG] [Thread-172823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:13:00.567 [DEBUG] [Thread-172823] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:13:00.567 [DEBUG] [Thread-172823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:13:00.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:13:00.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:13:00.623 [DEBUG] [Thread-172823] [transport.py] [_log()] userauth is OK
2026-04-11T16:13:00.623 [DEBUG] [Thread-172823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:13:00.623 [DEBUG] [Thread-172823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:13:00.623 [DEBUG] [Thread-172823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:13:00.623 [DEBUG] [Thread-172823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:13:00.643 [INFO] [Thread-172823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:13:00.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:13:00.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:13:01.482 [DEBUG] [Thread-172823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:13:01.483 [DEBUG] [Thread-172823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:13:01.531 [DEBUG] [Thread-172823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:13:01.531 [DEBUG] [Thread-172823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:13:01.541 [DEBUG] [Thread-172823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:13:01.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:13:01.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-04-11T16:13:01.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-04-11T16:13:01.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:13:01.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:13:01.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:13:01.578 [DEBUG] [Thread-172823] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:13:13.441 [DEBUG] [Thread-172825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:13:15.129 [DEBUG] [Thread-172826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:13:25.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:13:25.519 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:13:28.496 [DEBUG] [Thread-172827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:13:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:13:31.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:13:31.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:13:32.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 13, 5), 0.1367, 99.399, 0.0, 8.55864, 13.4107, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:13:32.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:13:05
2026-04-11T16:13:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:13:33.400 [DEBUG] [Thread-172828] [transport.py] [_log()] starting thread (client mode): 0xa7953f70
2026-04-11T16:13:33.400 [DEBUG] [Thread-172828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:13:33.422 [DEBUG] [Thread-172828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:13:33.422 [INFO] [Thread-172828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:13:33.425 [DEBUG] [Thread-172828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:13:33.425 [DEBUG] [Thread-172828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] client lang: <none>
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] server lang: <none>
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] kex follows: False
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:13:33.426 [DEBUG] [Thread-172828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:13:33.427 [DEBUG] [Thread-172828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:13:33.427 [DEBUG] [Thread-172828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:13:33.427 [DEBUG] [Thread-172828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:13:33.427 [DEBUG] [Thread-172828] [transport.py] [_log()] Compression: none
2026-04-11T16:13:33.427 [DEBUG] [Thread-172828] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:13:33.445 [DEBUG] [Thread-172828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:13:33.446 [DEBUG] [Thread-172828] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:13:33.446 [DEBUG] [Thread-172828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:13:33.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:13:33.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:13:33.449 [DEBUG] [Thread-172828] [transport.py] [_log()] userauth is OK
2026-04-11T16:13:33.449 [DEBUG] [Thread-172828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:13:33.449 [DEBUG] [Thread-172828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:13:33.449 [DEBUG] [Thread-172828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:13:33.449 [DEBUG] [Thread-172828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:13:33.473 [INFO] [Thread-172828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:13:33.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:13:34.084 [DEBUG] [Thread-172828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:13:34.084 [DEBUG] [Thread-172828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:13:34.085 [DEBUG] [Thread-172828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:13:34.125 [DEBUG] [Thread-172828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:13:34.125 [DEBUG] [Thread-172828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:13:34.129 [DEBUG] [Thread-172828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:13:34.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:13:34.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:13:34.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:13:34.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:13:34.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:13:34.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:13:34.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:13:34.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:13:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:13:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.592477   +0.00  +13.80  10.43     94  +13.00 3 0 1 3 1   887    0 0.53 -15.32 ----- 9.5 10.4 327.2 14.9 15.1 -0.2 14.9 -0.6 14.7 0.1 14.9 -0.3
2026-04-11T16:13:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:13:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:13:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.592477
2026-04-11T16:13:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:13:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:13:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:13:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:13:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:13:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:13:05', tmtdew=0.1367, humidity=99.399, cloud=0.0, wind=8.55864, temperature=13.4107, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:13:10.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:13:34.157 [DEBUG] [Thread-172828] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:13:34.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:13:34.252 [DEBUG] [Thread-172831] [transport.py] [_log()] starting thread (client mode): 0xae5f1720
2026-04-11T16:13:34.252 [DEBUG] [Thread-172831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:13:34.266 [DEBUG] [Thread-172831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:13:34.266 [INFO] [Thread-172831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] client lang: <none>
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] server lang: <none>
2026-04-11T16:13:34.274 [DEBUG] [Thread-172831] [transport.py] [_log()] kex follows: False
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] Compression: none
2026-04-11T16:13:34.275 [DEBUG] [Thread-172831] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:13:34.335 [DEBUG] [Thread-172831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:13:34.335 [DEBUG] [Thread-172831] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:13:34.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:13:34.337 [DEBUG] [Thread-172831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:13:34.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:13:34.391 [DEBUG] [Thread-172831] [transport.py] [_log()] userauth is OK
2026-04-11T16:13:34.391 [DEBUG] [Thread-172831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:13:34.391 [DEBUG] [Thread-172831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:13:34.391 [DEBUG] [Thread-172831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:13:34.391 [DEBUG] [Thread-172831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:13:34.410 [INFO] [Thread-172831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:13:34.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:13:34.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:13:35.205 [DEBUG] [Thread-172831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:13:35.205 [DEBUG] [Thread-172831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:13:35.253 [DEBUG] [Thread-172831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:13:35.253 [DEBUG] [Thread-172831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:13:35.263 [DEBUG] [Thread-172831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:13:35.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:13:35.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-04-11T16:13:35.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:13:35.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:13:35.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:13:35.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:13:35.300 [DEBUG] [Thread-172831] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:13:43.533 [DEBUG] [Thread-172833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:13:58.587 [DEBUG] [Thread-172834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:05.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:14:05.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:14:05.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-04-11T16:14:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 13, 40), 0.17853, 98.7649, 0.0, 7.5888, 13.6883, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:14:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:13:40
2026-04-11T16:14:06.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:14:07.153 [DEBUG] [Thread-172835] [transport.py] [_log()] starting thread (client mode): 0xae51b4c0
2026-04-11T16:14:07.153 [DEBUG] [Thread-172835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:14:07.173 [DEBUG] [Thread-172835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:14:07.173 [INFO] [Thread-172835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:14:07.177 [DEBUG] [Thread-172835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] client lang: <none>
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] server lang: <none>
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] kex follows: False
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] Compression: none
2026-04-11T16:14:07.178 [DEBUG] [Thread-172835] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:14:07.197 [DEBUG] [Thread-172835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:14:07.197 [DEBUG] [Thread-172835] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:14:07.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:14:07.198 [DEBUG] [Thread-172835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:14:07.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:14:07.201 [DEBUG] [Thread-172835] [transport.py] [_log()] userauth is OK
2026-04-11T16:14:07.201 [DEBUG] [Thread-172835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:14:07.201 [DEBUG] [Thread-172835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:14:07.201 [DEBUG] [Thread-172835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:14:07.201 [DEBUG] [Thread-172835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:14:07.227 [INFO] [Thread-172835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:14:07.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:14:07.845 [DEBUG] [Thread-172835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:14:07.846 [DEBUG] [Thread-172835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:14:07.846 [DEBUG] [Thread-172835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:14:07.888 [DEBUG] [Thread-172835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:14:07.888 [DEBUG] [Thread-172835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:14:07.891 [DEBUG] [Thread-172835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:14:07.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:14:07.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:14:07.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:14:07.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:14:07.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:14:07.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:14:07.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:14:07.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:14:07.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:14:07.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.592824   +0.00  +13.80  12.34     94  +13.00 3 0 1 3 1   887    0 0.53 -14.58 ----- 12.8 12.3 327.4 13.3 15.1 -0.3 14.9 -0.5 14.7 -0.1 15.0 -0.2
2026-04-11T16:14:07.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:14:07.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:14:07.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.592824
2026-04-11T16:14:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:14:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:14:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:14:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:14:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:14:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:13:40', tmtdew=0.17853, humidity=98.7649, cloud=0.0, wind=7.5888, temperature=13.6883, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:13:39.994', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:14:07.912 [DEBUG] [Thread-172835] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:14:08.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:14:08.009 [DEBUG] [Thread-172838] [transport.py] [_log()] starting thread (client mode): 0xa79517e0
2026-04-11T16:14:08.009 [DEBUG] [Thread-172838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:14:08.023 [DEBUG] [Thread-172838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:14:08.023 [INFO] [Thread-172838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] client lang: <none>
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] server lang: <none>
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] kex follows: False
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] Compression: none
2026-04-11T16:14:08.031 [DEBUG] [Thread-172838] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:14:08.089 [DEBUG] [Thread-172838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:14:08.089 [DEBUG] [Thread-172838] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:14:08.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:14:08.090 [DEBUG] [Thread-172838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:14:08.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:14:08.145 [DEBUG] [Thread-172838] [transport.py] [_log()] userauth is OK
2026-04-11T16:14:08.145 [DEBUG] [Thread-172838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:14:08.145 [DEBUG] [Thread-172838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:14:08.145 [DEBUG] [Thread-172838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:14:08.145 [DEBUG] [Thread-172838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:14:08.161 [INFO] [Thread-172838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:14:08.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:14:08.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:14:08.987 [DEBUG] [Thread-172838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:14:08.987 [DEBUG] [Thread-172838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:14:09.035 [DEBUG] [Thread-172838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:14:09.035 [DEBUG] [Thread-172838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:14:09.044 [DEBUG] [Thread-172838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:14:09.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:14:09.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-04-11T16:14:09.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:14:09.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:14:09.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:14:09.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:14:09.077 [DEBUG] [Thread-172838] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:14:13.620 [DEBUG] [Thread-172840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:15.161 [DEBUG] [Thread-172841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:25.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:25.662 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:28.673 [DEBUG] [Thread-172842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:39.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:14:39.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:14:39.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-04-11T16:14:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 14, 16), 0.131585, 99.4322, 0.0, 11.664, 13.4436, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:14:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:14:16
2026-04-11T16:14:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:14:40.989 [DEBUG] [Thread-172843] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T16:14:40.989 [DEBUG] [Thread-172843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:14:41.008 [DEBUG] [Thread-172843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:14:41.008 [INFO] [Thread-172843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:14:41.011 [DEBUG] [Thread-172843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:14:41.011 [DEBUG] [Thread-172843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:14:41.011 [DEBUG] [Thread-172843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:14:41.011 [DEBUG] [Thread-172843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] client lang: <none>
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] server lang: <none>
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] kex follows: False
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] Compression: none
2026-04-11T16:14:41.012 [DEBUG] [Thread-172843] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:14:41.030 [DEBUG] [Thread-172843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:14:41.031 [DEBUG] [Thread-172843] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:14:41.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:14:41.032 [DEBUG] [Thread-172843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:14:41.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:14:41.034 [DEBUG] [Thread-172843] [transport.py] [_log()] userauth is OK
2026-04-11T16:14:41.035 [DEBUG] [Thread-172843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:14:41.035 [DEBUG] [Thread-172843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:14:41.035 [DEBUG] [Thread-172843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:14:41.035 [DEBUG] [Thread-172843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:14:41.068 [INFO] [Thread-172843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:14:41.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:14:41.630 [DEBUG] [Thread-172843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:14:41.631 [DEBUG] [Thread-172843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:14:41.631 [DEBUG] [Thread-172843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:14:41.671 [DEBUG] [Thread-172843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:14:41.671 [DEBUG] [Thread-172843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:14:41.675 [DEBUG] [Thread-172843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:14:41.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:14:41.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:14:41.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:14:41.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:14:41.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:14:41.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:14:41.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:14:41.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:14:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:14:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.593172   +0.00  +13.70  11.67     94  +12.90 3 0 1 3 1   887    0 0.52 -14.30 ----- 9.3 11.7 335.8 16.5 15.0 -0.4 14.9 -0.8 14.7 -0.0 15.0 -0.3
2026-04-11T16:14:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:14:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:14:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.593172
2026-04-11T16:14:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:14:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:14:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:14:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:14:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:14:41.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:14:16', tmtdew=0.131585, humidity=99.4322, cloud=0.0, wind=11.664, temperature=13.4436, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:14:10.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:14:41.703 [DEBUG] [Thread-172843] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:14:41.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:14:41.798 [DEBUG] [Thread-172846] [transport.py] [_log()] starting thread (client mode): 0xae5198d0
2026-04-11T16:14:41.798 [DEBUG] [Thread-172846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:14:41.812 [DEBUG] [Thread-172846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:14:41.812 [INFO] [Thread-172846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] client lang: <none>
2026-04-11T16:14:41.820 [DEBUG] [Thread-172846] [transport.py] [_log()] server lang: <none>
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] kex follows: False
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] Compression: none
2026-04-11T16:14:41.821 [DEBUG] [Thread-172846] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:14:41.878 [DEBUG] [Thread-172846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:14:41.878 [DEBUG] [Thread-172846] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:14:41.879 [DEBUG] [Thread-172846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:14:41.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:14:41.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:14:41.934 [DEBUG] [Thread-172846] [transport.py] [_log()] userauth is OK
2026-04-11T16:14:41.934 [DEBUG] [Thread-172846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:14:41.934 [DEBUG] [Thread-172846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:14:41.934 [DEBUG] [Thread-172846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:14:41.935 [DEBUG] [Thread-172846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:14:41.953 [INFO] [Thread-172846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:14:41.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:14:41.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:14:42.773 [DEBUG] [Thread-172846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:14:42.773 [DEBUG] [Thread-172846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:14:42.821 [DEBUG] [Thread-172846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:14:42.821 [DEBUG] [Thread-172846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:14:42.830 [DEBUG] [Thread-172846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:14:42.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:14:42.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-04-11T16:14:42.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-04-11T16:14:42.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:14:42.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:14:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:14:42.869 [DEBUG] [Thread-172846] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:14:43.712 [DEBUG] [Thread-172848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:14:58.770 [DEBUG] [Thread-172849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:12.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:15:12.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:15:12.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-04-11T16:15:13.808 [DEBUG] [Thread-172850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:14.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 14, 51), 0.15805, 98.8976, 0.0, 14.8212, 13.9867, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:15:14.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:14:51
2026-04-11T16:15:14.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:15:14.724 [DEBUG] [Thread-172851] [transport.py] [_log()] starting thread (client mode): 0xae518b80
2026-04-11T16:15:14.724 [DEBUG] [Thread-172851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:15:14.744 [DEBUG] [Thread-172851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:15:14.745 [INFO] [Thread-172851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:15:14.747 [DEBUG] [Thread-172851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:15:14.747 [DEBUG] [Thread-172851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:15:14.747 [DEBUG] [Thread-172851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] client lang: <none>
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] server lang: <none>
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] kex follows: False
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:15:14.748 [DEBUG] [Thread-172851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:15:14.749 [DEBUG] [Thread-172851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:15:14.749 [DEBUG] [Thread-172851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:15:14.749 [DEBUG] [Thread-172851] [transport.py] [_log()] Compression: none
2026-04-11T16:15:14.749 [DEBUG] [Thread-172851] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:15:14.767 [DEBUG] [Thread-172851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:15:14.768 [DEBUG] [Thread-172851] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:15:14.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:15:14.769 [DEBUG] [Thread-172851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:15:14.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:15:14.771 [DEBUG] [Thread-172851] [transport.py] [_log()] userauth is OK
2026-04-11T16:15:14.771 [DEBUG] [Thread-172851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:15:14.771 [DEBUG] [Thread-172851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:15:14.771 [DEBUG] [Thread-172851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:15:14.772 [DEBUG] [Thread-172851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:15:14.808 [INFO] [Thread-172851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:15:14.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:15:15.194 [DEBUG] [Thread-172853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:15.488 [DEBUG] [Thread-172851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:15:15.488 [DEBUG] [Thread-172851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:15:15.489 [DEBUG] [Thread-172851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:15:15.529 [DEBUG] [Thread-172851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:15:15.529 [DEBUG] [Thread-172851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:15:15.533 [DEBUG] [Thread-172851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:15:15.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:15:15.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:15:15.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:15:15.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:15:15.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:15:15.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:15:15.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:15:15.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:15:15.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:15:15.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.593519   +0.00  +13.60  12.02     94  +12.80 3 0 1 3 1   887    0 0.53 -14.01 ----- 19.5 12.0 340.7 19.9 15.0 -0.6 14.9 -0.7 14.6 -0.4 14.9 -0.2
2026-04-11T16:15:15.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:15:15.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:15:15.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.593519
2026-04-11T16:15:15.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:15:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:15:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:15:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:15:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:15:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:14:51', tmtdew=0.15805, humidity=98.8976, cloud=0.0, wind=14.8212, temperature=13.9867, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:14:40.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:15:15.561 [DEBUG] [Thread-172851] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:15:15.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:15:15.660 [DEBUG] [Thread-172855] [transport.py] [_log()] starting thread (client mode): 0xae5f1030
2026-04-11T16:15:15.660 [DEBUG] [Thread-172855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:15:15.676 [DEBUG] [Thread-172855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:15:15.676 [INFO] [Thread-172855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:15:15.683 [DEBUG] [Thread-172855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:15.684 [DEBUG] [Thread-172855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] client lang: <none>
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] server lang: <none>
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] kex follows: False
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:15:15.685 [DEBUG] [Thread-172855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:15:15.686 [DEBUG] [Thread-172855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:15:15.686 [DEBUG] [Thread-172855] [transport.py] [_log()] Compression: none
2026-04-11T16:15:15.686 [DEBUG] [Thread-172855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:15:15.743 [DEBUG] [Thread-172855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:15:15.743 [DEBUG] [Thread-172855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:15:15.744 [DEBUG] [Thread-172855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:15:15.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:15:15.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:15:15.802 [DEBUG] [Thread-172855] [transport.py] [_log()] userauth is OK
2026-04-11T16:15:15.802 [DEBUG] [Thread-172855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:15:15.802 [DEBUG] [Thread-172855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:15:15.803 [DEBUG] [Thread-172855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:15:15.803 [DEBUG] [Thread-172855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:15:15.827 [INFO] [Thread-172855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:15:15.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:15:15.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:15:16.646 [DEBUG] [Thread-172855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:15:16.647 [DEBUG] [Thread-172855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:15:16.695 [DEBUG] [Thread-172855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:15:16.695 [DEBUG] [Thread-172855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:15:16.704 [DEBUG] [Thread-172855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:15:16.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:15:16.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-04-11T16:15:16.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-04-11T16:15:16.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:15:16.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:15:16.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:15:16.741 [DEBUG] [Thread-172855] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:15:25.802 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:25.803 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:28.844 [DEBUG] [Thread-172857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:43.899 [DEBUG] [Thread-172858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:15:46.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:15:46.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:15:46.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-04-11T16:15:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 15, 27), 0.1342, 99.4156, 0.0, 15.6866, 13.6099, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:15:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:15:27
2026-04-11T16:15:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:15:48.614 [DEBUG] [Thread-172859] [transport.py] [_log()] starting thread (client mode): 0xb0fea9e0
2026-04-11T16:15:48.614 [DEBUG] [Thread-172859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:15:48.635 [DEBUG] [Thread-172859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:15:48.636 [INFO] [Thread-172859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:15:48.639 [DEBUG] [Thread-172859] [transport.py] [_log()] client lang: <none>
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] server lang: <none>
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] kex follows: False
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] Compression: none
2026-04-11T16:15:48.640 [DEBUG] [Thread-172859] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:15:48.659 [DEBUG] [Thread-172859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:15:48.660 [DEBUG] [Thread-172859] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:15:48.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:15:48.662 [DEBUG] [Thread-172859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:15:48.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:15:48.664 [DEBUG] [Thread-172859] [transport.py] [_log()] userauth is OK
2026-04-11T16:15:48.664 [DEBUG] [Thread-172859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:15:48.664 [DEBUG] [Thread-172859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:15:48.664 [DEBUG] [Thread-172859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:15:48.665 [DEBUG] [Thread-172859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:15:48.700 [INFO] [Thread-172859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:15:48.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:15:49.334 [DEBUG] [Thread-172859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:15:49.334 [DEBUG] [Thread-172859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:15:49.334 [DEBUG] [Thread-172859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:15:49.375 [DEBUG] [Thread-172859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:15:49.375 [DEBUG] [Thread-172859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:15:49.379 [DEBUG] [Thread-172859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:15:49.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:15:49.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:15:49.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:15:49.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:15:49.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:15:49.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:15:49.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:15:49.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:15:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:15:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.593866   +0.00  +13.50  20.90     94  +12.60 3 0 1 3 1   887    0 0.57 -13.19 ----- 19.9 20.9 312.6 24.4 14.9 -0.7 14.8 -0.6 14.5 -0.9 14.8 -0.3
2026-04-11T16:15:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:15:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:15:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.593866
2026-04-11T16:15:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:15:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:15:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:15:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:15:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:15:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:15:27', tmtdew=0.1342, humidity=99.4156, cloud=0.0, wind=15.6866, temperature=13.6099, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:15:10.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:15:49.404 [DEBUG] [Thread-172859] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:15:49.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:15:49.497 [DEBUG] [Thread-172862] [transport.py] [_log()] starting thread (client mode): 0xae518400
2026-04-11T16:15:49.497 [DEBUG] [Thread-172862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:15:49.512 [DEBUG] [Thread-172862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:15:49.513 [INFO] [Thread-172862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:15:49.520 [DEBUG] [Thread-172862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] client lang: <none>
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] server lang: <none>
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] kex follows: False
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] Compression: none
2026-04-11T16:15:49.521 [DEBUG] [Thread-172862] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:15:49.581 [DEBUG] [Thread-172862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:15:49.582 [DEBUG] [Thread-172862] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:15:49.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:15:49.583 [DEBUG] [Thread-172862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:15:49.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:15:49.638 [DEBUG] [Thread-172862] [transport.py] [_log()] userauth is OK
2026-04-11T16:15:49.638 [DEBUG] [Thread-172862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:15:49.638 [DEBUG] [Thread-172862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:15:49.638 [DEBUG] [Thread-172862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:15:49.638 [DEBUG] [Thread-172862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:15:49.666 [INFO] [Thread-172862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:15:49.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:15:49.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:15:50.579 [DEBUG] [Thread-172862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:15:50.579 [DEBUG] [Thread-172862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:15:50.627 [DEBUG] [Thread-172862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:15:50.627 [DEBUG] [Thread-172862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:15:50.637 [DEBUG] [Thread-172862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:15:50.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:15:50.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-04-11T16:15:50.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-04-11T16:15:50.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:15:50.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:15:50.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:15:50.673 [DEBUG] [Thread-172862] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:15:58.936 [DEBUG] [Thread-172864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:13.990 [DEBUG] [Thread-172865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:15.238 [DEBUG] [Thread-172866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:16:20.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:16:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:16:21.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 16, 2), 0.13935, 99.3825, 0.0, 16.5863, 13.5768, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:16:21.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:16:02
2026-04-11T16:16:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:16:22.456 [DEBUG] [Thread-172867] [transport.py] [_log()] starting thread (client mode): 0xae508910
2026-04-11T16:16:22.456 [DEBUG] [Thread-172867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:16:22.476 [DEBUG] [Thread-172867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:16:22.476 [INFO] [Thread-172867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] client lang: <none>
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] server lang: <none>
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] kex follows: False
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:16:22.480 [DEBUG] [Thread-172867] [transport.py] [_log()] Compression: none
2026-04-11T16:16:22.481 [DEBUG] [Thread-172867] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:16:22.499 [DEBUG] [Thread-172867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:16:22.499 [DEBUG] [Thread-172867] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:16:22.500 [DEBUG] [Thread-172867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:16:22.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:16:22.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:16:22.502 [DEBUG] [Thread-172867] [transport.py] [_log()] userauth is OK
2026-04-11T16:16:22.502 [DEBUG] [Thread-172867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:16:22.502 [DEBUG] [Thread-172867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:16:22.502 [DEBUG] [Thread-172867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:16:22.503 [DEBUG] [Thread-172867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:16:22.536 [INFO] [Thread-172867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:16:22.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:16:23.196 [DEBUG] [Thread-172867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:16:23.196 [DEBUG] [Thread-172867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:16:23.196 [DEBUG] [Thread-172867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:16:23.237 [DEBUG] [Thread-172867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:16:23.237 [DEBUG] [Thread-172867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:16:23.241 [DEBUG] [Thread-172867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:16:23.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:16:23.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:16:23.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:16:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:16:23.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:16:23.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:16:23.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:16:23.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:16:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:16:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.594561   +0.00  +13.30  19.42     94  +12.50 3 0 1 3 1   887    0 0.54 -13.34 ----- 21.3 19.4 313.6 22.4 14.8 -0.9 14.7 -1.1 14.3 -0.9 14.7 -0.6
2026-04-11T16:16:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:16:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:16:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.594561
2026-04-11T16:16:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:16:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:16:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:16:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:16:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:16:23.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:16:02', tmtdew=0.13935, humidity=99.3825, cloud=0.0, wind=16.5863, temperature=13.5768, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:16:10.070', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:16:23.268 [DEBUG] [Thread-172867] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:16:23.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:16:23.363 [DEBUG] [Thread-172870] [transport.py] [_log()] starting thread (client mode): 0xae50b130
2026-04-11T16:16:23.363 [DEBUG] [Thread-172870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:16:23.378 [DEBUG] [Thread-172870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:16:23.378 [INFO] [Thread-172870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:16:23.386 [DEBUG] [Thread-172870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:16:23.386 [DEBUG] [Thread-172870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:16:23.386 [DEBUG] [Thread-172870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:16:23.386 [DEBUG] [Thread-172870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:23.386 [DEBUG] [Thread-172870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] client lang: <none>
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] server lang: <none>
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] kex follows: False
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:16:23.387 [DEBUG] [Thread-172870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:16:23.388 [DEBUG] [Thread-172870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:16:23.388 [DEBUG] [Thread-172870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:16:23.388 [DEBUG] [Thread-172870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:16:23.388 [DEBUG] [Thread-172870] [transport.py] [_log()] Compression: none
2026-04-11T16:16:23.388 [DEBUG] [Thread-172870] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:16:23.446 [DEBUG] [Thread-172870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:16:23.446 [DEBUG] [Thread-172870] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:16:23.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:16:23.448 [DEBUG] [Thread-172870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:16:23.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:16:23.506 [DEBUG] [Thread-172870] [transport.py] [_log()] userauth is OK
2026-04-11T16:16:23.506 [DEBUG] [Thread-172870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:16:23.506 [DEBUG] [Thread-172870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:16:23.506 [DEBUG] [Thread-172870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:16:23.506 [DEBUG] [Thread-172870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:16:23.525 [INFO] [Thread-172870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:16:23.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:16:23.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:16:24.340 [DEBUG] [Thread-172870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:16:24.340 [DEBUG] [Thread-172870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:16:24.390 [DEBUG] [Thread-172870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:16:24.390 [DEBUG] [Thread-172870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:16:24.401 [DEBUG] [Thread-172870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:16:24.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:16:24.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-04-11T16:16:24.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-04-11T16:16:24.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:16:24.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:16:24.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:16:24.443 [DEBUG] [Thread-172870] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:16:25.943 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:25.944 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:29.025 [DEBUG] [Thread-172872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:44.086 [DEBUG] [Thread-172873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:16:54.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:16:54.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:16:54.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:16:55.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 16, 39), 0.1888, 98.6986, 0.0, 17.1144, 13.622, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:16:55.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:16:39
2026-04-11T16:16:56.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:16:56.241 [DEBUG] [Thread-172874] [transport.py] [_log()] starting thread (client mode): 0xae5345e0
2026-04-11T16:16:56.241 [DEBUG] [Thread-172874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:16:56.266 [DEBUG] [Thread-172874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:16:56.266 [INFO] [Thread-172874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:16:56.268 [DEBUG] [Thread-172874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:16:56.268 [DEBUG] [Thread-172874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:16:56.268 [DEBUG] [Thread-172874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:16:56.268 [DEBUG] [Thread-172874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] client lang: <none>
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] server lang: <none>
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] kex follows: False
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] Compression: none
2026-04-11T16:16:56.269 [DEBUG] [Thread-172874] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:16:56.282 [DEBUG] [Thread-172874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:16:56.282 [DEBUG] [Thread-172874] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:16:56.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:16:56.283 [DEBUG] [Thread-172874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:16:56.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:16:56.285 [DEBUG] [Thread-172874] [transport.py] [_log()] userauth is OK
2026-04-11T16:16:56.285 [DEBUG] [Thread-172874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:16:56.285 [DEBUG] [Thread-172874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:16:56.285 [DEBUG] [Thread-172874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:16:56.285 [DEBUG] [Thread-172874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:16:56.321 [INFO] [Thread-172874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:16:56.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:16:56.956 [DEBUG] [Thread-172874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:16:56.956 [DEBUG] [Thread-172874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:16:56.957 [DEBUG] [Thread-172874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:16:56.997 [DEBUG] [Thread-172874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:16:56.997 [DEBUG] [Thread-172874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:16:57.001 [DEBUG] [Thread-172874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:16:57.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:16:57.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:16:57.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:16:57.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:16:57.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:16:57.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:16:57.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:16:57.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:16:57.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:16:57.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.594908   +0.00  +13.20  16.98     95  +12.50 3 0 1 3 1   887    0 0.55 -13.35 ----- 19.8 17.0 315.0 22.6 14.7 -0.7 14.6 -0.9 14.3 -0.6 14.6 -0.5
2026-04-11T16:16:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:16:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:16:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.594908
2026-04-11T16:16:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:16:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:16:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:16:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:16:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:16:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:16:39', tmtdew=0.1888, humidity=98.6986, cloud=0.0, wind=17.1144, temperature=13.622, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:16:40.051', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:16:57.027 [DEBUG] [Thread-172874] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:16:57.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:16:57.120 [DEBUG] [Thread-172877] [transport.py] [_log()] starting thread (client mode): 0xb0fe8d30
2026-04-11T16:16:57.120 [DEBUG] [Thread-172877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:16:57.135 [DEBUG] [Thread-172877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:16:57.135 [INFO] [Thread-172877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] client lang: <none>
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] server lang: <none>
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] kex follows: False
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:16:57.143 [DEBUG] [Thread-172877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:16:57.144 [DEBUG] [Thread-172877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:16:57.144 [DEBUG] [Thread-172877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:16:57.144 [DEBUG] [Thread-172877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:16:57.144 [DEBUG] [Thread-172877] [transport.py] [_log()] Compression: none
2026-04-11T16:16:57.144 [DEBUG] [Thread-172877] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:16:57.201 [DEBUG] [Thread-172877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:16:57.202 [DEBUG] [Thread-172877] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:16:57.202 [DEBUG] [Thread-172877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:16:57.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:16:57.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:16:57.261 [DEBUG] [Thread-172877] [transport.py] [_log()] userauth is OK
2026-04-11T16:16:57.262 [DEBUG] [Thread-172877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:16:57.262 [DEBUG] [Thread-172877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:16:57.262 [DEBUG] [Thread-172877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:16:57.262 [DEBUG] [Thread-172877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:16:57.281 [INFO] [Thread-172877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:16:57.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:16:57.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:16:58.107 [DEBUG] [Thread-172877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:16:58.107 [DEBUG] [Thread-172877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:16:58.156 [DEBUG] [Thread-172877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:16:58.157 [DEBUG] [Thread-172877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:16:58.165 [DEBUG] [Thread-172877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:16:58.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:16:58.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-04-11T16:16:58.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-04-11T16:16:58.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:16:58.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:16:58.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:16:58.199 [DEBUG] [Thread-172877] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:16:59.122 [DEBUG] [Thread-172879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:14.183 [DEBUG] [Thread-172880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:15.279 [DEBUG] [Thread-172881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:26.085 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:26.086 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:28.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:17:28.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:17:28.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:17:29.223 [DEBUG] [Thread-172882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 17, 14), 0.14182, 99.3659, 0.0, 17.028, 13.261, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:17:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:17:14
2026-04-11T16:17:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:17:30.142 [DEBUG] [Thread-172883] [transport.py] [_log()] starting thread (client mode): 0xae508340
2026-04-11T16:17:30.142 [DEBUG] [Thread-172883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:17:30.163 [DEBUG] [Thread-172883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:17:30.164 [INFO] [Thread-172883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] client lang: <none>
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] server lang: <none>
2026-04-11T16:17:30.167 [DEBUG] [Thread-172883] [transport.py] [_log()] kex follows: False
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] Compression: none
2026-04-11T16:17:30.168 [DEBUG] [Thread-172883] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:17:30.187 [DEBUG] [Thread-172883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:17:30.188 [DEBUG] [Thread-172883] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:17:30.188 [DEBUG] [Thread-172883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:17:30.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:17:30.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:17:30.190 [DEBUG] [Thread-172883] [transport.py] [_log()] userauth is OK
2026-04-11T16:17:30.190 [DEBUG] [Thread-172883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:17:30.191 [DEBUG] [Thread-172883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:17:30.191 [DEBUG] [Thread-172883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:17:30.191 [DEBUG] [Thread-172883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:17:30.214 [INFO] [Thread-172883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:17:30.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:17:30.838 [DEBUG] [Thread-172883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:17:30.838 [DEBUG] [Thread-172883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:17:30.838 [DEBUG] [Thread-172883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:17:30.879 [DEBUG] [Thread-172883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:17:30.879 [DEBUG] [Thread-172883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:17:30.883 [DEBUG] [Thread-172883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:17:30.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:17:30.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:17:30.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:17:30.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:17:30.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:17:30.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:17:30.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:17:30.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:17:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:17:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.595255   +0.00  +13.20  14.49     95  +12.50 3 0 1 3 1   887    0 0.51 -14.46 ----- 13.8 14.5 313.6 20.3 14.7 -0.5 14.6 -0.8 14.2 -0.6 14.5 -0.4
2026-04-11T16:17:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:17:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:17:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.595255
2026-04-11T16:17:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:17:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:17:30.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:17:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:17:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:17:30.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:17:14', tmtdew=0.14182, humidity=99.3659, cloud=0.0, wind=17.028, temperature=13.261, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:17:10.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:17:30.905 [DEBUG] [Thread-172883] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:17:30.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:17:31.001 [DEBUG] [Thread-172886] [transport.py] [_log()] starting thread (client mode): 0xae534cd0
2026-04-11T16:17:31.001 [DEBUG] [Thread-172886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:17:31.015 [DEBUG] [Thread-172886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:17:31.015 [INFO] [Thread-172886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] client lang: <none>
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] server lang: <none>
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] kex follows: False
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:17:31.023 [DEBUG] [Thread-172886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:17:31.024 [DEBUG] [Thread-172886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:17:31.024 [DEBUG] [Thread-172886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:17:31.024 [DEBUG] [Thread-172886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:17:31.024 [DEBUG] [Thread-172886] [transport.py] [_log()] Compression: none
2026-04-11T16:17:31.024 [DEBUG] [Thread-172886] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:17:31.080 [DEBUG] [Thread-172886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:17:31.081 [DEBUG] [Thread-172886] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:17:31.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:17:31.082 [DEBUG] [Thread-172886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:17:31.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:17:31.137 [DEBUG] [Thread-172886] [transport.py] [_log()] userauth is OK
2026-04-11T16:17:31.137 [DEBUG] [Thread-172886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:17:31.137 [DEBUG] [Thread-172886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:17:31.137 [DEBUG] [Thread-172886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:17:31.137 [DEBUG] [Thread-172886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:17:31.159 [INFO] [Thread-172886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:17:31.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:17:31.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:17:31.973 [DEBUG] [Thread-172886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:17:31.974 [DEBUG] [Thread-172886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:17:32.021 [DEBUG] [Thread-172886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:17:32.022 [DEBUG] [Thread-172886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:17:32.030 [DEBUG] [Thread-172886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:17:32.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:17:32.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-04-11T16:17:32.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-04-11T16:17:32.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:17:32.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:17:32.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:17:32.064 [DEBUG] [Thread-172886] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:17:44.260 [DEBUG] [Thread-172888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:17:59.313 [DEBUG] [Thread-172889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:02.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:18:02.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:18:02.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-04-11T16:18:03.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 17, 50), 0.18875, 98.6986, 0.0, 14.7859, 13.5557, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:18:03.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:17:50
2026-04-11T16:18:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:18:03.931 [DEBUG] [Thread-172890] [transport.py] [_log()] starting thread (client mode): 0xae563460
2026-04-11T16:18:03.931 [DEBUG] [Thread-172890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:18:03.951 [DEBUG] [Thread-172890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:18:03.951 [INFO] [Thread-172890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:18:03.952 [DEBUG] [Thread-172890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] client lang: <none>
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] server lang: <none>
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] kex follows: False
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] Compression: none
2026-04-11T16:18:03.953 [DEBUG] [Thread-172890] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:18:03.963 [DEBUG] [Thread-172890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:18:03.963 [DEBUG] [Thread-172890] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:18:03.964 [DEBUG] [Thread-172890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:18:03.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:18:03.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:18:03.965 [DEBUG] [Thread-172890] [transport.py] [_log()] userauth is OK
2026-04-11T16:18:03.965 [DEBUG] [Thread-172890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:18:03.966 [DEBUG] [Thread-172890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:18:03.966 [DEBUG] [Thread-172890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:18:03.966 [DEBUG] [Thread-172890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:18:03.989 [INFO] [Thread-172890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:18:03.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:18:04.609 [DEBUG] [Thread-172890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:18:04.609 [DEBUG] [Thread-172890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:18:04.609 [DEBUG] [Thread-172890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:18:04.650 [DEBUG] [Thread-172890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:18:04.650 [DEBUG] [Thread-172890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:18:04.654 [DEBUG] [Thread-172890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:18:04.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:18:04.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:18:04.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:18:04.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:18:04.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:18:04.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:18:04.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:18:04.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:18:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:18:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.595602   +0.00  +13.30  13.10     95  +12.60 3 0 1 3 1   887    0 0.51 -14.36 ----- 12.1 13.1 317.4 15.7 14.7 -0.5 14.6 -0.5 14.2 -0.6 14.5 -0.2
2026-04-11T16:18:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:18:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:18:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.595602
2026-04-11T16:18:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:18:04.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:18:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:18:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:18:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:18:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:17:50', tmtdew=0.18875, humidity=98.6986, cloud=0.0, wind=14.7859, temperature=13.5557, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:17:40.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:18:04.681 [DEBUG] [Thread-172890] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:18:04.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:18:04.773 [DEBUG] [Thread-172893] [transport.py] [_log()] starting thread (client mode): 0xae563880
2026-04-11T16:18:04.773 [DEBUG] [Thread-172893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:18:04.792 [DEBUG] [Thread-172893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:18:04.792 [INFO] [Thread-172893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:18:04.801 [DEBUG] [Thread-172893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:18:04.801 [DEBUG] [Thread-172893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:18:04.801 [DEBUG] [Thread-172893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:18:04.801 [DEBUG] [Thread-172893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:04.801 [DEBUG] [Thread-172893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:04.801 [DEBUG] [Thread-172893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] client lang: <none>
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] server lang: <none>
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] kex follows: False
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] Compression: none
2026-04-11T16:18:04.802 [DEBUG] [Thread-172893] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:18:04.857 [DEBUG] [Thread-172893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:18:04.857 [DEBUG] [Thread-172893] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:18:04.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:18:04.858 [DEBUG] [Thread-172893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:18:04.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:18:04.913 [DEBUG] [Thread-172893] [transport.py] [_log()] userauth is OK
2026-04-11T16:18:04.913 [DEBUG] [Thread-172893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:18:04.913 [DEBUG] [Thread-172893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:18:04.913 [DEBUG] [Thread-172893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:18:04.913 [DEBUG] [Thread-172893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:18:04.932 [INFO] [Thread-172893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:18:04.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:18:04.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:18:05.753 [DEBUG] [Thread-172893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:18:05.753 [DEBUG] [Thread-172893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:18:05.802 [DEBUG] [Thread-172893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:18:05.802 [DEBUG] [Thread-172893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:18:05.811 [DEBUG] [Thread-172893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:18:05.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:18:05.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:18:05.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-04-11T16:18:05.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:18:05.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:18:05.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:18:05.851 [DEBUG] [Thread-172893] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:18:14.353 [DEBUG] [Thread-172895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:15.314 [DEBUG] [Thread-172896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:26.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:26.227 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:29.410 [DEBUG] [Thread-172897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:35.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:18:35.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:18:35.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:18:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 18, 25), 0.13663, 99.3995, 0.0, 14.4695, 13.311, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:18:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:18:25
2026-04-11T16:18:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:18:37.673 [DEBUG] [Thread-172898] [transport.py] [_log()] starting thread (client mode): 0xae518130
2026-04-11T16:18:37.673 [DEBUG] [Thread-172898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:18:37.693 [DEBUG] [Thread-172898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:18:37.693 [INFO] [Thread-172898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] client lang: <none>
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] server lang: <none>
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] kex follows: False
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] Compression: none
2026-04-11T16:18:37.696 [DEBUG] [Thread-172898] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:18:37.715 [DEBUG] [Thread-172898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:18:37.715 [DEBUG] [Thread-172898] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:18:37.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:18:37.716 [DEBUG] [Thread-172898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:18:37.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:18:37.717 [DEBUG] [Thread-172898] [transport.py] [_log()] userauth is OK
2026-04-11T16:18:37.717 [DEBUG] [Thread-172898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:18:37.717 [DEBUG] [Thread-172898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:18:37.717 [DEBUG] [Thread-172898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:18:37.717 [DEBUG] [Thread-172898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:18:37.736 [INFO] [Thread-172898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:18:37.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:18:38.385 [DEBUG] [Thread-172898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:18:38.386 [DEBUG] [Thread-172898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:18:38.387 [DEBUG] [Thread-172898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:18:38.426 [DEBUG] [Thread-172898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:18:38.426 [DEBUG] [Thread-172898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:18:38.430 [DEBUG] [Thread-172898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:18:38.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:18:38.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:18:38.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:18:38.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:18:38.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:18:38.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:18:38.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:18:38.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:18:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:18:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.595949   +0.00  +13.30  12.20     95  +12.60 3 0 1 3 1   887    0 0.47 -15.64 ----- 11.6 12.2 306.0 15.3 14.6 -0.4 14.6 -0.5 14.2 -0.3 14.5 -0.2
2026-04-11T16:18:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:18:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:18:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.595949
2026-04-11T16:18:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:18:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:18:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:18:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:18:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:18:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:18:25', tmtdew=0.13663, humidity=99.3995, cloud=0.0, wind=14.4695, temperature=13.311, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:18:09.994', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:18:38.457 [DEBUG] [Thread-172898] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:18:38.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:18:38.551 [DEBUG] [Thread-172901] [transport.py] [_log()] starting thread (client mode): 0xae5092d0
2026-04-11T16:18:38.551 [DEBUG] [Thread-172901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:18:38.566 [DEBUG] [Thread-172901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:18:38.566 [INFO] [Thread-172901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:18:38.573 [DEBUG] [Thread-172901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] client lang: <none>
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] server lang: <none>
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] kex follows: False
2026-04-11T16:18:38.574 [DEBUG] [Thread-172901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:18:38.575 [DEBUG] [Thread-172901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:18:38.575 [DEBUG] [Thread-172901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:18:38.575 [DEBUG] [Thread-172901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:18:38.575 [DEBUG] [Thread-172901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:18:38.575 [DEBUG] [Thread-172901] [transport.py] [_log()] Compression: none
2026-04-11T16:18:38.575 [DEBUG] [Thread-172901] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:18:38.632 [DEBUG] [Thread-172901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:18:38.633 [DEBUG] [Thread-172901] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:18:38.633 [DEBUG] [Thread-172901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:18:38.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:18:38.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:18:38.688 [DEBUG] [Thread-172901] [transport.py] [_log()] userauth is OK
2026-04-11T16:18:38.689 [DEBUG] [Thread-172901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:18:38.689 [DEBUG] [Thread-172901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:18:38.689 [DEBUG] [Thread-172901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:18:38.689 [DEBUG] [Thread-172901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:18:38.708 [INFO] [Thread-172901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:18:38.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:18:38.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:18:39.539 [DEBUG] [Thread-172901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:18:39.540 [DEBUG] [Thread-172901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:18:39.587 [DEBUG] [Thread-172901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:18:39.587 [DEBUG] [Thread-172901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:18:39.596 [DEBUG] [Thread-172901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:18:39.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:18:39.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:18:39.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-04-11T16:18:39.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:18:39.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:18:39.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:18:39.633 [DEBUG] [Thread-172901] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:18:44.447 [DEBUG] [Thread-172903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:18:59.508 [DEBUG] [Thread-172904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:09.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:19:09.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:19:09.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-04-11T16:19:10.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 19, 1), 0.094345, 99.3497, 0.0, 12.9877, 13.1778, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:19:10.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:19:01
2026-04-11T16:19:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:19:11.533 [DEBUG] [Thread-172905] [transport.py] [_log()] starting thread (client mode): 0xb0feabc0
2026-04-11T16:19:11.533 [DEBUG] [Thread-172905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:19:11.554 [DEBUG] [Thread-172905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:19:11.554 [INFO] [Thread-172905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:11.556 [DEBUG] [Thread-172905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] client lang: <none>
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] server lang: <none>
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] kex follows: False
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] Compression: none
2026-04-11T16:19:11.557 [DEBUG] [Thread-172905] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:19:11.575 [DEBUG] [Thread-172905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:19:11.575 [DEBUG] [Thread-172905] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:19:11.576 [DEBUG] [Thread-172905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:19:11.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:19:11.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:19:11.578 [DEBUG] [Thread-172905] [transport.py] [_log()] userauth is OK
2026-04-11T16:19:11.579 [DEBUG] [Thread-172905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:19:11.579 [DEBUG] [Thread-172905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:19:11.579 [DEBUG] [Thread-172905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:19:11.579 [DEBUG] [Thread-172905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:19:11.602 [INFO] [Thread-172905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:19:11.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:19:12.261 [DEBUG] [Thread-172905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:19:12.261 [DEBUG] [Thread-172905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:19:12.262 [DEBUG] [Thread-172905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:19:12.302 [DEBUG] [Thread-172905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:19:12.302 [DEBUG] [Thread-172905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:19:12.306 [DEBUG] [Thread-172905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:19:12.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:19:12.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:19:12.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:19:12.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:19:12.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:19:12.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:19:12.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:19:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:19:12.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:19:12.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.596297   +0.00  +13.40   9.17     95  +12.70 3 0 1 3 1   887    0 0.44 -15.25 ----- 9.6 9.2 322.6 13.8 14.7 -0.3 14.6 -0.4 14.2 -0.2 14.5 -0.2
2026-04-11T16:19:12.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:19:12.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:19:12.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.596297
2026-04-11T16:19:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:19:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:19:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:19:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:19:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:19:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:19:01', tmtdew=0.094345, humidity=99.3497, cloud=0.0, wind=12.9877, temperature=13.1778, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:18:40.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:19:12.334 [DEBUG] [Thread-172905] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:19:12.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:19:12.430 [DEBUG] [Thread-172908] [transport.py] [_log()] starting thread (client mode): 0xae535450
2026-04-11T16:19:12.430 [DEBUG] [Thread-172908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:19:12.445 [DEBUG] [Thread-172908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:19:12.445 [INFO] [Thread-172908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] client lang: <none>
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] server lang: <none>
2026-04-11T16:19:12.453 [DEBUG] [Thread-172908] [transport.py] [_log()] kex follows: False
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] Compression: none
2026-04-11T16:19:12.454 [DEBUG] [Thread-172908] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:19:12.512 [DEBUG] [Thread-172908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:19:12.513 [DEBUG] [Thread-172908] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:19:12.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:19:12.514 [DEBUG] [Thread-172908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:19:12.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:19:12.572 [DEBUG] [Thread-172908] [transport.py] [_log()] userauth is OK
2026-04-11T16:19:12.573 [DEBUG] [Thread-172908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:19:12.573 [DEBUG] [Thread-172908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:19:12.573 [DEBUG] [Thread-172908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:19:12.573 [DEBUG] [Thread-172908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:19:12.592 [INFO] [Thread-172908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:19:12.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:19:12.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:19:13.430 [DEBUG] [Thread-172908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:19:13.430 [DEBUG] [Thread-172908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:19:13.481 [DEBUG] [Thread-172908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:19:13.481 [DEBUG] [Thread-172908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:19:13.494 [DEBUG] [Thread-172908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:19:13.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:19:13.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-04-11T16:19:13.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-04-11T16:19:13.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:19:13.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:19:13.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:19:13.540 [DEBUG] [Thread-172908] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:19:14.549 [DEBUG] [Thread-172910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:15.359 [DEBUG] [Thread-172911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:26.367 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:26.368 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:29.614 [DEBUG] [Thread-172912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:43.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:19:43.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:19:43.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-04-11T16:19:44.652 [DEBUG] [Thread-172913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:19:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 19, 36), 0.17327, 98.7988, 0.0, 11.7518, 13.6887, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:19:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:19:36
2026-04-11T16:19:45.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:19:45.440 [DEBUG] [Thread-172914] [transport.py] [_log()] starting thread (client mode): 0xb0febb50
2026-04-11T16:19:45.440 [DEBUG] [Thread-172914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:19:45.460 [DEBUG] [Thread-172914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:19:45.460 [INFO] [Thread-172914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:19:45.463 [DEBUG] [Thread-172914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] client lang: <none>
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] server lang: <none>
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] kex follows: False
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] Compression: none
2026-04-11T16:19:45.464 [DEBUG] [Thread-172914] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:19:45.481 [DEBUG] [Thread-172914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:19:45.481 [DEBUG] [Thread-172914] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:19:45.482 [DEBUG] [Thread-172914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:19:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:19:45.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:19:45.484 [DEBUG] [Thread-172914] [transport.py] [_log()] userauth is OK
2026-04-11T16:19:45.484 [DEBUG] [Thread-172914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:19:45.484 [DEBUG] [Thread-172914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:19:45.484 [DEBUG] [Thread-172914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:19:45.484 [DEBUG] [Thread-172914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:19:45.519 [INFO] [Thread-172914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:19:45.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:19:46.174 [DEBUG] [Thread-172914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:19:46.174 [DEBUG] [Thread-172914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:19:46.174 [DEBUG] [Thread-172914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:19:46.215 [DEBUG] [Thread-172914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:19:46.215 [DEBUG] [Thread-172914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:19:46.218 [DEBUG] [Thread-172914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:19:46.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:19:46.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:19:46.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:19:46.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:19:46.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:19:46.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:19:46.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:19:46.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:19:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:19:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.596644   +0.00  +13.40   8.79     95  +12.70 3 0 1 3 1   887    0 0.47 -14.49 ----- 10.1 8.8 315.8 11.6 14.7 -0.3 14.6 -0.5 14.3 -0.3 14.5 -0.3
2026-04-11T16:19:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:19:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:19:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.596644
2026-04-11T16:19:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:19:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:19:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:19:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:19:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:19:46.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:19:36', tmtdew=0.17327, humidity=98.7988, cloud=0.0, wind=11.7518, temperature=13.6887, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:19:10.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:19:46.243 [DEBUG] [Thread-172914] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:19:46.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:19:46.335 [DEBUG] [Thread-172917] [transport.py] [_log()] starting thread (client mode): 0xae50a740
2026-04-11T16:19:46.335 [DEBUG] [Thread-172917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:19:46.350 [DEBUG] [Thread-172917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:19:46.350 [INFO] [Thread-172917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:19:46.357 [DEBUG] [Thread-172917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] client lang: <none>
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] server lang: <none>
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] kex follows: False
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] Compression: none
2026-04-11T16:19:46.358 [DEBUG] [Thread-172917] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:19:46.420 [DEBUG] [Thread-172917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:19:46.420 [DEBUG] [Thread-172917] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:19:46.421 [DEBUG] [Thread-172917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:19:46.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:19:46.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:19:46.476 [DEBUG] [Thread-172917] [transport.py] [_log()] userauth is OK
2026-04-11T16:19:46.477 [DEBUG] [Thread-172917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:19:46.477 [DEBUG] [Thread-172917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:19:46.477 [DEBUG] [Thread-172917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:19:46.477 [DEBUG] [Thread-172917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:19:46.496 [INFO] [Thread-172917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:19:46.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:19:46.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:19:47.350 [DEBUG] [Thread-172917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:19:47.350 [DEBUG] [Thread-172917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:19:47.400 [DEBUG] [Thread-172917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:19:47.400 [DEBUG] [Thread-172917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:19:47.409 [DEBUG] [Thread-172917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:19:47.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:19:47.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-04-11T16:19:47.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-04-11T16:19:47.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:19:47.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:19:47.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:19:47.446 [DEBUG] [Thread-172917] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:19:59.689 [DEBUG] [Thread-172919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:14.752 [DEBUG] [Thread-172920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:15.403 [DEBUG] [Thread-172921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:20:17.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:20:17.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-04-11T16:20:18.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 19, 36), 0.17327, 98.7988, 0.0, 11.7518, 13.6887, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:20:18.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:19:36
2026-04-11T16:20:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:20:19.328 [DEBUG] [Thread-172922] [transport.py] [_log()] starting thread (client mode): 0xae5a4880
2026-04-11T16:20:19.329 [DEBUG] [Thread-172922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:20:19.343 [DEBUG] [Thread-172922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:20:19.343 [INFO] [Thread-172922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] client lang: <none>
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] server lang: <none>
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] kex follows: False
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] Compression: none
2026-04-11T16:20:19.347 [DEBUG] [Thread-172922] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:20:19.363 [DEBUG] [Thread-172922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:20:19.363 [DEBUG] [Thread-172922] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:20:19.364 [DEBUG] [Thread-172922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:20:19.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:20:19.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:20:19.366 [DEBUG] [Thread-172922] [transport.py] [_log()] userauth is OK
2026-04-11T16:20:19.366 [DEBUG] [Thread-172922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:20:19.366 [DEBUG] [Thread-172922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:20:19.366 [DEBUG] [Thread-172922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:20:19.366 [DEBUG] [Thread-172922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:20:19.392 [INFO] [Thread-172922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:20:19.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:20:20.005 [DEBUG] [Thread-172922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:20:20.006 [DEBUG] [Thread-172922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:20:20.006 [DEBUG] [Thread-172922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:20:20.046 [DEBUG] [Thread-172922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:20:20.046 [DEBUG] [Thread-172922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:20:20.050 [DEBUG] [Thread-172922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:20:20.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:20:20.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:20:20.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:20:20.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:20:20.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:20:20.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:20:20.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:20:20.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.596991   +0.00  +13.40   7.63     95  +12.70 3 0 1 3 1   887    0 0.46 -14.91 ----- 7.8 7.6 326.0 10.8 14.7 -0.2 14.6 -0.2 14.3 0.0 14.5 -0.1
2026-04-11T16:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:20:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.596991
2026-04-11T16:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:20:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:20:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:19:36', tmtdew=0.17327, humidity=98.7988, cloud=0.0, wind=11.7518, temperature=13.6887, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:19:40.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:20:20.077 [DEBUG] [Thread-172922] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:20:20.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:20:20.170 [DEBUG] [Thread-172925] [transport.py] [_log()] starting thread (client mode): 0xae536110
2026-04-11T16:20:20.170 [DEBUG] [Thread-172925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:20:20.185 [DEBUG] [Thread-172925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:20:20.185 [INFO] [Thread-172925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:20:20.193 [DEBUG] [Thread-172925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:20:20.193 [DEBUG] [Thread-172925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:20:20.193 [DEBUG] [Thread-172925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] client lang: <none>
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] server lang: <none>
2026-04-11T16:20:20.194 [DEBUG] [Thread-172925] [transport.py] [_log()] kex follows: False
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] Compression: none
2026-04-11T16:20:20.195 [DEBUG] [Thread-172925] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:20:20.254 [DEBUG] [Thread-172925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:20:20.255 [DEBUG] [Thread-172925] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:20:20.255 [DEBUG] [Thread-172925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:20:20.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:20:20.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:20:20.318 [DEBUG] [Thread-172925] [transport.py] [_log()] userauth is OK
2026-04-11T16:20:20.319 [DEBUG] [Thread-172925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:20:20.319 [DEBUG] [Thread-172925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:20:20.319 [DEBUG] [Thread-172925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:20:20.319 [DEBUG] [Thread-172925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:20:20.342 [INFO] [Thread-172925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:20:20.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:20:20.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:20:21.133 [DEBUG] [Thread-172925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:20:21.133 [DEBUG] [Thread-172925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:20:21.181 [DEBUG] [Thread-172925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:20:21.181 [DEBUG] [Thread-172925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:20:21.190 [DEBUG] [Thread-172925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:20:21.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:20:21.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-04-11T16:20:21.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:20:21.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:20:21.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:20:21.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:20:21.227 [DEBUG] [Thread-172925] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:20:26.509 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:26.511 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:29.789 [DEBUG] [Thread-172927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:44.841 [DEBUG] [Thread-172928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:20:51.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:20:51.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:20:51.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:20:52.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 20, 12), 0.134055, 99.416, 0.0, 10.7644, 13.2444, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:20:52.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:20:12
2026-04-11T16:20:52.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:20:53.119 [DEBUG] [Thread-172929] [transport.py] [_log()] starting thread (client mode): 0xae534a90
2026-04-11T16:20:53.119 [DEBUG] [Thread-172929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:20:53.141 [DEBUG] [Thread-172929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:20:53.142 [INFO] [Thread-172929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:20:53.145 [DEBUG] [Thread-172929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:20:53.145 [DEBUG] [Thread-172929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:20:53.145 [DEBUG] [Thread-172929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:20:53.145 [DEBUG] [Thread-172929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] client lang: <none>
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] server lang: <none>
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] kex follows: False
2026-04-11T16:20:53.146 [DEBUG] [Thread-172929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:20:53.147 [DEBUG] [Thread-172929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:20:53.147 [DEBUG] [Thread-172929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:20:53.147 [DEBUG] [Thread-172929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:20:53.147 [DEBUG] [Thread-172929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:20:53.147 [DEBUG] [Thread-172929] [transport.py] [_log()] Compression: none
2026-04-11T16:20:53.147 [DEBUG] [Thread-172929] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:20:53.165 [DEBUG] [Thread-172929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:20:53.166 [DEBUG] [Thread-172929] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:20:53.166 [DEBUG] [Thread-172929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:20:53.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:20:53.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:20:53.168 [DEBUG] [Thread-172929] [transport.py] [_log()] userauth is OK
2026-04-11T16:20:53.168 [DEBUG] [Thread-172929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:20:53.168 [DEBUG] [Thread-172929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:20:53.168 [DEBUG] [Thread-172929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:20:53.168 [DEBUG] [Thread-172929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:20:53.203 [INFO] [Thread-172929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:20:53.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:20:53.857 [DEBUG] [Thread-172929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:20:53.857 [DEBUG] [Thread-172929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:20:53.858 [DEBUG] [Thread-172929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:20:53.898 [DEBUG] [Thread-172929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:20:53.898 [DEBUG] [Thread-172929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:20:53.902 [DEBUG] [Thread-172929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:20:53.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:20:53.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:20:53.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:20:53.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:20:53.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:20:53.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:20:53.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:20:53.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:20:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:20:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.597338   +0.00  +13.30   8.22     95  +12.70 3 0 1 3 1   887    0 0.43 -15.47 ----- 8.0 8.2 304.6 11.3 14.7 -0.3 14.6 -0.1 14.3 0.1 14.6 -0.2
2026-04-11T16:20:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:20:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:20:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.597338
2026-04-11T16:20:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:20:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:20:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:20:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:20:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:20:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:20:12', tmtdew=0.134055, humidity=99.416, cloud=0.0, wind=10.7644, temperature=13.2444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:20:10.003', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:20:53.928 [DEBUG] [Thread-172929] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:20:54.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:20:54.021 [DEBUG] [Thread-172932] [transport.py] [_log()] starting thread (client mode): 0xae535570
2026-04-11T16:20:54.021 [DEBUG] [Thread-172932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:20:54.036 [DEBUG] [Thread-172932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:20:54.036 [INFO] [Thread-172932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] client lang: <none>
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] server lang: <none>
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] kex follows: False
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:20:54.044 [DEBUG] [Thread-172932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:20:54.045 [DEBUG] [Thread-172932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:20:54.045 [DEBUG] [Thread-172932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:20:54.045 [DEBUG] [Thread-172932] [transport.py] [_log()] Compression: none
2026-04-11T16:20:54.045 [DEBUG] [Thread-172932] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:20:54.104 [DEBUG] [Thread-172932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:20:54.104 [DEBUG] [Thread-172932] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:20:54.105 [DEBUG] [Thread-172932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:20:54.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:20:54.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:20:54.159 [DEBUG] [Thread-172932] [transport.py] [_log()] userauth is OK
2026-04-11T16:20:54.160 [DEBUG] [Thread-172932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:20:54.160 [DEBUG] [Thread-172932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:20:54.160 [DEBUG] [Thread-172932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:20:54.160 [DEBUG] [Thread-172932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:20:54.178 [INFO] [Thread-172932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:20:54.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:20:54.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:20:55.006 [DEBUG] [Thread-172932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:20:55.007 [DEBUG] [Thread-172932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:20:55.054 [DEBUG] [Thread-172932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:20:55.055 [DEBUG] [Thread-172932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:20:55.063 [DEBUG] [Thread-172932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:20:55.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:20:55.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:20:55.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-04-11T16:20:55.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:20:55.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:20:55.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:20:55.099 [DEBUG] [Thread-172932] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:20:59.878 [DEBUG] [Thread-172934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:14.938 [DEBUG] [Thread-172935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:15.437 [DEBUG] [Thread-172936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:25.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:21:25.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:21:25.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:21:26.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 20, 48), 0.17836, 98.7663, 0.0, 10.0937, 13.7555, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:21:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:20:48
2026-04-11T16:21:26.651 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:26.653 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:26.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:21:27.016 [DEBUG] [Thread-172937] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T16:21:27.017 [DEBUG] [Thread-172937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:21:27.037 [DEBUG] [Thread-172937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:21:27.037 [INFO] [Thread-172937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:21:27.040 [DEBUG] [Thread-172937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:21:27.040 [DEBUG] [Thread-172937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] client lang: <none>
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] server lang: <none>
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] kex follows: False
2026-04-11T16:21:27.041 [DEBUG] [Thread-172937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:21:27.042 [DEBUG] [Thread-172937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:21:27.042 [DEBUG] [Thread-172937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:21:27.042 [DEBUG] [Thread-172937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:21:27.042 [DEBUG] [Thread-172937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:21:27.042 [DEBUG] [Thread-172937] [transport.py] [_log()] Compression: none
2026-04-11T16:21:27.042 [DEBUG] [Thread-172937] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:21:27.060 [DEBUG] [Thread-172937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:21:27.061 [DEBUG] [Thread-172937] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:21:27.062 [DEBUG] [Thread-172937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:21:27.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:21:27.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:21:27.064 [DEBUG] [Thread-172937] [transport.py] [_log()] userauth is OK
2026-04-11T16:21:27.064 [DEBUG] [Thread-172937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:21:27.064 [DEBUG] [Thread-172937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:21:27.064 [DEBUG] [Thread-172937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:21:27.064 [DEBUG] [Thread-172937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:21:27.089 [INFO] [Thread-172937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:21:27.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:21:27.748 [DEBUG] [Thread-172937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:21:27.748 [DEBUG] [Thread-172937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:21:27.749 [DEBUG] [Thread-172937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:21:27.788 [DEBUG] [Thread-172937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:21:27.788 [DEBUG] [Thread-172937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:21:27.789 [DEBUG] [Thread-172937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:21:27.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:21:27.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:21:27.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:21:27.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:21:27.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:21:27.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:21:27.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:21:27.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:21:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:21:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.598038   +0.00  +13.20   9.92     95  +12.50 3 0 1 3 1   887    0 0.44 -14.38 ----- 9.7 9.9 293.4 11.4 14.8 -0.3 14.7 -0.3 14.3 -0.3 14.5 -0.2
2026-04-11T16:21:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:21:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:21:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.598038
2026-04-11T16:21:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:21:27.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:21:27.807 [DEBUG] [Thread-172937] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:21:27.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:21:27.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:21:27.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:21:27.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:20:48', tmtdew=0.17836, humidity=98.7663, cloud=0.0, wind=10.0937, temperature=13.7555, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:21:10.483', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:21:27.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:21:27.897 [DEBUG] [Thread-172940] [transport.py] [_log()] starting thread (client mode): 0xae5a5d80
2026-04-11T16:21:27.897 [DEBUG] [Thread-172940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:21:27.911 [DEBUG] [Thread-172940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:21:27.911 [INFO] [Thread-172940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] client lang: <none>
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] server lang: <none>
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] kex follows: False
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] Compression: none
2026-04-11T16:21:27.919 [DEBUG] [Thread-172940] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:21:27.974 [DEBUG] [Thread-172940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:21:27.975 [DEBUG] [Thread-172940] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:21:27.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:21:27.976 [DEBUG] [Thread-172940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:21:27.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:21:28.031 [DEBUG] [Thread-172940] [transport.py] [_log()] userauth is OK
2026-04-11T16:21:28.032 [DEBUG] [Thread-172940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:21:28.032 [DEBUG] [Thread-172940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:21:28.032 [DEBUG] [Thread-172940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:21:28.032 [DEBUG] [Thread-172940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:21:28.050 [INFO] [Thread-172940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:21:28.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:21:28.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:21:28.885 [DEBUG] [Thread-172940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:21:28.885 [DEBUG] [Thread-172940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:21:28.933 [DEBUG] [Thread-172940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:21:28.933 [DEBUG] [Thread-172940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:21:28.942 [DEBUG] [Thread-172940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:21:28.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:21:28.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-04-11T16:21:28.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-04-11T16:21:28.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:21:28.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:21:28.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:21:28.978 [DEBUG] [Thread-172940] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:21:29.972 [DEBUG] [Thread-172942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:45.027 [DEBUG] [Thread-172943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:21:58.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:21:58.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:21:58.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:22:00.064 [DEBUG] [Thread-172944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:22:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 21, 23), 0.13401, 99.4163, 0.0, 9.97056, 13.2612, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:22:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:21:23
2026-04-11T16:22:00.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:22:01.001 [DEBUG] [Thread-172945] [transport.py] [_log()] starting thread (client mode): 0xae5a5360
2026-04-11T16:22:01.001 [DEBUG] [Thread-172945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:22:01.011 [DEBUG] [Thread-172945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:22:01.011 [INFO] [Thread-172945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] client lang: <none>
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] server lang: <none>
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] kex follows: False
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] Compression: none
2026-04-11T16:22:01.014 [DEBUG] [Thread-172945] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:22:01.024 [DEBUG] [Thread-172945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:22:01.024 [DEBUG] [Thread-172945] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:22:01.024 [DEBUG] [Thread-172945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:22:01.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:22:01.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:22:01.025 [DEBUG] [Thread-172945] [transport.py] [_log()] userauth is OK
2026-04-11T16:22:01.025 [DEBUG] [Thread-172945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:22:01.026 [DEBUG] [Thread-172945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:22:01.026 [DEBUG] [Thread-172945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:22:01.026 [DEBUG] [Thread-172945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:22:01.038 [INFO] [Thread-172945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:22:01.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:22:01.660 [DEBUG] [Thread-172945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:22:01.660 [DEBUG] [Thread-172945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:22:01.660 [DEBUG] [Thread-172945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:22:01.701 [DEBUG] [Thread-172945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:22:01.701 [DEBUG] [Thread-172945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:22:01.704 [DEBUG] [Thread-172945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:22:01.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:22:01.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:22:01.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:22:01.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:22:01.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:22:01.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:22:01.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:22:01.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:22:01.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:22:01.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.598380   +0.00  +13.10  10.06     95  +12.50 3 0 1 3 1   887    0 0.44 -14.25 ----- 9.1 10.1 298.8 11.1 14.7 -0.3 14.6 -0.3 14.2 -0.4 14.5 -0.2
2026-04-11T16:22:01.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:22:01.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:22:01.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.598380
2026-04-11T16:22:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:22:01.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:22:01.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:22:01.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:22:01.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:22:01.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:21:23', tmtdew=0.13401, humidity=99.4163, cloud=0.0, wind=9.97056, temperature=13.2612, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:21:40.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:22:01.729 [DEBUG] [Thread-172945] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:22:01.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:22:01.824 [DEBUG] [Thread-172948] [transport.py] [_log()] starting thread (client mode): 0xae50a3e0
2026-04-11T16:22:01.824 [DEBUG] [Thread-172948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:22:01.839 [DEBUG] [Thread-172948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:22:01.839 [INFO] [Thread-172948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:22:01.847 [DEBUG] [Thread-172948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] client lang: <none>
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] server lang: <none>
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] kex follows: False
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] Compression: none
2026-04-11T16:22:01.848 [DEBUG] [Thread-172948] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:22:01.907 [DEBUG] [Thread-172948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:22:01.908 [DEBUG] [Thread-172948] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:22:01.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:22:01.909 [DEBUG] [Thread-172948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:22:01.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:22:01.963 [DEBUG] [Thread-172948] [transport.py] [_log()] userauth is OK
2026-04-11T16:22:01.964 [DEBUG] [Thread-172948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:22:01.964 [DEBUG] [Thread-172948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:22:01.964 [DEBUG] [Thread-172948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:22:01.964 [DEBUG] [Thread-172948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:22:01.982 [INFO] [Thread-172948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:22:01.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:22:01.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:22:02.826 [DEBUG] [Thread-172948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:22:02.826 [DEBUG] [Thread-172948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:22:02.874 [DEBUG] [Thread-172948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:22:02.874 [DEBUG] [Thread-172948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:22:02.883 [DEBUG] [Thread-172948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:22:02.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:22:02.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-04-11T16:22:02.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-04-11T16:22:02.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:22:02.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:22:02.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:22:02.919 [DEBUG] [Thread-172948] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:22:15.106 [DEBUG] [Thread-172950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:22:15.470 [DEBUG] [Thread-172951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:22:26.793 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:22:26.795 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:22:30.162 [DEBUG] [Thread-172952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:22:32.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:22:32.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:22:32.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-04-11T16:22:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 21, 58), 0.146805, 99.3337, 0.0, 9.74124, 13.1285, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:22:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:21:58
2026-04-11T16:22:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:22:34.734 [DEBUG] [Thread-172953] [transport.py] [_log()] starting thread (client mode): 0xae5a6dd0
2026-04-11T16:22:34.734 [DEBUG] [Thread-172953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:22:34.755 [DEBUG] [Thread-172953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:22:34.755 [INFO] [Thread-172953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:22:34.758 [DEBUG] [Thread-172953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:22:34.758 [DEBUG] [Thread-172953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:22:34.758 [DEBUG] [Thread-172953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] client lang: <none>
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] server lang: <none>
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] kex follows: False
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:22:34.759 [DEBUG] [Thread-172953] [transport.py] [_log()] Compression: none
2026-04-11T16:22:34.760 [DEBUG] [Thread-172953] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:22:34.777 [DEBUG] [Thread-172953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:22:34.778 [DEBUG] [Thread-172953] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:22:34.778 [DEBUG] [Thread-172953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:22:34.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:22:34.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:22:34.780 [DEBUG] [Thread-172953] [transport.py] [_log()] userauth is OK
2026-04-11T16:22:34.780 [DEBUG] [Thread-172953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:22:34.780 [DEBUG] [Thread-172953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:22:34.780 [DEBUG] [Thread-172953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:22:34.781 [DEBUG] [Thread-172953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:22:34.797 [INFO] [Thread-172953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:22:34.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:22:35.422 [DEBUG] [Thread-172953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:22:35.422 [DEBUG] [Thread-172953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:22:35.423 [DEBUG] [Thread-172953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:22:35.463 [DEBUG] [Thread-172953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:22:35.463 [DEBUG] [Thread-172953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:22:35.467 [DEBUG] [Thread-172953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:22:35.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:22:35.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:22:35.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:22:35.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:22:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:22:35.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:22:35.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:22:35.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:22:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:22:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.598727   +0.00  +13.10  10.12     95  +12.40 3 0 1 3 1   887    0 0.45 -13.80 ----- 10.2 10.1 290.8 12.2 14.7 -0.4 14.7 -0.2 14.2 -0.0 14.6 -0.4
2026-04-11T16:22:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:22:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:22:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.598727
2026-04-11T16:22:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:22:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:22:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:22:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:22:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:22:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:21:58', tmtdew=0.146805, humidity=99.3337, cloud=0.0, wind=9.74124, temperature=13.1285, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:22:10.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:22:35.496 [DEBUG] [Thread-172953] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:22:35.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:22:35.599 [DEBUG] [Thread-172956] [transport.py] [_log()] starting thread (client mode): 0xae562b30
2026-04-11T16:22:35.599 [DEBUG] [Thread-172956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:22:35.615 [DEBUG] [Thread-172956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:22:35.615 [INFO] [Thread-172956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:22:35.622 [DEBUG] [Thread-172956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] client lang: <none>
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] server lang: <none>
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] kex follows: False
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] Compression: none
2026-04-11T16:22:35.623 [DEBUG] [Thread-172956] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:22:35.684 [DEBUG] [Thread-172956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:22:35.684 [DEBUG] [Thread-172956] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:22:35.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:22:35.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:22:35.686 [DEBUG] [Thread-172956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:22:35.743 [DEBUG] [Thread-172956] [transport.py] [_log()] userauth is OK
2026-04-11T16:22:35.744 [DEBUG] [Thread-172956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:22:35.744 [DEBUG] [Thread-172956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:22:35.744 [DEBUG] [Thread-172956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:22:35.744 [DEBUG] [Thread-172956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:22:35.763 [INFO] [Thread-172956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16: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-04-11T16:22:35.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:22:36.605 [DEBUG] [Thread-172956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:22:36.605 [DEBUG] [Thread-172956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:22:36.653 [DEBUG] [Thread-172956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:22:36.653 [DEBUG] [Thread-172956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:22:36.662 [DEBUG] [Thread-172956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:22:36.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:22:36.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-04-11T16:22:36.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:22:36.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:22:36.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:22:36.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:22:36.698 [DEBUG] [Thread-172956] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:22:45.195 [DEBUG] [Thread-172958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:00.245 [DEBUG] [Thread-172959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:23:06.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:23:06.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-04-11T16:23:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 22, 34), 0.18326, 98.7337, 0.0, 8.18856, 13.4906, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:23:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:22:34
2026-04-11T16:23:08.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:23:08.523 [DEBUG] [Thread-172960] [transport.py] [_log()] starting thread (client mode): 0xae5e4100
2026-04-11T16:23:08.523 [DEBUG] [Thread-172960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:23:08.544 [DEBUG] [Thread-172960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:23:08.544 [INFO] [Thread-172960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:23:08.546 [DEBUG] [Thread-172960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:23:08.546 [DEBUG] [Thread-172960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] client lang: <none>
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] server lang: <none>
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] kex follows: False
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] Compression: none
2026-04-11T16:23:08.547 [DEBUG] [Thread-172960] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:23:08.563 [DEBUG] [Thread-172960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:23:08.563 [DEBUG] [Thread-172960] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:23:08.563 [DEBUG] [Thread-172960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:23:08.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:23:08.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:23:08.605 [DEBUG] [Thread-172960] [transport.py] [_log()] userauth is OK
2026-04-11T16:23:08.605 [DEBUG] [Thread-172960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:23:08.605 [DEBUG] [Thread-172960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:23:08.606 [DEBUG] [Thread-172960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:23:08.606 [DEBUG] [Thread-172960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:23:08.637 [INFO] [Thread-172960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:23:08.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:23:09.379 [DEBUG] [Thread-172960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:23:09.379 [DEBUG] [Thread-172960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:23:09.380 [DEBUG] [Thread-172960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:23:09.420 [DEBUG] [Thread-172960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:23:09.420 [DEBUG] [Thread-172960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:23:09.423 [DEBUG] [Thread-172960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:23:09.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:23:09.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:23:09.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:23:09.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:23:09.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:23:09.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:23:09.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:23:09.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:23:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:23:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.599074   +0.00  +13.20   7.84     95  +12.50 3 0 1 3 1   887    0 0.43 -13.92 ----- 8.3 7.8 311.2 11.6 14.7 -0.3 14.7 -0.3 14.2 -0.4 14.5 -0.4
2026-04-11T16:23:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:23:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:23:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.599074
2026-04-11T16:23:09.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:23:09.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:23:09.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:23:09.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:23:09.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:23:09.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:22:34', tmtdew=0.18326, humidity=98.7337, cloud=0.0, wind=8.18856, temperature=13.4906, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:22:39.994', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:23:09.453 [DEBUG] [Thread-172960] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:23:09.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:23:09.545 [DEBUG] [Thread-172963] [transport.py] [_log()] starting thread (client mode): 0xae5f3df0
2026-04-11T16:23:09.546 [DEBUG] [Thread-172963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:23:09.560 [DEBUG] [Thread-172963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:23:09.561 [INFO] [Thread-172963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:23:09.568 [DEBUG] [Thread-172963] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:23:09.568 [DEBUG] [Thread-172963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:23:09.568 [DEBUG] [Thread-172963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] client lang: <none>
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] server lang: <none>
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] kex follows: False
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] Compression: none
2026-04-11T16:23:09.569 [DEBUG] [Thread-172963] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:23:09.627 [DEBUG] [Thread-172963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:23:09.628 [DEBUG] [Thread-172963] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:23:09.629 [DEBUG] [Thread-172963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:23:09.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:23:09.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:23:09.687 [DEBUG] [Thread-172963] [transport.py] [_log()] userauth is OK
2026-04-11T16:23:09.688 [DEBUG] [Thread-172963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:23:09.688 [DEBUG] [Thread-172963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:23:09.688 [DEBUG] [Thread-172963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:23:09.688 [DEBUG] [Thread-172963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:23:09.709 [INFO] [Thread-172963] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:23:09.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:23:09.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:23:10.509 [DEBUG] [Thread-172963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:23:10.509 [DEBUG] [Thread-172963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:23:10.557 [DEBUG] [Thread-172963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:23:10.558 [DEBUG] [Thread-172963] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:23:10.567 [DEBUG] [Thread-172963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:23:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:23:10.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-04-11T16:23:10.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:23:10.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:23:10.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:23:10.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:23:10.602 [DEBUG] [Thread-172963] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:23:15.283 [DEBUG] [Thread-172965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:15.504 [DEBUG] [Thread-172966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:26.934 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:26.935 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:30.343 [DEBUG] [Thread-172967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:23:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:23:40.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:23:40.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-04-11T16:23:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 23, 10), 0.09162, 99.3671, 0.0, 8.29404, 13.0786, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:23:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:23:10
2026-04-11T16:23:42.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:23:42.472 [DEBUG] [Thread-172968] [transport.py] [_log()] starting thread (client mode): 0xae5e5810
2026-04-11T16:23:42.472 [DEBUG] [Thread-172968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:23:42.495 [DEBUG] [Thread-172968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:23:42.495 [INFO] [Thread-172968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] client lang: <none>
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] server lang: <none>
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] kex follows: False
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:23:42.499 [DEBUG] [Thread-172968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:23:42.500 [DEBUG] [Thread-172968] [transport.py] [_log()] Compression: none
2026-04-11T16:23:42.500 [DEBUG] [Thread-172968] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:23:42.517 [DEBUG] [Thread-172968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:23:42.517 [DEBUG] [Thread-172968] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:23:42.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:23:42.519 [DEBUG] [Thread-172968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:23:42.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:23:42.521 [DEBUG] [Thread-172968] [transport.py] [_log()] userauth is OK
2026-04-11T16:23:42.521 [DEBUG] [Thread-172968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:23:42.521 [DEBUG] [Thread-172968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:23:42.521 [DEBUG] [Thread-172968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:23:42.521 [DEBUG] [Thread-172968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:23:42.540 [INFO] [Thread-172968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:23:42.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:23:43.334 [DEBUG] [Thread-172968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:23:43.334 [DEBUG] [Thread-172968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:23:43.335 [DEBUG] [Thread-172968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:23:43.375 [DEBUG] [Thread-172968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:23:43.375 [DEBUG] [Thread-172968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:23:43.379 [DEBUG] [Thread-172968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:23:43.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:23:43.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:23:43.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:23:43.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:23:43.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:23:43.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:23:43.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:23:43.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:23:43.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:23:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.599422   +0.00  +13.20   9.38     95  +12.50 3 0 1 3 1   887    0 0.40 -14.17 ----- 8.8 9.4 309.2 11.1 14.7 -0.4 14.6 -0.4 14.2 -0.2 14.5 -0.4
2026-04-11T16:23:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:23:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:23:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.599422
2026-04-11T16:23:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:23:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:23:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:23:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:23:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:23:43.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:23:10', tmtdew=0.09162, humidity=99.3671, cloud=0.0, wind=8.29404, temperature=13.0786, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:23:10.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:23:43.408 [DEBUG] [Thread-172968] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:23:43.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:23:43.501 [DEBUG] [Thread-172971] [transport.py] [_log()] starting thread (client mode): 0xae5e6c20
2026-04-11T16:23:43.501 [DEBUG] [Thread-172971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:23:43.515 [DEBUG] [Thread-172971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:23:43.516 [INFO] [Thread-172971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:23:43.523 [DEBUG] [Thread-172971] [transport.py] [_log()] client lang: <none>
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] server lang: <none>
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] kex follows: False
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] Compression: none
2026-04-11T16:23:43.524 [DEBUG] [Thread-172971] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:23:43.582 [DEBUG] [Thread-172971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:23:43.582 [DEBUG] [Thread-172971] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:23:43.582 [DEBUG] [Thread-172971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:23:43.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:23:43.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:23:43.639 [DEBUG] [Thread-172971] [transport.py] [_log()] userauth is OK
2026-04-11T16:23:43.640 [DEBUG] [Thread-172971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:23:43.640 [DEBUG] [Thread-172971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:23:43.640 [DEBUG] [Thread-172971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:23:43.640 [DEBUG] [Thread-172971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:23:43.653 [INFO] [Thread-172971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:23:43.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:23:43.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:23:44.482 [DEBUG] [Thread-172971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:23:44.482 [DEBUG] [Thread-172971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:23:44.530 [DEBUG] [Thread-172971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:23:44.530 [DEBUG] [Thread-172971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:23:44.539 [DEBUG] [Thread-172971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:23:44.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:23:44.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-04-11T16:23:44.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-04-11T16:23:44.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:23:44.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:23:44.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:23:44.577 [DEBUG] [Thread-172971] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:23:45.377 [DEBUG] [Thread-172973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:00.429 [DEBUG] [Thread-172974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:14.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:24:14.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:24:14.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-04-11T16:24:15.467 [DEBUG] [Thread-172975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:15.543 [DEBUG] [Thread-172976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 23, 45), 0.18326, 98.7342, 0.0, 10.0231, 13.5904, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:24:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:23:45
2026-04-11T16:24:16.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:24:16.421 [DEBUG] [Thread-172977] [transport.py] [_log()] starting thread (client mode): 0xb0feabc0
2026-04-11T16:24:16.421 [DEBUG] [Thread-172977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:24:16.442 [DEBUG] [Thread-172977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:24:16.443 [INFO] [Thread-172977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] client lang: <none>
2026-04-11T16:24:16.446 [DEBUG] [Thread-172977] [transport.py] [_log()] server lang: <none>
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] kex follows: False
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] Compression: none
2026-04-11T16:24:16.447 [DEBUG] [Thread-172977] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:24:16.467 [DEBUG] [Thread-172977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:24:16.467 [DEBUG] [Thread-172977] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:24:16.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:24:16.469 [DEBUG] [Thread-172977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:24:16.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:24:16.471 [DEBUG] [Thread-172977] [transport.py] [_log()] userauth is OK
2026-04-11T16:24:16.471 [DEBUG] [Thread-172977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:24:16.471 [DEBUG] [Thread-172977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:24:16.471 [DEBUG] [Thread-172977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:24:16.471 [DEBUG] [Thread-172977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:24:16.496 [INFO] [Thread-172977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:24:16.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:24:17.287 [DEBUG] [Thread-172977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:24:17.287 [DEBUG] [Thread-172977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:24:17.288 [DEBUG] [Thread-172977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:24:17.328 [DEBUG] [Thread-172977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:24:17.328 [DEBUG] [Thread-172977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:24:17.330 [DEBUG] [Thread-172977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:24:17.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:24:17.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:24:17.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:24:17.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:24:17.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:24:17.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:24:17.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:24:17.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:24:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:24:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.599769   +0.00  +13.20  10.35     95  +12.50 3 0 1 3 1   887    0 0.43 -13.62 ----- 10.8 10.3 312.2 11.7 14.7 -0.2 14.7 -0.1 14.2 -0.0 14.5 -0.1
2026-04-11T16:24:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:24:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:24:17.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.599769
2026-04-11T16:24:17.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:24:17.357 [DEBUG] [Thread-172977] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:24:17.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:24:17.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:24:17.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:24:17.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:24:17.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:23:45', tmtdew=0.18326, humidity=98.7342, cloud=0.0, wind=10.0231, temperature=13.5904, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:23:40.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:24:17.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:24:17.451 [DEBUG] [Thread-172980] [transport.py] [_log()] starting thread (client mode): 0xae5b0be0
2026-04-11T16:24:17.451 [DEBUG] [Thread-172980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:24:17.465 [DEBUG] [Thread-172980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:24:17.465 [INFO] [Thread-172980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:24:17.473 [DEBUG] [Thread-172980] [transport.py] [_log()] client lang: <none>
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] server lang: <none>
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] kex follows: False
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] Compression: none
2026-04-11T16:24:17.474 [DEBUG] [Thread-172980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:24:17.530 [DEBUG] [Thread-172980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:24:17.531 [DEBUG] [Thread-172980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:24:17.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:24:17.532 [DEBUG] [Thread-172980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:24:17.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:24:17.587 [DEBUG] [Thread-172980] [transport.py] [_log()] userauth is OK
2026-04-11T16:24:17.587 [DEBUG] [Thread-172980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:24:17.587 [DEBUG] [Thread-172980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:24:17.587 [DEBUG] [Thread-172980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:24:17.587 [DEBUG] [Thread-172980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:24:17.612 [INFO] [Thread-172980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:24:17.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:24:17.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:24:18.435 [DEBUG] [Thread-172980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:24:18.435 [DEBUG] [Thread-172980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:24:18.483 [DEBUG] [Thread-172980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:24:18.483 [DEBUG] [Thread-172980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:24:18.492 [DEBUG] [Thread-172980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:24:18.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:24:18.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-04-11T16:24:18.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-04-11T16:24:18.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:24:18.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:24:18.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:24:18.529 [DEBUG] [Thread-172980] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:24:27.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:27.077 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:30.505 [DEBUG] [Thread-172982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:45.566 [DEBUG] [Thread-172983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:24:48.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:24:48.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:24:48.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-04-11T16:24:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 24, 21), 0.086515, 99.4, 0.0, 9.93528, 13.095, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:24:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:24:21
2026-04-11T16:24:50.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:24:50.367 [DEBUG] [Thread-172984] [transport.py] [_log()] starting thread (client mode): 0xae5083d0
2026-04-11T16:24:50.367 [DEBUG] [Thread-172984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:24:50.388 [DEBUG] [Thread-172984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:24:50.388 [INFO] [Thread-172984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] client lang: <none>
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] server lang: <none>
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] kex follows: False
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:24:50.391 [DEBUG] [Thread-172984] [transport.py] [_log()] Compression: none
2026-04-11T16:24:50.392 [DEBUG] [Thread-172984] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:24:50.408 [DEBUG] [Thread-172984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:24:50.408 [DEBUG] [Thread-172984] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:24:50.409 [DEBUG] [Thread-172984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:24:50.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:24:50.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:24:50.411 [DEBUG] [Thread-172984] [transport.py] [_log()] userauth is OK
2026-04-11T16:24:50.411 [DEBUG] [Thread-172984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:24:50.411 [DEBUG] [Thread-172984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:24:50.411 [DEBUG] [Thread-172984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:24:50.412 [DEBUG] [Thread-172984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:24:50.432 [INFO] [Thread-172984] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:24:50.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:24:51.243 [DEBUG] [Thread-172984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:24:51.243 [DEBUG] [Thread-172984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:24:51.243 [DEBUG] [Thread-172984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:24:51.284 [DEBUG] [Thread-172984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:24:51.284 [DEBUG] [Thread-172984] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:24:51.286 [DEBUG] [Thread-172984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:24:51.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:24:51.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:24:51.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:24:51.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:24:51.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:24:51.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:24:51.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:24:51.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:24:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:24:51.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.600116   +0.00  +13.10  10.16     95  +12.40 3 0 1 3 1   887    0 0.46 -12.84 ----- 9.0 10.2 310.2 11.3 14.7 -0.3 14.7 -0.2 14.2 0.0 14.5 -0.2
2026-04-11T16:24:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:24:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:24:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.600116
2026-04-11T16:24:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:24:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:24:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:24:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:24:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:24:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:24:21', tmtdew=0.086515, humidity=99.4, cloud=0.0, wind=9.93528, temperature=13.095, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:24:10.022', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:24:51.312 [DEBUG] [Thread-172984] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:24:51.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:24:51.418 [DEBUG] [Thread-172987] [transport.py] [_log()] starting thread (client mode): 0xae561600
2026-04-11T16:24:51.418 [DEBUG] [Thread-172987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:24:51.432 [DEBUG] [Thread-172987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:24:51.432 [INFO] [Thread-172987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] client lang: <none>
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] server lang: <none>
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] kex follows: False
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] Compression: none
2026-04-11T16:24:51.440 [DEBUG] [Thread-172987] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:24:51.500 [DEBUG] [Thread-172987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:24:51.500 [DEBUG] [Thread-172987] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:24:51.501 [DEBUG] [Thread-172987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:24:51.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:24:51.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:24:51.556 [DEBUG] [Thread-172987] [transport.py] [_log()] userauth is OK
2026-04-11T16:24:51.556 [DEBUG] [Thread-172987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:24:51.556 [DEBUG] [Thread-172987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:24:51.556 [DEBUG] [Thread-172987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:24:51.557 [DEBUG] [Thread-172987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:24:51.576 [INFO] [Thread-172987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:24:51.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:24:51.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:24:52.409 [DEBUG] [Thread-172987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:24:52.410 [DEBUG] [Thread-172987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:24:52.457 [DEBUG] [Thread-172987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:24:52.458 [DEBUG] [Thread-172987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:24:52.466 [DEBUG] [Thread-172987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:24:52.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:24:52.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:24:52.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-04-11T16:24:52.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:24:52.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:24:52.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:24:52.501 [DEBUG] [Thread-172987] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:25:00.602 [DEBUG] [Thread-172989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:15.586 [DEBUG] [Thread-172990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:15.657 [DEBUG] [Thread-172991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:22.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:25:22.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:25:22.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-04-11T16:25:23.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 24, 56), 0.081385, 99.4332, 0.0, 9.459, 13.1948, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:25:23.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:24:56
2026-04-11T16:25:24.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:25:24.318 [DEBUG] [Thread-172992] [transport.py] [_log()] starting thread (client mode): 0xae5f37f0
2026-04-11T16:25:24.318 [DEBUG] [Thread-172992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:25:24.339 [DEBUG] [Thread-172992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:25:24.339 [INFO] [Thread-172992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:25:24.343 [DEBUG] [Thread-172992] [transport.py] [_log()] client lang: <none>
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] server lang: <none>
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] kex follows: False
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] Compression: none
2026-04-11T16:25:24.344 [DEBUG] [Thread-172992] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:25:24.358 [DEBUG] [Thread-172992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:25:24.359 [DEBUG] [Thread-172992] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:25:24.359 [DEBUG] [Thread-172992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:25:24.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:25:24.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:25:24.361 [DEBUG] [Thread-172992] [transport.py] [_log()] userauth is OK
2026-04-11T16:25:24.362 [DEBUG] [Thread-172992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:25:24.362 [DEBUG] [Thread-172992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:25:24.362 [DEBUG] [Thread-172992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:25:24.362 [DEBUG] [Thread-172992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:25:24.386 [INFO] [Thread-172992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:25:24.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:25:25.211 [DEBUG] [Thread-172992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:25:25.212 [DEBUG] [Thread-172992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:25:25.212 [DEBUG] [Thread-172992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:25:25.253 [DEBUG] [Thread-172992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:25:25.253 [DEBUG] [Thread-172992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:25:25.257 [DEBUG] [Thread-172992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:25:25.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:25:25.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:25:25.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:25:25.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:25:25.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:25:25.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:25:25.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:25:25.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:25:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:25:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.600463   +0.00  +13.20   9.10     96  +12.60 3 0 1 3 1   887    0 0.45 -12.48 ----- 7.9 9.1 311.0 10.1 14.8 -0.2 14.6 -0.1 14.2 -0.5 14.5 -0.1
2026-04-11T16:25:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:25:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:25:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.600463
2026-04-11T16:25:25.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:25:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:25:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:25:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:25:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:25:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:24:56', tmtdew=0.081385, humidity=99.4332, cloud=0.0, wind=9.459, temperature=13.1948, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:24:40.003', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:25:25.285 [DEBUG] [Thread-172992] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:25: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-04-11T16:25:25.380 [DEBUG] [Thread-172995] [transport.py] [_log()] starting thread (client mode): 0xae518dc0
2026-04-11T16:25:25.380 [DEBUG] [Thread-172995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:25:25.394 [DEBUG] [Thread-172995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:25:25.394 [INFO] [Thread-172995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:25:25.402 [DEBUG] [Thread-172995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:25:25.402 [DEBUG] [Thread-172995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:25:25.402 [DEBUG] [Thread-172995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:25:25.402 [DEBUG] [Thread-172995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] client lang: <none>
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] server lang: <none>
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] kex follows: False
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:25:25.403 [DEBUG] [Thread-172995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:25:25.404 [DEBUG] [Thread-172995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:25:25.404 [DEBUG] [Thread-172995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:25:25.404 [DEBUG] [Thread-172995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:25:25.404 [DEBUG] [Thread-172995] [transport.py] [_log()] Compression: none
2026-04-11T16:25:25.404 [DEBUG] [Thread-172995] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:25:25.460 [DEBUG] [Thread-172995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:25:25.460 [DEBUG] [Thread-172995] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:25:25.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:25:25.462 [DEBUG] [Thread-172995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:25:25.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:25:25.523 [DEBUG] [Thread-172995] [transport.py] [_log()] userauth is OK
2026-04-11T16:25:25.523 [DEBUG] [Thread-172995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:25:25.524 [DEBUG] [Thread-172995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:25:25.524 [DEBUG] [Thread-172995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:25:25.524 [DEBUG] [Thread-172995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:25:25.543 [INFO] [Thread-172995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:25:25.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:25:25.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:25:26.373 [DEBUG] [Thread-172995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:25:26.374 [DEBUG] [Thread-172995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:25:26.421 [DEBUG] [Thread-172995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:25:26.422 [DEBUG] [Thread-172995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:25:26.430 [DEBUG] [Thread-172995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:25:26.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:25:26.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:25:26.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-04-11T16:25:26.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:25:26.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:25:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:25:26.464 [DEBUG] [Thread-172995] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:25:27.217 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:27.218 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:30.693 [DEBUG] [Thread-172997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:45.744 [DEBUG] [Thread-172998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:25:56.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:25:56.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:25:56.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-04-11T16:25:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 25, 31), 0.08136, 99.4334, 0.0, 9.51192, 13.2115, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:25:57.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:25:31
2026-04-11T16:25:58.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:25:58.370 [DEBUG] [Thread-172999] [transport.py] [_log()] starting thread (client mode): 0xa7950460
2026-04-11T16:25:58.370 [DEBUG] [Thread-172999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:25:58.390 [DEBUG] [Thread-172999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:25:58.390 [INFO] [Thread-172999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:58.393 [DEBUG] [Thread-172999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] client lang: <none>
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] server lang: <none>
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] kex follows: False
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] Compression: none
2026-04-11T16:25:58.394 [DEBUG] [Thread-172999] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:25:58.409 [DEBUG] [Thread-172999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:25:58.410 [DEBUG] [Thread-172999] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:25:58.410 [DEBUG] [Thread-172999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:25:58.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:25:58.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:25:58.413 [DEBUG] [Thread-172999] [transport.py] [_log()] userauth is OK
2026-04-11T16:25:58.413 [DEBUG] [Thread-172999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:25:58.413 [DEBUG] [Thread-172999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:25:58.413 [DEBUG] [Thread-172999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:25:58.413 [DEBUG] [Thread-172999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:25:58.437 [INFO] [Thread-172999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:25:58.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:25:59.164 [DEBUG] [Thread-172999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:25:59.164 [DEBUG] [Thread-172999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:25:59.165 [DEBUG] [Thread-172999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:25:59.205 [DEBUG] [Thread-172999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:25:59.205 [DEBUG] [Thread-172999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:25:59.209 [DEBUG] [Thread-172999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:25:59.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:25:59.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:25:59.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:25:59.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:25:59.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:25:59.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:25:59.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:25:59.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:25:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:25:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.600810   +0.00  +13.20   9.90     95  +12.60 3 0 1 3 1   887    0 0.45 -12.38 ----- 9.2 9.9 309.2 10.6 14.8 -0.2 14.7 -0.2 14.3 -0.0 14.6 -0.1
2026-04-11T16:25:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:25:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:25:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.600810
2026-04-11T16:25:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:25:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:25:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:25:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:25:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:25:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:25:31', tmtdew=0.08136, humidity=99.4334, cloud=0.0, wind=9.51192, temperature=13.2115, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:25:09.984', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:25:59.234 [DEBUG] [Thread-172999] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:25:59.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:25:59.328 [DEBUG] [Thread-173002] [transport.py] [_log()] starting thread (client mode): 0xa7950160
2026-04-11T16:25:59.329 [DEBUG] [Thread-173002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:25:59.344 [DEBUG] [Thread-173002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:25:59.344 [INFO] [Thread-173002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] client lang: <none>
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] server lang: <none>
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] kex follows: False
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:25:59.351 [DEBUG] [Thread-173002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:25:59.352 [DEBUG] [Thread-173002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:25:59.352 [DEBUG] [Thread-173002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:25:59.352 [DEBUG] [Thread-173002] [transport.py] [_log()] Compression: none
2026-04-11T16:25:59.352 [DEBUG] [Thread-173002] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:25:59.407 [DEBUG] [Thread-173002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:25:59.407 [DEBUG] [Thread-173002] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:25:59.407 [DEBUG] [Thread-173002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:25:59.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:25:59.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:25:59.464 [DEBUG] [Thread-173002] [transport.py] [_log()] userauth is OK
2026-04-11T16:25:59.464 [DEBUG] [Thread-173002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:25:59.464 [DEBUG] [Thread-173002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:25:59.464 [DEBUG] [Thread-173002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:25:59.464 [DEBUG] [Thread-173002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:25:59.480 [INFO] [Thread-173002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:25:59.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:25:59.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:26:00.296 [DEBUG] [Thread-173002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:26:00.296 [DEBUG] [Thread-173002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:26:00.344 [DEBUG] [Thread-173002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:26:00.345 [DEBUG] [Thread-173002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:26:00.354 [DEBUG] [Thread-173002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:26:00.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:26:00.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-04-11T16:26: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') -> 00000000
2026-04-11T16:26:00.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:26:00.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:26:00.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:26:00.391 [DEBUG] [Thread-173002] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:26:00.778 [DEBUG] [Thread-173004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:26:15.625 [DEBUG] [Thread-173005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:26:15.832 [DEBUG] [Thread-173006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:26:27.358 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:26:27.359 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:26:30.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:26:30.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:26:30.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-04-11T16:26:30.869 [DEBUG] [Thread-173007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:26:31.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 26, 7), 0.081405, 99.4331, 0.0, 8.87688, 13.2279, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:26:31.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:26:07
2026-04-11T16:26:32.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:26:32.195 [DEBUG] [Thread-173008] [transport.py] [_log()] starting thread (client mode): 0xae5a5720
2026-04-11T16:26:32.195 [DEBUG] [Thread-173008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:26:32.217 [DEBUG] [Thread-173008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:26:32.217 [INFO] [Thread-173008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:26:32.220 [DEBUG] [Thread-173008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] client lang: <none>
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] server lang: <none>
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] kex follows: False
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:26:32.221 [DEBUG] [Thread-173008] [transport.py] [_log()] Compression: none
2026-04-11T16:26:32.222 [DEBUG] [Thread-173008] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:26:32.240 [DEBUG] [Thread-173008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:26:32.241 [DEBUG] [Thread-173008] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:26:32.241 [DEBUG] [Thread-173008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:26:32.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:26:32.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:26:32.243 [DEBUG] [Thread-173008] [transport.py] [_log()] userauth is OK
2026-04-11T16:26:32.244 [DEBUG] [Thread-173008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:26:32.244 [DEBUG] [Thread-173008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:26:32.244 [DEBUG] [Thread-173008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:26:32.244 [DEBUG] [Thread-173008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:26:32.268 [INFO] [Thread-173008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:26:32.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:26:33.004 [DEBUG] [Thread-173008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:26:33.004 [DEBUG] [Thread-173008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:26:33.005 [DEBUG] [Thread-173008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:26:33.046 [DEBUG] [Thread-173008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:26:33.046 [DEBUG] [Thread-173008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:26:33.048 [DEBUG] [Thread-173008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:26:33.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:26:33.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:26:33.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:26:33.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:26:33.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:26:33.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:26:33.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.601505   +0.00  +13.20  11.16     96  +12.60 3 0 1 3 1   887    0 0.39 -13.36 ----- 12.5 11.2 290.8 12.2 14.8 -0.4 14.7 -0.1 14.3 0.1 14.6 0.1
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.601505
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:26:33.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:26:07', tmtdew=0.081405, humidity=99.4331, cloud=0.0, wind=8.87688, temperature=13.2279, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:26:10.032', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:26:33.067 [DEBUG] [Thread-173008] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:26:33.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:26:33.149 [DEBUG] [Thread-173011] [transport.py] [_log()] starting thread (client mode): 0xae5f2050
2026-04-11T16:26:33.149 [DEBUG] [Thread-173011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:26:33.164 [DEBUG] [Thread-173011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:26:33.164 [INFO] [Thread-173011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:26:33.172 [DEBUG] [Thread-173011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:26:33.172 [DEBUG] [Thread-173011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:26:33.172 [DEBUG] [Thread-173011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:26:33.172 [DEBUG] [Thread-173011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:26:33.172 [DEBUG] [Thread-173011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:26:33.172 [DEBUG] [Thread-173011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] client lang: <none>
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] server lang: <none>
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] kex follows: False
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:26:33.173 [DEBUG] [Thread-173011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:26:33.174 [DEBUG] [Thread-173011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:26:33.174 [DEBUG] [Thread-173011] [transport.py] [_log()] Compression: none
2026-04-11T16:26:33.174 [DEBUG] [Thread-173011] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:26:33.230 [DEBUG] [Thread-173011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:26:33.231 [DEBUG] [Thread-173011] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:26:33.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:26:33.232 [DEBUG] [Thread-173011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:26:33.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:26:33.286 [DEBUG] [Thread-173011] [transport.py] [_log()] userauth is OK
2026-04-11T16:26:33.287 [DEBUG] [Thread-173011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:26:33.287 [DEBUG] [Thread-173011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:26:33.287 [DEBUG] [Thread-173011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:26:33.287 [DEBUG] [Thread-173011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:26:33.306 [INFO] [Thread-173011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:26:33.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:26:33.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:26:34.127 [DEBUG] [Thread-173011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:26:34.127 [DEBUG] [Thread-173011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:26:34.175 [DEBUG] [Thread-173011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:26:34.175 [DEBUG] [Thread-173011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:26:34.185 [DEBUG] [Thread-173011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:26:34.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:26:34.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-04-11T16:26:34.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-04-11T16:26:34.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:26:34.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:26:34.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:26:34.222 [DEBUG] [Thread-173011] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:26:45.906 [DEBUG] [Thread-173013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:00.954 [DEBUG] [Thread-173014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:27:04.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:27:04.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-04-11T16:27:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 26, 42), 0.15767, 98.8994, 0.0, 7.69464, 13.789, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:27:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:26:42
2026-04-11T16:27:05.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:27:06.056 [DEBUG] [Thread-173015] [transport.py] [_log()] starting thread (client mode): 0xa7952710
2026-04-11T16:27:06.056 [DEBUG] [Thread-173015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:27:06.076 [DEBUG] [Thread-173015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:27:06.076 [INFO] [Thread-173015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:27:06.077 [DEBUG] [Thread-173015] [transport.py] [_log()] client lang: <none>
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] server lang: <none>
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] kex follows: False
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] Compression: none
2026-04-11T16:27:06.078 [DEBUG] [Thread-173015] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:27:06.087 [DEBUG] [Thread-173015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:27:06.088 [DEBUG] [Thread-173015] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:27:06.088 [DEBUG] [Thread-173015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:27:06.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:27:06.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:27:06.089 [DEBUG] [Thread-173015] [transport.py] [_log()] userauth is OK
2026-04-11T16:27:06.090 [DEBUG] [Thread-173015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:27:06.090 [DEBUG] [Thread-173015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:27:06.090 [DEBUG] [Thread-173015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:27:06.090 [DEBUG] [Thread-173015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:27:06.107 [INFO] [Thread-173015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:27:06.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:27:06.856 [DEBUG] [Thread-173015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:27:06.857 [DEBUG] [Thread-173015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:27:06.857 [DEBUG] [Thread-173015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:27:06.897 [DEBUG] [Thread-173015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:27:06.897 [DEBUG] [Thread-173015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:27:06.901 [DEBUG] [Thread-173015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:27:06.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:27:06.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:27:06.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:27:06.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:27:06.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:27:06.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:27:06.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:27:06.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:27:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:27:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.601852   +0.00  +13.20   8.20     95  +12.50 3 0 1 3 1   887    0 0.37 -13.92 ----- 9.3 8.2 292.4 14.6 14.8 -0.2 14.7 -0.2 14.3 -0.3 14.6 0.2
2026-04-11T16:27:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:27:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:27:06.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.601852
2026-04-11T16:27:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:27:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:27:06.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:27:06.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:27:06.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:27:06.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:26:42', tmtdew=0.15767, humidity=98.8994, cloud=0.0, wind=7.69464, temperature=13.789, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:26:40.013', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:27:06.928 [DEBUG] [Thread-173015] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:27:07.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:27:07.020 [DEBUG] [Thread-173018] [transport.py] [_log()] starting thread (client mode): 0xa7951690
2026-04-11T16:27:07.020 [DEBUG] [Thread-173018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:27:07.034 [DEBUG] [Thread-173018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:27:07.034 [INFO] [Thread-173018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] client lang: <none>
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] server lang: <none>
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] kex follows: False
2026-04-11T16:27:07.042 [DEBUG] [Thread-173018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:27:07.043 [DEBUG] [Thread-173018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:27:07.043 [DEBUG] [Thread-173018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:27:07.043 [DEBUG] [Thread-173018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:27:07.043 [DEBUG] [Thread-173018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:27:07.043 [DEBUG] [Thread-173018] [transport.py] [_log()] Compression: none
2026-04-11T16:27:07.043 [DEBUG] [Thread-173018] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:27:07.101 [DEBUG] [Thread-173018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:27:07.102 [DEBUG] [Thread-173018] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:27:07.102 [DEBUG] [Thread-173018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:27:07.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:27:07.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:27:07.161 [DEBUG] [Thread-173018] [transport.py] [_log()] userauth is OK
2026-04-11T16:27:07.161 [DEBUG] [Thread-173018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:27:07.162 [DEBUG] [Thread-173018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:27:07.162 [DEBUG] [Thread-173018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:27:07.162 [DEBUG] [Thread-173018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:27:07.179 [INFO] [Thread-173018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:27:07.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:27:07.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:27:08.029 [DEBUG] [Thread-173018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:27:08.029 [DEBUG] [Thread-173018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:27:08.077 [DEBUG] [Thread-173018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:27:08.077 [DEBUG] [Thread-173018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:27:08.086 [DEBUG] [Thread-173018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:27:08.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:27:08.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-04-11T16:27:08.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-04-11T16:27:08.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:27:08.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:27:08.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:27:08.119 [DEBUG] [Thread-173018] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:27:15.658 [DEBUG] [Thread-173020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:15.992 [DEBUG] [Thread-173021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:27.496 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:27.498 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:31.048 [DEBUG] [Thread-173022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:27:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:27:38.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:27:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:27:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 27, 18), 0.13656, 99.4, 0.0, 9.60012, 13.2279, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:27:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:27:18
2026-04-11T16:27:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:27:39.962 [DEBUG] [Thread-173023] [transport.py] [_log()] starting thread (client mode): 0xae5e4490
2026-04-11T16:27:39.963 [DEBUG] [Thread-173023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:27:39.983 [DEBUG] [Thread-173023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:27:39.983 [INFO] [Thread-173023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] client lang: <none>
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] server lang: <none>
2026-04-11T16:27:39.986 [DEBUG] [Thread-173023] [transport.py] [_log()] kex follows: False
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] Compression: none
2026-04-11T16:27:39.987 [DEBUG] [Thread-173023] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:27:40.003 [DEBUG] [Thread-173023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:27:40.003 [DEBUG] [Thread-173023] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:27:40.004 [DEBUG] [Thread-173023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:27:40.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:27:40.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:27:40.006 [DEBUG] [Thread-173023] [transport.py] [_log()] userauth is OK
2026-04-11T16:27:40.006 [DEBUG] [Thread-173023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:27:40.006 [DEBUG] [Thread-173023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:27:40.007 [DEBUG] [Thread-173023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:27:40.007 [DEBUG] [Thread-173023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:27:40.030 [INFO] [Thread-173023] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:27:40.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:27:40.817 [DEBUG] [Thread-173023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:27:40.817 [DEBUG] [Thread-173023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:27:40.817 [DEBUG] [Thread-173023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:27:40.858 [DEBUG] [Thread-173023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:27:40.858 [DEBUG] [Thread-173023] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:27:40.860 [DEBUG] [Thread-173023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:27:40.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:27:40.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:27:40.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:27:40.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:27:40.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:27:40.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:27:40.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:27:40.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.602199   +0.00  +13.20   9.55     96  +12.60 3 0 1 3 1   887    0 0.37 -13.71 ----- 10.0 9.6 300.8 12.3 14.8 -0.2 14.7 0.0 14.3 0.0 14.6 0.1
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.602199
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:27:40.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:27:18', tmtdew=0.13656, humidity=99.4, cloud=0.0, wind=9.60012, temperature=13.2279, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:27:09.994', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:27:40.880 [DEBUG] [Thread-173023] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:27:40.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:27:40.962 [DEBUG] [Thread-173026] [transport.py] [_log()] starting thread (client mode): 0xae5e4460
2026-04-11T16:27:40.962 [DEBUG] [Thread-173026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:27:40.976 [DEBUG] [Thread-173026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:27:40.976 [INFO] [Thread-173026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] client lang: <none>
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] server lang: <none>
2026-04-11T16:27:40.984 [DEBUG] [Thread-173026] [transport.py] [_log()] kex follows: False
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] Compression: none
2026-04-11T16:27:40.985 [DEBUG] [Thread-173026] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:27:41.043 [DEBUG] [Thread-173026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:27:41.044 [DEBUG] [Thread-173026] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:27:41.044 [DEBUG] [Thread-173026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:27:41.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:27:41.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:27:41.101 [DEBUG] [Thread-173026] [transport.py] [_log()] userauth is OK
2026-04-11T16:27:41.102 [DEBUG] [Thread-173026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:27:41.102 [DEBUG] [Thread-173026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:27:41.102 [DEBUG] [Thread-173026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:27:41.102 [DEBUG] [Thread-173026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:27:41.122 [INFO] [Thread-173026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:27:41.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:27:41.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:27:41.938 [DEBUG] [Thread-173026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:27:41.938 [DEBUG] [Thread-173026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:27:41.986 [DEBUG] [Thread-173026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:27:41.986 [DEBUG] [Thread-173026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:27:41.995 [DEBUG] [Thread-173026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:27:42.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:27:42.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:27:42.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-04-11T16:27:42.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:27:42.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:27:42.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:27:42.032 [DEBUG] [Thread-173026] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:27:46.088 [DEBUG] [Thread-173028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:01.146 [DEBUG] [Thread-173029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:12.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:28:12.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:28:12.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-04-11T16:28:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 27, 53), 0.16792, 98.8336, 0.0, 10.5876, 13.7893, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:28:13.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:27:53
2026-04-11T16:28:13.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:28:13.942 [DEBUG] [Thread-173030] [transport.py] [_log()] starting thread (client mode): 0xa79536d0
2026-04-11T16:28:13.942 [DEBUG] [Thread-173030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:28:13.962 [DEBUG] [Thread-173030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:28:13.962 [INFO] [Thread-173030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:28:13.966 [DEBUG] [Thread-173030] [transport.py] [_log()] client lang: <none>
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] server lang: <none>
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] kex follows: False
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] Compression: none
2026-04-11T16:28:13.967 [DEBUG] [Thread-173030] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:28:13.986 [DEBUG] [Thread-173030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:28:13.987 [DEBUG] [Thread-173030] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:28:13.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:28:13.988 [DEBUG] [Thread-173030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:28:13.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:28:13.990 [DEBUG] [Thread-173030] [transport.py] [_log()] userauth is OK
2026-04-11T16:28:13.991 [DEBUG] [Thread-173030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:28:13.991 [DEBUG] [Thread-173030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:28:13.991 [DEBUG] [Thread-173030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:28:13.991 [DEBUG] [Thread-173030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:28:14.015 [INFO] [Thread-173030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:28:14.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:28:14.778 [DEBUG] [Thread-173030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:28:14.779 [DEBUG] [Thread-173030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:28:14.779 [DEBUG] [Thread-173030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:28:14.820 [DEBUG] [Thread-173030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:28:14.820 [DEBUG] [Thread-173030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:28:14.824 [DEBUG] [Thread-173030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:28:14.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:28:14.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:28:14.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:28:14.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:28:14.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:28:14.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:28:14.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:28:14.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:28:14.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:28:14.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.602547   +0.00  +13.00  12.78     95  +12.40 3 0 1 3 1   887    0 0.34 -14.45 ----- 13.0 12.8 295.6 13.7 14.7 -0.4 14.7 -0.5 14.2 -0.4 14.6 -0.1
2026-04-11T16:28:14.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:28:14.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:28:14.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.602547
2026-04-11T16:28:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:28:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:28:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:28:14.846 [DEBUG] [Thread-173030] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:28:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:28:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:28:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:27:53', tmtdew=0.16792, humidity=98.8336, cloud=0.0, wind=10.5876, temperature=13.7893, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:27:40.061', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:28:14.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:28:14.939 [DEBUG] [Thread-173033] [transport.py] [_log()] starting thread (client mode): 0xae5e5270
2026-04-11T16:28:14.939 [DEBUG] [Thread-173033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:28:14.954 [DEBUG] [Thread-173033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:28:14.954 [INFO] [Thread-173033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:28:14.961 [DEBUG] [Thread-173033] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:28:14.962 [DEBUG] [Thread-173033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] client lang: <none>
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] server lang: <none>
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] kex follows: False
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] Compression: none
2026-04-11T16:28:14.963 [DEBUG] [Thread-173033] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:28:15.020 [DEBUG] [Thread-173033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:28:15.021 [DEBUG] [Thread-173033] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:28:15.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:28:15.022 [DEBUG] [Thread-173033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:28:15.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:28:15.078 [DEBUG] [Thread-173033] [transport.py] [_log()] userauth is OK
2026-04-11T16:28:15.078 [DEBUG] [Thread-173033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:28:15.078 [DEBUG] [Thread-173033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:28:15.078 [DEBUG] [Thread-173033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:28:15.078 [DEBUG] [Thread-173033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:28:15.097 [INFO] [Thread-173033] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:28:15.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:28:15.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:28:15.692 [DEBUG] [Thread-173035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:15.914 [DEBUG] [Thread-173033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:28:15.914 [DEBUG] [Thread-173033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:28:15.962 [DEBUG] [Thread-173033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:28:15.962 [DEBUG] [Thread-173033] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:28:15.972 [DEBUG] [Thread-173033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:28:15.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:28:15.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-04-11T16:28:15.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:28:15.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:28:16.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:28:16.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:28:16.009 [DEBUG] [Thread-173033] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:28:16.183 [DEBUG] [Thread-173036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:27.639 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:27.641 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:31.236 [DEBUG] [Thread-173037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:28:46.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:28:46.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-04-11T16:28:46.276 [DEBUG] [Thread-173038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:28:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 28, 29), 0.131355, 99.4335, 0.0, 10.8349, 13.1947, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:28:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:28:29
2026-04-11T16:28:47.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:28:47.797 [DEBUG] [Thread-173039] [transport.py] [_log()] starting thread (client mode): 0xae5e4040
2026-04-11T16:28:47.797 [DEBUG] [Thread-173039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:28:47.818 [DEBUG] [Thread-173039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:28:47.818 [INFO] [Thread-173039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] client lang: <none>
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] server lang: <none>
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] kex follows: False
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] Compression: none
2026-04-11T16:28:47.822 [DEBUG] [Thread-173039] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:28:47.838 [DEBUG] [Thread-173039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:28:47.838 [DEBUG] [Thread-173039] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:28:47.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:28:47.839 [DEBUG] [Thread-173039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:28:47.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:28:47.840 [DEBUG] [Thread-173039] [transport.py] [_log()] userauth is OK
2026-04-11T16:28:47.840 [DEBUG] [Thread-173039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:28:47.841 [DEBUG] [Thread-173039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:28:47.841 [DEBUG] [Thread-173039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:28:47.841 [DEBUG] [Thread-173039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:28:47.876 [INFO] [Thread-173039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:28:47.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:28:48.676 [DEBUG] [Thread-173039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:28:48.676 [DEBUG] [Thread-173039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:28:48.677 [DEBUG] [Thread-173039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:28:48.717 [DEBUG] [Thread-173039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:28:48.717 [DEBUG] [Thread-173039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:28:48.721 [DEBUG] [Thread-173039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:28:48.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:28:48.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:28:48.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:28:48.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:28:48.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:28:48.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:28:48.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:28:48.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:28:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:28:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.602894   +0.00  +13.00   9.32     95  +12.30 3 0 1 3 1   887    0 0.33 -14.64 ----- 10.4 9.3 289.9 12.5 14.7 -0.3 14.7 -0.2 14.2 -0.1 14.5 0.0
2026-04-11T16:28:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:28:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:28:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.602894
2026-04-11T16:28:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:28:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:28:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 3
2026-04-11T16:28:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:28:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 0
2026-04-11T16:28:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:28:29', tmtdew=0.131355, humidity=99.4335, cloud=0.0, wind=10.8349, temperature=13.1947, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:28:10.042', atlas_cloud=0, atlas_rain=3, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:28:48.745 [DEBUG] [Thread-173039] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:28:48.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:28:48.838 [DEBUG] [Thread-173042] [transport.py] [_log()] starting thread (client mode): 0xa79512a0
2026-04-11T16:28:48.838 [DEBUG] [Thread-173042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:28:48.854 [DEBUG] [Thread-173042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:28:48.855 [INFO] [Thread-173042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:28:48.862 [DEBUG] [Thread-173042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:28:48.862 [DEBUG] [Thread-173042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] client lang: <none>
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] server lang: <none>
2026-04-11T16:28:48.863 [DEBUG] [Thread-173042] [transport.py] [_log()] kex follows: False
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] Compression: none
2026-04-11T16:28:48.864 [DEBUG] [Thread-173042] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:28:48.922 [DEBUG] [Thread-173042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:28:48.923 [DEBUG] [Thread-173042] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:28:48.923 [DEBUG] [Thread-173042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:28:48.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:28:48.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:28:48.978 [DEBUG] [Thread-173042] [transport.py] [_log()] userauth is OK
2026-04-11T16:28:48.978 [DEBUG] [Thread-173042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:28:48.979 [DEBUG] [Thread-173042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:28:48.979 [DEBUG] [Thread-173042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:28:48.979 [DEBUG] [Thread-173042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:28:48.999 [INFO] [Thread-173042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:28:49.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:28:49.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:28:49.852 [DEBUG] [Thread-173042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:28:49.853 [DEBUG] [Thread-173042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:28:49.900 [DEBUG] [Thread-173042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:28:49.900 [DEBUG] [Thread-173042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:28:49.908 [DEBUG] [Thread-173042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:28:49.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:28:49.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-04-11T16:28:49.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-04-11T16:28:49.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:28:49.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:28:49.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:28:49.942 [DEBUG] [Thread-173042] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:29:01.313 [DEBUG] [Thread-173044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:15.719 [DEBUG] [Thread-173045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:16.374 [DEBUG] [Thread-173046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:29:19.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:29:19.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-04-11T16:29:21.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 29, 4), 0.13649, 99.4004, 0.0, 11.3465, 13.1616, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:29:21.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:29:04
2026-04-11T16:29:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:29:21.730 [DEBUG] [Thread-173047] [transport.py] [_log()] starting thread (client mode): 0xae5f35b0
2026-04-11T16:29:21.730 [DEBUG] [Thread-173047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:29:21.750 [DEBUG] [Thread-173047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:29:21.750 [INFO] [Thread-173047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] client lang: <none>
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] server lang: <none>
2026-04-11T16:29:21.754 [DEBUG] [Thread-173047] [transport.py] [_log()] kex follows: False
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] Compression: none
2026-04-11T16:29:21.755 [DEBUG] [Thread-173047] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:29:21.762 [DEBUG] [Thread-173047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:29:21.763 [DEBUG] [Thread-173047] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:29:21.763 [DEBUG] [Thread-173047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:29:21.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:29:21.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:29:21.764 [DEBUG] [Thread-173047] [transport.py] [_log()] userauth is OK
2026-04-11T16:29:21.764 [DEBUG] [Thread-173047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:29:21.764 [DEBUG] [Thread-173047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:29:21.764 [DEBUG] [Thread-173047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:29:21.764 [DEBUG] [Thread-173047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:29:21.776 [INFO] [Thread-173047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:29:21.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:29:22.566 [DEBUG] [Thread-173047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:29:22.567 [DEBUG] [Thread-173047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:29:22.568 [DEBUG] [Thread-173047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:29:22.608 [DEBUG] [Thread-173047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:29:22.609 [DEBUG] [Thread-173047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:29:22.612 [DEBUG] [Thread-173047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:29:22.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:29:22.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:29:22.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:29:22.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:29:22.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:29:22.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:29:22.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:29:22.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:29:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:29:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.603241 -999.00  +13.00   9.67     95  +12.30 1 3 1 3 1   887    0 0.34 -14.54 ----- 11.5 9.7 302.4 12.7 14.8 -0.3 14.7 -0.2 -999.0 -999.0 14.6 0.0
2026-04-11T16:29:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:29:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:29:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.603241
2026-04-11T16:29:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:29:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:29:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:29:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:29:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:29:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:29:04', tmtdew=0.13649, humidity=99.4004, cloud=0.0, wind=11.3465, temperature=13.1616, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:28:40.022', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:29:22.640 [DEBUG] [Thread-173047] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:29:22.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:29:22.736 [DEBUG] [Thread-173050] [transport.py] [_log()] starting thread (client mode): 0xae5f1bd0
2026-04-11T16:29:22.736 [DEBUG] [Thread-173050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:29:22.751 [DEBUG] [Thread-173050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:29:22.751 [INFO] [Thread-173050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:29:22.758 [DEBUG] [Thread-173050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:29:22.758 [DEBUG] [Thread-173050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:29:22.758 [DEBUG] [Thread-173050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:29:22.758 [DEBUG] [Thread-173050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:22.758 [DEBUG] [Thread-173050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] client lang: <none>
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] server lang: <none>
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] kex follows: False
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] Compression: none
2026-04-11T16:29:22.759 [DEBUG] [Thread-173050] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:29:22.815 [DEBUG] [Thread-173050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:29:22.816 [DEBUG] [Thread-173050] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:29:22.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:29:22.817 [DEBUG] [Thread-173050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:29:22.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:29:22.872 [DEBUG] [Thread-173050] [transport.py] [_log()] userauth is OK
2026-04-11T16:29:22.872 [DEBUG] [Thread-173050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:29:22.872 [DEBUG] [Thread-173050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:29:22.873 [DEBUG] [Thread-173050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:29:22.873 [DEBUG] [Thread-173050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:29:22.898 [INFO] [Thread-173050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:29: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-04-11T16:29:22.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:29:23.730 [DEBUG] [Thread-173050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:29:23.730 [DEBUG] [Thread-173050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:29:23.778 [DEBUG] [Thread-173050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:29:23.778 [DEBUG] [Thread-173050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:29:23.788 [DEBUG] [Thread-173050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:29:23.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:29:23.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-04-11T16:29:23.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-04-11T16:29:23.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:29:23.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:29:23.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:29:23.825 [DEBUG] [Thread-173050] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:29:27.781 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:27.782 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:31.413 [DEBUG] [Thread-173052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:46.468 [DEBUG] [Thread-173053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:29:53.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:29:53.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:29: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-04-11T16:29:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 29, 39), 0.17293, 98.8008, 0.0, 10.5876, 13.6237, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:29:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:29:39
2026-04-11T16:29:55.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:29:55.681 [DEBUG] [Thread-173054] [transport.py] [_log()] starting thread (client mode): 0xae5f2c50
2026-04-11T16:29:55.682 [DEBUG] [Thread-173054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:29:55.702 [DEBUG] [Thread-173054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:29:55.702 [INFO] [Thread-173054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:55.706 [DEBUG] [Thread-173054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] client lang: <none>
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] server lang: <none>
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] kex follows: False
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:29:55.707 [DEBUG] [Thread-173054] [transport.py] [_log()] Compression: none
2026-04-11T16:29:55.708 [DEBUG] [Thread-173054] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:29:55.725 [DEBUG] [Thread-173054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:29:55.726 [DEBUG] [Thread-173054] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:29:55.727 [DEBUG] [Thread-173054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:29:55.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:29:55.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:29:55.729 [DEBUG] [Thread-173054] [transport.py] [_log()] userauth is OK
2026-04-11T16:29:55.729 [DEBUG] [Thread-173054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:29:55.729 [DEBUG] [Thread-173054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:29:55.730 [DEBUG] [Thread-173054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:29:55.730 [DEBUG] [Thread-173054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:29:55.753 [INFO] [Thread-173054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:29:55.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:29:56.546 [DEBUG] [Thread-173054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:29:56.546 [DEBUG] [Thread-173054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:29:56.547 [DEBUG] [Thread-173054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:29:56.587 [DEBUG] [Thread-173054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:29:56.587 [DEBUG] [Thread-173054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:29:56.590 [DEBUG] [Thread-173054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:29:56.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:29:56.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:29:56.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:29:56.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:29:56.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:29:56.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:29:56.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:29:56.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:29:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:29:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.603588 -999.00  +13.00  10.71     95  +12.30 1 3 1 3 1   887    0 0.33 -14.42 ----- 10.4 10.7 301.4 11.9 14.7 -0.4 14.7 -0.1 14.2 -0.1 14.5 -0.0
2026-04-11T16:29:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:29:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:29:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.603588
2026-04-11T16:29:56.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:29:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:29:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:29:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:29:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:29:56.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:29:39', tmtdew=0.17293, humidity=98.8008, cloud=0.0, wind=10.5876, temperature=13.6237, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:29:10.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:29:56.617 [DEBUG] [Thread-173054] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:29:56.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:29:56.710 [DEBUG] [Thread-173057] [transport.py] [_log()] starting thread (client mode): 0xae5e5900
2026-04-11T16:29:56.710 [DEBUG] [Thread-173057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:29:56.724 [DEBUG] [Thread-173057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:29:56.724 [INFO] [Thread-173057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] client lang: <none>
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] server lang: <none>
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] kex follows: False
2026-04-11T16:29:56.732 [DEBUG] [Thread-173057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:29:56.733 [DEBUG] [Thread-173057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:29:56.733 [DEBUG] [Thread-173057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:29:56.733 [DEBUG] [Thread-173057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:29:56.733 [DEBUG] [Thread-173057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:29:56.733 [DEBUG] [Thread-173057] [transport.py] [_log()] Compression: none
2026-04-11T16:29:56.733 [DEBUG] [Thread-173057] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:29:56.790 [DEBUG] [Thread-173057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:29:56.790 [DEBUG] [Thread-173057] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:29:56.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:29:56.792 [DEBUG] [Thread-173057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:29:56.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:29:56.849 [DEBUG] [Thread-173057] [transport.py] [_log()] userauth is OK
2026-04-11T16:29:56.849 [DEBUG] [Thread-173057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:29:56.850 [DEBUG] [Thread-173057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:29:56.850 [DEBUG] [Thread-173057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:29:56.850 [DEBUG] [Thread-173057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:29:56.868 [INFO] [Thread-173057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:29:56.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:29:56.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:29:57.709 [DEBUG] [Thread-173057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:29:57.709 [DEBUG] [Thread-173057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:29:57.757 [DEBUG] [Thread-173057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:29:57.758 [DEBUG] [Thread-173057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:29:57.766 [DEBUG] [Thread-173057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:29:57.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:29:57.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-04-11T16:29:57.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:29:57.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:29:57.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:29:57.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:29:57.799 [DEBUG] [Thread-173057] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:30:01.503 [DEBUG] [Thread-173059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:30:15.782 [DEBUG] [Thread-173060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:30:16.545 [DEBUG] [Thread-173061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:30:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:30:27.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:30:27.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-04-11T16:30:27.921 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:30:27.922 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:30:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 30, 15), 0.13644, 99.4005, 0.0, 9.0702, 13.112, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:30:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:30:15
2026-04-11T16:30:29.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:30:29.665 [DEBUG] [Thread-173062] [transport.py] [_log()] starting thread (client mode): 0xae5e6a10
2026-04-11T16:30:29.665 [DEBUG] [Thread-173062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:30:29.686 [DEBUG] [Thread-173062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:30:29.686 [INFO] [Thread-173062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:30:29.687 [DEBUG] [Thread-173062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] client lang: <none>
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] server lang: <none>
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] kex follows: False
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] Compression: none
2026-04-11T16:30:29.688 [DEBUG] [Thread-173062] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:30:29.696 [DEBUG] [Thread-173062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:30:29.697 [DEBUG] [Thread-173062] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:30:29.697 [DEBUG] [Thread-173062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:30:29.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:30:29.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:30:29.699 [DEBUG] [Thread-173062] [transport.py] [_log()] userauth is OK
2026-04-11T16:30:29.699 [DEBUG] [Thread-173062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:30:29.700 [DEBUG] [Thread-173062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:30:29.700 [DEBUG] [Thread-173062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:30:29.700 [DEBUG] [Thread-173062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:30:29.718 [INFO] [Thread-173062] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:30:29.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:30:30.479 [DEBUG] [Thread-173062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:30:30.479 [DEBUG] [Thread-173062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:30:30.480 [DEBUG] [Thread-173062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:30:30.520 [DEBUG] [Thread-173062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:30:30.520 [DEBUG] [Thread-173062] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:30:30.524 [DEBUG] [Thread-173062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:30:30.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:30:30.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:30:30.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:30:30.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:30:30.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:30:30.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:30:30.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:30:30.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:30:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:30:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.603935 -999.00  +13.10   9.16     95  +12.40 1 3 1 3 1   887    0 0.31 -15.93 ----- 8.7 9.2 308.8 12.1 14.7 -0.3 14.7 -0.1 14.2 -0.0 14.5 -0.1
2026-04-11T16:30:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:30:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:30:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.603935
2026-04-11T16:30:30.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:30:30.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:30:30.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:30:30.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:30:30.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:30:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:30:15', tmtdew=0.13644, humidity=99.4005, cloud=0.0, wind=9.0702, temperature=13.112, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:29:39.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:30:30.547 [DEBUG] [Thread-173062] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:30:30.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:30:30.642 [DEBUG] [Thread-173065] [transport.py] [_log()] starting thread (client mode): 0xa7950d30
2026-04-11T16:30:30.642 [DEBUG] [Thread-173065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:30:30.655 [DEBUG] [Thread-173065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:30:30.656 [INFO] [Thread-173065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] client lang: <none>
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] server lang: <none>
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] kex follows: False
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:30:30.663 [DEBUG] [Thread-173065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:30:30.664 [DEBUG] [Thread-173065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:30:30.664 [DEBUG] [Thread-173065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:30:30.664 [DEBUG] [Thread-173065] [transport.py] [_log()] Compression: none
2026-04-11T16:30:30.664 [DEBUG] [Thread-173065] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:30:30.722 [DEBUG] [Thread-173065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:30:30.723 [DEBUG] [Thread-173065] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:30:30.723 [DEBUG] [Thread-173065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:30:30.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:30:30.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:30:30.783 [DEBUG] [Thread-173065] [transport.py] [_log()] userauth is OK
2026-04-11T16:30:30.783 [DEBUG] [Thread-173065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:30:30.783 [DEBUG] [Thread-173065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:30:30.783 [DEBUG] [Thread-173065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:30:30.783 [DEBUG] [Thread-173065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:30:30.803 [INFO] [Thread-173065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:30:30.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:30:30.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:30:31.586 [DEBUG] [Thread-173067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:30:31.610 [DEBUG] [Thread-173065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:30:31.611 [DEBUG] [Thread-173065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:30:31.662 [DEBUG] [Thread-173065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:30:31.663 [DEBUG] [Thread-173065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:30:31.674 [DEBUG] [Thread-173065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:30:31.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:30:31.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:30:31.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:30:31.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:30:31.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:30:31.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:30:31.721 [DEBUG] [Thread-173065] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:30:46.645 [DEBUG] [Thread-173068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:01.681 [DEBUG] [Thread-173069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:31:01.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:31:01.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:31:03.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 30, 50), 0.16765, 98.8345, 0.0, 10.3406, 13.5246, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:31:03.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:30:50
2026-04-11T16:31:03.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:31:03.573 [DEBUG] [Thread-173070] [transport.py] [_log()] starting thread (client mode): 0xae5341c0
2026-04-11T16:31:03.573 [DEBUG] [Thread-173070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:31:03.593 [DEBUG] [Thread-173070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:31:03.594 [INFO] [Thread-173070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] client lang: <none>
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] server lang: <none>
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] kex follows: False
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] Compression: none
2026-04-11T16:31:03.597 [DEBUG] [Thread-173070] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:31:03.615 [DEBUG] [Thread-173070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:31:03.615 [DEBUG] [Thread-173070] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:31:03.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:31:03.616 [DEBUG] [Thread-173070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:31:03.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:31:03.619 [DEBUG] [Thread-173070] [transport.py] [_log()] userauth is OK
2026-04-11T16:31:03.619 [DEBUG] [Thread-173070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:31:03.619 [DEBUG] [Thread-173070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:31:03.619 [DEBUG] [Thread-173070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:31:03.619 [DEBUG] [Thread-173070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:31:03.644 [INFO] [Thread-173070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:31:03.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:31:04.460 [DEBUG] [Thread-173070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:31:04.461 [DEBUG] [Thread-173070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:31:04.461 [DEBUG] [Thread-173070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:31:04.502 [DEBUG] [Thread-173070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:31:04.502 [DEBUG] [Thread-173070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:31:04.504 [DEBUG] [Thread-173070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:31:04.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:31:04.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:31:04.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:31:04.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:31:04.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:31:04.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:31:04.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.604288 -999.00  +13.10   9.77     95  +12.50 1 3 1 3 1   887    0 0.29 -16.35 ----- 9.5 9.8 310.8 11.2 14.7 -0.3 14.7 -0.2 14.2 -0.1 14.5 0.1
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.604288
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:31:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:30:50', tmtdew=0.16765, humidity=98.8345, cloud=0.0, wind=10.3406, temperature=13.5246, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:30:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:31:04.523 [DEBUG] [Thread-173070] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:31:04.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:31:04.605 [DEBUG] [Thread-173073] [transport.py] [_log()] starting thread (client mode): 0xae51a0b0
2026-04-11T16:31:04.605 [DEBUG] [Thread-173073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:31:04.619 [DEBUG] [Thread-173073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:31:04.619 [INFO] [Thread-173073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:31:04.627 [DEBUG] [Thread-173073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:31:04.627 [DEBUG] [Thread-173073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:31:04.627 [DEBUG] [Thread-173073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:31:04.627 [DEBUG] [Thread-173073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] client lang: <none>
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] server lang: <none>
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] kex follows: False
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] Compression: none
2026-04-11T16:31:04.628 [DEBUG] [Thread-173073] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:31:04.688 [DEBUG] [Thread-173073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:31:04.688 [DEBUG] [Thread-173073] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:31:04.689 [DEBUG] [Thread-173073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:31:04.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:31:04.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:31:04.743 [DEBUG] [Thread-173073] [transport.py] [_log()] userauth is OK
2026-04-11T16:31:04.743 [DEBUG] [Thread-173073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:31:04.743 [DEBUG] [Thread-173073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:31:04.743 [DEBUG] [Thread-173073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:31:04.743 [DEBUG] [Thread-173073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:31:04.757 [INFO] [Thread-173073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:31:04.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:31:04.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:31:05.594 [DEBUG] [Thread-173073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:31:05.594 [DEBUG] [Thread-173073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:31:05.643 [DEBUG] [Thread-173073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:31:05.643 [DEBUG] [Thread-173073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:31:05.652 [DEBUG] [Thread-173073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:31:05.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:31:05.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:31:05.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:31:05.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:31:05.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:31:05.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:31:05.688 [DEBUG] [Thread-173073] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:31:15.837 [DEBUG] [Thread-173075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:16.712 [DEBUG] [Thread-173076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:28.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:28.063 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:31.767 [DEBUG] [Thread-173077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:31:35.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:31:35.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:31:35.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-04-11T16:31:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 31, 26), 0.13127, 99.4338, 0.0, 9.81108, 13.112, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:31:36.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:31:26
2026-04-11T16:31:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:31:37.524 [DEBUG] [Thread-173078] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T16:31:37.524 [DEBUG] [Thread-173078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:31:37.544 [DEBUG] [Thread-173078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:31:37.544 [INFO] [Thread-173078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:31:37.547 [DEBUG] [Thread-173078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] client lang: <none>
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] server lang: <none>
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] kex follows: False
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:31:37.548 [DEBUG] [Thread-173078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:31:37.549 [DEBUG] [Thread-173078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:31:37.549 [DEBUG] [Thread-173078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:31:37.549 [DEBUG] [Thread-173078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:31:37.549 [DEBUG] [Thread-173078] [transport.py] [_log()] Compression: none
2026-04-11T16:31:37.549 [DEBUG] [Thread-173078] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:31:37.568 [DEBUG] [Thread-173078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:31:37.569 [DEBUG] [Thread-173078] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:31:37.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:31:37.570 [DEBUG] [Thread-173078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:31:37.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:31:37.572 [DEBUG] [Thread-173078] [transport.py] [_log()] userauth is OK
2026-04-11T16:31:37.572 [DEBUG] [Thread-173078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:31:37.572 [DEBUG] [Thread-173078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:31:37.572 [DEBUG] [Thread-173078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:31:37.572 [DEBUG] [Thread-173078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:31:37.606 [INFO] [Thread-173078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:31:37.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:31:38.382 [DEBUG] [Thread-173078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:31:38.383 [DEBUG] [Thread-173078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:31:38.383 [DEBUG] [Thread-173078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:31:38.424 [DEBUG] [Thread-173078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:31:38.425 [DEBUG] [Thread-173078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:31:38.428 [DEBUG] [Thread-173078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:31:38.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:31:38.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:31:38.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:31:38.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:31:38.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:31:38.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:31:38.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:31:38.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:31:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:31:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.604977 -999.00  +13.20   8.79     95  +12.60 1 3 1 3 1   887    0 0.23 -17.88 ----- 9.0 8.8 307.0 9.7 14.8 -0.3 14.7 -0.1 14.2 0.0 14.6 0.1
2026-04-11T16:31:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:31:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:31:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.604977
2026-04-11T16:31:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:31:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:31:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:31:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:31:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:31:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:31:26', tmtdew=0.13127, humidity=99.4338, cloud=0.0, wind=9.81108, temperature=13.112, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:31:10.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:31:38.456 [DEBUG] [Thread-173078] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:31:38.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:31:38.550 [DEBUG] [Thread-173081] [transport.py] [_log()] starting thread (client mode): 0xae5f2290
2026-04-11T16:31:38.550 [DEBUG] [Thread-173081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:31:38.565 [DEBUG] [Thread-173081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:31:38.565 [INFO] [Thread-173081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:31:38.572 [DEBUG] [Thread-173081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] client lang: <none>
2026-04-11T16:31:38.573 [DEBUG] [Thread-173081] [transport.py] [_log()] server lang: <none>
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] kex follows: False
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] Compression: none
2026-04-11T16:31:38.574 [DEBUG] [Thread-173081] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:31:38.634 [DEBUG] [Thread-173081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:31:38.634 [DEBUG] [Thread-173081] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:31:38.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:31:38.635 [DEBUG] [Thread-173081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:31:38.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:31:38.693 [DEBUG] [Thread-173081] [transport.py] [_log()] userauth is OK
2026-04-11T16:31:38.693 [DEBUG] [Thread-173081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:31:38.694 [DEBUG] [Thread-173081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:31:38.694 [DEBUG] [Thread-173081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:31:38.694 [DEBUG] [Thread-173081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:31:38.712 [INFO] [Thread-173081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:31:38.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:31:38.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:31:39.537 [DEBUG] [Thread-173081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:31:39.537 [DEBUG] [Thread-173081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:31:39.585 [DEBUG] [Thread-173081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:31:39.585 [DEBUG] [Thread-173081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:31:39.595 [DEBUG] [Thread-173081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:31:39.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:31:39.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:31:39.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-04-11T16:31:39.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:31:39.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:31:39.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:31:39.632 [DEBUG] [Thread-173081] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:31:46.805 [DEBUG] [Thread-173083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:01.857 [DEBUG] [Thread-173084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:32:09.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:32:09.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:32:10.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 32, 1), 0.133825, 99.4173, 0.0, 9.29952, 13.0955, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:32:10.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:32:01
2026-04-11T16:32:11.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:32:11.450 [DEBUG] [Thread-173085] [transport.py] [_log()] starting thread (client mode): 0xae50bf10
2026-04-11T16:32:11.450 [DEBUG] [Thread-173085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:32:11.465 [DEBUG] [Thread-173085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:32:11.465 [INFO] [Thread-173085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:32:11.469 [DEBUG] [Thread-173085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:32:11.474 [DEBUG] [Thread-173085] [transport.py] [_log()] client lang: <none>
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] server lang: <none>
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] kex follows: False
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] Compression: none
2026-04-11T16:32:11.475 [DEBUG] [Thread-173085] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:32:11.493 [DEBUG] [Thread-173085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:32:11.493 [DEBUG] [Thread-173085] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:32:11.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:32:11.495 [DEBUG] [Thread-173085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:32:11.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:32:11.497 [DEBUG] [Thread-173085] [transport.py] [_log()] userauth is OK
2026-04-11T16:32:11.497 [DEBUG] [Thread-173085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:32:11.497 [DEBUG] [Thread-173085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:32:11.497 [DEBUG] [Thread-173085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:32:11.497 [DEBUG] [Thread-173085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:32:11.521 [INFO] [Thread-173085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:32:11.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:32:12.329 [DEBUG] [Thread-173085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:32:12.330 [DEBUG] [Thread-173085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:32:12.330 [DEBUG] [Thread-173085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:32:12.371 [DEBUG] [Thread-173085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:32:12.371 [DEBUG] [Thread-173085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:32:12.374 [DEBUG] [Thread-173085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:32:12.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:32:12.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:32:12.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:32:12.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:32:12.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:32:12.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:32:12.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:32:12.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:32:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:32:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.605324 -999.00  +13.20   7.68     95  +12.50 1 3 1 3 1   887    0 0.26 -16.88 ----- 7.7 7.7 316.6 10.1 14.8 -0.3 14.7 -0.1 14.2 0.1 14.6 0.2
2026-04-11T16:32:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:32:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:32:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.605324
2026-04-11T16:32:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:32:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:32:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:32:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:32:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:32:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:32:01', tmtdew=0.133825, humidity=99.4173, cloud=0.0, wind=9.29952, temperature=13.0955, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:31:39.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:32:12.402 [DEBUG] [Thread-173085] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:32:12.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:32:12.495 [DEBUG] [Thread-173088] [transport.py] [_log()] starting thread (client mode): 0xae50b070
2026-04-11T16:32:12.495 [DEBUG] [Thread-173088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:32:12.510 [DEBUG] [Thread-173088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:32:12.510 [INFO] [Thread-173088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:32:12.518 [DEBUG] [Thread-173088] [transport.py] [_log()] client lang: <none>
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] server lang: <none>
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] kex follows: False
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] Compression: none
2026-04-11T16:32:12.519 [DEBUG] [Thread-173088] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:32:12.578 [DEBUG] [Thread-173088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:32:12.579 [DEBUG] [Thread-173088] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:32:12.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:32:12.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:32:12.581 [DEBUG] [Thread-173088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:32:12.634 [DEBUG] [Thread-173088] [transport.py] [_log()] userauth is OK
2026-04-11T16:32:12.634 [DEBUG] [Thread-173088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:32:12.634 [DEBUG] [Thread-173088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:32:12.634 [DEBUG] [Thread-173088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:32:12.634 [DEBUG] [Thread-173088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:32:12.654 [INFO] [Thread-173088] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:32:12.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:32:12.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:32:13.480 [DEBUG] [Thread-173088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:32:13.481 [DEBUG] [Thread-173088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:32:13.529 [DEBUG] [Thread-173088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:32:13.529 [DEBUG] [Thread-173088] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:32:13.538 [DEBUG] [Thread-173088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:32:13.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:32:13.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-04-11T16:32:13.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-04-11T16:32:13.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:32:13.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:32:13.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:32:13.575 [DEBUG] [Thread-173088] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:32:15.895 [DEBUG] [Thread-173090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:16.897 [DEBUG] [Thread-173091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:28.201 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:28.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:31.959 [DEBUG] [Thread-173092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:32:43.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:32:43.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-04-11T16:32:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 32, 37), 0.16762, 98.8346, 0.0, 10.1995, 13.5247, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:32:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:32:37
2026-04-11T16:32:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:32:45.512 [DEBUG] [Thread-173093] [transport.py] [_log()] starting thread (client mode): 0xa7950190
2026-04-11T16:32:45.512 [DEBUG] [Thread-173093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:32:45.533 [DEBUG] [Thread-173093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:32:45.533 [INFO] [Thread-173093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:32:45.534 [DEBUG] [Thread-173093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] client lang: <none>
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] server lang: <none>
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] kex follows: False
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] Compression: none
2026-04-11T16:32:45.535 [DEBUG] [Thread-173093] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:32:45.543 [DEBUG] [Thread-173093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:32:45.543 [DEBUG] [Thread-173093] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:32:45.544 [DEBUG] [Thread-173093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:32:45.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:32:45.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:32:45.545 [DEBUG] [Thread-173093] [transport.py] [_log()] userauth is OK
2026-04-11T16:32:45.545 [DEBUG] [Thread-173093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:32:45.545 [DEBUG] [Thread-173093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:32:45.545 [DEBUG] [Thread-173093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:32:45.545 [DEBUG] [Thread-173093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:32:45.562 [INFO] [Thread-173093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:32:45.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:32:46.354 [DEBUG] [Thread-173093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:32:46.355 [DEBUG] [Thread-173093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:32:46.355 [DEBUG] [Thread-173093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:32:46.396 [DEBUG] [Thread-173093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:32:46.396 [DEBUG] [Thread-173093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:32:46.399 [DEBUG] [Thread-173093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:32:46.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:32:46.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:32:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:32:46.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:32:46.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:32:46.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:32:46.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.605671 -999.00  +13.20   8.32     95  +12.50 1 3 1 3 1   887    0 0.25 -16.63 ----- 6.5 8.3 284.8 9.1 14.8 -0.2 14.7 0.0 14.3 0.1 14.6 0.2
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.605671
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:32:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:32:37', tmtdew=0.16762, humidity=98.8346, cloud=0.0, wind=10.1995, temperature=13.5247, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:32:09.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:32:46.419 [DEBUG] [Thread-173093] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:32:46.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:32:46.502 [DEBUG] [Thread-173096] [transport.py] [_log()] starting thread (client mode): 0xae535570
2026-04-11T16:32:46.503 [DEBUG] [Thread-173096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:32:46.517 [DEBUG] [Thread-173096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:32:46.517 [INFO] [Thread-173096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] client lang: <none>
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] server lang: <none>
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] kex follows: False
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:32:46.525 [DEBUG] [Thread-173096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:32:46.526 [DEBUG] [Thread-173096] [transport.py] [_log()] Compression: none
2026-04-11T16:32:46.526 [DEBUG] [Thread-173096] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:32:46.583 [DEBUG] [Thread-173096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:32:46.584 [DEBUG] [Thread-173096] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:32:46.584 [DEBUG] [Thread-173096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:32:46.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:32:46.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:32:46.639 [DEBUG] [Thread-173096] [transport.py] [_log()] userauth is OK
2026-04-11T16:32:46.640 [DEBUG] [Thread-173096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:32:46.640 [DEBUG] [Thread-173096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:32:46.640 [DEBUG] [Thread-173096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:32:46.640 [DEBUG] [Thread-173096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:32:46.659 [INFO] [Thread-173096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:32:46.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:32:46.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:32:46.995 [DEBUG] [Thread-173098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:32:47.491 [DEBUG] [Thread-173096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:32:47.492 [DEBUG] [Thread-173096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:32:47.539 [DEBUG] [Thread-173096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:32:47.539 [DEBUG] [Thread-173096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:32:47.548 [DEBUG] [Thread-173096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:32:47.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:32:47.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-04-11T16:32:47.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-04-11T16:32:47.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:32:47.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:32:47.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:32:47.585 [DEBUG] [Thread-173096] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:33:02.048 [DEBUG] [Thread-173099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:15.957 [DEBUG] [Thread-173100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:17.090 [DEBUG] [Thread-173101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:17.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:33:17.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:33:17.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:33:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 32, 37), 0.16762, 98.8346, 0.0, 10.1995, 13.5247, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:33:18.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:32:37
2026-04-11T16:33:19.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:33:19.415 [DEBUG] [Thread-173102] [transport.py] [_log()] starting thread (client mode): 0xae5f3160
2026-04-11T16:33:19.416 [DEBUG] [Thread-173102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:33:19.436 [DEBUG] [Thread-173102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:33:19.437 [INFO] [Thread-173102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:19.440 [DEBUG] [Thread-173102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] client lang: <none>
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] server lang: <none>
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] kex follows: False
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] Compression: none
2026-04-11T16:33:19.441 [DEBUG] [Thread-173102] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:33:19.459 [DEBUG] [Thread-173102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:33:19.460 [DEBUG] [Thread-173102] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:33:19.460 [DEBUG] [Thread-173102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:33:19.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:33:19.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:33:19.462 [DEBUG] [Thread-173102] [transport.py] [_log()] userauth is OK
2026-04-11T16:33:19.462 [DEBUG] [Thread-173102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:33:19.462 [DEBUG] [Thread-173102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:33:19.463 [DEBUG] [Thread-173102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:33:19.463 [DEBUG] [Thread-173102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:33:19.483 [INFO] [Thread-173102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:33:19.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:33:20.267 [DEBUG] [Thread-173102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:33:20.267 [DEBUG] [Thread-173102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:33:20.268 [DEBUG] [Thread-173102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:33:20.308 [DEBUG] [Thread-173102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:33:20.308 [DEBUG] [Thread-173102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:33:20.311 [DEBUG] [Thread-173102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:33:20.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:33:20.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:33:20.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:33:20.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:33:20.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:33:20.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:33:20.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:33:20.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:33:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:33:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.606019 -999.00  +13.20   6.09     95  +12.50 1 3 1 3 1   887    0 0.23 -17.31 ----- 6.6 6.1 312.2 6.6 14.8 -0.3 14.7 0.0 14.2 -0.0 14.6 0.2
2026-04-11T16:33:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:33:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:33:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.606019
2026-04-11T16:33:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:33:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:33:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:33:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:33:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:33:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:32:37', tmtdew=0.16762, humidity=98.8346, cloud=0.0, wind=10.1995, temperature=13.5247, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:32:40.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:33:20.334 [DEBUG] [Thread-173102] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:33:20.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:33:20.430 [DEBUG] [Thread-173105] [transport.py] [_log()] starting thread (client mode): 0xae51b460
2026-04-11T16:33:20.430 [DEBUG] [Thread-173105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:33:20.445 [DEBUG] [Thread-173105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:33:20.445 [INFO] [Thread-173105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] client lang: <none>
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] server lang: <none>
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] kex follows: False
2026-04-11T16:33:20.453 [DEBUG] [Thread-173105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:33:20.454 [DEBUG] [Thread-173105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:33:20.454 [DEBUG] [Thread-173105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:33:20.454 [DEBUG] [Thread-173105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:33:20.454 [DEBUG] [Thread-173105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:33:20.454 [DEBUG] [Thread-173105] [transport.py] [_log()] Compression: none
2026-04-11T16:33:20.454 [DEBUG] [Thread-173105] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:33:20.511 [DEBUG] [Thread-173105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:33:20.512 [DEBUG] [Thread-173105] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:33:20.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:33:20.513 [DEBUG] [Thread-173105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:33:20.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:33:20.568 [DEBUG] [Thread-173105] [transport.py] [_log()] userauth is OK
2026-04-11T16:33:20.568 [DEBUG] [Thread-173105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:33:20.568 [DEBUG] [Thread-173105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:33:20.568 [DEBUG] [Thread-173105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:33:20.568 [DEBUG] [Thread-173105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:33:20.591 [INFO] [Thread-173105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:33:20.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:33:20.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:33:21.455 [DEBUG] [Thread-173105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:33:21.456 [DEBUG] [Thread-173105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:33:21.507 [DEBUG] [Thread-173105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:33:21.507 [DEBUG] [Thread-173105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:33:21.516 [DEBUG] [Thread-173105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:33:21.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:33:21.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:33: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') -> 00000000
2026-04-11T16:33:21.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:33:21.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:33:21.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:33:21.551 [DEBUG] [Thread-173105] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:33:28.344 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:28.345 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:32.122 [DEBUG] [Thread-173107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:47.171 [DEBUG] [Thread-173108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:33:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:33:51.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:33:51.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-04-11T16:33:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 33, 12), 0.133785, 99.4174, 0.0, 6.98868, 13.0458, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:33:53.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:33:12
2026-04-11T16:33:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:33:53.593 [DEBUG] [Thread-173109] [transport.py] [_log()] starting thread (client mode): 0xae5e77c0
2026-04-11T16:33:53.593 [DEBUG] [Thread-173109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:33:53.615 [DEBUG] [Thread-173109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:33:53.615 [INFO] [Thread-173109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:33:53.618 [DEBUG] [Thread-173109] [transport.py] [_log()] client lang: <none>
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] server lang: <none>
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] kex follows: False
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] Compression: none
2026-04-11T16:33:53.619 [DEBUG] [Thread-173109] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:33:53.636 [DEBUG] [Thread-173109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:33:53.637 [DEBUG] [Thread-173109] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:33:53.637 [DEBUG] [Thread-173109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:33:53.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:33:53.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:33:53.639 [DEBUG] [Thread-173109] [transport.py] [_log()] userauth is OK
2026-04-11T16:33:53.639 [DEBUG] [Thread-173109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:33:53.639 [DEBUG] [Thread-173109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:33:53.639 [DEBUG] [Thread-173109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:33:53.639 [DEBUG] [Thread-173109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:33:53.648 [INFO] [Thread-173109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:33:53.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:33:54.453 [DEBUG] [Thread-173109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:33:54.453 [DEBUG] [Thread-173109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:33:54.454 [DEBUG] [Thread-173109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:33:54.494 [DEBUG] [Thread-173109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:33:54.494 [DEBUG] [Thread-173109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:33:54.498 [DEBUG] [Thread-173109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:33:54.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:33:54.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:33:54.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:33:54.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:33:54.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:33:54.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:33:54.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:33:54.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:33:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:33:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.606371 -999.00  +13.20   6.22     95  +12.50 1 3 1 3 1   887    0 0.28 -16.17 ----- 5.5 6.2 304.2 9.2 14.8 -0.1 14.8 0.0 14.3 -0.1 14.7 0.2
2026-04-11T16:33:54.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:33:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:33:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.606371
2026-04-11T16:33:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:33:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:33:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:33:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:33:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:33:54.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:33:12', tmtdew=0.133785, humidity=99.4174, cloud=0.0, wind=6.98868, temperature=13.0458, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:33:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:33:54.523 [DEBUG] [Thread-173109] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:33:54.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:33:54.617 [DEBUG] [Thread-173112] [transport.py] [_log()] starting thread (client mode): 0xae5e7b50
2026-04-11T16:33:54.617 [DEBUG] [Thread-173112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:33:54.631 [DEBUG] [Thread-173112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:33:54.631 [INFO] [Thread-173112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:33:54.639 [DEBUG] [Thread-173112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:33:54.639 [DEBUG] [Thread-173112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:33:54.639 [DEBUG] [Thread-173112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:33:54.639 [DEBUG] [Thread-173112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:54.639 [DEBUG] [Thread-173112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] client lang: <none>
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] server lang: <none>
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] kex follows: False
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:33:54.640 [DEBUG] [Thread-173112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:33:54.641 [DEBUG] [Thread-173112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:33:54.641 [DEBUG] [Thread-173112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:33:54.641 [DEBUG] [Thread-173112] [transport.py] [_log()] Compression: none
2026-04-11T16:33:54.641 [DEBUG] [Thread-173112] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:33:54.698 [DEBUG] [Thread-173112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:33:54.698 [DEBUG] [Thread-173112] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:33:54.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:33:54.699 [DEBUG] [Thread-173112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:33:54.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:33:54.754 [DEBUG] [Thread-173112] [transport.py] [_log()] userauth is OK
2026-04-11T16:33:54.754 [DEBUG] [Thread-173112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:33:54.754 [DEBUG] [Thread-173112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:33:54.754 [DEBUG] [Thread-173112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:33:54.754 [DEBUG] [Thread-173112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:33:54.773 [INFO] [Thread-173112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:33:54.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:33:54.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:33:55.590 [DEBUG] [Thread-173112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:33:55.592 [DEBUG] [Thread-173112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:33:55.638 [DEBUG] [Thread-173112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:33:55.638 [DEBUG] [Thread-173112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:33:55.648 [DEBUG] [Thread-173112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:33:55.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:33:55.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-04-11T16:33:55.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-04-11T16:33:55.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:33:55.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:33:55.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:33:55.685 [DEBUG] [Thread-173112] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:34:02.208 [DEBUG] [Thread-173114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:16.009 [DEBUG] [Thread-173115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:17.262 [DEBUG] [Thread-173116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:34:25.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:34:25.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-04-11T16:34:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 33, 48), 0.18295, 98.7353, 0.0, 6.07176, 13.3922, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:34:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:33:48
2026-04-11T16:34:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:34:27.700 [DEBUG] [Thread-173117] [transport.py] [_log()] starting thread (client mode): 0xae5f2380
2026-04-11T16:34:27.700 [DEBUG] [Thread-173117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:34:27.721 [DEBUG] [Thread-173117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:34:27.721 [INFO] [Thread-173117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] client lang: <none>
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] server lang: <none>
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] kex follows: False
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] Compression: none
2026-04-11T16:34:27.724 [DEBUG] [Thread-173117] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:34:27.742 [DEBUG] [Thread-173117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:34:27.742 [DEBUG] [Thread-173117] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:34:27.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:34:27.742 [DEBUG] [Thread-173117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:34:27.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:34:27.744 [DEBUG] [Thread-173117] [transport.py] [_log()] userauth is OK
2026-04-11T16:34:27.744 [DEBUG] [Thread-173117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:34:27.745 [DEBUG] [Thread-173117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:34:27.745 [DEBUG] [Thread-173117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:34:27.745 [DEBUG] [Thread-173117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:34:27.779 [INFO] [Thread-173117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:34:27.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:34:28.486 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:28.487 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:28.575 [DEBUG] [Thread-173117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:34:28.576 [DEBUG] [Thread-173117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:34:28.576 [DEBUG] [Thread-173117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:34:28.617 [DEBUG] [Thread-173117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:34:28.617 [DEBUG] [Thread-173117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:34:28.621 [DEBUG] [Thread-173117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:34:28.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:34:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:34:28.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:34:28.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:34:28.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:34:28.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:34:28.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:34:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.606713 -999.00  +13.20   6.90     95  +12.50 1 3 1 3 1   887    0 0.22 -17.28 ----- 9.1 6.9 289.2 8.2 14.9 -0.4 14.8 -0.1 14.3 -0.5 14.7 0.1
2026-04-11T16:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.606713
2026-04-11T16:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:34:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:34:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:34:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:34:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:34:28.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:33:48', tmtdew=0.18295, humidity=98.7353, cloud=0.0, wind=6.07176, temperature=13.3922, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:33:40.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:34:28.647 [DEBUG] [Thread-173117] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:34:28.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:34:28.750 [DEBUG] [Thread-173120] [transport.py] [_log()] starting thread (client mode): 0xae5365f0
2026-04-11T16:34:28.750 [DEBUG] [Thread-173120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:34:28.765 [DEBUG] [Thread-173120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:34:28.766 [INFO] [Thread-173120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:34:28.773 [DEBUG] [Thread-173120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:34:28.773 [DEBUG] [Thread-173120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:34:28.773 [DEBUG] [Thread-173120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:34:28.773 [DEBUG] [Thread-173120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] client lang: <none>
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] server lang: <none>
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] kex follows: False
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] Compression: none
2026-04-11T16:34:28.774 [DEBUG] [Thread-173120] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:34:28.830 [DEBUG] [Thread-173120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:34:28.831 [DEBUG] [Thread-173120] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:34:28.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:34:28.832 [DEBUG] [Thread-173120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:34:28.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:34:28.886 [DEBUG] [Thread-173120] [transport.py] [_log()] userauth is OK
2026-04-11T16:34:28.887 [DEBUG] [Thread-173120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:34:28.887 [DEBUG] [Thread-173120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:34:28.887 [DEBUG] [Thread-173120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:34:28.887 [DEBUG] [Thread-173120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:34:28.907 [INFO] [Thread-173120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:34:28.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:34:28.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:34:29.731 [DEBUG] [Thread-173120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:34:29.732 [DEBUG] [Thread-173120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:34:29.779 [DEBUG] [Thread-173120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:34:29.779 [DEBUG] [Thread-173120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:34:29.789 [DEBUG] [Thread-173120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:34:29.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:34: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')
2026-04-11T16:34:29.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:34:29.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:34:29.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:34:29.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:34:29.832 [DEBUG] [Thread-173120] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:34:32.302 [DEBUG] [Thread-173122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:47.356 [DEBUG] [Thread-173123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:34:59.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:34:59.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:34:59.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:35:01.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 34, 23), 0.146575, 99.3346, 0.0, 6.37128, 12.8964, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:35:01.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:34:23
2026-04-11T16:35:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:35:01.883 [DEBUG] [Thread-173124] [transport.py] [_log()] starting thread (client mode): 0xae5a65f0
2026-04-11T16:35:01.883 [DEBUG] [Thread-173124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:35:01.903 [DEBUG] [Thread-173124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:35:01.904 [INFO] [Thread-173124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:35:01.907 [DEBUG] [Thread-173124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:35:01.907 [DEBUG] [Thread-173124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:35:01.907 [DEBUG] [Thread-173124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:35:01.907 [DEBUG] [Thread-173124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:01.907 [DEBUG] [Thread-173124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:01.907 [DEBUG] [Thread-173124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] client lang: <none>
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] server lang: <none>
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] kex follows: False
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:35:01.908 [DEBUG] [Thread-173124] [transport.py] [_log()] Compression: none
2026-04-11T16:35:01.909 [DEBUG] [Thread-173124] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:35:01.928 [DEBUG] [Thread-173124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:35:01.928 [DEBUG] [Thread-173124] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:35:01.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:35:01.929 [DEBUG] [Thread-173124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:35:01.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:35:01.932 [DEBUG] [Thread-173124] [transport.py] [_log()] userauth is OK
2026-04-11T16:35:01.932 [DEBUG] [Thread-173124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:35:01.932 [DEBUG] [Thread-173124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:35:01.932 [DEBUG] [Thread-173124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:35:01.932 [DEBUG] [Thread-173124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:35:01.946 [INFO] [Thread-173124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:35:01.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:35:02.393 [DEBUG] [Thread-173126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:35:02.753 [DEBUG] [Thread-173124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:35:02.754 [DEBUG] [Thread-173124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:35:02.754 [DEBUG] [Thread-173124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:35:02.795 [DEBUG] [Thread-173124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:35:02.795 [DEBUG] [Thread-173124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:35:02.799 [DEBUG] [Thread-173124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:35:02.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:35:02.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:35:02.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:35:02.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:35:02.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:35:02.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:35:02.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:35:02.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:35:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:35:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.607060 -999.00  +13.20   6.77     94  +12.30 1 3 1 3 1   887    0 0.24 -16.80 ----- 6.3 6.8 296.6 9.4 14.8 -0.5 14.8 -0.2 14.3 -0.5 14.7 0.0
2026-04-11T16:35:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:35:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:35:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.607060
2026-04-11T16:35:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:35:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:35:02.827 [DEBUG] [Thread-173124] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:35:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:35:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:35:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:35:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:34:23', tmtdew=0.146575, humidity=99.3346, cloud=0.0, wind=6.37128, temperature=12.8964, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:34:09.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:35:02.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:35:02.919 [DEBUG] [Thread-173128] [transport.py] [_log()] starting thread (client mode): 0xae561ab0
2026-04-11T16:35:02.919 [DEBUG] [Thread-173128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:35:02.936 [DEBUG] [Thread-173128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:35:02.936 [INFO] [Thread-173128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:35:02.943 [DEBUG] [Thread-173128] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:02.944 [DEBUG] [Thread-173128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] client lang: <none>
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] server lang: <none>
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] kex follows: False
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] Compression: none
2026-04-11T16:35:02.945 [DEBUG] [Thread-173128] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:35:03.006 [DEBUG] [Thread-173128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:35:03.007 [DEBUG] [Thread-173128] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:35:03.007 [DEBUG] [Thread-173128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:35:03.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:35:03.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:35:03.069 [DEBUG] [Thread-173128] [transport.py] [_log()] userauth is OK
2026-04-11T16:35:03.069 [DEBUG] [Thread-173128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:35:03.069 [DEBUG] [Thread-173128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:35:03.069 [DEBUG] [Thread-173128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:35:03.070 [DEBUG] [Thread-173128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:35:03.092 [INFO] [Thread-173128] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:35:03.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:35:03.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:35:03.950 [DEBUG] [Thread-173128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:35:03.950 [DEBUG] [Thread-173128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:35:03.998 [DEBUG] [Thread-173128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:35:03.998 [DEBUG] [Thread-173128] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:35:04.007 [DEBUG] [Thread-173128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:35:04.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:35:04.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-04-11T16:35:04.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-04-11T16:35:04.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:35:04.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:35:04.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:35:04.045 [DEBUG] [Thread-173128] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:35:16.062 [DEBUG] [Thread-173130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:35:17.432 [DEBUG] [Thread-173131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:35:28.627 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:35:28.629 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:35:32.477 [DEBUG] [Thread-173132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:35:34.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:35:34.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:35:34.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:35:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 34, 59), 0.141425, 99.3677, 0.0, 4.32432, 12.9298, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:35:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:34:59
2026-04-11T16:35:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:35:35.928 [DEBUG] [Thread-173133] [transport.py] [_log()] starting thread (client mode): 0xae50b070
2026-04-11T16:35:35.928 [DEBUG] [Thread-173133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:35:35.949 [DEBUG] [Thread-173133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:35:35.949 [INFO] [Thread-173133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] client lang: <none>
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] server lang: <none>
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] kex follows: False
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] Compression: none
2026-04-11T16:35:35.953 [DEBUG] [Thread-173133] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:35:35.972 [DEBUG] [Thread-173133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:35:35.972 [DEBUG] [Thread-173133] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:35:35.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:35:35.973 [DEBUG] [Thread-173133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:35:35.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:35:35.975 [DEBUG] [Thread-173133] [transport.py] [_log()] userauth is OK
2026-04-11T16:35:35.975 [DEBUG] [Thread-173133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:35:35.975 [DEBUG] [Thread-173133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:35:35.976 [DEBUG] [Thread-173133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:35:35.976 [DEBUG] [Thread-173133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:35:36.001 [INFO] [Thread-173133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:35:36.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:35:36.849 [DEBUG] [Thread-173133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:35:36.850 [DEBUG] [Thread-173133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:35:36.850 [DEBUG] [Thread-173133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:35:36.891 [DEBUG] [Thread-173133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:35:36.891 [DEBUG] [Thread-173133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:35:36.895 [DEBUG] [Thread-173133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:35:36.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:35:36.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:35:36.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:35:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:35:36.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:35:36.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:35:36.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:35:36.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:35:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:35:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.607408 -999.00  +13.20   4.53     94  +12.40 1 3 1 3 1   887    0 0.24 -16.65 ----- 3.7 4.5 302.2 6.7 14.9 -0.7 14.7 -0.1 14.3 0.1 14.7 0.2
2026-04-11T16:35:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:35:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:35:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.607408
2026-04-11T16:35:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:35:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:35:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:35:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:35:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:35:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:34:59', tmtdew=0.141425, humidity=99.3677, cloud=0.0, wind=4.32432, temperature=12.9298, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:34:40.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:35:36.922 [DEBUG] [Thread-173133] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:35:37.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:35:37.016 [DEBUG] [Thread-173136] [transport.py] [_log()] starting thread (client mode): 0xae536440
2026-04-11T16:35:37.016 [DEBUG] [Thread-173136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:35:37.030 [DEBUG] [Thread-173136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:35:37.030 [INFO] [Thread-173136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:35:37.038 [DEBUG] [Thread-173136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:35:37.039 [DEBUG] [Thread-173136] [transport.py] [_log()] client lang: <none>
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] server lang: <none>
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] kex follows: False
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:35:37.040 [DEBUG] [Thread-173136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:35:37.041 [DEBUG] [Thread-173136] [transport.py] [_log()] Compression: none
2026-04-11T16:35:37.041 [DEBUG] [Thread-173136] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:35:37.096 [DEBUG] [Thread-173136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:35:37.096 [DEBUG] [Thread-173136] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:35:37.097 [DEBUG] [Thread-173136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:35:37.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:35:37.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:35:37.152 [DEBUG] [Thread-173136] [transport.py] [_log()] userauth is OK
2026-04-11T16:35:37.152 [DEBUG] [Thread-173136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:35:37.153 [DEBUG] [Thread-173136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:35:37.153 [DEBUG] [Thread-173136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:35:37.153 [DEBUG] [Thread-173136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:35:37.174 [INFO] [Thread-173136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:35:37.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:35:37.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:35:37.979 [DEBUG] [Thread-173136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:35:37.980 [DEBUG] [Thread-173136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:35:38.028 [DEBUG] [Thread-173136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:35:38.028 [DEBUG] [Thread-173136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:35:38.036 [DEBUG] [Thread-173136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:35:38.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:35:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:35:38.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-04-11T16:35:38.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:35:38.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:35:38.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:35:38.070 [DEBUG] [Thread-173136] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:35:47.514 [DEBUG] [Thread-173138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:02.568 [DEBUG] [Thread-173139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:36:08.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:36:08.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:36:09.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 35, 35), 0.16744, 98.835, 0.0, 4.73112, 13.2929, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:36:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:35:35
2026-04-11T16:36:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:36:09.873 [DEBUG] [Thread-173140] [transport.py] [_log()] starting thread (client mode): 0xae5e4e50
2026-04-11T16:36:09.873 [DEBUG] [Thread-173140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:36:09.894 [DEBUG] [Thread-173140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:36:09.894 [INFO] [Thread-173140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:36:09.898 [DEBUG] [Thread-173140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] client lang: <none>
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] server lang: <none>
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] kex follows: False
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] Compression: none
2026-04-11T16:36:09.899 [DEBUG] [Thread-173140] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:36:09.914 [DEBUG] [Thread-173140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:36:09.915 [DEBUG] [Thread-173140] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:36:09.915 [DEBUG] [Thread-173140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:36:09.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:36:09.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:36:09.917 [DEBUG] [Thread-173140] [transport.py] [_log()] userauth is OK
2026-04-11T16:36:09.918 [DEBUG] [Thread-173140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:36:09.918 [DEBUG] [Thread-173140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:36:09.918 [DEBUG] [Thread-173140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:36:09.918 [DEBUG] [Thread-173140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:36:09.936 [INFO] [Thread-173140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:36:09.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:36:10.777 [DEBUG] [Thread-173140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:36:10.777 [DEBUG] [Thread-173140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:36:10.777 [DEBUG] [Thread-173140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:36:10.817 [DEBUG] [Thread-173140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:36:10.818 [DEBUG] [Thread-173140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:36:10.820 [DEBUG] [Thread-173140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:36:10.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:36:10.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:36:10.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:36:10.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:36:10.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:36:10.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:36:10.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:36:10.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:36:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:36:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.607755 -999.00  +13.30   4.49     94  +12.50 1 3 1 3 1   887    0 0.28 -15.51 ----- 4.5 4.5 301.6 5.6 14.9 -0.2 14.8 0.0 14.3 0.3 14.7 0.2
2026-04-11T16:36:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:36:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:36:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.607755
2026-04-11T16:36:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:36:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:36:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:36:10.843 [DEBUG] [Thread-173140] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:36:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:36:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:36:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:35:35', tmtdew=0.16744, humidity=98.835, cloud=0.0, wind=4.73112, temperature=13.2929, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:35:10.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:36:10.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:36:10.936 [DEBUG] [Thread-173143] [transport.py] [_log()] starting thread (client mode): 0xb0fe9720
2026-04-11T16:36:10.936 [DEBUG] [Thread-173143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:36:10.951 [DEBUG] [Thread-173143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:36:10.951 [INFO] [Thread-173143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] client lang: <none>
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] server lang: <none>
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] kex follows: False
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:36:10.959 [DEBUG] [Thread-173143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:36:10.960 [DEBUG] [Thread-173143] [transport.py] [_log()] Compression: none
2026-04-11T16:36:10.960 [DEBUG] [Thread-173143] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:36:11.017 [DEBUG] [Thread-173143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:36:11.018 [DEBUG] [Thread-173143] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:36:11.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:36:11.019 [DEBUG] [Thread-173143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:36:11.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:36:11.078 [DEBUG] [Thread-173143] [transport.py] [_log()] userauth is OK
2026-04-11T16:36:11.078 [DEBUG] [Thread-173143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:36:11.078 [DEBUG] [Thread-173143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:36:11.078 [DEBUG] [Thread-173143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:36:11.079 [DEBUG] [Thread-173143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:36:11.101 [INFO] [Thread-173143] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:36:11.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:36:11.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:36:11.935 [DEBUG] [Thread-173143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:36:11.935 [DEBUG] [Thread-173143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:36:11.983 [DEBUG] [Thread-173143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:36:11.984 [DEBUG] [Thread-173143] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:36:11.993 [DEBUG] [Thread-173143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:36:12.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:36:12.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-04-11T16:36:12.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-04-11T16:36:12.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:36:12.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:36:12.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:36:12.030 [DEBUG] [Thread-173143] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:36:16.124 [DEBUG] [Thread-173145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:17.607 [DEBUG] [Thread-173146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:28.770 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:28.771 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:32.669 [DEBUG] [Thread-173147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:36:42.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:36:42.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:36:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:36:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 36, 10), 0.08884, 99.3843, 0.0, 4.76532, 12.9633, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:36:43.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:36:10
2026-04-11T16:36:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:36:43.870 [DEBUG] [Thread-173148] [transport.py] [_log()] starting thread (client mode): 0xae509720
2026-04-11T16:36:43.870 [DEBUG] [Thread-173148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:36:43.890 [DEBUG] [Thread-173148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:36:43.890 [INFO] [Thread-173148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:36:43.893 [DEBUG] [Thread-173148] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:36:43.893 [DEBUG] [Thread-173148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:36:43.893 [DEBUG] [Thread-173148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:36:43.893 [DEBUG] [Thread-173148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:43.893 [DEBUG] [Thread-173148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] client lang: <none>
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] server lang: <none>
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] kex follows: False
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] Compression: none
2026-04-11T16:36:43.894 [DEBUG] [Thread-173148] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:36:43.909 [DEBUG] [Thread-173148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:36:43.910 [DEBUG] [Thread-173148] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:36:43.910 [DEBUG] [Thread-173148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:36:43.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:36:43.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:36:43.912 [DEBUG] [Thread-173148] [transport.py] [_log()] userauth is OK
2026-04-11T16:36:43.913 [DEBUG] [Thread-173148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:36:43.913 [DEBUG] [Thread-173148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:36:43.913 [DEBUG] [Thread-173148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:36:43.913 [DEBUG] [Thread-173148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:36:43.949 [INFO] [Thread-173148] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:36:43.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:36:44.796 [DEBUG] [Thread-173148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:36:44.797 [DEBUG] [Thread-173148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:36:44.797 [DEBUG] [Thread-173148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:36:44.838 [DEBUG] [Thread-173148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:36:44.838 [DEBUG] [Thread-173148] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:36:44.842 [DEBUG] [Thread-173148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:36:44.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:36:44.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:36:44.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:36:44.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:36:44.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:36:44.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:36:44.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:36:44.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:36:44.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:36:44.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.608449 -999.00  +13.40   6.06     94  +12.50 1 3 1 3 1   887    0 0.38 -12.41 ----- 6.6 6.1 285.0 7.6 15.0 -0.2 14.9 -0.1 14.4 -0.1 14.7 0.1
2026-04-11T16:36:44.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:36:44.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:36:44.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.608449
2026-04-11T16:36:44.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:36:44.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:36:44.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:36:44.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:36:44.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:36:44.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:36:10', tmtdew=0.08884, humidity=99.3843, cloud=0.0, wind=4.76532, temperature=12.9633, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:36:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:36:44.868 [DEBUG] [Thread-173148] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:36:44.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:36:44.962 [DEBUG] [Thread-173151] [transport.py] [_log()] starting thread (client mode): 0xae508310
2026-04-11T16:36:44.962 [DEBUG] [Thread-173151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:36:44.976 [DEBUG] [Thread-173151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:36:44.976 [INFO] [Thread-173151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] client lang: <none>
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] server lang: <none>
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] kex follows: False
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:36:44.984 [DEBUG] [Thread-173151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:36:44.985 [DEBUG] [Thread-173151] [transport.py] [_log()] Compression: none
2026-04-11T16:36:44.985 [DEBUG] [Thread-173151] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:36:45.042 [DEBUG] [Thread-173151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:36:45.043 [DEBUG] [Thread-173151] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:36:45.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:36:45.044 [DEBUG] [Thread-173151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:36:45.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:36:45.098 [DEBUG] [Thread-173151] [transport.py] [_log()] userauth is OK
2026-04-11T16:36:45.098 [DEBUG] [Thread-173151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:36:45.098 [DEBUG] [Thread-173151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:36:45.098 [DEBUG] [Thread-173151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:36:45.098 [DEBUG] [Thread-173151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:36:45.116 [INFO] [Thread-173151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:36:45.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:36:45.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:36:45.949 [DEBUG] [Thread-173151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:36:45.949 [DEBUG] [Thread-173151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:36:45.997 [DEBUG] [Thread-173151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:36:45.997 [DEBUG] [Thread-173151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:36:46.006 [DEBUG] [Thread-173151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:36:46.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:36:46.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:36:46.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-04-11T16:36:46.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:36:46.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:36:46.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:36:46.044 [DEBUG] [Thread-173151] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:36:47.705 [DEBUG] [Thread-173153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:02.761 [DEBUG] [Thread-173154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:37:16.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:37:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:37:16.185 [DEBUG] [Thread-173155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:17.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 36, 45), 0.17767, 98.7688, 0.0, 4.66056, 13.2266, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:37:17.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:36:45
2026-04-11T16:37:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:37:17.795 [DEBUG] [Thread-173156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:17.892 [DEBUG] [Thread-173157] [transport.py] [_log()] starting thread (client mode): 0xb0fe9870
2026-04-11T16:37:17.892 [DEBUG] [Thread-173157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:37:17.914 [DEBUG] [Thread-173157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:37:17.914 [INFO] [Thread-173157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] client lang: <none>
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] server lang: <none>
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] kex follows: False
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:37:17.917 [DEBUG] [Thread-173157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:37:17.918 [DEBUG] [Thread-173157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:37:17.918 [DEBUG] [Thread-173157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:37:17.918 [DEBUG] [Thread-173157] [transport.py] [_log()] Compression: none
2026-04-11T16:37:17.918 [DEBUG] [Thread-173157] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:37:17.927 [DEBUG] [Thread-173157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:37:17.927 [DEBUG] [Thread-173157] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:37:17.928 [DEBUG] [Thread-173157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:37:17.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:37:17.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:37:17.930 [DEBUG] [Thread-173157] [transport.py] [_log()] userauth is OK
2026-04-11T16:37:17.930 [DEBUG] [Thread-173157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:37:17.930 [DEBUG] [Thread-173157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:37:17.930 [DEBUG] [Thread-173157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:37:17.930 [DEBUG] [Thread-173157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:37:17.952 [INFO] [Thread-173157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:37:17.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:37:18.764 [DEBUG] [Thread-173157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:37:18.764 [DEBUG] [Thread-173157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:37:18.765 [DEBUG] [Thread-173157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:37:18.806 [DEBUG] [Thread-173157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:37:18.806 [DEBUG] [Thread-173157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:37:18.810 [DEBUG] [Thread-173157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:37:18.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:37:18.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:37:18.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:37:18.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:37:18.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:37:18.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:37:18.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:37:18.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:37:18.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:37:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.608796 -999.00  +13.40   5.64     94  +12.50 1 3 1 3 1   887    0 0.40 -11.34 ----- 6.2 5.6 297.1 7.6 15.0 -0.4 14.8 -0.0 14.4 -0.3 14.8 0.1
2026-04-11T16:37:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:37:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:37:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.608796
2026-04-11T16:37:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:37:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:37:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:37:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:37:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:37:18.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:36:45', tmtdew=0.17767, humidity=98.7688, cloud=0.0, wind=4.66056, temperature=13.2266, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:36:39.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:37:18.836 [DEBUG] [Thread-173157] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:37:18.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:37:18.930 [DEBUG] [Thread-173160] [transport.py] [_log()] starting thread (client mode): 0xa7951930
2026-04-11T16:37:18.930 [DEBUG] [Thread-173160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:37:18.944 [DEBUG] [Thread-173160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:37:18.945 [INFO] [Thread-173160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:37:18.952 [DEBUG] [Thread-173160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:37:18.953 [DEBUG] [Thread-173160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] client lang: <none>
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] server lang: <none>
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] kex follows: False
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] Compression: none
2026-04-11T16:37:18.954 [DEBUG] [Thread-173160] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:37:19.011 [DEBUG] [Thread-173160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:37:19.012 [DEBUG] [Thread-173160] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:37:19.013 [DEBUG] [Thread-173160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:37:19.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:37:19.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:37:19.072 [DEBUG] [Thread-173160] [transport.py] [_log()] userauth is OK
2026-04-11T16:37:19.072 [DEBUG] [Thread-173160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:37:19.073 [DEBUG] [Thread-173160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:37:19.073 [DEBUG] [Thread-173160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:37:19.073 [DEBUG] [Thread-173160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:37:19.095 [INFO] [Thread-173160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:37:19.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:37:19.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:37:19.915 [DEBUG] [Thread-173160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:37:19.915 [DEBUG] [Thread-173160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:37:19.963 [DEBUG] [Thread-173160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:37:19.963 [DEBUG] [Thread-173160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:37:19.973 [DEBUG] [Thread-173160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:37:19.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:37:19.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:37:19.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-04-11T16:37:20.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:37:20.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:37:20.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:37:20.009 [DEBUG] [Thread-173160] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:37:28.911 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:28.912 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:32.830 [DEBUG] [Thread-173162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:47.874 [DEBUG] [Thread-173163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:37:50.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:37:50.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:37:50.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-04-11T16:37:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 37, 21), 0.12604, 99.4673, 0.0, 6.19488, 13.1128, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:37:51.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:37:21
2026-04-11T16:37:51.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:37:51.826 [DEBUG] [Thread-173164] [transport.py] [_log()] starting thread (client mode): 0xa79523b0
2026-04-11T16:37:51.826 [DEBUG] [Thread-173164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:37:51.847 [DEBUG] [Thread-173164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:37:51.847 [INFO] [Thread-173164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] client lang: <none>
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] server lang: <none>
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] kex follows: False
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:37:51.850 [DEBUG] [Thread-173164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:37:51.851 [DEBUG] [Thread-173164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:37:51.851 [DEBUG] [Thread-173164] [transport.py] [_log()] Compression: none
2026-04-11T16:37:51.851 [DEBUG] [Thread-173164] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:37:51.867 [DEBUG] [Thread-173164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:37:51.867 [DEBUG] [Thread-173164] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:37:51.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:37:51.868 [DEBUG] [Thread-173164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:37:51.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:37:51.870 [DEBUG] [Thread-173164] [transport.py] [_log()] userauth is OK
2026-04-11T16:37:51.870 [DEBUG] [Thread-173164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:37:51.870 [DEBUG] [Thread-173164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:37:51.870 [DEBUG] [Thread-173164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:37:51.870 [DEBUG] [Thread-173164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:37:51.894 [INFO] [Thread-173164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:37:51.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:37:52.646 [DEBUG] [Thread-173164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:37:52.646 [DEBUG] [Thread-173164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:37:52.647 [DEBUG] [Thread-173164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:37:52.687 [DEBUG] [Thread-173164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:37:52.687 [DEBUG] [Thread-173164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:37:52.693 [DEBUG] [Thread-173164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:37:52.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:37:52.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:37:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:37:52.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:37:52.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:37:52.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:37:52.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:37:52.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:37:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:37:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.609144 -999.00  +13.40   4.79     94  +12.50 1 3 1 3 1   887    0 0.43 -10.23 ----- 5.3 4.8 282.4 7.5 15.0 -0.6 14.9 -0.2 14.4 -0.6 14.8 0.1
2026-04-11T16:37:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:37:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:37:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.609144
2026-04-11T16:37:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:37:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:37:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:37:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:37:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:37:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:37:21', tmtdew=0.12604, humidity=99.4673, cloud=0.0, wind=6.19488, temperature=13.1128, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:37:10.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:37:52.719 [DEBUG] [Thread-173164] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:37:52.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:37:52.824 [DEBUG] [Thread-173167] [transport.py] [_log()] starting thread (client mode): 0xae5a4340
2026-04-11T16:37:52.824 [DEBUG] [Thread-173167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:37:52.839 [DEBUG] [Thread-173167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:37:52.839 [INFO] [Thread-173167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] client lang: <none>
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] server lang: <none>
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] kex follows: False
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:37:52.847 [DEBUG] [Thread-173167] [transport.py] [_log()] Compression: none
2026-04-11T16:37:52.848 [DEBUG] [Thread-173167] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:37:52.908 [DEBUG] [Thread-173167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:37:52.909 [DEBUG] [Thread-173167] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:37:52.910 [DEBUG] [Thread-173167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:37:52.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:37:52.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:37:52.967 [DEBUG] [Thread-173167] [transport.py] [_log()] userauth is OK
2026-04-11T16:37:52.968 [DEBUG] [Thread-173167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:37:52.968 [DEBUG] [Thread-173167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:37:52.968 [DEBUG] [Thread-173167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:37:52.968 [DEBUG] [Thread-173167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:37:52.987 [INFO] [Thread-173167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:37:52.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:37:52.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:37:53.834 [DEBUG] [Thread-173167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:37:53.834 [DEBUG] [Thread-173167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:37:53.882 [DEBUG] [Thread-173167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:37:53.882 [DEBUG] [Thread-173167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:37:53.891 [DEBUG] [Thread-173167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:37:53.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:37:53.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-04-11T16:37:53.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-04-11T16:37:53.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:37:53.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:37:53.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:37:53.929 [DEBUG] [Thread-173167] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:38:02.912 [DEBUG] [Thread-173169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:16.252 [DEBUG] [Thread-173170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:17.965 [DEBUG] [Thread-173171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:23.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:38:23.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:38:23.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-04-11T16:38:25.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 37, 56), 0.12861, 99.4507, 0.0, 7.28856, 13.1294, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:38:25.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:37:56
2026-04-11T16:38:25.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:38:25.742 [DEBUG] [Thread-173172] [transport.py] [_log()] starting thread (client mode): 0xae537340
2026-04-11T16:38:25.742 [DEBUG] [Thread-173172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:38:25.762 [DEBUG] [Thread-173172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:38:25.762 [INFO] [Thread-173172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] client lang: <none>
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] server lang: <none>
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] kex follows: False
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] Compression: none
2026-04-11T16:38:25.765 [DEBUG] [Thread-173172] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:38:25.774 [DEBUG] [Thread-173172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:38:25.775 [DEBUG] [Thread-173172] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:38:25.775 [DEBUG] [Thread-173172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:38:25.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:38:25.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:38:25.777 [DEBUG] [Thread-173172] [transport.py] [_log()] userauth is OK
2026-04-11T16:38:25.777 [DEBUG] [Thread-173172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:38:25.777 [DEBUG] [Thread-173172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:38:25.777 [DEBUG] [Thread-173172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:38:25.777 [DEBUG] [Thread-173172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:38:25.802 [INFO] [Thread-173172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:38:25.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:38:26.376 [DEBUG] [Thread-173172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:38:26.377 [DEBUG] [Thread-173172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:38:26.377 [DEBUG] [Thread-173172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:38:26.418 [DEBUG] [Thread-173172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:38:26.418 [DEBUG] [Thread-173172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:38:26.422 [DEBUG] [Thread-173172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:38:26.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:38:26.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:38:26.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:38:26.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:38:26.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:38:26.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:38:26.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:38:26.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:38:26.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:38:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.609838 -999.00  +13.50   6.11     94  +12.60 1 3 1 3 1   887    0 0.54 -7.00 ----- 6.0 6.1 280.6 6.9 15.0 -0.3 14.9 -0.2 14.4 0.0 14.8 -0.0
2026-04-11T16:38:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:38:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:38:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.609838
2026-04-11T16:38:26.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:38:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:38:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:38:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:38:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:38:26.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:37:56', tmtdew=0.12861, humidity=99.4507, cloud=0.0, wind=7.28856, temperature=13.1294, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:38:10.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:38:26.447 [DEBUG] [Thread-173172] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:38: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-04-11T16:38:26.540 [DEBUG] [Thread-173175] [transport.py] [_log()] starting thread (client mode): 0xae5198a0
2026-04-11T16:38:26.540 [DEBUG] [Thread-173175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:38:26.555 [DEBUG] [Thread-173175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:38:26.555 [INFO] [Thread-173175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] client lang: <none>
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] server lang: <none>
2026-04-11T16:38:26.563 [DEBUG] [Thread-173175] [transport.py] [_log()] kex follows: False
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] Compression: none
2026-04-11T16:38:26.564 [DEBUG] [Thread-173175] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:38:26.624 [DEBUG] [Thread-173175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:38:26.625 [DEBUG] [Thread-173175] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:38:26.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:38:26.626 [DEBUG] [Thread-173175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:38:26.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:38:26.680 [DEBUG] [Thread-173175] [transport.py] [_log()] userauth is OK
2026-04-11T16:38:26.680 [DEBUG] [Thread-173175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:38:26.681 [DEBUG] [Thread-173175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:38:26.681 [DEBUG] [Thread-173175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:38:26.681 [DEBUG] [Thread-173175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:38:26.701 [INFO] [Thread-173175] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:38:26.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:38:26.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:38:27.554 [DEBUG] [Thread-173175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:38:27.555 [DEBUG] [Thread-173175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:38:27.603 [DEBUG] [Thread-173175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:38:27.603 [DEBUG] [Thread-173175] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:38:27.612 [DEBUG] [Thread-173175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:38:27.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:38:27.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-04-11T16:38:27.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-04-11T16:38:27.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:38:27.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:38:27.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:38:27.648 [DEBUG] [Thread-173175] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:38:29.053 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:29.054 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:33.004 [DEBUG] [Thread-173177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:48.056 [DEBUG] [Thread-173178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:38:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:38:57.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:38:57.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-04-11T16:38:58.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 38, 32), 0.12861, 99.4507, 0.0, 7.81776, 13.1294, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:38:58.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:38:32
2026-04-11T16:38:59.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:38:59.476 [DEBUG] [Thread-173179] [transport.py] [_log()] starting thread (client mode): 0xb0fe9420
2026-04-11T16:38:59.476 [DEBUG] [Thread-173179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:38:59.490 [DEBUG] [Thread-173179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:38:59.490 [INFO] [Thread-173179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] client lang: <none>
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] server lang: <none>
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] kex follows: False
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] Compression: none
2026-04-11T16:38:59.493 [DEBUG] [Thread-173179] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:38:59.505 [DEBUG] [Thread-173179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:38:59.505 [DEBUG] [Thread-173179] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:38:59.505 [DEBUG] [Thread-173179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:38:59.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:38:59.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:38:59.506 [DEBUG] [Thread-173179] [transport.py] [_log()] userauth is OK
2026-04-11T16:38:59.506 [DEBUG] [Thread-173179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:38:59.506 [DEBUG] [Thread-173179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:38:59.506 [DEBUG] [Thread-173179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:38:59.506 [DEBUG] [Thread-173179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:38:59.515 [INFO] [Thread-173179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:38:59.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:39:00.131 [DEBUG] [Thread-173179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:39:00.131 [DEBUG] [Thread-173179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:39:00.132 [DEBUG] [Thread-173179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:39:00.171 [DEBUG] [Thread-173179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:39:00.171 [DEBUG] [Thread-173179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:39:00.175 [DEBUG] [Thread-173179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:39:00.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:39:00.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:39:00.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:39:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:39:00.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:39:00.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:39:00.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:39:00.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:39:00.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:39:00.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.610185 -999.00  +13.50   8.24     94  +12.60 1 3 1 3 1   887    0 0.59 -5.94 ----- 8.4 8.2 292.6 8.6 15.0 -0.4 14.9 -0.1 14.5 -0.1 14.8 0.1
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.610185
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:39:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:38:32', tmtdew=0.12861, humidity=99.4507, cloud=0.0, wind=7.81776, temperature=13.1294, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:38:39.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:39:00.198 [DEBUG] [Thread-173179] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:39:00.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:39:00.292 [DEBUG] [Thread-173182] [transport.py] [_log()] starting thread (client mode): 0xb0feb280
2026-04-11T16:39:00.292 [DEBUG] [Thread-173182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:39:00.307 [DEBUG] [Thread-173182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:39:00.307 [INFO] [Thread-173182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:39:00.314 [DEBUG] [Thread-173182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:39:00.314 [DEBUG] [Thread-173182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:39:00.314 [DEBUG] [Thread-173182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:39:00.314 [DEBUG] [Thread-173182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] client lang: <none>
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] server lang: <none>
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] kex follows: False
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] Compression: none
2026-04-11T16:39:00.315 [DEBUG] [Thread-173182] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:39:00.373 [DEBUG] [Thread-173182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:39:00.374 [DEBUG] [Thread-173182] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:39:00.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:39:00.375 [DEBUG] [Thread-173182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:39:00.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:39:00.429 [DEBUG] [Thread-173182] [transport.py] [_log()] userauth is OK
2026-04-11T16:39:00.429 [DEBUG] [Thread-173182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:39:00.429 [DEBUG] [Thread-173182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:39:00.429 [DEBUG] [Thread-173182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:39:00.430 [DEBUG] [Thread-173182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:39:00.448 [INFO] [Thread-173182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:39:00.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:39:00.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:39:01.271 [DEBUG] [Thread-173182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:39:01.271 [DEBUG] [Thread-173182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:39:01.319 [DEBUG] [Thread-173182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:39:01.319 [DEBUG] [Thread-173182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:39:01.328 [DEBUG] [Thread-173182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:39:01.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:39:01.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-04-11T16:39:01.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:39:01.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:39:01.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:39:01.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:39:01.365 [DEBUG] [Thread-173182] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:39:03.093 [DEBUG] [Thread-173184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:39:16.312 [DEBUG] [Thread-173185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:39:18.146 [DEBUG] [Thread-173186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:39:29.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:39:29.197 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:39:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:39:31.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:39:31.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-04-11T16:39:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 39, 7), 0.126, 99.4677, 0.0, 7.99416, 13.196, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:39:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:39:07
2026-04-11T16:39:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:39:33.182 [DEBUG] [Thread-173187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:39:33.279 [DEBUG] [Thread-173188] [transport.py] [_log()] starting thread (client mode): 0xb0febd90
2026-04-11T16:39:33.279 [DEBUG] [Thread-173188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:39:33.295 [DEBUG] [Thread-173188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:39:33.295 [INFO] [Thread-173188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:39:33.296 [DEBUG] [Thread-173188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] client lang: <none>
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] server lang: <none>
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] kex follows: False
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] Compression: none
2026-04-11T16:39:33.297 [DEBUG] [Thread-173188] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:39:33.305 [DEBUG] [Thread-173188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:39:33.306 [DEBUG] [Thread-173188] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:39:33.306 [DEBUG] [Thread-173188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:39:33.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:39:33.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:39:33.307 [DEBUG] [Thread-173188] [transport.py] [_log()] userauth is OK
2026-04-11T16:39:33.307 [DEBUG] [Thread-173188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:39:33.307 [DEBUG] [Thread-173188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:39:33.307 [DEBUG] [Thread-173188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:39:33.307 [DEBUG] [Thread-173188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:39:33.323 [INFO] [Thread-173188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:39:33.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:39:33.940 [DEBUG] [Thread-173188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:39:33.941 [DEBUG] [Thread-173188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:39:33.941 [DEBUG] [Thread-173188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:39:33.981 [DEBUG] [Thread-173188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:39:33.981 [DEBUG] [Thread-173188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:39:33.985 [DEBUG] [Thread-173188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:39:33.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:39:33.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:39:33.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:39:33.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:39:34.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:39:34.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:39:34.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:39:34.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:39:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:39:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.610532 -999.00  +13.40   7.73     94  +12.50 1 3 1 3 1   887    0 0.62 -3.89 ----- 8.2 7.7 288.6 9.2 15.1 -0.4 14.9 -0.2 14.5 -0.1 14.8 -0.1
2026-04-11T16:39:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:39:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:39:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.610532
2026-04-11T16:39:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:39:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:39:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:39:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:39:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:39:34.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:39:07', tmtdew=0.126, humidity=99.4677, cloud=0.0, wind=7.99416, temperature=13.196, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:39:09.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:39:34.007 [DEBUG] [Thread-173188] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:39:34.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:39:34.100 [DEBUG] [Thread-173191] [transport.py] [_log()] starting thread (client mode): 0xae5e4850
2026-04-11T16:39:34.100 [DEBUG] [Thread-173191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:39:34.115 [DEBUG] [Thread-173191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:39:34.115 [INFO] [Thread-173191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:39:34.123 [DEBUG] [Thread-173191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:39:34.124 [DEBUG] [Thread-173191] [transport.py] [_log()] client lang: <none>
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] server lang: <none>
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] kex follows: False
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] Compression: none
2026-04-11T16:39:34.125 [DEBUG] [Thread-173191] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:39:34.182 [DEBUG] [Thread-173191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:39:34.182 [DEBUG] [Thread-173191] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:39:34.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:39:34.184 [DEBUG] [Thread-173191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:39:34.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:39:34.237 [DEBUG] [Thread-173191] [transport.py] [_log()] userauth is OK
2026-04-11T16:39:34.237 [DEBUG] [Thread-173191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:39:34.238 [DEBUG] [Thread-173191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:39:34.238 [DEBUG] [Thread-173191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:39:34.238 [DEBUG] [Thread-173191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:39:34.261 [INFO] [Thread-173191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:39:34.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:39:34.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:39:35.092 [DEBUG] [Thread-173191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:39:35.092 [DEBUG] [Thread-173191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:39:35.140 [DEBUG] [Thread-173191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:39:35.140 [DEBUG] [Thread-173191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:39:35.149 [DEBUG] [Thread-173191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:39:35.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:39:35.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-04-11T16:39:35.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-04-11T16:39:35.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:39:35.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:39:35.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:39:35.186 [DEBUG] [Thread-173191] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:39:48.214 [DEBUG] [Thread-173193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:03.270 [DEBUG] [Thread-173194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:05.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:40:05.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:40:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:40:06.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 39, 42), 0.13661, 99.0349, 0.0, 9.882, 13.7245, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:40:06.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:39:42
2026-04-11T16:40:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:40:07.039 [DEBUG] [Thread-173195] [transport.py] [_log()] starting thread (client mode): 0xb0fead10
2026-04-11T16:40:07.039 [DEBUG] [Thread-173195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:40:07.059 [DEBUG] [Thread-173195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:40:07.059 [INFO] [Thread-173195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:40:07.062 [DEBUG] [Thread-173195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:40:07.062 [DEBUG] [Thread-173195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:40:07.062 [DEBUG] [Thread-173195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] client lang: <none>
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] server lang: <none>
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] kex follows: False
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] Compression: none
2026-04-11T16:40:07.063 [DEBUG] [Thread-173195] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:40:07.080 [DEBUG] [Thread-173195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:40:07.080 [DEBUG] [Thread-173195] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:40:07.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:40:07.081 [DEBUG] [Thread-173195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:40:07.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:40:07.084 [DEBUG] [Thread-173195] [transport.py] [_log()] userauth is OK
2026-04-11T16:40:07.084 [DEBUG] [Thread-173195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:40:07.084 [DEBUG] [Thread-173195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:40:07.084 [DEBUG] [Thread-173195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:40:07.084 [DEBUG] [Thread-173195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:40:07.107 [INFO] [Thread-173195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:40:07.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:40:07.716 [DEBUG] [Thread-173195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:40:07.717 [DEBUG] [Thread-173195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:40:07.717 [DEBUG] [Thread-173195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:40:07.756 [DEBUG] [Thread-173195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:40:07.757 [DEBUG] [Thread-173195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:40:07.758 [DEBUG] [Thread-173195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:40:07.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:40:07.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:40:07.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:40:07.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:40:07.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:40:07.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:40:07.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:40:07.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:40:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:40:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.610885 -999.00  +13.40   6.74     94  +12.50 1 3 1 3 1   887    0 0.68 -2.61 ----- 6.5 6.7 284.8 8.7 15.0 -0.4 14.8 -0.2 14.4 -0.2 14.8 0.0
2026-04-11T16:40:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:40:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:40:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.610885
2026-04-11T16:40:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:40:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:40:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:40:07.773 [DEBUG] [Thread-173195] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:40:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:40:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:40:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:39:42', tmtdew=0.13661, humidity=99.0349, cloud=0.0, wind=9.882, temperature=13.7245, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:39:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:40:07.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:40:07.870 [DEBUG] [Thread-173198] [transport.py] [_log()] starting thread (client mode): 0xae5a7a00
2026-04-11T16:40:07.871 [DEBUG] [Thread-173198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:40:07.885 [DEBUG] [Thread-173198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:40:07.885 [INFO] [Thread-173198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] client lang: <none>
2026-04-11T16:40:07.893 [DEBUG] [Thread-173198] [transport.py] [_log()] server lang: <none>
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] kex follows: False
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] Compression: none
2026-04-11T16:40:07.894 [DEBUG] [Thread-173198] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:40:07.949 [DEBUG] [Thread-173198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:40:07.950 [DEBUG] [Thread-173198] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:40:07.950 [DEBUG] [Thread-173198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:40:07.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:40:07.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:40:08.010 [DEBUG] [Thread-173198] [transport.py] [_log()] userauth is OK
2026-04-11T16:40:08.010 [DEBUG] [Thread-173198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:40:08.010 [DEBUG] [Thread-173198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:40:08.010 [DEBUG] [Thread-173198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:40:08.011 [DEBUG] [Thread-173198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:40:08.029 [INFO] [Thread-173198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:40:08.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:40:08.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:40:08.857 [DEBUG] [Thread-173198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:40:08.857 [DEBUG] [Thread-173198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:40:08.905 [DEBUG] [Thread-173198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:40:08.905 [DEBUG] [Thread-173198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:40:08.914 [DEBUG] [Thread-173198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:40:08.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:40:08.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-04-11T16:40:08.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-04-11T16:40:08.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:40:08.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:40:08.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:40:08.950 [DEBUG] [Thread-173198] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:40:16.371 [DEBUG] [Thread-173200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:18.307 [DEBUG] [Thread-173201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:29.340 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:29.341 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:33.356 [DEBUG] [Thread-173202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:40:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:40:38.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:40:38.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-04-11T16:40:40.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 40, 17), 0.11826, 99.5178, 0.0, 8.68212, 13.2956, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:40:40.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:40:17
2026-04-11T16:40:40.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:40:40.763 [DEBUG] [Thread-173203] [transport.py] [_log()] starting thread (client mode): 0xae5e6170
2026-04-11T16:40:40.763 [DEBUG] [Thread-173203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:40:40.782 [DEBUG] [Thread-173203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:40:40.782 [INFO] [Thread-173203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:40.785 [DEBUG] [Thread-173203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] client lang: <none>
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] server lang: <none>
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] kex follows: False
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] Compression: none
2026-04-11T16:40:40.786 [DEBUG] [Thread-173203] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:40:40.805 [DEBUG] [Thread-173203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:40:40.806 [DEBUG] [Thread-173203] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:40:40.807 [DEBUG] [Thread-173203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:40:40.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:40:40.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:40:40.809 [DEBUG] [Thread-173203] [transport.py] [_log()] userauth is OK
2026-04-11T16:40:40.810 [DEBUG] [Thread-173203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:40:40.810 [DEBUG] [Thread-173203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:40:40.810 [DEBUG] [Thread-173203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:40:40.810 [DEBUG] [Thread-173203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:40:40.844 [INFO] [Thread-173203] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:40:40.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:40:41.440 [DEBUG] [Thread-173203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:40:41.440 [DEBUG] [Thread-173203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:40:41.440 [DEBUG] [Thread-173203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:40:41.481 [DEBUG] [Thread-173203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:40:41.482 [DEBUG] [Thread-173203] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:40:41.485 [DEBUG] [Thread-173203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:40:41.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:40:41.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:40:41.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:40:41.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:40:41.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:40:41.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:40:41.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:40:41.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:40:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:40:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.611232 -999.00  +13.50   6.79     94  +12.60 1 3 1 3 1   887    0 0.74 -0.93 ----- 7.3 6.8 288.2 8.2 15.0 -0.6 14.9 -0.3 14.5 0.0 14.8 -0.2
2026-04-11T16:40:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:40:41.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:40:41.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.611232
2026-04-11T16:40:41.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:40:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:40:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:40:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:40:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:40:41.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:40:17', tmtdew=0.11826, humidity=99.5178, cloud=0.0, wind=8.68212, temperature=13.2956, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:40:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:40:41.504 [DEBUG] [Thread-173203] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:40:41.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:40:41.599 [DEBUG] [Thread-173206] [transport.py] [_log()] starting thread (client mode): 0xae509090
2026-04-11T16:40:41.600 [DEBUG] [Thread-173206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:40:41.615 [DEBUG] [Thread-173206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:40:41.615 [INFO] [Thread-173206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:40:41.622 [DEBUG] [Thread-173206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] client lang: <none>
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] server lang: <none>
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] kex follows: False
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] Compression: none
2026-04-11T16:40:41.623 [DEBUG] [Thread-173206] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:40:41.683 [DEBUG] [Thread-173206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:40:41.683 [DEBUG] [Thread-173206] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:40:41.684 [DEBUG] [Thread-173206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:40:41.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:40:41.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:40:41.743 [DEBUG] [Thread-173206] [transport.py] [_log()] userauth is OK
2026-04-11T16:40:41.744 [DEBUG] [Thread-173206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:40:41.744 [DEBUG] [Thread-173206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:40:41.744 [DEBUG] [Thread-173206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:40:41.744 [DEBUG] [Thread-173206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:40:41.763 [INFO] [Thread-173206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:40:41.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:40:41.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:40:42.571 [DEBUG] [Thread-173206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:40:42.571 [DEBUG] [Thread-173206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:40:42.619 [DEBUG] [Thread-173206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:40:42.619 [DEBUG] [Thread-173206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:40:42.628 [DEBUG] [Thread-173206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:40:42.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:40:42.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:40:42.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:40:42.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:40:42.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:40:42.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:40:42.665 [DEBUG] [Thread-173206] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:40:48.393 [DEBUG] [Thread-173208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:03.453 [DEBUG] [Thread-173209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:12.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:41:12.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:41:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:41:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 40, 53), 0.14682, 98.9693, 0.0, 8.54136, 13.7913, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:41:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:40:53
2026-04-11T16:41:14.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:41:14.517 [DEBUG] [Thread-173210] [transport.py] [_log()] starting thread (client mode): 0xae561900
2026-04-11T16:41:14.517 [DEBUG] [Thread-173210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:41:14.537 [DEBUG] [Thread-173210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:41:14.537 [INFO] [Thread-173210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] client lang: <none>
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] server lang: <none>
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] kex follows: False
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] Compression: none
2026-04-11T16:41:14.539 [DEBUG] [Thread-173210] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:41:14.552 [DEBUG] [Thread-173210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:41:14.552 [DEBUG] [Thread-173210] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:41:14.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:41:14.553 [DEBUG] [Thread-173210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:41:14.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:41:14.555 [DEBUG] [Thread-173210] [transport.py] [_log()] userauth is OK
2026-04-11T16:41:14.555 [DEBUG] [Thread-173210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:41:14.555 [DEBUG] [Thread-173210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:41:14.555 [DEBUG] [Thread-173210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:41:14.556 [DEBUG] [Thread-173210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:41:14.591 [INFO] [Thread-173210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:41:14.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:41:15.152 [DEBUG] [Thread-173210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:41:15.153 [DEBUG] [Thread-173210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:41:15.153 [DEBUG] [Thread-173210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:41:15.194 [DEBUG] [Thread-173210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:41:15.195 [DEBUG] [Thread-173210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:41:15.198 [DEBUG] [Thread-173210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:41:15.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:41:15.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:41:15.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:41:15.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:41:15.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:41:15.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:41:15.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:41:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:41:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:41:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.611574 -999.00  +13.50   6.40     94  +12.60 1 3 1 3 1   887    0 0.77 0.78 ----- 7.3 6.4 295.0 8.9 15.1 -0.5 14.9 -0.2 14.4 0.0 14.8 0.0
2026-04-11T16:41:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:41:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:41:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.611574
2026-04-11T16:41:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:41:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:41:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:41:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:41:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:41:15.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:40:53', tmtdew=0.14682, humidity=98.9693, cloud=0.0, wind=8.54136, temperature=13.7913, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:40:39.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:41:15.227 [DEBUG] [Thread-173210] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:41:15.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:41:15.320 [DEBUG] [Thread-173213] [transport.py] [_log()] starting thread (client mode): 0xae5a5870
2026-04-11T16:41:15.320 [DEBUG] [Thread-173213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:41:15.335 [DEBUG] [Thread-173213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:41:15.335 [INFO] [Thread-173213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:15.343 [DEBUG] [Thread-173213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] client lang: <none>
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] server lang: <none>
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] kex follows: False
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] Compression: none
2026-04-11T16:41:15.344 [DEBUG] [Thread-173213] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:41:15.403 [DEBUG] [Thread-173213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:41:15.404 [DEBUG] [Thread-173213] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:41:15.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:41:15.405 [DEBUG] [Thread-173213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:41:15.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:41:15.459 [DEBUG] [Thread-173213] [transport.py] [_log()] userauth is OK
2026-04-11T16:41:15.459 [DEBUG] [Thread-173213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:41:15.459 [DEBUG] [Thread-173213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:41:15.459 [DEBUG] [Thread-173213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:41:15.459 [DEBUG] [Thread-173213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:41:15.477 [INFO] [Thread-173213] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:41:15.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:41:15.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:41:16.285 [DEBUG] [Thread-173213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:41:16.285 [DEBUG] [Thread-173213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:41:16.333 [DEBUG] [Thread-173213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:41:16.333 [DEBUG] [Thread-173213] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:41:16.342 [DEBUG] [Thread-173213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:41:16.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:41:16.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-04-11T16:41:16.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-04-11T16:41:16.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:41:16.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:41:16.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:41:16.379 [DEBUG] [Thread-173213] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:41:16.428 [DEBUG] [Thread-173215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:18.491 [DEBUG] [Thread-173216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:29.482 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:29.483 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:33.547 [DEBUG] [Thread-173217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:46.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:41:46.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:41:46.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-04-11T16:41:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 41, 29), 0.12599, 99.468, 0.0, 7.8354, 13.2624, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:41:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:41:29
2026-04-11T16:41:48.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:41:48.327 [DEBUG] [Thread-173218] [transport.py] [_log()] starting thread (client mode): 0xae5a5c00
2026-04-11T16:41:48.327 [DEBUG] [Thread-173218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:41:48.347 [DEBUG] [Thread-173218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:41:48.347 [INFO] [Thread-173218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:41:48.349 [DEBUG] [Thread-173218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:41:48.349 [DEBUG] [Thread-173218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:41:48.349 [DEBUG] [Thread-173218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:41:48.349 [DEBUG] [Thread-173218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:48.349 [DEBUG] [Thread-173218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] client lang: <none>
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] server lang: <none>
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] kex follows: False
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] Compression: none
2026-04-11T16:41:48.350 [DEBUG] [Thread-173218] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:41:48.364 [DEBUG] [Thread-173218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:41:48.365 [DEBUG] [Thread-173218] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:41:48.365 [DEBUG] [Thread-173218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:41:48.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:41:48.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:41:48.409 [DEBUG] [Thread-173218] [transport.py] [_log()] userauth is OK
2026-04-11T16:41:48.409 [DEBUG] [Thread-173218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:41:48.409 [DEBUG] [Thread-173218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:41:48.409 [DEBUG] [Thread-173218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:41:48.410 [DEBUG] [Thread-173218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:41:48.436 [INFO] [Thread-173218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:41:48.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:41:48.583 [DEBUG] [Thread-173220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:41:49.112 [DEBUG] [Thread-173218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:41:49.113 [DEBUG] [Thread-173218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:41:49.113 [DEBUG] [Thread-173218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:41:49.153 [DEBUG] [Thread-173218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:41:49.154 [DEBUG] [Thread-173218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:41:49.156 [DEBUG] [Thread-173218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:41:49.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:41:49.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:41:49.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:41:49.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:41:49.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:41:49.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:41:49.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:41:49.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:41:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:41:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.612274 -999.00  +13.40   7.66     94  +12.60 1 3 1 3 1   887    0 0.89 4.59 ----- 8.7 7.7 284.8 10.9 15.0 -0.8 14.9 -0.3 14.4 -0.6 14.8 -0.3
2026-04-11T16:41:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:41:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:41:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.612274
2026-04-11T16:41:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:41:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:41:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:41:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:41:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:41:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:41:29', tmtdew=0.12599, humidity=99.468, cloud=0.0, wind=7.8354, temperature=13.2624, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:41:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:41:49.180 [DEBUG] [Thread-173218] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:41:49.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:41:49.283 [DEBUG] [Thread-173222] [transport.py] [_log()] starting thread (client mode): 0xae560070
2026-04-11T16:41:49.283 [DEBUG] [Thread-173222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:41:49.299 [DEBUG] [Thread-173222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:41:49.300 [INFO] [Thread-173222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:41:49.307 [DEBUG] [Thread-173222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:41:49.307 [DEBUG] [Thread-173222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:41:49.307 [DEBUG] [Thread-173222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:41:49.307 [DEBUG] [Thread-173222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] client lang: <none>
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] server lang: <none>
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] kex follows: False
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:41:49.308 [DEBUG] [Thread-173222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:41:49.309 [DEBUG] [Thread-173222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:41:49.309 [DEBUG] [Thread-173222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:41:49.309 [DEBUG] [Thread-173222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:41:49.309 [DEBUG] [Thread-173222] [transport.py] [_log()] Compression: none
2026-04-11T16:41:49.309 [DEBUG] [Thread-173222] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:41:49.364 [DEBUG] [Thread-173222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:41:49.364 [DEBUG] [Thread-173222] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:41:49.365 [DEBUG] [Thread-173222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:41:49.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:41:49.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:41:49.420 [DEBUG] [Thread-173222] [transport.py] [_log()] userauth is OK
2026-04-11T16:41:49.420 [DEBUG] [Thread-173222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:41:49.420 [DEBUG] [Thread-173222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:41:49.420 [DEBUG] [Thread-173222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:41:49.420 [DEBUG] [Thread-173222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:41:49.440 [INFO] [Thread-173222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:41:49.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:41:49.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:41:50.285 [DEBUG] [Thread-173222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:41:50.285 [DEBUG] [Thread-173222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:41:50.334 [DEBUG] [Thread-173222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:41:50.334 [DEBUG] [Thread-173222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:41:50.343 [DEBUG] [Thread-173222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:41:50.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:41:50.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-04-11T16:41:50.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:41:50.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:41:50.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:41:50.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:41:50.377 [DEBUG] [Thread-173222] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:42:03.619 [DEBUG] [Thread-173224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:16.499 [DEBUG] [Thread-173225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:18.674 [DEBUG] [Thread-173226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:42:20.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:42:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:42:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 42, 4), 0.125995, 99.468, 0.0, 8.24112, 13.279, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:42:21.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:42:04
2026-04-11T16:42:22.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:42:22.267 [DEBUG] [Thread-173227] [transport.py] [_log()] starting thread (client mode): 0xae51bdf0
2026-04-11T16:42:22.267 [DEBUG] [Thread-173227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:42:22.288 [DEBUG] [Thread-173227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:42:22.289 [INFO] [Thread-173227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:42:22.291 [DEBUG] [Thread-173227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] client lang: <none>
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] server lang: <none>
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] kex follows: False
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:42:22.292 [DEBUG] [Thread-173227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:42:22.293 [DEBUG] [Thread-173227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:42:22.293 [DEBUG] [Thread-173227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:42:22.293 [DEBUG] [Thread-173227] [transport.py] [_log()] Compression: none
2026-04-11T16:42:22.293 [DEBUG] [Thread-173227] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:42:22.311 [DEBUG] [Thread-173227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:42:22.311 [DEBUG] [Thread-173227] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:42:22.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:42:22.312 [DEBUG] [Thread-173227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:42:22.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:42:22.314 [DEBUG] [Thread-173227] [transport.py] [_log()] userauth is OK
2026-04-11T16:42:22.315 [DEBUG] [Thread-173227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:42:22.315 [DEBUG] [Thread-173227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:42:22.315 [DEBUG] [Thread-173227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:42:22.315 [DEBUG] [Thread-173227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:42:22.340 [INFO] [Thread-173227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:42:22.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:42:23.004 [DEBUG] [Thread-173227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:42:23.004 [DEBUG] [Thread-173227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:42:23.004 [DEBUG] [Thread-173227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:42:23.045 [DEBUG] [Thread-173227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:42:23.045 [DEBUG] [Thread-173227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:42:23.062 [DEBUG] [Thread-173227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:42:23.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:42:23.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:42:23.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:42:23.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:42:23.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:42:23.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:42:23.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:42:23.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:42:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:42:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.612621 -999.00  +13.40   9.13     94  +12.60 1 3 1 3 1   887    0 0.90 5.09 ----- 8.3 9.1 273.8 10.1 14.9 -1.1 14.9 -0.3 14.4 -0.3 14.7 -0.3
2026-04-11T16:42:23.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:42:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:42:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.612621
2026-04-11T16:42:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:42:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:42:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:42:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:42:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:42:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:42:04', tmtdew=0.125995, humidity=99.468, cloud=0.0, wind=8.24112, temperature=13.279, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:42:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:42:23.081 [DEBUG] [Thread-173227] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:42:23.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:42:23.177 [DEBUG] [Thread-173230] [transport.py] [_log()] starting thread (client mode): 0xae518550
2026-04-11T16:42:23.177 [DEBUG] [Thread-173230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:42:23.192 [DEBUG] [Thread-173230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:42:23.193 [INFO] [Thread-173230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:42:23.200 [DEBUG] [Thread-173230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:42:23.201 [DEBUG] [Thread-173230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] client lang: <none>
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] server lang: <none>
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] kex follows: False
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:42:23.202 [DEBUG] [Thread-173230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:42:23.203 [DEBUG] [Thread-173230] [transport.py] [_log()] Compression: none
2026-04-11T16:42:23.203 [DEBUG] [Thread-173230] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:42:23.261 [DEBUG] [Thread-173230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:42:23.262 [DEBUG] [Thread-173230] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:42:23.263 [DEBUG] [Thread-173230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:42:23.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:42:23.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:42:23.321 [DEBUG] [Thread-173230] [transport.py] [_log()] userauth is OK
2026-04-11T16:42:23.321 [DEBUG] [Thread-173230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:42:23.321 [DEBUG] [Thread-173230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:42:23.321 [DEBUG] [Thread-173230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:42:23.321 [DEBUG] [Thread-173230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:42:23.345 [INFO] [Thread-173230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:42:23.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:42:23.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:42:24.164 [DEBUG] [Thread-173230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:42:24.164 [DEBUG] [Thread-173230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:42:24.212 [DEBUG] [Thread-173230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:42:24.212 [DEBUG] [Thread-173230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:42:24.222 [DEBUG] [Thread-173230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:42:24.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:42:24.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:42:24.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:42:24.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:42:24.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:42:24.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:42:24.259 [DEBUG] [Thread-173230] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:42:29.625 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:29.626 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:33.720 [DEBUG] [Thread-173232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:48.772 [DEBUG] [Thread-173233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:42:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:42:54.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:42:54.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-04-11T16:42:55.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 42, 39), 0.15191, 98.9365, 0.0, 8.36496, 13.7915, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:42:55.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:42:39
2026-04-11T16:42:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:42:56.100 [DEBUG] [Thread-173234] [transport.py] [_log()] starting thread (client mode): 0xae5083a0
2026-04-11T16:42:56.100 [DEBUG] [Thread-173234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:42:56.120 [DEBUG] [Thread-173234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:42:56.121 [INFO] [Thread-173234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] client lang: <none>
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] server lang: <none>
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] kex follows: False
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] Compression: none
2026-04-11T16:42:56.125 [DEBUG] [Thread-173234] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:42:56.145 [DEBUG] [Thread-173234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:42:56.145 [DEBUG] [Thread-173234] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:42:56.146 [DEBUG] [Thread-173234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:42:56.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:42:56.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:42:56.148 [DEBUG] [Thread-173234] [transport.py] [_log()] userauth is OK
2026-04-11T16:42:56.148 [DEBUG] [Thread-173234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:42:56.148 [DEBUG] [Thread-173234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:42:56.148 [DEBUG] [Thread-173234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:42:56.149 [DEBUG] [Thread-173234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:42:56.173 [INFO] [Thread-173234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:42:56.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:42:56.809 [DEBUG] [Thread-173234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:42:56.809 [DEBUG] [Thread-173234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:42:56.809 [DEBUG] [Thread-173234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:42:56.850 [DEBUG] [Thread-173234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:42:56.850 [DEBUG] [Thread-173234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:42:56.854 [DEBUG] [Thread-173234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:42:56.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:42:56.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:42:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:42:56.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:42:56.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:42:56.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:42:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:42:56.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:42:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:42:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.612969 -999.00  +13.40   8.65     94  +12.60 1 3 1 3 1   887    0 0.95 6.79 ----- 10.4 8.7 273.8 10.7 14.9 -1.1 14.9 -0.5 14.3 -0.5 14.7 -0.4
2026-04-11T16:42:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:42:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:42:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.612969
2026-04-11T16:42:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:42:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:42:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:42:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:42:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:42:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:42:39', tmtdew=0.15191, humidity=98.9365, cloud=0.0, wind=8.36496, temperature=13.7915, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:42:40.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:42:56.884 [DEBUG] [Thread-173234] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:42: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-04-11T16:42:56.977 [DEBUG] [Thread-173237] [transport.py] [_log()] starting thread (client mode): 0xae5a7880
2026-04-11T16:42:56.977 [DEBUG] [Thread-173237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:42:56.991 [DEBUG] [Thread-173237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:42:56.991 [INFO] [Thread-173237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:42:56.999 [DEBUG] [Thread-173237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:42:56.999 [DEBUG] [Thread-173237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:42:56.999 [DEBUG] [Thread-173237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] client lang: <none>
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] server lang: <none>
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] kex follows: False
2026-04-11T16:42:57.000 [DEBUG] [Thread-173237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:42:57.001 [DEBUG] [Thread-173237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:42:57.001 [DEBUG] [Thread-173237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:42:57.001 [DEBUG] [Thread-173237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:42:57.001 [DEBUG] [Thread-173237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:42:57.001 [DEBUG] [Thread-173237] [transport.py] [_log()] Compression: none
2026-04-11T16:42:57.001 [DEBUG] [Thread-173237] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:42:57.058 [DEBUG] [Thread-173237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:42:57.058 [DEBUG] [Thread-173237] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:42:57.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:42:57.059 [DEBUG] [Thread-173237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:42:57.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:42:57.113 [DEBUG] [Thread-173237] [transport.py] [_log()] userauth is OK
2026-04-11T16:42:57.113 [DEBUG] [Thread-173237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:42:57.114 [DEBUG] [Thread-173237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:42:57.114 [DEBUG] [Thread-173237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:42:57.114 [DEBUG] [Thread-173237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:42:57.133 [INFO] [Thread-173237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:42:57.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:42:57.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:42:57.981 [DEBUG] [Thread-173237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:42:57.981 [DEBUG] [Thread-173237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:42:58.028 [DEBUG] [Thread-173237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:42:58.029 [DEBUG] [Thread-173237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:42:58.037 [DEBUG] [Thread-173237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:42:58.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:42:58.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-04-11T16:42: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-04-11T16:42:58.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:42:58.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:42:58.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:42:58.071 [DEBUG] [Thread-173237] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:43:03.811 [DEBUG] [Thread-173239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:43:16.553 [DEBUG] [Thread-173240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:43:18.861 [DEBUG] [Thread-173241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:43:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:43:28.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:43: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-04-11T16:43:29.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 43, 15), 0.1285, 99.4519, 0.0, 7.99416, 13.3125, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:43:29.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:43:15
2026-04-11T16:43:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:43:29.767 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:43:29.768 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:43:29.899 [DEBUG] [Thread-173242] [transport.py] [_log()] starting thread (client mode): 0xa7953490
2026-04-11T16:43:29.899 [DEBUG] [Thread-173242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:43:29.915 [DEBUG] [Thread-173242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:43:29.916 [INFO] [Thread-173242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:43:29.919 [DEBUG] [Thread-173242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:43:29.919 [DEBUG] [Thread-173242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:43:29.919 [DEBUG] [Thread-173242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:43:29.919 [DEBUG] [Thread-173242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:43:29.919 [DEBUG] [Thread-173242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] client lang: <none>
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] server lang: <none>
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] kex follows: False
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] Compression: none
2026-04-11T16:43:29.920 [DEBUG] [Thread-173242] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:43:29.936 [DEBUG] [Thread-173242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:43:29.936 [DEBUG] [Thread-173242] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:43:29.937 [DEBUG] [Thread-173242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:43:29.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:43:29.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:43:29.981 [DEBUG] [Thread-173242] [transport.py] [_log()] userauth is OK
2026-04-11T16:43:29.981 [DEBUG] [Thread-173242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:43:29.981 [DEBUG] [Thread-173242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:43:29.981 [DEBUG] [Thread-173242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:43:29.981 [DEBUG] [Thread-173242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:43:30.018 [INFO] [Thread-173242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:43:30.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:43:30.649 [DEBUG] [Thread-173242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:43:30.649 [DEBUG] [Thread-173242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:43:30.650 [DEBUG] [Thread-173242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:43:30.690 [DEBUG] [Thread-173242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:43:30.690 [DEBUG] [Thread-173242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:43:30.694 [DEBUG] [Thread-173242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:43:30.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:43:30.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:43:30.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:43:30.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:43:30.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:43:30.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:43:30.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:43:30.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:43:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:43:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.613316 -999.00  +13.40   8.47     94  +12.60 1 3 1 3 1   887    0 0.96 7.11 ----- 7.9 8.5 275.8 10.9 14.9 -1.0 14.8 -0.3 14.3 -1.2 14.7 -0.3
2026-04-11T16:43:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:43:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:43:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.613316
2026-04-11T16:43:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:43:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:43:30.721 [DEBUG] [Thread-173242] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:43:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:43:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:43:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:43:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:43:15', tmtdew=0.1285, humidity=99.4519, cloud=0.0, wind=7.99416, temperature=13.3125, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:43:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:43:30.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:43:30.814 [DEBUG] [Thread-173245] [transport.py] [_log()] starting thread (client mode): 0xae5a4c40
2026-04-11T16:43:30.814 [DEBUG] [Thread-173245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:43:30.828 [DEBUG] [Thread-173245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:43:30.828 [INFO] [Thread-173245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] client lang: <none>
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] server lang: <none>
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] kex follows: False
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] Compression: none
2026-04-11T16:43:30.836 [DEBUG] [Thread-173245] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:43:30.894 [DEBUG] [Thread-173245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:43:30.895 [DEBUG] [Thread-173245] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:43:30.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:43:30.896 [DEBUG] [Thread-173245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:43:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:43:30.954 [DEBUG] [Thread-173245] [transport.py] [_log()] userauth is OK
2026-04-11T16:43:30.954 [DEBUG] [Thread-173245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:43:30.954 [DEBUG] [Thread-173245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:43:30.955 [DEBUG] [Thread-173245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:43:30.955 [DEBUG] [Thread-173245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:43:30.973 [INFO] [Thread-173245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:43:30.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:43:30.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:43:31.797 [DEBUG] [Thread-173245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:43:31.797 [DEBUG] [Thread-173245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:43:31.845 [DEBUG] [Thread-173245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:43:31.845 [DEBUG] [Thread-173245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:43:31.854 [DEBUG] [Thread-173245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:43:31.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:43:31.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-04-11T16:43:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:43:31.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:43:31.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:43:31.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:43:31.889 [DEBUG] [Thread-173245] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:43:33.897 [DEBUG] [Thread-173247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:43:48.948 [DEBUG] [Thread-173248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:01.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:44:01.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:44:01.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-04-11T16:44:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 43, 52), 0.15699, 98.9038, 0.0, 7.65936, 13.7918, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:44:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:43:52
2026-04-11T16:44:03.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:44:03.729 [DEBUG] [Thread-173249] [transport.py] [_log()] starting thread (client mode): 0xae5a40a0
2026-04-11T16:44:03.730 [DEBUG] [Thread-173249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:44:03.750 [DEBUG] [Thread-173249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:44:03.750 [INFO] [Thread-173249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] client lang: <none>
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] server lang: <none>
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] kex follows: False
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:44:03.753 [DEBUG] [Thread-173249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:44:03.754 [DEBUG] [Thread-173249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:44:03.754 [DEBUG] [Thread-173249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:44:03.754 [DEBUG] [Thread-173249] [transport.py] [_log()] Compression: none
2026-04-11T16:44:03.754 [DEBUG] [Thread-173249] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:44:03.771 [DEBUG] [Thread-173249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:44:03.772 [DEBUG] [Thread-173249] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:44:03.772 [DEBUG] [Thread-173249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:44:03.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:44:03.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:44:03.774 [DEBUG] [Thread-173249] [transport.py] [_log()] userauth is OK
2026-04-11T16:44:03.774 [DEBUG] [Thread-173249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:44:03.775 [DEBUG] [Thread-173249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:44:03.775 [DEBUG] [Thread-173249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:44:03.775 [DEBUG] [Thread-173249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:44:03.799 [INFO] [Thread-173249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:44:03.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:44:03.985 [DEBUG] [Thread-173251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:04.436 [DEBUG] [Thread-173249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:44:04.436 [DEBUG] [Thread-173249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:44:04.437 [DEBUG] [Thread-173249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:44:04.477 [DEBUG] [Thread-173249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:44:04.477 [DEBUG] [Thread-173249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:44:04.480 [DEBUG] [Thread-173249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:44:04.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:44:04.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:44:04.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:44:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:44:04.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:44:04.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:44:04.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:44:04.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:44:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:44:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.613663 -999.00  +13.40   6.16     95  +12.60 1 3 1 3 1   887    0 0.99 7.85 ----- 5.7 6.2 283.8 9.7 14.9 -0.9 14.9 -0.2 14.3 -0.2 14.7 -0.1
2026-04-11T16:44:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:44:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:44:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.613663
2026-04-11T16:44:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:44:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:44:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:44:04.503 [DEBUG] [Thread-173249] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:44:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:44:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:44:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:43:52', tmtdew=0.15699, humidity=98.9038, cloud=0.0, wind=7.65936, temperature=13.7918, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:43:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:44:04.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:44:04.596 [DEBUG] [Thread-173253] [transport.py] [_log()] starting thread (client mode): 0xb0fe9300
2026-04-11T16:44:04.597 [DEBUG] [Thread-173253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:44:04.611 [DEBUG] [Thread-173253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:44:04.611 [INFO] [Thread-173253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] client lang: <none>
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] server lang: <none>
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] kex follows: False
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] Compression: none
2026-04-11T16:44:04.619 [DEBUG] [Thread-173253] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:44:04.679 [DEBUG] [Thread-173253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:44:04.679 [DEBUG] [Thread-173253] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:44:04.680 [DEBUG] [Thread-173253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:44:04.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:44:04.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:44:04.738 [DEBUG] [Thread-173253] [transport.py] [_log()] userauth is OK
2026-04-11T16:44:04.739 [DEBUG] [Thread-173253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:44:04.739 [DEBUG] [Thread-173253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:44:04.739 [DEBUG] [Thread-173253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:44:04.739 [DEBUG] [Thread-173253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:44:04.759 [INFO] [Thread-173253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:44:04.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:44:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:44:05.585 [DEBUG] [Thread-173253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:44:05.586 [DEBUG] [Thread-173253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:44:05.634 [DEBUG] [Thread-173253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:44:05.634 [DEBUG] [Thread-173253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:44:05.643 [DEBUG] [Thread-173253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:44:05.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:44:05.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-04-11T16:44:05.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-04-11T16:44:05.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:44:05.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:44:05.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:44:05.681 [DEBUG] [Thread-173253] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:44:16.600 [DEBUG] [Thread-173255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:19.026 [DEBUG] [Thread-173256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:29.908 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:29.910 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:34.084 [DEBUG] [Thread-173257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:44:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:44:35.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:44:35.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-04-11T16:44:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 44, 27), 0.125905, 99.4687, 0.0, 8.52336, 13.3958, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:44:36.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:44:27
2026-04-11T16:44:37.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:44:37.496 [DEBUG] [Thread-173258] [transport.py] [_log()] starting thread (client mode): 0xae537400
2026-04-11T16:44:37.497 [DEBUG] [Thread-173258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:44:37.516 [DEBUG] [Thread-173258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:44:37.516 [INFO] [Thread-173258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] client lang: <none>
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] server lang: <none>
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] kex follows: False
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] Compression: none
2026-04-11T16:44:37.519 [DEBUG] [Thread-173258] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:44:37.536 [DEBUG] [Thread-173258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:44:37.537 [DEBUG] [Thread-173258] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:44:37.537 [DEBUG] [Thread-173258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:44:37.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:44:37.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:44:37.540 [DEBUG] [Thread-173258] [transport.py] [_log()] userauth is OK
2026-04-11T16:44:37.540 [DEBUG] [Thread-173258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:44:37.540 [DEBUG] [Thread-173258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:44:37.540 [DEBUG] [Thread-173258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:44:37.540 [DEBUG] [Thread-173258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:44:37.564 [INFO] [Thread-173258] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:44:37.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:44:38.164 [DEBUG] [Thread-173258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:44:38.164 [DEBUG] [Thread-173258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:44:38.164 [DEBUG] [Thread-173258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:44:38.204 [DEBUG] [Thread-173258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:44:38.204 [DEBUG] [Thread-173258] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:44:38.206 [DEBUG] [Thread-173258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:44:38.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:44:38.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:44:38.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:44:38.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:44:38.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:44:38.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:44:38.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:44:38.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:44:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:44:38.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.614010 -999.00  +13.40   6.87     95  +12.60 1 3 1 3 1   887    0 1.01 8.46 ----- 7.8 6.9 275.1 9.4 14.9 -0.5 14.8 -0.1 14.3 -0.6 14.8 0.1
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.614010
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:44:38.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:44:27', tmtdew=0.125905, humidity=99.4687, cloud=0.0, wind=8.52336, temperature=13.3958, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:44:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:44:38.223 [DEBUG] [Thread-173258] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:44:38.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:44:38.308 [DEBUG] [Thread-173261] [transport.py] [_log()] starting thread (client mode): 0xae519540
2026-04-11T16:44:38.308 [DEBUG] [Thread-173261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:44:38.323 [DEBUG] [Thread-173261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:44:38.323 [INFO] [Thread-173261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] client lang: <none>
2026-04-11T16:44:38.331 [DEBUG] [Thread-173261] [transport.py] [_log()] server lang: <none>
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] kex follows: False
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] Compression: none
2026-04-11T16:44:38.332 [DEBUG] [Thread-173261] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:44:38.389 [DEBUG] [Thread-173261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:44:38.389 [DEBUG] [Thread-173261] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:44:38.389 [DEBUG] [Thread-173261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:44:38.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:44:38.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:44:38.447 [DEBUG] [Thread-173261] [transport.py] [_log()] userauth is OK
2026-04-11T16:44:38.447 [DEBUG] [Thread-173261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:44:38.447 [DEBUG] [Thread-173261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:44:38.448 [DEBUG] [Thread-173261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:44:38.448 [DEBUG] [Thread-173261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:44:38.469 [INFO] [Thread-173261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:44:38.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:44:38.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:44:39.292 [DEBUG] [Thread-173261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:44:39.292 [DEBUG] [Thread-173261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:44:39.341 [DEBUG] [Thread-173261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:44:39.341 [DEBUG] [Thread-173261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:44:39.350 [DEBUG] [Thread-173261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:44:39.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:44:39.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-04-11T16:44:39.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:44:39.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:44:39.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:44:39.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:44:39.388 [DEBUG] [Thread-173261] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:44:49.123 [DEBUG] [Thread-173263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:04.176 [DEBUG] [Thread-173264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:09.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:45:09.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:45:09.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-04-11T16:45:10.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 45, 2), 0.13105, 99.4355, 0.0, 8.8938, 13.3626, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:45:10.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:45:02
2026-04-11T16:45:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:45:11.249 [DEBUG] [Thread-173265] [transport.py] [_log()] starting thread (client mode): 0xae518a30
2026-04-11T16:45:11.249 [DEBUG] [Thread-173265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:45:11.270 [DEBUG] [Thread-173265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:45:11.271 [INFO] [Thread-173265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] client lang: <none>
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] server lang: <none>
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] kex follows: False
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] Compression: none
2026-04-11T16:45:11.274 [DEBUG] [Thread-173265] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:45:11.292 [DEBUG] [Thread-173265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:45:11.293 [DEBUG] [Thread-173265] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:45:11.293 [DEBUG] [Thread-173265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:45:11.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:45:11.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:45:11.295 [DEBUG] [Thread-173265] [transport.py] [_log()] userauth is OK
2026-04-11T16:45:11.296 [DEBUG] [Thread-173265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:45:11.296 [DEBUG] [Thread-173265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:45:11.296 [DEBUG] [Thread-173265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:45:11.296 [DEBUG] [Thread-173265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:45:11.320 [INFO] [Thread-173265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:45:11.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:45:12.072 [DEBUG] [Thread-173265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:45:12.073 [DEBUG] [Thread-173265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:45:12.073 [DEBUG] [Thread-173265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:45:12.114 [DEBUG] [Thread-173265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:45:12.114 [DEBUG] [Thread-173265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:45:12.118 [DEBUG] [Thread-173265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:45:12.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:45:12.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:45:12.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:45:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:45:12.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:45:12.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:45:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:45:12.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:45:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:45:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.614357 -999.00  +13.40   7.53     95  +12.60 1 3 1 3 1   887    0 1.02 8.70 ----- 6.3 7.5 279.4 9.9 15.0 -0.7 14.8 -0.2 14.4 -0.1 14.7 -0.3
2026-04-11T16:45:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:45:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:45:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.614357
2026-04-11T16:45:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:45:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:45:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:45:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:45:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:45:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:45:02', tmtdew=0.13105, humidity=99.4355, cloud=0.0, wind=8.8938, temperature=13.3626, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:44:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:45:12.147 [DEBUG] [Thread-173265] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:45:12.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:45:12.243 [DEBUG] [Thread-173268] [transport.py] [_log()] starting thread (client mode): 0xae5a4100
2026-04-11T16:45:12.243 [DEBUG] [Thread-173268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:45:12.263 [DEBUG] [Thread-173268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:45:12.264 [INFO] [Thread-173268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:45:12.271 [DEBUG] [Thread-173268] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:45:12.271 [DEBUG] [Thread-173268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:45:12.271 [DEBUG] [Thread-173268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:45:12.271 [DEBUG] [Thread-173268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:12.271 [DEBUG] [Thread-173268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] client lang: <none>
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] server lang: <none>
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] kex follows: False
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] Compression: none
2026-04-11T16:45:12.272 [DEBUG] [Thread-173268] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:45:12.335 [DEBUG] [Thread-173268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:45:12.336 [DEBUG] [Thread-173268] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:45:12.336 [DEBUG] [Thread-173268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:45:12.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:45:12.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:45:12.395 [DEBUG] [Thread-173268] [transport.py] [_log()] userauth is OK
2026-04-11T16:45:12.395 [DEBUG] [Thread-173268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:45:12.396 [DEBUG] [Thread-173268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:45:12.396 [DEBUG] [Thread-173268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:45:12.396 [DEBUG] [Thread-173268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:45:12.421 [INFO] [Thread-173268] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:45:12.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:45:12.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:45:13.222 [DEBUG] [Thread-173268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:45:13.222 [DEBUG] [Thread-173268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:45:13.270 [DEBUG] [Thread-173268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:45:13.270 [DEBUG] [Thread-173268] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:45:13.280 [DEBUG] [Thread-173268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:45:13.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:45:13.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-04-11T16:45:13.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-04-11T16:45:13.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:45:13.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:45:13.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:45:13.316 [DEBUG] [Thread-173268] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:45:16.650 [DEBUG] [Thread-173270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:19.213 [DEBUG] [Thread-173271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:30.051 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:30.052 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:34.265 [DEBUG] [Thread-173272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:45:43.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:45:43.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:45:43.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-04-11T16:45:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 45, 2), 0.13105, 99.4355, 0.0, 8.8938, 13.3626, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:45:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:45:02
2026-04-11T16:45:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:45:45.177 [DEBUG] [Thread-173273] [transport.py] [_log()] starting thread (client mode): 0xae561450
2026-04-11T16:45:45.177 [DEBUG] [Thread-173273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:45:45.197 [DEBUG] [Thread-173273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:45:45.197 [INFO] [Thread-173273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] client lang: <none>
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] server lang: <none>
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] kex follows: False
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:45:45.200 [DEBUG] [Thread-173273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:45:45.201 [DEBUG] [Thread-173273] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:45:45.201 [DEBUG] [Thread-173273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:45:45.201 [DEBUG] [Thread-173273] [transport.py] [_log()] Compression: none
2026-04-11T16:45:45.201 [DEBUG] [Thread-173273] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:45:45.218 [DEBUG] [Thread-173273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:45:45.218 [DEBUG] [Thread-173273] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:45:45.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:45:45.219 [DEBUG] [Thread-173273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:45:45.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:45:45.221 [DEBUG] [Thread-173273] [transport.py] [_log()] userauth is OK
2026-04-11T16:45:45.222 [DEBUG] [Thread-173273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:45:45.222 [DEBUG] [Thread-173273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:45:45.222 [DEBUG] [Thread-173273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:45:45.222 [DEBUG] [Thread-173273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:45:45.245 [INFO] [Thread-173273] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:45:45.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:45:45.895 [DEBUG] [Thread-173273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:45:45.895 [DEBUG] [Thread-173273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:45:45.896 [DEBUG] [Thread-173273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:45:45.936 [DEBUG] [Thread-173273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:45:45.936 [DEBUG] [Thread-173273] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:45:45.939 [DEBUG] [Thread-173273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:45:45.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:45:45.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:45:45.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:45:45.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:45:45.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:45:45.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:45:45.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:45:45.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:45:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:45:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.614704 -999.00  +13.50   6.22     95  +12.70 1 3 1 3 1   887    0 1.06 10.11 ----- 7.9 6.2 290.8 7.0 15.0 -0.4 14.9 -0.2 14.4 -0.2 14.8 0.0
2026-04-11T16:45:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:45:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:45:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.614704
2026-04-11T16:45:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:45:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:45:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:45:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:45:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:45:45.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:45:02', tmtdew=0.13105, humidity=99.4355, cloud=0.0, wind=8.8938, temperature=13.3626, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:45:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:45:45.965 [DEBUG] [Thread-173273] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:45:46.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:45:46.061 [DEBUG] [Thread-173276] [transport.py] [_log()] starting thread (client mode): 0xb0feb520
2026-04-11T16:45:46.061 [DEBUG] [Thread-173276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:45:46.076 [DEBUG] [Thread-173276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:45:46.076 [INFO] [Thread-173276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:45:46.085 [DEBUG] [Thread-173276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] client lang: <none>
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] server lang: <none>
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] kex follows: False
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] Compression: none
2026-04-11T16:45:46.086 [DEBUG] [Thread-173276] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:45:46.143 [DEBUG] [Thread-173276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:45:46.144 [DEBUG] [Thread-173276] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:45:46.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:45:46.145 [DEBUG] [Thread-173276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:45:46.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:45:46.200 [DEBUG] [Thread-173276] [transport.py] [_log()] userauth is OK
2026-04-11T16:45:46.200 [DEBUG] [Thread-173276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:45:46.200 [DEBUG] [Thread-173276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:45:46.200 [DEBUG] [Thread-173276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:45:46.201 [DEBUG] [Thread-173276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:45:46.221 [INFO] [Thread-173276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:45:46.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:45:46.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:45:47.091 [DEBUG] [Thread-173276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:45:47.091 [DEBUG] [Thread-173276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:45:47.139 [DEBUG] [Thread-173276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:45:47.139 [DEBUG] [Thread-173276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:45:47.149 [DEBUG] [Thread-173276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:45:47.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:45:47.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:45:47.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:45:47.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:45:47.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:45:47.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:45:47.185 [DEBUG] [Thread-173276] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:45:49.304 [DEBUG] [Thread-173278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:04.356 [DEBUG] [Thread-173279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:16.701 [DEBUG] [Thread-173280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:17.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:46:17.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:46:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:46:18.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 45, 38), 0.1569, 98.9046, 0.0, 9.31752, 13.8254, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:46:18.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:45:38
2026-04-11T16:46:19.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:46:19.218 [DEBUG] [Thread-173281] [transport.py] [_log()] starting thread (client mode): 0xae5f02e0
2026-04-11T16:46:19.219 [DEBUG] [Thread-173281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:46:19.233 [DEBUG] [Thread-173281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:46:19.233 [INFO] [Thread-173281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:19.235 [DEBUG] [Thread-173281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] client lang: <none>
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] server lang: <none>
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] kex follows: False
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] Compression: none
2026-04-11T16:46:19.236 [DEBUG] [Thread-173281] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:46:19.255 [DEBUG] [Thread-173281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:46:19.256 [DEBUG] [Thread-173281] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:46:19.256 [DEBUG] [Thread-173281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:46:19.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:46:19.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:46:19.258 [DEBUG] [Thread-173281] [transport.py] [_log()] userauth is OK
2026-04-11T16:46:19.259 [DEBUG] [Thread-173281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:46:19.259 [DEBUG] [Thread-173281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:46:19.259 [DEBUG] [Thread-173281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:46:19.259 [DEBUG] [Thread-173281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:46:19.284 [INFO] [Thread-173281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:46:19.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:46:19.390 [DEBUG] [Thread-173283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:19.937 [DEBUG] [Thread-173281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:46:19.937 [DEBUG] [Thread-173281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:46:19.938 [DEBUG] [Thread-173281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:46:19.978 [DEBUG] [Thread-173281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:46:19.979 [DEBUG] [Thread-173281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:46:19.982 [DEBUG] [Thread-173281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:46:19.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:46:19.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:46:19.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:46:20.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:46:20.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:46:20.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:46:20.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:46:20.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:46:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:46:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.615052 -999.00  +13.50   6.87     95  +12.70 1 3 1 3 1   887    0 1.06 10.07 ----- 7.5 6.9 292.0 10.1 15.0 -0.7 14.9 -0.3 -999.0 -999.0 14.8 0.0
2026-04-11T16:46:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:46:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:46:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.615052
2026-04-11T16:46:20.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:46:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:46:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:46:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:46:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:46:20.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:45:38', tmtdew=0.1569, humidity=98.9046, cloud=0.0, wind=9.31752, temperature=13.8254, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:45:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:46:20.010 [DEBUG] [Thread-173281] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:46:20.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:46:20.101 [DEBUG] [Thread-173285] [transport.py] [_log()] starting thread (client mode): 0xae562140
2026-04-11T16:46:20.102 [DEBUG] [Thread-173285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:46:20.116 [DEBUG] [Thread-173285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:46:20.117 [INFO] [Thread-173285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:46:20.124 [DEBUG] [Thread-173285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:46:20.124 [DEBUG] [Thread-173285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:46:20.124 [DEBUG] [Thread-173285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:46:20.124 [DEBUG] [Thread-173285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:20.124 [DEBUG] [Thread-173285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] client lang: <none>
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] server lang: <none>
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] kex follows: False
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] Compression: none
2026-04-11T16:46:20.125 [DEBUG] [Thread-173285] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:46:20.190 [DEBUG] [Thread-173285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:46:20.191 [DEBUG] [Thread-173285] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:46:20.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:46:20.192 [DEBUG] [Thread-173285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:46:20.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:46:20.248 [DEBUG] [Thread-173285] [transport.py] [_log()] userauth is OK
2026-04-11T16:46:20.249 [DEBUG] [Thread-173285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:46:20.249 [DEBUG] [Thread-173285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:46:20.249 [DEBUG] [Thread-173285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:46:20.249 [DEBUG] [Thread-173285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:46:20.269 [INFO] [Thread-173285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:46:20.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:46:20.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:46:21.161 [DEBUG] [Thread-173285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:46:21.161 [DEBUG] [Thread-173285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:46:21.209 [DEBUG] [Thread-173285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:46:21.210 [DEBUG] [Thread-173285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:46:21.219 [DEBUG] [Thread-173285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:46:21.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:46:21.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-04-11T16:46:21.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:46:21.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:46:21.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:46:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:46:21.256 [DEBUG] [Thread-173285] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:46:30.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:30.194 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:34.427 [DEBUG] [Thread-173287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:49.481 [DEBUG] [Thread-173288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:46:51.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:46:51.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:46:51.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-04-11T16:46:52.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 46, 14), 0.081035, 99.4357, 0.0, 8.66448, 13.3793, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:46:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:46:14
2026-04-11T16:46:52.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:46:53.127 [DEBUG] [Thread-173289] [transport.py] [_log()] starting thread (client mode): 0xae51b1f0
2026-04-11T16:46:53.127 [DEBUG] [Thread-173289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:46:53.147 [DEBUG] [Thread-173289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:46:53.148 [INFO] [Thread-173289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:53.151 [DEBUG] [Thread-173289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] client lang: <none>
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] server lang: <none>
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] kex follows: False
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] Compression: none
2026-04-11T16:46:53.152 [DEBUG] [Thread-173289] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:46:53.170 [DEBUG] [Thread-173289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:46:53.171 [DEBUG] [Thread-173289] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:46:53.171 [DEBUG] [Thread-173289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:46:53.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:46:53.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:46:53.213 [DEBUG] [Thread-173289] [transport.py] [_log()] userauth is OK
2026-04-11T16:46:53.213 [DEBUG] [Thread-173289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:46:53.214 [DEBUG] [Thread-173289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:46:53.214 [DEBUG] [Thread-173289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:46:53.214 [DEBUG] [Thread-173289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:46:53.234 [INFO] [Thread-173289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:46:53.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:46:53.882 [DEBUG] [Thread-173289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:46:53.882 [DEBUG] [Thread-173289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:46:53.882 [DEBUG] [Thread-173289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:46:53.923 [DEBUG] [Thread-173289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:46:53.923 [DEBUG] [Thread-173289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:46:53.927 [DEBUG] [Thread-173289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:46:53.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:46:53.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:46:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:46:53.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:46:53.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:46:53.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:46:53.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:46:53.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:46:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:46:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.615746 -999.00  +13.50   9.09     95  +12.70 1 3 1 3 1   887    0 1.06 10.07 ----- 8.7 9.1 273.6 12.7 15.0 -1.1 14.9 -0.4 14.4 -0.4 14.8 -0.3
2026-04-11T16:46:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:46:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:46:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.615746
2026-04-11T16:46:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:46:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:46:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:46:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:46:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:46:53.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:46:14', tmtdew=0.081035, humidity=99.4357, cloud=0.0, wind=8.66448, temperature=13.3793, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:46:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:46:53.954 [DEBUG] [Thread-173289] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:46:54.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:46:54.047 [DEBUG] [Thread-173292] [transport.py] [_log()] starting thread (client mode): 0xae5f1360
2026-04-11T16:46:54.047 [DEBUG] [Thread-173292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:46:54.067 [DEBUG] [Thread-173292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:46:54.067 [INFO] [Thread-173292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:46:54.075 [DEBUG] [Thread-173292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:46:54.075 [DEBUG] [Thread-173292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] client lang: <none>
2026-04-11T16:46:54.076 [DEBUG] [Thread-173292] [transport.py] [_log()] server lang: <none>
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] kex follows: False
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:46:54.077 [DEBUG] [Thread-173292] [transport.py] [_log()] Compression: none
2026-04-11T16:46:54.078 [DEBUG] [Thread-173292] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:46:54.133 [DEBUG] [Thread-173292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:46:54.134 [DEBUG] [Thread-173292] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:46:54.135 [DEBUG] [Thread-173292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:46:54.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:46:54.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:46:54.193 [DEBUG] [Thread-173292] [transport.py] [_log()] userauth is OK
2026-04-11T16:46:54.193 [DEBUG] [Thread-173292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:46:54.194 [DEBUG] [Thread-173292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:46:54.194 [DEBUG] [Thread-173292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:46:54.194 [DEBUG] [Thread-173292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:46:54.213 [INFO] [Thread-173292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:46:54.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:46:54.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:46:55.028 [DEBUG] [Thread-173292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:46:55.028 [DEBUG] [Thread-173292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:46:55.076 [DEBUG] [Thread-173292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:46:55.076 [DEBUG] [Thread-173292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:46:55.086 [DEBUG] [Thread-173292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:46:55.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:46:55.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-04-11T16:46:55.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-04-11T16:46:55.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:46:55.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:46:55.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:46:55.122 [DEBUG] [Thread-173292] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:47:04.518 [DEBUG] [Thread-173294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:16.751 [DEBUG] [Thread-173295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:19.577 [DEBUG] [Thread-173296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:25.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:47:25.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:47:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:47:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 46, 49), 0.15701, 98.904, 0.0, 10.4112, 13.8914, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:47:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:46:49
2026-04-11T16:47:26.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:47:26.984 [DEBUG] [Thread-173297] [transport.py] [_log()] starting thread (client mode): 0xae535e10
2026-04-11T16:47:26.985 [DEBUG] [Thread-173297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:47:27.005 [DEBUG] [Thread-173297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:47:27.006 [INFO] [Thread-173297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:47:27.009 [DEBUG] [Thread-173297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:47:27.009 [DEBUG] [Thread-173297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:47:27.009 [DEBUG] [Thread-173297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:47:27.009 [DEBUG] [Thread-173297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:47:27.009 [DEBUG] [Thread-173297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:47:27.009 [DEBUG] [Thread-173297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] client lang: <none>
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] server lang: <none>
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] kex follows: False
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:47:27.010 [DEBUG] [Thread-173297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:47:27.011 [DEBUG] [Thread-173297] [transport.py] [_log()] Compression: none
2026-04-11T16:47:27.011 [DEBUG] [Thread-173297] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:47:27.032 [DEBUG] [Thread-173297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:47:27.032 [DEBUG] [Thread-173297] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:47:27.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:47:27.034 [DEBUG] [Thread-173297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:47:27.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:47:27.036 [DEBUG] [Thread-173297] [transport.py] [_log()] userauth is OK
2026-04-11T16:47:27.036 [DEBUG] [Thread-173297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:47:27.036 [DEBUG] [Thread-173297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:47:27.036 [DEBUG] [Thread-173297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:47:27.037 [DEBUG] [Thread-173297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:47:27.062 [INFO] [Thread-173297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:47:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:47:27.695 [DEBUG] [Thread-173297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:47:27.696 [DEBUG] [Thread-173297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:47:27.696 [DEBUG] [Thread-173297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:47:27.737 [DEBUG] [Thread-173297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:47:27.737 [DEBUG] [Thread-173297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:47:27.740 [DEBUG] [Thread-173297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:47:27.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:47:27.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:47:27.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:47:27.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:47:27.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:47:27.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:47:27.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:47:27.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:47:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:47:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.616094 -999.00  +13.50   9.06     95  +12.80 1 3 1 3 1   887    0 1.04 9.54 ----- 9.6 9.1 281.1 11.9 14.9 -0.8 14.9 -0.3 14.4 -0.7 14.8 -0.0
2026-04-11T16:47:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:47:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:47:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.616094
2026-04-11T16:47:27.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:47:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:47:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:47:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:47:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:47:27.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:46:49', tmtdew=0.15701, humidity=98.904, cloud=0.0, wind=10.4112, temperature=13.8914, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:47:10.522', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:47:27.763 [DEBUG] [Thread-173297] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:47:27.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:47:27.856 [DEBUG] [Thread-173300] [transport.py] [_log()] starting thread (client mode): 0xae5a4e80
2026-04-11T16:47:27.856 [DEBUG] [Thread-173300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:47:27.872 [DEBUG] [Thread-173300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:47:27.872 [INFO] [Thread-173300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] client lang: <none>
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] server lang: <none>
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] kex follows: False
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:47:27.880 [DEBUG] [Thread-173300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:47:27.881 [DEBUG] [Thread-173300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:47:27.881 [DEBUG] [Thread-173300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:47:27.881 [DEBUG] [Thread-173300] [transport.py] [_log()] Compression: none
2026-04-11T16:47:27.881 [DEBUG] [Thread-173300] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:47:27.938 [DEBUG] [Thread-173300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:47:27.938 [DEBUG] [Thread-173300] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:47:27.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:47:27.940 [DEBUG] [Thread-173300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:47:27.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:47:27.997 [DEBUG] [Thread-173300] [transport.py] [_log()] userauth is OK
2026-04-11T16:47:27.997 [DEBUG] [Thread-173300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:47:27.997 [DEBUG] [Thread-173300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:47:27.997 [DEBUG] [Thread-173300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:47:27.997 [DEBUG] [Thread-173300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:47:28.017 [INFO] [Thread-173300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:47:28.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:47:28.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:47:28.832 [DEBUG] [Thread-173300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:47:28.832 [DEBUG] [Thread-173300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:47:28.880 [DEBUG] [Thread-173300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:47:28.880 [DEBUG] [Thread-173300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:47:28.889 [DEBUG] [Thread-173300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:47:28.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:47:28.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-04-11T16:47:28.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:47:28.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:47:28.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:47:28.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:47:28.927 [DEBUG] [Thread-173300] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:47:30.334 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:30.335 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:34.611 [DEBUG] [Thread-173302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:49.663 [DEBUG] [Thread-173303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:47:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:47:58.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:47:58.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-04-11T16:48:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 47, 25), 0.125955, 99.4686, 0.0, 11.5758, 13.512, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:48:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:47:25
2026-04-11T16:48:00.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:48:00.770 [DEBUG] [Thread-173304] [transport.py] [_log()] starting thread (client mode): 0xae5a4a30
2026-04-11T16:48:00.770 [DEBUG] [Thread-173304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:48:00.794 [DEBUG] [Thread-173304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:48:00.794 [INFO] [Thread-173304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:48:00.797 [DEBUG] [Thread-173304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:48:00.797 [DEBUG] [Thread-173304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] client lang: <none>
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] server lang: <none>
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] kex follows: False
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] Compression: none
2026-04-11T16:48:00.798 [DEBUG] [Thread-173304] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:48:00.814 [DEBUG] [Thread-173304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:48:00.815 [DEBUG] [Thread-173304] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:48:00.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:48:00.816 [DEBUG] [Thread-173304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:48:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:48:00.818 [DEBUG] [Thread-173304] [transport.py] [_log()] userauth is OK
2026-04-11T16:48:00.818 [DEBUG] [Thread-173304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:48:00.818 [DEBUG] [Thread-173304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:48:00.818 [DEBUG] [Thread-173304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:48:00.818 [DEBUG] [Thread-173304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:48:00.836 [INFO] [Thread-173304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:48:00.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:48:01.498 [DEBUG] [Thread-173304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:48:01.498 [DEBUG] [Thread-173304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:48:01.498 [DEBUG] [Thread-173304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:48:01.539 [DEBUG] [Thread-173304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:48:01.539 [DEBUG] [Thread-173304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:48:01.542 [DEBUG] [Thread-173304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:48:01.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:48:01.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:48:01.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:48:01.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:48:01.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:48:01.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:48:01.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:48:01.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:48:01.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:48:01.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.616441 -999.00  +13.40   9.23     95  +12.70 1 3 1 3 1   887    0 1.05 9.82 ----- 10.3 9.2 281.0 11.2 14.9 -0.9 14.8 -0.4 14.4 -0.5 14.8 -0.1
2026-04-11T16:48:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:48:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:48:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.616441
2026-04-11T16:48:01.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:48:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:48:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:48:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:48:01.569 [DEBUG] [Thread-173304] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:48:01.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:48:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:47:25', tmtdew=0.125955, humidity=99.4686, cloud=0.0, wind=11.5758, temperature=13.512, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:47:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:48:01.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:48:01.671 [DEBUG] [Thread-173307] [transport.py] [_log()] starting thread (client mode): 0xae562140
2026-04-11T16:48:01.671 [DEBUG] [Thread-173307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:48:01.685 [DEBUG] [Thread-173307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:48:01.685 [INFO] [Thread-173307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] client lang: <none>
2026-04-11T16:48:01.693 [DEBUG] [Thread-173307] [transport.py] [_log()] server lang: <none>
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] kex follows: False
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] Compression: none
2026-04-11T16:48:01.694 [DEBUG] [Thread-173307] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:48:01.754 [DEBUG] [Thread-173307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:48:01.755 [DEBUG] [Thread-173307] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:48:01.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:48:01.756 [DEBUG] [Thread-173307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:48:01.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:48:01.813 [DEBUG] [Thread-173307] [transport.py] [_log()] userauth is OK
2026-04-11T16:48:01.813 [DEBUG] [Thread-173307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:48:01.813 [DEBUG] [Thread-173307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:48:01.813 [DEBUG] [Thread-173307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:48:01.813 [DEBUG] [Thread-173307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:48:01.828 [INFO] [Thread-173307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:48:01.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:48:01.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:48:02.682 [DEBUG] [Thread-173307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:48:02.683 [DEBUG] [Thread-173307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:48:02.730 [DEBUG] [Thread-173307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:48:02.730 [DEBUG] [Thread-173307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:48:02.740 [DEBUG] [Thread-173307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:48:02.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:48:02.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-04-11T16:48:02.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-04-11T16:48:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:48:02.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:48:02.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:48:02.780 [DEBUG] [Thread-173307] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:48:04.700 [DEBUG] [Thread-173309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:48:16.794 [DEBUG] [Thread-173310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:48:19.751 [DEBUG] [Thread-173311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:48:30.475 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:48:30.476 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:48:32.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:48:32.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:48:32.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-04-11T16:48:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 48), 0.125925, 99.4688, 0.0, 10.6578, 13.4455, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:48:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:48:00
2026-04-11T16:48:34.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:48:34.576 [DEBUG] [Thread-173312] [transport.py] [_log()] starting thread (client mode): 0xae51a650
2026-04-11T16:48:34.576 [DEBUG] [Thread-173312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:48:34.597 [DEBUG] [Thread-173312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:48:34.597 [INFO] [Thread-173312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:48:34.598 [DEBUG] [Thread-173312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:48:34.598 [DEBUG] [Thread-173312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:48:34.598 [DEBUG] [Thread-173312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:48:34.598 [DEBUG] [Thread-173312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] client lang: <none>
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] server lang: <none>
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] kex follows: False
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] Compression: none
2026-04-11T16:48:34.599 [DEBUG] [Thread-173312] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:48:34.618 [DEBUG] [Thread-173312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:48:34.618 [DEBUG] [Thread-173312] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:48:34.619 [DEBUG] [Thread-173312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:48:34.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:48:34.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:48:34.620 [DEBUG] [Thread-173312] [transport.py] [_log()] userauth is OK
2026-04-11T16:48:34.621 [DEBUG] [Thread-173312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:48:34.621 [DEBUG] [Thread-173312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:48:34.621 [DEBUG] [Thread-173312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:48:34.621 [DEBUG] [Thread-173312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:48:34.644 [INFO] [Thread-173312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:48:34.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:48:34.790 [DEBUG] [Thread-173314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:48:35.321 [DEBUG] [Thread-173312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:48:35.322 [DEBUG] [Thread-173312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:48:35.322 [DEBUG] [Thread-173312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:48:35.363 [DEBUG] [Thread-173312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:48:35.364 [DEBUG] [Thread-173312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:48:35.366 [DEBUG] [Thread-173312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:48:35.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:48:35.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:48:35.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:48:35.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:48:35.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:48:35.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:48:35.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:48:35.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.616788 -999.00  +13.50   7.42     95  +12.70 1 3 1 3 1   887    0 0.99 8.29 ----- 7.3 7.4 291.4 9.9 14.9 -0.7 14.8 -0.4 14.4 -0.3 -999.0 -999.0
2026-04-11T16:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.616788
2026-04-11T16:48:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:48:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:48:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:48:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:48:35.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:48:35.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:48:00', tmtdew=0.125925, humidity=99.4688, cloud=0.0, wind=10.6578, temperature=13.4455, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:48:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:48:35.397 [DEBUG] [Thread-173312] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:48:35.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:48:35.490 [DEBUG] [Thread-173316] [transport.py] [_log()] starting thread (client mode): 0xae5f27d0
2026-04-11T16:48:35.490 [DEBUG] [Thread-173316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:48:35.505 [DEBUG] [Thread-173316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:48:35.505 [INFO] [Thread-173316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:48:35.512 [DEBUG] [Thread-173316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] client lang: <none>
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] server lang: <none>
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] kex follows: False
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] Compression: none
2026-04-11T16:48:35.513 [DEBUG] [Thread-173316] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:48:35.570 [DEBUG] [Thread-173316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:48:35.571 [DEBUG] [Thread-173316] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:48:35.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:48:35.572 [DEBUG] [Thread-173316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:48:35.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:48:35.629 [DEBUG] [Thread-173316] [transport.py] [_log()] userauth is OK
2026-04-11T16:48:35.630 [DEBUG] [Thread-173316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:48:35.630 [DEBUG] [Thread-173316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:48:35.630 [DEBUG] [Thread-173316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:48:35.630 [DEBUG] [Thread-173316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:48:35.643 [INFO] [Thread-173316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:48:35.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:48:35.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:48:36.467 [DEBUG] [Thread-173316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:48:36.468 [DEBUG] [Thread-173316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:48:36.516 [DEBUG] [Thread-173316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:48:36.516 [DEBUG] [Thread-173316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:48:36.531 [DEBUG] [Thread-173316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:48:36.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:48:36.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-04-11T16:48:36.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-04-11T16:48:36.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:48:36.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:48:36.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:48:36.567 [DEBUG] [Thread-173316] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:48:49.828 [DEBUG] [Thread-173318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:04.882 [DEBUG] [Thread-173319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:06.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:49:06.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:49:06.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-04-11T16:49:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 48, 36), 0.15696, 98.9043, 0.0, 9.0, 13.8916, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:49:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:48:36
2026-04-11T16:49:08.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:49:08.362 [DEBUG] [Thread-173320] [transport.py] [_log()] starting thread (client mode): 0xae517220
2026-04-11T16:49:08.362 [DEBUG] [Thread-173320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:49:08.382 [DEBUG] [Thread-173320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:49:08.382 [INFO] [Thread-173320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] client lang: <none>
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] server lang: <none>
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] kex follows: False
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:49:08.385 [DEBUG] [Thread-173320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:49:08.386 [DEBUG] [Thread-173320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:49:08.386 [DEBUG] [Thread-173320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:49:08.386 [DEBUG] [Thread-173320] [transport.py] [_log()] Compression: none
2026-04-11T16:49:08.386 [DEBUG] [Thread-173320] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:49:08.403 [DEBUG] [Thread-173320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:49:08.404 [DEBUG] [Thread-173320] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:49:08.404 [DEBUG] [Thread-173320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:49:08.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:49:08.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:49:08.406 [DEBUG] [Thread-173320] [transport.py] [_log()] userauth is OK
2026-04-11T16:49:08.407 [DEBUG] [Thread-173320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:49:08.407 [DEBUG] [Thread-173320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:49:08.407 [DEBUG] [Thread-173320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:49:08.407 [DEBUG] [Thread-173320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:49:08.431 [INFO] [Thread-173320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:49:08.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:49:09.046 [DEBUG] [Thread-173320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:49:09.046 [DEBUG] [Thread-173320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:49:09.047 [DEBUG] [Thread-173320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:49:09.087 [DEBUG] [Thread-173320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:49:09.087 [DEBUG] [Thread-173320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:49:09.090 [DEBUG] [Thread-173320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:49:09.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:49:09.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:49:09.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:49:09.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:49:09.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:49:09.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:49:09.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:49:09.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:49:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:49:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.617135 -999.00  +13.50   5.46     95  +12.80 1 3 1 3 1   887    0 1.03 8.68 ----- 9.4 5.5 303.3 9.9 15.0 -0.7 14.9 -0.3 14.5 -0.3 14.8 -0.1
2026-04-11T16:49:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:49:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:49:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.617135
2026-04-11T16:49:09.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:49:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:49:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:49:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:49:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:49:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:48:36', tmtdew=0.15696, humidity=98.9043, cloud=0.0, wind=9.0, temperature=13.8916, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:48:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:49:09.119 [DEBUG] [Thread-173320] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:49:09.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:49:09.208 [DEBUG] [Thread-173323] [transport.py] [_log()] starting thread (client mode): 0xae517100
2026-04-11T16:49:09.208 [DEBUG] [Thread-173323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:49:09.223 [DEBUG] [Thread-173323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:49:09.223 [INFO] [Thread-173323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] client lang: <none>
2026-04-11T16:49:09.231 [DEBUG] [Thread-173323] [transport.py] [_log()] server lang: <none>
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] kex follows: False
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] Compression: none
2026-04-11T16:49:09.232 [DEBUG] [Thread-173323] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:49:09.290 [DEBUG] [Thread-173323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:49:09.291 [DEBUG] [Thread-173323] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:49:09.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:49:09.292 [DEBUG] [Thread-173323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:49:09.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:49:09.347 [DEBUG] [Thread-173323] [transport.py] [_log()] userauth is OK
2026-04-11T16:49:09.347 [DEBUG] [Thread-173323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:49:09.347 [DEBUG] [Thread-173323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:49:09.347 [DEBUG] [Thread-173323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:49:09.347 [DEBUG] [Thread-173323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:49:09.366 [INFO] [Thread-173323] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:49:09.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:49:09.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:49:10.188 [DEBUG] [Thread-173323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:49:10.188 [DEBUG] [Thread-173323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:49:10.236 [DEBUG] [Thread-173323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:49:10.236 [DEBUG] [Thread-173323] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:49:10.245 [DEBUG] [Thread-173323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:49:10.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:49:10.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-04-11T16:49:10.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-04-11T16:49:10.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:49:10.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:49:10.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:49:10.281 [DEBUG] [Thread-173323] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:49:16.831 [DEBUG] [Thread-173325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:19.919 [DEBUG] [Thread-173326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:30.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:30.619 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:34.971 [DEBUG] [Thread-173327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:49:40.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:49:40.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:49:40.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-04-11T16:49:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 49, 11), 0.12073, 99.5021, 0.0, 13.4993, 13.4625, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:49:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:49:11
2026-04-11T16:49:42.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:49:42.169 [DEBUG] [Thread-173328] [transport.py] [_log()] starting thread (client mode): 0xae5f28f0
2026-04-11T16:49:42.169 [DEBUG] [Thread-173328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:49:42.191 [DEBUG] [Thread-173328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:49:42.191 [INFO] [Thread-173328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:49:42.194 [DEBUG] [Thread-173328] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:49:42.194 [DEBUG] [Thread-173328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] client lang: <none>
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] server lang: <none>
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] kex follows: False
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:49:42.195 [DEBUG] [Thread-173328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:49:42.196 [DEBUG] [Thread-173328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:49:42.196 [DEBUG] [Thread-173328] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:49:42.196 [DEBUG] [Thread-173328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:49:42.196 [DEBUG] [Thread-173328] [transport.py] [_log()] Compression: none
2026-04-11T16:49:42.196 [DEBUG] [Thread-173328] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:49:42.215 [DEBUG] [Thread-173328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:49:42.216 [DEBUG] [Thread-173328] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:49:42.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:49:42.218 [DEBUG] [Thread-173328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:49:42.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:49:42.220 [DEBUG] [Thread-173328] [transport.py] [_log()] userauth is OK
2026-04-11T16:49:42.220 [DEBUG] [Thread-173328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:49:42.220 [DEBUG] [Thread-173328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:49:42.220 [DEBUG] [Thread-173328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:49:42.221 [DEBUG] [Thread-173328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:49:42.246 [INFO] [Thread-173328] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:49:42.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:49:42.895 [DEBUG] [Thread-173328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:49:42.895 [DEBUG] [Thread-173328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:49:42.896 [DEBUG] [Thread-173328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:49:42.936 [DEBUG] [Thread-173328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:49:42.936 [DEBUG] [Thread-173328] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:49:42.939 [DEBUG] [Thread-173328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:49:42.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:49:42.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:49:42.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:49:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:49:42.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:49:42.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:49:42.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:49:42.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:49:42.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:49:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.617482 -999.00  +13.60   9.22     95  +12.90 1 3 1 3 1   887    0 1.00 8.68 ----- 12.3 9.2 273.8 14.1 15.0 -0.7 14.9 -0.4 14.4 -0.7 14.8 -0.2
2026-04-11T16:49:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:49:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:49:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.617482
2026-04-11T16:49:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:49:42.972 [DEBUG] [Thread-173328] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:49:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:49:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:49:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:49:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:49:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:49:11', tmtdew=0.12073, humidity=99.5021, cloud=0.0, wind=13.4993, temperature=13.4625, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:49:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:49:43.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:49:43.064 [DEBUG] [Thread-173331] [transport.py] [_log()] starting thread (client mode): 0xa7952bf0
2026-04-11T16:49:43.064 [DEBUG] [Thread-173331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:49:43.079 [DEBUG] [Thread-173331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:49:43.079 [INFO] [Thread-173331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:49:43.087 [DEBUG] [Thread-173331] [transport.py] [_log()] client lang: <none>
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] server lang: <none>
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] kex follows: False
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] Compression: none
2026-04-11T16:49:43.088 [DEBUG] [Thread-173331] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:49:43.147 [DEBUG] [Thread-173331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:49:43.148 [DEBUG] [Thread-173331] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:49:43.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:49:43.149 [DEBUG] [Thread-173331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:49:43.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:49:43.203 [DEBUG] [Thread-173331] [transport.py] [_log()] userauth is OK
2026-04-11T16:49:43.204 [DEBUG] [Thread-173331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:49:43.204 [DEBUG] [Thread-173331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:49:43.204 [DEBUG] [Thread-173331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:49:43.204 [DEBUG] [Thread-173331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:49:43.226 [INFO] [Thread-173331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:49:43.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:49:43.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:49:44.053 [DEBUG] [Thread-173331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:49:44.053 [DEBUG] [Thread-173331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:49:44.101 [DEBUG] [Thread-173331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:49:44.102 [DEBUG] [Thread-173331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:49:44.111 [DEBUG] [Thread-173331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:49:44.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:49:44.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:49:44.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:49:44.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:49:44.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:49:44.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:49:44.147 [DEBUG] [Thread-173331] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:49:50.009 [DEBUG] [Thread-173333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:05.060 [DEBUG] [Thread-173334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:14.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:50:14.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:50:14.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:50:15.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 49, 47), 0.14659, 98.9709, 0.0, 10.517, 13.8587, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:50:15.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:49:47
2026-04-11T16:50:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:50:16.061 [DEBUG] [Thread-173335] [transport.py] [_log()] starting thread (client mode): 0xae514e20
2026-04-11T16:50:16.061 [DEBUG] [Thread-173335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:50:16.081 [DEBUG] [Thread-173335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:50:16.081 [INFO] [Thread-173335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:50:16.085 [DEBUG] [Thread-173335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] client lang: <none>
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] server lang: <none>
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] kex follows: False
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] Compression: none
2026-04-11T16:50:16.086 [DEBUG] [Thread-173335] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:50:16.105 [DEBUG] [Thread-173335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:50:16.105 [DEBUG] [Thread-173335] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:50:16.106 [DEBUG] [Thread-173335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:50:16.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:50:16.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:50:16.108 [DEBUG] [Thread-173335] [transport.py] [_log()] userauth is OK
2026-04-11T16:50:16.109 [DEBUG] [Thread-173335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:50:16.109 [DEBUG] [Thread-173335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:50:16.109 [DEBUG] [Thread-173335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:50:16.109 [DEBUG] [Thread-173335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:50:16.147 [INFO] [Thread-173335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:50:16.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:50:16.864 [DEBUG] [Thread-173337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:16.974 [DEBUG] [Thread-173335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:50:16.975 [DEBUG] [Thread-173335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:50:16.984 [DEBUG] [Thread-173335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:50:17.015 [DEBUG] [Thread-173335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:50:17.015 [DEBUG] [Thread-173335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:50:17.019 [DEBUG] [Thread-173335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:50:17.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:50:17.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:50:17.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:50:17.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:50:17.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:50:17.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:50:17.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:50:17.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:50:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:50:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.617830 -999.00  +13.70   7.78     95  +13.00 1 3 1 3 1   887    0 1.00 8.48 ----- 7.2 7.8 291.0 12.2 15.0 -0.8 14.8 -0.3 14.4 -0.6 14.8 -0.0
2026-04-11T16:50:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:50:17.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:50:17.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.617830
2026-04-11T16:50:17.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:50:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:50:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:50:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:50:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:50:17.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:49:47', tmtdew=0.14659, humidity=98.9709, cloud=0.0, wind=10.517, temperature=13.8587, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:49:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:50:17.061 [DEBUG] [Thread-173335] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:50:17.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:50:17.154 [DEBUG] [Thread-173339] [transport.py] [_log()] starting thread (client mode): 0xae5147c0
2026-04-11T16:50:17.154 [DEBUG] [Thread-173339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:50:17.169 [DEBUG] [Thread-173339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:50:17.170 [INFO] [Thread-173339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:50:17.178 [DEBUG] [Thread-173339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] client lang: <none>
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] server lang: <none>
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] kex follows: False
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] Compression: none
2026-04-11T16:50:17.179 [DEBUG] [Thread-173339] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:50:17.235 [DEBUG] [Thread-173339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:50:17.236 [DEBUG] [Thread-173339] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:50:17.236 [DEBUG] [Thread-173339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:50:17.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:50:17.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:50:17.291 [DEBUG] [Thread-173339] [transport.py] [_log()] userauth is OK
2026-04-11T16:50:17.291 [DEBUG] [Thread-173339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:50:17.291 [DEBUG] [Thread-173339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:50:17.291 [DEBUG] [Thread-173339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:50:17.291 [DEBUG] [Thread-173339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:50:17.308 [INFO] [Thread-173339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:50:17.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:50:17.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:50:18.130 [DEBUG] [Thread-173339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:50:18.130 [DEBUG] [Thread-173339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:50:18.179 [DEBUG] [Thread-173339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:50:18.179 [DEBUG] [Thread-173339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:50:18.188 [DEBUG] [Thread-173339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:50:18.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:50:18.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-04-11T16:50:18.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-04-11T16:50:18.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:50:18.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:50:18.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:50:18.222 [DEBUG] [Thread-173339] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:50:20.094 [DEBUG] [Thread-173341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:30.759 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:30.760 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:35.142 [DEBUG] [Thread-173342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:48.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:50:48.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:50:48.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-04-11T16:50:49.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 50, 22), 0.075845, 99.469, 0.0, 9.423, 13.5128, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:50:49.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:50:22
2026-04-11T16:50:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:50:50.102 [DEBUG] [Thread-173343] [transport.py] [_log()] starting thread (client mode): 0xae5176d0
2026-04-11T16:50:50.102 [DEBUG] [Thread-173343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:50:50.123 [DEBUG] [Thread-173343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:50:50.123 [INFO] [Thread-173343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] client lang: <none>
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] server lang: <none>
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] kex follows: False
2026-04-11T16:50:50.126 [DEBUG] [Thread-173343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:50:50.127 [DEBUG] [Thread-173343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:50:50.127 [DEBUG] [Thread-173343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:50:50.127 [DEBUG] [Thread-173343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:50:50.127 [DEBUG] [Thread-173343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:50:50.127 [DEBUG] [Thread-173343] [transport.py] [_log()] Compression: none
2026-04-11T16:50:50.127 [DEBUG] [Thread-173343] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:50:50.144 [DEBUG] [Thread-173343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:50:50.145 [DEBUG] [Thread-173343] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:50:50.145 [DEBUG] [Thread-173343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:50:50.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:50:50.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:50:50.147 [DEBUG] [Thread-173343] [transport.py] [_log()] userauth is OK
2026-04-11T16:50:50.147 [DEBUG] [Thread-173343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:50:50.148 [DEBUG] [Thread-173343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:50:50.148 [DEBUG] [Thread-173343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:50:50.148 [DEBUG] [Thread-173343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:50:50.165 [INFO] [Thread-173343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:50:50.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:50:50.179 [DEBUG] [Thread-173345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:50:50.791 [DEBUG] [Thread-173343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:50:50.791 [DEBUG] [Thread-173343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:50:50.792 [DEBUG] [Thread-173343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:50:50.832 [DEBUG] [Thread-173343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:50:50.832 [DEBUG] [Thread-173343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:50:50.834 [DEBUG] [Thread-173343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:50:50.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:50:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:50:50.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:50:50.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:50:50.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:50:50.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:50:50.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:50:50.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:50:50.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:50:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.618176 -999.00  +13.70  12.38     95  +13.00 1 3 1 3 1   887    0 1.00 8.49 ----- 9.3 12.4 276.2 17.5 15.0 -0.8 14.9 -0.5 14.4 -0.3 14.8 -0.1
2026-04-11T16:50:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:50:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:50:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.618176
2026-04-11T16:50:50.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:50:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:50:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:50:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:50:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:50:50.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:50:22', tmtdew=0.075845, humidity=99.469, cloud=0.0, wind=9.423, temperature=13.5128, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:50:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:50:50.857 [DEBUG] [Thread-173343] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:50:50.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:50:50.948 [DEBUG] [Thread-173347] [transport.py] [_log()] starting thread (client mode): 0xae5170a0
2026-04-11T16:50:50.948 [DEBUG] [Thread-173347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:50:50.963 [DEBUG] [Thread-173347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:50:50.963 [INFO] [Thread-173347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:50:50.970 [DEBUG] [Thread-173347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:50:50.970 [DEBUG] [Thread-173347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:50:50.970 [DEBUG] [Thread-173347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:50:50.970 [DEBUG] [Thread-173347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:50.970 [DEBUG] [Thread-173347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] client lang: <none>
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] server lang: <none>
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] kex follows: False
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] Compression: none
2026-04-11T16:50:50.971 [DEBUG] [Thread-173347] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:50:51.028 [DEBUG] [Thread-173347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:50:51.028 [DEBUG] [Thread-173347] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:50:51.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:50:51.029 [DEBUG] [Thread-173347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:50:51.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:50:51.084 [DEBUG] [Thread-173347] [transport.py] [_log()] userauth is OK
2026-04-11T16:50:51.084 [DEBUG] [Thread-173347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:50:51.085 [DEBUG] [Thread-173347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:50:51.085 [DEBUG] [Thread-173347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:50:51.085 [DEBUG] [Thread-173347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:50:51.104 [INFO] [Thread-173347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:50:51.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:50:51.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:50:51.929 [DEBUG] [Thread-173347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:50:51.929 [DEBUG] [Thread-173347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:50:51.977 [DEBUG] [Thread-173347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:50:51.977 [DEBUG] [Thread-173347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:50:51.986 [DEBUG] [Thread-173347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:50:51.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:50: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')
2026-04-11T16:50:52.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-04-11T16:50:52.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:50:52.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:50:52.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:50:52.023 [DEBUG] [Thread-173347] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:51:05.218 [DEBUG] [Thread-173349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:16.927 [DEBUG] [Thread-173350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:20.270 [DEBUG] [Thread-173351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:51:22.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:51:22.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-04-11T16:51:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 50, 57), 0.12071, 99.5022, 0.0, 14.3636, 13.5625, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:51:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:50:57
2026-04-11T16:51:23.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:51:23.815 [DEBUG] [Thread-173352] [transport.py] [_log()] starting thread (client mode): 0xae515000
2026-04-11T16:51:23.815 [DEBUG] [Thread-173352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:51:23.833 [DEBUG] [Thread-173352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:51:23.833 [INFO] [Thread-173352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:51:23.836 [DEBUG] [Thread-173352] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] client lang: <none>
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] server lang: <none>
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] kex follows: False
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] Compression: none
2026-04-11T16:51:23.837 [DEBUG] [Thread-173352] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:51:23.855 [DEBUG] [Thread-173352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:51:23.855 [DEBUG] [Thread-173352] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:51:23.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:51:23.857 [DEBUG] [Thread-173352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:51:23.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:51:23.859 [DEBUG] [Thread-173352] [transport.py] [_log()] userauth is OK
2026-04-11T16:51:23.859 [DEBUG] [Thread-173352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:51:23.859 [DEBUG] [Thread-173352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:51:23.859 [DEBUG] [Thread-173352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:51:23.860 [DEBUG] [Thread-173352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:51:23.882 [INFO] [Thread-173352] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:51:23.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:51:24.509 [DEBUG] [Thread-173352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:51:24.509 [DEBUG] [Thread-173352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:51:24.509 [DEBUG] [Thread-173352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:51:24.550 [DEBUG] [Thread-173352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:51:24.550 [DEBUG] [Thread-173352] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:51:24.552 [DEBUG] [Thread-173352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:51:24.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:51:24.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:51:24.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:51:24.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:51:24.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:51:24.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:51:24.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.618524 -999.00  +13.70   7.42     95  +13.00 1 3 1 3 1   887    0 0.97 7.57 ----- 7.4 7.4 278.8 10.3 15.0 -0.6 14.9 -0.3 14.4 -0.3 14.8 -0.1
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.618524
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:51:24.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:51:24.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:50:57', tmtdew=0.12071, humidity=99.5022, cloud=0.0, wind=14.3636, temperature=13.5625, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:50:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:51:24.570 [DEBUG] [Thread-173352] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:51:24.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:51:24.663 [DEBUG] [Thread-173355] [transport.py] [_log()] starting thread (client mode): 0xae514970
2026-04-11T16:51:24.663 [DEBUG] [Thread-173355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:51:24.680 [DEBUG] [Thread-173355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:51:24.680 [INFO] [Thread-173355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:51:24.687 [DEBUG] [Thread-173355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:51:24.687 [DEBUG] [Thread-173355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:51:24.687 [DEBUG] [Thread-173355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] client lang: <none>
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] server lang: <none>
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] kex follows: False
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] Compression: none
2026-04-11T16:51:24.688 [DEBUG] [Thread-173355] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:51:24.745 [DEBUG] [Thread-173355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:51:24.745 [DEBUG] [Thread-173355] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:51:24.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:51:24.746 [DEBUG] [Thread-173355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:51:24.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:51:24.800 [DEBUG] [Thread-173355] [transport.py] [_log()] userauth is OK
2026-04-11T16:51:24.800 [DEBUG] [Thread-173355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:51:24.800 [DEBUG] [Thread-173355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:51:24.800 [DEBUG] [Thread-173355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:51:24.800 [DEBUG] [Thread-173355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:51:24.819 [INFO] [Thread-173355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:51:24.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:51:24.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:51:25.642 [DEBUG] [Thread-173355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:51:25.642 [DEBUG] [Thread-173355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:51:25.690 [DEBUG] [Thread-173355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:51:25.690 [DEBUG] [Thread-173355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:51:25.700 [DEBUG] [Thread-173355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:51:25.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:51:25.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-04-11T16:51: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-04-11T16:51:25.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:51:25.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:51:25.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:51:25.737 [DEBUG] [Thread-173355] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:51:30.901 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:30.903 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:35.307 [DEBUG] [Thread-173357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:50.364 [DEBUG] [Thread-173358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:51:55.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:51:55.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:51:55.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-04-11T16:51:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 51, 34), 0.14657, 98.9714, 0.0, 12.6338, 13.9915, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:51:56.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:51:34
2026-04-11T16:51:57.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:51:57.548 [DEBUG] [Thread-173359] [transport.py] [_log()] starting thread (client mode): 0xae517cd0
2026-04-11T16:51:57.548 [DEBUG] [Thread-173359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:51:57.569 [DEBUG] [Thread-173359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:51:57.569 [INFO] [Thread-173359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:51:57.572 [DEBUG] [Thread-173359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] client lang: <none>
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] server lang: <none>
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] kex follows: False
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:51:57.573 [DEBUG] [Thread-173359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:51:57.574 [DEBUG] [Thread-173359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:51:57.574 [DEBUG] [Thread-173359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:51:57.574 [DEBUG] [Thread-173359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:51:57.574 [DEBUG] [Thread-173359] [transport.py] [_log()] Compression: none
2026-04-11T16:51:57.574 [DEBUG] [Thread-173359] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:51:57.593 [DEBUG] [Thread-173359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:51:57.593 [DEBUG] [Thread-173359] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:51:57.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:51:57.595 [DEBUG] [Thread-173359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:51:57.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:51:57.597 [DEBUG] [Thread-173359] [transport.py] [_log()] userauth is OK
2026-04-11T16:51:57.597 [DEBUG] [Thread-173359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:51:57.597 [DEBUG] [Thread-173359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:51:57.597 [DEBUG] [Thread-173359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:51:57.597 [DEBUG] [Thread-173359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:51:57.632 [INFO] [Thread-173359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:51:57.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:51:58.275 [DEBUG] [Thread-173359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:51:58.276 [DEBUG] [Thread-173359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:51:58.276 [DEBUG] [Thread-173359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:51:58.316 [DEBUG] [Thread-173359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:51:58.316 [DEBUG] [Thread-173359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:51:58.320 [DEBUG] [Thread-173359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:51:58.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:51:58.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:51:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:51:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:51:58.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:51:58.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:51:58.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:51:58.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:51:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:51:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.619218 -999.00  +13.50  12.95     95  +12.90 1 3 1 3 1   887    0 0.91 6.03 ----- 12.2 12.9 277.6 18.0 14.9 -1.1 14.8 -0.4 14.3 -1.1 14.8 -0.2
2026-04-11T16:51:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:51:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:51:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.619218
2026-04-11T16:51:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:51:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:51:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:51:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:51:58.348 [DEBUG] [Thread-173359] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:51:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:51:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:51:34', tmtdew=0.14657, humidity=98.9714, cloud=0.0, wind=12.6338, temperature=13.9915, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:51:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:51:58.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:51:58.442 [DEBUG] [Thread-173362] [transport.py] [_log()] starting thread (client mode): 0xae536140
2026-04-11T16:51:58.442 [DEBUG] [Thread-173362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:51:58.463 [DEBUG] [Thread-173362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:51:58.463 [INFO] [Thread-173362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:51:58.470 [DEBUG] [Thread-173362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] client lang: <none>
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] server lang: <none>
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] kex follows: False
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:51:58.471 [DEBUG] [Thread-173362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:51:58.472 [DEBUG] [Thread-173362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:51:58.472 [DEBUG] [Thread-173362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:51:58.472 [DEBUG] [Thread-173362] [transport.py] [_log()] Compression: none
2026-04-11T16:51:58.472 [DEBUG] [Thread-173362] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:51:58.529 [DEBUG] [Thread-173362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:51:58.529 [DEBUG] [Thread-173362] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:51:58.530 [DEBUG] [Thread-173362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:51:58.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:51:58.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:51:58.585 [DEBUG] [Thread-173362] [transport.py] [_log()] userauth is OK
2026-04-11T16:51:58.585 [DEBUG] [Thread-173362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:51:58.586 [DEBUG] [Thread-173362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:51:58.586 [DEBUG] [Thread-173362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:51:58.586 [DEBUG] [Thread-173362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:51:58.605 [INFO] [Thread-173362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:51:58.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:51:58.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:51:59.460 [DEBUG] [Thread-173362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:51:59.460 [DEBUG] [Thread-173362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:51:59.507 [DEBUG] [Thread-173362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:51:59.507 [DEBUG] [Thread-173362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:51:59.516 [DEBUG] [Thread-173362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:51:59.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:51:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:51:59.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:51:59.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:51:59.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:51:59.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:51:59.550 [DEBUG] [Thread-173362] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:52:05.400 [DEBUG] [Thread-173364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:52:16.965 [DEBUG] [Thread-173365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:52:20.462 [DEBUG] [Thread-173366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:52:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:52:29.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:52:29.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-04-11T16:52:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 52, 9), 0.12072, 99.5023, 0.0, 15.669, 13.6289, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:52:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:52:09
2026-04-11T16:52:31.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:52:31.043 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:52:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:52:31.468 [DEBUG] [Thread-173367] [transport.py] [_log()] starting thread (client mode): 0xae515510
2026-04-11T16:52:31.468 [DEBUG] [Thread-173367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:52:31.489 [DEBUG] [Thread-173367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:52:31.489 [INFO] [Thread-173367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:52:31.492 [DEBUG] [Thread-173367] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:52:31.492 [DEBUG] [Thread-173367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] client lang: <none>
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] server lang: <none>
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] kex follows: False
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:52:31.493 [DEBUG] [Thread-173367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:52:31.494 [DEBUG] [Thread-173367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:52:31.494 [DEBUG] [Thread-173367] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:52:31.494 [DEBUG] [Thread-173367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:52:31.494 [DEBUG] [Thread-173367] [transport.py] [_log()] Compression: none
2026-04-11T16:52:31.494 [DEBUG] [Thread-173367] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:52:31.513 [DEBUG] [Thread-173367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:52:31.513 [DEBUG] [Thread-173367] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:52:31.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:52:31.514 [DEBUG] [Thread-173367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:52:31.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:52:31.516 [DEBUG] [Thread-173367] [transport.py] [_log()] userauth is OK
2026-04-11T16:52:31.516 [DEBUG] [Thread-173367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:52:31.516 [DEBUG] [Thread-173367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:52:31.516 [DEBUG] [Thread-173367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:52:31.516 [DEBUG] [Thread-173367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:52:31.539 [INFO] [Thread-173367] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:52:31.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:52:32.159 [DEBUG] [Thread-173367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:52:32.159 [DEBUG] [Thread-173367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:52:32.159 [DEBUG] [Thread-173367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:52:32.200 [DEBUG] [Thread-173367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:52:32.200 [DEBUG] [Thread-173367] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:52:32.202 [DEBUG] [Thread-173367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:52:32.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:52:32.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:52:32.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:52:32.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:52:32.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:52:32.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:52:32.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:52:32.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:52:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:52:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.619566 -999.00  +13.50  18.33     95  +12.80 1 3 1 3 1   887    0 0.90 4.99 ----- 20.7 18.3 270.2 24.4 14.9 -1.2 14.8 -0.7 14.2 -1.7 14.7 -0.5
2026-04-11T16:52:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:52:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:52:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.619566
2026-04-11T16:52:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:52:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:52:32.228 [DEBUG] [Thread-173367] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:52:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:52:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:52:32.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:52:32.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:52:09', tmtdew=0.12072, humidity=99.5023, cloud=0.0, wind=15.669, temperature=13.6289, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:52:10.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:52:32.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:52:32.335 [DEBUG] [Thread-173370] [transport.py] [_log()] starting thread (client mode): 0xae5175b0
2026-04-11T16:52:32.335 [DEBUG] [Thread-173370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:52:32.350 [DEBUG] [Thread-173370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:52:32.351 [INFO] [Thread-173370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:52:32.361 [DEBUG] [Thread-173370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] client lang: <none>
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] server lang: <none>
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] kex follows: False
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] Compression: none
2026-04-11T16:52:32.362 [DEBUG] [Thread-173370] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:52:32.416 [DEBUG] [Thread-173370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:52:32.416 [DEBUG] [Thread-173370] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:52:32.417 [DEBUG] [Thread-173370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:52:32.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:52:32.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:52:32.472 [DEBUG] [Thread-173370] [transport.py] [_log()] userauth is OK
2026-04-11T16:52:32.473 [DEBUG] [Thread-173370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:52:32.473 [DEBUG] [Thread-173370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:52:32.473 [DEBUG] [Thread-173370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:52:32.473 [DEBUG] [Thread-173370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:52:32.492 [INFO] [Thread-173370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:52:32.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:52:32.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:52:33.318 [DEBUG] [Thread-173370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:52:33.318 [DEBUG] [Thread-173370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:52:33.366 [DEBUG] [Thread-173370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:52:33.366 [DEBUG] [Thread-173370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:52:33.375 [DEBUG] [Thread-173370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:52:33.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:52:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:52:33.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:52:33.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:52:33.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:52:33.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:52:33.421 [DEBUG] [Thread-173370] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:52:35.497 [DEBUG] [Thread-173372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:52:50.557 [DEBUG] [Thread-173373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:03.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:53:03.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:53:03.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:53:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 52, 44), 0.13111, 99.071, 0.0, 19.2665, 14.0911, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:53:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:52:44
2026-04-11T16:53:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:53:05.285 [DEBUG] [Thread-173374] [transport.py] [_log()] starting thread (client mode): 0xae517e80
2026-04-11T16:53:05.285 [DEBUG] [Thread-173374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:53:05.307 [DEBUG] [Thread-173374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:53:05.307 [INFO] [Thread-173374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:53:05.310 [DEBUG] [Thread-173374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:53:05.310 [DEBUG] [Thread-173374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:53:05.310 [DEBUG] [Thread-173374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:53:05.310 [DEBUG] [Thread-173374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:05.310 [DEBUG] [Thread-173374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] client lang: <none>
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] server lang: <none>
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] kex follows: False
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:53:05.311 [DEBUG] [Thread-173374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:53:05.312 [DEBUG] [Thread-173374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:53:05.312 [DEBUG] [Thread-173374] [transport.py] [_log()] Compression: none
2026-04-11T16:53:05.312 [DEBUG] [Thread-173374] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:53:05.331 [DEBUG] [Thread-173374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:53:05.332 [DEBUG] [Thread-173374] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:53:05.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:53:05.333 [DEBUG] [Thread-173374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:53:05.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:53:05.334 [DEBUG] [Thread-173374] [transport.py] [_log()] userauth is OK
2026-04-11T16:53:05.334 [DEBUG] [Thread-173374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:53:05.334 [DEBUG] [Thread-173374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:53:05.334 [DEBUG] [Thread-173374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:53:05.334 [DEBUG] [Thread-173374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:53:05.361 [INFO] [Thread-173374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:53:05.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:53:05.596 [DEBUG] [Thread-173376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:06.158 [DEBUG] [Thread-173374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:53:06.158 [DEBUG] [Thread-173374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:53:06.159 [DEBUG] [Thread-173374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:53:06.199 [DEBUG] [Thread-173374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:53:06.199 [DEBUG] [Thread-173374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:53:06.203 [DEBUG] [Thread-173374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:53:06.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:53:06.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:53:06.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:53:06.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:53:06.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:53:06.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:53:06.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:53:06.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:53:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:53:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.619913 -999.00  +13.40  14.26     96  +12.80 1 3 1 3 1   887    0 0.86 3.91 ----- 14.1 14.3 282.4 24.6 14.8 -1.0 14.8 -0.5 14.3 -0.3 14.7 -0.3
2026-04-11T16:53:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:53:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:53:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.619913
2026-04-11T16:53:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:53:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:53:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:53:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:53:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:53:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:52:44', tmtdew=0.13111, humidity=99.071, cloud=0.0, wind=19.2665, temperature=14.0911, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:52:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:53:06.233 [DEBUG] [Thread-173374] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:53:06.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:53:06.325 [DEBUG] [Thread-173378] [transport.py] [_log()] starting thread (client mode): 0xae517a60
2026-04-11T16:53:06.326 [DEBUG] [Thread-173378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:53:06.341 [DEBUG] [Thread-173378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:53:06.341 [INFO] [Thread-173378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:53:06.349 [DEBUG] [Thread-173378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:53:06.349 [DEBUG] [Thread-173378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:53:06.349 [DEBUG] [Thread-173378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:53:06.349 [DEBUG] [Thread-173378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:06.349 [DEBUG] [Thread-173378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:06.349 [DEBUG] [Thread-173378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] client lang: <none>
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] server lang: <none>
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] kex follows: False
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] Compression: none
2026-04-11T16:53:06.350 [DEBUG] [Thread-173378] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:53:06.411 [DEBUG] [Thread-173378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:53:06.411 [DEBUG] [Thread-173378] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:53:06.412 [DEBUG] [Thread-173378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:53:06.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:53:06.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:53:06.470 [DEBUG] [Thread-173378] [transport.py] [_log()] userauth is OK
2026-04-11T16:53:06.470 [DEBUG] [Thread-173378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:53:06.470 [DEBUG] [Thread-173378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:53:06.470 [DEBUG] [Thread-173378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:53:06.470 [DEBUG] [Thread-173378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:53:06.489 [INFO] [Thread-173378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:53:06.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:53:06.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:53:07.338 [DEBUG] [Thread-173378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:53:07.338 [DEBUG] [Thread-173378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:53:07.386 [DEBUG] [Thread-173378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:53:07.387 [DEBUG] [Thread-173378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:53:07.396 [DEBUG] [Thread-173378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:53:07.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:53:07.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:53:07.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-04-11T16:53:07.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:53:07.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:53:07.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:53:07.434 [DEBUG] [Thread-173378] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:53:16.999 [DEBUG] [Thread-173380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:20.631 [DEBUG] [Thread-173381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:31.181 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:31.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:35.675 [DEBUG] [Thread-173382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:53:37.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:53:37.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:53:37.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-04-11T16:53:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 53, 20), 0.123285, 99.4858, 0.0, 20.5038, 13.5624, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:53:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:53:20
2026-04-11T16:53:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:53:39.249 [DEBUG] [Thread-173383] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-11T16:53:39.249 [DEBUG] [Thread-173383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:53:39.269 [DEBUG] [Thread-173383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:53:39.269 [INFO] [Thread-173383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:53:39.272 [DEBUG] [Thread-173383] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:53:39.272 [DEBUG] [Thread-173383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:53:39.272 [DEBUG] [Thread-173383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] client lang: <none>
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] server lang: <none>
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] kex follows: False
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] Compression: none
2026-04-11T16:53:39.273 [DEBUG] [Thread-173383] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:53:39.289 [DEBUG] [Thread-173383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:53:39.290 [DEBUG] [Thread-173383] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:53:39.290 [DEBUG] [Thread-173383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:53:39.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:53:39.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:53:39.293 [DEBUG] [Thread-173383] [transport.py] [_log()] userauth is OK
2026-04-11T16:53:39.293 [DEBUG] [Thread-173383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:53:39.293 [DEBUG] [Thread-173383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:53:39.293 [DEBUG] [Thread-173383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:53:39.293 [DEBUG] [Thread-173383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:53:39.318 [INFO] [Thread-173383] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:53:39.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:53:40.108 [DEBUG] [Thread-173383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:53:40.108 [DEBUG] [Thread-173383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:53:40.108 [DEBUG] [Thread-173383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:53:40.149 [DEBUG] [Thread-173383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:53:40.149 [DEBUG] [Thread-173383] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:53:40.153 [DEBUG] [Thread-173383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:53:40.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:53:40.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:53:40.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:53:40.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:53:40.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:53:40.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:53:40.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:53:40.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:53:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:53:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.620260 -999.00  +13.40  12.75     96  +12.80 1 3 1 3 1   887    0 0.79 2.58 ----- 12.4 12.8 281.6 20.8 14.9 -0.9 14.7 -0.3 14.2 -0.6 14.7 -0.1
2026-04-11T16:53:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:53:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:53:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.620260
2026-04-11T16:53:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:53:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:53:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:53:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:53:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:53:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:53:20', tmtdew=0.123285, humidity=99.4858, cloud=0.0, wind=20.5038, temperature=13.5624, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:53:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:53:40.182 [DEBUG] [Thread-173383] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:53:40.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:53:40.275 [DEBUG] [Thread-173386] [transport.py] [_log()] starting thread (client mode): 0xa7950040
2026-04-11T16:53:40.275 [DEBUG] [Thread-173386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:53:40.289 [DEBUG] [Thread-173386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:53:40.290 [INFO] [Thread-173386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:53:40.297 [DEBUG] [Thread-173386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:53:40.297 [DEBUG] [Thread-173386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] client lang: <none>
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] server lang: <none>
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] kex follows: False
2026-04-11T16:53:40.298 [DEBUG] [Thread-173386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:53:40.299 [DEBUG] [Thread-173386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:53:40.299 [DEBUG] [Thread-173386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:53:40.299 [DEBUG] [Thread-173386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:53:40.299 [DEBUG] [Thread-173386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:53:40.299 [DEBUG] [Thread-173386] [transport.py] [_log()] Compression: none
2026-04-11T16:53:40.299 [DEBUG] [Thread-173386] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:53:40.359 [DEBUG] [Thread-173386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:53:40.359 [DEBUG] [Thread-173386] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:53:40.360 [DEBUG] [Thread-173386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:53:40.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:53:40.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:53:40.418 [DEBUG] [Thread-173386] [transport.py] [_log()] userauth is OK
2026-04-11T16:53:40.419 [DEBUG] [Thread-173386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:53:40.419 [DEBUG] [Thread-173386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:53:40.419 [DEBUG] [Thread-173386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:53:40.419 [DEBUG] [Thread-173386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:53:40.437 [INFO] [Thread-173386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:53:40.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:53:40.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:53:41.274 [DEBUG] [Thread-173386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:53:41.274 [DEBUG] [Thread-173386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:53:41.322 [DEBUG] [Thread-173386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:53:41.322 [DEBUG] [Thread-173386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:53:41.331 [DEBUG] [Thread-173386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:53:41.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:53:41.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T16:53:41.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-04-11T16:53:41.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:53:41.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:53:41.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:53:41.368 [DEBUG] [Thread-173386] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:53:50.716 [DEBUG] [Thread-173388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:05.771 [DEBUG] [Thread-173389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:54:11.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:54:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T16:54:12.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 53, 55), 0.073265, 99.4858, 0.0, 18.7038, 13.4959, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:54:12.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:53:55
2026-04-11T16:54:13.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:54:13.193 [DEBUG] [Thread-173390] [transport.py] [_log()] starting thread (client mode): 0xae5f3460
2026-04-11T16:54:13.193 [DEBUG] [Thread-173390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:54:13.214 [DEBUG] [Thread-173390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:54:13.214 [INFO] [Thread-173390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] client lang: <none>
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] server lang: <none>
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] kex follows: False
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] Compression: none
2026-04-11T16:54:13.218 [DEBUG] [Thread-173390] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:54:13.236 [DEBUG] [Thread-173390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:54:13.237 [DEBUG] [Thread-173390] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:54:13.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:54:13.238 [DEBUG] [Thread-173390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:54:13.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:54:13.240 [DEBUG] [Thread-173390] [transport.py] [_log()] userauth is OK
2026-04-11T16:54:13.240 [DEBUG] [Thread-173390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:54:13.240 [DEBUG] [Thread-173390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:54:13.240 [DEBUG] [Thread-173390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:54:13.241 [DEBUG] [Thread-173390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:54:13.258 [INFO] [Thread-173390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:54:13.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:54:14.080 [DEBUG] [Thread-173390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:54:14.081 [DEBUG] [Thread-173390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:54:14.081 [DEBUG] [Thread-173390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:54:14.121 [DEBUG] [Thread-173390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:54:14.121 [DEBUG] [Thread-173390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:54:14.125 [DEBUG] [Thread-173390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:54:14.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:54:14.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:54:14.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:54:14.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:54:14.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:54:14.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:54:14.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:54:14.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:54:14.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:54:14.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.620607 -999.00  +13.50  13.67     96  +12.90 1 3 1 3 1   887    0 0.81 2.07 ----- 13.7 13.7 289.0 18.0 14.8 -0.8 14.7 -0.3 14.2 -0.2 14.7 -0.2
2026-04-11T16:54:14.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:54:14.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:54:14.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.620607
2026-04-11T16:54:14.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:54:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:54:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:54:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:54:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:54:14.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:53:55', tmtdew=0.073265, humidity=99.4858, cloud=0.0, wind=18.7038, temperature=13.4959, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:53:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:54:14.152 [DEBUG] [Thread-173390] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:54:14.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:54:14.251 [DEBUG] [Thread-173393] [transport.py] [_log()] starting thread (client mode): 0xa7951e40
2026-04-11T16:54:14.251 [DEBUG] [Thread-173393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:54:14.266 [DEBUG] [Thread-173393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:54:14.266 [INFO] [Thread-173393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] client lang: <none>
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] server lang: <none>
2026-04-11T16:54:14.274 [DEBUG] [Thread-173393] [transport.py] [_log()] kex follows: False
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] Compression: none
2026-04-11T16:54:14.275 [DEBUG] [Thread-173393] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:54:14.334 [DEBUG] [Thread-173393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:54:14.335 [DEBUG] [Thread-173393] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:54:14.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:54:14.336 [DEBUG] [Thread-173393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:54:14.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:54:14.390 [DEBUG] [Thread-173393] [transport.py] [_log()] userauth is OK
2026-04-11T16:54:14.390 [DEBUG] [Thread-173393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:54:14.390 [DEBUG] [Thread-173393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:54:14.390 [DEBUG] [Thread-173393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:54:14.390 [DEBUG] [Thread-173393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:54:14.409 [INFO] [Thread-173393] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:54:14.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:54:14.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:54:15.227 [DEBUG] [Thread-173393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:54:15.227 [DEBUG] [Thread-173393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:54:15.276 [DEBUG] [Thread-173393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:54:15.276 [DEBUG] [Thread-173393] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:54:15.285 [DEBUG] [Thread-173393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:54:15.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:54:15.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-04-11T16:54:15.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-04-11T16:54:15.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:54:15.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:54:15.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:54:15.322 [DEBUG] [Thread-173393] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:54:17.033 [DEBUG] [Thread-173395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:20.811 [DEBUG] [Thread-173396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:31.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:31.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:35.863 [DEBUG] [Thread-173397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:54:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:54:45.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:54:45.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-04-11T16:54:46.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 54, 30), 0.078405, 99.4527, 0.0, 18.0335, 13.4627, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:54:46.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:54:30
2026-04-11T16:54:47.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:54:47.210 [DEBUG] [Thread-173398] [transport.py] [_log()] starting thread (client mode): 0xae5615a0
2026-04-11T16:54:47.210 [DEBUG] [Thread-173398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:54:47.230 [DEBUG] [Thread-173398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:54:47.230 [INFO] [Thread-173398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:54:47.233 [DEBUG] [Thread-173398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] client lang: <none>
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] server lang: <none>
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] kex follows: False
2026-04-11T16:54:47.234 [DEBUG] [Thread-173398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:54:47.235 [DEBUG] [Thread-173398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:54:47.235 [DEBUG] [Thread-173398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:54:47.235 [DEBUG] [Thread-173398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:54:47.235 [DEBUG] [Thread-173398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:54:47.235 [DEBUG] [Thread-173398] [transport.py] [_log()] Compression: none
2026-04-11T16:54:47.235 [DEBUG] [Thread-173398] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:54:47.254 [DEBUG] [Thread-173398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:54:47.255 [DEBUG] [Thread-173398] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:54:47.256 [DEBUG] [Thread-173398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:54:47.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:54:47.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:54:47.258 [DEBUG] [Thread-173398] [transport.py] [_log()] userauth is OK
2026-04-11T16:54:47.259 [DEBUG] [Thread-173398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:54:47.259 [DEBUG] [Thread-173398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:54:47.259 [DEBUG] [Thread-173398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:54:47.259 [DEBUG] [Thread-173398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:54:47.288 [INFO] [Thread-173398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:54:47.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:54:48.098 [DEBUG] [Thread-173398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:54:48.098 [DEBUG] [Thread-173398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:54:48.098 [DEBUG] [Thread-173398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:54:48.140 [DEBUG] [Thread-173398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:54:48.140 [DEBUG] [Thread-173398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:54:48.143 [DEBUG] [Thread-173398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:54:48.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:54:48.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:54:48.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:54:48.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:54:48.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:54:48.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:54:48.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:54:48.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:54:48.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:54:48.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.620955 -999.00  +13.50  12.07     96  +12.90 1 3 1 3 1   887    0 0.77 1.12 ----- 12.1 12.1 273.2 16.1 14.8 -0.8 14.8 -0.2 14.2 -0.9 14.7 -0.3
2026-04-11T16:54:48.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:54:48.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:54:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.620955
2026-04-11T16:54:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:54:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:54:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:54:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:54:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:54:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:54:30', tmtdew=0.078405, humidity=99.4527, cloud=0.0, wind=18.0335, temperature=13.4627, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:54:10.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:54:48.165 [DEBUG] [Thread-173398] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:54:48.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:54:48.260 [DEBUG] [Thread-173401] [transport.py] [_log()] starting thread (client mode): 0xae5616f0
2026-04-11T16:54:48.260 [DEBUG] [Thread-173401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:54:48.275 [DEBUG] [Thread-173401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:54:48.275 [INFO] [Thread-173401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:54:48.282 [DEBUG] [Thread-173401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] client lang: <none>
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] server lang: <none>
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] kex follows: False
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:54:48.283 [DEBUG] [Thread-173401] [transport.py] [_log()] Compression: none
2026-04-11T16:54:48.284 [DEBUG] [Thread-173401] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:54:48.343 [DEBUG] [Thread-173401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:54:48.343 [DEBUG] [Thread-173401] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:54:48.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:54:48.345 [DEBUG] [Thread-173401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:54:48.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:54:48.399 [DEBUG] [Thread-173401] [transport.py] [_log()] userauth is OK
2026-04-11T16:54:48.399 [DEBUG] [Thread-173401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:54:48.399 [DEBUG] [Thread-173401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:54:48.399 [DEBUG] [Thread-173401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:54:48.399 [DEBUG] [Thread-173401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:54:48.419 [INFO] [Thread-173401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:54:48.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:54:48.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:54:49.256 [DEBUG] [Thread-173401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:54:49.257 [DEBUG] [Thread-173401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:54:49.304 [DEBUG] [Thread-173401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:54:49.304 [DEBUG] [Thread-173401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:54:49.313 [DEBUG] [Thread-173401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:54:49.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:54:49.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-04-11T16:54:49.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:54:49.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:54:49.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:54:49.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:54:49.346 [DEBUG] [Thread-173401] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:54:50.900 [DEBUG] [Thread-173403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:05.954 [DEBUG] [Thread-173404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:17.065 [DEBUG] [Thread-173405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:19.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:55:19.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:55:19.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-04-11T16:55:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 55, 6), 0.070685, 99.5025, 0.0, 17.8394, 13.5125, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:55:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:55:06
2026-04-11T16:55:20.995 [DEBUG] [Thread-173406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:55:21.172 [DEBUG] [Thread-173407] [transport.py] [_log()] starting thread (client mode): 0xae5164a0
2026-04-11T16:55:21.172 [DEBUG] [Thread-173407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:55:21.195 [DEBUG] [Thread-173407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:55:21.195 [INFO] [Thread-173407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] client lang: <none>
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] server lang: <none>
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] kex follows: False
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:55:21.198 [DEBUG] [Thread-173407] [transport.py] [_log()] Compression: none
2026-04-11T16:55:21.199 [DEBUG] [Thread-173407] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:55:21.218 [DEBUG] [Thread-173407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:55:21.219 [DEBUG] [Thread-173407] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:55:21.219 [DEBUG] [Thread-173407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:55:21.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:55:21.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:55:21.221 [DEBUG] [Thread-173407] [transport.py] [_log()] userauth is OK
2026-04-11T16:55:21.221 [DEBUG] [Thread-173407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:55:21.221 [DEBUG] [Thread-173407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:55:21.222 [DEBUG] [Thread-173407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:55:21.222 [DEBUG] [Thread-173407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:55:21.257 [INFO] [Thread-173407] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:55:21.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:55:22.261 [DEBUG] [Thread-173407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:55:22.262 [DEBUG] [Thread-173407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:55:22.262 [DEBUG] [Thread-173407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:55:22.303 [DEBUG] [Thread-173407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:55:22.303 [DEBUG] [Thread-173407] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:55:22.307 [DEBUG] [Thread-173407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:55:22.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:55:22.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:55:22.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:55:22.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:55:22.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:55:22.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:55:22.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:55:22.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:55:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:55:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.621302 -999.00  +13.40  11.87     96  +12.80 1 3 1 3 1   887    0 0.74 0.16 ----- 12.0 11.9 271.2 18.1 14.8 -0.8 14.7 -0.3 14.3 0.0 14.6 -0.2
2026-04-11T16:55:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:55:22.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:55:22.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.621302
2026-04-11T16:55:22.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:55:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:55:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:55:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:55:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:55:22.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:55:06', tmtdew=0.070685, humidity=99.5025, cloud=0.0, wind=17.8394, temperature=13.5125, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:54:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:55:22.333 [DEBUG] [Thread-173407] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:55:22.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:55:22.427 [DEBUG] [Thread-173410] [transport.py] [_log()] starting thread (client mode): 0xae537100
2026-04-11T16:55:22.428 [DEBUG] [Thread-173410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:55:22.443 [DEBUG] [Thread-173410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:55:22.443 [INFO] [Thread-173410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:55:22.450 [DEBUG] [Thread-173410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:55:22.451 [DEBUG] [Thread-173410] [transport.py] [_log()] client lang: <none>
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] server lang: <none>
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] kex follows: False
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:55:22.452 [DEBUG] [Thread-173410] [transport.py] [_log()] Compression: none
2026-04-11T16:55:22.453 [DEBUG] [Thread-173410] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:55:22.513 [DEBUG] [Thread-173410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:55:22.513 [DEBUG] [Thread-173410] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:55:22.514 [DEBUG] [Thread-173410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:55:22.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:55:22.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:55:22.571 [DEBUG] [Thread-173410] [transport.py] [_log()] userauth is OK
2026-04-11T16:55:22.571 [DEBUG] [Thread-173410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:55:22.571 [DEBUG] [Thread-173410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:55:22.572 [DEBUG] [Thread-173410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:55:22.572 [DEBUG] [Thread-173410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:55:22.590 [INFO] [Thread-173410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:55:22.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:55:22.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:55:23.418 [DEBUG] [Thread-173410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:55:23.419 [DEBUG] [Thread-173410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:55:23.467 [DEBUG] [Thread-173410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:55:23.467 [DEBUG] [Thread-173410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:55:23.477 [DEBUG] [Thread-173410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:55:23.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:55:23.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-04-11T16:55:23.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-04-11T16:55:23.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:55:23.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:55:23.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:55:23.513 [DEBUG] [Thread-173410] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:55:31.460 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:31.462 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:36.032 [DEBUG] [Thread-173412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:51.083 [DEBUG] [Thread-173413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:55:53.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:55:53.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:55:53.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-04-11T16:55:54.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 55, 41), 0.15682, 98.9054, 0.0, 18.0317, 13.9586, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:55:54.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:55:41
2026-04-11T16:55:55.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:55:55.411 [DEBUG] [Thread-173414] [transport.py] [_log()] starting thread (client mode): 0xae534640
2026-04-11T16:55:55.411 [DEBUG] [Thread-173414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:55:55.428 [DEBUG] [Thread-173414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:55:55.428 [INFO] [Thread-173414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:55.430 [DEBUG] [Thread-173414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] client lang: <none>
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] server lang: <none>
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] kex follows: False
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] Compression: none
2026-04-11T16:55:55.431 [DEBUG] [Thread-173414] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:55:55.443 [DEBUG] [Thread-173414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:55:55.444 [DEBUG] [Thread-173414] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:55:55.444 [DEBUG] [Thread-173414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:55:55.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:55:55.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:55:55.445 [DEBUG] [Thread-173414] [transport.py] [_log()] userauth is OK
2026-04-11T16:55:55.445 [DEBUG] [Thread-173414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:55:55.445 [DEBUG] [Thread-173414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:55:55.446 [DEBUG] [Thread-173414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:55:55.446 [DEBUG] [Thread-173414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:55:55.459 [INFO] [Thread-173414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:55:55.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:55:56.239 [DEBUG] [Thread-173414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:55:56.240 [DEBUG] [Thread-173414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:55:56.240 [DEBUG] [Thread-173414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:55:56.281 [DEBUG] [Thread-173414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:55:56.281 [DEBUG] [Thread-173414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:55:56.285 [DEBUG] [Thread-173414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:55:56.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:55:56.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:55:56.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:55:56.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:55:56.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:55:56.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:55:56.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:55:56.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:55:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:55:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.621649 -999.00  +13.50   8.67     96  +12.90 1 3 1 3 1   887    0 0.71 -0.99 ----- 11.5 8.7 265.2 12.4 14.9 -0.7 14.7 -0.2 14.3 -0.2 14.7 -0.1
2026-04-11T16:55:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:55:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:55:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.621649
2026-04-11T16:55:56.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:55:56.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:55:56.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:55:56.311 [DEBUG] [Thread-173414] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:55:56.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:55:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:55:56.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:55:41', tmtdew=0.15682, humidity=98.9054, cloud=0.0, wind=18.0317, temperature=13.9586, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:55:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:55:56.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:55:56.405 [DEBUG] [Thread-173417] [transport.py] [_log()] starting thread (client mode): 0xae536140
2026-04-11T16:55:56.405 [DEBUG] [Thread-173417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:55:56.420 [DEBUG] [Thread-173417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:55:56.420 [INFO] [Thread-173417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:55:56.427 [DEBUG] [Thread-173417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] client lang: <none>
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] server lang: <none>
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] kex follows: False
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] Compression: none
2026-04-11T16:55:56.428 [DEBUG] [Thread-173417] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:55:56.487 [DEBUG] [Thread-173417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:55:56.488 [DEBUG] [Thread-173417] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:55:56.489 [DEBUG] [Thread-173417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:55:56.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:55:56.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:55:56.543 [DEBUG] [Thread-173417] [transport.py] [_log()] userauth is OK
2026-04-11T16:55:56.543 [DEBUG] [Thread-173417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:55:56.543 [DEBUG] [Thread-173417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:55:56.543 [DEBUG] [Thread-173417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:55:56.543 [DEBUG] [Thread-173417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:55:56.556 [INFO] [Thread-173417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:55:56.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:55:56.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:55:57.384 [DEBUG] [Thread-173417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:55:57.385 [DEBUG] [Thread-173417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:55:57.432 [DEBUG] [Thread-173417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:55:57.433 [DEBUG] [Thread-173417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:55:57.442 [DEBUG] [Thread-173417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:55:57.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:55:57.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-04-11T16:55:57.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-04-11T16:55:57.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:55:57.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:55:57.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:55:57.479 [DEBUG] [Thread-173417] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:56:06.121 [DEBUG] [Thread-173419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:56:17.098 [DEBUG] [Thread-173420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:56:21.175 [DEBUG] [Thread-173421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:56:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:56:27.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:56:27.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-04-11T16:56:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 56, 17), 0.12581, 99.4693, 0.0, 12.6166, 13.4962, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:56:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:56:17
2026-04-11T16:56:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:56:29.325 [DEBUG] [Thread-173422] [transport.py] [_log()] starting thread (client mode): 0xb0feb1c0
2026-04-11T16:56:29.325 [DEBUG] [Thread-173422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:56:29.345 [DEBUG] [Thread-173422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:56:29.345 [INFO] [Thread-173422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] client lang: <none>
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] server lang: <none>
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] kex follows: False
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:56:29.348 [DEBUG] [Thread-173422] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:56:29.349 [DEBUG] [Thread-173422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:56:29.349 [DEBUG] [Thread-173422] [transport.py] [_log()] Compression: none
2026-04-11T16:56:29.349 [DEBUG] [Thread-173422] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:56:29.365 [DEBUG] [Thread-173422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:56:29.365 [DEBUG] [Thread-173422] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:56:29.365 [DEBUG] [Thread-173422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:56:29.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:56:29.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:56:29.367 [DEBUG] [Thread-173422] [transport.py] [_log()] userauth is OK
2026-04-11T16:56:29.367 [DEBUG] [Thread-173422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:56:29.368 [DEBUG] [Thread-173422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:56:29.368 [DEBUG] [Thread-173422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:56:29.368 [DEBUG] [Thread-173422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:56:29.382 [INFO] [Thread-173422] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:56:29.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:56:30.171 [DEBUG] [Thread-173422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:56:30.171 [DEBUG] [Thread-173422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:56:30.171 [DEBUG] [Thread-173422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:56:30.212 [DEBUG] [Thread-173422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:56:30.212 [DEBUG] [Thread-173422] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:56:30.216 [DEBUG] [Thread-173422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:56:30.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:56:30.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:56:30.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:56:30.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:56:30.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:56:30.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:56:30.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:56:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:56:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:56:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.621996 -999.00  +13.40  12.38     96  +12.80 1 3 1 3 1   887    0 0.68 -2.24 ----- 13.1 12.4 277.0 15.8 14.9 -0.8 14.7 -0.4 14.2 -0.1 14.6 -0.3
2026-04-11T16:56:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:56:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:56:30.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.621996
2026-04-11T16:56:30.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:56:30.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:56:30.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:56:30.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:56:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:56:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:56:17', tmtdew=0.12581, humidity=99.4693, cloud=0.0, wind=12.6166, temperature=13.4962, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:55:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:56:30.244 [DEBUG] [Thread-173422] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:56:30.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:56:30.337 [DEBUG] [Thread-173425] [transport.py] [_log()] starting thread (client mode): 0xb0fe9930
2026-04-11T16:56:30.337 [DEBUG] [Thread-173425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:56:30.351 [DEBUG] [Thread-173425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:56:30.352 [INFO] [Thread-173425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] client lang: <none>
2026-04-11T16:56:30.360 [DEBUG] [Thread-173425] [transport.py] [_log()] server lang: <none>
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] kex follows: False
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] Compression: none
2026-04-11T16:56:30.361 [DEBUG] [Thread-173425] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:56:30.420 [DEBUG] [Thread-173425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:56:30.420 [DEBUG] [Thread-173425] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:56:30.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:56:30.422 [DEBUG] [Thread-173425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:56:30.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:56:30.477 [DEBUG] [Thread-173425] [transport.py] [_log()] userauth is OK
2026-04-11T16:56:30.477 [DEBUG] [Thread-173425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:56:30.478 [DEBUG] [Thread-173425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:56:30.478 [DEBUG] [Thread-173425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:56:30.478 [DEBUG] [Thread-173425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:56:30.497 [INFO] [Thread-173425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:56:30.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:56:30.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:56:31.379 [DEBUG] [Thread-173425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:56:31.379 [DEBUG] [Thread-173425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:56:31.426 [DEBUG] [Thread-173425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:56:31.426 [DEBUG] [Thread-173425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:56:31.435 [DEBUG] [Thread-173425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:56:31.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:56:31.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-04-11T16:56:31.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-04-11T16:56:31.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:56:31.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:56:31.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:56:31.470 [DEBUG] [Thread-173425] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:56:31.604 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:56:31.605 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:56:36.215 [DEBUG] [Thread-173427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:56:51.265 [DEBUG] [Thread-173428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:01.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:57:01.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:57:01.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-04-11T16:57:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 56, 53), 0.15165, 98.9387, 0.0, 15.9149, 13.9919, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:57:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:56:53
2026-04-11T16:57:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:57:03.332 [DEBUG] [Thread-173429] [transport.py] [_log()] starting thread (client mode): 0xae536140
2026-04-11T16:57:03.332 [DEBUG] [Thread-173429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:57:03.353 [DEBUG] [Thread-173429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:57:03.353 [INFO] [Thread-173429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:57:03.356 [DEBUG] [Thread-173429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] client lang: <none>
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] server lang: <none>
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] kex follows: False
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] Compression: none
2026-04-11T16:57:03.357 [DEBUG] [Thread-173429] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:57:03.374 [DEBUG] [Thread-173429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:57:03.374 [DEBUG] [Thread-173429] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:57:03.375 [DEBUG] [Thread-173429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:57:03.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:57:03.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:57:03.377 [DEBUG] [Thread-173429] [transport.py] [_log()] userauth is OK
2026-04-11T16:57:03.377 [DEBUG] [Thread-173429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:57:03.377 [DEBUG] [Thread-173429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:57:03.377 [DEBUG] [Thread-173429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:57:03.377 [DEBUG] [Thread-173429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:57:03.397 [INFO] [Thread-173429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:57:03.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:57:04.196 [DEBUG] [Thread-173429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:57:04.196 [DEBUG] [Thread-173429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:57:04.196 [DEBUG] [Thread-173429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:57:04.237 [DEBUG] [Thread-173429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:57:04.237 [DEBUG] [Thread-173429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:57:04.240 [DEBUG] [Thread-173429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:57:04.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:57:04.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:57:04.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:57:04.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:57:04.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:57:04.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:57:04.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:57:04.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:57:04.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:57:04.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.622691 -999.00  +13.50  13.05     96  +12.90 1 3 1 3 1   887    0 0.61 -4.18 ----- 10.9 13.1 267.1 16.5 14.9 -0.5 14.8 -0.2 14.3 -0.1 14.7 -0.4
2026-04-11T16:57:04.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:57:04.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:57:04.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.622691
2026-04-11T16:57:04.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:57:04.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:57:04.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:57:04.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:57:04.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:57:04.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:56:53', tmtdew=0.15165, humidity=98.9387, cloud=0.0, wind=15.9149, temperature=13.9919, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:56:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:57:04.268 [DEBUG] [Thread-173429] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:57:04.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:57:04.358 [DEBUG] [Thread-173432] [transport.py] [_log()] starting thread (client mode): 0xa7953040
2026-04-11T16:57:04.358 [DEBUG] [Thread-173432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:57:04.373 [DEBUG] [Thread-173432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:57:04.373 [INFO] [Thread-173432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] client lang: <none>
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] server lang: <none>
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] kex follows: False
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:57:04.381 [DEBUG] [Thread-173432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:57:04.382 [DEBUG] [Thread-173432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:57:04.382 [DEBUG] [Thread-173432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:57:04.382 [DEBUG] [Thread-173432] [transport.py] [_log()] Compression: none
2026-04-11T16:57:04.382 [DEBUG] [Thread-173432] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:57:04.441 [DEBUG] [Thread-173432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:57:04.442 [DEBUG] [Thread-173432] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:57:04.442 [DEBUG] [Thread-173432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:57:04.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:57:04.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:57:04.500 [DEBUG] [Thread-173432] [transport.py] [_log()] userauth is OK
2026-04-11T16:57:04.500 [DEBUG] [Thread-173432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:57:04.501 [DEBUG] [Thread-173432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:57:04.501 [DEBUG] [Thread-173432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:57:04.501 [DEBUG] [Thread-173432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:57:04.520 [INFO] [Thread-173432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:57:04.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:57:04.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:57:05.351 [DEBUG] [Thread-173432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:57:05.351 [DEBUG] [Thread-173432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:57:05.401 [DEBUG] [Thread-173432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:57:05.402 [DEBUG] [Thread-173432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:57:05.414 [DEBUG] [Thread-173432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:57:05.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:57:05.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-04-11T16:57:05.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-04-11T16:57:05.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:57:05.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:57:05.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:57:05.451 [DEBUG] [Thread-173432] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:57:06.305 [DEBUG] [Thread-173434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:17.131 [DEBUG] [Thread-173435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:21.359 [DEBUG] [Thread-173436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:31.753 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:31.754 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:57:35.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:57:35.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-04-11T16:57:36.402 [DEBUG] [Thread-173437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:57:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 57, 28), 0.115525, 99.5357, 0.0, 14.1696, 13.6457, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:57:36.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:57:28
2026-04-11T16:57:37.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:57:37.351 [DEBUG] [Thread-173438] [transport.py] [_log()] starting thread (client mode): 0xae5636a0
2026-04-11T16:57:37.351 [DEBUG] [Thread-173438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:57:37.370 [DEBUG] [Thread-173438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:57:37.370 [INFO] [Thread-173438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] client lang: <none>
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] server lang: <none>
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] kex follows: False
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] Compression: none
2026-04-11T16:57:37.373 [DEBUG] [Thread-173438] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:57:37.389 [DEBUG] [Thread-173438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:57:37.390 [DEBUG] [Thread-173438] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:57:37.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:57:37.390 [DEBUG] [Thread-173438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:57:37.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:57:37.391 [DEBUG] [Thread-173438] [transport.py] [_log()] userauth is OK
2026-04-11T16:57:37.392 [DEBUG] [Thread-173438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:57:37.392 [DEBUG] [Thread-173438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:57:37.392 [DEBUG] [Thread-173438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:57:37.392 [DEBUG] [Thread-173438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:57:37.413 [INFO] [Thread-173438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:57:37.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:57:38.194 [DEBUG] [Thread-173438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:57:38.194 [DEBUG] [Thread-173438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:57:38.195 [DEBUG] [Thread-173438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:57:38.236 [DEBUG] [Thread-173438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:57:38.236 [DEBUG] [Thread-173438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:57:38.240 [DEBUG] [Thread-173438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:57:38.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:57:38.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:57:38.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:57:38.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:57:38.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:57:38.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:57:38.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:57:38.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:57:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:57:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.623038 -999.00  +13.50  11.70     96  +13.00 1 3 1 3 1   887    0 0.56 -5.37 ----- 10.8 11.7 265.4 14.7 14.9 -0.7 14.8 -0.3 14.3 -0.1 14.7 -0.3
2026-04-11T16:57:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:57:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:57:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.623038
2026-04-11T16:57:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:57:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:57:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:57:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:57:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:57:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:57:28', tmtdew=0.115525, humidity=99.5357, cloud=0.0, wind=14.1696, temperature=13.6457, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:57:10.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:57:38.265 [DEBUG] [Thread-173438] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:57:38.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:57:38.355 [DEBUG] [Thread-173441] [transport.py] [_log()] starting thread (client mode): 0xae508310
2026-04-11T16:57:38.355 [DEBUG] [Thread-173441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:57:38.370 [DEBUG] [Thread-173441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:57:38.370 [INFO] [Thread-173441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:57:38.378 [DEBUG] [Thread-173441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:57:38.378 [DEBUG] [Thread-173441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:57:38.378 [DEBUG] [Thread-173441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:57:38.378 [DEBUG] [Thread-173441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:38.378 [DEBUG] [Thread-173441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:57:38.378 [DEBUG] [Thread-173441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] client lang: <none>
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] server lang: <none>
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] kex follows: False
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] Compression: none
2026-04-11T16:57:38.379 [DEBUG] [Thread-173441] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:57:38.439 [DEBUG] [Thread-173441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:57:38.439 [DEBUG] [Thread-173441] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:57:38.440 [DEBUG] [Thread-173441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:57:38.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:57:38.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:57:38.496 [DEBUG] [Thread-173441] [transport.py] [_log()] userauth is OK
2026-04-11T16:57:38.497 [DEBUG] [Thread-173441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:57:38.497 [DEBUG] [Thread-173441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:57:38.497 [DEBUG] [Thread-173441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:57:38.497 [DEBUG] [Thread-173441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:57:38.516 [INFO] [Thread-173441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:57:38.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:57:38.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:57:39.355 [DEBUG] [Thread-173441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:57:39.355 [DEBUG] [Thread-173441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:57:39.403 [DEBUG] [Thread-173441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:57:39.403 [DEBUG] [Thread-173441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:57:39.412 [DEBUG] [Thread-173441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:57:39.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:57:39.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-04-11T16:57:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:57:39.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:57:39.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:57:39.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:57:39.449 [DEBUG] [Thread-173441] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:57:51.438 [DEBUG] [Thread-173443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:06.489 [DEBUG] [Thread-173444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:09.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:58:09.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:58:09.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-04-11T16:58:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 57, 28), 0.115525, 99.5357, 0.0, 14.1696, 13.6457, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:58:10.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:57:28
2026-04-11T16:58:11.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:58:11.403 [DEBUG] [Thread-173445] [transport.py] [_log()] starting thread (client mode): 0xae50b010
2026-04-11T16:58:11.403 [DEBUG] [Thread-173445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:58:11.423 [DEBUG] [Thread-173445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:58:11.423 [INFO] [Thread-173445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] client lang: <none>
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] server lang: <none>
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] kex follows: False
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:58:11.425 [DEBUG] [Thread-173445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:58:11.426 [DEBUG] [Thread-173445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:58:11.426 [DEBUG] [Thread-173445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:58:11.426 [DEBUG] [Thread-173445] [transport.py] [_log()] Compression: none
2026-04-11T16:58:11.426 [DEBUG] [Thread-173445] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:58:11.445 [DEBUG] [Thread-173445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:58:11.446 [DEBUG] [Thread-173445] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:58:11.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:58:11.447 [DEBUG] [Thread-173445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:58:11.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:58:11.449 [DEBUG] [Thread-173445] [transport.py] [_log()] userauth is OK
2026-04-11T16:58:11.449 [DEBUG] [Thread-173445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:58:11.449 [DEBUG] [Thread-173445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:58:11.449 [DEBUG] [Thread-173445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:58:11.449 [DEBUG] [Thread-173445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:58:11.473 [INFO] [Thread-173445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:58:11.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:58:12.301 [DEBUG] [Thread-173445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:58:12.302 [DEBUG] [Thread-173445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:58:12.302 [DEBUG] [Thread-173445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:58:12.342 [DEBUG] [Thread-173445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:58:12.342 [DEBUG] [Thread-173445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:58:12.346 [DEBUG] [Thread-173445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:58:12.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:58:12.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:58:12.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:58:12.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:58:12.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:58:12.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:58:12.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:58:12.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:58:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:58:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.623385 -999.00  +13.60   7.53     96  +13.00 1 3 1 3 1   887    0 0.51 -7.08 ----- 8.3 7.5 286.8 14.6 14.9 -0.6 14.8 -0.2 14.3 -0.2 14.7 -0.1
2026-04-11T16:58:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:58:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:58:12.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.623385
2026-04-11T16:58:12.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:58:12.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:58:12.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:58:12.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:58:12.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:58:12.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:57:28', tmtdew=0.115525, humidity=99.5357, cloud=0.0, wind=14.1696, temperature=13.6457, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:57:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:58:12.372 [DEBUG] [Thread-173445] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:58:12.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:58:12.467 [DEBUG] [Thread-173448] [transport.py] [_log()] starting thread (client mode): 0xae50b9d0
2026-04-11T16:58:12.467 [DEBUG] [Thread-173448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:58:12.482 [DEBUG] [Thread-173448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:58:12.482 [INFO] [Thread-173448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:58:12.489 [DEBUG] [Thread-173448] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] client lang: <none>
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] server lang: <none>
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] kex follows: False
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:58:12.490 [DEBUG] [Thread-173448] [transport.py] [_log()] Compression: none
2026-04-11T16:58:12.491 [DEBUG] [Thread-173448] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:58:12.550 [DEBUG] [Thread-173448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:58:12.550 [DEBUG] [Thread-173448] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:58:12.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:58:12.552 [DEBUG] [Thread-173448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:58:12.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:58:12.606 [DEBUG] [Thread-173448] [transport.py] [_log()] userauth is OK
2026-04-11T16:58:12.606 [DEBUG] [Thread-173448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:58:12.606 [DEBUG] [Thread-173448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:58:12.606 [DEBUG] [Thread-173448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:58:12.607 [DEBUG] [Thread-173448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:58:12.629 [INFO] [Thread-173448] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:58:12.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:58:12.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:58:13.461 [DEBUG] [Thread-173448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:58:13.461 [DEBUG] [Thread-173448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:58:13.511 [DEBUG] [Thread-173448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:58:13.512 [DEBUG] [Thread-173448] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:58:13.521 [DEBUG] [Thread-173448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:58:13.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:58:13.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-04-11T16:58:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:58:13.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:58:13.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:58:13.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:58:13.561 [DEBUG] [Thread-173448] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:58:17.171 [DEBUG] [Thread-173450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:21.528 [DEBUG] [Thread-173451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:31.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:31.895 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:36.589 [DEBUG] [Thread-173452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:58:43.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:58:43.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:58:43.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-04-11T16:58:44.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 58, 4), 0.11811, 99.5191, 0.0, 14.3636, 13.6622, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:58:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:58:04
2026-04-11T16:58:45.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:58:45.425 [DEBUG] [Thread-173453] [transport.py] [_log()] starting thread (client mode): 0xb0febb50
2026-04-11T16:58:45.425 [DEBUG] [Thread-173453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:58:45.444 [DEBUG] [Thread-173453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:58:45.445 [INFO] [Thread-173453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] client lang: <none>
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] server lang: <none>
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] kex follows: False
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:58:45.448 [DEBUG] [Thread-173453] [transport.py] [_log()] Compression: none
2026-04-11T16:58:45.449 [DEBUG] [Thread-173453] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:58:45.466 [DEBUG] [Thread-173453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:58:45.467 [DEBUG] [Thread-173453] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:58:45.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:58:45.467 [DEBUG] [Thread-173453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:58:45.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:58:45.470 [DEBUG] [Thread-173453] [transport.py] [_log()] userauth is OK
2026-04-11T16:58:45.470 [DEBUG] [Thread-173453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:58:45.470 [DEBUG] [Thread-173453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:58:45.470 [DEBUG] [Thread-173453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:58:45.470 [DEBUG] [Thread-173453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:58:45.505 [INFO] [Thread-173453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:58:45.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:58:46.229 [DEBUG] [Thread-173453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:58:46.229 [DEBUG] [Thread-173453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:58:46.229 [DEBUG] [Thread-173453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:58:46.270 [DEBUG] [Thread-173453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:58:46.270 [DEBUG] [Thread-173453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:58:46.273 [DEBUG] [Thread-173453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:58:46.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:58:46.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:58:46.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:58:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:58:46.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:58:46.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:58:46.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:58:46.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:58:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:58:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.623732 -999.00  +13.60  10.68     96  +13.00 1 3 1 3 1   887    0 0.50 -7.70 ----- 12.2 10.7 283.2 14.8 15.0 -0.6 14.8 -0.2 14.4 -0.4 14.7 -0.1
2026-04-11T16:58:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:58:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:58:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.623732
2026-04-11T16:58:46.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:58:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:58:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:58:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:58:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:58:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:58:04', tmtdew=0.11811, humidity=99.5191, cloud=0.0, wind=14.3636, temperature=13.6622, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:58:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:58:46.303 [DEBUG] [Thread-173453] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:58:46.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:58:46.406 [DEBUG] [Thread-173456] [transport.py] [_log()] starting thread (client mode): 0xae514d30
2026-04-11T16:58:46.406 [DEBUG] [Thread-173456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:58:46.423 [DEBUG] [Thread-173456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:58:46.423 [INFO] [Thread-173456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] client lang: <none>
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] server lang: <none>
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] kex follows: False
2026-04-11T16:58:46.431 [DEBUG] [Thread-173456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:58:46.432 [DEBUG] [Thread-173456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:58:46.432 [DEBUG] [Thread-173456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:58:46.432 [DEBUG] [Thread-173456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:58:46.432 [DEBUG] [Thread-173456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:58:46.432 [DEBUG] [Thread-173456] [transport.py] [_log()] Compression: none
2026-04-11T16:58:46.432 [DEBUG] [Thread-173456] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:58:46.489 [DEBUG] [Thread-173456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:58:46.490 [DEBUG] [Thread-173456] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:58:46.490 [DEBUG] [Thread-173456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:58:46.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:58:46.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:58:46.547 [DEBUG] [Thread-173456] [transport.py] [_log()] userauth is OK
2026-04-11T16:58:46.547 [DEBUG] [Thread-173456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:58:46.548 [DEBUG] [Thread-173456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:58:46.548 [DEBUG] [Thread-173456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:58:46.548 [DEBUG] [Thread-173456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:58:46.568 [INFO] [Thread-173456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:58:46.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:58:46.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:58:47.417 [DEBUG] [Thread-173456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:58:47.417 [DEBUG] [Thread-173456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:58:47.465 [DEBUG] [Thread-173456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:58:47.466 [DEBUG] [Thread-173456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:58:47.475 [DEBUG] [Thread-173456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:58:47.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:58:47.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-04-11T16:58:47.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-04-11T16:58:47.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:58:47.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:58:47.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:58:47.518 [DEBUG] [Thread-173456] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:58:51.625 [DEBUG] [Thread-173458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:06.674 [DEBUG] [Thread-173459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:17.227 [DEBUG] [Thread-173460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:17.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:59:17.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:59:17.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-04-11T16:59:18.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 58, 39), 0.14651, 98.9719, 0.0, 14.0098, 14.0582, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:59:18.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:58:39
2026-04-11T16:59:19.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:59:19.350 [DEBUG] [Thread-173461] [transport.py] [_log()] starting thread (client mode): 0xa7953ee0
2026-04-11T16:59:19.350 [DEBUG] [Thread-173461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:59:19.370 [DEBUG] [Thread-173461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:59:19.370 [INFO] [Thread-173461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:59:19.373 [DEBUG] [Thread-173461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:59:19.373 [DEBUG] [Thread-173461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:59:19.373 [DEBUG] [Thread-173461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] client lang: <none>
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] server lang: <none>
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] kex follows: False
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:59:19.374 [DEBUG] [Thread-173461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:59:19.375 [DEBUG] [Thread-173461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:59:19.375 [DEBUG] [Thread-173461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:59:19.375 [DEBUG] [Thread-173461] [transport.py] [_log()] Compression: none
2026-04-11T16:59:19.375 [DEBUG] [Thread-173461] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:59:19.393 [DEBUG] [Thread-173461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:59:19.394 [DEBUG] [Thread-173461] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:59:19.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:59:19.395 [DEBUG] [Thread-173461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:59:19.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:59:19.397 [DEBUG] [Thread-173461] [transport.py] [_log()] userauth is OK
2026-04-11T16:59:19.398 [DEBUG] [Thread-173461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:59:19.398 [DEBUG] [Thread-173461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:59:19.398 [DEBUG] [Thread-173461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:59:19.398 [DEBUG] [Thread-173461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:59:19.423 [INFO] [Thread-173461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:59:19.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:59:20.416 [DEBUG] [Thread-173461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:59:20.417 [DEBUG] [Thread-173461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:59:20.417 [DEBUG] [Thread-173461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:59:20.457 [DEBUG] [Thread-173461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:59:20.457 [DEBUG] [Thread-173461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:59:20.460 [DEBUG] [Thread-173461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:59:20.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:59:20.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:59:20.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:59:20.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:59:20.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:59:20.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:59:20.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:59:20.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:59:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:59:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.624080 -999.00  +13.50  13.61     96  +13.00 1 3 1 3 1   887    0 0.45 -8.54 ----- 13.1 13.6 275.6 17.5 14.9 -0.4 14.8 -0.3 14.3 -0.1 14.8 -0.0
2026-04-11T16:59:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:59:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:59:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.624080
2026-04-11T16:59:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:59:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:59:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:59:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:59:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:59:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:58:39', tmtdew=0.14651, humidity=98.9719, cloud=0.0, wind=14.0098, temperature=14.0582, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:58:40.512', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:59:20.485 [DEBUG] [Thread-173461] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:59:20.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:59:20.588 [DEBUG] [Thread-173464] [transport.py] [_log()] starting thread (client mode): 0xae51a020
2026-04-11T16:59:20.588 [DEBUG] [Thread-173464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:59:20.602 [DEBUG] [Thread-173464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:59:20.602 [INFO] [Thread-173464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:59:20.610 [DEBUG] [Thread-173464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:59:20.610 [DEBUG] [Thread-173464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:59:20.610 [DEBUG] [Thread-173464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:59:20.610 [DEBUG] [Thread-173464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:20.610 [DEBUG] [Thread-173464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:20.610 [DEBUG] [Thread-173464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] client lang: <none>
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] server lang: <none>
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] kex follows: False
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:59:20.611 [DEBUG] [Thread-173464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:59:20.612 [DEBUG] [Thread-173464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:59:20.612 [DEBUG] [Thread-173464] [transport.py] [_log()] Compression: none
2026-04-11T16:59:20.612 [DEBUG] [Thread-173464] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:59:20.666 [DEBUG] [Thread-173464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:59:20.667 [DEBUG] [Thread-173464] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:59:20.667 [DEBUG] [Thread-173464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:59:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:59:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:59:20.724 [DEBUG] [Thread-173464] [transport.py] [_log()] userauth is OK
2026-04-11T16:59:20.724 [DEBUG] [Thread-173464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:59:20.724 [DEBUG] [Thread-173464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:59:20.724 [DEBUG] [Thread-173464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:59:20.725 [DEBUG] [Thread-173464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:59:20.744 [INFO] [Thread-173464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:59:20.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:59:20.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:59:21.569 [DEBUG] [Thread-173464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:59:21.569 [DEBUG] [Thread-173464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:59:21.617 [DEBUG] [Thread-173464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:59:21.617 [DEBUG] [Thread-173464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:59:21.626 [DEBUG] [Thread-173464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:59:21.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:59:21.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-04-11T16:59:21.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:59:21.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:59:21.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:59:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:59:21.665 [DEBUG] [Thread-173464] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:59:21.712 [DEBUG] [Thread-173466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:32.035 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:32.036 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:36.779 [DEBUG] [Thread-173467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:51.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T16:59:51.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T16:59:51.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-04-11T16:59:51.819 [DEBUG] [Thread-173468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T16:59:53.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 59, 14), 0.081045, 99.4358, 0.0, 19.5505, 13.4957, 2, 2, 2, 2, 0, 0),)
2026-04-11T16:59:53.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:59:14
2026-04-11T16:59:53.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T16:59:53.689 [DEBUG] [Thread-173469] [transport.py] [_log()] starting thread (client mode): 0xae5f08b0
2026-04-11T16:59:53.689 [DEBUG] [Thread-173469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:59:53.710 [DEBUG] [Thread-173469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T16:59:53.710 [INFO] [Thread-173469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] client lang: <none>
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] server lang: <none>
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] kex follows: False
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] Compression: none
2026-04-11T16:59:53.713 [DEBUG] [Thread-173469] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:59:53.730 [DEBUG] [Thread-173469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:59:53.731 [DEBUG] [Thread-173469] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:59:53.732 [DEBUG] [Thread-173469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T16:59:53.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T16:59:53.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:59:53.734 [DEBUG] [Thread-173469] [transport.py] [_log()] userauth is OK
2026-04-11T16:59:53.734 [DEBUG] [Thread-173469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:59:53.734 [DEBUG] [Thread-173469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:59:53.734 [DEBUG] [Thread-173469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T16:59:53.735 [DEBUG] [Thread-173469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:59:53.759 [INFO] [Thread-173469] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:59:53.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:59:54.551 [DEBUG] [Thread-173469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:59:54.551 [DEBUG] [Thread-173469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:59:54.551 [DEBUG] [Thread-173469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T16:59:54.592 [DEBUG] [Thread-173469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:59:54.593 [DEBUG] [Thread-173469] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:59:54.596 [DEBUG] [Thread-173469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:59:54.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:59:54.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T16:59:54.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T16:59:54.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T16:59:54.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:59:54.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T16:59:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:59:54.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:59:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T16:59:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.624427 -999.00  +13.50  11.68     96  +13.00 1 3 1 3 1   887    0 0.41 -9.53 ----- 12.7 11.7 286.2 14.7 15.0 -0.4 14.8 -0.2 14.3 -1.1 14.8 -0.1
2026-04-11T16:59:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T16:59:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T16:59:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.624427
2026-04-11T16:59:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T16:59:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T16:59:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T16:59:54.621 [DEBUG] [Thread-173469] [transport.py] [_log()] EOF in transport thread
2026-04-11T16:59:54.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T16:59:54.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T16:59:54.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:59:14', tmtdew=0.081045, humidity=99.4358, cloud=0.0, wind=19.5505, temperature=13.4957, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:59:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T16:59:54.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T16:59:54.726 [DEBUG] [Thread-173472] [transport.py] [_log()] starting thread (client mode): 0xae516a40
2026-04-11T16:59:54.726 [DEBUG] [Thread-173472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T16:59:54.741 [DEBUG] [Thread-173472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T16:59:54.741 [INFO] [Thread-173472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T16:59:54.748 [DEBUG] [Thread-173472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] client lang: <none>
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] server lang: <none>
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] kex follows: False
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] Compression: none
2026-04-11T16:59:54.749 [DEBUG] [Thread-173472] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T16:59:54.807 [DEBUG] [Thread-173472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T16:59:54.808 [DEBUG] [Thread-173472] [transport.py] [_log()] Switch to new keys ...
2026-04-11T16:59:54.808 [DEBUG] [Thread-173472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T16:59:54.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T16:59:54.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T16:59:54.865 [DEBUG] [Thread-173472] [transport.py] [_log()] userauth is OK
2026-04-11T16:59:54.865 [DEBUG] [Thread-173472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T16:59:54.865 [DEBUG] [Thread-173472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T16:59:54.865 [DEBUG] [Thread-173472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T16:59:54.865 [DEBUG] [Thread-173472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T16:59:54.883 [INFO] [Thread-173472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T16:59:54.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T16:59:54.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T16:59:55.692 [DEBUG] [Thread-173472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T16:59:55.692 [DEBUG] [Thread-173472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T16:59:55.740 [DEBUG] [Thread-173472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T16:59:55.740 [DEBUG] [Thread-173472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T16:59:55.750 [DEBUG] [Thread-173472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T16:59:55.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T16:59: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-04-11T16:59:55.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T16:59:55.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T16:59:55.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T16:59:55.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T16:59:55.786 [DEBUG] [Thread-173472] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:00:06.857 [DEBUG] [Thread-173474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:00:17.255 [DEBUG] [Thread-173475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:00:21.907 [DEBUG] [Thread-173476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:00:25.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:00:25.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:00: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-04-11T17:00:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 16, 59, 50), 0.16715, 98.8385, 0.0, 19.5487, 13.7925, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:00:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 16:59:50
2026-04-11T17:00:27.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:00:27.783 [DEBUG] [Thread-173477] [transport.py] [_log()] starting thread (client mode): 0xae50a4a0
2026-04-11T17:00:27.783 [DEBUG] [Thread-173477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:00:27.802 [DEBUG] [Thread-173477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:00:27.803 [INFO] [Thread-173477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] client lang: <none>
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] server lang: <none>
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] kex follows: False
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] Compression: none
2026-04-11T17:00:27.806 [DEBUG] [Thread-173477] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:00:27.822 [DEBUG] [Thread-173477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:00:27.823 [DEBUG] [Thread-173477] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:00:27.823 [DEBUG] [Thread-173477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:00:27.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:00:27.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:00:27.825 [DEBUG] [Thread-173477] [transport.py] [_log()] userauth is OK
2026-04-11T17:00:27.825 [DEBUG] [Thread-173477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:00:27.825 [DEBUG] [Thread-173477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:00:27.825 [DEBUG] [Thread-173477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:00:27.825 [DEBUG] [Thread-173477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:00:27.845 [INFO] [Thread-173477] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:00:27.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:00:28.871 [DEBUG] [Thread-173477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:00:28.871 [DEBUG] [Thread-173477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:00:28.872 [DEBUG] [Thread-173477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:00:28.912 [DEBUG] [Thread-173477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:00:28.912 [DEBUG] [Thread-173477] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:00:28.916 [DEBUG] [Thread-173477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:00:28.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:00:28.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:00:28.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:00:28.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:00:28.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:00:28.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:00:28.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:00:28.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:00:28.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:00:28.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.624774 -999.00  +13.50  14.75     96  +12.90 1 3 1 3 1   887    0 0.38 -10.80 ----- 14.0 14.8 280.8 17.8 15.0 -0.5 14.8 -0.5 14.3 -0.0 14.8 -0.1
2026-04-11T17:00:28.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:00:28.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:00:28.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.624774
2026-04-11T17:00:28.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:00:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:00:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:00:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:00:28.944 [DEBUG] [Thread-173477] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:00:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:00:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T16:59:50', tmtdew=0.16715, humidity=98.8385, cloud=0.0, wind=19.5487, temperature=13.7925, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T14:59:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:00:29.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:00:29.038 [DEBUG] [Thread-173480] [transport.py] [_log()] starting thread (client mode): 0xb0fe9c30
2026-04-11T17:00:29.038 [DEBUG] [Thread-173480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:00:29.052 [DEBUG] [Thread-173480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:00:29.052 [INFO] [Thread-173480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:00:29.060 [DEBUG] [Thread-173480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:00:29.061 [DEBUG] [Thread-173480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] client lang: <none>
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] server lang: <none>
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] kex follows: False
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] Compression: none
2026-04-11T17:00:29.062 [DEBUG] [Thread-173480] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:00:29.119 [DEBUG] [Thread-173480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:00:29.119 [DEBUG] [Thread-173480] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:00:29.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:00:29.120 [DEBUG] [Thread-173480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:00:29.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:00:29.175 [DEBUG] [Thread-173480] [transport.py] [_log()] userauth is OK
2026-04-11T17:00:29.175 [DEBUG] [Thread-173480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:00:29.175 [DEBUG] [Thread-173480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:00:29.176 [DEBUG] [Thread-173480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:00:29.176 [DEBUG] [Thread-173480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:00:29.194 [INFO] [Thread-173480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:00:29.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:00:29.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:00:29.997 [DEBUG] [Thread-173480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:00:29.997 [DEBUG] [Thread-173480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:00:30.045 [DEBUG] [Thread-173480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:00:30.045 [DEBUG] [Thread-173480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:00:30.054 [DEBUG] [Thread-173480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:00:30.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:00:30.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-04-11T17:00:30.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-04-11T17:00:30.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:00:30.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:00:30.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:00:30.091 [DEBUG] [Thread-173480] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:00:32.177 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:00:32.179 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:00:36.945 [DEBUG] [Thread-173482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:00:52.000 [DEBUG] [Thread-173483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:00.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:01:00.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:01:00.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-04-11T17:01:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 0, 25), 0.12842, 99.4525, 0.0, 18.9155, 13.4295, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:01:01.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:00:25
2026-04-11T17:01:01.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:01:02.061 [DEBUG] [Thread-173484] [transport.py] [_log()] starting thread (client mode): 0xae5610c0
2026-04-11T17:01:02.061 [DEBUG] [Thread-173484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:01:02.080 [DEBUG] [Thread-173484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:01:02.080 [INFO] [Thread-173484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] client lang: <none>
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] server lang: <none>
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] kex follows: False
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] Compression: none
2026-04-11T17:01:02.084 [DEBUG] [Thread-173484] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:01:02.101 [DEBUG] [Thread-173484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:01:02.102 [DEBUG] [Thread-173484] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:01:02.102 [DEBUG] [Thread-173484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:01:02.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:01:02.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:01:02.104 [DEBUG] [Thread-173484] [transport.py] [_log()] userauth is OK
2026-04-11T17:01:02.104 [DEBUG] [Thread-173484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:01:02.104 [DEBUG] [Thread-173484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:01:02.104 [DEBUG] [Thread-173484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:01:02.104 [DEBUG] [Thread-173484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:01:02.128 [INFO] [Thread-173484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:01:02.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:01:02.915 [DEBUG] [Thread-173484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:01:02.915 [DEBUG] [Thread-173484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:01:02.915 [DEBUG] [Thread-173484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:01:02.957 [DEBUG] [Thread-173484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:01:02.957 [DEBUG] [Thread-173484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:01:02.959 [DEBUG] [Thread-173484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:01:02.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:01:02.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:01:02.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:01:02.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:01:02.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:01:02.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:01:02.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.625121 -999.00  +13.50  11.38     96  +12.90 1 3 1 3 1   887    0 0.36 -11.40 ----- 10.8 11.4 277.4 16.0 15.0 -0.6 14.8 -0.4 14.4 -0.1 14.8 -0.3
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.625121
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:01:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:00:25', tmtdew=0.12842, humidity=99.4525, cloud=0.0, wind=18.9155, temperature=13.4295, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:00:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:01:02.978 [DEBUG] [Thread-173484] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:01:03.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:01:03.060 [DEBUG] [Thread-173487] [transport.py] [_log()] starting thread (client mode): 0xa7950a90
2026-04-11T17:01:03.060 [DEBUG] [Thread-173487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:01:03.075 [DEBUG] [Thread-173487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:01:03.075 [INFO] [Thread-173487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:01:03.082 [DEBUG] [Thread-173487] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:01:03.082 [DEBUG] [Thread-173487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:01:03.082 [DEBUG] [Thread-173487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:01:03.082 [DEBUG] [Thread-173487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] client lang: <none>
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] server lang: <none>
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] kex follows: False
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] Compression: none
2026-04-11T17:01:03.083 [DEBUG] [Thread-173487] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:01:03.139 [DEBUG] [Thread-173487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:01:03.140 [DEBUG] [Thread-173487] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:01:03.140 [DEBUG] [Thread-173487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:01:03.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:01:03.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:01:03.196 [DEBUG] [Thread-173487] [transport.py] [_log()] userauth is OK
2026-04-11T17:01:03.196 [DEBUG] [Thread-173487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:01:03.196 [DEBUG] [Thread-173487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:01:03.196 [DEBUG] [Thread-173487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:01:03.196 [DEBUG] [Thread-173487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:01:03.218 [INFO] [Thread-173487] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:01:03.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:01:03.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:01:04.076 [DEBUG] [Thread-173487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:01:04.076 [DEBUG] [Thread-173487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:01:04.124 [DEBUG] [Thread-173487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:01:04.124 [DEBUG] [Thread-173487] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:01:04.132 [DEBUG] [Thread-173487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:01:04.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:01: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-04-11T17:01: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-04-11T17:01:04.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:01:04.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:01:04.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:01:04.166 [DEBUG] [Thread-173487] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:01:07.042 [DEBUG] [Thread-173489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:17.290 [DEBUG] [Thread-173490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:22.095 [DEBUG] [Thread-173491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:32.316 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:32.318 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:34.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:01:34.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:01:34.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-04-11T17:01:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 1, 1), 0.130965, 99.4359, 0.0, 18.545, 13.3631, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:01:35.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:01:01
2026-04-11T17:01:35.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:01:36.014 [DEBUG] [Thread-173492] [transport.py] [_log()] starting thread (client mode): 0xae5e7b50
2026-04-11T17:01:36.014 [DEBUG] [Thread-173492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:01:36.026 [DEBUG] [Thread-173492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:01:36.027 [INFO] [Thread-173492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] client lang: <none>
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] server lang: <none>
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] kex follows: False
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] Compression: none
2026-04-11T17:01:36.030 [DEBUG] [Thread-173492] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:01:36.048 [DEBUG] [Thread-173492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:01:36.049 [DEBUG] [Thread-173492] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:01:36.049 [DEBUG] [Thread-173492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:01:36.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:01:36.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:01:36.051 [DEBUG] [Thread-173492] [transport.py] [_log()] userauth is OK
2026-04-11T17:01:36.051 [DEBUG] [Thread-173492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:01:36.051 [DEBUG] [Thread-173492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:01:36.051 [DEBUG] [Thread-173492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:01:36.051 [DEBUG] [Thread-173492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:01:36.077 [INFO] [Thread-173492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:01:36.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:01:36.865 [DEBUG] [Thread-173492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:01:36.869 [DEBUG] [Thread-173492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:01:36.869 [DEBUG] [Thread-173492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:01:36.906 [DEBUG] [Thread-173492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:01:36.906 [DEBUG] [Thread-173492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:01:36.910 [DEBUG] [Thread-173492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:01:36.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:01:36.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:01:36.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:01:36.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:01:36.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:01:36.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:01:36.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:01:36.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:01:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:01:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.625468 -999.00  +13.50  11.23     96  +13.00 1 3 1 3 1   887    0 0.34 -12.40 ----- 12.4 11.2 271.4 15.4 14.9 -0.6 14.8 -0.3 14.3 -1.2 14.8 -0.3
2026-04-11T17:01:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:01:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:01:36.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.625468
2026-04-11T17:01:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:01:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:01:36.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:01:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:01:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:01:36.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:01:01', tmtdew=0.130965, humidity=99.4359, cloud=0.0, wind=18.545, temperature=13.3631, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:00:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:01:36.937 [DEBUG] [Thread-173492] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:01:37.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:01:37.030 [DEBUG] [Thread-173495] [transport.py] [_log()] starting thread (client mode): 0xae5a63e0
2026-04-11T17:01:37.031 [DEBUG] [Thread-173495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:01:37.045 [DEBUG] [Thread-173495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:01:37.045 [INFO] [Thread-173495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:37.053 [DEBUG] [Thread-173495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] client lang: <none>
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] server lang: <none>
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] kex follows: False
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:01:37.054 [DEBUG] [Thread-173495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:01:37.055 [DEBUG] [Thread-173495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:01:37.055 [DEBUG] [Thread-173495] [transport.py] [_log()] Compression: none
2026-04-11T17:01:37.055 [DEBUG] [Thread-173495] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:01:37.114 [DEBUG] [Thread-173495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:01:37.115 [DEBUG] [Thread-173495] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:01:37.115 [DEBUG] [Thread-173495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:01:37.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:01:37.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:01:37.132 [DEBUG] [Thread-173497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:01:37.174 [DEBUG] [Thread-173495] [transport.py] [_log()] userauth is OK
2026-04-11T17:01:37.174 [DEBUG] [Thread-173495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:01:37.174 [DEBUG] [Thread-173495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:01:37.174 [DEBUG] [Thread-173495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:01:37.174 [DEBUG] [Thread-173495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:01:37.194 [INFO] [Thread-173495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:01:37.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:01:37.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:01:38.007 [DEBUG] [Thread-173495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:01:38.007 [DEBUG] [Thread-173495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:01:38.055 [DEBUG] [Thread-173495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:01:38.056 [DEBUG] [Thread-173495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:01:38.064 [DEBUG] [Thread-173495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:01:38.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:01:38.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-04-11T17:01:38.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:01:38.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:01:38.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:01:38.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:01:38.098 [DEBUG] [Thread-173495] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:01:52.185 [DEBUG] [Thread-173498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:07.225 [DEBUG] [Thread-173499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:02:08.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:02:08.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-04-11T17:02:09.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 1, 36), 0.16192, 98.872, 0.0, 14.8918, 13.7595, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:02:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:01:36
2026-04-11T17:02:09.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:02:09.926 [DEBUG] [Thread-173500] [transport.py] [_log()] starting thread (client mode): 0xae5a6c50
2026-04-11T17:02:09.926 [DEBUG] [Thread-173500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:02:09.947 [DEBUG] [Thread-173500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:02:09.947 [INFO] [Thread-173500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] client lang: <none>
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] server lang: <none>
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] kex follows: False
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] Compression: none
2026-04-11T17:02:09.951 [DEBUG] [Thread-173500] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:02:09.968 [DEBUG] [Thread-173500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:02:09.968 [DEBUG] [Thread-173500] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:02:09.969 [DEBUG] [Thread-173500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:02:09.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:02:09.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:02:09.971 [DEBUG] [Thread-173500] [transport.py] [_log()] userauth is OK
2026-04-11T17:02:09.971 [DEBUG] [Thread-173500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:02:09.971 [DEBUG] [Thread-173500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:02:09.971 [DEBUG] [Thread-173500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:02:09.971 [DEBUG] [Thread-173500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:02:09.995 [INFO] [Thread-173500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:02:09.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:02:10.747 [DEBUG] [Thread-173500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:02:10.748 [DEBUG] [Thread-173500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:02:10.748 [DEBUG] [Thread-173500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:02:10.788 [DEBUG] [Thread-173500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:02:10.788 [DEBUG] [Thread-173500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:02:10.791 [DEBUG] [Thread-173500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:02:10.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:02:10.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:02:10.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:02:10.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:02:10.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:02:10.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:02:10.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:02:10.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:02:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:02:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.626163 -999.00  +13.50  11.74     96  +12.90 1 3 1 3 1   887    0 0.25 -14.55 ----- 12.3 11.7 280.2 14.7 14.9 -1.1 14.8 -0.4 14.3 -0.4 14.7 -0.1
2026-04-11T17:02:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:02:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:02:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.626163
2026-04-11T17:02:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:02:10.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:02:10.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:02:10.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:02:10.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:02:10.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:01:36', tmtdew=0.16192, humidity=98.872, cloud=0.0, wind=14.8918, temperature=13.7595, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:01:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:02:10.816 [DEBUG] [Thread-173500] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:02:10.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:02:10.909 [DEBUG] [Thread-173503] [transport.py] [_log()] starting thread (client mode): 0xae5e4ac0
2026-04-11T17:02:10.909 [DEBUG] [Thread-173503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:02:10.928 [DEBUG] [Thread-173503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:02:10.929 [INFO] [Thread-173503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:02:10.936 [DEBUG] [Thread-173503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:02:10.936 [DEBUG] [Thread-173503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:02:10.936 [DEBUG] [Thread-173503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:02:10.936 [DEBUG] [Thread-173503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:10.936 [DEBUG] [Thread-173503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] client lang: <none>
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] server lang: <none>
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] kex follows: False
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] Compression: none
2026-04-11T17:02:10.937 [DEBUG] [Thread-173503] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:02:10.996 [DEBUG] [Thread-173503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:02:10.997 [DEBUG] [Thread-173503] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:02:10.998 [DEBUG] [Thread-173503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:02:10.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:02:10.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:02:11.053 [DEBUG] [Thread-173503] [transport.py] [_log()] userauth is OK
2026-04-11T17:02:11.053 [DEBUG] [Thread-173503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:02:11.053 [DEBUG] [Thread-173503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:02:11.053 [DEBUG] [Thread-173503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:02:11.053 [DEBUG] [Thread-173503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:02:11.072 [INFO] [Thread-173503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:02:11.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:02:11.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:02:11.901 [DEBUG] [Thread-173503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:02:11.902 [DEBUG] [Thread-173503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:02:11.950 [DEBUG] [Thread-173503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:02:11.950 [DEBUG] [Thread-173503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:02:11.960 [DEBUG] [Thread-173503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:02:11.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:02:11.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:02:11.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-04-11T17:02:11.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:02:11.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:02:11.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:02:11.997 [DEBUG] [Thread-173503] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:02:17.342 [DEBUG] [Thread-173505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:22.263 [DEBUG] [Thread-173506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:32.459 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:32.461 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:37.324 [DEBUG] [Thread-173507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:02:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:02:42.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:02:42.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-04-11T17:02:43.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 2, 12), 0.112965, 99.0521, 0.0, 18.0335, 13.4958, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:02:43.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:02:12
2026-04-11T17:02:43.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:02:43.854 [DEBUG] [Thread-173508] [transport.py] [_log()] starting thread (client mode): 0xae51bd60
2026-04-11T17:02:43.854 [DEBUG] [Thread-173508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:02:43.876 [DEBUG] [Thread-173508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:02:43.876 [INFO] [Thread-173508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:02:43.879 [DEBUG] [Thread-173508] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] client lang: <none>
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] server lang: <none>
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] kex follows: False
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] Compression: none
2026-04-11T17:02:43.880 [DEBUG] [Thread-173508] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:02:43.898 [DEBUG] [Thread-173508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:02:43.898 [DEBUG] [Thread-173508] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:02:43.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:02:43.900 [DEBUG] [Thread-173508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:02:43.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:02:43.902 [DEBUG] [Thread-173508] [transport.py] [_log()] userauth is OK
2026-04-11T17:02:43.902 [DEBUG] [Thread-173508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:02:43.902 [DEBUG] [Thread-173508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:02:43.902 [DEBUG] [Thread-173508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:02:43.902 [DEBUG] [Thread-173508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:02:43.926 [INFO] [Thread-173508] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:02:43.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:02:44.706 [DEBUG] [Thread-173508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:02:44.706 [DEBUG] [Thread-173508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:02:44.706 [DEBUG] [Thread-173508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:02:44.747 [DEBUG] [Thread-173508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:02:44.747 [DEBUG] [Thread-173508] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:02:44.751 [DEBUG] [Thread-173508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:02:44.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:02:44.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:02:44.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:02:44.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:02:44.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:02:44.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:02:44.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:02:44.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:02:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:02:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.626510 -999.00  +13.40  11.22     96  +12.80 1 3 1 3 1   887    0 0.26 -14.59 ----- 8.6 11.2 263.4 18.3 14.9 -1.1 14.8 -0.3 14.3 -0.6 14.7 -0.3
2026-04-11T17:02:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:02:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:02:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.626510
2026-04-11T17:02:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:02:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:02:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:02:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:02:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:02:44.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:02:12', tmtdew=0.112965, humidity=99.0521, cloud=0.0, wind=18.0335, temperature=13.4958, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:02:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:02:44.779 [DEBUG] [Thread-173508] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:02:44.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:02:44.872 [DEBUG] [Thread-173511] [transport.py] [_log()] starting thread (client mode): 0xae50a800
2026-04-11T17:02:44.872 [DEBUG] [Thread-173511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:02:44.886 [DEBUG] [Thread-173511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:02:44.886 [INFO] [Thread-173511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:02:44.894 [DEBUG] [Thread-173511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:02:44.894 [DEBUG] [Thread-173511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] client lang: <none>
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] server lang: <none>
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] kex follows: False
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] Compression: none
2026-04-11T17:02:44.895 [DEBUG] [Thread-173511] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:02:44.954 [DEBUG] [Thread-173511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:02:44.955 [DEBUG] [Thread-173511] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:02:44.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:02:44.956 [DEBUG] [Thread-173511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:02:44.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:02:45.011 [DEBUG] [Thread-173511] [transport.py] [_log()] userauth is OK
2026-04-11T17:02:45.011 [DEBUG] [Thread-173511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:02:45.011 [DEBUG] [Thread-173511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:02:45.011 [DEBUG] [Thread-173511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:02:45.011 [DEBUG] [Thread-173511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:02:45.030 [INFO] [Thread-173511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:02:45.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:02:45.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:02:45.851 [DEBUG] [Thread-173511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:02:45.852 [DEBUG] [Thread-173511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:02:45.900 [DEBUG] [Thread-173511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:02:45.900 [DEBUG] [Thread-173511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:02:45.909 [DEBUG] [Thread-173511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:02:45.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:02:45.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:02:45.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:02:45.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:02:45.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:02:45.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:02:45.945 [DEBUG] [Thread-173511] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:02:52.362 [DEBUG] [Thread-173513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:07.422 [DEBUG] [Thread-173514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:03:15.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:03:15.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-04-11T17:03:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 2, 47), 0.13106, 99.0711, 0.0, 20.466, 13.9917, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:03:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:02:47
2026-04-11T17:03:17.388 [DEBUG] [Thread-173515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:17.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:03:17.929 [DEBUG] [Thread-173516] [transport.py] [_log()] starting thread (client mode): 0xae50a740
2026-04-11T17:03:17.929 [DEBUG] [Thread-173516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:03:17.947 [DEBUG] [Thread-173516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:03:17.947 [INFO] [Thread-173516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] client lang: <none>
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] server lang: <none>
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] kex follows: False
2026-04-11T17:03:17.950 [DEBUG] [Thread-173516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:03:17.951 [DEBUG] [Thread-173516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:03:17.951 [DEBUG] [Thread-173516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:03:17.951 [DEBUG] [Thread-173516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:03:17.951 [DEBUG] [Thread-173516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:03:17.951 [DEBUG] [Thread-173516] [transport.py] [_log()] Compression: none
2026-04-11T17:03:17.951 [DEBUG] [Thread-173516] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:03:17.964 [DEBUG] [Thread-173516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:03:17.964 [DEBUG] [Thread-173516] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:03:17.964 [DEBUG] [Thread-173516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:03:17.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:03:17.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:03:17.966 [DEBUG] [Thread-173516] [transport.py] [_log()] userauth is OK
2026-04-11T17:03:17.966 [DEBUG] [Thread-173516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:03:17.966 [DEBUG] [Thread-173516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:03:17.966 [DEBUG] [Thread-173516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:03:17.966 [DEBUG] [Thread-173516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:03:17.990 [INFO] [Thread-173516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:03:17.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:03:18.808 [DEBUG] [Thread-173516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:03:18.808 [DEBUG] [Thread-173516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:03:18.809 [DEBUG] [Thread-173516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:03:18.849 [DEBUG] [Thread-173516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:03:18.849 [DEBUG] [Thread-173516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:03:18.853 [DEBUG] [Thread-173516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:03:18.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:03:18.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:03:18.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:03:18.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:03:18.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:03:18.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:03:18.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:03:18.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:03:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:03:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.626857 -999.00  +13.40  15.79     96  +12.90 1 3 1 3 1   887    0 0.20 -16.12 ----- 11.3 15.8 269.0 20.9 14.9 -0.8 14.7 -0.5 14.3 -0.1 14.7 -0.4
2026-04-11T17:03:18.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:03:18.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:03:18.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.626857
2026-04-11T17:03:18.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:03:18.881 [DEBUG] [Thread-173516] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:03:18.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:03:18.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:03:18.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:03:18.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:03:18.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:02:47', tmtdew=0.13106, humidity=99.0711, cloud=0.0, wind=20.466, temperature=13.9917, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:02:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:03:18.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:03:18.977 [DEBUG] [Thread-173519] [transport.py] [_log()] starting thread (client mode): 0xae5a5f90
2026-04-11T17:03:18.977 [DEBUG] [Thread-173519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:03:18.992 [DEBUG] [Thread-173519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:03:18.992 [INFO] [Thread-173519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] client lang: <none>
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] server lang: <none>
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] kex follows: False
2026-04-11T17:03:19.000 [DEBUG] [Thread-173519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:03:19.001 [DEBUG] [Thread-173519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:03:19.001 [DEBUG] [Thread-173519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:03:19.001 [DEBUG] [Thread-173519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:03:19.001 [DEBUG] [Thread-173519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:03:19.001 [DEBUG] [Thread-173519] [transport.py] [_log()] Compression: none
2026-04-11T17:03:19.001 [DEBUG] [Thread-173519] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:03:19.061 [DEBUG] [Thread-173519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:03:19.061 [DEBUG] [Thread-173519] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:03:19.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:03:19.062 [DEBUG] [Thread-173519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:03:19.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:03:19.117 [DEBUG] [Thread-173519] [transport.py] [_log()] userauth is OK
2026-04-11T17:03:19.117 [DEBUG] [Thread-173519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:03:19.117 [DEBUG] [Thread-173519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:03:19.117 [DEBUG] [Thread-173519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:03:19.117 [DEBUG] [Thread-173519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:03:19.136 [INFO] [Thread-173519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:03:19.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:03:19.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:03:19.968 [DEBUG] [Thread-173519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:03:19.968 [DEBUG] [Thread-173519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:03:20.017 [DEBUG] [Thread-173519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:03:20.017 [DEBUG] [Thread-173519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:03:20.026 [DEBUG] [Thread-173519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:03:20.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:03:20.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-04-11T17:03:20.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:03:20.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:03:20.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:03:20.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:03:20.062 [DEBUG] [Thread-173519] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:03:22.457 [DEBUG] [Thread-173521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:32.601 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:32.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:37.521 [DEBUG] [Thread-173522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:50.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:03:50.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:03:50.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-04-11T17:03:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 3, 23), 0.118095, 99.519, 0.0, 16.7098, 13.4461, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:03:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:03:23
2026-04-11T17:03:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:03:51.905 [DEBUG] [Thread-173523] [transport.py] [_log()] starting thread (client mode): 0xae509330
2026-04-11T17:03:51.905 [DEBUG] [Thread-173523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:03:51.925 [DEBUG] [Thread-173523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:03:51.925 [INFO] [Thread-173523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] client lang: <none>
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] server lang: <none>
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] kex follows: False
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:03:51.928 [DEBUG] [Thread-173523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:03:51.929 [DEBUG] [Thread-173523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:03:51.929 [DEBUG] [Thread-173523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:03:51.929 [DEBUG] [Thread-173523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:03:51.929 [DEBUG] [Thread-173523] [transport.py] [_log()] Compression: none
2026-04-11T17:03:51.929 [DEBUG] [Thread-173523] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:03:51.947 [DEBUG] [Thread-173523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:03:51.948 [DEBUG] [Thread-173523] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:03:51.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:03:51.949 [DEBUG] [Thread-173523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:03:51.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:03:51.951 [DEBUG] [Thread-173523] [transport.py] [_log()] userauth is OK
2026-04-11T17:03:51.951 [DEBUG] [Thread-173523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:03:51.951 [DEBUG] [Thread-173523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:03:51.952 [DEBUG] [Thread-173523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:03:51.952 [DEBUG] [Thread-173523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:03:51.987 [INFO] [Thread-173523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:03:51.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:03:52.559 [DEBUG] [Thread-173525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:03:52.776 [DEBUG] [Thread-173523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:03:52.776 [DEBUG] [Thread-173523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:03:52.776 [DEBUG] [Thread-173523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:03:52.817 [DEBUG] [Thread-173523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:03:52.817 [DEBUG] [Thread-173523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:03:52.821 [DEBUG] [Thread-173523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:03:52.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:03:52.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:03:52.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:03:52.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:03:52.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:03:52.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:03:52.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:03:52.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:03:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:03:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.627204 -999.00  +13.40  11.58     96  +12.80 1 3 1 3 1   887    0 0.19 -16.50 ----- 12.7 11.6 280.5 19.7 14.8 -0.7 14.7 -0.5 14.3 -0.1 14.7 -0.2
2026-04-11T17:03:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:03:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:03:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.627204
2026-04-11T17:03:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:03:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:03:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:03:52.848 [DEBUG] [Thread-173523] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:03:52.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:03:52.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:03:52.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:03:23', tmtdew=0.118095, humidity=99.519, cloud=0.0, wind=16.7098, temperature=13.4461, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:03:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:03:52.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:03:52.943 [DEBUG] [Thread-173527] [transport.py] [_log()] starting thread (client mode): 0xae51bdc0
2026-04-11T17:03:52.943 [DEBUG] [Thread-173527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:03:52.958 [DEBUG] [Thread-173527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:03:52.958 [INFO] [Thread-173527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] client lang: <none>
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] server lang: <none>
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] kex follows: False
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:03:52.966 [DEBUG] [Thread-173527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:03:52.967 [DEBUG] [Thread-173527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:03:52.967 [DEBUG] [Thread-173527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:03:52.967 [DEBUG] [Thread-173527] [transport.py] [_log()] Compression: none
2026-04-11T17:03:52.967 [DEBUG] [Thread-173527] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:03:53.023 [DEBUG] [Thread-173527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:03:53.023 [DEBUG] [Thread-173527] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:03:53.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:03:53.025 [DEBUG] [Thread-173527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:03:53.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:03:53.083 [DEBUG] [Thread-173527] [transport.py] [_log()] userauth is OK
2026-04-11T17:03:53.084 [DEBUG] [Thread-173527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:03:53.084 [DEBUG] [Thread-173527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:03:53.084 [DEBUG] [Thread-173527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:03:53.084 [DEBUG] [Thread-173527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:03:53.102 [INFO] [Thread-173527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:03:53.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:03:53.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:03:53.923 [DEBUG] [Thread-173527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:03:53.923 [DEBUG] [Thread-173527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:03:53.971 [DEBUG] [Thread-173527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:03:53.971 [DEBUG] [Thread-173527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:03:53.980 [DEBUG] [Thread-173527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:03:53.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:03:53.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:03: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') -> 00000000
2026-04-11T17:03:54.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:03:54.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:03:54.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:03:54.016 [DEBUG] [Thread-173527] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:04:07.596 [DEBUG] [Thread-173529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:17.434 [DEBUG] [Thread-173530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:22.651 [DEBUG] [Thread-173531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:24.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:04:24.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:04:24.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-04-11T17:04:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 3, 58), 0.118105, 99.519, 0.0, 18.5098, 13.4959, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:04:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:03:58
2026-04-11T17:04:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:04:25.830 [DEBUG] [Thread-173532] [transport.py] [_log()] starting thread (client mode): 0xae519420
2026-04-11T17:04:25.830 [DEBUG] [Thread-173532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:04:25.846 [DEBUG] [Thread-173532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:04:25.846 [INFO] [Thread-173532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:04:25.849 [DEBUG] [Thread-173532] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:04:25.849 [DEBUG] [Thread-173532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:04:25.849 [DEBUG] [Thread-173532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:04:25.849 [DEBUG] [Thread-173532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:04:25.849 [DEBUG] [Thread-173532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] client lang: <none>
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] server lang: <none>
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] kex follows: False
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] Compression: none
2026-04-11T17:04:25.850 [DEBUG] [Thread-173532] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:04:25.868 [DEBUG] [Thread-173532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:04:25.869 [DEBUG] [Thread-173532] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:04:25.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:04:25.871 [DEBUG] [Thread-173532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:04:25.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:04:25.873 [DEBUG] [Thread-173532] [transport.py] [_log()] userauth is OK
2026-04-11T17:04:25.873 [DEBUG] [Thread-173532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:04:25.874 [DEBUG] [Thread-173532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:04:25.874 [DEBUG] [Thread-173532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:04:25.874 [DEBUG] [Thread-173532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:04:25.899 [INFO] [Thread-173532] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:04:25.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:04:26.692 [DEBUG] [Thread-173532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:04:26.692 [DEBUG] [Thread-173532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:04:26.693 [DEBUG] [Thread-173532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:04:26.733 [DEBUG] [Thread-173532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:04:26.733 [DEBUG] [Thread-173532] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:04:26.736 [DEBUG] [Thread-173532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:04:26.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:04:26.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:04:26.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:04:26.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:04:26.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:04:26.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:04:26.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:04:26.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:04:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:04:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.627552 -999.00  +13.30  20.26     96  +12.80 1 3 1 3 1   887    0 0.21 -16.26 ----- 15.6 20.3 280.4 23.1 14.8 -1.3 14.7 -0.6 14.2 -1.3 14.6 -0.4
2026-04-11T17:04:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:04:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:04:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.627552
2026-04-11T17:04:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:04:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:04:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:04:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:04:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:04:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:03:58', tmtdew=0.118105, humidity=99.519, cloud=0.0, wind=18.5098, temperature=13.4959, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:03:40.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:04:26.765 [DEBUG] [Thread-173532] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:04:26.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:04:26.859 [DEBUG] [Thread-173535] [transport.py] [_log()] starting thread (client mode): 0xae5e5270
2026-04-11T17:04:26.859 [DEBUG] [Thread-173535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:04:26.875 [DEBUG] [Thread-173535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:04:26.875 [INFO] [Thread-173535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:04:26.883 [DEBUG] [Thread-173535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] client lang: <none>
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] server lang: <none>
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] kex follows: False
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] Compression: none
2026-04-11T17:04:26.884 [DEBUG] [Thread-173535] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:04:26.941 [DEBUG] [Thread-173535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:04:26.942 [DEBUG] [Thread-173535] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:04:26.942 [DEBUG] [Thread-173535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:04:26.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:04:26.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:04:26.998 [DEBUG] [Thread-173535] [transport.py] [_log()] userauth is OK
2026-04-11T17:04:26.998 [DEBUG] [Thread-173535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:04:26.998 [DEBUG] [Thread-173535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:04:26.998 [DEBUG] [Thread-173535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:04:26.998 [DEBUG] [Thread-173535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:04:27.018 [INFO] [Thread-173535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:04:27.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:04:27.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:04:27.840 [DEBUG] [Thread-173535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:04:27.840 [DEBUG] [Thread-173535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:04:27.888 [DEBUG] [Thread-173535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:04:27.888 [DEBUG] [Thread-173535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:04:27.897 [DEBUG] [Thread-173535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:04:27.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:04:27.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-04-11T17:04:27.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-04-11T17:04:27.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:04:27.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:04:27.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:04:27.933 [DEBUG] [Thread-173535] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:04:32.743 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:32.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:37.686 [DEBUG] [Thread-173537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:52.737 [DEBUG] [Thread-173538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:04:57.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:04:57.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:04:57.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-04-11T17:04:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 4, 34), 0.13106, 99.0712, 0.0, 19.2665, 14.0249, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:04:59.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:04:34
2026-04-11T17:04:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:04:59.776 [DEBUG] [Thread-173539] [transport.py] [_log()] starting thread (client mode): 0xae5624a0
2026-04-11T17:04:59.776 [DEBUG] [Thread-173539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:04:59.796 [DEBUG] [Thread-173539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:04:59.796 [INFO] [Thread-173539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] client lang: <none>
2026-04-11T17:04:59.799 [DEBUG] [Thread-173539] [transport.py] [_log()] server lang: <none>
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] kex follows: False
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] Compression: none
2026-04-11T17:04:59.800 [DEBUG] [Thread-173539] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:04:59.809 [DEBUG] [Thread-173539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:04:59.809 [DEBUG] [Thread-173539] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:04:59.809 [DEBUG] [Thread-173539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:04:59.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:04:59.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:04:59.811 [DEBUG] [Thread-173539] [transport.py] [_log()] userauth is OK
2026-04-11T17:04:59.811 [DEBUG] [Thread-173539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:04:59.811 [DEBUG] [Thread-173539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:04:59.811 [DEBUG] [Thread-173539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:04:59.811 [DEBUG] [Thread-173539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:04:59.828 [INFO] [Thread-173539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:04:59.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:05:00.639 [DEBUG] [Thread-173539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:05:00.639 [DEBUG] [Thread-173539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:05:00.640 [DEBUG] [Thread-173539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:05:00.680 [DEBUG] [Thread-173539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:05:00.680 [DEBUG] [Thread-173539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:05:00.684 [DEBUG] [Thread-173539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:05:00.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:05:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:05:00.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:05:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:05:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:05:00.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:05:00.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:05:00.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:05:00.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:05:00.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.627899 -999.00  +13.20  14.74     96  +12.70 1 3 1 3 1   887    0 0.18 -17.07 ----- 19.6 14.7 288.0 21.2 14.8 -1.3 14.6 -0.7 14.1 -1.1 14.6 -0.4
2026-04-11T17:05:00.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:05:00.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:05:00.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.627899
2026-04-11T17:05:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:05:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:05:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:05:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:05:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:05:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:04:34', tmtdew=0.13106, humidity=99.0712, cloud=0.0, wind=19.2665, temperature=14.0249, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:04:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:05:00.705 [DEBUG] [Thread-173539] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:05:00.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:05:00.798 [DEBUG] [Thread-173542] [transport.py] [_log()] starting thread (client mode): 0xae51a650
2026-04-11T17:05:00.798 [DEBUG] [Thread-173542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:05:00.813 [DEBUG] [Thread-173542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:05:00.813 [INFO] [Thread-173542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:05:00.820 [DEBUG] [Thread-173542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:05:00.820 [DEBUG] [Thread-173542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] client lang: <none>
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] server lang: <none>
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] kex follows: False
2026-04-11T17:05:00.821 [DEBUG] [Thread-173542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:05:00.822 [DEBUG] [Thread-173542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:05:00.822 [DEBUG] [Thread-173542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:05:00.822 [DEBUG] [Thread-173542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:05:00.822 [DEBUG] [Thread-173542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:05:00.822 [DEBUG] [Thread-173542] [transport.py] [_log()] Compression: none
2026-04-11T17:05:00.822 [DEBUG] [Thread-173542] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:05:00.881 [DEBUG] [Thread-173542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:05:00.882 [DEBUG] [Thread-173542] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:05:00.883 [DEBUG] [Thread-173542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:05:00.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:05:00.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:05:00.940 [DEBUG] [Thread-173542] [transport.py] [_log()] userauth is OK
2026-04-11T17:05:00.941 [DEBUG] [Thread-173542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:05:00.941 [DEBUG] [Thread-173542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:05:00.941 [DEBUG] [Thread-173542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:05:00.941 [DEBUG] [Thread-173542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:05:00.959 [INFO] [Thread-173542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:05:00.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:05:00.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:05:01.854 [DEBUG] [Thread-173542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:05:01.854 [DEBUG] [Thread-173542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:05:01.901 [DEBUG] [Thread-173542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:05:01.902 [DEBUG] [Thread-173542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:05:01.911 [DEBUG] [Thread-173542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:05:01.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:05:01.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-04-11T17:05:01.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-04-11T17:05:01.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:05:01.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:05:01.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:05:01.945 [DEBUG] [Thread-173542] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:05:07.776 [DEBUG] [Thread-173544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:05:17.477 [DEBUG] [Thread-173545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:05:22.821 [DEBUG] [Thread-173546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:05:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:05:31.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:05:31.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:05:32.888 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:05:32.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:05:33.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 5, 9), 0.128375, 99.4527, 0.0, 18.8449, 13.413, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:05:33.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:05:09
2026-04-11T17:05:33.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:05:33.841 [DEBUG] [Thread-173547] [transport.py] [_log()] starting thread (client mode): 0xae5622c0
2026-04-11T17:05:33.841 [DEBUG] [Thread-173547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:05:33.861 [DEBUG] [Thread-173547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:05:33.861 [INFO] [Thread-173547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] client lang: <none>
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] server lang: <none>
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] kex follows: False
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] Compression: none
2026-04-11T17:05:33.865 [DEBUG] [Thread-173547] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:05:33.881 [DEBUG] [Thread-173547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:05:33.881 [DEBUG] [Thread-173547] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:05:33.881 [DEBUG] [Thread-173547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:05:33.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:05:33.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:05:33.882 [DEBUG] [Thread-173547] [transport.py] [_log()] userauth is OK
2026-04-11T17:05:33.882 [DEBUG] [Thread-173547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:05:33.882 [DEBUG] [Thread-173547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:05:33.882 [DEBUG] [Thread-173547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:05:33.882 [DEBUG] [Thread-173547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:05:33.896 [INFO] [Thread-173547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:05:33.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:05:35.156 [DEBUG] [Thread-173547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:05:35.156 [DEBUG] [Thread-173547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:05:35.157 [DEBUG] [Thread-173547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:05:35.197 [DEBUG] [Thread-173547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:05:35.197 [DEBUG] [Thread-173547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:05:35.201 [DEBUG] [Thread-173547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:05:35.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:05:35.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:05:35.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:05:35.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:05:35.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:05:35.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:05:35.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:05:35.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:05:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:05:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.628246 -999.00  +13.10  17.23     96  +12.50 1 3 1 3 1   887    0 0.11 -18.63 ----- 18.8 17.2 270.8 24.8 14.7 -1.3 14.6 -0.7 14.1 -1.3 14.5 -0.8
2026-04-11T17:05:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:05:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:05:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.628246
2026-04-11T17:05:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:05:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:05:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:05:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:05:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:05:35.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:05:09', tmtdew=0.128375, humidity=99.4527, cloud=0.0, wind=18.8449, temperature=13.413, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:04:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:05:35.237 [DEBUG] [Thread-173547] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:05:35.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:05:35.330 [DEBUG] [Thread-173550] [transport.py] [_log()] starting thread (client mode): 0xae562aa0
2026-04-11T17:05:35.330 [DEBUG] [Thread-173550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:05:35.346 [DEBUG] [Thread-173550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:05:35.346 [INFO] [Thread-173550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] client lang: <none>
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] server lang: <none>
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] kex follows: False
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] Compression: none
2026-04-11T17:05:35.354 [DEBUG] [Thread-173550] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:05:35.411 [DEBUG] [Thread-173550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:05:35.411 [DEBUG] [Thread-173550] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:05:35.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:05:35.412 [DEBUG] [Thread-173550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:05:35.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:05:35.468 [DEBUG] [Thread-173550] [transport.py] [_log()] userauth is OK
2026-04-11T17:05:35.468 [DEBUG] [Thread-173550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:05:35.468 [DEBUG] [Thread-173550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:05:35.468 [DEBUG] [Thread-173550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:05:35.468 [DEBUG] [Thread-173550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:05:35.487 [INFO] [Thread-173550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:05: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-04-11T17:05:35.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:05:36.320 [DEBUG] [Thread-173550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:05:36.320 [DEBUG] [Thread-173550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:05:36.368 [DEBUG] [Thread-173550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:05:36.368 [DEBUG] [Thread-173550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:05:36.377 [DEBUG] [Thread-173550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:05:36.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:05:36.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:05:36.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:05:36.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:05:36.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:05:36.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:05:36.409 [DEBUG] [Thread-173550] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:05:37.854 [DEBUG] [Thread-173552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:05:52.914 [DEBUG] [Thread-173553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:06:06.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:06:06.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-04-11T17:06:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 5, 45), 0.15156, 98.9386, 0.0, 23.2884, 13.7266, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:06:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:05:45
2026-04-11T17:06:07.951 [DEBUG] [Thread-173554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:08.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:06:08.205 [DEBUG] [Thread-173555] [transport.py] [_log()] starting thread (client mode): 0xae5a5f90
2026-04-11T17:06:08.205 [DEBUG] [Thread-173555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:06:08.226 [DEBUG] [Thread-173555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:06:08.226 [INFO] [Thread-173555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:06:08.230 [DEBUG] [Thread-173555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:06:08.230 [DEBUG] [Thread-173555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:06:08.230 [DEBUG] [Thread-173555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:06:08.230 [DEBUG] [Thread-173555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:08.230 [DEBUG] [Thread-173555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:08.230 [DEBUG] [Thread-173555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] client lang: <none>
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] server lang: <none>
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] kex follows: False
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:06:08.231 [DEBUG] [Thread-173555] [transport.py] [_log()] Compression: none
2026-04-11T17:06:08.232 [DEBUG] [Thread-173555] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:06:08.250 [DEBUG] [Thread-173555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:06:08.250 [DEBUG] [Thread-173555] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:06:08.251 [DEBUG] [Thread-173555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:06:08.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:06:08.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:06:08.253 [DEBUG] [Thread-173555] [transport.py] [_log()] userauth is OK
2026-04-11T17:06:08.253 [DEBUG] [Thread-173555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:06:08.253 [DEBUG] [Thread-173555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:06:08.253 [DEBUG] [Thread-173555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:06:08.254 [DEBUG] [Thread-173555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:06:08.280 [INFO] [Thread-173555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:06:08.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:06:09.091 [DEBUG] [Thread-173555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:06:09.091 [DEBUG] [Thread-173555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:06:09.092 [DEBUG] [Thread-173555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:06:09.132 [DEBUG] [Thread-173555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:06:09.133 [DEBUG] [Thread-173555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:06:09.136 [DEBUG] [Thread-173555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:06:09.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:06:09.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:06:09.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:06:09.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:06:09.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:06:09.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:06:09.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:06:09.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:06:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:06:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.628593 -999.00  +13.00  18.49     96  +12.50 1 3 1 3 1   887    0 0.10 -18.91 ----- 18.8 18.5 278.2 24.2 14.6 -1.1 14.4 -0.8 13.9 -1.6 14.4 -0.6
2026-04-11T17:06:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:06:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:06:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.628593
2026-04-11T17:06:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:06:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:06:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:06:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:06:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:06:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:05:45', tmtdew=0.15156, humidity=98.9386, cloud=0.0, wind=23.2884, temperature=13.7266, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:05:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:06:09.157 [DEBUG] [Thread-173555] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:06:09.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:06:09.253 [DEBUG] [Thread-173558] [transport.py] [_log()] starting thread (client mode): 0xae537100
2026-04-11T17:06:09.253 [DEBUG] [Thread-173558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:06:09.269 [DEBUG] [Thread-173558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:06:09.269 [INFO] [Thread-173558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] client lang: <none>
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] server lang: <none>
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] kex follows: False
2026-04-11T17:06:09.277 [DEBUG] [Thread-173558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:06:09.278 [DEBUG] [Thread-173558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:06:09.278 [DEBUG] [Thread-173558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:06:09.278 [DEBUG] [Thread-173558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:06:09.278 [DEBUG] [Thread-173558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:06:09.278 [DEBUG] [Thread-173558] [transport.py] [_log()] Compression: none
2026-04-11T17:06:09.278 [DEBUG] [Thread-173558] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:06:09.337 [DEBUG] [Thread-173558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:06:09.338 [DEBUG] [Thread-173558] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:06:09.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:06:09.339 [DEBUG] [Thread-173558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:06:09.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:06:09.393 [DEBUG] [Thread-173558] [transport.py] [_log()] userauth is OK
2026-04-11T17:06:09.393 [DEBUG] [Thread-173558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:06:09.393 [DEBUG] [Thread-173558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:06:09.393 [DEBUG] [Thread-173558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:06:09.393 [DEBUG] [Thread-173558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:06:09.412 [INFO] [Thread-173558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:06:09.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:06:09.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:06:10.223 [DEBUG] [Thread-173558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:06:10.223 [DEBUG] [Thread-173558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:06:10.271 [DEBUG] [Thread-173558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:06:10.271 [DEBUG] [Thread-173558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:06:10.281 [DEBUG] [Thread-173558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:06:10.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:06:10.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-04-11T17:06:10.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-04-11T17:06:10.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:06:10.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:06:10.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:06:10.318 [DEBUG] [Thread-173558] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:06:17.523 [DEBUG] [Thread-173560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:22.988 [DEBUG] [Thread-173561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:33.029 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:33.030 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:38.038 [DEBUG] [Thread-173562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:06:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:06:40.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:06:40.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-04-11T17:06:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 6, 20), 0.07577, 99.4694, 0.0, 20.2208, 13.2133, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:06:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:06:20
2026-04-11T17:06:41.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:06:42.129 [DEBUG] [Thread-173563] [transport.py] [_log()] starting thread (client mode): 0xae5172e0
2026-04-11T17:06:42.129 [DEBUG] [Thread-173563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:06:42.149 [DEBUG] [Thread-173563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:06:42.150 [INFO] [Thread-173563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:06:42.153 [DEBUG] [Thread-173563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] client lang: <none>
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] server lang: <none>
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] kex follows: False
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] Compression: none
2026-04-11T17:06:42.154 [DEBUG] [Thread-173563] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:06:42.165 [DEBUG] [Thread-173563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:06:42.165 [DEBUG] [Thread-173563] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:06:42.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:06:42.167 [DEBUG] [Thread-173563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:06:42.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:06:42.169 [DEBUG] [Thread-173563] [transport.py] [_log()] userauth is OK
2026-04-11T17:06:42.169 [DEBUG] [Thread-173563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:06:42.170 [DEBUG] [Thread-173563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:06:42.170 [DEBUG] [Thread-173563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:06:42.170 [DEBUG] [Thread-173563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:06:42.191 [INFO] [Thread-173563] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:06:42.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:06:42.949 [DEBUG] [Thread-173563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:06:42.949 [DEBUG] [Thread-173563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:06:42.949 [DEBUG] [Thread-173563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:06:42.990 [DEBUG] [Thread-173563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:06:42.990 [DEBUG] [Thread-173563] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:06:42.994 [DEBUG] [Thread-173563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:06:43.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:06:43.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:06:43.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:06:43.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:06:43.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:06:43.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:06:43.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:06:43.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:06:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:06:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.628940 -999.00  +13.10  17.70     96  +12.60 1 3 1 3 1   887    0 0.12 -18.08 ----- 18.2 17.7 279.2 19.9 14.6 -0.9 14.5 -0.6 13.9 -0.8 14.4 -0.3
2026-04-11T17:06:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:06:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:06:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.628940
2026-04-11T17:06:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:06:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:06:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:06:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:06:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:06:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:06:20', tmtdew=0.07577, humidity=99.4694, cloud=0.0, wind=20.2208, temperature=13.2133, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:05:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:06:43.019 [DEBUG] [Thread-173563] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:06:43.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:06:43.113 [DEBUG] [Thread-173566] [transport.py] [_log()] starting thread (client mode): 0xae50add0
2026-04-11T17:06:43.113 [DEBUG] [Thread-173566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:06:43.127 [DEBUG] [Thread-173566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:06:43.127 [INFO] [Thread-173566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:06:43.135 [DEBUG] [Thread-173566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:06:43.135 [DEBUG] [Thread-173566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:06:43.135 [DEBUG] [Thread-173566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:06:43.135 [DEBUG] [Thread-173566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] client lang: <none>
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] server lang: <none>
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] kex follows: False
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:06:43.136 [DEBUG] [Thread-173566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:06:43.137 [DEBUG] [Thread-173566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:06:43.137 [DEBUG] [Thread-173566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:06:43.137 [DEBUG] [Thread-173566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:06:43.137 [DEBUG] [Thread-173566] [transport.py] [_log()] Compression: none
2026-04-11T17:06:43.137 [DEBUG] [Thread-173566] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:06:43.192 [DEBUG] [Thread-173566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:06:43.193 [DEBUG] [Thread-173566] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:06:43.193 [DEBUG] [Thread-173566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:06:43.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:06:43.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:06:43.248 [DEBUG] [Thread-173566] [transport.py] [_log()] userauth is OK
2026-04-11T17:06:43.248 [DEBUG] [Thread-173566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:06:43.248 [DEBUG] [Thread-173566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:06:43.249 [DEBUG] [Thread-173566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:06:43.249 [DEBUG] [Thread-173566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:06:43.267 [INFO] [Thread-173566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:06:43.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:06:43.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:06:44.088 [DEBUG] [Thread-173566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:06:44.089 [DEBUG] [Thread-173566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:06:44.137 [DEBUG] [Thread-173566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:06:44.137 [DEBUG] [Thread-173566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:06:44.146 [DEBUG] [Thread-173566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:06:44.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:06:44.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-04-11T17:06:44.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:06:44.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:06:44.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:06:44.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:06:44.184 [DEBUG] [Thread-173566] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:06:53.084 [DEBUG] [Thread-173568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:08.137 [DEBUG] [Thread-173569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:07:14.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:07:14.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:07:15.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 6, 55), 0.07061, 99.5025, 0.0, 17.7858, 13.2136, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:07:15.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:06:55
2026-04-11T17:07:15.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:07:15.995 [DEBUG] [Thread-173570] [transport.py] [_log()] starting thread (client mode): 0xae5a4a30
2026-04-11T17:07:15.995 [DEBUG] [Thread-173570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:07:16.008 [DEBUG] [Thread-173570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:07:16.008 [INFO] [Thread-173570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] client lang: <none>
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] server lang: <none>
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] kex follows: False
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] Compression: none
2026-04-11T17:07:16.010 [DEBUG] [Thread-173570] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:07:16.021 [DEBUG] [Thread-173570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:07:16.021 [DEBUG] [Thread-173570] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:07:16.022 [DEBUG] [Thread-173570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:07:16.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:07:16.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:07:16.023 [DEBUG] [Thread-173570] [transport.py] [_log()] userauth is OK
2026-04-11T17:07:16.023 [DEBUG] [Thread-173570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:07:16.023 [DEBUG] [Thread-173570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:07:16.023 [DEBUG] [Thread-173570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:07:16.023 [DEBUG] [Thread-173570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:07:16.039 [INFO] [Thread-173570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:07:16.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:07:16.668 [DEBUG] [Thread-173570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:07:16.669 [DEBUG] [Thread-173570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:07:16.669 [DEBUG] [Thread-173570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:07:16.711 [DEBUG] [Thread-173570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:07:16.711 [DEBUG] [Thread-173570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:07:16.714 [DEBUG] [Thread-173570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:07:16.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:07:16.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:07:16.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:07:16.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:07:16.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:07:16.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:07:16.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:07:16.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:07:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:07:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.629982 -999.00  +13.20  11.51     96  +12.70 1 3 1 3 1   887    0 0.09 -18.52 ----- 15.1 11.5 292.2 16.1 14.6 -1.1 14.4 -0.4 13.9 -1.1 14.4 -0.2
2026-04-11T17:07:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:07:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:07:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.629982
2026-04-11T17:07:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:07:16.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:07:16.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:07:16.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:07:16.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:07:16.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:06:55', tmtdew=0.07061, humidity=99.5025, cloud=0.0, wind=17.7858, temperature=13.2136, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:07:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:07:16.743 [DEBUG] [Thread-173570] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:07:16.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:07:16.839 [DEBUG] [Thread-173573] [transport.py] [_log()] starting thread (client mode): 0xae518370
2026-04-11T17:07:16.839 [DEBUG] [Thread-173573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:07:16.854 [DEBUG] [Thread-173573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:07:16.854 [INFO] [Thread-173573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] client lang: <none>
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] server lang: <none>
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] kex follows: False
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] Compression: none
2026-04-11T17:07:16.862 [DEBUG] [Thread-173573] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:07:16.919 [DEBUG] [Thread-173573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:07:16.919 [DEBUG] [Thread-173573] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:07:16.920 [DEBUG] [Thread-173573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:07:16.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:07:16.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:07:16.975 [DEBUG] [Thread-173573] [transport.py] [_log()] userauth is OK
2026-04-11T17:07:16.976 [DEBUG] [Thread-173573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:07:16.976 [DEBUG] [Thread-173573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:07:16.976 [DEBUG] [Thread-173573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:07:16.976 [DEBUG] [Thread-173573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:07:16.994 [INFO] [Thread-173573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:07:16.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:07:16.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:07:17.558 [DEBUG] [Thread-173575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:17.845 [DEBUG] [Thread-173573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:07:17.845 [DEBUG] [Thread-173573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:07:17.893 [DEBUG] [Thread-173573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:07:17.893 [DEBUG] [Thread-173573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:07:17.903 [DEBUG] [Thread-173573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:07:17.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:07: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')
2026-04-11T17:07:17.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:07:17.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:07:17.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:07:17.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:07:17.934 [DEBUG] [Thread-173573] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:07:23.171 [DEBUG] [Thread-173576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:33.170 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:33.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:38.219 [DEBUG] [Thread-173577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:07:47.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:07:47.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:07:47.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-04-11T17:07:49.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 7, 31), 0.0706, 99.5025, 0.0, 16.2864, 13.197, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:07:49.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:07:31
2026-04-11T17:07:49.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:07:49.838 [DEBUG] [Thread-173578] [transport.py] [_log()] starting thread (client mode): 0xae5a58a0
2026-04-11T17:07:49.838 [DEBUG] [Thread-173578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:07:49.858 [DEBUG] [Thread-173578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:07:49.858 [INFO] [Thread-173578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:49.860 [DEBUG] [Thread-173578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] client lang: <none>
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] server lang: <none>
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] kex follows: False
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] Compression: none
2026-04-11T17:07:49.861 [DEBUG] [Thread-173578] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:07:49.878 [DEBUG] [Thread-173578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:07:49.878 [DEBUG] [Thread-173578] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:07:49.879 [DEBUG] [Thread-173578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:07:49.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:07:49.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:07:49.881 [DEBUG] [Thread-173578] [transport.py] [_log()] userauth is OK
2026-04-11T17:07:49.881 [DEBUG] [Thread-173578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:07:49.881 [DEBUG] [Thread-173578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:07:49.882 [DEBUG] [Thread-173578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:07:49.882 [DEBUG] [Thread-173578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:07:49.905 [INFO] [Thread-173578] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:07:49.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:07:50.483 [DEBUG] [Thread-173578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:07:50.483 [DEBUG] [Thread-173578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:07:50.484 [DEBUG] [Thread-173578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:07:50.524 [DEBUG] [Thread-173578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:07:50.524 [DEBUG] [Thread-173578] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:07:50.528 [DEBUG] [Thread-173578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:07:50.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:07:50.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:07:50.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:07:50.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:07:50.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:07:50.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:07:50.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:07:50.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:07:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:07:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.630329 -999.00  +13.10  14.39     96  +12.60 1 3 1 3 1   887    0 0.02 -20.80 ----- 13.4 14.4 273.2 21.7 14.5 -1.0 14.3 -0.6 13.9 -0.8 14.3 -0.2
2026-04-11T17:07:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:07:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:07:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.630329
2026-04-11T17:07:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:07:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:07:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:07:50.553 [DEBUG] [Thread-173578] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:07:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:07:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:07:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:07:31', tmtdew=0.0706, humidity=99.5025, cloud=0.0, wind=16.2864, temperature=13.197, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:07:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:07:50.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:07:50.648 [DEBUG] [Thread-173581] [transport.py] [_log()] starting thread (client mode): 0xa7950a60
2026-04-11T17:07:50.648 [DEBUG] [Thread-173581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:07:50.662 [DEBUG] [Thread-173581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:07:50.663 [INFO] [Thread-173581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:07:50.670 [DEBUG] [Thread-173581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] client lang: <none>
2026-04-11T17:07:50.671 [DEBUG] [Thread-173581] [transport.py] [_log()] server lang: <none>
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] kex follows: False
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] Compression: none
2026-04-11T17:07:50.672 [DEBUG] [Thread-173581] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:07:50.731 [DEBUG] [Thread-173581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:07:50.732 [DEBUG] [Thread-173581] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:07:50.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:07:50.733 [DEBUG] [Thread-173581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:07:50.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:07:50.795 [DEBUG] [Thread-173581] [transport.py] [_log()] userauth is OK
2026-04-11T17:07:50.795 [DEBUG] [Thread-173581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:07:50.795 [DEBUG] [Thread-173581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:07:50.795 [DEBUG] [Thread-173581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:07:50.795 [DEBUG] [Thread-173581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:07:50.814 [INFO] [Thread-173581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:07:50.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:07:50.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:07:51.678 [DEBUG] [Thread-173581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:07:51.679 [DEBUG] [Thread-173581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:07:51.727 [DEBUG] [Thread-173581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:07:51.727 [DEBUG] [Thread-173581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:07:51.736 [DEBUG] [Thread-173581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:07:51.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:07: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-04-11T17:07: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-04-11T17:07:51.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:07:51.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:07:51.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:07:51.775 [DEBUG] [Thread-173581] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:07:53.253 [DEBUG] [Thread-173583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:08.315 [DEBUG] [Thread-173584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:17.596 [DEBUG] [Thread-173585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:21.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:08:21.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:08:21.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-04-11T17:08:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 8, 6), 0.07573, 99.4694, 0.0, 16.745, 13.1639, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:08:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:08:06
2026-04-11T17:08:23.356 [DEBUG] [Thread-173586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:08:23.621 [DEBUG] [Thread-173587] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-11T17:08:23.621 [DEBUG] [Thread-173587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:08:23.636 [DEBUG] [Thread-173587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:08:23.636 [INFO] [Thread-173587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:08:23.639 [DEBUG] [Thread-173587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:08:23.639 [DEBUG] [Thread-173587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:08:23.639 [DEBUG] [Thread-173587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:08:23.639 [DEBUG] [Thread-173587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:23.639 [DEBUG] [Thread-173587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:23.639 [DEBUG] [Thread-173587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] client lang: <none>
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] server lang: <none>
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] kex follows: False
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] Compression: none
2026-04-11T17:08:23.640 [DEBUG] [Thread-173587] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:08:23.648 [DEBUG] [Thread-173587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:08:23.648 [DEBUG] [Thread-173587] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:08:23.649 [DEBUG] [Thread-173587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:08:23.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:08:23.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:08:23.651 [DEBUG] [Thread-173587] [transport.py] [_log()] userauth is OK
2026-04-11T17:08:23.651 [DEBUG] [Thread-173587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:08:23.651 [DEBUG] [Thread-173587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:08:23.651 [DEBUG] [Thread-173587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:08:23.651 [DEBUG] [Thread-173587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:08:23.671 [INFO] [Thread-173587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:08:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:08:24.264 [DEBUG] [Thread-173587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:08:24.264 [DEBUG] [Thread-173587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:08:24.265 [DEBUG] [Thread-173587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:08:24.305 [DEBUG] [Thread-173587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:08:24.305 [DEBUG] [Thread-173587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:08:24.310 [DEBUG] [Thread-173587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:08:24.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:08:24.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:08:24.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:08:24.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:08:24.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:08:24.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:08:24.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:08:24.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:08:24.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:08:24.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.630677 -999.00  +13.20  12.86     96  +12.70 1 3 1 3 1   887    0 0.07 -18.97 ----- 14.4 12.9 302.6 17.1 14.5 -0.8 14.3 -0.5 13.9 -1.0 14.4 -0.2
2026-04-11T17:08:24.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:08:24.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:08:24.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.630677
2026-04-11T17:08:24.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:08:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:08:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:08:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:08:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:08:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:08:06', tmtdew=0.07573, humidity=99.4694, cloud=0.0, wind=16.745, temperature=13.1639, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:08:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:08:24.335 [DEBUG] [Thread-173587] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:08:24.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:08:24.432 [DEBUG] [Thread-173590] [transport.py] [_log()] starting thread (client mode): 0xae5a7ac0
2026-04-11T17:08:24.433 [DEBUG] [Thread-173590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:08:24.447 [DEBUG] [Thread-173590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:08:24.448 [INFO] [Thread-173590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:08:24.455 [DEBUG] [Thread-173590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] client lang: <none>
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] server lang: <none>
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] kex follows: False
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] Compression: none
2026-04-11T17:08:24.456 [DEBUG] [Thread-173590] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:08:24.516 [DEBUG] [Thread-173590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:08:24.516 [DEBUG] [Thread-173590] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:08:24.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:08:24.517 [DEBUG] [Thread-173590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:08:24.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:08:24.573 [DEBUG] [Thread-173590] [transport.py] [_log()] userauth is OK
2026-04-11T17:08:24.573 [DEBUG] [Thread-173590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:08:24.573 [DEBUG] [Thread-173590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:08:24.573 [DEBUG] [Thread-173590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:08:24.573 [DEBUG] [Thread-173590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:08:24.593 [INFO] [Thread-173590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:08:24.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:08:24.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:08:25.499 [DEBUG] [Thread-173590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:08:25.500 [DEBUG] [Thread-173590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:08:25.547 [DEBUG] [Thread-173590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:08:25.547 [DEBUG] [Thread-173590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:08:25.557 [DEBUG] [Thread-173590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:08:25.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:08:25.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-04-11T17:08: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-04-11T17:08:25.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:08:25.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:08:25.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:08:25.593 [DEBUG] [Thread-173590] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:08:33.311 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:33.313 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:38.394 [DEBUG] [Thread-173592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:53.436 [DEBUG] [Thread-173593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:08:55.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:08:55.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:08:55.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-04-11T17:08:56.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 8, 42), 0.14632, 98.972, 0.0, 19.1606, 13.5277, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:08:56.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:08:42
2026-04-11T17:08:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:08:57.483 [DEBUG] [Thread-173594] [transport.py] [_log()] starting thread (client mode): 0xae514af0
2026-04-11T17:08:57.483 [DEBUG] [Thread-173594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:08:57.503 [DEBUG] [Thread-173594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:08:57.503 [INFO] [Thread-173594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:08:57.504 [DEBUG] [Thread-173594] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] client lang: <none>
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] server lang: <none>
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] kex follows: False
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:08:57.505 [DEBUG] [Thread-173594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:08:57.506 [DEBUG] [Thread-173594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:08:57.506 [DEBUG] [Thread-173594] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:08:57.506 [DEBUG] [Thread-173594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:08:57.506 [DEBUG] [Thread-173594] [transport.py] [_log()] Compression: none
2026-04-11T17:08:57.506 [DEBUG] [Thread-173594] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:08:57.517 [DEBUG] [Thread-173594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:08:57.518 [DEBUG] [Thread-173594] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:08:57.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:08:57.520 [DEBUG] [Thread-173594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:08:57.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:08:57.521 [DEBUG] [Thread-173594] [transport.py] [_log()] userauth is OK
2026-04-11T17:08:57.522 [DEBUG] [Thread-173594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:08:57.522 [DEBUG] [Thread-173594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:08:57.522 [DEBUG] [Thread-173594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:08:57.522 [DEBUG] [Thread-173594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:08:57.547 [INFO] [Thread-173594] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:08:57.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:08:58.159 [DEBUG] [Thread-173594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:08:58.159 [DEBUG] [Thread-173594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:08:58.159 [DEBUG] [Thread-173594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:08:58.199 [DEBUG] [Thread-173594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:08:58.200 [DEBUG] [Thread-173594] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:08:58.205 [DEBUG] [Thread-173594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:08:58.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:08:58.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:08:58.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:08:58.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:08:58.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:08:58.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:08:58.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:08:58.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:08:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:08:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.631024 -999.00  +13.10  14.84     96  +12.60 1 3 1 3 1   887    0 -0.01 -21.03 ----- 11.8 14.8 280.2 16.6 14.5 -0.6 14.3 -0.3 13.9 -0.4 14.4 -0.2
2026-04-11T17:08:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:08:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:08:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.631024
2026-04-11T17:08:58.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:08:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:08:58.241 [DEBUG] [Thread-173594] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:08:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:08:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:08:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:08:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:08:42', tmtdew=0.14632, humidity=98.972, cloud=0.0, wind=19.1606, temperature=13.5277, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:08:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:08:58.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:08:58.329 [DEBUG] [Thread-173597] [transport.py] [_log()] starting thread (client mode): 0xae519270
2026-04-11T17:08:58.329 [DEBUG] [Thread-173597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:08:58.344 [DEBUG] [Thread-173597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:08:58.344 [INFO] [Thread-173597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:08:58.351 [DEBUG] [Thread-173597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:08:58.352 [DEBUG] [Thread-173597] [transport.py] [_log()] client lang: <none>
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] server lang: <none>
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] kex follows: False
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] Compression: none
2026-04-11T17:08:58.353 [DEBUG] [Thread-173597] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:08:58.413 [DEBUG] [Thread-173597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:08:58.413 [DEBUG] [Thread-173597] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:08:58.414 [DEBUG] [Thread-173597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:08:58.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:08:58.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:08:58.475 [DEBUG] [Thread-173597] [transport.py] [_log()] userauth is OK
2026-04-11T17:08:58.475 [DEBUG] [Thread-173597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:08:58.475 [DEBUG] [Thread-173597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:08:58.475 [DEBUG] [Thread-173597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:08:58.476 [DEBUG] [Thread-173597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:08:58.494 [INFO] [Thread-173597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:08:58.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:08:58.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:08:59.309 [DEBUG] [Thread-173597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:08:59.309 [DEBUG] [Thread-173597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:08:59.357 [DEBUG] [Thread-173597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:08:59.357 [DEBUG] [Thread-173597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:08:59.367 [DEBUG] [Thread-173597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:08:59.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:08:59.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-04-11T17:08:59.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-04-11T17:08:59.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:08:59.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:08:59.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:08:59.403 [DEBUG] [Thread-173597] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:09:08.472 [DEBUG] [Thread-173599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:09:17.642 [DEBUG] [Thread-173600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:09:23.527 [DEBUG] [Thread-173601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:09:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:09:29.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:09:29.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-04-11T17:09:30.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 9, 17), 0.07316, 99.486, 0.0, 16.4099, 13.2139, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:09:30.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:09:17
2026-04-11T17:09:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:09:31.261 [DEBUG] [Thread-173602] [transport.py] [_log()] starting thread (client mode): 0xae5618d0
2026-04-11T17:09:31.261 [DEBUG] [Thread-173602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:09:31.279 [DEBUG] [Thread-173602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:09:31.279 [INFO] [Thread-173602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] client lang: <none>
2026-04-11T17:09:31.282 [DEBUG] [Thread-173602] [transport.py] [_log()] server lang: <none>
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] kex follows: False
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] Compression: none
2026-04-11T17:09:31.283 [DEBUG] [Thread-173602] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:09:31.301 [DEBUG] [Thread-173602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:09:31.302 [DEBUG] [Thread-173602] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:09:31.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:09:31.303 [DEBUG] [Thread-173602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:09:31.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:09:31.305 [DEBUG] [Thread-173602] [transport.py] [_log()] userauth is OK
2026-04-11T17:09:31.305 [DEBUG] [Thread-173602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:09:31.305 [DEBUG] [Thread-173602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:09:31.306 [DEBUG] [Thread-173602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:09:31.306 [DEBUG] [Thread-173602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:09:31.329 [INFO] [Thread-173602] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:09:31.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:09:31.964 [DEBUG] [Thread-173602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:09:31.964 [DEBUG] [Thread-173602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:09:31.964 [DEBUG] [Thread-173602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:09:32.005 [DEBUG] [Thread-173602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:09:32.005 [DEBUG] [Thread-173602] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:09:32.008 [DEBUG] [Thread-173602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:09:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:09:32.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:09:32.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:09:32.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:09:32.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:09:32.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:09:32.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:09:32.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:09:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:09:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.631371 -999.00  +13.20   8.57     96  +12.70 1 3 1 3 1   887    0 0.05 -19.22 ----- 8.7 8.6 295.2 13.1 14.6 -0.9 14.3 -0.4 13.9 -0.3 14.4 -0.1
2026-04-11T17:09:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:09:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:09:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.631371
2026-04-11T17:09:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:09:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:09:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:09:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:09:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:09:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:09:17', tmtdew=0.07316, humidity=99.486, cloud=0.0, wind=16.4099, temperature=13.2139, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:09:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:09:32.035 [DEBUG] [Thread-173602] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:09:32.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:09:32.133 [DEBUG] [Thread-173605] [transport.py] [_log()] starting thread (client mode): 0xae561210
2026-04-11T17:09:32.133 [DEBUG] [Thread-173605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:09:32.150 [DEBUG] [Thread-173605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:09:32.150 [INFO] [Thread-173605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:09:32.158 [DEBUG] [Thread-173605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] client lang: <none>
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] server lang: <none>
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] kex follows: False
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:09:32.159 [DEBUG] [Thread-173605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:09:32.160 [DEBUG] [Thread-173605] [transport.py] [_log()] Compression: none
2026-04-11T17:09:32.160 [DEBUG] [Thread-173605] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:09:32.214 [DEBUG] [Thread-173605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:09:32.215 [DEBUG] [Thread-173605] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:09:32.215 [DEBUG] [Thread-173605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:09:32.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:09:32.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:09:32.274 [DEBUG] [Thread-173605] [transport.py] [_log()] userauth is OK
2026-04-11T17:09:32.275 [DEBUG] [Thread-173605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:09:32.275 [DEBUG] [Thread-173605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:09:32.275 [DEBUG] [Thread-173605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:09:32.275 [DEBUG] [Thread-173605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:09:32.294 [INFO] [Thread-173605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:09:32.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:09:32.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:09:33.113 [DEBUG] [Thread-173605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:09:33.113 [DEBUG] [Thread-173605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:09:33.161 [DEBUG] [Thread-173605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:09:33.162 [DEBUG] [Thread-173605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:09:33.170 [DEBUG] [Thread-173605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:09:33.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:09:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:09:33.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-04-11T17:09:33.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:09:33.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:09:33.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:09:33.205 [DEBUG] [Thread-173605] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:09:33.452 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:09:33.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:09:38.561 [DEBUG] [Thread-173607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:09:53.610 [DEBUG] [Thread-173608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:10:03.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:10:03.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-04-11T17:10:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 9, 53), 0.14631, 98.972, 0.0, 20.4307, 13.5278, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:10:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:09:53
2026-04-11T17:10:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:10:05.072 [DEBUG] [Thread-173609] [transport.py] [_log()] starting thread (client mode): 0xae561c90
2026-04-11T17:10:05.072 [DEBUG] [Thread-173609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:10:05.093 [DEBUG] [Thread-173609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:10:05.093 [INFO] [Thread-173609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] client lang: <none>
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] server lang: <none>
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] kex follows: False
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] Compression: none
2026-04-11T17:10:05.094 [DEBUG] [Thread-173609] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:10:05.103 [DEBUG] [Thread-173609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:10:05.104 [DEBUG] [Thread-173609] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:10:05.104 [DEBUG] [Thread-173609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:10:05.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:10:05.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:10:05.106 [DEBUG] [Thread-173609] [transport.py] [_log()] userauth is OK
2026-04-11T17:10:05.106 [DEBUG] [Thread-173609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:10:05.106 [DEBUG] [Thread-173609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:10:05.106 [DEBUG] [Thread-173609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:10:05.106 [DEBUG] [Thread-173609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:10:05.142 [INFO] [Thread-173609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:10:05.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:10:05.838 [DEBUG] [Thread-173609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:10:05.838 [DEBUG] [Thread-173609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:10:05.839 [DEBUG] [Thread-173609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:10:05.879 [DEBUG] [Thread-173609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:10:05.879 [DEBUG] [Thread-173609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:10:05.882 [DEBUG] [Thread-173609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:10:05.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:10:05.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:10:05.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:10:05.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:10:05.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:10:05.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:10:05.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:10:05.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:10:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:10:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.631718 -999.00  +13.20  12.42     96  +12.70 1 3 1 3 1   887    0 0.08 -18.13 ----- 14.3 12.4 289.5 16.0 14.6 -0.5 14.4 -0.4 14.0 -0.2 14.4 -0.3
2026-04-11T17:10:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:10:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:10:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.631718
2026-04-11T17:10:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:10:05.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:10:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:10:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:10:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:10:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:09:53', tmtdew=0.14631, humidity=98.972, cloud=0.0, wind=20.4307, temperature=13.5278, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:09:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:10:05.910 [DEBUG] [Thread-173609] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:10:05.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:10:06.003 [DEBUG] [Thread-173612] [transport.py] [_log()] starting thread (client mode): 0xa7950c10
2026-04-11T17:10:06.003 [DEBUG] [Thread-173612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:10:06.018 [DEBUG] [Thread-173612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:10:06.018 [INFO] [Thread-173612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:10:06.025 [DEBUG] [Thread-173612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:10:06.025 [DEBUG] [Thread-173612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:10:06.025 [DEBUG] [Thread-173612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] client lang: <none>
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] server lang: <none>
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] kex follows: False
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] Compression: none
2026-04-11T17:10:06.026 [DEBUG] [Thread-173612] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:10:06.082 [DEBUG] [Thread-173612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:10:06.082 [DEBUG] [Thread-173612] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:10:06.083 [DEBUG] [Thread-173612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:10:06.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:10:06.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:10:06.138 [DEBUG] [Thread-173612] [transport.py] [_log()] userauth is OK
2026-04-11T17:10:06.138 [DEBUG] [Thread-173612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:10:06.138 [DEBUG] [Thread-173612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:10:06.138 [DEBUG] [Thread-173612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:10:06.138 [DEBUG] [Thread-173612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:10:06.157 [INFO] [Thread-173612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:10:06.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:10:06.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:10:06.972 [DEBUG] [Thread-173612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:10:06.972 [DEBUG] [Thread-173612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:10:07.020 [DEBUG] [Thread-173612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:10:07.021 [DEBUG] [Thread-173612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:10:07.029 [DEBUG] [Thread-173612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:10:07.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:10:07.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-04-11T17:10:07.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-04-11T17:10:07.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:10:07.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:10:07.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:10:07.066 [DEBUG] [Thread-173612] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:10:08.645 [DEBUG] [Thread-173614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:17.675 [DEBUG] [Thread-173615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:23.698 [DEBUG] [Thread-173616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:33.593 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:33.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:10:37.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:10:37.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-04-11T17:10:38.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 10, 28), 0.11802, 99.5192, 0.0, 17.2213, 13.2805, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:10:38.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:10:28
2026-04-11T17:10:38.738 [DEBUG] [Thread-173617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:10:38.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:10:38.933 [DEBUG] [Thread-173618] [transport.py] [_log()] starting thread (client mode): 0xae50a800
2026-04-11T17:10:38.933 [DEBUG] [Thread-173618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:10:38.953 [DEBUG] [Thread-173618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:10:38.953 [INFO] [Thread-173618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:38.957 [DEBUG] [Thread-173618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] client lang: <none>
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] server lang: <none>
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] kex follows: False
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] Compression: none
2026-04-11T17:10:38.958 [DEBUG] [Thread-173618] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:10:38.979 [DEBUG] [Thread-173618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:10:38.980 [DEBUG] [Thread-173618] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:10:38.980 [DEBUG] [Thread-173618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:10:38.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:10:38.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:10:38.983 [DEBUG] [Thread-173618] [transport.py] [_log()] userauth is OK
2026-04-11T17:10:38.983 [DEBUG] [Thread-173618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:10:38.983 [DEBUG] [Thread-173618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:10:38.983 [DEBUG] [Thread-173618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:10:38.983 [DEBUG] [Thread-173618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:10:39.019 [INFO] [Thread-173618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:10:39.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:10:39.667 [DEBUG] [Thread-173618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:10:39.667 [DEBUG] [Thread-173618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:10:39.668 [DEBUG] [Thread-173618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:10:39.708 [DEBUG] [Thread-173618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:10:39.708 [DEBUG] [Thread-173618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:10:39.712 [DEBUG] [Thread-173618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:10:39.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:10:39.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:10:39.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:10:39.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:10:39.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:10:39.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:10:39.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:10:39.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:10:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:10:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.632065 -999.00  +13.10  18.15     96  +12.60 1 3 1 3 1   887    0 0.09 -17.11 ----- 16.2 18.1 273.4 21.5 14.4 -1.3 14.3 -0.5 13.9 -1.8 14.3 -0.5
2026-04-11T17:10:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:10:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:10:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.632065
2026-04-11T17:10:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:10:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:10:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:10:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:10:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:10:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:10:28', tmtdew=0.11802, humidity=99.5192, cloud=0.0, wind=17.2213, temperature=13.2805, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:10:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:10:39.739 [DEBUG] [Thread-173618] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:10:39.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:10:39.836 [DEBUG] [Thread-173621] [transport.py] [_log()] starting thread (client mode): 0xae5a7580
2026-04-11T17:10:39.836 [DEBUG] [Thread-173621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:10:39.850 [DEBUG] [Thread-173621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:10:39.850 [INFO] [Thread-173621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:10:39.858 [DEBUG] [Thread-173621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] client lang: <none>
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] server lang: <none>
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] kex follows: False
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] Compression: none
2026-04-11T17:10:39.859 [DEBUG] [Thread-173621] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:10:39.917 [DEBUG] [Thread-173621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:10:39.918 [DEBUG] [Thread-173621] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:10:39.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:10:39.919 [DEBUG] [Thread-173621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:10:39.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:10:39.973 [DEBUG] [Thread-173621] [transport.py] [_log()] userauth is OK
2026-04-11T17:10:39.974 [DEBUG] [Thread-173621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:10:39.974 [DEBUG] [Thread-173621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:10:39.974 [DEBUG] [Thread-173621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:10:39.974 [DEBUG] [Thread-173621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:10:39.993 [INFO] [Thread-173621] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:10:39.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:10:39.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:10:40.813 [DEBUG] [Thread-173621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:10:40.813 [DEBUG] [Thread-173621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:10:40.861 [DEBUG] [Thread-173621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:10:40.861 [DEBUG] [Thread-173621] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:10:40.870 [DEBUG] [Thread-173621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:10:40.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:10:40.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-04-11T17:10:40.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:10:40.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:10:40.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:10:40.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:10:40.907 [DEBUG] [Thread-173621] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:10:53.776 [DEBUG] [Thread-173623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:08.831 [DEBUG] [Thread-173624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:10.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:11:10.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:11:10.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-04-11T17:11:12.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 11, 3), 0.11802, 99.5192, 0.0, 16.8862, 13.2805, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:11:12.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:11:03
2026-04-11T17:11:12.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:11:12.770 [DEBUG] [Thread-173625] [transport.py] [_log()] starting thread (client mode): 0xae5f3ee0
2026-04-11T17:11:12.770 [DEBUG] [Thread-173625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:11:12.785 [DEBUG] [Thread-173625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:11:12.785 [INFO] [Thread-173625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:12.788 [DEBUG] [Thread-173625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] client lang: <none>
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] server lang: <none>
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] kex follows: False
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] Compression: none
2026-04-11T17:11:12.789 [DEBUG] [Thread-173625] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:11:12.806 [DEBUG] [Thread-173625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:11:12.807 [DEBUG] [Thread-173625] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:11:12.807 [DEBUG] [Thread-173625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:11:12.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:11:12.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:11:12.809 [DEBUG] [Thread-173625] [transport.py] [_log()] userauth is OK
2026-04-11T17:11:12.809 [DEBUG] [Thread-173625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:11:12.809 [DEBUG] [Thread-173625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:11:12.809 [DEBUG] [Thread-173625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:11:12.809 [DEBUG] [Thread-173625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:11:12.827 [INFO] [Thread-173625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:11:12.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:11:13.433 [DEBUG] [Thread-173625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:11:13.433 [DEBUG] [Thread-173625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:11:13.433 [DEBUG] [Thread-173625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:11:13.474 [DEBUG] [Thread-173625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:11:13.474 [DEBUG] [Thread-173625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:11:13.478 [DEBUG] [Thread-173625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:11:13.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:11:13.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:11:13.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:11:13.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:11:13.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:11:13.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:11:13.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:11:13.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:11:13.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:11:13.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.632413 -999.00  +13.10  14.65     96  +12.60 1 3 1 3 1   887    0 0.12 -15.95 ----- 18.0 14.7 280.8 21.8 14.4 -1.3 14.3 -0.7 13.9 -0.6 14.3 -0.4
2026-04-11T17:11:13.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:11:13.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:11:13.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.632413
2026-04-11T17:11:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:11:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:11:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:11:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:11:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:11:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:11:03', tmtdew=0.11802, humidity=99.5192, cloud=0.0, wind=16.8862, temperature=13.2805, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:10:40.483', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:11:13.508 [DEBUG] [Thread-173625] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:11:13.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:11:13.606 [DEBUG] [Thread-173628] [transport.py] [_log()] starting thread (client mode): 0xae5f02e0
2026-04-11T17:11:13.606 [DEBUG] [Thread-173628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:11:13.626 [DEBUG] [Thread-173628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:11:13.626 [INFO] [Thread-173628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:11:13.634 [DEBUG] [Thread-173628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] client lang: <none>
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] server lang: <none>
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] kex follows: False
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:11:13.635 [DEBUG] [Thread-173628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:11:13.636 [DEBUG] [Thread-173628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:11:13.636 [DEBUG] [Thread-173628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:11:13.636 [DEBUG] [Thread-173628] [transport.py] [_log()] Compression: none
2026-04-11T17:11:13.636 [DEBUG] [Thread-173628] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:11:13.693 [DEBUG] [Thread-173628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:11:13.693 [DEBUG] [Thread-173628] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:11:13.694 [DEBUG] [Thread-173628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:11:13.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:11:13.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:11:13.749 [DEBUG] [Thread-173628] [transport.py] [_log()] userauth is OK
2026-04-11T17:11:13.749 [DEBUG] [Thread-173628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:11:13.749 [DEBUG] [Thread-173628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:11:13.749 [DEBUG] [Thread-173628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:11:13.749 [DEBUG] [Thread-173628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:11:13.768 [INFO] [Thread-173628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:11:13.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:11:13.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:11:14.604 [DEBUG] [Thread-173628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:11:14.604 [DEBUG] [Thread-173628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:11:14.652 [DEBUG] [Thread-173628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:11:14.652 [DEBUG] [Thread-173628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:11:14.662 [DEBUG] [Thread-173628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:11:14.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:11:14.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-04-11T17:11:14.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-04-11T17:11:14.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:11:14.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:11:14.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:11:14.698 [DEBUG] [Thread-173628] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:11:17.711 [DEBUG] [Thread-173630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:23.869 [DEBUG] [Thread-173631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:33.742 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:33.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:38.920 [DEBUG] [Thread-173632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:11:44.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:11:44.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:11:44.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-04-11T17:11:45.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 11, 3), 0.11802, 99.5192, 0.0, 16.8862, 13.2805, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:11:45.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:11:03
2026-04-11T17:11:46.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:11:46.531 [DEBUG] [Thread-173633] [transport.py] [_log()] starting thread (client mode): 0xae5f1450
2026-04-11T17:11:46.532 [DEBUG] [Thread-173633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:11:46.552 [DEBUG] [Thread-173633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:11:46.552 [INFO] [Thread-173633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:11:46.555 [DEBUG] [Thread-173633] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:11:46.555 [DEBUG] [Thread-173633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:11:46.555 [DEBUG] [Thread-173633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:11:46.555 [DEBUG] [Thread-173633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] client lang: <none>
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] server lang: <none>
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] kex follows: False
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:11:46.556 [DEBUG] [Thread-173633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:11:46.557 [DEBUG] [Thread-173633] [transport.py] [_log()] Compression: none
2026-04-11T17:11:46.557 [DEBUG] [Thread-173633] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:11:46.574 [DEBUG] [Thread-173633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:11:46.574 [DEBUG] [Thread-173633] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:11:46.575 [DEBUG] [Thread-173633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:11:46.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:11:46.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:11:46.577 [DEBUG] [Thread-173633] [transport.py] [_log()] userauth is OK
2026-04-11T17:11:46.577 [DEBUG] [Thread-173633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:11:46.577 [DEBUG] [Thread-173633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:11:46.577 [DEBUG] [Thread-173633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:11:46.577 [DEBUG] [Thread-173633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:11:46.595 [INFO] [Thread-173633] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:11:46.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:11:47.262 [DEBUG] [Thread-173633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:11:47.263 [DEBUG] [Thread-173633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:11:47.263 [DEBUG] [Thread-173633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:11:47.304 [DEBUG] [Thread-173633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:11:47.304 [DEBUG] [Thread-173633] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:11:47.307 [DEBUG] [Thread-173633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:11:47.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:11:47.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:11:47.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:11:47.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:11:47.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:11:47.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:11:47.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:11:47.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:11:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:11:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.632760 -999.00  +13.10  18.91     96  +12.50 1 3 1 3 1   887    0 0.13 -15.41 ----- 18.4 18.9 283.2 22.6 14.4 -1.1 14.3 -0.7 13.8 -1.4 14.3 -0.3
2026-04-11T17:11:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:11:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:11:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.632760
2026-04-11T17:11:47.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:11:47.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:11:47.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:11:47.334 [DEBUG] [Thread-173633] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:11:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:11:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:11:47.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:11:03', tmtdew=0.11802, humidity=99.5192, cloud=0.0, wind=16.8862, temperature=13.2805, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:11:10.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:11:47.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:11:47.427 [DEBUG] [Thread-173636] [transport.py] [_log()] starting thread (client mode): 0xae516710
2026-04-11T17:11:47.427 [DEBUG] [Thread-173636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:11:47.442 [DEBUG] [Thread-173636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:11:47.442 [INFO] [Thread-173636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:11:47.449 [DEBUG] [Thread-173636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] client lang: <none>
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] server lang: <none>
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] kex follows: False
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] Compression: none
2026-04-11T17:11:47.450 [DEBUG] [Thread-173636] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:11:47.508 [DEBUG] [Thread-173636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:11:47.509 [DEBUG] [Thread-173636] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:11:47.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:11:47.510 [DEBUG] [Thread-173636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:11:47.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:11:47.564 [DEBUG] [Thread-173636] [transport.py] [_log()] userauth is OK
2026-04-11T17:11:47.565 [DEBUG] [Thread-173636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:11:47.565 [DEBUG] [Thread-173636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:11:47.565 [DEBUG] [Thread-173636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:11:47.565 [DEBUG] [Thread-173636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:11:47.590 [INFO] [Thread-173636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:11:47.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:11:47.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:11:48.443 [DEBUG] [Thread-173636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:11:48.444 [DEBUG] [Thread-173636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:11:48.491 [DEBUG] [Thread-173636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:11:48.491 [DEBUG] [Thread-173636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:11:48.501 [DEBUG] [Thread-173636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:11:48.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:11: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')
2026-04-11T17:11:48.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-04-11T17:11:48.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:11:48.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:11:48.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:11:48.538 [DEBUG] [Thread-173636] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:11:53.958 [DEBUG] [Thread-173638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:09.009 [DEBUG] [Thread-173639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:17.768 [DEBUG] [Thread-173640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:18.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:12:18.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:12:18.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-04-11T17:12:19.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 11, 39), 0.13603, 99.0384, 0.0, 19.3018, 13.5609, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:12:19.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:11:39
2026-04-11T17:12:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:12:20.531 [DEBUG] [Thread-173641] [transport.py] [_log()] starting thread (client mode): 0xae518fd0
2026-04-11T17:12:20.531 [DEBUG] [Thread-173641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:12:20.543 [DEBUG] [Thread-173641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:12:20.543 [INFO] [Thread-173641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] client lang: <none>
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] server lang: <none>
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] kex follows: False
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] Compression: none
2026-04-11T17:12:20.544 [DEBUG] [Thread-173641] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:12:20.559 [DEBUG] [Thread-173641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:12:20.560 [DEBUG] [Thread-173641] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:12:20.560 [DEBUG] [Thread-173641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:12:20.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:12:20.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:12:20.561 [DEBUG] [Thread-173641] [transport.py] [_log()] userauth is OK
2026-04-11T17:12:20.561 [DEBUG] [Thread-173641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:12:20.561 [DEBUG] [Thread-173641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:12:20.561 [DEBUG] [Thread-173641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:12:20.562 [DEBUG] [Thread-173641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:12:20.577 [INFO] [Thread-173641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:12:20.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:12:21.215 [DEBUG] [Thread-173641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:12:21.215 [DEBUG] [Thread-173641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:12:21.215 [DEBUG] [Thread-173641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:12:21.256 [DEBUG] [Thread-173641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:12:21.257 [DEBUG] [Thread-173641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:12:21.260 [DEBUG] [Thread-173641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:12:21.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:12:21.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:12:21.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:12:21.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:12:21.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:12:21.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:12:21.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:12:21.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:12:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:12:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.633454 -999.00  +13.10  13.96     96  +12.60 1 3 1 3 1   887    0 0.16 -14.42 ----- 13.3 14.0 282.6 19.0 -999.0 -999.0 14.2 -0.4 13.8 -0.8 14.2 -0.2
2026-04-11T17:12:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:12:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:12:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.633454
2026-04-11T17:12:21.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:12:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:12:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:12:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:12:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:12:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:11:39', tmtdew=0.13603, humidity=99.0384, cloud=0.0, wind=19.3018, temperature=13.5609, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:12:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:12:21.289 [DEBUG] [Thread-173641] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:12:21.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:12:21.384 [DEBUG] [Thread-173644] [transport.py] [_log()] starting thread (client mode): 0xae5e7580
2026-04-11T17:12:21.384 [DEBUG] [Thread-173644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:12:21.404 [DEBUG] [Thread-173644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:12:21.404 [INFO] [Thread-173644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:12:21.412 [DEBUG] [Thread-173644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:12:21.412 [DEBUG] [Thread-173644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:12:21.412 [DEBUG] [Thread-173644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:12:21.412 [DEBUG] [Thread-173644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:21.412 [DEBUG] [Thread-173644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:21.412 [DEBUG] [Thread-173644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] client lang: <none>
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] server lang: <none>
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] kex follows: False
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:12:21.413 [DEBUG] [Thread-173644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:12:21.414 [DEBUG] [Thread-173644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:12:21.414 [DEBUG] [Thread-173644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:12:21.414 [DEBUG] [Thread-173644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:12:21.415 [DEBUG] [Thread-173644] [transport.py] [_log()] Compression: none
2026-04-11T17:12:21.415 [DEBUG] [Thread-173644] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:12:21.471 [DEBUG] [Thread-173644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:12:21.472 [DEBUG] [Thread-173644] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:12:21.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:12:21.473 [DEBUG] [Thread-173644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:12:21.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:12:21.530 [DEBUG] [Thread-173644] [transport.py] [_log()] userauth is OK
2026-04-11T17:12:21.531 [DEBUG] [Thread-173644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:12:21.531 [DEBUG] [Thread-173644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:12:21.531 [DEBUG] [Thread-173644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:12:21.531 [DEBUG] [Thread-173644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:12:21.549 [INFO] [Thread-173644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:12:21.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:12:21.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:12:22.375 [DEBUG] [Thread-173644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:12:22.376 [DEBUG] [Thread-173644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:12:22.423 [DEBUG] [Thread-173644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:12:22.423 [DEBUG] [Thread-173644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:12:22.433 [DEBUG] [Thread-173644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:12:22.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:12: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')
2026-04-11T17:12:22.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-04-11T17:12:22.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:12:22.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:12:22.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:12:22.469 [DEBUG] [Thread-173644] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:12:24.048 [DEBUG] [Thread-173646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:33.883 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:33.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:39.103 [DEBUG] [Thread-173647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:52.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:12:52.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:12:52.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-04-11T17:12:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 12, 14), 0.07065, 99.5026, 0.0, 20.0092, 13.3294, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:12:53.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:12:14
2026-04-11T17:12:54.142 [DEBUG] [Thread-173648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:12:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:12:54.428 [DEBUG] [Thread-173649] [transport.py] [_log()] starting thread (client mode): 0xae5e4730
2026-04-11T17:12:54.429 [DEBUG] [Thread-173649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:12:54.448 [DEBUG] [Thread-173649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:12:54.448 [INFO] [Thread-173649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] client lang: <none>
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] server lang: <none>
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] kex follows: False
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:12:54.452 [DEBUG] [Thread-173649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:12:54.453 [DEBUG] [Thread-173649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:12:54.453 [DEBUG] [Thread-173649] [transport.py] [_log()] Compression: none
2026-04-11T17:12:54.453 [DEBUG] [Thread-173649] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:12:54.469 [DEBUG] [Thread-173649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:12:54.469 [DEBUG] [Thread-173649] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:12:54.470 [DEBUG] [Thread-173649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:12:54.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:12:54.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:12:54.472 [DEBUG] [Thread-173649] [transport.py] [_log()] userauth is OK
2026-04-11T17:12:54.472 [DEBUG] [Thread-173649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:12:54.473 [DEBUG] [Thread-173649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:12:54.473 [DEBUG] [Thread-173649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:12:54.473 [DEBUG] [Thread-173649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:12:54.495 [INFO] [Thread-173649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:12:54.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:12:55.132 [DEBUG] [Thread-173649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:12:55.132 [DEBUG] [Thread-173649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:12:55.133 [DEBUG] [Thread-173649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:12:55.173 [DEBUG] [Thread-173649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:12:55.173 [DEBUG] [Thread-173649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:12:55.177 [DEBUG] [Thread-173649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:12:55.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:12:55.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:12:55.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:12:55.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:12:55.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:12:55.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:12:55.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:12:55.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:12:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:12:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.633801 -999.00  +13.00  16.92     96  +12.50 1 3 1 3 1   887    0 0.18 -13.67 ----- 16.6 16.9 275.0 22.8 14.3 -1.1 14.2 -0.5 13.8 -0.9 14.2 -0.5
2026-04-11T17:12:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:12:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:12:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.633801
2026-04-11T17:12:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:12:55.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:12:55.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:12:55.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:12:55.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:12:55.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:12:14', tmtdew=0.07065, humidity=99.5026, cloud=0.0, wind=20.0092, temperature=13.3294, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:12:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:12:55.206 [DEBUG] [Thread-173649] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:12:55.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:12:55.300 [DEBUG] [Thread-173652] [transport.py] [_log()] starting thread (client mode): 0xae5f3f40
2026-04-11T17:12:55.300 [DEBUG] [Thread-173652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:12:55.315 [DEBUG] [Thread-173652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:12:55.315 [INFO] [Thread-173652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:12:55.323 [DEBUG] [Thread-173652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] client lang: <none>
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] server lang: <none>
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] kex follows: False
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] Compression: none
2026-04-11T17:12:55.324 [DEBUG] [Thread-173652] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:12:55.383 [DEBUG] [Thread-173652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:12:55.384 [DEBUG] [Thread-173652] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:12:55.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:12:55.385 [DEBUG] [Thread-173652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:12:55.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:12:55.439 [DEBUG] [Thread-173652] [transport.py] [_log()] userauth is OK
2026-04-11T17:12:55.439 [DEBUG] [Thread-173652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:12:55.439 [DEBUG] [Thread-173652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:12:55.440 [DEBUG] [Thread-173652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:12:55.440 [DEBUG] [Thread-173652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:12:55.459 [INFO] [Thread-173652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:12:55.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:12:55.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:12:56.354 [DEBUG] [Thread-173652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:12:56.354 [DEBUG] [Thread-173652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:12:56.402 [DEBUG] [Thread-173652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:12:56.402 [DEBUG] [Thread-173652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:12:56.412 [DEBUG] [Thread-173652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:12:56.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:12:56.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-04-11T17:12:56.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-04-11T17:12:56.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:12:56.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:12:56.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:12:56.449 [DEBUG] [Thread-173652] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:13:09.178 [DEBUG] [Thread-173654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:13:17.832 [DEBUG] [Thread-173655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:13:24.232 [DEBUG] [Thread-173656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:13:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:13:26.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:13:26.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-04-11T17:13:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 12, 50), 0.1514, 98.9389, 0.0, 21.8066, 13.4283, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:13:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:12:50
2026-04-11T17:13:28.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:13:28.503 [DEBUG] [Thread-173657] [transport.py] [_log()] starting thread (client mode): 0xae5f2ce0
2026-04-11T17:13:28.503 [DEBUG] [Thread-173657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:13:28.522 [DEBUG] [Thread-173657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:13:28.523 [INFO] [Thread-173657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] client lang: <none>
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] server lang: <none>
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] kex follows: False
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:13:28.526 [DEBUG] [Thread-173657] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:13:28.527 [DEBUG] [Thread-173657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:13:28.527 [DEBUG] [Thread-173657] [transport.py] [_log()] Compression: none
2026-04-11T17:13:28.527 [DEBUG] [Thread-173657] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:13:28.543 [DEBUG] [Thread-173657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:13:28.543 [DEBUG] [Thread-173657] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:13:28.544 [DEBUG] [Thread-173657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:13:28.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:13:28.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:13:28.546 [DEBUG] [Thread-173657] [transport.py] [_log()] userauth is OK
2026-04-11T17:13:28.546 [DEBUG] [Thread-173657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:13:28.546 [DEBUG] [Thread-173657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:13:28.546 [DEBUG] [Thread-173657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:13:28.546 [DEBUG] [Thread-173657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:13:28.570 [INFO] [Thread-173657] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:13:28.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:13:29.201 [DEBUG] [Thread-173657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:13:29.201 [DEBUG] [Thread-173657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:13:29.201 [DEBUG] [Thread-173657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:13:29.242 [DEBUG] [Thread-173657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:13:29.242 [DEBUG] [Thread-173657] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:13:29.246 [DEBUG] [Thread-173657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:13:29.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:13:29.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:13:29.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:13:29.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:13:29.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:13:29.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:13:29.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:13:29.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:13:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:13:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.634149 -999.00  +13.00  17.94     96  +12.50 1 3 1 3 1   887    0 0.21 -12.54 ----- 16.0 17.9 282.0 21.3 14.3 -0.9 14.2 -0.5 -999.0 -999.0 14.2 -0.4
2026-04-11T17:13:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:13:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:13:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.634149
2026-04-11T17:13:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:13:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:13:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:13:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:13:29.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:13:29.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:12:50', tmtdew=0.1514, humidity=98.9389, cloud=0.0, wind=21.8066, temperature=13.4283, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:13:10.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:13:29.273 [DEBUG] [Thread-173657] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:13:29.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:13:29.367 [DEBUG] [Thread-173660] [transport.py] [_log()] starting thread (client mode): 0xa7950700
2026-04-11T17:13:29.367 [DEBUG] [Thread-173660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:13:29.382 [DEBUG] [Thread-173660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:13:29.382 [INFO] [Thread-173660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] client lang: <none>
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] server lang: <none>
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] kex follows: False
2026-04-11T17:13:29.390 [DEBUG] [Thread-173660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:13:29.391 [DEBUG] [Thread-173660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:13:29.391 [DEBUG] [Thread-173660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:13:29.391 [DEBUG] [Thread-173660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:13:29.391 [DEBUG] [Thread-173660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:13:29.391 [DEBUG] [Thread-173660] [transport.py] [_log()] Compression: none
2026-04-11T17:13:29.391 [DEBUG] [Thread-173660] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:13:29.454 [DEBUG] [Thread-173660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:13:29.454 [DEBUG] [Thread-173660] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:13:29.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:13:29.456 [DEBUG] [Thread-173660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:13:29.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:13:29.510 [DEBUG] [Thread-173660] [transport.py] [_log()] userauth is OK
2026-04-11T17:13:29.511 [DEBUG] [Thread-173660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:13:29.511 [DEBUG] [Thread-173660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:13:29.511 [DEBUG] [Thread-173660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:13:29.511 [DEBUG] [Thread-173660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:13:29.534 [INFO] [Thread-173660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:13:29.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:13:29.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:13:30.388 [DEBUG] [Thread-173660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:13:30.388 [DEBUG] [Thread-173660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:13:30.436 [DEBUG] [Thread-173660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:13:30.436 [DEBUG] [Thread-173660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:13:30.445 [DEBUG] [Thread-173660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:13:30.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:13:30.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-04-11T17:13:30.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:13:30.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:13:30.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:13:30.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:13:30.482 [DEBUG] [Thread-173660] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:13:34.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:13:34.027 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:13:39.270 [DEBUG] [Thread-173662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:13:54.322 [DEBUG] [Thread-173663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:00.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:14:00.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:14:00.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-04-11T17:14:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 13, 26), 0.06288, 99.5524, 0.0, 19.3565, 13.1305, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:14:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:13:26
2026-04-11T17:14:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:14:02.439 [DEBUG] [Thread-173664] [transport.py] [_log()] starting thread (client mode): 0xa7952560
2026-04-11T17:14:02.439 [DEBUG] [Thread-173664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:14:02.460 [DEBUG] [Thread-173664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:14:02.460 [INFO] [Thread-173664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] client lang: <none>
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] server lang: <none>
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] kex follows: False
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] Compression: none
2026-04-11T17:14:02.463 [DEBUG] [Thread-173664] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:14:02.480 [DEBUG] [Thread-173664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:14:02.480 [DEBUG] [Thread-173664] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:14:02.481 [DEBUG] [Thread-173664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:14:02.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:14:02.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:14:02.482 [DEBUG] [Thread-173664] [transport.py] [_log()] userauth is OK
2026-04-11T17:14:02.483 [DEBUG] [Thread-173664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:14:02.483 [DEBUG] [Thread-173664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:14:02.483 [DEBUG] [Thread-173664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:14:02.483 [DEBUG] [Thread-173664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:14:02.501 [INFO] [Thread-173664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:14:02.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:14:03.138 [DEBUG] [Thread-173664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:14:03.138 [DEBUG] [Thread-173664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:14:03.138 [DEBUG] [Thread-173664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:14:03.179 [DEBUG] [Thread-173664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:14:03.179 [DEBUG] [Thread-173664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:14:03.182 [DEBUG] [Thread-173664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:14:03.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:14:03.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:14:03.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:14:03.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:14:03.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:14:03.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:14:03.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:14:03.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:14:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:14:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.634496 -999.00  +13.00  18.30     96  +12.50 1 3 1 3 1   887    0 0.22 -12.34 ----- 15.3 18.3 281.8 21.0 14.3 -1.2 14.2 -0.4 13.8 -1.2 14.2 -0.5
2026-04-11T17:14:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:14:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:14:03.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.634496
2026-04-11T17:14:03.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:14:03.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:14:03.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:14:03.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:14:03.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:14:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:13:26', tmtdew=0.06288, humidity=99.5524, cloud=0.0, wind=19.3565, temperature=13.1305, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:13:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:14:03.210 [DEBUG] [Thread-173664] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:14:03.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:14:03.303 [DEBUG] [Thread-173667] [transport.py] [_log()] starting thread (client mode): 0xa79537f0
2026-04-11T17:14:03.303 [DEBUG] [Thread-173667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:14:03.318 [DEBUG] [Thread-173667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:14:03.318 [INFO] [Thread-173667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:14:03.326 [DEBUG] [Thread-173667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:14:03.326 [DEBUG] [Thread-173667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:14:03.326 [DEBUG] [Thread-173667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:14:03.326 [DEBUG] [Thread-173667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:03.326 [DEBUG] [Thread-173667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] client lang: <none>
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] server lang: <none>
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] kex follows: False
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:14:03.327 [DEBUG] [Thread-173667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:14:03.328 [DEBUG] [Thread-173667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:14:03.328 [DEBUG] [Thread-173667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:14:03.328 [DEBUG] [Thread-173667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:14:03.328 [DEBUG] [Thread-173667] [transport.py] [_log()] Compression: none
2026-04-11T17:14:03.328 [DEBUG] [Thread-173667] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:14:03.387 [DEBUG] [Thread-173667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:14:03.388 [DEBUG] [Thread-173667] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:14:03.389 [DEBUG] [Thread-173667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:14:03.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:14:03.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:14:03.450 [DEBUG] [Thread-173667] [transport.py] [_log()] userauth is OK
2026-04-11T17:14:03.450 [DEBUG] [Thread-173667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:14:03.451 [DEBUG] [Thread-173667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:14:03.451 [DEBUG] [Thread-173667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:14:03.451 [DEBUG] [Thread-173667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:14:03.470 [INFO] [Thread-173667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:14:03.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:14:03.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:14:04.371 [DEBUG] [Thread-173667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:14:04.371 [DEBUG] [Thread-173667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:14:04.419 [DEBUG] [Thread-173667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:14:04.419 [DEBUG] [Thread-173667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:14:04.432 [DEBUG] [Thread-173667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:14:04.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:14:04.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-04-11T17:14:04.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-04-11T17:14:04.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:14:04.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:14:04.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:14:04.471 [DEBUG] [Thread-173667] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:14:09.359 [DEBUG] [Thread-173669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:17.889 [DEBUG] [Thread-173670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:24.423 [DEBUG] [Thread-173671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:34.166 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:34.167 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:34.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:14:34.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:14:34.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-04-11T17:14:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 14, 1), 0.060315, 99.5689, 0.0, 17.8924, 13.1636, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:14:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:14:01
2026-04-11T17:14:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:14:36.424 [DEBUG] [Thread-173672] [transport.py] [_log()] starting thread (client mode): 0xae5f23e0
2026-04-11T17:14:36.424 [DEBUG] [Thread-173672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:14:36.446 [DEBUG] [Thread-173672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:14:36.446 [INFO] [Thread-173672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] client lang: <none>
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] server lang: <none>
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] kex follows: False
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:14:36.449 [DEBUG] [Thread-173672] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:14:36.450 [DEBUG] [Thread-173672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:14:36.450 [DEBUG] [Thread-173672] [transport.py] [_log()] Compression: none
2026-04-11T17:14:36.450 [DEBUG] [Thread-173672] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:14:36.467 [DEBUG] [Thread-173672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:14:36.468 [DEBUG] [Thread-173672] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:14:36.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:14:36.469 [DEBUG] [Thread-173672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:14:36.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:14:36.471 [DEBUG] [Thread-173672] [transport.py] [_log()] userauth is OK
2026-04-11T17:14:36.471 [DEBUG] [Thread-173672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:14:36.471 [DEBUG] [Thread-173672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:14:36.471 [DEBUG] [Thread-173672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:14:36.471 [DEBUG] [Thread-173672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:14:36.495 [INFO] [Thread-173672] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:14:36.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:14:37.106 [DEBUG] [Thread-173672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:14:37.107 [DEBUG] [Thread-173672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:14:37.107 [DEBUG] [Thread-173672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:14:37.148 [DEBUG] [Thread-173672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:14:37.148 [DEBUG] [Thread-173672] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:14:37.152 [DEBUG] [Thread-173672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:14:37.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:14:37.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:14:37.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:14:37.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:14:37.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:14:37.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:14:37.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:14:37.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:14:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:14:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.634843 -999.00  +12.90  18.14     96  +12.40 1 3 1 3 1   887    0 0.25 -11.26 ----- 15.9 18.1 286.0 21.6 14.2 -1.1 14.1 -0.6 13.7 -1.4 14.2 -0.3
2026-04-11T17:14:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:14:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:14:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.634843
2026-04-11T17:14:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:14:37.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:14:37.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:14:37.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:14:37.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:14:37.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:14:01', tmtdew=0.060315, humidity=99.5689, cloud=0.0, wind=17.8924, temperature=13.1636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:14:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:14:37.181 [DEBUG] [Thread-173672] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:14:37.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:14:37.274 [DEBUG] [Thread-173675] [transport.py] [_log()] starting thread (client mode): 0xae5f2d70
2026-04-11T17:14:37.275 [DEBUG] [Thread-173675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:14:37.290 [DEBUG] [Thread-173675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:14:37.290 [INFO] [Thread-173675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:14:37.298 [DEBUG] [Thread-173675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:14:37.298 [DEBUG] [Thread-173675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] client lang: <none>
2026-04-11T17:14:37.299 [DEBUG] [Thread-173675] [transport.py] [_log()] server lang: <none>
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] kex follows: False
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:14:37.300 [DEBUG] [Thread-173675] [transport.py] [_log()] Compression: none
2026-04-11T17:14:37.301 [DEBUG] [Thread-173675] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:14:37.357 [DEBUG] [Thread-173675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:14:37.358 [DEBUG] [Thread-173675] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:14:37.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:14:37.359 [DEBUG] [Thread-173675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:14:37.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:14:37.413 [DEBUG] [Thread-173675] [transport.py] [_log()] userauth is OK
2026-04-11T17:14:37.413 [DEBUG] [Thread-173675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:14:37.413 [DEBUG] [Thread-173675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:14:37.414 [DEBUG] [Thread-173675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:14:37.414 [DEBUG] [Thread-173675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:14:37.432 [INFO] [Thread-173675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:14:37.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:14:37.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:14:38.291 [DEBUG] [Thread-173675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:14:38.292 [DEBUG] [Thread-173675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:14:38.340 [DEBUG] [Thread-173675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:14:38.341 [DEBUG] [Thread-173675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:14:38.350 [DEBUG] [Thread-173675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:14:38.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:14:38.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-04-11T17:14:38.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-04-11T17:14:38.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:14:38.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:14:38.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:14:38.388 [DEBUG] [Thread-173675] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:14:39.458 [DEBUG] [Thread-173677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:14:54.512 [DEBUG] [Thread-173678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:08.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:15:08.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:15:08.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-04-11T17:15:09.552 [DEBUG] [Thread-173679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:09.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 14, 37), 0.13089, 99.0715, 0.0, 18.4903, 13.5278, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:15:09.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:14:37
2026-04-11T17:15:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:15:10.302 [DEBUG] [Thread-173680] [transport.py] [_log()] starting thread (client mode): 0xae5f13c0
2026-04-11T17:15:10.302 [DEBUG] [Thread-173680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:15:10.324 [DEBUG] [Thread-173680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:15:10.324 [INFO] [Thread-173680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] client lang: <none>
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] server lang: <none>
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] kex follows: False
2026-04-11T17:15:10.328 [DEBUG] [Thread-173680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:15:10.329 [DEBUG] [Thread-173680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:15:10.329 [DEBUG] [Thread-173680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:15:10.329 [DEBUG] [Thread-173680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:15:10.329 [DEBUG] [Thread-173680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:15:10.329 [DEBUG] [Thread-173680] [transport.py] [_log()] Compression: none
2026-04-11T17:15:10.329 [DEBUG] [Thread-173680] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:15:10.345 [DEBUG] [Thread-173680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:15:10.345 [DEBUG] [Thread-173680] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:15:10.346 [DEBUG] [Thread-173680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:15:10.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:15:10.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:15:10.348 [DEBUG] [Thread-173680] [transport.py] [_log()] userauth is OK
2026-04-11T17:15:10.348 [DEBUG] [Thread-173680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:15:10.348 [DEBUG] [Thread-173680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:15:10.348 [DEBUG] [Thread-173680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:15:10.348 [DEBUG] [Thread-173680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:15:10.372 [INFO] [Thread-173680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:15:10.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:15:11.288 [DEBUG] [Thread-173680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:15:11.289 [DEBUG] [Thread-173680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:15:11.289 [DEBUG] [Thread-173680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:15:11.330 [DEBUG] [Thread-173680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:15:11.330 [DEBUG] [Thread-173680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:15:11.333 [DEBUG] [Thread-173680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:15:11.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:15:11.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:15:11.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:15:11.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:15:11.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:15:11.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:15:11.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:15:11.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:15:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:15:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.635190 -999.00  +12.90  14.31     96  +12.40 1 3 1 3 1   887    0 0.24 -10.97 ----- 15.0 14.3 277.8 21.1 14.2 -0.9 14.1 -0.5 13.7 -0.6 14.1 -0.2
2026-04-11T17:15:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:15:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:15:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.635190
2026-04-11T17:15:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:15:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:15:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:15:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:15:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:15:11.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:14:37', tmtdew=0.13089, humidity=99.0715, cloud=0.0, wind=18.4903, temperature=13.5278, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:14:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:15:11.393 [DEBUG] [Thread-173680] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:15:11.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:15:11.492 [DEBUG] [Thread-173683] [transport.py] [_log()] starting thread (client mode): 0xae5e4730
2026-04-11T17:15:11.493 [DEBUG] [Thread-173683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:15:11.507 [DEBUG] [Thread-173683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:15:11.507 [INFO] [Thread-173683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:15:11.514 [DEBUG] [Thread-173683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] client lang: <none>
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] server lang: <none>
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] kex follows: False
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] Compression: none
2026-04-11T17:15:11.515 [DEBUG] [Thread-173683] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:15:11.573 [DEBUG] [Thread-173683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:15:11.573 [DEBUG] [Thread-173683] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:15:11.574 [DEBUG] [Thread-173683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:15:11.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:15:11.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:15:11.629 [DEBUG] [Thread-173683] [transport.py] [_log()] userauth is OK
2026-04-11T17:15:11.629 [DEBUG] [Thread-173683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:15:11.629 [DEBUG] [Thread-173683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:15:11.629 [DEBUG] [Thread-173683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:15:11.629 [DEBUG] [Thread-173683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:15:11.652 [INFO] [Thread-173683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:15:11.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:15:11.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:15:12.480 [DEBUG] [Thread-173683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:15:12.480 [DEBUG] [Thread-173683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:15:12.528 [DEBUG] [Thread-173683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:15:12.529 [DEBUG] [Thread-173683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:15:12.547 [DEBUG] [Thread-173683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:15:12.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:15: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-04-11T17:15: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-04-11T17:15:12.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:15:12.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:15:12.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:15:12.584 [DEBUG] [Thread-173683] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:15:17.947 [DEBUG] [Thread-173685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:24.590 [DEBUG] [Thread-173686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:34.306 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:34.307 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:39.644 [DEBUG] [Thread-173687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:15:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:15:42.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:15:42.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-04-11T17:15:43.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 15, 12), 0.11544, 99.5358, 0.0, 19.4623, 13.0139, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:15:43.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:15:12
2026-04-11T17:15:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:15:44.458 [DEBUG] [Thread-173688] [transport.py] [_log()] starting thread (client mode): 0xa7953730
2026-04-11T17:15:44.458 [DEBUG] [Thread-173688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:15:44.479 [DEBUG] [Thread-173688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:15:44.479 [INFO] [Thread-173688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] client lang: <none>
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] server lang: <none>
2026-04-11T17:15:44.483 [DEBUG] [Thread-173688] [transport.py] [_log()] kex follows: False
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] Compression: none
2026-04-11T17:15:44.484 [DEBUG] [Thread-173688] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:15:44.502 [DEBUG] [Thread-173688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:15:44.503 [DEBUG] [Thread-173688] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:15:44.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:15:44.504 [DEBUG] [Thread-173688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:15:44.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:15:44.506 [DEBUG] [Thread-173688] [transport.py] [_log()] userauth is OK
2026-04-11T17:15:44.506 [DEBUG] [Thread-173688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:15:44.506 [DEBUG] [Thread-173688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:15:44.506 [DEBUG] [Thread-173688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:15:44.507 [DEBUG] [Thread-173688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:15:44.542 [INFO] [Thread-173688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:15:44.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:15:45.187 [DEBUG] [Thread-173688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:15:45.187 [DEBUG] [Thread-173688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:15:45.188 [DEBUG] [Thread-173688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:15:45.228 [DEBUG] [Thread-173688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:15:45.228 [DEBUG] [Thread-173688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:15:45.232 [DEBUG] [Thread-173688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:15:45.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:15:45.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:15:45.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:15:45.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:15:45.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:15:45.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:15:45.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:15:45.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:15:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:15:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.635537 -999.00  +13.00  14.74     96  +12.50 1 3 1 3 1   887    0 0.25 -11.12 ----- 16.4 14.7 282.0 17.5 14.3 -0.7 14.1 -0.5 13.7 -0.9 14.2 -0.2
2026-04-11T17:15:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:15:45.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:15:45.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.635537
2026-04-11T17:15:45.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:15:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:15:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:15:45.258 [DEBUG] [Thread-173688] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:15:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:15:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:15:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:15:12', tmtdew=0.11544, humidity=99.5358, cloud=0.0, wind=19.4623, temperature=13.0139, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:15:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:15:45.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:15:45.352 [DEBUG] [Thread-173691] [transport.py] [_log()] starting thread (client mode): 0xae5f18d0
2026-04-11T17:15:45.352 [DEBUG] [Thread-173691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:15:45.366 [DEBUG] [Thread-173691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:15:45.367 [INFO] [Thread-173691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:15:45.374 [DEBUG] [Thread-173691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:15:45.374 [DEBUG] [Thread-173691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:15:45.374 [DEBUG] [Thread-173691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:15:45.374 [DEBUG] [Thread-173691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] client lang: <none>
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] server lang: <none>
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] kex follows: False
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] Compression: none
2026-04-11T17:15:45.375 [DEBUG] [Thread-173691] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:15:45.435 [DEBUG] [Thread-173691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:15:45.436 [DEBUG] [Thread-173691] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:15:45.437 [DEBUG] [Thread-173691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:15:45.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:15:45.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:15:45.491 [DEBUG] [Thread-173691] [transport.py] [_log()] userauth is OK
2026-04-11T17:15:45.492 [DEBUG] [Thread-173691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:15:45.492 [DEBUG] [Thread-173691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:15:45.492 [DEBUG] [Thread-173691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:15:45.492 [DEBUG] [Thread-173691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:15:45.511 [INFO] [Thread-173691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:15:45.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:15:45.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:15:46.349 [DEBUG] [Thread-173691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:15:46.349 [DEBUG] [Thread-173691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:15:46.397 [DEBUG] [Thread-173691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:15:46.397 [DEBUG] [Thread-173691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:15:46.407 [DEBUG] [Thread-173691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:15:46.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:15:46.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:15:46.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-04-11T17:15:46.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:15:46.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:15:46.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:15:46.444 [DEBUG] [Thread-173691] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:15:54.681 [DEBUG] [Thread-173693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:09.731 [DEBUG] [Thread-173694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:16.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:16:16.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:16:16.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:16:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 15, 48), 0.13088, 99.0715, 0.0, 19.7957, 13.5278, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:16:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:15:48
2026-04-11T17:16:18.017 [DEBUG] [Thread-173695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:18.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:16:18.268 [DEBUG] [Thread-173696] [transport.py] [_log()] starting thread (client mode): 0xae5e5120
2026-04-11T17:16:18.268 [DEBUG] [Thread-173696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:16:18.288 [DEBUG] [Thread-173696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:16:18.289 [INFO] [Thread-173696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:16:18.291 [DEBUG] [Thread-173696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] client lang: <none>
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] server lang: <none>
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] kex follows: False
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:16:18.292 [DEBUG] [Thread-173696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:16:18.293 [DEBUG] [Thread-173696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:16:18.293 [DEBUG] [Thread-173696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:16:18.293 [DEBUG] [Thread-173696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:16:18.293 [DEBUG] [Thread-173696] [transport.py] [_log()] Compression: none
2026-04-11T17:16:18.293 [DEBUG] [Thread-173696] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:16:18.311 [DEBUG] [Thread-173696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:16:18.312 [DEBUG] [Thread-173696] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:16:18.313 [DEBUG] [Thread-173696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:16:18.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:16:18.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:16:18.315 [DEBUG] [Thread-173696] [transport.py] [_log()] userauth is OK
2026-04-11T17:16:18.315 [DEBUG] [Thread-173696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:16:18.315 [DEBUG] [Thread-173696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:16:18.315 [DEBUG] [Thread-173696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:16:18.315 [DEBUG] [Thread-173696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:16:18.339 [INFO] [Thread-173696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:16:18.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:16:18.961 [DEBUG] [Thread-173696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:16:18.961 [DEBUG] [Thread-173696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:16:18.962 [DEBUG] [Thread-173696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:16:19.002 [DEBUG] [Thread-173696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:16:19.002 [DEBUG] [Thread-173696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:16:19.005 [DEBUG] [Thread-173696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:16:19.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:16:19.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:16:19.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:16:19.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:16:19.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:16:19.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:16:19.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:16:19.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:16:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:16:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.635885 -999.00  +13.00  12.29     96  +12.50 1 3 1 3 1   887    0 0.25 -10.65 ----- 12.3 12.3 295.8 18.3 14.2 -0.7 14.1 -0.4 13.8 -0.5 14.1 -0.1
2026-04-11T17:16:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:16:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:16:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.635885
2026-04-11T17:16:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:16:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:16:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:16:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:16:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:16:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:15:48', tmtdew=0.13088, humidity=99.0715, cloud=0.0, wind=19.7957, temperature=13.5278, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:15:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:16:19.033 [DEBUG] [Thread-173696] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:16:19.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:16:19.126 [DEBUG] [Thread-173699] [transport.py] [_log()] starting thread (client mode): 0xae50b2e0
2026-04-11T17:16:19.126 [DEBUG] [Thread-173699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:16:19.140 [DEBUG] [Thread-173699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:16:19.140 [INFO] [Thread-173699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:16:19.150 [DEBUG] [Thread-173699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:16:19.150 [DEBUG] [Thread-173699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:16:19.150 [DEBUG] [Thread-173699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:16:19.150 [DEBUG] [Thread-173699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:19.150 [DEBUG] [Thread-173699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] client lang: <none>
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] server lang: <none>
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] kex follows: False
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:16:19.151 [DEBUG] [Thread-173699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:16:19.152 [DEBUG] [Thread-173699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:16:19.152 [DEBUG] [Thread-173699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:16:19.152 [DEBUG] [Thread-173699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:16:19.152 [DEBUG] [Thread-173699] [transport.py] [_log()] Compression: none
2026-04-11T17:16:19.152 [DEBUG] [Thread-173699] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:16:19.208 [DEBUG] [Thread-173699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:16:19.209 [DEBUG] [Thread-173699] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:16:19.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:16:19.210 [DEBUG] [Thread-173699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:16:19.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:16:19.264 [DEBUG] [Thread-173699] [transport.py] [_log()] userauth is OK
2026-04-11T17:16:19.264 [DEBUG] [Thread-173699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:16:19.264 [DEBUG] [Thread-173699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:16:19.264 [DEBUG] [Thread-173699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:16:19.265 [DEBUG] [Thread-173699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:16:19.284 [INFO] [Thread-173699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:16:19.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:16:19.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:16:20.106 [DEBUG] [Thread-173699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:16:20.106 [DEBUG] [Thread-173699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:16:20.154 [DEBUG] [Thread-173699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:16:20.155 [DEBUG] [Thread-173699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:16:20.163 [DEBUG] [Thread-173699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:16:20.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:16:20.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:16:20.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:16:20.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:16:20.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:16:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:16:20.194 [DEBUG] [Thread-173699] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:16:24.769 [DEBUG] [Thread-173701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:34.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:34.466 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:39.823 [DEBUG] [Thread-173702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:16:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:16:50.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:16:50.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:16:51.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 16, 23), 0.065435, 99.5358, 0.0, 19.1272, 12.9973, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:16:51.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:16:23
2026-04-11T17:16:52.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:16:52.206 [DEBUG] [Thread-173703] [transport.py] [_log()] starting thread (client mode): 0xae5e4850
2026-04-11T17:16:52.206 [DEBUG] [Thread-173703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:16:52.227 [DEBUG] [Thread-173703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:16:52.227 [INFO] [Thread-173703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] client lang: <none>
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] server lang: <none>
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] kex follows: False
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] Compression: none
2026-04-11T17:16:52.230 [DEBUG] [Thread-173703] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:16:52.247 [DEBUG] [Thread-173703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:16:52.248 [DEBUG] [Thread-173703] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:16:52.248 [DEBUG] [Thread-173703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:16:52.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:16:52.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:16:52.250 [DEBUG] [Thread-173703] [transport.py] [_log()] userauth is OK
2026-04-11T17:16:52.251 [DEBUG] [Thread-173703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:16:52.251 [DEBUG] [Thread-173703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:16:52.251 [DEBUG] [Thread-173703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:16:52.251 [DEBUG] [Thread-173703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:16:52.275 [INFO] [Thread-173703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:16:52.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:16:52.930 [DEBUG] [Thread-173703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:16:52.930 [DEBUG] [Thread-173703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:16:52.931 [DEBUG] [Thread-173703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:16:52.971 [DEBUG] [Thread-173703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:16:52.971 [DEBUG] [Thread-173703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:16:52.975 [DEBUG] [Thread-173703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:16:52.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:16:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:16:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:16:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:16:52.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:16:53.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:16:53.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:16:53.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:16:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:16:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.636232 -999.00  +12.90  17.54     96  +12.40 1 3 1 3 1   887    0 0.25 -10.80 ----- 17.5 17.5 282.4 21.5 14.2 -1.1 14.1 -0.5 13.8 -0.3 14.1 -0.3
2026-04-11T17:16:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:16:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:16:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.636232
2026-04-11T17:16:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:16:53.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:16:23', tmtdew=0.065435, humidity=99.5358, cloud=0.0, wind=19.1272, temperature=12.9973, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:16:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:16:53.005 [DEBUG] [Thread-173703] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:16:53.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:16:53.098 [DEBUG] [Thread-173706] [transport.py] [_log()] starting thread (client mode): 0xae514370
2026-04-11T17:16:53.099 [DEBUG] [Thread-173706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:16:53.112 [DEBUG] [Thread-173706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:16:53.113 [INFO] [Thread-173706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:16:53.120 [DEBUG] [Thread-173706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:16:53.120 [DEBUG] [Thread-173706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:16:53.120 [DEBUG] [Thread-173706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] client lang: <none>
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] server lang: <none>
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] kex follows: False
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] Compression: none
2026-04-11T17:16:53.121 [DEBUG] [Thread-173706] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:16:53.178 [DEBUG] [Thread-173706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:16:53.179 [DEBUG] [Thread-173706] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:16:53.180 [DEBUG] [Thread-173706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:16:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:16:53.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:16:53.236 [DEBUG] [Thread-173706] [transport.py] [_log()] userauth is OK
2026-04-11T17:16:53.236 [DEBUG] [Thread-173706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:16:53.237 [DEBUG] [Thread-173706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:16:53.237 [DEBUG] [Thread-173706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:16:53.237 [DEBUG] [Thread-173706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:16:53.264 [INFO] [Thread-173706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:16:53.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:16:53.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:16:54.058 [DEBUG] [Thread-173706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:16:54.059 [DEBUG] [Thread-173706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:16:54.107 [DEBUG] [Thread-173706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:16:54.107 [DEBUG] [Thread-173706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:16:54.117 [DEBUG] [Thread-173706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:16:54.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:16:54.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-04-11T17:16:54.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-04-11T17:16:54.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:16:54.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:16:54.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:16:54.154 [DEBUG] [Thread-173706] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:16:54.861 [DEBUG] [Thread-173708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:09.912 [DEBUG] [Thread-173709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:18.076 [DEBUG] [Thread-173710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:17:24.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:17:24.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-04-11T17:17:24.950 [DEBUG] [Thread-173711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:25.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 17, 1), 0.065435, 99.5358, 0.0, 18.8978, 12.9973, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:17:25.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:17:01
2026-04-11T17:17:25.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:17:26.122 [DEBUG] [Thread-173712] [transport.py] [_log()] starting thread (client mode): 0xa7951030
2026-04-11T17:17:26.122 [DEBUG] [Thread-173712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:17:26.137 [DEBUG] [Thread-173712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:17:26.138 [INFO] [Thread-173712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] client lang: <none>
2026-04-11T17:17:26.140 [DEBUG] [Thread-173712] [transport.py] [_log()] server lang: <none>
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] kex follows: False
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] Compression: none
2026-04-11T17:17:26.141 [DEBUG] [Thread-173712] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:17:26.155 [DEBUG] [Thread-173712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:17:26.156 [DEBUG] [Thread-173712] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:17:26.156 [DEBUG] [Thread-173712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:17:26.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:17:26.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:17:26.158 [DEBUG] [Thread-173712] [transport.py] [_log()] userauth is OK
2026-04-11T17:17:26.159 [DEBUG] [Thread-173712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:17:26.159 [DEBUG] [Thread-173712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:17:26.159 [DEBUG] [Thread-173712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:17:26.159 [DEBUG] [Thread-173712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:17:26.195 [INFO] [Thread-173712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:17:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:17:26.809 [DEBUG] [Thread-173712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:17:26.810 [DEBUG] [Thread-173712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:17:26.810 [DEBUG] [Thread-173712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:17:26.851 [DEBUG] [Thread-173712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:17:26.851 [DEBUG] [Thread-173712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:17:26.855 [DEBUG] [Thread-173712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:17:26.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:17:26.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:17:26.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:17:26.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:17:26.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:17:26.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:17:26.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:17:26.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:17:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:17:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.636927 -999.00  +12.90  18.90     96  +12.40 1 3 1 3 1   887    0 0.27 -9.51 ----- 18.9 18.9 277.0 25.6 14.2 -1.2 14.1 -0.6 13.6 -0.8 14.1 -0.6
2026-04-11T17:17:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:17:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:17:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.636927
2026-04-11T17:17:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:17:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:17:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:17:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:17:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:17:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:17:01', tmtdew=0.065435, humidity=99.5358, cloud=0.0, wind=18.8978, temperature=12.9973, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:17:10.493', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:17:26.880 [DEBUG] [Thread-173712] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:17:26.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:17:26.973 [DEBUG] [Thread-173715] [transport.py] [_log()] starting thread (client mode): 0xae518910
2026-04-11T17:17:26.973 [DEBUG] [Thread-173715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:17:26.988 [DEBUG] [Thread-173715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:17:26.988 [INFO] [Thread-173715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:17:26.996 [DEBUG] [Thread-173715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:17:26.996 [DEBUG] [Thread-173715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] client lang: <none>
2026-04-11T17:17:26.997 [DEBUG] [Thread-173715] [transport.py] [_log()] server lang: <none>
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] kex follows: False
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] Compression: none
2026-04-11T17:17:26.998 [DEBUG] [Thread-173715] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:17:27.055 [DEBUG] [Thread-173715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:17:27.055 [DEBUG] [Thread-173715] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:17:27.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:17:27.056 [DEBUG] [Thread-173715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:17:27.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:17:27.111 [DEBUG] [Thread-173715] [transport.py] [_log()] userauth is OK
2026-04-11T17:17:27.111 [DEBUG] [Thread-173715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:17:27.111 [DEBUG] [Thread-173715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:17:27.111 [DEBUG] [Thread-173715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:17:27.112 [DEBUG] [Thread-173715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:17:27.131 [INFO] [Thread-173715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:17:27.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:17:27.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:17:27.978 [DEBUG] [Thread-173715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:17:27.978 [DEBUG] [Thread-173715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:17:28.027 [DEBUG] [Thread-173715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:17:28.028 [DEBUG] [Thread-173715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:17:28.037 [DEBUG] [Thread-173715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:17:28.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:17:28.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-04-11T17:17:28.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-04-11T17:17:28.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:17:28.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:17:28.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:17:28.071 [DEBUG] [Thread-173715] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:17:34.607 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:34.609 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:39.986 [DEBUG] [Thread-173717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:55.039 [DEBUG] [Thread-173718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:17:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:17:58.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:17:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:17:59.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 17, 37), 0.12574, 99.1047, 0.0, 19.6546, 13.5278, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:17:59.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:17:37
2026-04-11T17:17:59.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:17:59.947 [DEBUG] [Thread-173719] [transport.py] [_log()] starting thread (client mode): 0xae5161a0
2026-04-11T17:17:59.947 [DEBUG] [Thread-173719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:17:59.968 [DEBUG] [Thread-173719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:17:59.968 [INFO] [Thread-173719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:17:59.971 [DEBUG] [Thread-173719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:17:59.971 [DEBUG] [Thread-173719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:17:59.971 [DEBUG] [Thread-173719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] client lang: <none>
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] server lang: <none>
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] kex follows: False
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] Compression: none
2026-04-11T17:17:59.972 [DEBUG] [Thread-173719] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:17:59.989 [DEBUG] [Thread-173719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:17:59.989 [DEBUG] [Thread-173719] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:17:59.990 [DEBUG] [Thread-173719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:17:59.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:17:59.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:17:59.991 [DEBUG] [Thread-173719] [transport.py] [_log()] userauth is OK
2026-04-11T17:17:59.991 [DEBUG] [Thread-173719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:17:59.992 [DEBUG] [Thread-173719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:17:59.992 [DEBUG] [Thread-173719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:17:59.992 [DEBUG] [Thread-173719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:18:00.014 [INFO] [Thread-173719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:18:00.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:18:00.676 [DEBUG] [Thread-173719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:18:00.677 [DEBUG] [Thread-173719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:18:00.677 [DEBUG] [Thread-173719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:18:00.718 [DEBUG] [Thread-173719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:18:00.718 [DEBUG] [Thread-173719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:18:00.721 [DEBUG] [Thread-173719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:18:00.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:18:00.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:18:00.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:18:00.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:18:00.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:18:00.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:18:00.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:18:00.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:18:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:18:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.637274 -999.00  +12.90  14.09     96  +12.40 1 3 1 3 1   887    0 0.25 -9.62 ----- 14.1 14.1 279.4 18.7 14.2 -0.8 14.1 -0.4 13.6 -0.5 14.1 -0.1
2026-04-11T17:18:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:18:00.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:18:00.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.637274
2026-04-11T17:18:00.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:18:00.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:18:00.744 [DEBUG] [Thread-173719] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:18:00.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:18:00.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:18:00.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:18:00.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:17:37', tmtdew=0.12574, humidity=99.1047, cloud=0.0, wind=19.6546, temperature=13.5278, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:17:40.474', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:18:00.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:18:00.841 [DEBUG] [Thread-173722] [transport.py] [_log()] starting thread (client mode): 0xa7951ae0
2026-04-11T17:18:00.842 [DEBUG] [Thread-173722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:18:00.856 [DEBUG] [Thread-173722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:18:00.856 [INFO] [Thread-173722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] client lang: <none>
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] server lang: <none>
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] kex follows: False
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:18:00.864 [DEBUG] [Thread-173722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:18:00.865 [DEBUG] [Thread-173722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:18:00.865 [DEBUG] [Thread-173722] [transport.py] [_log()] Compression: none
2026-04-11T17:18:00.865 [DEBUG] [Thread-173722] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:18:00.921 [DEBUG] [Thread-173722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:18:00.921 [DEBUG] [Thread-173722] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:18:00.922 [DEBUG] [Thread-173722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:18:00.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:18:00.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:18:00.978 [DEBUG] [Thread-173722] [transport.py] [_log()] userauth is OK
2026-04-11T17:18:00.978 [DEBUG] [Thread-173722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:18:00.978 [DEBUG] [Thread-173722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:18:00.978 [DEBUG] [Thread-173722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:18:00.978 [DEBUG] [Thread-173722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:18:01.000 [INFO] [Thread-173722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:18: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-04-11T17:18:01.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:18:01.853 [DEBUG] [Thread-173722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:18:01.853 [DEBUG] [Thread-173722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:18:01.902 [DEBUG] [Thread-173722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:18:01.902 [DEBUG] [Thread-173722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:18:01.911 [DEBUG] [Thread-173722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:18:01.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:18:01.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-04-11T17:18:01.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-04-11T17:18:01.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:18:01.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:18:01.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:18:01.945 [DEBUG] [Thread-173722] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:18:10.085 [DEBUG] [Thread-173724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:18:18.140 [DEBUG] [Thread-173725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:18:25.146 [DEBUG] [Thread-173726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:18:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:18:31.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:18:31.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:18:33.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 18, 13), 0.065445, 99.5358, 0.0, 20.398, 13.0805, 2, 2, 0, 2, 0, 0),)
2026-04-11T17:18:33.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:18:13
2026-04-11T17:18:33.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:18:33.797 [DEBUG] [Thread-173727] [transport.py] [_log()] starting thread (client mode): 0xae5f2d70
2026-04-11T17:18:33.797 [DEBUG] [Thread-173727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:18:33.818 [DEBUG] [Thread-173727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:18:33.818 [INFO] [Thread-173727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] client lang: <none>
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] server lang: <none>
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] kex follows: False
2026-04-11T17:18:33.821 [DEBUG] [Thread-173727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:18:33.822 [DEBUG] [Thread-173727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:18:33.822 [DEBUG] [Thread-173727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:18:33.822 [DEBUG] [Thread-173727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:18:33.822 [DEBUG] [Thread-173727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:18:33.822 [DEBUG] [Thread-173727] [transport.py] [_log()] Compression: none
2026-04-11T17:18:33.822 [DEBUG] [Thread-173727] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:18:33.839 [DEBUG] [Thread-173727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:18:33.840 [DEBUG] [Thread-173727] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:18:33.840 [DEBUG] [Thread-173727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:18:33.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:18:33.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:18:33.843 [DEBUG] [Thread-173727] [transport.py] [_log()] userauth is OK
2026-04-11T17:18:33.843 [DEBUG] [Thread-173727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:18:33.843 [DEBUG] [Thread-173727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:18:33.843 [DEBUG] [Thread-173727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:18:33.843 [DEBUG] [Thread-173727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:18:33.867 [INFO] [Thread-173727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:18:33.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:18:34.543 [DEBUG] [Thread-173727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:18:34.543 [DEBUG] [Thread-173727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:18:34.543 [DEBUG] [Thread-173727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:18:34.585 [DEBUG] [Thread-173727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:18:34.585 [DEBUG] [Thread-173727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:18:34.587 [DEBUG] [Thread-173727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:18:34.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:18:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:18:34.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:18:34.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:18:34.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:18:34.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:18:34.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.637621 -999.00  +13.00  12.34     96  +12.50 1 3 1 3 1   887    0 0.25 -9.98 ----- 12.3 12.3 279.4 18.1 14.2 -0.6 14.1 -0.4 13.7 -0.9 14.1 -0.1
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.637621
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:18:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:18:13', tmtdew=0.065445, humidity=99.5358, cloud=0.0, wind=20.398, temperature=13.0805, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:18:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:18:34.608 [DEBUG] [Thread-173727] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:18:34.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:18:34.690 [DEBUG] [Thread-173730] [transport.py] [_log()] starting thread (client mode): 0xa7950ca0
2026-04-11T17:18:34.691 [DEBUG] [Thread-173730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:18:34.705 [DEBUG] [Thread-173730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:18:34.705 [INFO] [Thread-173730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] client lang: <none>
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] server lang: <none>
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] kex follows: False
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] Compression: none
2026-04-11T17:18:34.713 [DEBUG] [Thread-173730] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:18:34.749 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:18:34.750 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:18:34.773 [DEBUG] [Thread-173730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:18:34.774 [DEBUG] [Thread-173730] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:18:34.774 [DEBUG] [Thread-173730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:18:34.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:18:34.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:18:34.830 [DEBUG] [Thread-173730] [transport.py] [_log()] userauth is OK
2026-04-11T17:18:34.830 [DEBUG] [Thread-173730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:18:34.830 [DEBUG] [Thread-173730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:18:34.831 [DEBUG] [Thread-173730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:18:34.831 [DEBUG] [Thread-173730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:18:34.849 [INFO] [Thread-173730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:18:34.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:18:34.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:18:35.689 [DEBUG] [Thread-173730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:18:35.689 [DEBUG] [Thread-173730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:18:35.737 [DEBUG] [Thread-173730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:18:35.737 [DEBUG] [Thread-173730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:18:35.747 [DEBUG] [Thread-173730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:18:35.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:18:35.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-04-11T17:18:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:18:35.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:18:35.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:18:35.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:18:35.792 [DEBUG] [Thread-173730] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:18:40.185 [DEBUG] [Thread-173732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:18:55.239 [DEBUG] [Thread-173733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:05.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:19:05.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:19:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:19:07.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 18, 48), 0.13088, 99.0716, 0.0, 20.5718, 13.5278, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:19:07.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:18:48
2026-04-11T17:19:07.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:19:07.605 [DEBUG] [Thread-173734] [transport.py] [_log()] starting thread (client mode): 0xae5a5210
2026-04-11T17:19:07.605 [DEBUG] [Thread-173734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:19:07.625 [DEBUG] [Thread-173734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:19:07.625 [INFO] [Thread-173734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:19:07.626 [DEBUG] [Thread-173734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:19:07.626 [DEBUG] [Thread-173734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:19:07.626 [DEBUG] [Thread-173734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:19:07.626 [DEBUG] [Thread-173734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:07.626 [DEBUG] [Thread-173734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] client lang: <none>
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] server lang: <none>
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] kex follows: False
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] Compression: none
2026-04-11T17:19:07.627 [DEBUG] [Thread-173734] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:19:07.635 [DEBUG] [Thread-173734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:19:07.635 [DEBUG] [Thread-173734] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:19:07.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:19:07.636 [DEBUG] [Thread-173734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:19:07.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:19:07.637 [DEBUG] [Thread-173734] [transport.py] [_log()] userauth is OK
2026-04-11T17:19:07.637 [DEBUG] [Thread-173734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:19:07.637 [DEBUG] [Thread-173734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:19:07.637 [DEBUG] [Thread-173734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:19:07.637 [DEBUG] [Thread-173734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:19:07.652 [INFO] [Thread-173734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:19:07.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:19:08.295 [DEBUG] [Thread-173734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:19:08.295 [DEBUG] [Thread-173734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:19:08.296 [DEBUG] [Thread-173734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:19:08.336 [DEBUG] [Thread-173734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:19:08.336 [DEBUG] [Thread-173734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:19:08.340 [DEBUG] [Thread-173734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:19:08.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:19:08.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:19:08.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:19:08.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:19:08.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:19:08.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:19:08.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:19:08.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:19:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:19:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.637968 -999.00  +13.00  15.13     97  +12.50 1 3 1 3 1   887    0 0.26 -9.46 ----- 15.1 15.1 283.2 22.0 14.2 -1.0 14.1 -0.4 13.7 -0.5 14.1 -0.1
2026-04-11T17:19:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:19:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:19:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.637968
2026-04-11T17:19:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:19:08.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:19:08.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:19:08.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:19:08.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:19:08.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:18:48', tmtdew=0.13088, humidity=99.0716, cloud=0.0, wind=20.5718, temperature=13.5278, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:18:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:19:08.369 [DEBUG] [Thread-173734] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:19:08.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:19:08.463 [DEBUG] [Thread-173737] [transport.py] [_log()] starting thread (client mode): 0xae5603d0
2026-04-11T17:19:08.463 [DEBUG] [Thread-173737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:19:08.478 [DEBUG] [Thread-173737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:19:08.478 [INFO] [Thread-173737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] client lang: <none>
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] server lang: <none>
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] kex follows: False
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:19:08.486 [DEBUG] [Thread-173737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:19:08.487 [DEBUG] [Thread-173737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:19:08.487 [DEBUG] [Thread-173737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:19:08.487 [DEBUG] [Thread-173737] [transport.py] [_log()] Compression: none
2026-04-11T17:19:08.487 [DEBUG] [Thread-173737] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:19:08.546 [DEBUG] [Thread-173737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:19:08.546 [DEBUG] [Thread-173737] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:19:08.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:19:08.547 [DEBUG] [Thread-173737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:19:08.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:19:08.602 [DEBUG] [Thread-173737] [transport.py] [_log()] userauth is OK
2026-04-11T17:19:08.603 [DEBUG] [Thread-173737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:19:08.603 [DEBUG] [Thread-173737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:19:08.603 [DEBUG] [Thread-173737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:19:08.603 [DEBUG] [Thread-173737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:19:08.621 [INFO] [Thread-173737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:19:08.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:19:08.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:19:09.446 [DEBUG] [Thread-173737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:19:09.446 [DEBUG] [Thread-173737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:19:09.494 [DEBUG] [Thread-173737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:19:09.494 [DEBUG] [Thread-173737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:19:09.503 [DEBUG] [Thread-173737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:19:09.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:19: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')
2026-04-11T17:19:09.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-04-11T17:19:09.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:19:09.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:19:09.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:19:09.540 [DEBUG] [Thread-173737] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:19:10.287 [DEBUG] [Thread-173739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:18.202 [DEBUG] [Thread-173740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:25.345 [DEBUG] [Thread-173741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:34.891 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:34.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:39.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:19:39.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:19:39.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-04-11T17:19:40.382 [DEBUG] [Thread-173742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:19:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 19, 24), 0.112875, 99.5524, 0.0, 19.4623, 13.0805, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:19:40.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:19:24
2026-04-11T17:19:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:19:41.394 [DEBUG] [Thread-173743] [transport.py] [_log()] starting thread (client mode): 0xae5629e0
2026-04-11T17:19:41.394 [DEBUG] [Thread-173743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:19:41.412 [DEBUG] [Thread-173743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:19:41.412 [INFO] [Thread-173743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:19:41.415 [DEBUG] [Thread-173743] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:19:41.415 [DEBUG] [Thread-173743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:19:41.415 [DEBUG] [Thread-173743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] client lang: <none>
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] server lang: <none>
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] kex follows: False
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] Compression: none
2026-04-11T17:19:41.416 [DEBUG] [Thread-173743] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:19:41.440 [DEBUG] [Thread-173743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:19:41.441 [DEBUG] [Thread-173743] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:19:41.441 [DEBUG] [Thread-173743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:19:41.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:19:41.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:19:41.443 [DEBUG] [Thread-173743] [transport.py] [_log()] userauth is OK
2026-04-11T17:19:41.444 [DEBUG] [Thread-173743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:19:41.444 [DEBUG] [Thread-173743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:19:41.444 [DEBUG] [Thread-173743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:19:41.444 [DEBUG] [Thread-173743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:19:41.476 [INFO] [Thread-173743] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:19:41.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:19:42.229 [DEBUG] [Thread-173743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:19:42.229 [DEBUG] [Thread-173743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:19:42.229 [DEBUG] [Thread-173743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:19:42.270 [DEBUG] [Thread-173743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:19:42.270 [DEBUG] [Thread-173743] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:19:42.274 [DEBUG] [Thread-173743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:19:42.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:19:42.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:19:42.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:19:42.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:19:42.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:19:42.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:19:42.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:19:42.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:19:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:19:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.638315 -999.00  +13.00  17.39     96  +12.50 1 3 1 3 1   887    0 0.27 -8.92 ----- 17.4 17.4 285.8 23.8 14.2 -0.8 14.1 -0.5 13.7 -1.0 14.1 -0.3
2026-04-11T17:19:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:19:42.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:19:42.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.638315
2026-04-11T17:19:42.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:19:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:19:42.300 [DEBUG] [Thread-173743] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:19:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:19:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:19:42.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:19:42.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:19:24', tmtdew=0.112875, humidity=99.5524, cloud=0.0, wind=19.4623, temperature=13.0805, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:19:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:19:42.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:19:42.390 [DEBUG] [Thread-173746] [transport.py] [_log()] starting thread (client mode): 0xae50b9d0
2026-04-11T17:19:42.390 [DEBUG] [Thread-173746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:19:42.405 [DEBUG] [Thread-173746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:19:42.405 [INFO] [Thread-173746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:19:42.413 [DEBUG] [Thread-173746] [transport.py] [_log()] client lang: <none>
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] server lang: <none>
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] kex follows: False
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] Compression: none
2026-04-11T17:19:42.414 [DEBUG] [Thread-173746] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:19:42.473 [DEBUG] [Thread-173746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:19:42.473 [DEBUG] [Thread-173746] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:19:42.474 [DEBUG] [Thread-173746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:19:42.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:19:42.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:19:42.529 [DEBUG] [Thread-173746] [transport.py] [_log()] userauth is OK
2026-04-11T17:19:42.530 [DEBUG] [Thread-173746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:19:42.530 [DEBUG] [Thread-173746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:19:42.530 [DEBUG] [Thread-173746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:19:42.530 [DEBUG] [Thread-173746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:19:42.550 [INFO] [Thread-173746] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:19:42.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:19:42.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:19:43.404 [DEBUG] [Thread-173746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:19:43.404 [DEBUG] [Thread-173746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:19:43.452 [DEBUG] [Thread-173746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:19:43.452 [DEBUG] [Thread-173746] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:19:43.460 [DEBUG] [Thread-173746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:19:43.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:19:43.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-04-11T17:19:43.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:19:43.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:19:43.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:19:43.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:19:43.493 [DEBUG] [Thread-173746] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:19:55.419 [DEBUG] [Thread-173748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:10.468 [DEBUG] [Thread-173749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:20:13.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:20:13.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-04-11T17:20:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 19, 59), 0.06287, 99.5524, 0.0, 21.5446, 13.0639, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:20:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:19:59
2026-04-11T17:20:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:20:15.316 [DEBUG] [Thread-173750] [transport.py] [_log()] starting thread (client mode): 0xae508850
2026-04-11T17:20:15.316 [DEBUG] [Thread-173750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:20:15.335 [DEBUG] [Thread-173750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:20:15.335 [INFO] [Thread-173750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] client lang: <none>
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] server lang: <none>
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] kex follows: False
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] Compression: none
2026-04-11T17:20:15.338 [DEBUG] [Thread-173750] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:20:15.354 [DEBUG] [Thread-173750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:20:15.354 [DEBUG] [Thread-173750] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:20:15.354 [DEBUG] [Thread-173750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:20:15.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:20:15.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:20:15.355 [DEBUG] [Thread-173750] [transport.py] [_log()] userauth is OK
2026-04-11T17:20:15.355 [DEBUG] [Thread-173750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:20:15.356 [DEBUG] [Thread-173750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:20:15.356 [DEBUG] [Thread-173750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:20:15.356 [DEBUG] [Thread-173750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:20:15.376 [INFO] [Thread-173750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:20:15.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:20:16.773 [DEBUG] [Thread-173750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:20:16.776 [DEBUG] [Thread-173750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:20:16.777 [DEBUG] [Thread-173750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:20:16.814 [DEBUG] [Thread-173750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:20:16.814 [DEBUG] [Thread-173750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:20:16.818 [DEBUG] [Thread-173750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:20:16.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:20:16.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:20:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:20:16.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:20:16.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:20:16.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:20:16.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:20:16.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:20:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:20:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.638662 -999.00  +12.90  19.22     96  +12.40 1 3 1 3 1   887    0 0.28 -8.90 ----- 19.2 19.2 276.8 23.3 14.1 -0.9 14.1 -0.7 13.6 -1.3 14.0 -0.2
2026-04-11T17:20:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:20:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:20:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.638662
2026-04-11T17:20:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:20:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:20:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:20:16.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:20:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:20:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:19:59', tmtdew=0.06287, humidity=99.5524, cloud=0.0, wind=21.5446, temperature=13.0639, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:19:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:20:16.889 [DEBUG] [Thread-173750] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:20:16.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:20:16.983 [DEBUG] [Thread-173753] [transport.py] [_log()] starting thread (client mode): 0xb0feace0
2026-04-11T17:20:16.983 [DEBUG] [Thread-173753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:20:16.997 [DEBUG] [Thread-173753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:20:16.998 [INFO] [Thread-173753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:20:17.005 [DEBUG] [Thread-173753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:20:17.005 [DEBUG] [Thread-173753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:20:17.005 [DEBUG] [Thread-173753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:20:17.005 [DEBUG] [Thread-173753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:17.005 [DEBUG] [Thread-173753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] client lang: <none>
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] server lang: <none>
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] kex follows: False
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] Compression: none
2026-04-11T17:20:17.006 [DEBUG] [Thread-173753] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:20:17.063 [DEBUG] [Thread-173753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:20:17.063 [DEBUG] [Thread-173753] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:20:17.064 [DEBUG] [Thread-173753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:20:17.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:20:17.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:20:17.120 [DEBUG] [Thread-173753] [transport.py] [_log()] userauth is OK
2026-04-11T17:20:17.121 [DEBUG] [Thread-173753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:20:17.121 [DEBUG] [Thread-173753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:20:17.121 [DEBUG] [Thread-173753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:20:17.121 [DEBUG] [Thread-173753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:20:17.142 [INFO] [Thread-173753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:20:17.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:20:17.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:20:17.994 [DEBUG] [Thread-173753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:20:17.994 [DEBUG] [Thread-173753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:20:18.042 [DEBUG] [Thread-173753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:20:18.042 [DEBUG] [Thread-173753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:20:18.050 [DEBUG] [Thread-173753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:20:18.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:20:18.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-04-11T17:20:18.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-04-11T17:20:18.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:20:18.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:20:18.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:20:18.085 [DEBUG] [Thread-173753] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:20:18.265 [DEBUG] [Thread-173755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:25.503 [DEBUG] [Thread-173756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:35.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:35.035 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:40.555 [DEBUG] [Thread-173757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:20:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:20:48.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:20:48.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-04-11T17:20:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 20, 35), 0.13598, 99.0384, 0.0, 23.994, 13.3952, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:20:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:20:35
2026-04-11T17:20:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:20:49.905 [DEBUG] [Thread-173758] [transport.py] [_log()] starting thread (client mode): 0xae516aa0
2026-04-11T17:20:49.905 [DEBUG] [Thread-173758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:20:49.926 [DEBUG] [Thread-173758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:20:49.926 [INFO] [Thread-173758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:20:49.929 [DEBUG] [Thread-173758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] client lang: <none>
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] server lang: <none>
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] kex follows: False
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:20:49.930 [DEBUG] [Thread-173758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:20:49.931 [DEBUG] [Thread-173758] [transport.py] [_log()] Compression: none
2026-04-11T17:20:49.931 [DEBUG] [Thread-173758] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:20:49.948 [DEBUG] [Thread-173758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:20:49.948 [DEBUG] [Thread-173758] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:20:49.949 [DEBUG] [Thread-173758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:20:49.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:20:49.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:20:49.951 [DEBUG] [Thread-173758] [transport.py] [_log()] userauth is OK
2026-04-11T17:20:49.951 [DEBUG] [Thread-173758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:20:49.951 [DEBUG] [Thread-173758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:20:49.951 [DEBUG] [Thread-173758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:20:49.952 [DEBUG] [Thread-173758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:20:49.969 [INFO] [Thread-173758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:20:49.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:20:50.750 [DEBUG] [Thread-173758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:20:50.750 [DEBUG] [Thread-173758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:20:50.750 [DEBUG] [Thread-173758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:20:50.791 [DEBUG] [Thread-173758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:20:50.791 [DEBUG] [Thread-173758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:20:50.794 [DEBUG] [Thread-173758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:20:50.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:20:50.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:20:50.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:20:50.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:20:50.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:20:50.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:20:50.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:20:50.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:20:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:20:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.639009 -999.00  +12.90  16.80     96  +12.40 1 3 1 3 1   887    0 0.28 -9.09 ----- 16.8 16.8 274.8 20.9 14.1 -1.1 14.0 -0.5 13.6 -0.4 14.0 -0.2
2026-04-11T17:20:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:20:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:20:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.639009
2026-04-11T17:20:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:20:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:20:50.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:20:50.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:20:50.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:20:50.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:20:35', tmtdew=0.13598, humidity=99.0384, cloud=0.0, wind=23.994, temperature=13.3952, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:20:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:20:50.821 [DEBUG] [Thread-173758] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:20:50.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:20:50.914 [DEBUG] [Thread-173761] [transport.py] [_log()] starting thread (client mode): 0xae518b20
2026-04-11T17:20:50.914 [DEBUG] [Thread-173761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:20:50.929 [DEBUG] [Thread-173761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:20:50.929 [INFO] [Thread-173761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:20:50.936 [DEBUG] [Thread-173761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:20:50.937 [DEBUG] [Thread-173761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] client lang: <none>
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] server lang: <none>
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] kex follows: False
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:20:50.938 [DEBUG] [Thread-173761] [transport.py] [_log()] Compression: none
2026-04-11T17:20:50.939 [DEBUG] [Thread-173761] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:20:50.998 [DEBUG] [Thread-173761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:20:50.998 [DEBUG] [Thread-173761] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:20:50.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:20:51.000 [DEBUG] [Thread-173761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:20:51.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:20:51.057 [DEBUG] [Thread-173761] [transport.py] [_log()] userauth is OK
2026-04-11T17:20:51.058 [DEBUG] [Thread-173761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:20:51.058 [DEBUG] [Thread-173761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:20:51.058 [DEBUG] [Thread-173761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:20:51.058 [DEBUG] [Thread-173761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:20:51.077 [INFO] [Thread-173761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:20:51.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:20:51.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:20:51.885 [DEBUG] [Thread-173761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:20:51.886 [DEBUG] [Thread-173761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:20:51.933 [DEBUG] [Thread-173761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:20:51.933 [DEBUG] [Thread-173761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:20:51.943 [DEBUG] [Thread-173761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:20:51.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:20:51.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:20: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') -> 00000000
2026-04-11T17:20:51.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:20:51.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:20:51.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:20:51.978 [DEBUG] [Thread-173761] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:20:55.593 [DEBUG] [Thread-173763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:10.644 [DEBUG] [Thread-173764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:18.317 [DEBUG] [Thread-173765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:21:21.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:21:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:21:23.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 21, 11), 0.117995, 99.5192, 0.0, 20.3972, 13.0142, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:21:23.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:21:11
2026-04-11T17:21:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:21:23.764 [DEBUG] [Thread-173766] [transport.py] [_log()] starting thread (client mode): 0xae536440
2026-04-11T17:21:23.765 [DEBUG] [Thread-173766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:21:23.785 [DEBUG] [Thread-173766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:21:23.785 [INFO] [Thread-173766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] client lang: <none>
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] server lang: <none>
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] kex follows: False
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:21:23.788 [DEBUG] [Thread-173766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:21:23.789 [DEBUG] [Thread-173766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:21:23.789 [DEBUG] [Thread-173766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:21:23.789 [DEBUG] [Thread-173766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:21:23.789 [DEBUG] [Thread-173766] [transport.py] [_log()] Compression: none
2026-04-11T17:21:23.789 [DEBUG] [Thread-173766] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:21:23.807 [DEBUG] [Thread-173766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:21:23.807 [DEBUG] [Thread-173766] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:21:23.808 [DEBUG] [Thread-173766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:21:23.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:21:23.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:21:23.810 [DEBUG] [Thread-173766] [transport.py] [_log()] userauth is OK
2026-04-11T17:21:23.810 [DEBUG] [Thread-173766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:21:23.810 [DEBUG] [Thread-173766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:21:23.810 [DEBUG] [Thread-173766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:21:23.810 [DEBUG] [Thread-173766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:21:23.835 [INFO] [Thread-173766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:21:23.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:21:24.632 [DEBUG] [Thread-173766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:21:24.633 [DEBUG] [Thread-173766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:21:24.633 [DEBUG] [Thread-173766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:21:24.674 [DEBUG] [Thread-173766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:21:24.675 [DEBUG] [Thread-173766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:21:24.678 [DEBUG] [Thread-173766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:21:24.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:21:24.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:21:24.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:21:24.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:21:24.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:21:24.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:21:24.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:21:24.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:21:24.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:21:24.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.639357 -999.00  +12.90  16.48     96  +12.40 1 3 1 3 1   887    0 0.30 -7.93 ----- 16.5 16.5 267.8 20.8 14.1 -1.1 14.0 -0.5 13.6 -1.0 14.0 -0.2
2026-04-11T17:21:24.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:21:24.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:21:24.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.639357
2026-04-11T17:21:24.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:21:24.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:21:24.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:21:24.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:21:24.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:21:24.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:21:11', tmtdew=0.117995, humidity=99.5192, cloud=0.0, wind=20.3972, temperature=13.0142, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:20:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:21:24.707 [DEBUG] [Thread-173766] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:21:24.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:21:24.811 [DEBUG] [Thread-173769] [transport.py] [_log()] starting thread (client mode): 0xae50ab60
2026-04-11T17:21:24.811 [DEBUG] [Thread-173769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:21:24.826 [DEBUG] [Thread-173769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:21:24.826 [INFO] [Thread-173769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:21:24.833 [DEBUG] [Thread-173769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] client lang: <none>
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] server lang: <none>
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] kex follows: False
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:21:24.834 [DEBUG] [Thread-173769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:21:24.835 [DEBUG] [Thread-173769] [transport.py] [_log()] Compression: none
2026-04-11T17:21:24.835 [DEBUG] [Thread-173769] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:21:24.896 [DEBUG] [Thread-173769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:21:24.897 [DEBUG] [Thread-173769] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:21:24.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:21:24.898 [DEBUG] [Thread-173769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:21:24.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:21:24.956 [DEBUG] [Thread-173769] [transport.py] [_log()] userauth is OK
2026-04-11T17:21:24.957 [DEBUG] [Thread-173769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:21:24.957 [DEBUG] [Thread-173769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:21:24.957 [DEBUG] [Thread-173769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:21:24.957 [DEBUG] [Thread-173769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:21:24.975 [INFO] [Thread-173769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:21:24.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:21:24.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:21:25.681 [DEBUG] [Thread-173771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:25.790 [DEBUG] [Thread-173769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:21:25.790 [DEBUG] [Thread-173769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:21:25.838 [DEBUG] [Thread-173769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:21:25.839 [DEBUG] [Thread-173769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:21:25.848 [DEBUG] [Thread-173769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:21:25.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:21: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-04-11T17:21:25.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:21:25.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:21:25.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:21:25.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:21:25.885 [DEBUG] [Thread-173769] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:21:35.176 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:35.178 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:40.734 [DEBUG] [Thread-173772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:55.772 [DEBUG] [Thread-173773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:21:55.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:21:55.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:21:55.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-04-11T17:21:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 21, 46), 0.13085, 99.0716, 0.0, 22.8298, 13.3621, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:21:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:21:46
2026-04-11T17:21:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:21:57.711 [DEBUG] [Thread-173774] [transport.py] [_log()] starting thread (client mode): 0xae516cb0
2026-04-11T17:21:57.711 [DEBUG] [Thread-173774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:21:57.724 [DEBUG] [Thread-173774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:21:57.724 [INFO] [Thread-173774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] client lang: <none>
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] server lang: <none>
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] kex follows: False
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] Compression: none
2026-04-11T17:21:57.727 [DEBUG] [Thread-173774] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:21:57.735 [DEBUG] [Thread-173774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:21:57.735 [DEBUG] [Thread-173774] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:21:57.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:21:57.735 [DEBUG] [Thread-173774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:21:57.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:21:57.736 [DEBUG] [Thread-173774] [transport.py] [_log()] userauth is OK
2026-04-11T17:21:57.736 [DEBUG] [Thread-173774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:21:57.736 [DEBUG] [Thread-173774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:21:57.736 [DEBUG] [Thread-173774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:21:57.736 [DEBUG] [Thread-173774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:21:57.754 [INFO] [Thread-173774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:21:57.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:21:58.571 [DEBUG] [Thread-173774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:21:58.571 [DEBUG] [Thread-173774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:21:58.572 [DEBUG] [Thread-173774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:21:58.612 [DEBUG] [Thread-173774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:21:58.612 [DEBUG] [Thread-173774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:21:58.616 [DEBUG] [Thread-173774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:21:58.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:21:58.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:21:58.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:21:58.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:21:58.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:21:58.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:21:58.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:21:58.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:21:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:21:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.639704 -999.00  +12.90  19.68     96  +12.40 1 3 1 3 1   887    0 0.28 -8.42 ----- 19.7 19.7 277.8 23.8 14.1 -0.8 13.9 -0.5 13.5 -0.8 13.9 -0.3
2026-04-11T17:21:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:21:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:21:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.639704
2026-04-11T17:21:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:21:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:21:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:21:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:21:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:21:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:21:46', tmtdew=0.13085, humidity=99.0716, cloud=0.0, wind=22.8298, temperature=13.3621, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:21:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:21:58.644 [DEBUG] [Thread-173774] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:21:58.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:21:58.737 [DEBUG] [Thread-173777] [transport.py] [_log()] starting thread (client mode): 0xae5150c0
2026-04-11T17:21:58.737 [DEBUG] [Thread-173777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:21:58.753 [DEBUG] [Thread-173777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:21:58.753 [INFO] [Thread-173777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:58.761 [DEBUG] [Thread-173777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] client lang: <none>
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] server lang: <none>
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] kex follows: False
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:21:58.762 [DEBUG] [Thread-173777] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:21:58.763 [DEBUG] [Thread-173777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:21:58.763 [DEBUG] [Thread-173777] [transport.py] [_log()] Compression: none
2026-04-11T17:21:58.763 [DEBUG] [Thread-173777] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:21:58.821 [DEBUG] [Thread-173777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:21:58.822 [DEBUG] [Thread-173777] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:21:58.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:21:58.823 [DEBUG] [Thread-173777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:21:58.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:21:58.880 [DEBUG] [Thread-173777] [transport.py] [_log()] userauth is OK
2026-04-11T17:21:58.881 [DEBUG] [Thread-173777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:21:58.881 [DEBUG] [Thread-173777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:21:58.881 [DEBUG] [Thread-173777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:21:58.881 [DEBUG] [Thread-173777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:21:58.899 [INFO] [Thread-173777] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:21: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-04-11T17:21:58.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:21:59.760 [DEBUG] [Thread-173777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:21:59.761 [DEBUG] [Thread-173777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:21:59.809 [DEBUG] [Thread-173777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:21:59.809 [DEBUG] [Thread-173777] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:21:59.818 [DEBUG] [Thread-173777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:21:59.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:21:59.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-04-11T17:21:59.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-04-11T17:21:59.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:21:59.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:21:59.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:21:59.852 [DEBUG] [Thread-173777] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:22:10.811 [DEBUG] [Thread-173779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:22:18.372 [DEBUG] [Thread-173780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:22:25.859 [DEBUG] [Thread-173781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:22:29.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:22:29.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:22:29.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:22:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 22, 21), 0.06543, 99.5358, 0.0, 21.668, 12.9808, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:22:31.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:22:21
2026-04-11T17:22:31.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:22:31.691 [DEBUG] [Thread-173782] [transport.py] [_log()] starting thread (client mode): 0xae5a4a30
2026-04-11T17:22:31.691 [DEBUG] [Thread-173782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:22:31.711 [DEBUG] [Thread-173782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:22:31.712 [INFO] [Thread-173782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:22:31.714 [DEBUG] [Thread-173782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] client lang: <none>
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] server lang: <none>
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] kex follows: False
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] Compression: none
2026-04-11T17:22:31.715 [DEBUG] [Thread-173782] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:22:31.732 [DEBUG] [Thread-173782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:22:31.733 [DEBUG] [Thread-173782] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:22:31.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:22:31.734 [DEBUG] [Thread-173782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:22:31.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:22:31.777 [DEBUG] [Thread-173782] [transport.py] [_log()] userauth is OK
2026-04-11T17:22:31.777 [DEBUG] [Thread-173782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:22:31.777 [DEBUG] [Thread-173782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:22:31.777 [DEBUG] [Thread-173782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:22:31.777 [DEBUG] [Thread-173782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:22:31.809 [INFO] [Thread-173782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:22:31.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:22:32.606 [DEBUG] [Thread-173782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:22:32.606 [DEBUG] [Thread-173782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:22:32.607 [DEBUG] [Thread-173782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:22:32.647 [DEBUG] [Thread-173782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:22:32.647 [DEBUG] [Thread-173782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:22:32.651 [DEBUG] [Thread-173782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:22:32.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:22:32.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:22:32.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:22:32.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:22:32.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:22:32.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:22:32.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:22:32.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:22:32.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:22:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.640398 -999.00  +12.80  19.12     96  +12.30 1 3 1 3 1   887    0 0.30 -7.49 ----- 19.1 19.1 272.0 23.1 14.1 -1.1 13.9 -0.5 13.5 -0.6 13.9 -0.3
2026-04-11T17:22:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:22:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:22:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.640398
2026-04-11T17:22:32.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:22:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:22:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:22:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:22:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:22:32.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:22:21', tmtdew=0.06543, humidity=99.5358, cloud=0.0, wind=21.668, temperature=12.9808, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:22:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:22:32.680 [DEBUG] [Thread-173782] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:22:32.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:22:32.777 [DEBUG] [Thread-173785] [transport.py] [_log()] starting thread (client mode): 0xb0fea020
2026-04-11T17:22:32.777 [DEBUG] [Thread-173785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:22:32.795 [DEBUG] [Thread-173785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:22:32.795 [INFO] [Thread-173785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:22:32.806 [DEBUG] [Thread-173785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:22:32.806 [DEBUG] [Thread-173785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:22:32.806 [DEBUG] [Thread-173785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] client lang: <none>
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] server lang: <none>
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] kex follows: False
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] Compression: none
2026-04-11T17:22:32.807 [DEBUG] [Thread-173785] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:22:32.868 [DEBUG] [Thread-173785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:22:32.869 [DEBUG] [Thread-173785] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:22:32.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:22:32.870 [DEBUG] [Thread-173785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:22:32.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:22:32.928 [DEBUG] [Thread-173785] [transport.py] [_log()] userauth is OK
2026-04-11T17:22:32.928 [DEBUG] [Thread-173785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:22:32.928 [DEBUG] [Thread-173785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:22:32.929 [DEBUG] [Thread-173785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:22:32.929 [DEBUG] [Thread-173785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:22:32.947 [INFO] [Thread-173785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:22:32.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:22:32.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:22:33.854 [DEBUG] [Thread-173785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:22:33.855 [DEBUG] [Thread-173785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:22:33.902 [DEBUG] [Thread-173785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:22:33.902 [DEBUG] [Thread-173785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:22:33.911 [DEBUG] [Thread-173785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:22:33.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:22:33.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:22:33.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:22:33.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:22:33.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:22:33.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:22:33.949 [DEBUG] [Thread-173785] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:22:35.316 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:22:35.318 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:22:40.896 [DEBUG] [Thread-173787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:22:55.953 [DEBUG] [Thread-173788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:23:03.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:23:03.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-04-11T17:23:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 22, 57), 0.112795, 99.5528, 0.0, 18.6685, 12.9479, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:23:05.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:22:57
2026-04-11T17:23:05.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:23:05.812 [DEBUG] [Thread-173789] [transport.py] [_log()] starting thread (client mode): 0xb0f54100
2026-04-11T17:23:05.812 [DEBUG] [Thread-173789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:23:05.834 [DEBUG] [Thread-173789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:23:05.834 [INFO] [Thread-173789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] client lang: <none>
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] server lang: <none>
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] kex follows: False
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:23:05.837 [DEBUG] [Thread-173789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:23:05.838 [DEBUG] [Thread-173789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:23:05.838 [DEBUG] [Thread-173789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:23:05.838 [DEBUG] [Thread-173789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:23:05.838 [DEBUG] [Thread-173789] [transport.py] [_log()] Compression: none
2026-04-11T17:23:05.838 [DEBUG] [Thread-173789] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:23:05.854 [DEBUG] [Thread-173789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:23:05.855 [DEBUG] [Thread-173789] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:23:05.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:23:05.856 [DEBUG] [Thread-173789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:23:05.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:23:05.858 [DEBUG] [Thread-173789] [transport.py] [_log()] userauth is OK
2026-04-11T17:23:05.858 [DEBUG] [Thread-173789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:23:05.859 [DEBUG] [Thread-173789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:23:05.859 [DEBUG] [Thread-173789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:23:05.859 [DEBUG] [Thread-173789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:23:05.884 [INFO] [Thread-173789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:23:05.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:23:06.664 [DEBUG] [Thread-173789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:23:06.664 [DEBUG] [Thread-173789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:23:06.665 [DEBUG] [Thread-173789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:23:06.705 [DEBUG] [Thread-173789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:23:06.705 [DEBUG] [Thread-173789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:23:06.708 [DEBUG] [Thread-173789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:23:06.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:23:06.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:23:06.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:23:06.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:23:06.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:23:06.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:23:06.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:23:06.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:23:06.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:23:06.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.640746 -999.00  +12.80  15.76     97  +12.40 1 3 1 3 1   887    0 0.30 -7.55 ----- 15.8 15.8 278.2 21.0 14.0 -0.7 13.9 -0.4 13.4 -1.1 13.9 -0.3
2026-04-11T17:23:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:23:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:23:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.640746
2026-04-11T17:23:06.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:23:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:23:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:23:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:23:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:23:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:22:57', tmtdew=0.112795, humidity=99.5528, cloud=0.0, wind=18.6685, temperature=12.9479, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:22:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:23:06.738 [DEBUG] [Thread-173789] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:23:06.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:23:06.825 [DEBUG] [Thread-173792] [transport.py] [_log()] starting thread (client mode): 0xae5a56f0
2026-04-11T17:23:06.825 [DEBUG] [Thread-173792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:23:06.840 [DEBUG] [Thread-173792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:23:06.840 [INFO] [Thread-173792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:23:06.847 [DEBUG] [Thread-173792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:23:06.847 [DEBUG] [Thread-173792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] client lang: <none>
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] server lang: <none>
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] kex follows: False
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] Compression: none
2026-04-11T17:23:06.848 [DEBUG] [Thread-173792] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:23:06.908 [DEBUG] [Thread-173792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:23:06.909 [DEBUG] [Thread-173792] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:23:06.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:23:06.910 [DEBUG] [Thread-173792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:23:06.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:23:06.972 [DEBUG] [Thread-173792] [transport.py] [_log()] userauth is OK
2026-04-11T17:23:06.972 [DEBUG] [Thread-173792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:23:06.972 [DEBUG] [Thread-173792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:23:06.972 [DEBUG] [Thread-173792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:23:06.973 [DEBUG] [Thread-173792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:23:06.991 [INFO] [Thread-173792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:23:06.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:23:06.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:23:07.821 [DEBUG] [Thread-173792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:23:07.821 [DEBUG] [Thread-173792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:23:07.869 [DEBUG] [Thread-173792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:23:07.869 [DEBUG] [Thread-173792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:23:07.877 [DEBUG] [Thread-173792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:23:07.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:23:07.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:23:07.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:23:07.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:23:07.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:23:07.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:23:07.910 [DEBUG] [Thread-173792] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:23:10.990 [DEBUG] [Thread-173794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:18.427 [DEBUG] [Thread-173795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:26.042 [DEBUG] [Thread-173796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:35.459 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:35.460 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:23:37.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:23:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:23:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 22, 57), 0.112795, 99.5528, 0.0, 18.6685, 12.9479, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:23:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:22:57
2026-04-11T17:23:39.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:23:39.755 [DEBUG] [Thread-173797] [transport.py] [_log()] starting thread (client mode): 0xae514070
2026-04-11T17:23:39.755 [DEBUG] [Thread-173797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:23:39.775 [DEBUG] [Thread-173797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:23:39.775 [INFO] [Thread-173797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:23:39.778 [DEBUG] [Thread-173797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:23:39.778 [DEBUG] [Thread-173797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:23:39.778 [DEBUG] [Thread-173797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:23:39.778 [DEBUG] [Thread-173797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] client lang: <none>
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] server lang: <none>
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] kex follows: False
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] Compression: none
2026-04-11T17:23:39.779 [DEBUG] [Thread-173797] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:23:39.796 [DEBUG] [Thread-173797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:23:39.797 [DEBUG] [Thread-173797] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:23:39.797 [DEBUG] [Thread-173797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:23:39.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:23:39.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:23:39.799 [DEBUG] [Thread-173797] [transport.py] [_log()] userauth is OK
2026-04-11T17:23:39.799 [DEBUG] [Thread-173797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:23:39.800 [DEBUG] [Thread-173797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:23:39.800 [DEBUG] [Thread-173797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:23:39.800 [DEBUG] [Thread-173797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:23:39.823 [INFO] [Thread-173797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:23:39.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:23:40.624 [DEBUG] [Thread-173797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:23:40.624 [DEBUG] [Thread-173797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:23:40.625 [DEBUG] [Thread-173797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:23:40.665 [DEBUG] [Thread-173797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:23:40.665 [DEBUG] [Thread-173797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:23:40.669 [DEBUG] [Thread-173797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:23:40.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:23:40.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:23:40.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:23:40.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:23:40.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:23:40.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:23:40.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:23:40.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.641093 -999.00  +12.90  17.77     97  +12.40 1 3 1 3 1   887    0 0.27 -8.02 ----- 17.8 17.8 283.2 23.5 14.1 -0.8 13.9 -0.5 13.5 -0.3 13.8 -0.2
2026-04-11T17:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.641093
2026-04-11T17:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:23:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:23:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:23:40.696 [DEBUG] [Thread-173797] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:23:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:23:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:23:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:22:57', tmtdew=0.112795, humidity=99.5528, cloud=0.0, wind=18.6685, temperature=12.9479, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:23:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:23:40.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:23:40.790 [DEBUG] [Thread-173800] [transport.py] [_log()] starting thread (client mode): 0xb0f548e0
2026-04-11T17:23:40.790 [DEBUG] [Thread-173800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:23:40.805 [DEBUG] [Thread-173800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:23:40.805 [INFO] [Thread-173800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] client lang: <none>
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] server lang: <none>
2026-04-11T17:23:40.813 [DEBUG] [Thread-173800] [transport.py] [_log()] kex follows: False
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] Compression: none
2026-04-11T17:23:40.814 [DEBUG] [Thread-173800] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:23:40.871 [DEBUG] [Thread-173800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:23:40.871 [DEBUG] [Thread-173800] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:23:40.872 [DEBUG] [Thread-173800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:23:40.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:23:40.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:23:40.927 [DEBUG] [Thread-173800] [transport.py] [_log()] userauth is OK
2026-04-11T17:23:40.928 [DEBUG] [Thread-173800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:23:40.928 [DEBUG] [Thread-173800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:23:40.928 [DEBUG] [Thread-173800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:23:40.928 [DEBUG] [Thread-173800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:23:40.947 [INFO] [Thread-173800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:23:40.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:23:40.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:23:41.078 [DEBUG] [Thread-173802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:23:41.767 [DEBUG] [Thread-173800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:23:41.767 [DEBUG] [Thread-173800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:23:41.815 [DEBUG] [Thread-173800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:23:41.815 [DEBUG] [Thread-173800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:23:41.824 [DEBUG] [Thread-173800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:23:41.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:23:41.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-04-11T17:23:41.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:23:41.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:23:41.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:23:41.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:23:41.857 [DEBUG] [Thread-173800] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:23:56.133 [DEBUG] [Thread-173803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:11.173 [DEBUG] [Thread-173804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:24:11.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:24:11.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-04-11T17:24:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 23, 32), 0.11024, 99.5694, 0.0, 19.8328, 13.0142, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:24:13.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:23:32
2026-04-11T17:24:13.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:24:13.757 [DEBUG] [Thread-173805] [transport.py] [_log()] starting thread (client mode): 0xae537310
2026-04-11T17:24:13.757 [DEBUG] [Thread-173805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:24:13.776 [DEBUG] [Thread-173805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:24:13.777 [INFO] [Thread-173805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:24:13.778 [DEBUG] [Thread-173805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:24:13.778 [DEBUG] [Thread-173805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:24:13.778 [DEBUG] [Thread-173805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:24:13.778 [DEBUG] [Thread-173805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:13.778 [DEBUG] [Thread-173805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:13.778 [DEBUG] [Thread-173805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] client lang: <none>
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] server lang: <none>
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] kex follows: False
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] Compression: none
2026-04-11T17:24:13.779 [DEBUG] [Thread-173805] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:24:13.798 [DEBUG] [Thread-173805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:24:13.799 [DEBUG] [Thread-173805] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:24:13.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:24:13.800 [DEBUG] [Thread-173805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:24:13.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:24:13.803 [DEBUG] [Thread-173805] [transport.py] [_log()] userauth is OK
2026-04-11T17:24:13.803 [DEBUG] [Thread-173805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:24:13.803 [DEBUG] [Thread-173805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:24:13.803 [DEBUG] [Thread-173805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:24:13.804 [DEBUG] [Thread-173805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:24:13.824 [INFO] [Thread-173805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:24:13.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:24:14.633 [DEBUG] [Thread-173805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:24:14.634 [DEBUG] [Thread-173805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:24:14.634 [DEBUG] [Thread-173805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:24:14.674 [DEBUG] [Thread-173805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:24:14.674 [DEBUG] [Thread-173805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:24:14.677 [DEBUG] [Thread-173805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:24:14.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:24:14.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:24:14.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:24:14.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:24:14.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:24:14.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:24:14.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:24:14.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:24:14.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:24:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.641441 -999.00  +12.90  18.18     97  +12.40 1 3 1 3 1   887    0 0.32 -6.82 ----- 18.2 18.2 273.2 24.6 14.0 -1.0 13.9 -0.4 13.4 -0.3 13.9 -0.3
2026-04-11T17:24:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:24:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:24:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.641441
2026-04-11T17:24:14.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:24:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:24:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:24:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:24:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:24:14.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:23:32', tmtdew=0.11024, humidity=99.5694, cloud=0.0, wind=19.8328, temperature=13.0142, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:23:40.502', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:24:14.705 [DEBUG] [Thread-173805] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:24:14.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:24:14.795 [DEBUG] [Thread-173808] [transport.py] [_log()] starting thread (client mode): 0xae536560
2026-04-11T17:24:14.795 [DEBUG] [Thread-173808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:24:14.809 [DEBUG] [Thread-173808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:24:14.809 [INFO] [Thread-173808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:24:14.817 [DEBUG] [Thread-173808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:24:14.817 [DEBUG] [Thread-173808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:24:14.817 [DEBUG] [Thread-173808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:24:14.817 [DEBUG] [Thread-173808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:14.817 [DEBUG] [Thread-173808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:14.817 [DEBUG] [Thread-173808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] client lang: <none>
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] server lang: <none>
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] kex follows: False
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:24:14.818 [DEBUG] [Thread-173808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:24:14.819 [DEBUG] [Thread-173808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:24:14.819 [DEBUG] [Thread-173808] [transport.py] [_log()] Compression: none
2026-04-11T17:24:14.819 [DEBUG] [Thread-173808] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:24:14.876 [DEBUG] [Thread-173808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:24:14.876 [DEBUG] [Thread-173808] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:24:14.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:24:14.878 [DEBUG] [Thread-173808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:24:14.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:24:14.939 [DEBUG] [Thread-173808] [transport.py] [_log()] userauth is OK
2026-04-11T17:24:14.940 [DEBUG] [Thread-173808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:24:14.940 [DEBUG] [Thread-173808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:24:14.940 [DEBUG] [Thread-173808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:24:14.940 [DEBUG] [Thread-173808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:24:14.959 [INFO] [Thread-173808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:24:14.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:24:14.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:24:15.787 [DEBUG] [Thread-173808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:24:15.787 [DEBUG] [Thread-173808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:24:15.835 [DEBUG] [Thread-173808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:24:15.835 [DEBUG] [Thread-173808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:24:15.844 [DEBUG] [Thread-173808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:24:15.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:24:15.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-04-11T17:24:15.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-04-11T17:24:15.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:24:15.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:24:15.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:24:15.880 [DEBUG] [Thread-173808] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:24:18.476 [DEBUG] [Thread-173810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:26.211 [DEBUG] [Thread-173811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:35.602 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:35.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:41.257 [DEBUG] [Thread-173812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:24:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:24:45.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:24:45.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-04-11T17:24:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 24, 8), 0.099995, 99.6356, 0.0, 19.4447, 13.0473, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:24:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:24:08
2026-04-11T17:24:47.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:24:47.738 [DEBUG] [Thread-173813] [transport.py] [_log()] starting thread (client mode): 0xb0f55960
2026-04-11T17:24:47.738 [DEBUG] [Thread-173813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:24:47.759 [DEBUG] [Thread-173813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:24:47.759 [INFO] [Thread-173813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:47.760 [DEBUG] [Thread-173813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] client lang: <none>
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] server lang: <none>
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] kex follows: False
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] Compression: none
2026-04-11T17:24:47.761 [DEBUG] [Thread-173813] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:24:47.776 [DEBUG] [Thread-173813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:24:47.776 [DEBUG] [Thread-173813] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:24:47.776 [DEBUG] [Thread-173813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:24:47.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:24:47.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:24:47.777 [DEBUG] [Thread-173813] [transport.py] [_log()] userauth is OK
2026-04-11T17:24:47.777 [DEBUG] [Thread-173813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:24:47.777 [DEBUG] [Thread-173813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:24:47.777 [DEBUG] [Thread-173813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:24:47.777 [DEBUG] [Thread-173813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:24:47.787 [INFO] [Thread-173813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:24:47.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:24:48.576 [DEBUG] [Thread-173813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:24:48.576 [DEBUG] [Thread-173813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:24:48.576 [DEBUG] [Thread-173813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:24:48.617 [DEBUG] [Thread-173813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:24:48.617 [DEBUG] [Thread-173813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:24:48.620 [DEBUG] [Thread-173813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:24:48.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:24:48.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:24:48.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:24:48.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:24:48.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:24:48.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:24:48.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:24:48.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:24:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:24:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.641787 -999.00  +12.90  16.65     97  +12.50 1 3 1 3 1   887    0 0.32 -6.88 ----- 16.6 16.6 282.0 22.8 14.0 -0.6 13.8 -0.2 13.5 -0.4 13.9 -0.0
2026-04-11T17:24:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:24:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:24:48.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.641787
2026-04-11T17:24:48.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:24:48.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:24:48.651 [DEBUG] [Thread-173813] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:24:48.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:24:48.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:24:48.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:24:48.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:24:08', tmtdew=0.099995, humidity=99.6356, cloud=0.0, wind=19.4447, temperature=13.0473, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:24:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:24:48.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:24:48.749 [DEBUG] [Thread-173816] [transport.py] [_log()] starting thread (client mode): 0xb0fe9480
2026-04-11T17:24:48.749 [DEBUG] [Thread-173816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:24:48.763 [DEBUG] [Thread-173816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:24:48.763 [INFO] [Thread-173816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:24:48.771 [DEBUG] [Thread-173816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:24:48.771 [DEBUG] [Thread-173816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:24:48.771 [DEBUG] [Thread-173816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:24:48.771 [DEBUG] [Thread-173816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:48.771 [DEBUG] [Thread-173816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:24:48.771 [DEBUG] [Thread-173816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] client lang: <none>
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] server lang: <none>
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] kex follows: False
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] Compression: none
2026-04-11T17:24:48.772 [DEBUG] [Thread-173816] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:24:48.831 [DEBUG] [Thread-173816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:24:48.831 [DEBUG] [Thread-173816] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:24:48.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:24:48.832 [DEBUG] [Thread-173816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:24:48.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:24:48.887 [DEBUG] [Thread-173816] [transport.py] [_log()] userauth is OK
2026-04-11T17:24:48.887 [DEBUG] [Thread-173816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:24:48.888 [DEBUG] [Thread-173816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:24:48.888 [DEBUG] [Thread-173816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:24:48.888 [DEBUG] [Thread-173816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:24:48.907 [INFO] [Thread-173816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:24:48.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:24:48.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:24:49.725 [DEBUG] [Thread-173816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:24:49.725 [DEBUG] [Thread-173816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:24:49.773 [DEBUG] [Thread-173816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:24:49.774 [DEBUG] [Thread-173816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:24:49.783 [DEBUG] [Thread-173816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:24:49.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:24:49.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-04-11T17:24:49.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-04-11T17:24:49.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:24:49.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:24:49.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:24:49.820 [DEBUG] [Thread-173816] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:24:56.299 [DEBUG] [Thread-173818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:11.355 [DEBUG] [Thread-173819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:18.517 [DEBUG] [Thread-173820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:19.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:25:19.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:25:19.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-04-11T17:25:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 24, 43), 0.12051, 99.1385, 0.0, 23.8529, 13.5282, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:25:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:24:43
2026-04-11T17:25:21.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:25:21.695 [DEBUG] [Thread-173821] [transport.py] [_log()] starting thread (client mode): 0xae537730
2026-04-11T17:25:21.695 [DEBUG] [Thread-173821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:25:21.716 [DEBUG] [Thread-173821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:25:21.716 [INFO] [Thread-173821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] client lang: <none>
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] server lang: <none>
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] kex follows: False
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] Compression: none
2026-04-11T17:25:21.719 [DEBUG] [Thread-173821] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:25:21.737 [DEBUG] [Thread-173821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:25:21.738 [DEBUG] [Thread-173821] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:25:21.738 [DEBUG] [Thread-173821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:25:21.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:25:21.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:25:21.740 [DEBUG] [Thread-173821] [transport.py] [_log()] userauth is OK
2026-04-11T17:25:21.740 [DEBUG] [Thread-173821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:25:21.740 [DEBUG] [Thread-173821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:25:21.741 [DEBUG] [Thread-173821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:25:21.741 [DEBUG] [Thread-173821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:25:21.777 [INFO] [Thread-173821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:25:21.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:25:22.903 [DEBUG] [Thread-173821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:25:22.904 [DEBUG] [Thread-173821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:25:22.904 [DEBUG] [Thread-173821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:25:22.945 [DEBUG] [Thread-173821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:25:22.945 [DEBUG] [Thread-173821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:25:22.949 [DEBUG] [Thread-173821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:25:22.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:25:22.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:25:22.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:25:22.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:25:22.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:25:22.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:25:22.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:25:22.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:25:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:25:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.642135 -999.00  +13.00  14.35     97  +12.50 1 3 1 3 1   887    0 0.29 -7.55 ----- 14.3 14.3 293.4 19.0 14.1 -0.5 13.9 -0.3 13.6 -0.1 13.9 0.0
2026-04-11T17:25:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:25:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:25:22.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.642135
2026-04-11T17:25:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:25:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:25:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:25:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:25:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:25:22.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:24:43', tmtdew=0.12051, humidity=99.1385, cloud=0.0, wind=23.8529, temperature=13.5282, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:24:40.464', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:25:22.980 [DEBUG] [Thread-173821] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:25:23.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:25:23.072 [DEBUG] [Thread-173824] [transport.py] [_log()] starting thread (client mode): 0xb0f554e0
2026-04-11T17:25:23.072 [DEBUG] [Thread-173824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:25:23.086 [DEBUG] [Thread-173824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:25:23.087 [INFO] [Thread-173824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:25:23.094 [DEBUG] [Thread-173824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:25:23.094 [DEBUG] [Thread-173824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] client lang: <none>
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] server lang: <none>
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] kex follows: False
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] Compression: none
2026-04-11T17:25:23.095 [DEBUG] [Thread-173824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:25:23.158 [DEBUG] [Thread-173824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:25:23.158 [DEBUG] [Thread-173824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:25:23.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:25:23.159 [DEBUG] [Thread-173824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:25:23.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:25:23.215 [DEBUG] [Thread-173824] [transport.py] [_log()] userauth is OK
2026-04-11T17:25:23.215 [DEBUG] [Thread-173824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:25:23.216 [DEBUG] [Thread-173824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:25:23.216 [DEBUG] [Thread-173824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:25:23.216 [DEBUG] [Thread-173824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:25:23.240 [INFO] [Thread-173824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:25:23.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:25:23.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:25:24.135 [DEBUG] [Thread-173824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:25:24.135 [DEBUG] [Thread-173824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:25:24.183 [DEBUG] [Thread-173824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:25:24.183 [DEBUG] [Thread-173824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:25:24.193 [DEBUG] [Thread-173824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:25:24.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:25:24.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-04-11T17:25:24.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-04-11T17:25:24.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:25:24.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:25:24.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:25:24.230 [DEBUG] [Thread-173824] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:25:26.392 [DEBUG] [Thread-173826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:35.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:35.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:41.452 [DEBUG] [Thread-173827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:25:54.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:25:54.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-04-11T17:25:55.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 25, 18), 0.11026, 99.5692, 0.0, 21.4916, 13.0309, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:25:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:25:18
2026-04-11T17:25:56.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:25:56.208 [DEBUG] [Thread-173828] [transport.py] [_log()] starting thread (client mode): 0xb0f54790
2026-04-11T17:25:56.209 [DEBUG] [Thread-173828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:25:56.229 [DEBUG] [Thread-173828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:25:56.229 [INFO] [Thread-173828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] client lang: <none>
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] server lang: <none>
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] kex follows: False
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] Compression: none
2026-04-11T17:25:56.232 [DEBUG] [Thread-173828] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:25:56.249 [DEBUG] [Thread-173828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:25:56.249 [DEBUG] [Thread-173828] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:25:56.249 [DEBUG] [Thread-173828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:25:56.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:25:56.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:25:56.250 [DEBUG] [Thread-173828] [transport.py] [_log()] userauth is OK
2026-04-11T17:25:56.250 [DEBUG] [Thread-173828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:25:56.250 [DEBUG] [Thread-173828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:25:56.250 [DEBUG] [Thread-173828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:25:56.250 [DEBUG] [Thread-173828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:25:56.259 [INFO] [Thread-173828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:25:56.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:25:56.490 [DEBUG] [Thread-173830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:25:57.062 [DEBUG] [Thread-173828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:25:57.063 [DEBUG] [Thread-173828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:25:57.063 [DEBUG] [Thread-173828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:25:57.104 [DEBUG] [Thread-173828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:25:57.104 [DEBUG] [Thread-173828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:25:57.107 [DEBUG] [Thread-173828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:25:57.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:25:57.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:25:57.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:25:57.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:25:57.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:25:57.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:25:57.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:25:57.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:25:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:25:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.642482 -999.00  +13.00  14.98     97  +12.50 1 3 1 3 1   887    0 0.32 -6.75 ----- 15.0 15.0 286.0 21.4 14.1 -0.5 13.9 -0.3 13.6 -0.2 13.9 -0.1
2026-04-11T17:25:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:25:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:25:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.642482
2026-04-11T17:25:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:25:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:25:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:25:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:25:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:25:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:25:18', tmtdew=0.11026, humidity=99.5692, cloud=0.0, wind=21.4916, temperature=13.0309, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:25:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:25:57.136 [DEBUG] [Thread-173828] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:25:57.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:25:57.229 [DEBUG] [Thread-173832] [transport.py] [_log()] starting thread (client mode): 0xae5636a0
2026-04-11T17:25:57.229 [DEBUG] [Thread-173832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:25:57.244 [DEBUG] [Thread-173832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:25:57.244 [INFO] [Thread-173832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:25:57.251 [DEBUG] [Thread-173832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:25:57.251 [DEBUG] [Thread-173832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:25:57.251 [DEBUG] [Thread-173832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:25:57.251 [DEBUG] [Thread-173832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:57.251 [DEBUG] [Thread-173832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:25:57.251 [DEBUG] [Thread-173832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] client lang: <none>
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] server lang: <none>
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] kex follows: False
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] Compression: none
2026-04-11T17:25:57.252 [DEBUG] [Thread-173832] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:25:57.310 [DEBUG] [Thread-173832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:25:57.311 [DEBUG] [Thread-173832] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:25:57.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:25:57.312 [DEBUG] [Thread-173832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:25:57.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:25:57.366 [DEBUG] [Thread-173832] [transport.py] [_log()] userauth is OK
2026-04-11T17:25:57.366 [DEBUG] [Thread-173832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:25:57.366 [DEBUG] [Thread-173832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:25:57.366 [DEBUG] [Thread-173832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:25:57.366 [DEBUG] [Thread-173832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:25:57.380 [INFO] [Thread-173832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:25:57.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:25:57.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:25:58.209 [DEBUG] [Thread-173832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:25:58.210 [DEBUG] [Thread-173832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:25:58.258 [DEBUG] [Thread-173832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:25:58.258 [DEBUG] [Thread-173832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:25:58.267 [DEBUG] [Thread-173832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:25:58.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:25:58.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-04-11T17:25:58.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-04-11T17:25:58.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:25:58.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:25:58.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:25:58.303 [DEBUG] [Thread-173832] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:26:11.528 [DEBUG] [Thread-173834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:26:18.571 [DEBUG] [Thread-173835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:26:26.570 [DEBUG] [Thread-173836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:26:28.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:26:28.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:26:28.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-04-11T17:26:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 25, 54), 0.13075, 99.0721, 0.0, 21.8419, 13.3292, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:26:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:25:54
2026-04-11T17:26:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:26:30.136 [DEBUG] [Thread-173837] [transport.py] [_log()] starting thread (client mode): 0xb0f54cd0
2026-04-11T17:26:30.136 [DEBUG] [Thread-173837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:26:30.156 [DEBUG] [Thread-173837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:26:30.156 [INFO] [Thread-173837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:26:30.159 [DEBUG] [Thread-173837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:26:30.159 [DEBUG] [Thread-173837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:26:30.159 [DEBUG] [Thread-173837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] client lang: <none>
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] server lang: <none>
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] kex follows: False
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] Compression: none
2026-04-11T17:26:30.160 [DEBUG] [Thread-173837] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:26:30.177 [DEBUG] [Thread-173837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:26:30.178 [DEBUG] [Thread-173837] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:26:30.178 [DEBUG] [Thread-173837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:26:30.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:26:30.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:26:30.181 [DEBUG] [Thread-173837] [transport.py] [_log()] userauth is OK
2026-04-11T17:26:30.181 [DEBUG] [Thread-173837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:26:30.181 [DEBUG] [Thread-173837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:26:30.181 [DEBUG] [Thread-173837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:26:30.181 [DEBUG] [Thread-173837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:26:30.196 [INFO] [Thread-173837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:26:30.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:26:30.992 [DEBUG] [Thread-173837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:26:30.992 [DEBUG] [Thread-173837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:26:30.992 [DEBUG] [Thread-173837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:26:31.033 [DEBUG] [Thread-173837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:26:31.033 [DEBUG] [Thread-173837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:26:31.037 [DEBUG] [Thread-173837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:26:31.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:26:31.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:26:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:26:31.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:26:31.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:26:31.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:26:31.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:26:31.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:26:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:26:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.642829 -999.00  +13.00   9.30     97  +12.60 1 3 1 3 1   887    0 0.31 -6.84 ----- 9.3 9.3 286.0 17.2 14.1 -0.3 13.9 -0.2 13.5 -0.4 14.0 -0.1
2026-04-11T17:26:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:26:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:26:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.642829
2026-04-11T17:26:31.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:26:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:26:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:26:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:26:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:26:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:25:54', tmtdew=0.13075, humidity=99.0721, cloud=0.0, wind=21.8419, temperature=13.3292, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:25:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:26:31.066 [DEBUG] [Thread-173837] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:26:31.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:26:31.158 [DEBUG] [Thread-173840] [transport.py] [_log()] starting thread (client mode): 0xb0f54460
2026-04-11T17:26:31.158 [DEBUG] [Thread-173840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:26:31.175 [DEBUG] [Thread-173840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:26:31.175 [INFO] [Thread-173840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:26:31.182 [DEBUG] [Thread-173840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:26:31.183 [DEBUG] [Thread-173840] [transport.py] [_log()] client lang: <none>
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] server lang: <none>
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] kex follows: False
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] Compression: none
2026-04-11T17:26:31.184 [DEBUG] [Thread-173840] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:26:31.242 [DEBUG] [Thread-173840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:26:31.243 [DEBUG] [Thread-173840] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:26:31.244 [DEBUG] [Thread-173840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:26:31.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:26:31.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:26:31.299 [DEBUG] [Thread-173840] [transport.py] [_log()] userauth is OK
2026-04-11T17:26:31.300 [DEBUG] [Thread-173840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:26:31.300 [DEBUG] [Thread-173840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:26:31.300 [DEBUG] [Thread-173840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:26:31.300 [DEBUG] [Thread-173840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:26:31.322 [INFO] [Thread-173840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:26:31.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:26:31.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:26:32.164 [DEBUG] [Thread-173840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:26:32.165 [DEBUG] [Thread-173840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:26:32.213 [DEBUG] [Thread-173840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:26:32.213 [DEBUG] [Thread-173840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:26:32.221 [DEBUG] [Thread-173840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:26:32.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:26:32.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-04-11T17:26:32.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:26:32.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:26:32.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:26:32.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:26:32.255 [DEBUG] [Thread-173840] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:26:35.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:26:35.886 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:26:41.604 [DEBUG] [Thread-173842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:26:56.655 [DEBUG] [Thread-173843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:02.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:27:02.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:27:02.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-04-11T17:27:03.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 26, 30), 0.057705, 99.5857, 0.0, 20.1326, 13.0309, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:27:03.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:26:30
2026-04-11T17:27:03.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:27:04.119 [DEBUG] [Thread-173844] [transport.py] [_log()] starting thread (client mode): 0xb0feb1c0
2026-04-11T17:27:04.119 [DEBUG] [Thread-173844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:27:04.139 [DEBUG] [Thread-173844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:27:04.139 [INFO] [Thread-173844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] client lang: <none>
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] server lang: <none>
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] kex follows: False
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] Compression: none
2026-04-11T17:27:04.141 [DEBUG] [Thread-173844] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:27:04.160 [DEBUG] [Thread-173844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:27:04.160 [DEBUG] [Thread-173844] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:27:04.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:27:04.161 [DEBUG] [Thread-173844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:27:04.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:27:04.163 [DEBUG] [Thread-173844] [transport.py] [_log()] userauth is OK
2026-04-11T17:27:04.163 [DEBUG] [Thread-173844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:27:04.163 [DEBUG] [Thread-173844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:27:04.163 [DEBUG] [Thread-173844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:27:04.164 [DEBUG] [Thread-173844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:27:04.199 [INFO] [Thread-173844] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:27:04.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:27:04.951 [DEBUG] [Thread-173844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:27:04.951 [DEBUG] [Thread-173844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:27:04.951 [DEBUG] [Thread-173844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:27:04.992 [DEBUG] [Thread-173844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:27:04.992 [DEBUG] [Thread-173844] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:27:04.996 [DEBUG] [Thread-173844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:27:05.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:27:05.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:27:05.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:27:05.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:27:05.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:27:05.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:27:05.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:27:05.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:27:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:27:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.643176 -999.00  +13.10  10.27     97  +12.60 1 3 1 3 1   887    0 0.30 -6.76 ----- 10.3 10.3 293.2 14.5 14.1 -0.3 14.0 -0.2 13.6 -0.3 14.0 -0.2
2026-04-11T17:27:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:27:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:27:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.643176
2026-04-11T17:27:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:27:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:27:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:27:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:27:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:27:05.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:26:30', tmtdew=0.057705, humidity=99.5857, cloud=0.0, wind=20.1326, temperature=13.0309, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:26:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:27:05.022 [DEBUG] [Thread-173844] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:27:05.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:27:05.111 [DEBUG] [Thread-173847] [transport.py] [_log()] starting thread (client mode): 0xb0feb400
2026-04-11T17:27:05.112 [DEBUG] [Thread-173847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:27:05.126 [DEBUG] [Thread-173847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:27:05.126 [INFO] [Thread-173847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] client lang: <none>
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] server lang: <none>
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] kex follows: False
2026-04-11T17:27:05.134 [DEBUG] [Thread-173847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:27:05.135 [DEBUG] [Thread-173847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:27:05.135 [DEBUG] [Thread-173847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:27:05.135 [DEBUG] [Thread-173847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:27:05.135 [DEBUG] [Thread-173847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:27:05.135 [DEBUG] [Thread-173847] [transport.py] [_log()] Compression: none
2026-04-11T17:27:05.135 [DEBUG] [Thread-173847] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:27:05.193 [DEBUG] [Thread-173847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:27:05.194 [DEBUG] [Thread-173847] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:27:05.194 [DEBUG] [Thread-173847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:27:05.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:27:05.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:27:05.250 [DEBUG] [Thread-173847] [transport.py] [_log()] userauth is OK
2026-04-11T17:27:05.251 [DEBUG] [Thread-173847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:27:05.251 [DEBUG] [Thread-173847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:27:05.251 [DEBUG] [Thread-173847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:27:05.251 [DEBUG] [Thread-173847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:27:05.269 [INFO] [Thread-173847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:27:05.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:27:05.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:27:06.071 [DEBUG] [Thread-173847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:27:06.071 [DEBUG] [Thread-173847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:27:06.119 [DEBUG] [Thread-173847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:27:06.119 [DEBUG] [Thread-173847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:27:06.128 [DEBUG] [Thread-173847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:27:06.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:27:06.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-04-11T17:27:06.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:27:06.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:27:06.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:27:06.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:27:06.165 [DEBUG] [Thread-173847] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:27:11.692 [DEBUG] [Thread-173849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:18.622 [DEBUG] [Thread-173850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:26.745 [DEBUG] [Thread-173851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:36.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:36.033 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:27:36.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:27:36.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-04-11T17:27:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 27, 6), 0.06027, 99.5692, 0.0, 20.362, 13.0475, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:27:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:27:06
2026-04-11T17:27:37.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:27:38.060 [DEBUG] [Thread-173852] [transport.py] [_log()] starting thread (client mode): 0xb0f54310
2026-04-11T17:27:38.060 [DEBUG] [Thread-173852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:27:38.079 [DEBUG] [Thread-173852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:27:38.079 [INFO] [Thread-173852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:27:38.082 [DEBUG] [Thread-173852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:27:38.082 [DEBUG] [Thread-173852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:27:38.082 [DEBUG] [Thread-173852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:27:38.082 [DEBUG] [Thread-173852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:38.082 [DEBUG] [Thread-173852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] client lang: <none>
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] server lang: <none>
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] kex follows: False
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] Compression: none
2026-04-11T17:27:38.083 [DEBUG] [Thread-173852] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:27:38.098 [DEBUG] [Thread-173852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:27:38.099 [DEBUG] [Thread-173852] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:27:38.099 [DEBUG] [Thread-173852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:27:38.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:27:38.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:27:38.101 [DEBUG] [Thread-173852] [transport.py] [_log()] userauth is OK
2026-04-11T17:27:38.101 [DEBUG] [Thread-173852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:27:38.101 [DEBUG] [Thread-173852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:27:38.101 [DEBUG] [Thread-173852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:27:38.101 [DEBUG] [Thread-173852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:27:38.136 [INFO] [Thread-173852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:27:38.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:27:38.873 [DEBUG] [Thread-173852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:27:38.874 [DEBUG] [Thread-173852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:27:38.874 [DEBUG] [Thread-173852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:27:38.914 [DEBUG] [Thread-173852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:27:38.914 [DEBUG] [Thread-173852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:27:38.918 [DEBUG] [Thread-173852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:27:38.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:27:38.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:27:38.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:27:38.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:27:38.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:27:38.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:27:38.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:27:38.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:27:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:27:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.643871 -999.00  +12.90  19.80     97  +12.40 1 3 1 3 1   887    0 0.24 -8.08 ----- 19.8 19.8 277.6 25.2 14.1 -0.9 13.9 -0.4 13.6 -0.5 14.0 -0.1
2026-04-11T17:27:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:27:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:27:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.643871
2026-04-11T17:27:38.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:27:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:27:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:27:38.946 [DEBUG] [Thread-173852] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:27:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:27:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:27:38.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:27:06', tmtdew=0.06027, humidity=99.5692, cloud=0.0, wind=20.362, temperature=13.0475, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:27:10.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:27:39.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:27:39.037 [DEBUG] [Thread-173855] [transport.py] [_log()] starting thread (client mode): 0xae51a650
2026-04-11T17:27:39.037 [DEBUG] [Thread-173855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:27:39.053 [DEBUG] [Thread-173855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:27:39.053 [INFO] [Thread-173855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] client lang: <none>
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] server lang: <none>
2026-04-11T17:27:39.060 [DEBUG] [Thread-173855] [transport.py] [_log()] kex follows: False
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] Compression: none
2026-04-11T17:27:39.061 [DEBUG] [Thread-173855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:27:39.118 [DEBUG] [Thread-173855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:27:39.119 [DEBUG] [Thread-173855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:27:39.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:27:39.120 [DEBUG] [Thread-173855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:27:39.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:27:39.174 [DEBUG] [Thread-173855] [transport.py] [_log()] userauth is OK
2026-04-11T17:27:39.174 [DEBUG] [Thread-173855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:27:39.174 [DEBUG] [Thread-173855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:27:39.174 [DEBUG] [Thread-173855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:27:39.174 [DEBUG] [Thread-173855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:27:39.199 [INFO] [Thread-173855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:27:39.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:27:39.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:27:40.040 [DEBUG] [Thread-173855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:27:40.040 [DEBUG] [Thread-173855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:27:40.088 [DEBUG] [Thread-173855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:27:40.088 [DEBUG] [Thread-173855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:27:40.096 [DEBUG] [Thread-173855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:27:40.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:27:40.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:27:40.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-04-11T17:27:40.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:27:40.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:27:40.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:27:40.129 [DEBUG] [Thread-173855] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:27:41.782 [DEBUG] [Thread-173857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:27:56.839 [DEBUG] [Thread-173858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:10.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:28:10.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:28:10.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-04-11T17:28:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 27, 41), 0.11029, 99.2046, 0.0, 24.3821, 13.4949, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:28:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:27:41
2026-04-11T17:28:11.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:28:11.875 [DEBUG] [Thread-173859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:11.974 [DEBUG] [Thread-173860] [transport.py] [_log()] starting thread (client mode): 0xae518220
2026-04-11T17:28:11.974 [DEBUG] [Thread-173860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:28:11.994 [DEBUG] [Thread-173860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:28:11.994 [INFO] [Thread-173860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] client lang: <none>
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] server lang: <none>
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] kex follows: False
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:28:11.996 [DEBUG] [Thread-173860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:28:11.997 [DEBUG] [Thread-173860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:28:11.997 [DEBUG] [Thread-173860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:28:11.997 [DEBUG] [Thread-173860] [transport.py] [_log()] Compression: none
2026-04-11T17:28:11.997 [DEBUG] [Thread-173860] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:28:12.009 [DEBUG] [Thread-173860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:28:12.010 [DEBUG] [Thread-173860] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:28:12.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:28:12.011 [DEBUG] [Thread-173860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:28:12.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:28:12.013 [DEBUG] [Thread-173860] [transport.py] [_log()] userauth is OK
2026-04-11T17:28:12.013 [DEBUG] [Thread-173860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:28:12.013 [DEBUG] [Thread-173860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:28:12.013 [DEBUG] [Thread-173860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:28:12.013 [DEBUG] [Thread-173860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:28:12.037 [INFO] [Thread-173860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:28:12.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:28:12.873 [DEBUG] [Thread-173860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:28:12.873 [DEBUG] [Thread-173860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:28:12.873 [DEBUG] [Thread-173860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:28:12.914 [DEBUG] [Thread-173860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:28:12.914 [DEBUG] [Thread-173860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:28:12.917 [DEBUG] [Thread-173860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:28:12.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:28:12.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:28:12.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:28:12.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:28:12.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:28:12.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:28:12.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:28:12.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:28:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:28:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.644218 -999.00  +12.90  18.23     97  +12.40 1 3 1 3 1   887    0 0.25 -8.24 ----- 18.2 18.2 283.4 24.1 14.1 -0.7 13.9 -0.4 13.5 -0.8 14.0 -0.2
2026-04-11T17:28:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:28:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:28:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.644218
2026-04-11T17:28:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:28:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:28:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:28:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:28:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:28:12.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:27:41', tmtdew=0.11029, humidity=99.2046, cloud=0.0, wind=24.3821, temperature=13.4949, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:27:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:28:12.946 [DEBUG] [Thread-173860] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:28:13.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:28:13.042 [DEBUG] [Thread-173863] [transport.py] [_log()] starting thread (client mode): 0xb0feb400
2026-04-11T17:28:13.042 [DEBUG] [Thread-173863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:28:13.057 [DEBUG] [Thread-173863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:28:13.057 [INFO] [Thread-173863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:28:13.065 [DEBUG] [Thread-173863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:28:13.065 [DEBUG] [Thread-173863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:28:13.065 [DEBUG] [Thread-173863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:28:13.065 [DEBUG] [Thread-173863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:13.065 [DEBUG] [Thread-173863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] client lang: <none>
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] server lang: <none>
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] kex follows: False
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] Compression: none
2026-04-11T17:28:13.066 [DEBUG] [Thread-173863] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:28:13.122 [DEBUG] [Thread-173863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:28:13.122 [DEBUG] [Thread-173863] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:28:13.123 [DEBUG] [Thread-173863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:28:13.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:28:13.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:28:13.178 [DEBUG] [Thread-173863] [transport.py] [_log()] userauth is OK
2026-04-11T17:28:13.178 [DEBUG] [Thread-173863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:28:13.178 [DEBUG] [Thread-173863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:28:13.178 [DEBUG] [Thread-173863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:28:13.178 [DEBUG] [Thread-173863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:28:13.199 [INFO] [Thread-173863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:28:13.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:28:13.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:28:14.030 [DEBUG] [Thread-173863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:28:14.030 [DEBUG] [Thread-173863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:28:14.078 [DEBUG] [Thread-173863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:28:14.078 [DEBUG] [Thread-173863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:28:14.087 [DEBUG] [Thread-173863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:28:14.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:28:14.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:28:14.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-04-11T17:28:14.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:28:14.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:28:14.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:28:14.132 [DEBUG] [Thread-173863] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:28:18.672 [DEBUG] [Thread-173865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:26.907 [DEBUG] [Thread-173866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:36.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:36.173 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:41.959 [DEBUG] [Thread-173867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:28:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:28:44.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:28:44.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-04-11T17:28:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 28, 17), 0.10514, 99.6023, 0.0, 18.986, 12.9977, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:28:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:28:17
2026-04-11T17:28:45.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:28:45.954 [DEBUG] [Thread-173868] [transport.py] [_log()] starting thread (client mode): 0xae560af0
2026-04-11T17:28:45.954 [DEBUG] [Thread-173868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:28:45.973 [DEBUG] [Thread-173868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:28:45.973 [INFO] [Thread-173868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] client lang: <none>
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] server lang: <none>
2026-04-11T17:28:45.977 [DEBUG] [Thread-173868] [transport.py] [_log()] kex follows: False
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] Compression: none
2026-04-11T17:28:45.978 [DEBUG] [Thread-173868] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:28:45.996 [DEBUG] [Thread-173868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:28:45.997 [DEBUG] [Thread-173868] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:28:45.997 [DEBUG] [Thread-173868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:28:45.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:28:45.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:28:45.999 [DEBUG] [Thread-173868] [transport.py] [_log()] userauth is OK
2026-04-11T17:28:46.000 [DEBUG] [Thread-173868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:28:46.000 [DEBUG] [Thread-173868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:28:46.000 [DEBUG] [Thread-173868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:28:46.000 [DEBUG] [Thread-173868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:28:46.034 [INFO] [Thread-173868] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:28:46.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:28:46.789 [DEBUG] [Thread-173868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:28:46.790 [DEBUG] [Thread-173868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:28:46.790 [DEBUG] [Thread-173868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:28:46.831 [DEBUG] [Thread-173868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:28:46.831 [DEBUG] [Thread-173868] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:28:46.835 [DEBUG] [Thread-173868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:28:46.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:28:46.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:28:46.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:28:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:28:46.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:28:46.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:28:46.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:28:46.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:28:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:28:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.644565 -999.00  +12.90  15.13     97  +12.50 1 3 1 3 1   887    0 0.28 -7.42 ----- 15.1 15.1 290.4 20.9 14.1 -0.6 13.9 -0.3 13.5 -0.8 13.9 -0.1
2026-04-11T17:28:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:28:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:28:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.644565
2026-04-11T17:28:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:28:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:28:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:28:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:28:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:28:46.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:28:17', tmtdew=0.10514, humidity=99.6023, cloud=0.0, wind=18.986, temperature=12.9977, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:28:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:28:46.865 [DEBUG] [Thread-173868] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:28:46.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:28:46.958 [DEBUG] [Thread-173871] [transport.py] [_log()] starting thread (client mode): 0xae50b2e0
2026-04-11T17:28:46.958 [DEBUG] [Thread-173871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:28:46.973 [DEBUG] [Thread-173871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:28:46.973 [INFO] [Thread-173871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:28:46.980 [DEBUG] [Thread-173871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] client lang: <none>
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] server lang: <none>
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] kex follows: False
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] Compression: none
2026-04-11T17:28:46.981 [DEBUG] [Thread-173871] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:28:47.038 [DEBUG] [Thread-173871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:28:47.039 [DEBUG] [Thread-173871] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:28:47.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:28:47.040 [DEBUG] [Thread-173871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:28:47.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:28:47.094 [DEBUG] [Thread-173871] [transport.py] [_log()] userauth is OK
2026-04-11T17:28:47.094 [DEBUG] [Thread-173871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:28:47.095 [DEBUG] [Thread-173871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:28:47.095 [DEBUG] [Thread-173871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:28:47.095 [DEBUG] [Thread-173871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:28:47.114 [INFO] [Thread-173871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:28:47.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:28:47.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:28:47.942 [DEBUG] [Thread-173871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:28:47.942 [DEBUG] [Thread-173871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:28:47.989 [DEBUG] [Thread-173871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:28:47.990 [DEBUG] [Thread-173871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:28:47.998 [DEBUG] [Thread-173871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:28:48.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:28:48.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-04-11T17:28:48.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-04-11T17:28:48.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:28:48.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:28:48.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:28:48.034 [DEBUG] [Thread-173871] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:28:56.998 [DEBUG] [Thread-173873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:12.063 [DEBUG] [Thread-173874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:18.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:29:18.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:29:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:29:18.731 [DEBUG] [Thread-173875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 28, 52), 0.10518, 99.2376, 0.0, 20.2896, 13.528, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:29:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:28:52
2026-04-11T17:29:19.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:29:19.870 [DEBUG] [Thread-173876] [transport.py] [_log()] starting thread (client mode): 0xae536e90
2026-04-11T17:29:19.870 [DEBUG] [Thread-173876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:29:19.890 [DEBUG] [Thread-173876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:29:19.891 [INFO] [Thread-173876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:29:19.892 [DEBUG] [Thread-173876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:29:19.892 [DEBUG] [Thread-173876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:29:19.892 [DEBUG] [Thread-173876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:29:19.892 [DEBUG] [Thread-173876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] client lang: <none>
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] server lang: <none>
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] kex follows: False
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] Compression: none
2026-04-11T17:29:19.893 [DEBUG] [Thread-173876] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:29:19.903 [DEBUG] [Thread-173876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:29:19.903 [DEBUG] [Thread-173876] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:29:19.904 [DEBUG] [Thread-173876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:29:19.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:29:19.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:29:19.906 [DEBUG] [Thread-173876] [transport.py] [_log()] userauth is OK
2026-04-11T17:29:19.906 [DEBUG] [Thread-173876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:29:19.906 [DEBUG] [Thread-173876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:29:19.906 [DEBUG] [Thread-173876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:29:19.906 [DEBUG] [Thread-173876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:29:19.931 [INFO] [Thread-173876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:29:19.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:29:20.739 [DEBUG] [Thread-173876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:29:20.740 [DEBUG] [Thread-173876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:29:20.740 [DEBUG] [Thread-173876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:29:20.781 [DEBUG] [Thread-173876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:29:20.782 [DEBUG] [Thread-173876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:29:20.784 [DEBUG] [Thread-173876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:29:20.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:29:20.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:29:20.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:29:20.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:29:20.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:29:20.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:29:20.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:29:20.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:29:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:29:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.644912 -999.00  +13.00  10.94     97  +12.50 1 3 1 3 1   887    0 0.31 -6.65 ----- 10.9 10.9 293.2 17.7 14.1 -0.8 13.9 -0.3 13.4 -0.7 13.9 -0.2
2026-04-11T17:29:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:29:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:29:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.644912
2026-04-11T17:29:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:29:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:29:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:29:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:29:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:29:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:28:52', tmtdew=0.10518, humidity=99.2376, cloud=0.0, wind=20.2896, temperature=13.528, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:28:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:29:20.811 [DEBUG] [Thread-173876] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:29:20.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:29:20.905 [DEBUG] [Thread-173879] [transport.py] [_log()] starting thread (client mode): 0xae5a7880
2026-04-11T17:29:20.905 [DEBUG] [Thread-173879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:29:20.919 [DEBUG] [Thread-173879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:29:20.920 [INFO] [Thread-173879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:29:20.927 [DEBUG] [Thread-173879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:20.928 [DEBUG] [Thread-173879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] client lang: <none>
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] server lang: <none>
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] kex follows: False
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:29:20.929 [DEBUG] [Thread-173879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:29:20.930 [DEBUG] [Thread-173879] [transport.py] [_log()] Compression: none
2026-04-11T17:29:20.930 [DEBUG] [Thread-173879] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:29:20.984 [DEBUG] [Thread-173879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:29:20.984 [DEBUG] [Thread-173879] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:29:20.985 [DEBUG] [Thread-173879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:29:20.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:29:20.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:29:21.045 [DEBUG] [Thread-173879] [transport.py] [_log()] userauth is OK
2026-04-11T17:29:21.046 [DEBUG] [Thread-173879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:29:21.046 [DEBUG] [Thread-173879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:29:21.047 [DEBUG] [Thread-173879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:29:21.047 [DEBUG] [Thread-173879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:29:21.069 [INFO] [Thread-173879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:29:21.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:29:21.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:29:21.869 [DEBUG] [Thread-173879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:29:21.870 [DEBUG] [Thread-173879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:29:21.917 [DEBUG] [Thread-173879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:29:21.917 [DEBUG] [Thread-173879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:29:21.926 [DEBUG] [Thread-173879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:29:21.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:29:21.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:29:21.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-04-11T17:29:21.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:29:21.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:29:21.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:29:21.964 [DEBUG] [Thread-173879] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:29:27.103 [DEBUG] [Thread-173881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:36.313 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:36.314 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:42.155 [DEBUG] [Thread-173882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:29:51.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:29:51.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:29:51.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-04-11T17:29:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 29, 28), 0.060275, 99.5691, 0.0, 19.2323, 13.0808, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:29:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:29:28
2026-04-11T17:29:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:29:53.748 [DEBUG] [Thread-173883] [transport.py] [_log()] starting thread (client mode): 0xae5194e0
2026-04-11T17:29:53.748 [DEBUG] [Thread-173883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:29:53.767 [DEBUG] [Thread-173883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:29:53.768 [INFO] [Thread-173883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:29:53.770 [DEBUG] [Thread-173883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] client lang: <none>
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] server lang: <none>
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] kex follows: False
2026-04-11T17:29:53.771 [DEBUG] [Thread-173883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:29:53.772 [DEBUG] [Thread-173883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:29:53.772 [DEBUG] [Thread-173883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:29:53.772 [DEBUG] [Thread-173883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:29:53.772 [DEBUG] [Thread-173883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:29:53.772 [DEBUG] [Thread-173883] [transport.py] [_log()] Compression: none
2026-04-11T17:29:53.772 [DEBUG] [Thread-173883] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:29:53.791 [DEBUG] [Thread-173883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:29:53.791 [DEBUG] [Thread-173883] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:29:53.792 [DEBUG] [Thread-173883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:29:53.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:29:53.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:29:53.795 [DEBUG] [Thread-173883] [transport.py] [_log()] userauth is OK
2026-04-11T17:29:53.795 [DEBUG] [Thread-173883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:29:53.795 [DEBUG] [Thread-173883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:29:53.795 [DEBUG] [Thread-173883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:29:53.795 [DEBUG] [Thread-173883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:29:53.820 [INFO] [Thread-173883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:29:53.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:29:54.656 [DEBUG] [Thread-173883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:29:54.657 [DEBUG] [Thread-173883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:29:54.657 [DEBUG] [Thread-173883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:29:54.698 [DEBUG] [Thread-173883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:29:54.698 [DEBUG] [Thread-173883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:29:54.702 [DEBUG] [Thread-173883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:29:54.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:29:54.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:29:54.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:29:54.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:29:54.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:29:54.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:29:54.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:29:54.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:29:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:29:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.645259 -999.00  +13.00  16.17     97  +12.50 1 3 1 3 1   887    0 0.30 -6.86 ----- 16.2 16.2 302.0 19.9 14.1 -0.5 13.9 -0.2 13.5 -0.7 14.0 -0.2
2026-04-11T17:29:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:29:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:29:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.645259
2026-04-11T17:29:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:29:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:29:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:29:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:29:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:29:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:29:28', tmtdew=0.060275, humidity=99.5691, cloud=0.0, wind=19.2323, temperature=13.0808, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:29:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:29:54.730 [DEBUG] [Thread-173883] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:29:54.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:29:54.830 [DEBUG] [Thread-173886] [transport.py] [_log()] starting thread (client mode): 0xae51bd30
2026-04-11T17:29:54.830 [DEBUG] [Thread-173886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:29:54.845 [DEBUG] [Thread-173886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:29:54.845 [INFO] [Thread-173886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:29:54.853 [DEBUG] [Thread-173886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:29:54.853 [DEBUG] [Thread-173886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:29:54.853 [DEBUG] [Thread-173886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:29:54.853 [DEBUG] [Thread-173886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:54.853 [DEBUG] [Thread-173886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:29:54.853 [DEBUG] [Thread-173886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] client lang: <none>
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] server lang: <none>
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] kex follows: False
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] Compression: none
2026-04-11T17:29:54.854 [DEBUG] [Thread-173886] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:29:54.913 [DEBUG] [Thread-173886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:29:54.914 [DEBUG] [Thread-173886] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:29:54.915 [DEBUG] [Thread-173886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:29:54.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:29:54.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:29:54.969 [DEBUG] [Thread-173886] [transport.py] [_log()] userauth is OK
2026-04-11T17:29:54.970 [DEBUG] [Thread-173886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:29:54.970 [DEBUG] [Thread-173886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:29:54.970 [DEBUG] [Thread-173886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:29:54.970 [DEBUG] [Thread-173886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:29:54.988 [INFO] [Thread-173886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:29:54.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:29:54.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:29:55.792 [DEBUG] [Thread-173886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:29:55.792 [DEBUG] [Thread-173886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:29:55.840 [DEBUG] [Thread-173886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:29:55.840 [DEBUG] [Thread-173886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:29:55.849 [DEBUG] [Thread-173886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:29:55.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:29:55.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-04-11T17:29:55.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-04-11T17:29:55.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:29:55.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:29:55.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:29:55.887 [DEBUG] [Thread-173886] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:29:57.194 [DEBUG] [Thread-173888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:12.259 [DEBUG] [Thread-173889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:18.764 [DEBUG] [Thread-173890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:25.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:30:25.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:30:25.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-04-11T17:30:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 30, 3), 0.055155, 99.6022, 0.0, 18.3856, 13.0808, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:30:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:30:03
2026-04-11T17:30:27.298 [DEBUG] [Thread-173891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:30:27.787 [DEBUG] [Thread-173892] [transport.py] [_log()] starting thread (client mode): 0xae5a7a30
2026-04-11T17:30:27.788 [DEBUG] [Thread-173892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:30:27.808 [DEBUG] [Thread-173892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:30:27.808 [INFO] [Thread-173892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:30:27.811 [DEBUG] [Thread-173892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:30:27.811 [DEBUG] [Thread-173892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] client lang: <none>
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] server lang: <none>
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] kex follows: False
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:30:27.812 [DEBUG] [Thread-173892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:30:27.813 [DEBUG] [Thread-173892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:30:27.813 [DEBUG] [Thread-173892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:30:27.813 [DEBUG] [Thread-173892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:30:27.813 [DEBUG] [Thread-173892] [transport.py] [_log()] Compression: none
2026-04-11T17:30:27.813 [DEBUG] [Thread-173892] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:30:27.831 [DEBUG] [Thread-173892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:30:27.831 [DEBUG] [Thread-173892] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:30:27.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:30:27.832 [DEBUG] [Thread-173892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:30:27.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:30:27.833 [DEBUG] [Thread-173892] [transport.py] [_log()] userauth is OK
2026-04-11T17:30:27.834 [DEBUG] [Thread-173892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:30:27.834 [DEBUG] [Thread-173892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:30:27.834 [DEBUG] [Thread-173892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:30:27.834 [DEBUG] [Thread-173892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:30:27.857 [INFO] [Thread-173892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:30:27.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:30:29.003 [DEBUG] [Thread-173892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:30:29.003 [DEBUG] [Thread-173892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:30:29.003 [DEBUG] [Thread-173892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:30:29.044 [DEBUG] [Thread-173892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:30:29.044 [DEBUG] [Thread-173892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:30:29.048 [DEBUG] [Thread-173892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:30:29.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:30:29.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:30:29.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:30:29.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:30:29.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:30:29.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:30:29.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:30:29.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:30:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:30:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.645607 -999.00  +13.00  18.36     97  +12.50 1 3 1 3 1   887    0 0.31 -6.48 ----- 18.4 18.4 290.9 23.3 14.1 -0.7 13.8 -0.4 13.6 -0.4 13.9 -0.2
2026-04-11T17:30:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:30:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:30:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.645607
2026-04-11T17:30:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:30:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:30:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:30:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:30:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:30:29.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:30:03', tmtdew=0.055155, humidity=99.6022, cloud=0.0, wind=18.3856, temperature=13.0808, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:29:40.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:30:29.075 [DEBUG] [Thread-173892] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:30:29.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:30:29.169 [DEBUG] [Thread-173895] [transport.py] [_log()] starting thread (client mode): 0xae5a7010
2026-04-11T17:30:29.169 [DEBUG] [Thread-173895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:30:29.184 [DEBUG] [Thread-173895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:30:29.184 [INFO] [Thread-173895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] client lang: <none>
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] server lang: <none>
2026-04-11T17:30:29.192 [DEBUG] [Thread-173895] [transport.py] [_log()] kex follows: False
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] Compression: none
2026-04-11T17:30:29.193 [DEBUG] [Thread-173895] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:30:29.253 [DEBUG] [Thread-173895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:30:29.254 [DEBUG] [Thread-173895] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:30:29.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:30:29.255 [DEBUG] [Thread-173895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:30:29.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:30:29.309 [DEBUG] [Thread-173895] [transport.py] [_log()] userauth is OK
2026-04-11T17:30:29.310 [DEBUG] [Thread-173895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:30:29.310 [DEBUG] [Thread-173895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:30:29.310 [DEBUG] [Thread-173895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:30:29.310 [DEBUG] [Thread-173895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:30:29.336 [INFO] [Thread-173895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:30:29.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:30:29.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:30:30.160 [DEBUG] [Thread-173895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:30:30.160 [DEBUG] [Thread-173895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:30:30.208 [DEBUG] [Thread-173895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:30:30.208 [DEBUG] [Thread-173895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:30:30.216 [DEBUG] [Thread-173895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:30:30.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:30:30.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-04-11T17:30:30.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-04-11T17:30:30.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:30:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:30:30.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:30:30.248 [DEBUG] [Thread-173895] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:30:36.454 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:36.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:42.339 [DEBUG] [Thread-173897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:30:57.389 [DEBUG] [Thread-173898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:31:00.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:31:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:31:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 30, 38), 0.12568, 99.105, 0.0, 23.6765, 13.3622, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:31:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:30:38
2026-04-11T17:31:01.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:31:02.034 [DEBUG] [Thread-173899] [transport.py] [_log()] starting thread (client mode): 0xae51ae90
2026-04-11T17:31:02.034 [DEBUG] [Thread-173899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:31:02.054 [DEBUG] [Thread-173899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:31:02.054 [INFO] [Thread-173899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] client lang: <none>
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] server lang: <none>
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] kex follows: False
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:31:02.058 [DEBUG] [Thread-173899] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:31:02.059 [DEBUG] [Thread-173899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:31:02.059 [DEBUG] [Thread-173899] [transport.py] [_log()] Compression: none
2026-04-11T17:31:02.059 [DEBUG] [Thread-173899] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:31:02.076 [DEBUG] [Thread-173899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:31:02.076 [DEBUG] [Thread-173899] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:31:02.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:31:02.077 [DEBUG] [Thread-173899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:31:02.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:31:02.079 [DEBUG] [Thread-173899] [transport.py] [_log()] userauth is OK
2026-04-11T17:31:02.079 [DEBUG] [Thread-173899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:31:02.080 [DEBUG] [Thread-173899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:31:02.080 [DEBUG] [Thread-173899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:31:02.080 [DEBUG] [Thread-173899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:31:02.105 [INFO] [Thread-173899] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:31:02.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:31:02.894 [DEBUG] [Thread-173899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:31:02.894 [DEBUG] [Thread-173899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:31:02.895 [DEBUG] [Thread-173899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:31:02.935 [DEBUG] [Thread-173899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:31:02.935 [DEBUG] [Thread-173899] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:31:02.938 [DEBUG] [Thread-173899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:31:02.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:31:02.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:31:02.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:31:02.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:31:02.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:31:02.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:31:02.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:31:02.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:31:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:31:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.645953 -999.00  +12.80  21.54     97  +12.40 1 3 1 3 1   887    0 0.32 -5.73 ----- 21.5 21.5 284.0 27.1 14.0 -1.1 13.8 -0.5 13.5 -0.7 13.9 -0.2
2026-04-11T17:31:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:31:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:31:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.645953
2026-04-11T17:31:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:31:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:31:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:31:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:31:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:31:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:30:38', tmtdew=0.12568, humidity=99.105, cloud=0.0, wind=23.6765, temperature=13.3622, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:30:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:31:02.962 [DEBUG] [Thread-173899] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:31:03.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:31:03.055 [DEBUG] [Thread-173902] [transport.py] [_log()] starting thread (client mode): 0xae5f36d0
2026-04-11T17:31:03.055 [DEBUG] [Thread-173902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:31:03.070 [DEBUG] [Thread-173902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:31:03.070 [INFO] [Thread-173902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:03.078 [DEBUG] [Thread-173902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] client lang: <none>
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] server lang: <none>
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] kex follows: False
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] Compression: none
2026-04-11T17:31:03.079 [DEBUG] [Thread-173902] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:31:03.137 [DEBUG] [Thread-173902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:31:03.138 [DEBUG] [Thread-173902] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:31:03.139 [DEBUG] [Thread-173902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:31:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:31:03.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:31:03.197 [DEBUG] [Thread-173902] [transport.py] [_log()] userauth is OK
2026-04-11T17:31:03.197 [DEBUG] [Thread-173902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:31:03.197 [DEBUG] [Thread-173902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:31:03.197 [DEBUG] [Thread-173902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:31:03.197 [DEBUG] [Thread-173902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:31:03.218 [INFO] [Thread-173902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:31:03.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:31:03.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:31:04.047 [DEBUG] [Thread-173902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:31:04.048 [DEBUG] [Thread-173902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:31:04.096 [DEBUG] [Thread-173902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:31:04.096 [DEBUG] [Thread-173902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:31:04.106 [DEBUG] [Thread-173902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:31:04.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:31:04.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:31:04.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-04-11T17:31:04.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:31:04.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:31:04.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:31:04.143 [DEBUG] [Thread-173902] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:31:12.426 [DEBUG] [Thread-173904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:18.798 [DEBUG] [Thread-173905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:27.481 [DEBUG] [Thread-173906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:31:34.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:31: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-04-11T17:31:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 31, 14), 0.10516, 99.6022, 0.0, 24.597, 12.9477, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:31:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:31:14
2026-04-11T17:31:35.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:31:35.967 [DEBUG] [Thread-173907] [transport.py] [_log()] starting thread (client mode): 0xae5f0340
2026-04-11T17:31:35.967 [DEBUG] [Thread-173907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:31:35.987 [DEBUG] [Thread-173907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:31:35.987 [INFO] [Thread-173907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] client lang: <none>
2026-04-11T17:31:35.991 [DEBUG] [Thread-173907] [transport.py] [_log()] server lang: <none>
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] kex follows: False
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] Compression: none
2026-04-11T17:31:35.992 [DEBUG] [Thread-173907] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:31:36.011 [DEBUG] [Thread-173907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:31:36.012 [DEBUG] [Thread-173907] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:31:36.013 [DEBUG] [Thread-173907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:31:36.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:31:36.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:31:36.057 [DEBUG] [Thread-173907] [transport.py] [_log()] userauth is OK
2026-04-11T17:31:36.057 [DEBUG] [Thread-173907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:31:36.058 [DEBUG] [Thread-173907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:31:36.058 [DEBUG] [Thread-173907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:31:36.058 [DEBUG] [Thread-173907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:31:36.084 [INFO] [Thread-173907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:31:36.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:31:36.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:36.598 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:36.875 [DEBUG] [Thread-173907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:31:36.875 [DEBUG] [Thread-173907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:31:36.876 [DEBUG] [Thread-173907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:31:36.916 [DEBUG] [Thread-173907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:31:36.916 [DEBUG] [Thread-173907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:31:36.920 [DEBUG] [Thread-173907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:31:36.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:31:36.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:31:36.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:31:36.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:31:36.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:31:36.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:31:36.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:31:36.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:31:36.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:31:36.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.646301 -999.00  +12.80  21.18     97  +12.40 1 3 1 3 1   887    0 0.31 -5.94 ----- 21.2 21.2 276.8 22.6 14.0 -0.8 13.8 -0.4 13.4 -0.3 13.9 -0.4
2026-04-11T17:31:36.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:31:36.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:31:36.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.646301
2026-04-11T17:31:36.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:31:36.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:31:36.948 [DEBUG] [Thread-173907] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:31:36.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:31:36.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:31:36.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:31:36.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:31:14', tmtdew=0.10516, humidity=99.6022, cloud=0.0, wind=24.597, temperature=12.9477, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:30:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:31:37.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:31:37.043 [DEBUG] [Thread-173910] [transport.py] [_log()] starting thread (client mode): 0xb0f57d00
2026-04-11T17:31:37.043 [DEBUG] [Thread-173910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:31:37.058 [DEBUG] [Thread-173910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:31:37.059 [INFO] [Thread-173910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:31:37.066 [DEBUG] [Thread-173910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:31:37.066 [DEBUG] [Thread-173910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:31:37.066 [DEBUG] [Thread-173910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] client lang: <none>
2026-04-11T17:31:37.067 [DEBUG] [Thread-173910] [transport.py] [_log()] server lang: <none>
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] kex follows: False
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:31:37.068 [DEBUG] [Thread-173910] [transport.py] [_log()] Compression: none
2026-04-11T17:31:37.069 [DEBUG] [Thread-173910] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:31:37.129 [DEBUG] [Thread-173910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:31:37.129 [DEBUG] [Thread-173910] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:31:37.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:31:37.130 [DEBUG] [Thread-173910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:31:37.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:31:37.184 [DEBUG] [Thread-173910] [transport.py] [_log()] userauth is OK
2026-04-11T17:31:37.185 [DEBUG] [Thread-173910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:31:37.185 [DEBUG] [Thread-173910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:31:37.185 [DEBUG] [Thread-173910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:31:37.185 [DEBUG] [Thread-173910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:31:37.204 [INFO] [Thread-173910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:31:37.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:31:37.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:31:38.044 [DEBUG] [Thread-173910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:31:38.044 [DEBUG] [Thread-173910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:31:38.092 [DEBUG] [Thread-173910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:31:38.092 [DEBUG] [Thread-173910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:31:38.101 [DEBUG] [Thread-173910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:31:38.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:31:38.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-04-11T17:31:38.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-04-11T17:31:38.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:31:38.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:31:38.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:31:38.135 [DEBUG] [Thread-173910] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:31:42.518 [DEBUG] [Thread-173912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:31:57.573 [DEBUG] [Thread-173913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:32:08.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:32:08.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-04-11T17:32:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 31, 49), 0.10519, 99.2375, 0.0, 20.1838, 13.3622, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:32:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:31:49
2026-04-11T17:32:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:32:10.042 [DEBUG] [Thread-173914] [transport.py] [_log()] starting thread (client mode): 0xae563880
2026-04-11T17:32:10.042 [DEBUG] [Thread-173914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:32:10.065 [DEBUG] [Thread-173914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:32:10.065 [INFO] [Thread-173914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:32:10.069 [DEBUG] [Thread-173914] [transport.py] [_log()] client lang: <none>
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] server lang: <none>
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] kex follows: False
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] Compression: none
2026-04-11T17:32:10.070 [DEBUG] [Thread-173914] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:32:10.089 [DEBUG] [Thread-173914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:32:10.089 [DEBUG] [Thread-173914] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:32:10.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:32:10.090 [DEBUG] [Thread-173914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:32:10.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:32:10.092 [DEBUG] [Thread-173914] [transport.py] [_log()] userauth is OK
2026-04-11T17:32:10.092 [DEBUG] [Thread-173914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:32:10.093 [DEBUG] [Thread-173914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:32:10.093 [DEBUG] [Thread-173914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:32:10.093 [DEBUG] [Thread-173914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:32:10.115 [INFO] [Thread-173914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:32:10.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:32:10.925 [DEBUG] [Thread-173914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:32:10.925 [DEBUG] [Thread-173914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:32:10.925 [DEBUG] [Thread-173914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:32:10.966 [DEBUG] [Thread-173914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:32:10.967 [DEBUG] [Thread-173914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:32:10.969 [DEBUG] [Thread-173914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:32:10.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:32:10.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:32:10.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:32:10.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:32:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:32:11.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:32:11.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:32:11.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.646648 -999.00  +12.80  17.32     97  +12.40 1 3 1 3 1   887    0 0.32 -6.14 ----- 17.3 17.3 296.4 21.2 14.0 -0.6 13.8 -0.4 13.4 -0.8 13.8 -0.1
2026-04-11T17:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:32:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.646648
2026-04-11T17:32:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:32:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:32:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:32:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:32:11.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:32:11.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:31:49', tmtdew=0.10519, humidity=99.2375, cloud=0.0, wind=20.1838, temperature=13.3622, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:31:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:32:11.005 [DEBUG] [Thread-173914] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:32:11.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:32:11.105 [DEBUG] [Thread-173917] [transport.py] [_log()] starting thread (client mode): 0xae5f0280
2026-04-11T17:32:11.105 [DEBUG] [Thread-173917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:32:11.122 [DEBUG] [Thread-173917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:32:11.122 [INFO] [Thread-173917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:32:11.130 [DEBUG] [Thread-173917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:11.131 [DEBUG] [Thread-173917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] client lang: <none>
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] server lang: <none>
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] kex follows: False
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:32:11.132 [DEBUG] [Thread-173917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:32:11.133 [DEBUG] [Thread-173917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:32:11.133 [DEBUG] [Thread-173917] [transport.py] [_log()] Compression: none
2026-04-11T17:32:11.133 [DEBUG] [Thread-173917] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:32:11.189 [DEBUG] [Thread-173917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:32:11.190 [DEBUG] [Thread-173917] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:32:11.190 [DEBUG] [Thread-173917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:32:11.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:32:11.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:32:11.245 [DEBUG] [Thread-173917] [transport.py] [_log()] userauth is OK
2026-04-11T17:32:11.245 [DEBUG] [Thread-173917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:32:11.246 [DEBUG] [Thread-173917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:32:11.246 [DEBUG] [Thread-173917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:32:11.246 [DEBUG] [Thread-173917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:32:11.265 [INFO] [Thread-173917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:32:11.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:32:11.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:32:12.119 [DEBUG] [Thread-173917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:32:12.119 [DEBUG] [Thread-173917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:32:12.167 [DEBUG] [Thread-173917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:32:12.167 [DEBUG] [Thread-173917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:32:12.175 [DEBUG] [Thread-173917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:32:12.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:32: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')
2026-04-11T17:32:12.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:32:12.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:32:12.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:32:12.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:32:12.211 [DEBUG] [Thread-173917] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:32:12.613 [DEBUG] [Thread-173919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:18.841 [DEBUG] [Thread-173920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:27.666 [DEBUG] [Thread-173921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:36.738 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:36.740 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:42.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:32:42.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:32:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:32:42.700 [DEBUG] [Thread-173922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:32:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 32, 25), 0.097475, 99.6519, 0.0, 23.3968, 12.9476, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:32:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:32:25
2026-04-11T17:32:43.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:32:44.144 [DEBUG] [Thread-173923] [transport.py] [_log()] starting thread (client mode): 0xae5364a0
2026-04-11T17:32:44.145 [DEBUG] [Thread-173923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:32:44.162 [DEBUG] [Thread-173923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:32:44.162 [INFO] [Thread-173923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:32:44.164 [DEBUG] [Thread-173923] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] client lang: <none>
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] server lang: <none>
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] kex follows: False
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] Compression: none
2026-04-11T17:32:44.165 [DEBUG] [Thread-173923] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:32:44.182 [DEBUG] [Thread-173923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:32:44.182 [DEBUG] [Thread-173923] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:32:44.183 [DEBUG] [Thread-173923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:32:44.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:32:44.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:32:44.184 [DEBUG] [Thread-173923] [transport.py] [_log()] userauth is OK
2026-04-11T17:32:44.185 [DEBUG] [Thread-173923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:32:44.185 [DEBUG] [Thread-173923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:32:44.185 [DEBUG] [Thread-173923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:32:44.185 [DEBUG] [Thread-173923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:32:44.203 [INFO] [Thread-173923] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:32:44.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:32:44.765 [DEBUG] [Thread-173923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:32:44.766 [DEBUG] [Thread-173923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:32:44.766 [DEBUG] [Thread-173923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:32:44.807 [DEBUG] [Thread-173923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:32:44.807 [DEBUG] [Thread-173923] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:32:44.811 [DEBUG] [Thread-173923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:32:44.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:32:44.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:32:44.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:32:44.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:32:44.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:32:44.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:32:44.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:32:44.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:32:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:32:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.647690 -999.00  +12.80  18.15     97  +12.40 1 3 1 3 1   887    0 0.30 -6.17 ----- 18.1 18.1 291.0 23.1 14.0 -0.8 13.8 -0.5 13.4 -0.6 13.9 -0.2
2026-04-11T17:32:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:32:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:32:44.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.647690
2026-04-11T17:32:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:32:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:32:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:32:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:32:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:32:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:32:25', tmtdew=0.097475, humidity=99.6519, cloud=0.0, wind=23.3968, temperature=12.9476, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:32:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:32:44.840 [DEBUG] [Thread-173923] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:32:44.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:32:44.933 [DEBUG] [Thread-173926] [transport.py] [_log()] starting thread (client mode): 0xae563880
2026-04-11T17:32:44.933 [DEBUG] [Thread-173926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:32:44.947 [DEBUG] [Thread-173926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:32:44.948 [INFO] [Thread-173926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:32:44.955 [DEBUG] [Thread-173926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:32:44.956 [DEBUG] [Thread-173926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] client lang: <none>
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] server lang: <none>
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] kex follows: False
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:32:44.957 [DEBUG] [Thread-173926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:32:44.958 [DEBUG] [Thread-173926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:32:44.958 [DEBUG] [Thread-173926] [transport.py] [_log()] Compression: none
2026-04-11T17:32:44.958 [DEBUG] [Thread-173926] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:32:45.014 [DEBUG] [Thread-173926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:32:45.014 [DEBUG] [Thread-173926] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:32:45.015 [DEBUG] [Thread-173926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:32:45.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:32:45.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:32:45.073 [DEBUG] [Thread-173926] [transport.py] [_log()] userauth is OK
2026-04-11T17:32:45.073 [DEBUG] [Thread-173926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:32:45.073 [DEBUG] [Thread-173926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:32:45.073 [DEBUG] [Thread-173926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:32:45.074 [DEBUG] [Thread-173926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:32:45.092 [INFO] [Thread-173926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:32:45.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:32:45.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:32:45.918 [DEBUG] [Thread-173926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:32:45.918 [DEBUG] [Thread-173926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:32:45.966 [DEBUG] [Thread-173926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:32:45.966 [DEBUG] [Thread-173926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:32:45.975 [DEBUG] [Thread-173926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:32:45.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:32:45.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:32:45.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-04-11T17:32:46.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:32:46.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:32:46.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:32:46.013 [DEBUG] [Thread-173926] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:32:57.738 [DEBUG] [Thread-173928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:12.802 [DEBUG] [Thread-173929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:16.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:33:16.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:33:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:33:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 33), 0.100035, 99.6353, 0.0, 22.5677, 12.9642, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:33:17.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:33:00
2026-04-11T17:33:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:33:17.848 [DEBUG] [Thread-173930] [transport.py] [_log()] starting thread (client mode): 0xae515570
2026-04-11T17:33:17.848 [DEBUG] [Thread-173930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:33:17.863 [DEBUG] [Thread-173930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:33:17.863 [INFO] [Thread-173930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:17.866 [DEBUG] [Thread-173930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] client lang: <none>
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] server lang: <none>
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] kex follows: False
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] Compression: none
2026-04-11T17:33:17.867 [DEBUG] [Thread-173930] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:33:17.875 [DEBUG] [Thread-173930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:33:17.875 [DEBUG] [Thread-173930] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:33:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:33:17.876 [DEBUG] [Thread-173930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:33:17.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:33:17.877 [DEBUG] [Thread-173930] [transport.py] [_log()] userauth is OK
2026-04-11T17:33:17.877 [DEBUG] [Thread-173930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:33:17.877 [DEBUG] [Thread-173930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:33:17.877 [DEBUG] [Thread-173930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:33:17.877 [DEBUG] [Thread-173930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:33:17.889 [INFO] [Thread-173930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:33:17.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:33:18.477 [DEBUG] [Thread-173930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:33:18.477 [DEBUG] [Thread-173930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:33:18.478 [DEBUG] [Thread-173930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:33:18.518 [DEBUG] [Thread-173930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:33:18.518 [DEBUG] [Thread-173930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:33:18.522 [DEBUG] [Thread-173930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:33:18.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:33:18.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:33:18.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:33:18.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:33:18.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:33:18.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:33:18.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:33:18.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:33:18.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:33:18.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.648037 -999.00  +12.80  14.39     97  +12.40 1 3 1 3 1   887    0 0.28 -6.67 ----- 14.4 14.4 281.1 22.8 14.0 -0.6 13.8 -0.4 13.4 -0.5 13.8 -0.1
2026-04-11T17:33:18.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:33:18.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:33:18.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.648037
2026-04-11T17:33:18.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:33:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:33:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:33:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:33:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:33:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:33:00', tmtdew=0.100035, humidity=99.6353, cloud=0.0, wind=22.5677, temperature=12.9642, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:33:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:33:18.544 [DEBUG] [Thread-173930] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:33:18.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:33:18.637 [DEBUG] [Thread-173933] [transport.py] [_log()] starting thread (client mode): 0xae5a5720
2026-04-11T17:33:18.637 [DEBUG] [Thread-173933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:33:18.652 [DEBUG] [Thread-173933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:33:18.652 [INFO] [Thread-173933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:33:18.659 [DEBUG] [Thread-173933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] client lang: <none>
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] server lang: <none>
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] kex follows: False
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] Compression: none
2026-04-11T17:33:18.660 [DEBUG] [Thread-173933] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:33:18.717 [DEBUG] [Thread-173933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:33:18.718 [DEBUG] [Thread-173933] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:33:18.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:33:18.719 [DEBUG] [Thread-173933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:33:18.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:33:18.773 [DEBUG] [Thread-173933] [transport.py] [_log()] userauth is OK
2026-04-11T17:33:18.773 [DEBUG] [Thread-173933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:33:18.774 [DEBUG] [Thread-173933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:33:18.774 [DEBUG] [Thread-173933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:33:18.774 [DEBUG] [Thread-173933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:33:18.793 [INFO] [Thread-173933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:33:18.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:33:18.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:33:18.884 [DEBUG] [Thread-173935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:19.609 [DEBUG] [Thread-173933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:33:19.609 [DEBUG] [Thread-173933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:33:19.657 [DEBUG] [Thread-173933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:33:19.657 [DEBUG] [Thread-173933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:33:19.666 [DEBUG] [Thread-173933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:33:19.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:33:19.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:33:19.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-04-11T17:33:19.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:33:19.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:33:19.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:33:19.703 [DEBUG] [Thread-173933] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:33:27.837 [DEBUG] [Thread-173936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:36.880 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:36.881 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:42.884 [DEBUG] [Thread-173937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:33:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:33:49.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:33:49.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-04-11T17:33:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 33, 36), 0.1052, 99.2375, 0.0, 19.584, 13.3953, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:33:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:33:36
2026-04-11T17:33:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:33:51.588 [DEBUG] [Thread-173938] [transport.py] [_log()] starting thread (client mode): 0xb0f54250
2026-04-11T17:33:51.589 [DEBUG] [Thread-173938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:33:51.605 [DEBUG] [Thread-173938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:33:51.605 [INFO] [Thread-173938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:51.606 [DEBUG] [Thread-173938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] client lang: <none>
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] server lang: <none>
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] kex follows: False
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] Compression: none
2026-04-11T17:33:51.607 [DEBUG] [Thread-173938] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:33:51.615 [DEBUG] [Thread-173938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:33:51.615 [DEBUG] [Thread-173938] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:33:51.615 [DEBUG] [Thread-173938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:33:51.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:33:51.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:33:51.617 [DEBUG] [Thread-173938] [transport.py] [_log()] userauth is OK
2026-04-11T17:33:51.617 [DEBUG] [Thread-173938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:33:51.617 [DEBUG] [Thread-173938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:33:51.617 [DEBUG] [Thread-173938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:33:51.617 [DEBUG] [Thread-173938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:33:51.632 [INFO] [Thread-173938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:33:51.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:33:52.235 [DEBUG] [Thread-173938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:33:52.236 [DEBUG] [Thread-173938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:33:52.236 [DEBUG] [Thread-173938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:33:52.277 [DEBUG] [Thread-173938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:33:52.277 [DEBUG] [Thread-173938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:33:52.281 [DEBUG] [Thread-173938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:33:52.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:33:52.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:33:52.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:33:52.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:33:52.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:33:52.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:33:52.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:33:52.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:33:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:33:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.648384 -999.00  +12.90  11.82     97  +12.40 1 3 1 3 1   887    0 0.29 -6.21 ----- 11.8 11.8 293.8 21.2 14.0 -0.7 13.7 -0.2 13.4 -0.8 13.8 -0.1
2026-04-11T17:33:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:33:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:33:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.648384
2026-04-11T17:33:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:33:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:33:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:33:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:33:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:33:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:33:36', tmtdew=0.1052, humidity=99.2375, cloud=0.0, wind=19.584, temperature=13.3953, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:33:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:33:52.309 [DEBUG] [Thread-173938] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:33:52.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:33:52.405 [DEBUG] [Thread-173941] [transport.py] [_log()] starting thread (client mode): 0xb0f541c0
2026-04-11T17:33:52.405 [DEBUG] [Thread-173941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:33:52.419 [DEBUG] [Thread-173941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:33:52.419 [INFO] [Thread-173941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:33:52.427 [DEBUG] [Thread-173941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:33:52.427 [DEBUG] [Thread-173941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] client lang: <none>
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] server lang: <none>
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] kex follows: False
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:33:52.428 [DEBUG] [Thread-173941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:33:52.429 [DEBUG] [Thread-173941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:33:52.429 [DEBUG] [Thread-173941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:33:52.429 [DEBUG] [Thread-173941] [transport.py] [_log()] Compression: none
2026-04-11T17:33:52.429 [DEBUG] [Thread-173941] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:33:52.485 [DEBUG] [Thread-173941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:33:52.486 [DEBUG] [Thread-173941] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:33:52.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:33:52.487 [DEBUG] [Thread-173941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:33:52.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:33:52.542 [DEBUG] [Thread-173941] [transport.py] [_log()] userauth is OK
2026-04-11T17:33:52.542 [DEBUG] [Thread-173941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:33:52.542 [DEBUG] [Thread-173941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:33:52.542 [DEBUG] [Thread-173941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:33:52.542 [DEBUG] [Thread-173941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:33:52.560 [INFO] [Thread-173941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:33:52.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:33:52.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:33:53.396 [DEBUG] [Thread-173941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:33:53.396 [DEBUG] [Thread-173941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:33:53.444 [DEBUG] [Thread-173941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:33:53.444 [DEBUG] [Thread-173941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:33:53.453 [DEBUG] [Thread-173941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:33:53.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:33:53.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-04-11T17:33:53.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-04-11T17:33:53.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:33:53.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:33:53.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:33:53.490 [DEBUG] [Thread-173941] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:33:57.924 [DEBUG] [Thread-173943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:12.975 [DEBUG] [Thread-173944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:18.913 [DEBUG] [Thread-173945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:23.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:34:23.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:34:23.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-04-11T17:34:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 34, 11), 0.10254, 99.6191, 0.0, 20.5384, 12.9811, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:34:24.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:34:11
2026-04-11T17:34:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:34:25.426 [DEBUG] [Thread-173946] [transport.py] [_log()] starting thread (client mode): 0xae516830
2026-04-11T17:34:25.427 [DEBUG] [Thread-173946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:34:25.440 [DEBUG] [Thread-173946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:34:25.441 [INFO] [Thread-173946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] client lang: <none>
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] server lang: <none>
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] kex follows: False
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] Compression: none
2026-04-11T17:34:25.444 [DEBUG] [Thread-173946] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:34:25.461 [DEBUG] [Thread-173946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:34:25.461 [DEBUG] [Thread-173946] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:34:25.462 [DEBUG] [Thread-173946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:34:25.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:34:25.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:34:25.464 [DEBUG] [Thread-173946] [transport.py] [_log()] userauth is OK
2026-04-11T17:34:25.464 [DEBUG] [Thread-173946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:34:25.465 [DEBUG] [Thread-173946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:34:25.465 [DEBUG] [Thread-173946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:34:25.465 [DEBUG] [Thread-173946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:34:25.483 [INFO] [Thread-173946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:34:25.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:34:26.101 [DEBUG] [Thread-173946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:34:26.101 [DEBUG] [Thread-173946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:34:26.102 [DEBUG] [Thread-173946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:34:26.142 [DEBUG] [Thread-173946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:34:26.142 [DEBUG] [Thread-173946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:34:26.146 [DEBUG] [Thread-173946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:34:26.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:34:26.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:34:26.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:34:26.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:34:26.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:34:26.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:34:26.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:34:26.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:34:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:34:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.648732 -999.00  +12.90  14.64     97  +12.40 1 3 1 3 1   887    0 0.31 -5.57 ----- 14.6 14.6 300.2 18.6 14.0 -0.8 13.8 -0.3 13.4 -0.4 13.8 -0.1
2026-04-11T17:34:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:34:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:34:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.648732
2026-04-11T17:34:26.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:34:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:34:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:34:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:34:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:34:26.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:34:11', tmtdew=0.10254, humidity=99.6191, cloud=0.0, wind=20.5384, temperature=12.9811, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:34:10.445', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:34:26.171 [DEBUG] [Thread-173946] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:34:26.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:34:26.265 [DEBUG] [Thread-173949] [transport.py] [_log()] starting thread (client mode): 0xa7951ae0
2026-04-11T17:34:26.265 [DEBUG] [Thread-173949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:34:26.281 [DEBUG] [Thread-173949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:34:26.281 [INFO] [Thread-173949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:34:26.289 [DEBUG] [Thread-173949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:34:26.289 [DEBUG] [Thread-173949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:34:26.289 [DEBUG] [Thread-173949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:34:26.289 [DEBUG] [Thread-173949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:34:26.289 [DEBUG] [Thread-173949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] client lang: <none>
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] server lang: <none>
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] kex follows: False
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] Compression: none
2026-04-11T17:34:26.290 [DEBUG] [Thread-173949] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:34:26.350 [DEBUG] [Thread-173949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:34:26.351 [DEBUG] [Thread-173949] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:34:26.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:34:26.352 [DEBUG] [Thread-173949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:34:26.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:34:26.411 [DEBUG] [Thread-173949] [transport.py] [_log()] userauth is OK
2026-04-11T17:34:26.411 [DEBUG] [Thread-173949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:34:26.412 [DEBUG] [Thread-173949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:34:26.412 [DEBUG] [Thread-173949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:34:26.412 [DEBUG] [Thread-173949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:34:26.431 [INFO] [Thread-173949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:34:26.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:34:26.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:34:27.265 [DEBUG] [Thread-173949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:34:27.265 [DEBUG] [Thread-173949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:34:27.313 [DEBUG] [Thread-173949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:34:27.313 [DEBUG] [Thread-173949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:34:27.322 [DEBUG] [Thread-173949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:34:27.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:34:27.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:34:27.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-04-11T17:34:27.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:34:27.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:34:27.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:34:27.359 [DEBUG] [Thread-173949] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:34:28.010 [DEBUG] [Thread-173951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:37.023 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:37.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:43.068 [DEBUG] [Thread-173952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:34:57.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:34:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:34:58.105 [DEBUG] [Thread-173953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:34:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 34, 47), 0.11019, 99.2051, 0.0, 23.2178, 13.3295, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:34:58.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:34:47
2026-04-11T17:34:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:34:59.242 [DEBUG] [Thread-173954] [transport.py] [_log()] starting thread (client mode): 0xb0f56fe0
2026-04-11T17:34:59.242 [DEBUG] [Thread-173954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:34:59.261 [DEBUG] [Thread-173954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:34:59.262 [INFO] [Thread-173954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:34:59.264 [DEBUG] [Thread-173954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:34:59.264 [DEBUG] [Thread-173954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:34:59.264 [DEBUG] [Thread-173954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:34:59.264 [DEBUG] [Thread-173954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:34:59.264 [DEBUG] [Thread-173954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] client lang: <none>
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] server lang: <none>
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] kex follows: False
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] Compression: none
2026-04-11T17:34:59.265 [DEBUG] [Thread-173954] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:34:59.273 [DEBUG] [Thread-173954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:34:59.274 [DEBUG] [Thread-173954] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:34:59.274 [DEBUG] [Thread-173954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:34:59.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:34:59.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:34:59.276 [DEBUG] [Thread-173954] [transport.py] [_log()] userauth is OK
2026-04-11T17:34:59.276 [DEBUG] [Thread-173954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:34:59.276 [DEBUG] [Thread-173954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:34:59.276 [DEBUG] [Thread-173954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:34:59.276 [DEBUG] [Thread-173954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:34:59.300 [INFO] [Thread-173954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:34:59.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:34:59.878 [DEBUG] [Thread-173954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:34:59.878 [DEBUG] [Thread-173954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:34:59.878 [DEBUG] [Thread-173954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:34:59.919 [DEBUG] [Thread-173954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:34:59.919 [DEBUG] [Thread-173954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:34:59.923 [DEBUG] [Thread-173954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:34:59.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:34:59.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:34:59.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:34:59.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:34:59.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:34:59.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:34:59.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:34:59.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:34:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:34:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.649079 -999.00  +12.90  14.28     97  +12.50 1 3 1 3 1   887    0 0.32 -5.13 ----- 14.3 14.3 291.4 21.0 14.0 -0.8 13.8 -0.3 13.4 -0.4 13.9 -0.1
2026-04-11T17:34:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:34:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:34:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.649079
2026-04-11T17:34:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:34:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:34:59.946 [DEBUG] [Thread-173954] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:34:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:34:59.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:34:59.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:34:59.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:34:47', tmtdew=0.11019, humidity=99.2051, cloud=0.0, wind=23.2178, temperature=13.3295, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:34:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:35:00.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:35:00.046 [DEBUG] [Thread-173957] [transport.py] [_log()] starting thread (client mode): 0xb0f55fc0
2026-04-11T17:35:00.046 [DEBUG] [Thread-173957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:35:00.060 [DEBUG] [Thread-173957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:35:00.060 [INFO] [Thread-173957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:35:00.067 [DEBUG] [Thread-173957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:35:00.067 [DEBUG] [Thread-173957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:35:00.067 [DEBUG] [Thread-173957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:35:00.067 [DEBUG] [Thread-173957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:35:00.067 [DEBUG] [Thread-173957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] client lang: <none>
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] server lang: <none>
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] kex follows: False
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] Compression: none
2026-04-11T17:35:00.068 [DEBUG] [Thread-173957] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:35:00.124 [DEBUG] [Thread-173957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:35:00.125 [DEBUG] [Thread-173957] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:35:00.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:35:00.126 [DEBUG] [Thread-173957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:35:00.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:35:00.181 [DEBUG] [Thread-173957] [transport.py] [_log()] userauth is OK
2026-04-11T17:35:00.181 [DEBUG] [Thread-173957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:35:00.181 [DEBUG] [Thread-173957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:35:00.181 [DEBUG] [Thread-173957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:35:00.182 [DEBUG] [Thread-173957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:35:00.200 [INFO] [Thread-173957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:35:00.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:35:00.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:35:01.080 [DEBUG] [Thread-173957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:35:01.081 [DEBUG] [Thread-173957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:35:01.128 [DEBUG] [Thread-173957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:35:01.129 [DEBUG] [Thread-173957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:35:01.138 [DEBUG] [Thread-173957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:35:01.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:35:01.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-04-11T17:35: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-04-11T17:35:01.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:35:01.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:35:01.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:35:01.174 [DEBUG] [Thread-173957] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:35:13.139 [DEBUG] [Thread-173959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:35:18.946 [DEBUG] [Thread-173960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:35:28.190 [DEBUG] [Thread-173961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:35:31.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:35:31.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:35:31.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-04-11T17:35:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 35, 22), 0.097415, 99.6523, 0.0, 19.7968, 13.0145, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:35:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:35:22
2026-04-11T17:35:32.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:35:33.043 [DEBUG] [Thread-173962] [transport.py] [_log()] starting thread (client mode): 0xa7953b20
2026-04-11T17:35:33.043 [DEBUG] [Thread-173962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:35:33.061 [DEBUG] [Thread-173962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:35:33.061 [INFO] [Thread-173962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] client lang: <none>
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] server lang: <none>
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] kex follows: False
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] Compression: none
2026-04-11T17:35:33.063 [DEBUG] [Thread-173962] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:35:33.079 [DEBUG] [Thread-173962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:35:33.079 [DEBUG] [Thread-173962] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:35:33.079 [DEBUG] [Thread-173962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:35:33.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:35:33.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:35:33.080 [DEBUG] [Thread-173962] [transport.py] [_log()] userauth is OK
2026-04-11T17:35:33.080 [DEBUG] [Thread-173962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:35:33.080 [DEBUG] [Thread-173962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:35:33.080 [DEBUG] [Thread-173962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:35:33.080 [DEBUG] [Thread-173962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:35:33.095 [INFO] [Thread-173962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:35:33.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:35:33.692 [DEBUG] [Thread-173962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:35:33.693 [DEBUG] [Thread-173962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:35:33.693 [DEBUG] [Thread-173962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:35:33.734 [DEBUG] [Thread-173962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:35:33.734 [DEBUG] [Thread-173962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:35:33.736 [DEBUG] [Thread-173962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:35:33.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:35:33.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:35:33.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:35:33.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:35:33.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:35:33.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:35:33.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:35:33.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:35:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:35:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.649426 -999.00  +12.80  17.62     97  +12.40 1 3 1 3 1   887    0 0.33 -4.64 ----- 17.6 17.6 287.8 22.1 13.9 -1.0 13.8 -0.5 13.3 -0.6 13.8 -0.3
2026-04-11T17:35:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:35:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:35:33.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.649426
2026-04-11T17:35:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:35:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:35:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:35:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:35:33.765 [DEBUG] [Thread-173962] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:35:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:35:33.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:35:22', tmtdew=0.097415, humidity=99.6523, cloud=0.0, wind=19.7968, temperature=13.0145, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:35:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:35:33.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:35:33.861 [DEBUG] [Thread-173965] [transport.py] [_log()] starting thread (client mode): 0xa79513c0
2026-04-11T17:35:33.861 [DEBUG] [Thread-173965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:35:33.875 [DEBUG] [Thread-173965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:35:33.875 [INFO] [Thread-173965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] client lang: <none>
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] server lang: <none>
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] kex follows: False
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] Compression: none
2026-04-11T17:35:33.883 [DEBUG] [Thread-173965] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:35:33.943 [DEBUG] [Thread-173965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:35:33.943 [DEBUG] [Thread-173965] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:35:33.944 [DEBUG] [Thread-173965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:35:33.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:35:33.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:35:34.002 [DEBUG] [Thread-173965] [transport.py] [_log()] userauth is OK
2026-04-11T17:35:34.002 [DEBUG] [Thread-173965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:35:34.002 [DEBUG] [Thread-173965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:35:34.002 [DEBUG] [Thread-173965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:35:34.003 [DEBUG] [Thread-173965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:35:34.021 [INFO] [Thread-173965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:35:34.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:35:34.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:35:34.819 [DEBUG] [Thread-173965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:35:34.819 [DEBUG] [Thread-173965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:35:34.867 [DEBUG] [Thread-173965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:35:34.867 [DEBUG] [Thread-173965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:35:34.877 [DEBUG] [Thread-173965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:35:34.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:35:34.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-04-11T17:35:34.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-04-11T17:35:34.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:35:34.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:35:34.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:35:34.914 [DEBUG] [Thread-173965] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:35:37.164 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:35:37.166 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:35:43.229 [DEBUG] [Thread-173967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:35:58.292 [DEBUG] [Thread-173968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:04.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:36:04.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:36:04.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-04-11T17:36:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 35, 58), 0.094875, 99.6688, 0.0, 21.3329, 12.9147, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:36:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:35:58
2026-04-11T17:36:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:36:06.659 [DEBUG] [Thread-173969] [transport.py] [_log()] starting thread (client mode): 0xa7951930
2026-04-11T17:36:06.659 [DEBUG] [Thread-173969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:36:06.679 [DEBUG] [Thread-173969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:36:06.679 [INFO] [Thread-173969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] client lang: <none>
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] server lang: <none>
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] kex follows: False
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:36:06.682 [DEBUG] [Thread-173969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:36:06.683 [DEBUG] [Thread-173969] [transport.py] [_log()] Compression: none
2026-04-11T17:36:06.683 [DEBUG] [Thread-173969] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:36:06.699 [DEBUG] [Thread-173969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:36:06.700 [DEBUG] [Thread-173969] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:36:06.700 [DEBUG] [Thread-173969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:36:06.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:36:06.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:36:06.745 [DEBUG] [Thread-173969] [transport.py] [_log()] userauth is OK
2026-04-11T17:36:06.745 [DEBUG] [Thread-173969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:36:06.746 [DEBUG] [Thread-173969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:36:06.746 [DEBUG] [Thread-173969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:36:06.746 [DEBUG] [Thread-173969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:36:06.766 [INFO] [Thread-173969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:36:06.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:36:07.434 [DEBUG] [Thread-173969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:36:07.434 [DEBUG] [Thread-173969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:36:07.434 [DEBUG] [Thread-173969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:36:07.476 [DEBUG] [Thread-173969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:36:07.476 [DEBUG] [Thread-173969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:36:07.479 [DEBUG] [Thread-173969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:36:07.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:36:07.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:36:07.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:36:07.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:36:07.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:36:07.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:36:07.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:36:07.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.649773 -999.00  +12.80  19.11     97  +12.30 1 3 1 3 1   887    0 0.36 -3.96 ----- 19.1 19.1 278.2 21.3 13.9 -0.7 13.8 -0.4 13.4 -0.3 13.8 -0.1
2026-04-11T17:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.649773
2026-04-11T17:36:07.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:36:07.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:35:58', tmtdew=0.094875, humidity=99.6688, cloud=0.0, wind=21.3329, temperature=12.9147, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:35:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:36:07.508 [DEBUG] [Thread-173969] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:36:07.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:36:07.599 [DEBUG] [Thread-173972] [transport.py] [_log()] starting thread (client mode): 0xae5172e0
2026-04-11T17:36:07.599 [DEBUG] [Thread-173972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:36:07.613 [DEBUG] [Thread-173972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:36:07.614 [INFO] [Thread-173972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:36:07.621 [DEBUG] [Thread-173972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:36:07.621 [DEBUG] [Thread-173972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] client lang: <none>
2026-04-11T17:36:07.622 [DEBUG] [Thread-173972] [transport.py] [_log()] server lang: <none>
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] kex follows: False
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] Compression: none
2026-04-11T17:36:07.623 [DEBUG] [Thread-173972] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:36:07.682 [DEBUG] [Thread-173972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:36:07.682 [DEBUG] [Thread-173972] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:36:07.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:36:07.683 [DEBUG] [Thread-173972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:36:07.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:36:07.737 [DEBUG] [Thread-173972] [transport.py] [_log()] userauth is OK
2026-04-11T17:36:07.737 [DEBUG] [Thread-173972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:36:07.738 [DEBUG] [Thread-173972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:36:07.738 [DEBUG] [Thread-173972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:36:07.738 [DEBUG] [Thread-173972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:36:07.758 [INFO] [Thread-173972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:36:07.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:36:07.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:36:08.577 [DEBUG] [Thread-173972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:36:08.577 [DEBUG] [Thread-173972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:36:08.624 [DEBUG] [Thread-173972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:36:08.624 [DEBUG] [Thread-173972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:36:08.633 [DEBUG] [Thread-173972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:36:08.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:36:08.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-04-11T17:36:08.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-04-11T17:36:08.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:36:08.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:36:08.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:36:08.674 [DEBUG] [Thread-173972] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:36:13.327 [DEBUG] [Thread-173974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:18.991 [DEBUG] [Thread-173975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:28.381 [DEBUG] [Thread-173976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:37.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:37.307 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:36:38.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:36:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:36:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 35, 58), 0.094875, 99.6688, 0.0, 21.3329, 12.9147, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:36:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:35:58
2026-04-11T17:36:40.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:36:40.580 [DEBUG] [Thread-173977] [transport.py] [_log()] starting thread (client mode): 0xae514cd0
2026-04-11T17:36:40.581 [DEBUG] [Thread-173977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:36:40.600 [DEBUG] [Thread-173977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:36:40.600 [INFO] [Thread-173977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] client lang: <none>
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] server lang: <none>
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] kex follows: False
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] Compression: none
2026-04-11T17:36:40.602 [DEBUG] [Thread-173977] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:36:40.611 [DEBUG] [Thread-173977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:36:40.611 [DEBUG] [Thread-173977] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:36:40.611 [DEBUG] [Thread-173977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:36:40.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:36:40.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:36:40.613 [DEBUG] [Thread-173977] [transport.py] [_log()] userauth is OK
2026-04-11T17:36:40.613 [DEBUG] [Thread-173977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:36:40.613 [DEBUG] [Thread-173977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:36:40.613 [DEBUG] [Thread-173977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:36:40.614 [DEBUG] [Thread-173977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:36:40.638 [INFO] [Thread-173977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:36:40.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:36:41.294 [DEBUG] [Thread-173977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:36:41.295 [DEBUG] [Thread-173977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:36:41.295 [DEBUG] [Thread-173977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:36:41.337 [DEBUG] [Thread-173977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:36:41.337 [DEBUG] [Thread-173977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:36:41.341 [DEBUG] [Thread-173977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:36:41.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:36:41.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:36:41.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:36:41.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:36:41.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:36:41.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:36:41.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:36:41.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:36:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:36:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.650120 -999.00  +12.80  17.97     97  +12.30 1 3 1 3 1   887    0 0.37 -3.73 ----- 18.0 18.0 289.8 20.5 13.9 -0.8 13.8 -0.4 13.4 -0.5 13.8 -0.2
2026-04-11T17:36:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:36:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:36:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.650120
2026-04-11T17:36:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:36:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:36:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:36:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:36:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:36:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:35:58', tmtdew=0.094875, humidity=99.6688, cloud=0.0, wind=21.3329, temperature=12.9147, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:36:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:36:41.369 [DEBUG] [Thread-173977] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:36:41.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:36:41.476 [DEBUG] [Thread-173980] [transport.py] [_log()] starting thread (client mode): 0xae514f40
2026-04-11T17:36:41.476 [DEBUG] [Thread-173980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:36:41.490 [DEBUG] [Thread-173980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:36:41.491 [INFO] [Thread-173980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:36:41.498 [DEBUG] [Thread-173980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] client lang: <none>
2026-04-11T17:36:41.499 [DEBUG] [Thread-173980] [transport.py] [_log()] server lang: <none>
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] kex follows: False
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] Compression: none
2026-04-11T17:36:41.500 [DEBUG] [Thread-173980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:36:41.559 [DEBUG] [Thread-173980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:36:41.559 [DEBUG] [Thread-173980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:36:41.560 [DEBUG] [Thread-173980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:36:41.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:36:41.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:36:41.618 [DEBUG] [Thread-173980] [transport.py] [_log()] userauth is OK
2026-04-11T17:36:41.618 [DEBUG] [Thread-173980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:36:41.618 [DEBUG] [Thread-173980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:36:41.619 [DEBUG] [Thread-173980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:36:41.619 [DEBUG] [Thread-173980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:36:41.637 [INFO] [Thread-173980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:36:41.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:36:41.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:36:42.469 [DEBUG] [Thread-173980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:36:42.470 [DEBUG] [Thread-173980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:36:42.517 [DEBUG] [Thread-173980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:36:42.517 [DEBUG] [Thread-173980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:36:42.527 [DEBUG] [Thread-173980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:36:42.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:36:42.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:36:42.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-04-11T17:36:42.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:36:42.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:36:42.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:36:42.562 [DEBUG] [Thread-173980] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:36:43.419 [DEBUG] [Thread-173982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:36:58.472 [DEBUG] [Thread-173983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:12.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:37:12.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:37:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:37:13.508 [DEBUG] [Thread-173984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 36, 34), 0.09488, 99.3043, 0.0, 22.5828, 13.4288, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:37:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:36:34
2026-04-11T17:37:14.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:37:14.472 [DEBUG] [Thread-173985] [transport.py] [_log()] starting thread (client mode): 0xae5e6170
2026-04-11T17:37:14.472 [DEBUG] [Thread-173985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:37:14.492 [DEBUG] [Thread-173985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:37:14.492 [INFO] [Thread-173985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:37:14.496 [DEBUG] [Thread-173985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] client lang: <none>
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] server lang: <none>
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] kex follows: False
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] Compression: none
2026-04-11T17:37:14.497 [DEBUG] [Thread-173985] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:37:14.514 [DEBUG] [Thread-173985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:37:14.515 [DEBUG] [Thread-173985] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:37:14.515 [DEBUG] [Thread-173985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:37:14.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:37:14.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:37:14.517 [DEBUG] [Thread-173985] [transport.py] [_log()] userauth is OK
2026-04-11T17:37:14.517 [DEBUG] [Thread-173985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:37:14.517 [DEBUG] [Thread-173985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:37:14.517 [DEBUG] [Thread-173985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:37:14.517 [DEBUG] [Thread-173985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:37:14.541 [INFO] [Thread-173985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:37:14.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:37:15.198 [DEBUG] [Thread-173985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:37:15.198 [DEBUG] [Thread-173985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:37:15.198 [DEBUG] [Thread-173985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:37:15.240 [DEBUG] [Thread-173985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:37:15.240 [DEBUG] [Thread-173985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:37:15.243 [DEBUG] [Thread-173985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:37:15.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:37:15.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:37:15.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:37:15.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:37:15.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:37:15.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:37:15.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:37:15.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:37:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:37:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.650468 -999.00  +12.70  19.10     97  +12.30 1 3 1 3 1   887    0 0.38 -3.32 ----- 19.1 19.1 279.0 24.8 13.9 -0.9 13.8 -0.5 13.4 -0.3 13.8 -0.2
2026-04-11T17:37:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:37:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:37:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.650468
2026-04-11T17:37:15.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:37:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:37:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:37:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:37:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:37:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:36:34', tmtdew=0.09488, humidity=99.3043, cloud=0.0, wind=22.5828, temperature=13.4288, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:36:40.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:37:15.269 [DEBUG] [Thread-173985] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:37:15.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:37:15.368 [DEBUG] [Thread-173988] [transport.py] [_log()] starting thread (client mode): 0xae5f0a00
2026-04-11T17:37:15.368 [DEBUG] [Thread-173988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:37:15.383 [DEBUG] [Thread-173988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:37:15.383 [INFO] [Thread-173988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:37:15.396 [DEBUG] [Thread-173988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] client lang: <none>
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] server lang: <none>
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] kex follows: False
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:37:15.397 [DEBUG] [Thread-173988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:37:15.398 [DEBUG] [Thread-173988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:37:15.398 [DEBUG] [Thread-173988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:37:15.398 [DEBUG] [Thread-173988] [transport.py] [_log()] Compression: none
2026-04-11T17:37:15.398 [DEBUG] [Thread-173988] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:37:15.449 [DEBUG] [Thread-173988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:37:15.449 [DEBUG] [Thread-173988] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:37:15.450 [DEBUG] [Thread-173988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:37:15.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:37:15.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:37:15.506 [DEBUG] [Thread-173988] [transport.py] [_log()] userauth is OK
2026-04-11T17:37:15.506 [DEBUG] [Thread-173988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:37:15.506 [DEBUG] [Thread-173988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:37:15.506 [DEBUG] [Thread-173988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:37:15.506 [DEBUG] [Thread-173988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:37:15.524 [INFO] [Thread-173988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:37:15.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:37:15.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:37:16.337 [DEBUG] [Thread-173988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:37:16.337 [DEBUG] [Thread-173988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:37:16.385 [DEBUG] [Thread-173988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:37:16.386 [DEBUG] [Thread-173988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:37:16.394 [DEBUG] [Thread-173988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:37:16.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:37:16.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-04-11T17:37:16.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-04-11T17:37:16.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:37:16.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:37:16.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:37:16.428 [DEBUG] [Thread-173988] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:37:19.027 [DEBUG] [Thread-173990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:28.543 [DEBUG] [Thread-173991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:37.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:37.449 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:43.597 [DEBUG] [Thread-173992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:37:46.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:37:46.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:37:46.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-04-11T17:37:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 37, 9), 0.09744, 99.6521, 0.0, 23.6614, 12.9146, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:37:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:37:09
2026-04-11T17:37:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:37:48.363 [DEBUG] [Thread-173993] [transport.py] [_log()] starting thread (client mode): 0xa7951e40
2026-04-11T17:37:48.363 [DEBUG] [Thread-173993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:37:48.383 [DEBUG] [Thread-173993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:37:48.384 [INFO] [Thread-173993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:37:48.387 [DEBUG] [Thread-173993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] client lang: <none>
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] server lang: <none>
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] kex follows: False
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] Compression: none
2026-04-11T17:37:48.388 [DEBUG] [Thread-173993] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:37:48.407 [DEBUG] [Thread-173993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:37:48.407 [DEBUG] [Thread-173993] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:37:48.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:37:48.409 [DEBUG] [Thread-173993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:37:48.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:37:48.411 [DEBUG] [Thread-173993] [transport.py] [_log()] userauth is OK
2026-04-11T17:37:48.411 [DEBUG] [Thread-173993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:37:48.411 [DEBUG] [Thread-173993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:37:48.411 [DEBUG] [Thread-173993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:37:48.412 [DEBUG] [Thread-173993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:37:48.427 [INFO] [Thread-173993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:37:48.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:37:49.086 [DEBUG] [Thread-173993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:37:49.086 [DEBUG] [Thread-173993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:37:49.087 [DEBUG] [Thread-173993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:37:49.127 [DEBUG] [Thread-173993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:37:49.127 [DEBUG] [Thread-173993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:37:49.130 [DEBUG] [Thread-173993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:37:49.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:37:49.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:37:49.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:37:49.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:37:49.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:37:49.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:37:49.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:37:49.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:37:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:37:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.651162 -999.00  +12.60  22.02     97  +12.20 1 3 1 3 1   887    0 0.39 -3.08 ----- 22.0 22.0 282.4 26.2 13.8 -1.1 13.6 -0.6 13.2 -0.7 13.7 -0.2
2026-04-11T17:37:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:37:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:37:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.651162
2026-04-11T17:37:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:37:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:37:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:37:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:37:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:37:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:37:09', tmtdew=0.09744, humidity=99.6521, cloud=0.0, wind=23.6614, temperature=12.9146, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:37:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:37:49.157 [DEBUG] [Thread-173993] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:37:49.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:37:49.248 [DEBUG] [Thread-173996] [transport.py] [_log()] starting thread (client mode): 0xa7953f70
2026-04-11T17:37:49.249 [DEBUG] [Thread-173996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:37:49.263 [DEBUG] [Thread-173996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:37:49.264 [INFO] [Thread-173996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:37:49.271 [DEBUG] [Thread-173996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:37:49.271 [DEBUG] [Thread-173996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:37:49.271 [DEBUG] [Thread-173996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] client lang: <none>
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] server lang: <none>
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] kex follows: False
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] Compression: none
2026-04-11T17:37:49.272 [DEBUG] [Thread-173996] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:37:49.330 [DEBUG] [Thread-173996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:37:49.331 [DEBUG] [Thread-173996] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:37:49.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:37:49.332 [DEBUG] [Thread-173996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:37:49.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:37:49.386 [DEBUG] [Thread-173996] [transport.py] [_log()] userauth is OK
2026-04-11T17:37:49.386 [DEBUG] [Thread-173996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:37:49.387 [DEBUG] [Thread-173996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:37:49.387 [DEBUG] [Thread-173996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:37:49.387 [DEBUG] [Thread-173996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:37:49.410 [INFO] [Thread-173996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:37:49.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:37:49.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:37:50.268 [DEBUG] [Thread-173996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:37:50.269 [DEBUG] [Thread-173996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:37:50.316 [DEBUG] [Thread-173996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:37:50.316 [DEBUG] [Thread-173996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:37:50.325 [DEBUG] [Thread-173996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:37:50.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:37:50.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-04-11T17:37:50.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-04-11T17:37:50.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:37:50.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:37:50.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:37:50.361 [DEBUG] [Thread-173996] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:37:58.640 [DEBUG] [Thread-173998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:13.694 [DEBUG] [Thread-173999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:19.062 [DEBUG] [Thread-174000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:38:20.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:38:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:38:21.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 37, 45), 0.1, 99.2711, 0.0, 25.1935, 13.263, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:38:21.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:37:45
2026-04-11T17:38:22.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:38:22.205 [DEBUG] [Thread-174001] [transport.py] [_log()] starting thread (client mode): 0xae517850
2026-04-11T17:38:22.205 [DEBUG] [Thread-174001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:38:22.226 [DEBUG] [Thread-174001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:38:22.227 [INFO] [Thread-174001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:38:22.230 [DEBUG] [Thread-174001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:38:22.230 [DEBUG] [Thread-174001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:38:22.230 [DEBUG] [Thread-174001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:38:22.230 [DEBUG] [Thread-174001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] client lang: <none>
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] server lang: <none>
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] kex follows: False
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:38:22.231 [DEBUG] [Thread-174001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:38:22.232 [DEBUG] [Thread-174001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:38:22.232 [DEBUG] [Thread-174001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:38:22.232 [DEBUG] [Thread-174001] [transport.py] [_log()] Compression: none
2026-04-11T17:38:22.232 [DEBUG] [Thread-174001] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:38:22.253 [DEBUG] [Thread-174001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:38:22.253 [DEBUG] [Thread-174001] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:38:22.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:38:22.254 [DEBUG] [Thread-174001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:38:22.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:38:22.256 [DEBUG] [Thread-174001] [transport.py] [_log()] userauth is OK
2026-04-11T17:38:22.257 [DEBUG] [Thread-174001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:38:22.257 [DEBUG] [Thread-174001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:38:22.257 [DEBUG] [Thread-174001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:38:22.257 [DEBUG] [Thread-174001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:38:22.293 [INFO] [Thread-174001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:38:22.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:38:22.930 [DEBUG] [Thread-174001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:38:22.930 [DEBUG] [Thread-174001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:38:22.931 [DEBUG] [Thread-174001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:38:22.971 [DEBUG] [Thread-174001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:38:22.971 [DEBUG] [Thread-174001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:38:22.975 [DEBUG] [Thread-174001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:38:22.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:38:22.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:38:22.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:38:22.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:38:22.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:38:22.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:38:23.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:38:23.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:38:23.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:38:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.651509 -999.00  +12.60  15.36     97  +12.20 1 3 1 3 1   887    0 0.38 -3.13 ----- 15.4 15.4 279.8 26.4 13.8 -0.8 13.6 -0.3 13.2 -0.5 13.7 -0.2
2026-04-11T17:38:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:38:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:38:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.651509
2026-04-11T17:38:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:38:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:38:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:38:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:38:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:38:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:37:45', tmtdew=0.1, humidity=99.2711, cloud=0.0, wind=25.1935, temperature=13.263, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:38:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:38:23.003 [DEBUG] [Thread-174001] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:38:23.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:38:23.093 [DEBUG] [Thread-174004] [transport.py] [_log()] starting thread (client mode): 0xae515db0
2026-04-11T17:38:23.093 [DEBUG] [Thread-174004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:38:23.108 [DEBUG] [Thread-174004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:38:23.109 [INFO] [Thread-174004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:38:23.116 [DEBUG] [Thread-174004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:38:23.116 [DEBUG] [Thread-174004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:38:23.116 [DEBUG] [Thread-174004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] client lang: <none>
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] server lang: <none>
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] kex follows: False
2026-04-11T17:38:23.117 [DEBUG] [Thread-174004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:38:23.118 [DEBUG] [Thread-174004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:38:23.118 [DEBUG] [Thread-174004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:38:23.118 [DEBUG] [Thread-174004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:38:23.118 [DEBUG] [Thread-174004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:38:23.118 [DEBUG] [Thread-174004] [transport.py] [_log()] Compression: none
2026-04-11T17:38:23.118 [DEBUG] [Thread-174004] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:38:23.175 [DEBUG] [Thread-174004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:38:23.176 [DEBUG] [Thread-174004] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:38:23.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:38:23.177 [DEBUG] [Thread-174004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:38:23.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:38:23.235 [DEBUG] [Thread-174004] [transport.py] [_log()] userauth is OK
2026-04-11T17:38:23.236 [DEBUG] [Thread-174004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:38:23.236 [DEBUG] [Thread-174004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:38:23.236 [DEBUG] [Thread-174004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:38:23.236 [DEBUG] [Thread-174004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:38:23.257 [INFO] [Thread-174004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:38:23.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:38:23.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:38:24.089 [DEBUG] [Thread-174004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:38:24.089 [DEBUG] [Thread-174004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:38:24.137 [DEBUG] [Thread-174004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:38:24.137 [DEBUG] [Thread-174004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:38:24.146 [DEBUG] [Thread-174004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:38:24.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:38:24.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-04-11T17:38:24.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-04-11T17:38:24.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:38:24.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:38:24.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:38:24.183 [DEBUG] [Thread-174004] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:38:28.732 [DEBUG] [Thread-174006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:37.589 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:37.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:43.786 [DEBUG] [Thread-174007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:38:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:38:54.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:38:54.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 38, 20), 0.09995, 99.6359, 0.0, 20.8382, 12.7485, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:38:55.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:38:20
2026-04-11T17:38:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:38:56.039 [DEBUG] [Thread-174008] [transport.py] [_log()] starting thread (client mode): 0xae5167d0
2026-04-11T17:38:56.039 [DEBUG] [Thread-174008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:38:56.059 [DEBUG] [Thread-174008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:38:56.059 [INFO] [Thread-174008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:38:56.062 [DEBUG] [Thread-174008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:38:56.062 [DEBUG] [Thread-174008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:38:56.062 [DEBUG] [Thread-174008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] client lang: <none>
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] server lang: <none>
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] kex follows: False
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] Compression: none
2026-04-11T17:38:56.063 [DEBUG] [Thread-174008] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:38:56.081 [DEBUG] [Thread-174008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:38:56.081 [DEBUG] [Thread-174008] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:38:56.082 [DEBUG] [Thread-174008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:38:56.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:38:56.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:38:56.084 [DEBUG] [Thread-174008] [transport.py] [_log()] userauth is OK
2026-04-11T17:38:56.084 [DEBUG] [Thread-174008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:38:56.084 [DEBUG] [Thread-174008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:38:56.084 [DEBUG] [Thread-174008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:38:56.084 [DEBUG] [Thread-174008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:38:56.109 [INFO] [Thread-174008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:38:56.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:38:56.738 [DEBUG] [Thread-174008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:38:56.738 [DEBUG] [Thread-174008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:38:56.738 [DEBUG] [Thread-174008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:38:56.778 [DEBUG] [Thread-174008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:38:56.779 [DEBUG] [Thread-174008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:38:56.781 [DEBUG] [Thread-174008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:38:56.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:38:56.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:38:56.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:38:56.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:38:56.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:38:56.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:38:56.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:38:56.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:38:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:38:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.651856 -999.00  +12.70  13.16     97  +12.30 1 3 1 3 1   887    0 0.38 -2.90 ----- 13.2 13.2 290.0 20.5 13.8 -0.5 13.6 -0.3 13.2 -0.7 13.7 -0.2
2026-04-11T17:38:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:38:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:38:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.651856
2026-04-11T17:38:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:38:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:38:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:38:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:38:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:38:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:38:20', tmtdew=0.09995, humidity=99.6359, cloud=0.0, wind=20.8382, temperature=12.7485, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:38:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:38:56.806 [DEBUG] [Thread-174008] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:38:56.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:38:56.896 [DEBUG] [Thread-174011] [transport.py] [_log()] starting thread (client mode): 0xae5083a0
2026-04-11T17:38:56.896 [DEBUG] [Thread-174011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:38:56.911 [DEBUG] [Thread-174011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:38:56.912 [INFO] [Thread-174011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:38:56.919 [DEBUG] [Thread-174011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:38:56.919 [DEBUG] [Thread-174011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:38:56.919 [DEBUG] [Thread-174011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:38:56.919 [DEBUG] [Thread-174011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] client lang: <none>
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] server lang: <none>
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] kex follows: False
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] Compression: none
2026-04-11T17:38:56.920 [DEBUG] [Thread-174011] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:38:56.978 [DEBUG] [Thread-174011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:38:56.979 [DEBUG] [Thread-174011] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:38:56.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:38:56.980 [DEBUG] [Thread-174011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:38:56.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:38:57.034 [DEBUG] [Thread-174011] [transport.py] [_log()] userauth is OK
2026-04-11T17:38:57.035 [DEBUG] [Thread-174011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:38:57.035 [DEBUG] [Thread-174011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:38:57.035 [DEBUG] [Thread-174011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:38:57.035 [DEBUG] [Thread-174011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:38:57.053 [INFO] [Thread-174011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:38:57.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:38:57.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:38:57.872 [DEBUG] [Thread-174011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:38:57.872 [DEBUG] [Thread-174011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:38:57.922 [DEBUG] [Thread-174011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:38:57.922 [DEBUG] [Thread-174011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:38:57.932 [DEBUG] [Thread-174011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:38:57.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:38:57.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-04-11T17:38:57.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-04-11T17:38:57.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:38:57.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:38:57.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:38:57.965 [DEBUG] [Thread-174011] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:38:58.825 [DEBUG] [Thread-174013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:13.877 [DEBUG] [Thread-174014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:19.104 [DEBUG] [Thread-174015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:39:27.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:39:27.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-04-11T17:39:28.910 [DEBUG] [Thread-174016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:29.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 38, 56), 0.105085, 99.6026, 0.0, 21.2969, 12.7819, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:39:29.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:38:56
2026-04-11T17:39:29.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:39:29.795 [DEBUG] [Thread-174017] [transport.py] [_log()] starting thread (client mode): 0xae516f50
2026-04-11T17:39:29.795 [DEBUG] [Thread-174017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:39:29.811 [DEBUG] [Thread-174017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:39:29.811 [INFO] [Thread-174017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:39:29.815 [DEBUG] [Thread-174017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:39:29.815 [DEBUG] [Thread-174017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:39:29.815 [DEBUG] [Thread-174017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] client lang: <none>
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] server lang: <none>
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] kex follows: False
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] Compression: none
2026-04-11T17:39:29.816 [DEBUG] [Thread-174017] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:39:29.835 [DEBUG] [Thread-174017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:39:29.835 [DEBUG] [Thread-174017] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:39:29.836 [DEBUG] [Thread-174017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:39:29.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:39:29.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:39:29.877 [DEBUG] [Thread-174017] [transport.py] [_log()] userauth is OK
2026-04-11T17:39:29.877 [DEBUG] [Thread-174017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:39:29.877 [DEBUG] [Thread-174017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:39:29.877 [DEBUG] [Thread-174017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:39:29.877 [DEBUG] [Thread-174017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:39:29.902 [INFO] [Thread-174017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:39:29.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:39:30.544 [DEBUG] [Thread-174017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:39:30.545 [DEBUG] [Thread-174017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:39:30.545 [DEBUG] [Thread-174017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:39:30.587 [DEBUG] [Thread-174017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:39:30.587 [DEBUG] [Thread-174017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:39:30.590 [DEBUG] [Thread-174017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:39:30.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:39:30.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:39:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:39:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:39:30.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:39:30.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:39:30.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:39:30.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:39:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:39:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.652204 -999.00  +12.70  19.35     97  +12.30 1 3 1 3 1   887    0 0.37 -3.26 ----- 19.4 19.4 280.0 23.8 13.8 -0.8 13.6 -0.5 13.2 -0.6 13.7 -0.1
2026-04-11T17:39:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:39:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:39:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.652204
2026-04-11T17:39:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:39:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:39:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:39:30.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:39:30.619 [DEBUG] [Thread-174017] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:39:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:39:30.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:38:56', tmtdew=0.105085, humidity=99.6026, cloud=0.0, wind=21.2969, temperature=12.7819, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:39:10.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:39:30.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:39:30.722 [DEBUG] [Thread-174020] [transport.py] [_log()] starting thread (client mode): 0xae517250
2026-04-11T17:39:30.722 [DEBUG] [Thread-174020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:39:30.736 [DEBUG] [Thread-174020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:39:30.736 [INFO] [Thread-174020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] client lang: <none>
2026-04-11T17:39:30.744 [DEBUG] [Thread-174020] [transport.py] [_log()] server lang: <none>
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] kex follows: False
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] Compression: none
2026-04-11T17:39:30.745 [DEBUG] [Thread-174020] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:39:30.802 [DEBUG] [Thread-174020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:39:30.802 [DEBUG] [Thread-174020] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:39:30.803 [DEBUG] [Thread-174020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:39:30.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:39:30.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:39:30.858 [DEBUG] [Thread-174020] [transport.py] [_log()] userauth is OK
2026-04-11T17:39:30.858 [DEBUG] [Thread-174020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:39:30.858 [DEBUG] [Thread-174020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:39:30.858 [DEBUG] [Thread-174020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:39:30.858 [DEBUG] [Thread-174020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:39:30.876 [INFO] [Thread-174020] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:39:30.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:39:30.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:39:31.704 [DEBUG] [Thread-174020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:39:31.704 [DEBUG] [Thread-174020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:39:31.752 [DEBUG] [Thread-174020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:39:31.752 [DEBUG] [Thread-174020] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:39:31.761 [DEBUG] [Thread-174020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:39:31.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:39:31.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-04-11T17:39:31.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-04-11T17:39:31.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:39:31.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:39:31.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:39:31.799 [DEBUG] [Thread-174020] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:39:37.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:37.730 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:43.949 [DEBUG] [Thread-174022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:39:59.005 [DEBUG] [Thread-174023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:01.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:40:01.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:40:01.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-04-11T17:40:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 39, 31), 0.09997, 99.6358, 0.0, 20.0797, 12.815, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:40:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:39:31
2026-04-11T17:40:03.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:40:03.661 [DEBUG] [Thread-174024] [transport.py] [_log()] starting thread (client mode): 0xae50ab60
2026-04-11T17:40:03.661 [DEBUG] [Thread-174024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:40:03.680 [DEBUG] [Thread-174024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:40:03.680 [INFO] [Thread-174024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:40:03.683 [DEBUG] [Thread-174024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] client lang: <none>
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] server lang: <none>
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] kex follows: False
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] Compression: none
2026-04-11T17:40:03.684 [DEBUG] [Thread-174024] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:40:03.700 [DEBUG] [Thread-174024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:40:03.701 [DEBUG] [Thread-174024] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:40:03.701 [DEBUG] [Thread-174024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:40:03.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:40:03.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:40:03.703 [DEBUG] [Thread-174024] [transport.py] [_log()] userauth is OK
2026-04-11T17:40:03.704 [DEBUG] [Thread-174024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:40:03.704 [DEBUG] [Thread-174024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:40:03.704 [DEBUG] [Thread-174024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:40:03.704 [DEBUG] [Thread-174024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:40:03.727 [INFO] [Thread-174024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:40:03.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:40:04.413 [DEBUG] [Thread-174024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:40:04.413 [DEBUG] [Thread-174024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:40:04.414 [DEBUG] [Thread-174024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:40:04.454 [DEBUG] [Thread-174024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:40:04.455 [DEBUG] [Thread-174024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:40:04.458 [DEBUG] [Thread-174024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:40:04.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:40:04.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:40:04.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:40:04.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:40:04.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:40:04.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:40:04.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:40:04.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:40:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:40:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.652551 -999.00  +12.70  17.94     97  +12.30 1 3 1 3 1   887    0 0.37 -3.45 ----- 17.9 17.9 276.8 23.0 13.8 -1.2 13.6 -0.4 13.2 -0.2 13.7 -0.2
2026-04-11T17:40:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:40:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:40:04.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.652551
2026-04-11T17:40:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:40:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:40:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:40:04.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:40:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:40:04.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:39:31', tmtdew=0.09997, humidity=99.6358, cloud=0.0, wind=20.0797, temperature=12.815, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:39:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:40:04.526 [DEBUG] [Thread-174024] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:40:04.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:40:04.619 [DEBUG] [Thread-174027] [transport.py] [_log()] starting thread (client mode): 0xae534640
2026-04-11T17:40:04.620 [DEBUG] [Thread-174027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:40:04.635 [DEBUG] [Thread-174027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:40:04.635 [INFO] [Thread-174027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] client lang: <none>
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] server lang: <none>
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] kex follows: False
2026-04-11T17:40:04.643 [DEBUG] [Thread-174027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:40:04.644 [DEBUG] [Thread-174027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:40:04.644 [DEBUG] [Thread-174027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:40:04.644 [DEBUG] [Thread-174027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:40:04.644 [DEBUG] [Thread-174027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:40:04.644 [DEBUG] [Thread-174027] [transport.py] [_log()] Compression: none
2026-04-11T17:40:04.644 [DEBUG] [Thread-174027] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:40:04.707 [DEBUG] [Thread-174027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:40:04.708 [DEBUG] [Thread-174027] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:40:04.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:40:04.709 [DEBUG] [Thread-174027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:40:04.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:40:04.767 [DEBUG] [Thread-174027] [transport.py] [_log()] userauth is OK
2026-04-11T17:40:04.767 [DEBUG] [Thread-174027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:40:04.767 [DEBUG] [Thread-174027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:40:04.767 [DEBUG] [Thread-174027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:40:04.767 [DEBUG] [Thread-174027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:40:04.800 [INFO] [Thread-174027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:40:04.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:40:04.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:40:05.628 [DEBUG] [Thread-174027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:40:05.628 [DEBUG] [Thread-174027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:40:05.675 [DEBUG] [Thread-174027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:40:05.676 [DEBUG] [Thread-174027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:40:05.684 [DEBUG] [Thread-174027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:40:05.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:40:05.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-04-11T17:40:05.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-04-11T17:40:05.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:40:05.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:40:05.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:40:05.716 [DEBUG] [Thread-174027] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:40:14.045 [DEBUG] [Thread-174029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:19.138 [DEBUG] [Thread-174030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:29.099 [DEBUG] [Thread-174031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:40:35.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:40:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:40:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 40, 7), 0.097425, 99.6523, 0.0, 19.6387, 12.8647, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:40:36.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:40:07
2026-04-11T17:40:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:40:37.562 [DEBUG] [Thread-174032] [transport.py] [_log()] starting thread (client mode): 0xae516800
2026-04-11T17:40:37.562 [DEBUG] [Thread-174032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:40:37.583 [DEBUG] [Thread-174032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:40:37.583 [INFO] [Thread-174032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:40:37.586 [DEBUG] [Thread-174032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] client lang: <none>
2026-04-11T17:40:37.587 [DEBUG] [Thread-174032] [transport.py] [_log()] server lang: <none>
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] kex follows: False
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] Compression: none
2026-04-11T17:40:37.588 [DEBUG] [Thread-174032] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:40:37.607 [DEBUG] [Thread-174032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:40:37.608 [DEBUG] [Thread-174032] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:40:37.609 [DEBUG] [Thread-174032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:40:37.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:40:37.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:40:37.611 [DEBUG] [Thread-174032] [transport.py] [_log()] userauth is OK
2026-04-11T17:40:37.611 [DEBUG] [Thread-174032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:40:37.611 [DEBUG] [Thread-174032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:40:37.611 [DEBUG] [Thread-174032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:40:37.611 [DEBUG] [Thread-174032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:40:37.657 [INFO] [Thread-174032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:40:37.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:40:37.869 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:37.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:38.282 [DEBUG] [Thread-174032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:40:38.282 [DEBUG] [Thread-174032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:40:38.283 [DEBUG] [Thread-174032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:40:38.324 [DEBUG] [Thread-174032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:40:38.324 [DEBUG] [Thread-174032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:40:38.328 [DEBUG] [Thread-174032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:40:38.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:40:38.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:40:38.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:40:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:40:38.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:40:38.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:40:38.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:40:38.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:40:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:40:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.652898 -999.00  +12.70  19.97     97  +12.20 1 3 1 3 1   887    0 0.36 -3.59 ----- 20.0 20.0 290.0 25.1 13.8 -0.6 13.6 -0.4 13.2 -0.8 13.7 -0.1
2026-04-11T17:40:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:40:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:40:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.652898
2026-04-11T17:40:38.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:40:38.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:40:38.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:40:38.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:40:38.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:40:38.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:40:07', tmtdew=0.097425, humidity=99.6523, cloud=0.0, wind=19.6387, temperature=12.8647, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:40:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:40:38.358 [DEBUG] [Thread-174032] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:40:38.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:40:38.448 [DEBUG] [Thread-174035] [transport.py] [_log()] starting thread (client mode): 0xae517610
2026-04-11T17:40:38.448 [DEBUG] [Thread-174035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:40:38.464 [DEBUG] [Thread-174035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:40:38.464 [INFO] [Thread-174035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:40:38.471 [DEBUG] [Thread-174035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:40:38.471 [DEBUG] [Thread-174035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] client lang: <none>
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] server lang: <none>
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] kex follows: False
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] Compression: none
2026-04-11T17:40:38.472 [DEBUG] [Thread-174035] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:40:38.531 [DEBUG] [Thread-174035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:40:38.531 [DEBUG] [Thread-174035] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:40:38.532 [DEBUG] [Thread-174035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:40:38.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:40:38.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:40:38.587 [DEBUG] [Thread-174035] [transport.py] [_log()] userauth is OK
2026-04-11T17:40:38.587 [DEBUG] [Thread-174035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:40:38.587 [DEBUG] [Thread-174035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:40:38.587 [DEBUG] [Thread-174035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:40:38.588 [DEBUG] [Thread-174035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:40:38.606 [INFO] [Thread-174035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:40:38.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:40:38.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:40:39.448 [DEBUG] [Thread-174035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:40:39.448 [DEBUG] [Thread-174035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:40:39.496 [DEBUG] [Thread-174035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:40:39.496 [DEBUG] [Thread-174035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:40:39.506 [DEBUG] [Thread-174035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:40:39.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:40:39.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-04-11T17:40:39.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-04-11T17:40:39.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:40:39.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:40:39.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:40:39.543 [DEBUG] [Thread-174035] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:40:44.138 [DEBUG] [Thread-174037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:40:59.193 [DEBUG] [Thread-174038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:09.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:41:09.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:41:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:41:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 40, 42), 0.09485, 99.3045, 0.0, 19.7251, 13.3294, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:41:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:40:42
2026-04-11T17:41:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:41:11.392 [DEBUG] [Thread-174039] [transport.py] [_log()] starting thread (client mode): 0xae508910
2026-04-11T17:41:11.393 [DEBUG] [Thread-174039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:41:11.412 [DEBUG] [Thread-174039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:41:11.413 [INFO] [Thread-174039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:11.414 [DEBUG] [Thread-174039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] client lang: <none>
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] server lang: <none>
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] kex follows: False
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] Compression: none
2026-04-11T17:41:11.415 [DEBUG] [Thread-174039] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:41:11.424 [DEBUG] [Thread-174039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:41:11.424 [DEBUG] [Thread-174039] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:41:11.424 [DEBUG] [Thread-174039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:41:11.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:41:11.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:41:11.425 [DEBUG] [Thread-174039] [transport.py] [_log()] userauth is OK
2026-04-11T17:41:11.425 [DEBUG] [Thread-174039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:41:11.425 [DEBUG] [Thread-174039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:41:11.425 [DEBUG] [Thread-174039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:41:11.425 [DEBUG] [Thread-174039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:41:11.440 [INFO] [Thread-174039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:41:11.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:41:12.105 [DEBUG] [Thread-174039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:41:12.106 [DEBUG] [Thread-174039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:41:12.106 [DEBUG] [Thread-174039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:41:12.147 [DEBUG] [Thread-174039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:41:12.147 [DEBUG] [Thread-174039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:41:12.150 [DEBUG] [Thread-174039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:41:12.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:41:12.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:41:12.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:41:12.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:41:12.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:41:12.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:41:12.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:41:12.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:41:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:41:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.653246 -999.00  +12.70  17.23     97  +12.20 1 3 1 3 1   887    0 0.37 -3.40 ----- 17.2 17.2 293.8 26.8 13.7 -0.8 13.6 -0.9 13.2 -0.4 13.7 -0.2
2026-04-11T17:41:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:41:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:41:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.653246
2026-04-11T17:41:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:41:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:41:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:41:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:41:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:41:12.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:40:42', tmtdew=0.09485, humidity=99.3045, cloud=0.0, wind=19.7251, temperature=13.3294, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:40:40.454', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:41:12.178 [DEBUG] [Thread-174039] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:41:12.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:41:12.274 [DEBUG] [Thread-174042] [transport.py] [_log()] starting thread (client mode): 0xae5160b0
2026-04-11T17:41:12.274 [DEBUG] [Thread-174042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:41:12.289 [DEBUG] [Thread-174042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:41:12.289 [INFO] [Thread-174042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:12.297 [DEBUG] [Thread-174042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] client lang: <none>
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] server lang: <none>
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] kex follows: False
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:41:12.298 [DEBUG] [Thread-174042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:41:12.299 [DEBUG] [Thread-174042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:41:12.299 [DEBUG] [Thread-174042] [transport.py] [_log()] Compression: none
2026-04-11T17:41:12.299 [DEBUG] [Thread-174042] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:41:12.356 [DEBUG] [Thread-174042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:41:12.356 [DEBUG] [Thread-174042] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:41:12.357 [DEBUG] [Thread-174042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:41:12.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:41:12.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:41:12.415 [DEBUG] [Thread-174042] [transport.py] [_log()] userauth is OK
2026-04-11T17:41:12.415 [DEBUG] [Thread-174042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:41:12.415 [DEBUG] [Thread-174042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:41:12.415 [DEBUG] [Thread-174042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:41:12.415 [DEBUG] [Thread-174042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:41:12.436 [INFO] [Thread-174042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:41:12.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:41:12.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:41:13.246 [DEBUG] [Thread-174042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:41:13.246 [DEBUG] [Thread-174042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:41:13.294 [DEBUG] [Thread-174042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:41:13.294 [DEBUG] [Thread-174042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:41:13.304 [DEBUG] [Thread-174042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:41:13.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:41:13.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-04-11T17:41:13.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-04-11T17:41:13.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:41:13.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:41:13.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:41:13.341 [DEBUG] [Thread-174042] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:41:14.231 [DEBUG] [Thread-174044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:19.182 [DEBUG] [Thread-174045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:29.289 [DEBUG] [Thread-174046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:38.011 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:38.012 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:43.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:41:43.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:41:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:41:44.324 [DEBUG] [Thread-174047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:41:44.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 41, 18), 0.04731, 99.653, 0.0, 22.2325, 12.8152, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:41:44.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:41:18
2026-04-11T17:41:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:41:45.244 [DEBUG] [Thread-174048] [transport.py] [_log()] starting thread (client mode): 0xae519fc0
2026-04-11T17:41:45.244 [DEBUG] [Thread-174048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:41:45.264 [DEBUG] [Thread-174048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:41:45.265 [INFO] [Thread-174048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:41:45.266 [DEBUG] [Thread-174048] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:41:45.266 [DEBUG] [Thread-174048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] client lang: <none>
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] server lang: <none>
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] kex follows: False
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] Compression: none
2026-04-11T17:41:45.267 [DEBUG] [Thread-174048] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:41:45.278 [DEBUG] [Thread-174048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:41:45.279 [DEBUG] [Thread-174048] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:41:45.280 [DEBUG] [Thread-174048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:41:45.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:41:45.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:41:45.281 [DEBUG] [Thread-174048] [transport.py] [_log()] userauth is OK
2026-04-11T17:41:45.282 [DEBUG] [Thread-174048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:41:45.282 [DEBUG] [Thread-174048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:41:45.282 [DEBUG] [Thread-174048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:41:45.282 [DEBUG] [Thread-174048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:41:45.301 [INFO] [Thread-174048] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:41:45.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:41:45.908 [DEBUG] [Thread-174048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:41:45.908 [DEBUG] [Thread-174048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:41:45.909 [DEBUG] [Thread-174048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:41:45.949 [DEBUG] [Thread-174048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:41:45.949 [DEBUG] [Thread-174048] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:41:45.953 [DEBUG] [Thread-174048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:41:45.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:41:45.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:41:45.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:41:45.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:41:45.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:41:45.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:41:45.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:41:45.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:41:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:41:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.653592 -999.00  +12.70  12.09     97  +12.30 1 3 1 3 1   887    0 0.37 -3.30 ----- 12.1 12.1 291.6 21.0 13.8 -0.5 13.6 -0.2 13.2 -0.5 13.6 -0.1
2026-04-11T17:41:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:41:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:41:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.653592
2026-04-11T17:41:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:41:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:41:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:41:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:41:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:41:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:41:18', tmtdew=0.04731, humidity=99.653, cloud=0.0, wind=22.2325, temperature=12.8152, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:41:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:41:45.981 [DEBUG] [Thread-174048] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:41:46.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:41:46.069 [DEBUG] [Thread-174051] [transport.py] [_log()] starting thread (client mode): 0xa79525c0
2026-04-11T17:41:46.069 [DEBUG] [Thread-174051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:41:46.083 [DEBUG] [Thread-174051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:41:46.084 [INFO] [Thread-174051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:41:46.094 [DEBUG] [Thread-174051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:41:46.095 [DEBUG] [Thread-174051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] client lang: <none>
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] server lang: <none>
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] kex follows: False
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:41:46.096 [DEBUG] [Thread-174051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:41:46.097 [DEBUG] [Thread-174051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:41:46.097 [DEBUG] [Thread-174051] [transport.py] [_log()] Compression: none
2026-04-11T17:41:46.097 [DEBUG] [Thread-174051] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:41:46.152 [DEBUG] [Thread-174051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:41:46.152 [DEBUG] [Thread-174051] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:41:46.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:41:46.154 [DEBUG] [Thread-174051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:41:46.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:41:46.210 [DEBUG] [Thread-174051] [transport.py] [_log()] userauth is OK
2026-04-11T17:41:46.211 [DEBUG] [Thread-174051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:41:46.211 [DEBUG] [Thread-174051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:41:46.211 [DEBUG] [Thread-174051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:41:46.211 [DEBUG] [Thread-174051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:41:46.233 [INFO] [Thread-174051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:41:46.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:41:46.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:41:47.087 [DEBUG] [Thread-174051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:41:47.087 [DEBUG] [Thread-174051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:41:47.135 [DEBUG] [Thread-174051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:41:47.135 [DEBUG] [Thread-174051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:41:47.144 [DEBUG] [Thread-174051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:41:47.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:41:47.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:41:47.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-04-11T17:41:47.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:41:47.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:41:47.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:41:47.181 [DEBUG] [Thread-174051] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:41:59.364 [DEBUG] [Thread-174053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:14.418 [DEBUG] [Thread-174054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:17.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:42:17.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:42:17.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-04-11T17:42:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 41, 53), 0.09974, 99.2728, 0.0, 22.7239, 13.2641, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:42:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:41:53
2026-04-11T17:42:18.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:42:19.010 [DEBUG] [Thread-174055] [transport.py] [_log()] starting thread (client mode): 0xae50b7f0
2026-04-11T17:42:19.010 [DEBUG] [Thread-174055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:42:19.026 [DEBUG] [Thread-174055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:42:19.026 [INFO] [Thread-174055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:42:19.029 [DEBUG] [Thread-174055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:42:19.029 [DEBUG] [Thread-174055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:42:19.029 [DEBUG] [Thread-174055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:42:19.029 [DEBUG] [Thread-174055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:19.029 [DEBUG] [Thread-174055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:19.029 [DEBUG] [Thread-174055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] client lang: <none>
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] server lang: <none>
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] kex follows: False
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] Compression: none
2026-04-11T17:42:19.030 [DEBUG] [Thread-174055] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:42:19.048 [DEBUG] [Thread-174055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:42:19.049 [DEBUG] [Thread-174055] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:42:19.049 [DEBUG] [Thread-174055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:42:19.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:42:19.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:42:19.051 [DEBUG] [Thread-174055] [transport.py] [_log()] userauth is OK
2026-04-11T17:42:19.051 [DEBUG] [Thread-174055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:42:19.052 [DEBUG] [Thread-174055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:42:19.052 [DEBUG] [Thread-174055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:42:19.052 [DEBUG] [Thread-174055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:42:19.076 [INFO] [Thread-174055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:42:19.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:42:19.215 [DEBUG] [Thread-174057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:19.692 [DEBUG] [Thread-174055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:42:19.692 [DEBUG] [Thread-174055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:42:19.693 [DEBUG] [Thread-174055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:42:19.733 [DEBUG] [Thread-174055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:42:19.733 [DEBUG] [Thread-174055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:42:19.736 [DEBUG] [Thread-174055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:42:19.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:42:19.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:42:19.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:42:19.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:42:19.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:42:19.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:42:19.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:42:19.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:42:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:42:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.653940 -999.00  +12.80  10.58     97  +12.40 1 3 1 3 1   887    0 0.38 -3.02 ----- 10.6 10.6 288.9 16.3 13.8 -0.6 13.6 -0.6 13.2 -0.1 13.7 -0.0
2026-04-11T17:42:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:42:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:42:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.653940
2026-04-11T17:42:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:42:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:42:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:42:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:42:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:42:19.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:41:53', tmtdew=0.09974, humidity=99.2728, cloud=0.0, wind=22.7239, temperature=13.2641, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:41:40.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:42:19.767 [DEBUG] [Thread-174055] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:42:19.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:42:19.861 [DEBUG] [Thread-174059] [transport.py] [_log()] starting thread (client mode): 0xae514310
2026-04-11T17:42:19.861 [DEBUG] [Thread-174059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:42:19.875 [DEBUG] [Thread-174059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:42:19.875 [INFO] [Thread-174059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:42:19.882 [DEBUG] [Thread-174059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] client lang: <none>
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] server lang: <none>
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] kex follows: False
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] Compression: none
2026-04-11T17:42:19.883 [DEBUG] [Thread-174059] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:42:19.946 [DEBUG] [Thread-174059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:42:19.946 [DEBUG] [Thread-174059] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:42:19.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:42:19.948 [DEBUG] [Thread-174059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:42:19.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:42:20.003 [DEBUG] [Thread-174059] [transport.py] [_log()] userauth is OK
2026-04-11T17:42:20.003 [DEBUG] [Thread-174059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:42:20.003 [DEBUG] [Thread-174059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:42:20.003 [DEBUG] [Thread-174059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:42:20.004 [DEBUG] [Thread-174059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:42:20.027 [INFO] [Thread-174059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:42:20.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:42:20.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:42:20.840 [DEBUG] [Thread-174059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:42:20.840 [DEBUG] [Thread-174059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:42:20.888 [DEBUG] [Thread-174059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:42:20.888 [DEBUG] [Thread-174059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:42:20.898 [DEBUG] [Thread-174059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:42:20.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:42:20.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:42:20.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-04-11T17:42:20.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:42:20.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:42:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:42:20.935 [DEBUG] [Thread-174059] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:42:29.455 [DEBUG] [Thread-174061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:38.153 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:38.154 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:44.508 [DEBUG] [Thread-174062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:42:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:42:50.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:42:50.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-04-11T17:42:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 42, 29), 0.047285, 99.6532, 0.0, 19.9739, 12.799, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:42:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:42:29
2026-04-11T17:42:52.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:42:52.857 [DEBUG] [Thread-174063] [transport.py] [_log()] starting thread (client mode): 0xae5a53c0
2026-04-11T17:42:52.857 [DEBUG] [Thread-174063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:42:52.880 [DEBUG] [Thread-174063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:42:52.881 [INFO] [Thread-174063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:42:52.884 [DEBUG] [Thread-174063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] client lang: <none>
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] server lang: <none>
2026-04-11T17:42:52.885 [DEBUG] [Thread-174063] [transport.py] [_log()] kex follows: False
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] Compression: none
2026-04-11T17:42:52.886 [DEBUG] [Thread-174063] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:42:52.906 [DEBUG] [Thread-174063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:42:52.907 [DEBUG] [Thread-174063] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:42:52.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:42:52.908 [DEBUG] [Thread-174063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:42:52.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:42:52.910 [DEBUG] [Thread-174063] [transport.py] [_log()] userauth is OK
2026-04-11T17:42:52.910 [DEBUG] [Thread-174063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:42:52.911 [DEBUG] [Thread-174063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:42:52.911 [DEBUG] [Thread-174063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:42:52.911 [DEBUG] [Thread-174063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:42:52.936 [INFO] [Thread-174063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:42:52.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:42:53.562 [DEBUG] [Thread-174063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:42:53.562 [DEBUG] [Thread-174063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:42:53.563 [DEBUG] [Thread-174063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:42:53.603 [DEBUG] [Thread-174063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:42:53.603 [DEBUG] [Thread-174063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:42:53.607 [DEBUG] [Thread-174063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:42:53.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:42:53.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:42:53.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:42:53.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:42:53.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:42:53.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:42:53.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:42:53.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:42:53.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:42:53.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.654634 -999.00  +12.70  23.01     97  +12.20 1 3 1 3 1   887    0 0.34 -3.83 ----- 23.0 23.0 276.6 25.3 13.7 -1.1 13.6 -0.8 13.2 -0.8 13.7 -0.2
2026-04-11T17:42:53.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:42:53.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:42:53.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.654634
2026-04-11T17:42:53.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:42:53.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:42:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:42:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:42:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:42:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:42:29', tmtdew=0.047285, humidity=99.6532, cloud=0.0, wind=19.9739, temperature=12.799, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:42:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:42:53.635 [DEBUG] [Thread-174063] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:42: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-04-11T17:42:53.732 [DEBUG] [Thread-174066] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-11T17:42:53.732 [DEBUG] [Thread-174066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:42:53.746 [DEBUG] [Thread-174066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:42:53.747 [INFO] [Thread-174066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:42:53.754 [DEBUG] [Thread-174066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] client lang: <none>
2026-04-11T17:42:53.755 [DEBUG] [Thread-174066] [transport.py] [_log()] server lang: <none>
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] kex follows: False
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] Compression: none
2026-04-11T17:42:53.756 [DEBUG] [Thread-174066] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:42:53.814 [DEBUG] [Thread-174066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:42:53.815 [DEBUG] [Thread-174066] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:42:53.815 [DEBUG] [Thread-174066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:42:53.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:42:53.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:42:53.871 [DEBUG] [Thread-174066] [transport.py] [_log()] userauth is OK
2026-04-11T17:42:53.871 [DEBUG] [Thread-174066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:42:53.871 [DEBUG] [Thread-174066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:42:53.872 [DEBUG] [Thread-174066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:42:53.872 [DEBUG] [Thread-174066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:42:53.890 [INFO] [Thread-174066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:42:53.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:42:53.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:42:54.727 [DEBUG] [Thread-174066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:42:54.727 [DEBUG] [Thread-174066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:42:54.775 [DEBUG] [Thread-174066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:42:54.775 [DEBUG] [Thread-174066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:42:54.784 [DEBUG] [Thread-174066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:42:54.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:42:54.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-04-11T17:42: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-04-11T17:42:54.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:42:54.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:42:54.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:42:54.821 [DEBUG] [Thread-174066] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:42:59.544 [DEBUG] [Thread-174068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:14.592 [DEBUG] [Thread-174069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:19.250 [DEBUG] [Thread-174070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:43:24.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:43: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-04-11T17:43:26.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 43, 4), 0.04217, 99.6863, 0.0, 19.1977, 12.8487, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:43:26.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:43:04
2026-04-11T17:43:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:43:26.686 [DEBUG] [Thread-174071] [transport.py] [_log()] starting thread (client mode): 0xae5a5510
2026-04-11T17:43:26.686 [DEBUG] [Thread-174071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:43:26.707 [DEBUG] [Thread-174071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:43:26.707 [INFO] [Thread-174071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] client lang: <none>
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] server lang: <none>
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] kex follows: False
2026-04-11T17:43:26.710 [DEBUG] [Thread-174071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:43:26.711 [DEBUG] [Thread-174071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:43:26.711 [DEBUG] [Thread-174071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:43:26.711 [DEBUG] [Thread-174071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:43:26.711 [DEBUG] [Thread-174071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:43:26.711 [DEBUG] [Thread-174071] [transport.py] [_log()] Compression: none
2026-04-11T17:43:26.711 [DEBUG] [Thread-174071] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:43:26.720 [DEBUG] [Thread-174071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:43:26.720 [DEBUG] [Thread-174071] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:43:26.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:43:26.722 [DEBUG] [Thread-174071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:43:26.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:43:26.724 [DEBUG] [Thread-174071] [transport.py] [_log()] userauth is OK
2026-04-11T17:43:26.724 [DEBUG] [Thread-174071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:43:26.724 [DEBUG] [Thread-174071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:43:26.724 [DEBUG] [Thread-174071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:43:26.724 [DEBUG] [Thread-174071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:43:26.745 [INFO] [Thread-174071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:43:26.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:43:27.367 [DEBUG] [Thread-174071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:43:27.368 [DEBUG] [Thread-174071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:43:27.368 [DEBUG] [Thread-174071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:43:27.408 [DEBUG] [Thread-174071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:43:27.408 [DEBUG] [Thread-174071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:43:27.410 [DEBUG] [Thread-174071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:43:27.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:43:27.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:43:27.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:43:27.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:43:27.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:43:27.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:43:27.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:43:27.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:43:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:43:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.654981 -999.00  +12.70  11.76     97  +12.20 1 3 1 3 1   887    0 0.37 -3.20 ----- 11.8 11.8 292.0 20.2 13.8 -0.5 13.6 -0.6 13.2 -0.2 13.7 -0.1
2026-04-11T17:43:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:43:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:43:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.654981
2026-04-11T17:43:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:43:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:43:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:43:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:43:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:43:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:43:04', tmtdew=0.04217, humidity=99.6863, cloud=0.0, wind=19.1977, temperature=12.8487, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:43:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:43:27.429 [DEBUG] [Thread-174071] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:43:27.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:43:27.512 [DEBUG] [Thread-174074] [transport.py] [_log()] starting thread (client mode): 0xae5153c0
2026-04-11T17:43:27.512 [DEBUG] [Thread-174074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:43:27.527 [DEBUG] [Thread-174074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:43:27.527 [INFO] [Thread-174074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] client lang: <none>
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] server lang: <none>
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] kex follows: False
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:43:27.535 [DEBUG] [Thread-174074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:43:27.536 [DEBUG] [Thread-174074] [transport.py] [_log()] Compression: none
2026-04-11T17:43:27.536 [DEBUG] [Thread-174074] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:43:27.595 [DEBUG] [Thread-174074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:43:27.596 [DEBUG] [Thread-174074] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:43:27.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:43:27.597 [DEBUG] [Thread-174074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:43:27.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:43:27.651 [DEBUG] [Thread-174074] [transport.py] [_log()] userauth is OK
2026-04-11T17:43:27.651 [DEBUG] [Thread-174074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:43:27.651 [DEBUG] [Thread-174074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:43:27.652 [DEBUG] [Thread-174074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:43:27.652 [DEBUG] [Thread-174074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:43:27.674 [INFO] [Thread-174074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:43: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-04-11T17:43:27.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:43:28.532 [DEBUG] [Thread-174074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:43:28.532 [DEBUG] [Thread-174074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:43:28.580 [DEBUG] [Thread-174074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:43:28.580 [DEBUG] [Thread-174074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:43:28.589 [DEBUG] [Thread-174074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:43:28.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:43:28.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-04-11T17:43:28.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:43:28.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:43:28.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:43:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:43:28.623 [DEBUG] [Thread-174074] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:43:29.630 [DEBUG] [Thread-174076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:38.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:38.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:44.689 [DEBUG] [Thread-174077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:58.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:43:58.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:43:58.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-04-11T17:43:59.730 [DEBUG] [Thread-174078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:43:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 43, 40), 0.0944, 99.3075, 0.0, 20.8188, 13.1987, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:43:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:43:40
2026-04-11T17:44:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:44:00.490 [DEBUG] [Thread-174079] [transport.py] [_log()] starting thread (client mode): 0xb0f544f0
2026-04-11T17:44:00.490 [DEBUG] [Thread-174079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:44:00.511 [DEBUG] [Thread-174079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:44:00.512 [INFO] [Thread-174079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:44:00.515 [DEBUG] [Thread-174079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:44:00.515 [DEBUG] [Thread-174079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:44:00.515 [DEBUG] [Thread-174079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:44:00.515 [DEBUG] [Thread-174079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] client lang: <none>
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] server lang: <none>
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] kex follows: False
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:44:00.516 [DEBUG] [Thread-174079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:44:00.517 [DEBUG] [Thread-174079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:44:00.517 [DEBUG] [Thread-174079] [transport.py] [_log()] Compression: none
2026-04-11T17:44:00.517 [DEBUG] [Thread-174079] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:44:00.534 [DEBUG] [Thread-174079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:44:00.535 [DEBUG] [Thread-174079] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:44:00.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:44:00.536 [DEBUG] [Thread-174079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:44:00.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:44:00.539 [DEBUG] [Thread-174079] [transport.py] [_log()] userauth is OK
2026-04-11T17:44:00.539 [DEBUG] [Thread-174079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:44:00.539 [DEBUG] [Thread-174079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:44:00.539 [DEBUG] [Thread-174079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:44:00.539 [DEBUG] [Thread-174079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:44:00.575 [INFO] [Thread-174079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:44:00.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:44:01.216 [DEBUG] [Thread-174079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:44:01.216 [DEBUG] [Thread-174079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:44:01.216 [DEBUG] [Thread-174079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:44:01.257 [DEBUG] [Thread-174079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:44:01.257 [DEBUG] [Thread-174079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:44:01.260 [DEBUG] [Thread-174079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:44:01.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:44:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:44:01.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:44:01.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:44:01.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:44:01.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:44:01.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.655329 -999.00  +12.70  18.15     97  +12.30 1 3 1 3 1   887    0 0.36 -3.61 ----- 18.1 18.1 271.0 21.8 13.8 -0.7 13.7 -0.7 13.2 -0.4 13.7 -0.2
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.655329
2026-04-11T17:44:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:44:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:44:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:44:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:44:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:44:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:43:40', tmtdew=0.0944, humidity=99.3075, cloud=0.0, wind=20.8188, temperature=13.1987, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:43:40.426', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:44:01.280 [DEBUG] [Thread-174079] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:44:01.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:44:01.366 [DEBUG] [Thread-174082] [transport.py] [_log()] starting thread (client mode): 0xb0f57f70
2026-04-11T17:44:01.366 [DEBUG] [Thread-174082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:44:01.380 [DEBUG] [Thread-174082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:44:01.381 [INFO] [Thread-174082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:44:01.388 [DEBUG] [Thread-174082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:44:01.389 [DEBUG] [Thread-174082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:44:01.389 [DEBUG] [Thread-174082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:44:01.389 [DEBUG] [Thread-174082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:01.389 [DEBUG] [Thread-174082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:01.389 [DEBUG] [Thread-174082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:01.389 [DEBUG] [Thread-174082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] client lang: <none>
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] server lang: <none>
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] kex follows: False
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] Compression: none
2026-04-11T17:44:01.390 [DEBUG] [Thread-174082] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:44:01.447 [DEBUG] [Thread-174082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:44:01.447 [DEBUG] [Thread-174082] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:44:01.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:44:01.449 [DEBUG] [Thread-174082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:44:01.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:44:01.503 [DEBUG] [Thread-174082] [transport.py] [_log()] userauth is OK
2026-04-11T17:44:01.503 [DEBUG] [Thread-174082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:44:01.503 [DEBUG] [Thread-174082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:44:01.504 [DEBUG] [Thread-174082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:44:01.504 [DEBUG] [Thread-174082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:44:01.522 [INFO] [Thread-174082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:44:01.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:44:01.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:44:02.371 [DEBUG] [Thread-174082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:44:02.371 [DEBUG] [Thread-174082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:44:02.419 [DEBUG] [Thread-174082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:44:02.419 [DEBUG] [Thread-174082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:44:02.430 [DEBUG] [Thread-174082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:44:02.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:44: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')
2026-04-11T17:44:02.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-04-11T17:44:02.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:44:02.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:44:02.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:44:02.469 [DEBUG] [Thread-174082] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:44:14.767 [DEBUG] [Thread-174084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:44:19.304 [DEBUG] [Thread-174085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:44:29.830 [DEBUG] [Thread-174086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:44:32.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:44:32.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:44:32.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-04-11T17:44:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 44, 15), 0.03953, 99.7035, 0.0, 19.5336, 12.7991, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:44:33.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:44:15
2026-04-11T17:44:34.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:44:34.334 [DEBUG] [Thread-174087] [transport.py] [_log()] starting thread (client mode): 0xae5607f0
2026-04-11T17:44:34.334 [DEBUG] [Thread-174087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:44:34.354 [DEBUG] [Thread-174087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:44:34.354 [INFO] [Thread-174087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] client lang: <none>
2026-04-11T17:44:34.357 [DEBUG] [Thread-174087] [transport.py] [_log()] server lang: <none>
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] kex follows: False
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] Compression: none
2026-04-11T17:44:34.358 [DEBUG] [Thread-174087] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:44:34.373 [DEBUG] [Thread-174087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:44:34.373 [DEBUG] [Thread-174087] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:44:34.373 [DEBUG] [Thread-174087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:44:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:44:34.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:44:34.374 [DEBUG] [Thread-174087] [transport.py] [_log()] userauth is OK
2026-04-11T17:44:34.374 [DEBUG] [Thread-174087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:44:34.374 [DEBUG] [Thread-174087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:44:34.374 [DEBUG] [Thread-174087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:44:34.374 [DEBUG] [Thread-174087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:44:34.383 [INFO] [Thread-174087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:44:34.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:44:35.033 [DEBUG] [Thread-174087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:44:35.033 [DEBUG] [Thread-174087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:44:35.034 [DEBUG] [Thread-174087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:44:35.074 [DEBUG] [Thread-174087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:44:35.074 [DEBUG] [Thread-174087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:44:35.078 [DEBUG] [Thread-174087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:44:35.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:44:35.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:44:35.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:44:35.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:44:35.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:44:35.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:44:35.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:44:35.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:44:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:44:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.655676 -999.00  +12.70  12.26     97  +12.30 1 3 1 3 1   887    0 0.35 -3.55 ----- 12.3 12.3 298.0 19.0 13.8 -0.5 13.6 -0.5 13.2 -0.6 13.7 -0.2
2026-04-11T17:44:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:44:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:44:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.655676
2026-04-11T17:44:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:44:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:44:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:44:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:44:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:44:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:44:15', tmtdew=0.03953, humidity=99.7035, cloud=0.0, wind=19.5336, temperature=12.7991, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:44:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:44:35.105 [DEBUG] [Thread-174087] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:44:35.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:44:35.198 [DEBUG] [Thread-174090] [transport.py] [_log()] starting thread (client mode): 0xb0fe9870
2026-04-11T17:44:35.198 [DEBUG] [Thread-174090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:44:35.213 [DEBUG] [Thread-174090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:44:35.213 [INFO] [Thread-174090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] client lang: <none>
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] server lang: <none>
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] kex follows: False
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:44:35.221 [DEBUG] [Thread-174090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:44:35.222 [DEBUG] [Thread-174090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:44:35.222 [DEBUG] [Thread-174090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:44:35.222 [DEBUG] [Thread-174090] [transport.py] [_log()] Compression: none
2026-04-11T17:44:35.222 [DEBUG] [Thread-174090] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:44:35.280 [DEBUG] [Thread-174090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:44:35.280 [DEBUG] [Thread-174090] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:44:35.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:44:35.281 [DEBUG] [Thread-174090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:44:35.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:44:35.339 [DEBUG] [Thread-174090] [transport.py] [_log()] userauth is OK
2026-04-11T17:44:35.339 [DEBUG] [Thread-174090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:44:35.339 [DEBUG] [Thread-174090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:44:35.340 [DEBUG] [Thread-174090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:44:35.340 [DEBUG] [Thread-174090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:44:35.358 [INFO] [Thread-174090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:44:35.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:44:35.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:44:36.193 [DEBUG] [Thread-174090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:44:36.193 [DEBUG] [Thread-174090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:44:36.241 [DEBUG] [Thread-174090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:44:36.241 [DEBUG] [Thread-174090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:44:36.251 [DEBUG] [Thread-174090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:44:36.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:44:36.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-04-11T17:44:36.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-04-11T17:44:36.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:44:36.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:44:36.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:44:36.288 [DEBUG] [Thread-174090] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:44:38.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:44:38.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:44:44.870 [DEBUG] [Thread-174092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:44:59.921 [DEBUG] [Thread-174093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:45:06.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:45:06.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:45:06.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-04-11T17:45:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 44, 51), 0.08414, 99.3738, 0.0, 19.7251, 13.3977, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:45:07.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:44:51
2026-04-11T17:45:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:45:08.147 [DEBUG] [Thread-174094] [transport.py] [_log()] starting thread (client mode): 0xb0f57580
2026-04-11T17:45:08.147 [DEBUG] [Thread-174094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:45:08.164 [DEBUG] [Thread-174094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:45:08.164 [INFO] [Thread-174094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] client lang: <none>
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] server lang: <none>
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] kex follows: False
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] Compression: none
2026-04-11T17:45:08.166 [DEBUG] [Thread-174094] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:45:08.179 [DEBUG] [Thread-174094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:45:08.179 [DEBUG] [Thread-174094] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:45:08.180 [DEBUG] [Thread-174094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:45:08.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:45:08.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:45:08.182 [DEBUG] [Thread-174094] [transport.py] [_log()] userauth is OK
2026-04-11T17:45:08.182 [DEBUG] [Thread-174094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:45:08.182 [DEBUG] [Thread-174094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:45:08.182 [DEBUG] [Thread-174094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:45:08.182 [DEBUG] [Thread-174094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:45:08.200 [INFO] [Thread-174094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:45:08.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:45:09.172 [DEBUG] [Thread-174094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:45:09.172 [DEBUG] [Thread-174094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:45:09.173 [DEBUG] [Thread-174094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:45:09.213 [DEBUG] [Thread-174094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:45:09.213 [DEBUG] [Thread-174094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:45:09.217 [DEBUG] [Thread-174094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:45:09.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:45:09.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:45:09.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:45:09.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:45:09.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:45:09.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:45:09.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:45:09.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:45:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:45:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.656023 -999.00  +12.70  19.88     97  +12.30 1 3 1 3 1   887    0 0.36 -3.37 ----- 19.9 19.9 273.2 20.9 13.8 -0.9 13.6 -0.7 13.2 -0.5 13.7 -0.0
2026-04-11T17:45:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:45:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:45:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.656023
2026-04-11T17:45:09.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:45:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:45:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:45:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:45:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:45:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:44:51', tmtdew=0.08414, humidity=99.3738, cloud=0.0, wind=19.7251, temperature=13.3977, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:44:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:45:09.247 [DEBUG] [Thread-174094] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:45:09.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:45:09.341 [DEBUG] [Thread-174097] [transport.py] [_log()] starting thread (client mode): 0xae517af0
2026-04-11T17:45:09.341 [DEBUG] [Thread-174097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:45:09.355 [DEBUG] [Thread-174097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:45:09.356 [INFO] [Thread-174097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:45:09.363 [DEBUG] [Thread-174097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:45:09.364 [DEBUG] [Thread-174097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:45:09.364 [DEBUG] [Thread-174097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:45:09.364 [DEBUG] [Thread-174097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:09.364 [DEBUG] [Thread-174097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] client lang: <none>
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] server lang: <none>
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] kex follows: False
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] Compression: none
2026-04-11T17:45:09.365 [DEBUG] [Thread-174097] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:45:09.423 [DEBUG] [Thread-174097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:45:09.424 [DEBUG] [Thread-174097] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:45:09.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:45:09.425 [DEBUG] [Thread-174097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:45:09.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:45:09.479 [DEBUG] [Thread-174097] [transport.py] [_log()] userauth is OK
2026-04-11T17:45:09.479 [DEBUG] [Thread-174097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:45:09.479 [DEBUG] [Thread-174097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:45:09.479 [DEBUG] [Thread-174097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:45:09.479 [DEBUG] [Thread-174097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:45:09.497 [INFO] [Thread-174097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:45:09.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:45:09.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:45:10.341 [DEBUG] [Thread-174097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:45:10.341 [DEBUG] [Thread-174097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:45:10.389 [DEBUG] [Thread-174097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:45:10.390 [DEBUG] [Thread-174097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:45:10.399 [DEBUG] [Thread-174097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:45:10.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:45:10.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-04-11T17:45:10.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:45:10.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:45:10.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:45:10.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:45:10.437 [DEBUG] [Thread-174097] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:45:14.963 [DEBUG] [Thread-174099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:45:19.338 [DEBUG] [Thread-174100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:45:30.016 [DEBUG] [Thread-174101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:45:38.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:45:38.579 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:45:40.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:45:40.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:45:40.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-04-11T17:45:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 45, 27), 0.04718, 99.6538, 0.0, 18.7214, 12.8986, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:45:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:45:27
2026-04-11T17:45:42.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:45:42.250 [DEBUG] [Thread-174102] [transport.py] [_log()] starting thread (client mode): 0xb0f541c0
2026-04-11T17:45:42.250 [DEBUG] [Thread-174102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:45:42.270 [DEBUG] [Thread-174102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:45:42.270 [INFO] [Thread-174102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:45:42.273 [DEBUG] [Thread-174102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] client lang: <none>
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] server lang: <none>
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] kex follows: False
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:45:42.274 [DEBUG] [Thread-174102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:45:42.275 [DEBUG] [Thread-174102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:45:42.275 [DEBUG] [Thread-174102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:45:42.275 [DEBUG] [Thread-174102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:45:42.275 [DEBUG] [Thread-174102] [transport.py] [_log()] Compression: none
2026-04-11T17:45:42.275 [DEBUG] [Thread-174102] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:45:42.294 [DEBUG] [Thread-174102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:45:42.295 [DEBUG] [Thread-174102] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:45:42.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:45:42.296 [DEBUG] [Thread-174102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:45:42.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:45:42.298 [DEBUG] [Thread-174102] [transport.py] [_log()] userauth is OK
2026-04-11T17:45:42.298 [DEBUG] [Thread-174102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:45:42.298 [DEBUG] [Thread-174102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:45:42.298 [DEBUG] [Thread-174102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:45:42.298 [DEBUG] [Thread-174102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:45:42.322 [INFO] [Thread-174102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:45:42.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:45:42.949 [DEBUG] [Thread-174102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:45:42.949 [DEBUG] [Thread-174102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:45:42.950 [DEBUG] [Thread-174102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:45:42.989 [DEBUG] [Thread-174102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:45:42.990 [DEBUG] [Thread-174102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:45:42.992 [DEBUG] [Thread-174102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:45:43.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:45:43.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:45:43.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:45:43.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:45:43.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:45:43.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:45:43.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:45:43.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:45:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:45:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.656370 -999.00  +12.70  19.65     97  +12.30 1 3 1 3 1   887    0 0.35 -3.41 ----- 19.6 19.6 270.8 25.3 13.7 -0.6 13.6 -0.6 13.2 -0.5 13.6 -0.2
2026-04-11T17:45:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:45:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:45:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.656370
2026-04-11T17:45:43.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:45:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:45:43.015 [DEBUG] [Thread-174102] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:45:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:45:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:45:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:45:43.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:45:27', tmtdew=0.04718, humidity=99.6538, cloud=0.0, wind=18.7214, temperature=12.8986, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:45:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:45:43.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:45:43.106 [DEBUG] [Thread-174105] [transport.py] [_log()] starting thread (client mode): 0xb0f56320
2026-04-11T17:45:43.106 [DEBUG] [Thread-174105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:45:43.120 [DEBUG] [Thread-174105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:45:43.120 [INFO] [Thread-174105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:45:43.127 [DEBUG] [Thread-174105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:45:43.127 [DEBUG] [Thread-174105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:45:43.127 [DEBUG] [Thread-174105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] client lang: <none>
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] server lang: <none>
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] kex follows: False
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] Compression: none
2026-04-11T17:45:43.128 [DEBUG] [Thread-174105] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:45:43.185 [DEBUG] [Thread-174105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:45:43.186 [DEBUG] [Thread-174105] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:45:43.186 [DEBUG] [Thread-174105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:45:43.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:45:43.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:45:43.242 [DEBUG] [Thread-174105] [transport.py] [_log()] userauth is OK
2026-04-11T17:45:43.243 [DEBUG] [Thread-174105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:45:43.243 [DEBUG] [Thread-174105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:45:43.243 [DEBUG] [Thread-174105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:45:43.243 [DEBUG] [Thread-174105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:45:43.264 [INFO] [Thread-174105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:45:43.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:45:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:45:44.094 [DEBUG] [Thread-174105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:45:44.095 [DEBUG] [Thread-174105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:45:44.143 [DEBUG] [Thread-174105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:45:44.143 [DEBUG] [Thread-174105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:45:44.152 [DEBUG] [Thread-174105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:45:44.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:45:44.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:45:44.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:45:44.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:45:44.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:45:44.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:45:44.188 [DEBUG] [Thread-174105] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:45:45.053 [DEBUG] [Thread-174107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:00.095 [DEBUG] [Thread-174108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:46:14.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:46:14.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:46:15.136 [DEBUG] [Thread-174109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 46, 2), 0.04975, 99.6372, 0.0, 18.9155, 12.7328, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:46:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:46:02
2026-04-11T17:46:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:46:16.009 [DEBUG] [Thread-174110] [transport.py] [_log()] starting thread (client mode): 0xae516d40
2026-04-11T17:46:16.009 [DEBUG] [Thread-174110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:46:16.027 [DEBUG] [Thread-174110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:46:16.027 [INFO] [Thread-174110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:16.030 [DEBUG] [Thread-174110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] client lang: <none>
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] server lang: <none>
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] kex follows: False
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] Compression: none
2026-04-11T17:46:16.031 [DEBUG] [Thread-174110] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:46:16.049 [DEBUG] [Thread-174110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:46:16.050 [DEBUG] [Thread-174110] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:46:16.050 [DEBUG] [Thread-174110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:46:16.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:46:16.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:46:16.052 [DEBUG] [Thread-174110] [transport.py] [_log()] userauth is OK
2026-04-11T17:46:16.052 [DEBUG] [Thread-174110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:46:16.052 [DEBUG] [Thread-174110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:46:16.052 [DEBUG] [Thread-174110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:46:16.053 [DEBUG] [Thread-174110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:46:16.076 [INFO] [Thread-174110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:46:16.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:46:16.888 [DEBUG] [Thread-174110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:46:16.888 [DEBUG] [Thread-174110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:46:16.889 [DEBUG] [Thread-174110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:46:16.929 [DEBUG] [Thread-174110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:46:16.929 [DEBUG] [Thread-174110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:46:16.933 [DEBUG] [Thread-174110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:46:16.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:46:16.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:46:16.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:46:16.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:46:16.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:46:16.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:46:16.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:46:16.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:46:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:46:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.656717 -999.00  +12.70  13.93     97  +12.30 1 3 1 3 1   887    0 0.36 -3.18 ----- 13.9 13.9 283.0 24.4 13.8 -0.7 13.6 -0.5 13.2 -0.3 13.7 -0.2
2026-04-11T17:46:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:46:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:46:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.656717
2026-04-11T17:46:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:46:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:46:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:46:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:46:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:46:16.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:46:02', tmtdew=0.04975, humidity=99.6372, cloud=0.0, wind=18.9155, temperature=12.7328, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:45:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:46:16.960 [DEBUG] [Thread-174110] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:46:17.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:46:17.053 [DEBUG] [Thread-174113] [transport.py] [_log()] starting thread (client mode): 0xae563640
2026-04-11T17:46:17.053 [DEBUG] [Thread-174113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:46:17.068 [DEBUG] [Thread-174113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:46:17.068 [INFO] [Thread-174113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:46:17.075 [DEBUG] [Thread-174113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] client lang: <none>
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] server lang: <none>
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] kex follows: False
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] Compression: none
2026-04-11T17:46:17.076 [DEBUG] [Thread-174113] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:46:17.134 [DEBUG] [Thread-174113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:46:17.135 [DEBUG] [Thread-174113] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:46:17.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:46:17.136 [DEBUG] [Thread-174113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:46:17.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:46:17.191 [DEBUG] [Thread-174113] [transport.py] [_log()] userauth is OK
2026-04-11T17:46:17.191 [DEBUG] [Thread-174113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:46:17.191 [DEBUG] [Thread-174113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:46:17.192 [DEBUG] [Thread-174113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:46:17.192 [DEBUG] [Thread-174113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:46:17.211 [INFO] [Thread-174113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:46:17.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:46:17.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:46:18.045 [DEBUG] [Thread-174113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:46:18.045 [DEBUG] [Thread-174113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:46:18.095 [DEBUG] [Thread-174113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:46:18.095 [DEBUG] [Thread-174113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:46:18.103 [DEBUG] [Thread-174113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:46:18.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:46:18.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:46:18.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:46:18.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:46:18.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:46:18.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:46:18.137 [DEBUG] [Thread-174113] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:46:19.371 [DEBUG] [Thread-174115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:30.176 [DEBUG] [Thread-174116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:38.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:38.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:45.229 [DEBUG] [Thread-174117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:46:48.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:46:48.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:46:48.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:46:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 46, 37), 0.07391, 99.4402, 0.0, 15.421, 13.3977, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:46:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:46:37
2026-04-11T17:46:49.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:46:49.967 [DEBUG] [Thread-174118] [transport.py] [_log()] starting thread (client mode): 0xae536e30
2026-04-11T17:46:49.967 [DEBUG] [Thread-174118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:46:49.985 [DEBUG] [Thread-174118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:46:49.985 [INFO] [Thread-174118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:46:49.990 [DEBUG] [Thread-174118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] client lang: <none>
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] server lang: <none>
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] kex follows: False
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] Compression: none
2026-04-11T17:46:49.991 [DEBUG] [Thread-174118] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:46:50.009 [DEBUG] [Thread-174118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:46:50.009 [DEBUG] [Thread-174118] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:46:50.010 [DEBUG] [Thread-174118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:46:50.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:46:50.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:46:50.012 [DEBUG] [Thread-174118] [transport.py] [_log()] userauth is OK
2026-04-11T17:46:50.012 [DEBUG] [Thread-174118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:46:50.012 [DEBUG] [Thread-174118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:46:50.012 [DEBUG] [Thread-174118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:46:50.012 [DEBUG] [Thread-174118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:46:50.027 [INFO] [Thread-174118] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:46:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:46:50.839 [DEBUG] [Thread-174118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:46:50.840 [DEBUG] [Thread-174118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:46:50.840 [DEBUG] [Thread-174118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:46:50.881 [DEBUG] [Thread-174118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:46:50.881 [DEBUG] [Thread-174118] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:46:50.885 [DEBUG] [Thread-174118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:46:50.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:46:50.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:46:50.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:46:50.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:46:50.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:46:50.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:46:50.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:46:50.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:46:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:46:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.657065 -999.00  +12.70  11.33     97  +12.30 1 3 1 3 1   887    0 0.37 -3.07 ----- 11.3 11.3 299.0 19.4 13.8 -0.7 13.6 -0.4 13.2 -0.3 13.6 -0.2
2026-04-11T17:46:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:46:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:46:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.657065
2026-04-11T17:46:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:46:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:46:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:46:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:46:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:46:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:46:37', tmtdew=0.07391, humidity=99.4402, cloud=0.0, wind=15.421, temperature=13.3977, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:46:10.416', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:46:50.915 [DEBUG] [Thread-174118] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:46:50.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:46:51.009 [DEBUG] [Thread-174121] [transport.py] [_log()] starting thread (client mode): 0xb0fe8340
2026-04-11T17:46:51.009 [DEBUG] [Thread-174121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:46:51.023 [DEBUG] [Thread-174121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:46:51.024 [INFO] [Thread-174121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:46:51.031 [DEBUG] [Thread-174121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:46:51.032 [DEBUG] [Thread-174121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] client lang: <none>
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] server lang: <none>
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] kex follows: False
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:46:51.033 [DEBUG] [Thread-174121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:46:51.034 [DEBUG] [Thread-174121] [transport.py] [_log()] Compression: none
2026-04-11T17:46:51.034 [DEBUG] [Thread-174121] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:46:51.092 [DEBUG] [Thread-174121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:46:51.092 [DEBUG] [Thread-174121] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:46:51.093 [DEBUG] [Thread-174121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:46:51.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:46:51.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:46:51.151 [DEBUG] [Thread-174121] [transport.py] [_log()] userauth is OK
2026-04-11T17:46:51.151 [DEBUG] [Thread-174121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:46:51.151 [DEBUG] [Thread-174121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:46:51.151 [DEBUG] [Thread-174121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:46:51.152 [DEBUG] [Thread-174121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:46:51.171 [INFO] [Thread-174121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:46:51.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:46:51.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:46:52.047 [DEBUG] [Thread-174121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:46:52.047 [DEBUG] [Thread-174121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:46:52.095 [DEBUG] [Thread-174121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:46:52.095 [DEBUG] [Thread-174121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:46:52.104 [DEBUG] [Thread-174121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:46:52.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:46:52.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-04-11T17:46:52.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-04-11T17:46:52.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:46:52.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:46:52.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:46:52.142 [DEBUG] [Thread-174121] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:47:00.271 [DEBUG] [Thread-174123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:15.322 [DEBUG] [Thread-174124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:19.404 [DEBUG] [Thread-174125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:47:22.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:47:22.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:47:23.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 47, 14), 0.036945, 99.7201, 0.0, 16.0049, 12.9154, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:47:23.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:47:14
2026-04-11T17:47:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:47:24.036 [DEBUG] [Thread-174126] [transport.py] [_log()] starting thread (client mode): 0xae534640
2026-04-11T17:47:24.036 [DEBUG] [Thread-174126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:47:24.057 [DEBUG] [Thread-174126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:47:24.057 [INFO] [Thread-174126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] client lang: <none>
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] server lang: <none>
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] kex follows: False
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:47:24.061 [DEBUG] [Thread-174126] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:47:24.062 [DEBUG] [Thread-174126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:47:24.062 [DEBUG] [Thread-174126] [transport.py] [_log()] Compression: none
2026-04-11T17:47:24.062 [DEBUG] [Thread-174126] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:47:24.075 [DEBUG] [Thread-174126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:47:24.076 [DEBUG] [Thread-174126] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:47:24.076 [DEBUG] [Thread-174126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:47:24.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:47:24.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:47:24.079 [DEBUG] [Thread-174126] [transport.py] [_log()] userauth is OK
2026-04-11T17:47:24.079 [DEBUG] [Thread-174126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:47:24.079 [DEBUG] [Thread-174126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:47:24.079 [DEBUG] [Thread-174126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:47:24.079 [DEBUG] [Thread-174126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:47:24.103 [INFO] [Thread-174126] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:47:24.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:47:24.888 [DEBUG] [Thread-174126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:47:24.888 [DEBUG] [Thread-174126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:47:24.889 [DEBUG] [Thread-174126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:47:24.929 [DEBUG] [Thread-174126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:47:24.929 [DEBUG] [Thread-174126] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:47:24.934 [DEBUG] [Thread-174126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:47:24.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:47:24.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:47:24.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:47:24.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:47:24.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:47:24.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:47:24.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:47:24.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:47:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:47:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.657412 -999.00  +12.80  14.29     97  +12.30 1 3 1 3 1   887    0 0.37 -2.76 ----- 14.3 14.3 270.6 18.0 13.8 -0.7 13.6 -0.3 13.2 -0.5 13.7 -0.5
2026-04-11T17:47:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:47:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:47:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.657412
2026-04-11T17:47:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:47:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:47:24.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:47:24.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:47:24.962 [DEBUG] [Thread-174126] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:47:24.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:47:24.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:47:14', tmtdew=0.036945, humidity=99.7201, cloud=0.0, wind=16.0049, temperature=12.9154, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:46:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:47:25.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:47:25.054 [DEBUG] [Thread-174129] [transport.py] [_log()] starting thread (client mode): 0xae536140
2026-04-11T17:47:25.054 [DEBUG] [Thread-174129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:47:25.070 [DEBUG] [Thread-174129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:47:25.070 [INFO] [Thread-174129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:47:25.077 [DEBUG] [Thread-174129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:47:25.077 [DEBUG] [Thread-174129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:47:25.077 [DEBUG] [Thread-174129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:47:25.077 [DEBUG] [Thread-174129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] client lang: <none>
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] server lang: <none>
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] kex follows: False
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] Compression: none
2026-04-11T17:47:25.078 [DEBUG] [Thread-174129] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:47:25.140 [DEBUG] [Thread-174129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:47:25.141 [DEBUG] [Thread-174129] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:47:25.141 [DEBUG] [Thread-174129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:47:25.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:47:25.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:47:25.199 [DEBUG] [Thread-174129] [transport.py] [_log()] userauth is OK
2026-04-11T17:47:25.200 [DEBUG] [Thread-174129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:47:25.200 [DEBUG] [Thread-174129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:47:25.200 [DEBUG] [Thread-174129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:47:25.200 [DEBUG] [Thread-174129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:47:25.222 [INFO] [Thread-174129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:47:25.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:47:25.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:47:26.080 [DEBUG] [Thread-174129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:47:26.080 [DEBUG] [Thread-174129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:47:26.128 [DEBUG] [Thread-174129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:47:26.128 [DEBUG] [Thread-174129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:47:26.138 [DEBUG] [Thread-174129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:47:26.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:47:26.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-04-11T17:47:26.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:47:26.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:47:26.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:47:26.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:47:26.176 [DEBUG] [Thread-174129] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:47:30.361 [DEBUG] [Thread-174131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:38.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:38.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:45.417 [DEBUG] [Thread-174132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:47:56.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:47:56.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:47:56.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-04-11T17:47:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 47, 50), 0.08399, 99.3748, 0.0, 21.0658, 13.3983, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:47:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:47:50
2026-04-11T17:47:57.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:47:57.974 [DEBUG] [Thread-174133] [transport.py] [_log()] starting thread (client mode): 0xae5a4640
2026-04-11T17:47:57.974 [DEBUG] [Thread-174133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:47:57.994 [DEBUG] [Thread-174133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:47:57.994 [INFO] [Thread-174133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] client lang: <none>
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] server lang: <none>
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] kex follows: False
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] Compression: none
2026-04-11T17:47:57.998 [DEBUG] [Thread-174133] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:47:58.015 [DEBUG] [Thread-174133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:47:58.016 [DEBUG] [Thread-174133] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:47:58.016 [DEBUG] [Thread-174133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:47:58.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:47:58.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:47:58.018 [DEBUG] [Thread-174133] [transport.py] [_log()] userauth is OK
2026-04-11T17:47:58.019 [DEBUG] [Thread-174133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:47:58.019 [DEBUG] [Thread-174133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:47:58.019 [DEBUG] [Thread-174133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:47:58.019 [DEBUG] [Thread-174133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:47:58.036 [INFO] [Thread-174133] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:47:58.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:47:58.815 [DEBUG] [Thread-174133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:47:58.815 [DEBUG] [Thread-174133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:47:58.816 [DEBUG] [Thread-174133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:47:58.856 [DEBUG] [Thread-174133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:47:58.856 [DEBUG] [Thread-174133] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:47:58.860 [DEBUG] [Thread-174133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:47:58.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:47:58.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:47:58.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:47:58.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:47:58.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:47:58.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:47:58.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:47:58.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:47:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:47:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.657759 -999.00  +12.70  15.41     97  +12.30 1 3 1 3 1   887    0 0.36 -2.93 ----- 15.4 15.4 282.0 18.7 13.8 -0.7 13.6 -0.9 13.2 -0.5 13.7 -0.5
2026-04-11T17:47:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:47:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:47:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.657759
2026-04-11T17:47:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:47:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:47:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:47:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:47:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:47:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:47:50', tmtdew=0.08399, humidity=99.3748, cloud=0.0, wind=21.0658, temperature=13.3983, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:47:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:47:58.886 [DEBUG] [Thread-174133] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:47:58.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:47:58.980 [DEBUG] [Thread-174136] [transport.py] [_log()] starting thread (client mode): 0xae537730
2026-04-11T17:47:58.980 [DEBUG] [Thread-174136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:47:58.995 [DEBUG] [Thread-174136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:47:58.995 [INFO] [Thread-174136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] client lang: <none>
2026-04-11T17:47:59.003 [DEBUG] [Thread-174136] [transport.py] [_log()] server lang: <none>
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] kex follows: False
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] Compression: none
2026-04-11T17:47:59.004 [DEBUG] [Thread-174136] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:47:59.063 [DEBUG] [Thread-174136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:47:59.063 [DEBUG] [Thread-174136] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:47:59.064 [DEBUG] [Thread-174136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:47:59.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:47:59.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:47:59.119 [DEBUG] [Thread-174136] [transport.py] [_log()] userauth is OK
2026-04-11T17:47:59.120 [DEBUG] [Thread-174136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:47:59.120 [DEBUG] [Thread-174136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:47:59.120 [DEBUG] [Thread-174136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:47:59.120 [DEBUG] [Thread-174136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:47:59.137 [INFO] [Thread-174136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:47:59.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:47:59.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:47:59.966 [DEBUG] [Thread-174136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:47:59.966 [DEBUG] [Thread-174136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:48:00.014 [DEBUG] [Thread-174136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:48:00.014 [DEBUG] [Thread-174136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:48:00.022 [DEBUG] [Thread-174136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:48:00.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:48:00.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:48:00.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:48:00.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:48:00.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:48:00.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:48:00.066 [DEBUG] [Thread-174136] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:48:00.451 [DEBUG] [Thread-174138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:48:15.503 [DEBUG] [Thread-174139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:48:19.453 [DEBUG] [Thread-174140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:48:30.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:48:30.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:48:30.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:48:30.542 [DEBUG] [Thread-174141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:48:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 47, 50), 0.08399, 99.3748, 0.0, 21.0658, 13.3983, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:48:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:47:50
2026-04-11T17:48:31.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:48:31.892 [DEBUG] [Thread-174142] [transport.py] [_log()] starting thread (client mode): 0xb0f54d90
2026-04-11T17:48:31.892 [DEBUG] [Thread-174142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:48:31.912 [DEBUG] [Thread-174142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:48:31.912 [INFO] [Thread-174142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:48:31.915 [DEBUG] [Thread-174142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] client lang: <none>
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] server lang: <none>
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] kex follows: False
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:48:31.916 [DEBUG] [Thread-174142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:48:31.917 [DEBUG] [Thread-174142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:48:31.917 [DEBUG] [Thread-174142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:48:31.917 [DEBUG] [Thread-174142] [transport.py] [_log()] Compression: none
2026-04-11T17:48:31.917 [DEBUG] [Thread-174142] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:48:31.933 [DEBUG] [Thread-174142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:48:31.933 [DEBUG] [Thread-174142] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:48:31.934 [DEBUG] [Thread-174142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:48:31.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:48:31.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:48:31.935 [DEBUG] [Thread-174142] [transport.py] [_log()] userauth is OK
2026-04-11T17:48:31.935 [DEBUG] [Thread-174142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:48:31.935 [DEBUG] [Thread-174142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:48:31.935 [DEBUG] [Thread-174142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:48:31.935 [DEBUG] [Thread-174142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:48:31.951 [INFO] [Thread-174142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:48:31.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:48:32.707 [DEBUG] [Thread-174142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:48:32.707 [DEBUG] [Thread-174142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:48:32.708 [DEBUG] [Thread-174142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:48:32.749 [DEBUG] [Thread-174142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:48:32.749 [DEBUG] [Thread-174142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:48:32.753 [DEBUG] [Thread-174142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:48:32.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:48:32.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:48:32.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:48:32.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:48:32.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:48:32.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:48:32.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:48:32.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:48:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:48:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.658453 -999.00  +12.80  11.64     97  +12.40 1 3 1 3 1   887    0 0.36 -2.96 ----- 11.6 11.6 292.1 16.0 13.8 -0.5 13.6 -0.6 13.2 -0.5 13.7 -0.4
2026-04-11T17:48:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:48:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:48:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.658453
2026-04-11T17:48:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:48:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:48:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:48:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:48:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:48:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:47:50', tmtdew=0.08399, humidity=99.3748, cloud=0.0, wind=21.0658, temperature=13.3983, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:48:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:48:32.778 [DEBUG] [Thread-174142] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:48:32.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:48:32.874 [DEBUG] [Thread-174145] [transport.py] [_log()] starting thread (client mode): 0xb0f57f70
2026-04-11T17:48:32.874 [DEBUG] [Thread-174145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:48:32.889 [DEBUG] [Thread-174145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:48:32.889 [INFO] [Thread-174145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:48:32.896 [DEBUG] [Thread-174145] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] client lang: <none>
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] server lang: <none>
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] kex follows: False
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:48:32.897 [DEBUG] [Thread-174145] [transport.py] [_log()] Compression: none
2026-04-11T17:48:32.898 [DEBUG] [Thread-174145] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:48:32.955 [DEBUG] [Thread-174145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:48:32.955 [DEBUG] [Thread-174145] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:48:32.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:48:32.957 [DEBUG] [Thread-174145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:48:32.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:48:33.010 [DEBUG] [Thread-174145] [transport.py] [_log()] userauth is OK
2026-04-11T17:48:33.011 [DEBUG] [Thread-174145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:48:33.011 [DEBUG] [Thread-174145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:48:33.011 [DEBUG] [Thread-174145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:48:33.011 [DEBUG] [Thread-174145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:48:33.024 [INFO] [Thread-174145] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:48:33.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:48:33.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:48:33.905 [DEBUG] [Thread-174145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:48:33.905 [DEBUG] [Thread-174145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:48:33.953 [DEBUG] [Thread-174145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:48:33.953 [DEBUG] [Thread-174145] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:48:33.962 [DEBUG] [Thread-174145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:48:33.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:48:33.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-04-11T17:48:33.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-04-11T17:48:33.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:48:33.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:48:33.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:48:33.999 [DEBUG] [Thread-174145] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:48:39.003 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:48:39.004 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:48:45.585 [DEBUG] [Thread-174147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:00.636 [DEBUG] [Thread-174148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:04.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:49:04.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:49:04.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-04-11T17:49:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 48, 25), 0.092005, 99.6874, 0.0, 17.3095, 12.866, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:49:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:48:25
2026-04-11T17:49:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:49:05.900 [DEBUG] [Thread-174149] [transport.py] [_log()] starting thread (client mode): 0xb0fe9ae0
2026-04-11T17:49:05.900 [DEBUG] [Thread-174149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:49:05.914 [DEBUG] [Thread-174149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:49:05.914 [INFO] [Thread-174149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] client lang: <none>
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] server lang: <none>
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] kex follows: False
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] Compression: none
2026-04-11T17:49:05.919 [DEBUG] [Thread-174149] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:49:05.935 [DEBUG] [Thread-174149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:49:05.935 [DEBUG] [Thread-174149] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:49:05.936 [DEBUG] [Thread-174149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:49:05.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:49:05.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:49:05.938 [DEBUG] [Thread-174149] [transport.py] [_log()] userauth is OK
2026-04-11T17:49:05.938 [DEBUG] [Thread-174149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:49:05.938 [DEBUG] [Thread-174149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:49:05.938 [DEBUG] [Thread-174149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:49:05.938 [DEBUG] [Thread-174149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:49:05.963 [INFO] [Thread-174149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:49:05.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:49:06.763 [DEBUG] [Thread-174149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:49:06.763 [DEBUG] [Thread-174149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:49:06.764 [DEBUG] [Thread-174149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:49:06.804 [DEBUG] [Thread-174149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:49:06.804 [DEBUG] [Thread-174149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:49:06.807 [DEBUG] [Thread-174149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:49:06.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:49:06.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:49:06.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:49:06.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:49:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:49:06.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:49:06.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.658801 -999.00  +12.80  18.58     97  +12.30 1 3 1 3 1   887    0 0.36 -3.12 ----- 18.6 18.6 272.8 22.0 13.8 -1.1 13.7 -0.9 13.3 -0.8 13.7 -0.4
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.658801
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:49:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:48:25', tmtdew=0.092005, humidity=99.6874, cloud=0.0, wind=17.3095, temperature=12.866, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:48:40.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:49:06.828 [DEBUG] [Thread-174149] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:49:06.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:49:06.911 [DEBUG] [Thread-174152] [transport.py] [_log()] starting thread (client mode): 0xb0f54490
2026-04-11T17:49:06.911 [DEBUG] [Thread-174152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:49:06.926 [DEBUG] [Thread-174152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:49:06.926 [INFO] [Thread-174152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:49:06.934 [DEBUG] [Thread-174152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:49:06.934 [DEBUG] [Thread-174152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:49:06.935 [DEBUG] [Thread-174152] [transport.py] [_log()] client lang: <none>
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] server lang: <none>
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] kex follows: False
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:49:06.936 [DEBUG] [Thread-174152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:49:06.937 [DEBUG] [Thread-174152] [transport.py] [_log()] Compression: none
2026-04-11T17:49:06.937 [DEBUG] [Thread-174152] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:49:07.000 [DEBUG] [Thread-174152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:49:07.000 [DEBUG] [Thread-174152] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:49:07.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:49:07.002 [DEBUG] [Thread-174152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:49:07.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:49:07.059 [DEBUG] [Thread-174152] [transport.py] [_log()] userauth is OK
2026-04-11T17:49:07.059 [DEBUG] [Thread-174152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:49:07.059 [DEBUG] [Thread-174152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:49:07.059 [DEBUG] [Thread-174152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:49:07.059 [DEBUG] [Thread-174152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:49:07.079 [INFO] [Thread-174152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:49:07.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:49:07.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:49:07.917 [DEBUG] [Thread-174152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:49:07.917 [DEBUG] [Thread-174152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:49:07.964 [DEBUG] [Thread-174152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:49:07.965 [DEBUG] [Thread-174152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:49:07.973 [DEBUG] [Thread-174152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:49:07.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:49:07.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:49:07.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:49:07.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:49:07.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:49:08.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:49:08.007 [DEBUG] [Thread-174152] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:49:15.675 [DEBUG] [Thread-174154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:19.486 [DEBUG] [Thread-174155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:30.731 [DEBUG] [Thread-174156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:38.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:49:38.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:49:38.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-04-11T17:49:39.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:39.145 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:49:39.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 49), 0.09457, 99.6708, 0.0, 19.6916, 12.7997, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:49:39.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:49:00
2026-04-11T17:49:39.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:49:39.913 [DEBUG] [Thread-174157] [transport.py] [_log()] starting thread (client mode): 0xae5a7370
2026-04-11T17:49:39.914 [DEBUG] [Thread-174157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:49:39.934 [DEBUG] [Thread-174157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:49:39.934 [INFO] [Thread-174157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:49:39.937 [DEBUG] [Thread-174157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:49:39.937 [DEBUG] [Thread-174157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] client lang: <none>
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] server lang: <none>
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] kex follows: False
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:49:39.938 [DEBUG] [Thread-174157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:49:39.939 [DEBUG] [Thread-174157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:49:39.939 [DEBUG] [Thread-174157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:49:39.939 [DEBUG] [Thread-174157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:49:39.939 [DEBUG] [Thread-174157] [transport.py] [_log()] Compression: none
2026-04-11T17:49:39.939 [DEBUG] [Thread-174157] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:49:39.958 [DEBUG] [Thread-174157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:49:39.959 [DEBUG] [Thread-174157] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:49:39.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:49:39.960 [DEBUG] [Thread-174157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:49:39.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:49:39.963 [DEBUG] [Thread-174157] [transport.py] [_log()] userauth is OK
2026-04-11T17:49:39.963 [DEBUG] [Thread-174157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:49:39.963 [DEBUG] [Thread-174157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:49:39.963 [DEBUG] [Thread-174157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:49:39.963 [DEBUG] [Thread-174157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:49:39.998 [INFO] [Thread-174157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:49:39.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:49:40.803 [DEBUG] [Thread-174157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:49:40.803 [DEBUG] [Thread-174157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:49:40.804 [DEBUG] [Thread-174157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:49:40.845 [DEBUG] [Thread-174157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:49:40.845 [DEBUG] [Thread-174157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:49:40.849 [DEBUG] [Thread-174157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:49:40.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:49:40.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:49:40.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:49:40.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:49:40.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:49:40.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:49:40.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:49:40.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:49:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:49:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.659148 -999.00  +12.70  14.31     97  +12.30 1 3 1 3 1   887    0 0.37 -2.74 ----- 14.3 14.3 276.2 20.3 13.8 -0.8 13.6 -1.0 13.2 -0.9 13.7 -0.5
2026-04-11T17:49:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:49:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:49:40.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.659148
2026-04-11T17:49:40.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:49:40.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:49:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:49:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:49:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:49:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:49:00', tmtdew=0.09457, humidity=99.6708, cloud=0.0, wind=19.6916, temperature=12.7997, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:49:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:49:40.875 [DEBUG] [Thread-174157] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:49:40.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:49:40.969 [DEBUG] [Thread-174160] [transport.py] [_log()] starting thread (client mode): 0xae537b80
2026-04-11T17:49:40.969 [DEBUG] [Thread-174160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:49:40.983 [DEBUG] [Thread-174160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:49:40.983 [INFO] [Thread-174160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:49:40.991 [DEBUG] [Thread-174160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:49:40.991 [DEBUG] [Thread-174160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:49:40.991 [DEBUG] [Thread-174160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:49:40.991 [DEBUG] [Thread-174160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:40.991 [DEBUG] [Thread-174160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:49:40.991 [DEBUG] [Thread-174160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] client lang: <none>
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] server lang: <none>
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] kex follows: False
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:49:40.992 [DEBUG] [Thread-174160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:49:40.993 [DEBUG] [Thread-174160] [transport.py] [_log()] Compression: none
2026-04-11T17:49:40.993 [DEBUG] [Thread-174160] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:49:41.051 [DEBUG] [Thread-174160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:49:41.052 [DEBUG] [Thread-174160] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:49:41.053 [DEBUG] [Thread-174160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:49:41.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:49:41.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:49:41.107 [DEBUG] [Thread-174160] [transport.py] [_log()] userauth is OK
2026-04-11T17:49:41.107 [DEBUG] [Thread-174160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:49:41.107 [DEBUG] [Thread-174160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:49:41.107 [DEBUG] [Thread-174160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:49:41.107 [DEBUG] [Thread-174160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:49:41.125 [INFO] [Thread-174160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:49:41.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:49:41.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:49:41.925 [DEBUG] [Thread-174160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:49:41.925 [DEBUG] [Thread-174160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:49:41.973 [DEBUG] [Thread-174160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:49:41.973 [DEBUG] [Thread-174160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:49:41.983 [DEBUG] [Thread-174160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:49:41.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:49:41.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-04-11T17:49:42.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:49:42.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:49:42.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:49:42.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:49:42.020 [DEBUG] [Thread-174160] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:49:45.767 [DEBUG] [Thread-174162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:00.816 [DEBUG] [Thread-174163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:12.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:50:12.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:50:12.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:50:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 49, 36), 0.08404, 99.3747, 0.0, 21.7714, 13.2324, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:50:13.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:49:36
2026-04-11T17:50:13.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:50:13.818 [DEBUG] [Thread-174164] [transport.py] [_log()] starting thread (client mode): 0xae51a6b0
2026-04-11T17:50:13.818 [DEBUG] [Thread-174164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:50:13.837 [DEBUG] [Thread-174164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:50:13.837 [INFO] [Thread-174164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] client lang: <none>
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] server lang: <none>
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] kex follows: False
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] Compression: none
2026-04-11T17:50:13.840 [DEBUG] [Thread-174164] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:50:13.857 [DEBUG] [Thread-174164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:50:13.857 [DEBUG] [Thread-174164] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:50:13.858 [DEBUG] [Thread-174164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:50:13.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:50:13.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:50:13.859 [DEBUG] [Thread-174164] [transport.py] [_log()] userauth is OK
2026-04-11T17:50:13.860 [DEBUG] [Thread-174164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:50:13.860 [DEBUG] [Thread-174164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:50:13.860 [DEBUG] [Thread-174164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:50:13.860 [DEBUG] [Thread-174164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:50:13.877 [INFO] [Thread-174164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:50:13.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:50:15.166 [DEBUG] [Thread-174164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:50:15.167 [DEBUG] [Thread-174164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:50:15.167 [DEBUG] [Thread-174164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:50:15.208 [DEBUG] [Thread-174164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:50:15.208 [DEBUG] [Thread-174164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:50:15.211 [DEBUG] [Thread-174164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:50:15.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:50:15.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:50:15.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:50:15.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:50:15.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:50:15.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:50:15.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:50:15.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:50:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:50:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.659495 -999.00  +12.70  13.40     97  +12.30 1 3 1 3 1   887    0 0.36 -2.94 ----- 13.4 13.4 279.6 15.4 13.8 -0.8 13.6 -0.8 13.2 -0.8 13.7 -0.5
2026-04-11T17:50:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:50:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:50:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.659495
2026-04-11T17:50:15.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:50:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:50:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:50:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:50:15.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:50:15.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:49:36', tmtdew=0.08404, humidity=99.3747, cloud=0.0, wind=21.7714, temperature=13.2324, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:49:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:50:15.265 [DEBUG] [Thread-174164] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:50:15.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:50:15.352 [DEBUG] [Thread-174167] [transport.py] [_log()] starting thread (client mode): 0xa7953fa0
2026-04-11T17:50:15.352 [DEBUG] [Thread-174167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:50:15.367 [DEBUG] [Thread-174167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:50:15.367 [INFO] [Thread-174167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] client lang: <none>
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] server lang: <none>
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] kex follows: False
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] Compression: none
2026-04-11T17:50:15.375 [DEBUG] [Thread-174167] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:50:15.435 [DEBUG] [Thread-174167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:50:15.436 [DEBUG] [Thread-174167] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:50:15.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:50:15.437 [DEBUG] [Thread-174167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:50:15.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:50:15.491 [DEBUG] [Thread-174167] [transport.py] [_log()] userauth is OK
2026-04-11T17:50:15.492 [DEBUG] [Thread-174167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:50:15.492 [DEBUG] [Thread-174167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:50:15.492 [DEBUG] [Thread-174167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:50:15.492 [DEBUG] [Thread-174167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:50:15.510 [INFO] [Thread-174167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:50:15.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:50:15.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:50:15.852 [DEBUG] [Thread-174169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:16.346 [DEBUG] [Thread-174167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:50:16.347 [DEBUG] [Thread-174167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:50:16.395 [DEBUG] [Thread-174167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:50:16.396 [DEBUG] [Thread-174167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:50:16.405 [DEBUG] [Thread-174167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:50:16.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:50:16.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-04-11T17:50:16.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-04-11T17:50:16.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:50:16.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:50:16.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:50:16.442 [DEBUG] [Thread-174167] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:50:19.520 [DEBUG] [Thread-174170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:30.907 [DEBUG] [Thread-174171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:39.287 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:39.288 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:45.946 [DEBUG] [Thread-174172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:50:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:50:46.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:50:46.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-04-11T17:50:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 50, 13), 0.09458, 99.6707, 0.0, 20.7684, 12.7827, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:50:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:50:13
2026-04-11T17:50:48.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:50:48.263 [DEBUG] [Thread-174173] [transport.py] [_log()] starting thread (client mode): 0xae51b100
2026-04-11T17:50:48.263 [DEBUG] [Thread-174173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:50:48.279 [DEBUG] [Thread-174173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:50:48.279 [INFO] [Thread-174173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] client lang: <none>
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] server lang: <none>
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] kex follows: False
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] Compression: none
2026-04-11T17:50:48.281 [DEBUG] [Thread-174173] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:50:48.300 [DEBUG] [Thread-174173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:50:48.301 [DEBUG] [Thread-174173] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:50:48.301 [DEBUG] [Thread-174173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:50:48.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:50:48.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:50:48.303 [DEBUG] [Thread-174173] [transport.py] [_log()] userauth is OK
2026-04-11T17:50:48.304 [DEBUG] [Thread-174173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:50:48.304 [DEBUG] [Thread-174173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:50:48.304 [DEBUG] [Thread-174173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:50:48.304 [DEBUG] [Thread-174173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:50:48.329 [INFO] [Thread-174173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:50:48.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:50:49.085 [DEBUG] [Thread-174173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:50:49.085 [DEBUG] [Thread-174173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:50:49.085 [DEBUG] [Thread-174173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:50:49.126 [DEBUG] [Thread-174173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:50:49.126 [DEBUG] [Thread-174173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:50:49.129 [DEBUG] [Thread-174173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:50:49.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:50:49.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:50:49.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:50:49.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:50:49.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:50:49.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:50:49.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:50:49.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:50:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:50:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.659842 -999.00  +12.70  18.04     97  +12.20 1 3 1 3 1   887    0 0.36 -2.83 ----- 18.0 18.0 275.6 20.8 13.8 -1.0 13.6 -1.0 13.2 -0.6 13.7 -0.5
2026-04-11T17:50:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:50:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:50:49.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.659842
2026-04-11T17:50:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:50:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:50:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:50:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:50:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:50:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:50:13', tmtdew=0.09458, humidity=99.6707, cloud=0.0, wind=20.7684, temperature=12.7827, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:50:10.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:50:49.156 [DEBUG] [Thread-174173] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:50: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-04-11T17:50:49.257 [DEBUG] [Thread-174176] [transport.py] [_log()] starting thread (client mode): 0xae5a5d80
2026-04-11T17:50:49.258 [DEBUG] [Thread-174176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:50:49.272 [DEBUG] [Thread-174176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:50:49.273 [INFO] [Thread-174176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:50:49.280 [DEBUG] [Thread-174176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] client lang: <none>
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] server lang: <none>
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] kex follows: False
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:50:49.281 [DEBUG] [Thread-174176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:50:49.282 [DEBUG] [Thread-174176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:50:49.282 [DEBUG] [Thread-174176] [transport.py] [_log()] Compression: none
2026-04-11T17:50:49.282 [DEBUG] [Thread-174176] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:50:49.339 [DEBUG] [Thread-174176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:50:49.340 [DEBUG] [Thread-174176] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:50:49.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:50:49.341 [DEBUG] [Thread-174176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:50:49.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:50:49.394 [DEBUG] [Thread-174176] [transport.py] [_log()] userauth is OK
2026-04-11T17:50:49.395 [DEBUG] [Thread-174176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:50:49.395 [DEBUG] [Thread-174176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:50:49.395 [DEBUG] [Thread-174176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:50:49.395 [DEBUG] [Thread-174176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:50:49.417 [INFO] [Thread-174176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:50:49.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:50:49.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:50:50.278 [DEBUG] [Thread-174176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:50:50.278 [DEBUG] [Thread-174176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:50:50.326 [DEBUG] [Thread-174176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:50:50.326 [DEBUG] [Thread-174176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:50:50.336 [DEBUG] [Thread-174176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:50:50.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:50:50.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:50:50.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:50:50.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:50:50.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:50:50.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:50:50.373 [DEBUG] [Thread-174176] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:51:00.982 [DEBUG] [Thread-174178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:16.049 [DEBUG] [Thread-174179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:19.553 [DEBUG] [Thread-174180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:20.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:51:20.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:51:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:51:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 50, 49), 0.08405, 99.3746, 0.0, 19.3018, 13.2655, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:51:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:50:49
2026-04-11T17:51:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:51:22.227 [DEBUG] [Thread-174181] [transport.py] [_log()] starting thread (client mode): 0xae50bbe0
2026-04-11T17:51:22.227 [DEBUG] [Thread-174181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:51:22.247 [DEBUG] [Thread-174181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:51:22.247 [INFO] [Thread-174181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] client lang: <none>
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] server lang: <none>
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] kex follows: False
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:51:22.251 [DEBUG] [Thread-174181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:51:22.252 [DEBUG] [Thread-174181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:51:22.252 [DEBUG] [Thread-174181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:51:22.252 [DEBUG] [Thread-174181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:51:22.252 [DEBUG] [Thread-174181] [transport.py] [_log()] Compression: none
2026-04-11T17:51:22.252 [DEBUG] [Thread-174181] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:51:22.268 [DEBUG] [Thread-174181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:51:22.268 [DEBUG] [Thread-174181] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:51:22.268 [DEBUG] [Thread-174181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:51:22.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:51:22.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:51:22.271 [DEBUG] [Thread-174181] [transport.py] [_log()] userauth is OK
2026-04-11T17:51:22.271 [DEBUG] [Thread-174181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:51:22.271 [DEBUG] [Thread-174181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:51:22.272 [DEBUG] [Thread-174181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:51:22.272 [DEBUG] [Thread-174181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:51:22.297 [INFO] [Thread-174181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:51:22.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:51:23.103 [DEBUG] [Thread-174181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:51:23.104 [DEBUG] [Thread-174181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:51:23.104 [DEBUG] [Thread-174181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:51:23.145 [DEBUG] [Thread-174181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:51:23.146 [DEBUG] [Thread-174181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:51:23.149 [DEBUG] [Thread-174181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:51:23.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:51:23.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:51:23.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:51:23.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:51:23.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:51:23.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:51:23.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:51:23.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.660189 -999.00  +12.70  13.45     97  +12.20 1 3 1 3 1   887    0 0.38 -2.51 ----- 13.4 13.4 294.0 21.6 13.8 -1.2 13.6 -0.7 13.2 -0.4 13.7 -0.5
2026-04-11T17:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.660189
2026-04-11T17:51:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:51:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:51:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:51:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:51:23.175 [DEBUG] [Thread-174181] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:51:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:51:23.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:50:49', tmtdew=0.08405, humidity=99.3746, cloud=0.0, wind=19.3018, temperature=13.2655, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:50:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:51:23.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:51:23.268 [DEBUG] [Thread-174184] [transport.py] [_log()] starting thread (client mode): 0xae509960
2026-04-11T17:51:23.269 [DEBUG] [Thread-174184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:51:23.283 [DEBUG] [Thread-174184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:51:23.284 [INFO] [Thread-174184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:51:23.291 [DEBUG] [Thread-174184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:51:23.292 [DEBUG] [Thread-174184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] client lang: <none>
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] server lang: <none>
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] kex follows: False
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:51:23.293 [DEBUG] [Thread-174184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:51:23.294 [DEBUG] [Thread-174184] [transport.py] [_log()] Compression: none
2026-04-11T17:51:23.294 [DEBUG] [Thread-174184] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:51:23.352 [DEBUG] [Thread-174184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:51:23.353 [DEBUG] [Thread-174184] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:51:23.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:51:23.354 [DEBUG] [Thread-174184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:51:23.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:51:23.411 [DEBUG] [Thread-174184] [transport.py] [_log()] userauth is OK
2026-04-11T17:51:23.411 [DEBUG] [Thread-174184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:51:23.411 [DEBUG] [Thread-174184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:51:23.412 [DEBUG] [Thread-174184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:51:23.412 [DEBUG] [Thread-174184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:51:23.435 [INFO] [Thread-174184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:51:23.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:51:23.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:51:24.249 [DEBUG] [Thread-174184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:51:24.250 [DEBUG] [Thread-174184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:51:24.298 [DEBUG] [Thread-174184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:51:24.298 [DEBUG] [Thread-174184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:51:24.306 [DEBUG] [Thread-174184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:51:24.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:51:24.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-04-11T17:51:24.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-04-11T17:51:24.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:51:24.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:51:24.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:51:24.339 [DEBUG] [Thread-174184] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:51:31.087 [DEBUG] [Thread-174186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:39.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:39.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:46.141 [DEBUG] [Thread-174187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:51:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:51:54.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:51:54.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-04-11T17:51:55.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 51, 24), 0.091975, 99.6877, 0.0, 16.6921, 12.8164, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:51:55.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:51:24
2026-04-11T17:51:56.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:51:56.312 [DEBUG] [Thread-174188] [transport.py] [_log()] starting thread (client mode): 0xae509c90
2026-04-11T17:51:56.312 [DEBUG] [Thread-174188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:51:56.334 [DEBUG] [Thread-174188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:51:56.334 [INFO] [Thread-174188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:51:56.338 [DEBUG] [Thread-174188] [transport.py] [_log()] client lang: <none>
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] server lang: <none>
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] kex follows: False
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] Compression: none
2026-04-11T17:51:56.339 [DEBUG] [Thread-174188] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:51:56.358 [DEBUG] [Thread-174188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:51:56.359 [DEBUG] [Thread-174188] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:51:56.360 [DEBUG] [Thread-174188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:51:56.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:51:56.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:51:56.362 [DEBUG] [Thread-174188] [transport.py] [_log()] userauth is OK
2026-04-11T17:51:56.362 [DEBUG] [Thread-174188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:51:56.362 [DEBUG] [Thread-174188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:51:56.362 [DEBUG] [Thread-174188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:51:56.362 [DEBUG] [Thread-174188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:51:56.400 [INFO] [Thread-174188] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:51:56.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:51:57.202 [DEBUG] [Thread-174188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:51:57.202 [DEBUG] [Thread-174188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:51:57.203 [DEBUG] [Thread-174188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:51:57.244 [DEBUG] [Thread-174188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:51:57.244 [DEBUG] [Thread-174188] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:51:57.247 [DEBUG] [Thread-174188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:51:57.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:51:57.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:51:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:51:57.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:51:57.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:51:57.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:51:57.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:51:57.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:51:57.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:51:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.660537 -999.00  +12.70  15.08     97  +12.30 1 3 1 3 1   887    0 0.37 -2.58 ----- 15.1 15.1 267.8 20.8 13.8 -1.3 13.6 -0.8 13.2 -0.6 13.7 -0.7
2026-04-11T17:51:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:51:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:51:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.660537
2026-04-11T17:51:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:51:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:51:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:51:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:51:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:51:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:51:24', tmtdew=0.091975, humidity=99.6877, cloud=0.0, wind=16.6921, temperature=12.8164, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:51:10.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:51:57.275 [DEBUG] [Thread-174188] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:51:57.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:51:57.368 [DEBUG] [Thread-174191] [transport.py] [_log()] starting thread (client mode): 0xae536530
2026-04-11T17:51:57.368 [DEBUG] [Thread-174191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:51:57.383 [DEBUG] [Thread-174191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:51:57.383 [INFO] [Thread-174191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] client lang: <none>
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] server lang: <none>
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] kex follows: False
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:51:57.391 [DEBUG] [Thread-174191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:51:57.392 [DEBUG] [Thread-174191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:51:57.392 [DEBUG] [Thread-174191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:51:57.392 [DEBUG] [Thread-174191] [transport.py] [_log()] Compression: none
2026-04-11T17:51:57.392 [DEBUG] [Thread-174191] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:51:57.456 [DEBUG] [Thread-174191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:51:57.457 [DEBUG] [Thread-174191] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:51:57.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:51:57.458 [DEBUG] [Thread-174191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:51:57.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:51:57.515 [DEBUG] [Thread-174191] [transport.py] [_log()] userauth is OK
2026-04-11T17:51:57.515 [DEBUG] [Thread-174191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:51:57.515 [DEBUG] [Thread-174191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:51:57.516 [DEBUG] [Thread-174191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:51:57.516 [DEBUG] [Thread-174191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:51:57.535 [INFO] [Thread-174191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:51:57.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:51:57.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:51:58.361 [DEBUG] [Thread-174191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:51:58.361 [DEBUG] [Thread-174191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:51:58.409 [DEBUG] [Thread-174191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:51:58.409 [DEBUG] [Thread-174191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:51:58.419 [DEBUG] [Thread-174191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:51:58.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:51:58.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:51:58.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-04-11T17:51:58.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:51:58.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:51:58.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:51:58.456 [DEBUG] [Thread-174191] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:52:01.177 [DEBUG] [Thread-174193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:52:16.228 [DEBUG] [Thread-174194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:52:19.586 [DEBUG] [Thread-174195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:52:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:52:28.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:52:28.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-04-11T17:52:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 51, 59), 0.036855, 99.7208, 0.0, 18.8802, 12.7996, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:52:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:51:59
2026-04-11T17:52:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:52:30.279 [DEBUG] [Thread-174196] [transport.py] [_log()] starting thread (client mode): 0xa79537f0
2026-04-11T17:52:30.279 [DEBUG] [Thread-174196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:52:30.301 [DEBUG] [Thread-174196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:52:30.301 [INFO] [Thread-174196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:52:30.302 [DEBUG] [Thread-174196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] client lang: <none>
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] server lang: <none>
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] kex follows: False
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] Compression: none
2026-04-11T17:52:30.303 [DEBUG] [Thread-174196] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:52:30.318 [DEBUG] [Thread-174196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:52:30.319 [DEBUG] [Thread-174196] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:52:30.319 [DEBUG] [Thread-174196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:52:30.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:52:30.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:52:30.322 [DEBUG] [Thread-174196] [transport.py] [_log()] userauth is OK
2026-04-11T17:52:30.322 [DEBUG] [Thread-174196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:52:30.322 [DEBUG] [Thread-174196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:52:30.322 [DEBUG] [Thread-174196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:52:30.322 [DEBUG] [Thread-174196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:52:30.348 [INFO] [Thread-174196] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:52:30.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:52:31.085 [DEBUG] [Thread-174196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:52:31.085 [DEBUG] [Thread-174196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:52:31.086 [DEBUG] [Thread-174196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:52:31.126 [DEBUG] [Thread-174196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:52:31.126 [DEBUG] [Thread-174196] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:52:31.129 [DEBUG] [Thread-174196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:52:31.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:52:31.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:52:31.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:52:31.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:52:31.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:52:31.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:52:31.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:52:31.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:52:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:52:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.660884 -999.00  +12.70  16.87     97  +12.20 1 3 1 3 1   887    0 0.38 -2.42 ----- 16.9 16.9 284.6 21.4 13.8 -0.9 13.6 -0.8 13.2 -0.9 13.6 -0.4
2026-04-11T17:52:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:52:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:52:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.660884
2026-04-11T17:52:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:52:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:52:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:52:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:52:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:52:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:51:59', tmtdew=0.036855, humidity=99.7208, cloud=0.0, wind=18.8802, temperature=12.7996, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:51:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:52:31.154 [DEBUG] [Thread-174196] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:52:31.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:52:31.247 [DEBUG] [Thread-174199] [transport.py] [_log()] starting thread (client mode): 0xae5a6800
2026-04-11T17:52:31.247 [DEBUG] [Thread-174199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:52:31.261 [DEBUG] [Thread-174199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:52:31.261 [INFO] [Thread-174199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:52:31.262 [DEBUG] [Thread-174201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] client lang: <none>
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] server lang: <none>
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] kex follows: False
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] Compression: none
2026-04-11T17:52:31.269 [DEBUG] [Thread-174199] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:52:31.327 [DEBUG] [Thread-174199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:52:31.328 [DEBUG] [Thread-174199] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:52:31.329 [DEBUG] [Thread-174199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:52:31.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:52:31.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:52:31.387 [DEBUG] [Thread-174199] [transport.py] [_log()] userauth is OK
2026-04-11T17:52:31.387 [DEBUG] [Thread-174199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:52:31.388 [DEBUG] [Thread-174199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:52:31.388 [DEBUG] [Thread-174199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:52:31.388 [DEBUG] [Thread-174199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:52:31.408 [INFO] [Thread-174199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:52:31.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:52:31.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:52:32.314 [DEBUG] [Thread-174199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:52:32.315 [DEBUG] [Thread-174199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:52:32.363 [DEBUG] [Thread-174199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:52:32.363 [DEBUG] [Thread-174199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:52:32.372 [DEBUG] [Thread-174199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:52:32.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:52:32.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:52:32.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:52:32.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:52:32.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:52:32.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:52:32.412 [DEBUG] [Thread-174199] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:52:39.569 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:52:39.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:52:46.312 [DEBUG] [Thread-174202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:01.352 [DEBUG] [Thread-174203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:02.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:53:02.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:53:02.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-04-11T17:53:03.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 52, 35), 0.09421, 99.3087, 0.0, 20.2543, 13.1663, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:53:03.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:52:35
2026-04-11T17:53:04.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:53:04.226 [DEBUG] [Thread-174204] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-11T17:53:04.226 [DEBUG] [Thread-174204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:53:04.248 [DEBUG] [Thread-174204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:53:04.248 [INFO] [Thread-174204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:53:04.251 [DEBUG] [Thread-174204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:53:04.251 [DEBUG] [Thread-174204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:53:04.251 [DEBUG] [Thread-174204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:53:04.251 [DEBUG] [Thread-174204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] client lang: <none>
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] server lang: <none>
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] kex follows: False
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:53:04.252 [DEBUG] [Thread-174204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:53:04.253 [DEBUG] [Thread-174204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:53:04.253 [DEBUG] [Thread-174204] [transport.py] [_log()] Compression: none
2026-04-11T17:53:04.253 [DEBUG] [Thread-174204] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:53:04.270 [DEBUG] [Thread-174204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:53:04.271 [DEBUG] [Thread-174204] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:53:04.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:53:04.272 [DEBUG] [Thread-174204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:53:04.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:53:04.274 [DEBUG] [Thread-174204] [transport.py] [_log()] userauth is OK
2026-04-11T17:53:04.274 [DEBUG] [Thread-174204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:53:04.274 [DEBUG] [Thread-174204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:53:04.274 [DEBUG] [Thread-174204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:53:04.274 [DEBUG] [Thread-174204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:53:04.299 [INFO] [Thread-174204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:53:04.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:53:05.027 [DEBUG] [Thread-174204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:53:05.028 [DEBUG] [Thread-174204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:53:05.028 [DEBUG] [Thread-174204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:53:05.069 [DEBUG] [Thread-174204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:53:05.069 [DEBUG] [Thread-174204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:53:05.073 [DEBUG] [Thread-174204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:53:05.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:53:05.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:53:05.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:53:05.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:53:05.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:53:05.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:53:05.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:53:05.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:53:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:53:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.661231 -999.00  +12.80  17.19     97  +12.30 1 3 1 3 1   887    0 0.38 -2.12 ----- 17.2 17.2 299.2 19.8 13.8 -0.9 13.6 -0.6 13.2 -0.5 13.6 -0.2
2026-04-11T17:53:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:53:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:53:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.661231
2026-04-11T17:53:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:53:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:53:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:53:05.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:53:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:53:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:52:35', tmtdew=0.09421, humidity=99.3087, cloud=0.0, wind=20.2543, temperature=13.1663, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:52:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:53:05.100 [DEBUG] [Thread-174204] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:53:05.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:53:05.194 [DEBUG] [Thread-174207] [transport.py] [_log()] starting thread (client mode): 0xae5f0820
2026-04-11T17:53:05.194 [DEBUG] [Thread-174207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:53:05.211 [DEBUG] [Thread-174207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:53:05.211 [INFO] [Thread-174207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] client lang: <none>
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] server lang: <none>
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] kex follows: False
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:53:05.219 [DEBUG] [Thread-174207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:53:05.220 [DEBUG] [Thread-174207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:53:05.220 [DEBUG] [Thread-174207] [transport.py] [_log()] Compression: none
2026-04-11T17:53:05.220 [DEBUG] [Thread-174207] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:53:05.280 [DEBUG] [Thread-174207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:53:05.281 [DEBUG] [Thread-174207] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:53:05.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:53:05.282 [DEBUG] [Thread-174207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:53:05.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:53:05.339 [DEBUG] [Thread-174207] [transport.py] [_log()] userauth is OK
2026-04-11T17:53:05.339 [DEBUG] [Thread-174207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:53:05.340 [DEBUG] [Thread-174207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:53:05.340 [DEBUG] [Thread-174207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:53:05.340 [DEBUG] [Thread-174207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:53:05.361 [INFO] [Thread-174207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:53:05.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:53:05.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:53:06.218 [DEBUG] [Thread-174207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:53:06.218 [DEBUG] [Thread-174207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:53:06.266 [DEBUG] [Thread-174207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:53:06.266 [DEBUG] [Thread-174207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:53:06.276 [DEBUG] [Thread-174207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:53:06.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:53:06.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-04-11T17:53:06.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-04-11T17:53:06.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:53:06.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:53:06.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:53:06.313 [DEBUG] [Thread-174207] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:53:16.402 [DEBUG] [Thread-174209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:19.619 [DEBUG] [Thread-174210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:31.453 [DEBUG] [Thread-174211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:36.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:53:36.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:53:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:53:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 53, 10), 0.09455, 99.671, 0.0, 20.6273, 12.7997, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:53:37.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:53:10
2026-04-11T17:53:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:53:38.203 [DEBUG] [Thread-174212] [transport.py] [_log()] starting thread (client mode): 0xa79520b0
2026-04-11T17:53:38.204 [DEBUG] [Thread-174212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:53:38.224 [DEBUG] [Thread-174212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:53:38.224 [INFO] [Thread-174212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:53:38.227 [DEBUG] [Thread-174212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:53:38.227 [DEBUG] [Thread-174212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:53:38.227 [DEBUG] [Thread-174212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:53:38.227 [DEBUG] [Thread-174212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:38.227 [DEBUG] [Thread-174212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:38.227 [DEBUG] [Thread-174212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] client lang: <none>
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] server lang: <none>
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] kex follows: False
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] Compression: none
2026-04-11T17:53:38.228 [DEBUG] [Thread-174212] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:53:38.250 [DEBUG] [Thread-174212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:53:38.250 [DEBUG] [Thread-174212] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:53:38.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:53:38.251 [DEBUG] [Thread-174212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:53:38.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:53:38.253 [DEBUG] [Thread-174212] [transport.py] [_log()] userauth is OK
2026-04-11T17:53:38.254 [DEBUG] [Thread-174212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:53:38.254 [DEBUG] [Thread-174212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:53:38.254 [DEBUG] [Thread-174212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:53:38.254 [DEBUG] [Thread-174212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:53:38.272 [INFO] [Thread-174212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:53:38.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:53:39.069 [DEBUG] [Thread-174212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:53:39.070 [DEBUG] [Thread-174212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:53:39.070 [DEBUG] [Thread-174212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:53:39.111 [DEBUG] [Thread-174212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:53:39.111 [DEBUG] [Thread-174212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:53:39.114 [DEBUG] [Thread-174212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:53:39.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:53:39.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:53:39.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:53:39.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:53:39.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:53:39.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:53:39.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:53:39.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:53:39.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:53:39.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.661926 -999.00  +12.70  11.94     97  +12.30 1 3 1 3 1   887    0 0.37 -2.26 ----- 11.9 11.9 288.4 17.0 13.8 -0.9 13.6 -0.7 13.2 -1.1 13.7 -0.1
2026-04-11T17:53:39.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:53:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:53:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.661926
2026-04-11T17:53:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:53:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:53:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:53:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:53:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:53:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:53:10', tmtdew=0.09455, humidity=99.671, cloud=0.0, wind=20.6273, temperature=12.7997, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:53:10.406', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:53:39.144 [DEBUG] [Thread-174212] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:53:39.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:53:39.238 [DEBUG] [Thread-174215] [transport.py] [_log()] starting thread (client mode): 0xae5a4880
2026-04-11T17:53:39.238 [DEBUG] [Thread-174215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:53:39.256 [DEBUG] [Thread-174215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:53:39.256 [INFO] [Thread-174215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:53:39.263 [DEBUG] [Thread-174215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:53:39.264 [DEBUG] [Thread-174215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] client lang: <none>
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] server lang: <none>
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] kex follows: False
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:53:39.265 [DEBUG] [Thread-174215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:53:39.266 [DEBUG] [Thread-174215] [transport.py] [_log()] Compression: none
2026-04-11T17:53:39.266 [DEBUG] [Thread-174215] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:53:39.324 [DEBUG] [Thread-174215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:53:39.325 [DEBUG] [Thread-174215] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:53:39.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:53:39.326 [DEBUG] [Thread-174215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:53:39.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:53:39.383 [DEBUG] [Thread-174215] [transport.py] [_log()] userauth is OK
2026-04-11T17:53:39.383 [DEBUG] [Thread-174215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:53:39.383 [DEBUG] [Thread-174215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:53:39.383 [DEBUG] [Thread-174215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:53:39.384 [DEBUG] [Thread-174215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:53:39.403 [INFO] [Thread-174215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:53:39.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:53:39.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:53:39.711 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:39.712 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:53:40.266 [DEBUG] [Thread-174215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:53:40.267 [DEBUG] [Thread-174215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:53:40.314 [DEBUG] [Thread-174215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:53:40.315 [DEBUG] [Thread-174215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:53:40.324 [DEBUG] [Thread-174215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:53:40.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:53:40.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-04-11T17:53:40.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:53:40.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:53:40.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:53:40.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:53:40.362 [DEBUG] [Thread-174215] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:53:46.489 [DEBUG] [Thread-174217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:01.539 [DEBUG] [Thread-174218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:54:10.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:54:10.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-04-11T17:54:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 53, 46), 0.07888, 99.408, 0.0, 21.4186, 13.332, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:54:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:53:46
2026-04-11T17:54:12.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:54:12.201 [DEBUG] [Thread-174219] [transport.py] [_log()] starting thread (client mode): 0xa7950280
2026-04-11T17:54:12.201 [DEBUG] [Thread-174219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:54:12.221 [DEBUG] [Thread-174219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:54:12.221 [INFO] [Thread-174219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] client lang: <none>
2026-04-11T17:54:12.225 [DEBUG] [Thread-174219] [transport.py] [_log()] server lang: <none>
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] kex follows: False
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] Compression: none
2026-04-11T17:54:12.226 [DEBUG] [Thread-174219] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:54:12.243 [DEBUG] [Thread-174219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:54:12.244 [DEBUG] [Thread-174219] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:54:12.244 [DEBUG] [Thread-174219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:54:12.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:54:12.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:54:12.246 [DEBUG] [Thread-174219] [transport.py] [_log()] userauth is OK
2026-04-11T17:54:12.246 [DEBUG] [Thread-174219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:54:12.246 [DEBUG] [Thread-174219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:54:12.246 [DEBUG] [Thread-174219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:54:12.247 [DEBUG] [Thread-174219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:54:12.263 [INFO] [Thread-174219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:54:12.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:54:13.055 [DEBUG] [Thread-174219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:54:13.055 [DEBUG] [Thread-174219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:54:13.056 [DEBUG] [Thread-174219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:54:13.096 [DEBUG] [Thread-174219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:54:13.096 [DEBUG] [Thread-174219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:54:13.098 [DEBUG] [Thread-174219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:54:13.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:54:13.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:54:13.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:54:13.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:54:13.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:54:13.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:54:13.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:54:13.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:54:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:54:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.662273 -999.00  +12.80  13.61     97  +12.30 1 3 1 3 1   887    0 0.39 -1.74 ----- 13.6 13.6 291.8 19.1 13.8 -1.1 13.6 -0.8 13.2 -0.9 13.7 -0.2
2026-04-11T17:54:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:54:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:54:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.662273
2026-04-11T17:54:13.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:54:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:54:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:54:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:54:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:54:13.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:53:46', tmtdew=0.07888, humidity=99.408, cloud=0.0, wind=21.4186, temperature=13.332, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:53:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:54:13.123 [DEBUG] [Thread-174219] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:54:13.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:54:13.221 [DEBUG] [Thread-174222] [transport.py] [_log()] starting thread (client mode): 0xa7952050
2026-04-11T17:54:13.221 [DEBUG] [Thread-174222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:54:13.236 [DEBUG] [Thread-174222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:54:13.236 [INFO] [Thread-174222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:54:13.244 [DEBUG] [Thread-174222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:54:13.245 [DEBUG] [Thread-174222] [transport.py] [_log()] client lang: <none>
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] server lang: <none>
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] kex follows: False
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:54:13.246 [DEBUG] [Thread-174222] [transport.py] [_log()] Compression: none
2026-04-11T17:54:13.247 [DEBUG] [Thread-174222] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:54:13.302 [DEBUG] [Thread-174222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:54:13.303 [DEBUG] [Thread-174222] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:54:13.303 [DEBUG] [Thread-174222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:54:13.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:54:13.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:54:13.358 [DEBUG] [Thread-174222] [transport.py] [_log()] userauth is OK
2026-04-11T17:54:13.358 [DEBUG] [Thread-174222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:54:13.358 [DEBUG] [Thread-174222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:54:13.358 [DEBUG] [Thread-174222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:54:13.358 [DEBUG] [Thread-174222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:54:13.380 [INFO] [Thread-174222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:54:13.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:54:13.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:54:14.207 [DEBUG] [Thread-174222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:54:14.207 [DEBUG] [Thread-174222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:54:14.256 [DEBUG] [Thread-174222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:54:14.257 [DEBUG] [Thread-174222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:54:14.265 [DEBUG] [Thread-174222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:54:14.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:54:14.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-04-11T17:54:14.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:54:14.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:54:14.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:54:14.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:54:14.299 [DEBUG] [Thread-174222] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:54:16.574 [DEBUG] [Thread-174224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:19.660 [DEBUG] [Thread-174225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:31.624 [DEBUG] [Thread-174226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:39.853 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:39.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:54:44.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:54:44.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-04-11T17:54:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 54, 21), 0.084335, 99.7372, 0.0, 21.4916, 12.7994, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:54:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:54:21
2026-04-11T17:54:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:54:46.145 [DEBUG] [Thread-174227] [transport.py] [_log()] starting thread (client mode): 0xae50b370
2026-04-11T17:54:46.145 [DEBUG] [Thread-174227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:54:46.157 [DEBUG] [Thread-174227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:54:46.157 [INFO] [Thread-174227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] client lang: <none>
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] server lang: <none>
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] kex follows: False
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] Compression: none
2026-04-11T17:54:46.160 [DEBUG] [Thread-174227] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:54:46.180 [DEBUG] [Thread-174227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:54:46.181 [DEBUG] [Thread-174227] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:54:46.181 [DEBUG] [Thread-174227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:54:46.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:54:46.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:54:46.184 [DEBUG] [Thread-174227] [transport.py] [_log()] userauth is OK
2026-04-11T17:54:46.184 [DEBUG] [Thread-174227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:54:46.184 [DEBUG] [Thread-174227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:54:46.184 [DEBUG] [Thread-174227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:54:46.184 [DEBUG] [Thread-174227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:54:46.209 [INFO] [Thread-174227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:54:46.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:54:46.664 [DEBUG] [Thread-174229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:54:46.971 [DEBUG] [Thread-174227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:54:46.971 [DEBUG] [Thread-174227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:54:46.972 [DEBUG] [Thread-174227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:54:47.013 [DEBUG] [Thread-174227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:54:47.013 [DEBUG] [Thread-174227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:54:47.016 [DEBUG] [Thread-174227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:54:47.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:54:47.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:54:47.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:54:47.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:54:47.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:54:47.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:54:47.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:54:47.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:54:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:54:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.662620 -999.00  +12.80  13.50     97  +12.30 1 3 1 3 1   887    0 0.41 -1.19 ----- 13.5 13.5 291.4 17.1 13.8 -1.0 13.7 -0.8 13.3 -1.0 13.7 -0.2
2026-04-11T17:54:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:54:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:54:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.662620
2026-04-11T17:54:47.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:54:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:54:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:54:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:54:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:54:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:54:21', tmtdew=0.084335, humidity=99.7372, cloud=0.0, wind=21.4916, temperature=12.7994, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:54:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:54:47.046 [DEBUG] [Thread-174227] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:54:47.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:54:47.139 [DEBUG] [Thread-174231] [transport.py] [_log()] starting thread (client mode): 0xae561b10
2026-04-11T17:54:47.139 [DEBUG] [Thread-174231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:54:47.153 [DEBUG] [Thread-174231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:54:47.153 [INFO] [Thread-174231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] client lang: <none>
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] server lang: <none>
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] kex follows: False
2026-04-11T17:54:47.161 [DEBUG] [Thread-174231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:54:47.162 [DEBUG] [Thread-174231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:54:47.162 [DEBUG] [Thread-174231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:54:47.162 [DEBUG] [Thread-174231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:54:47.162 [DEBUG] [Thread-174231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:54:47.162 [DEBUG] [Thread-174231] [transport.py] [_log()] Compression: none
2026-04-11T17:54:47.162 [DEBUG] [Thread-174231] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:54:47.219 [DEBUG] [Thread-174231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:54:47.220 [DEBUG] [Thread-174231] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:54:47.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:54:47.221 [DEBUG] [Thread-174231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:54:47.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:54:47.275 [DEBUG] [Thread-174231] [transport.py] [_log()] userauth is OK
2026-04-11T17:54:47.275 [DEBUG] [Thread-174231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:54:47.275 [DEBUG] [Thread-174231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:54:47.275 [DEBUG] [Thread-174231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:54:47.275 [DEBUG] [Thread-174231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:54:47.294 [INFO] [Thread-174231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:54:47.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:54:47.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:54:48.135 [DEBUG] [Thread-174231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:54:48.136 [DEBUG] [Thread-174231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:54:48.183 [DEBUG] [Thread-174231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:54:48.184 [DEBUG] [Thread-174231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:54:48.193 [DEBUG] [Thread-174231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:54:48.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:54:48.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-04-11T17:54:48.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-04-11T17:54:48.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:54:48.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:54:48.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:54:48.226 [DEBUG] [Thread-174231] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:55:01.700 [DEBUG] [Thread-174233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:16.755 [DEBUG] [Thread-174234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:55:18.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:55:18.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:55:19.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 54, 56), 0.036845, 99.7209, 0.0, 19.4447, 12.7665, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:55:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:54:56
2026-04-11T17:55:19.694 [DEBUG] [Thread-174235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:55:20.053 [DEBUG] [Thread-174236] [transport.py] [_log()] starting thread (client mode): 0xae5f0970
2026-04-11T17:55:20.053 [DEBUG] [Thread-174236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:55:20.069 [DEBUG] [Thread-174236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:55:20.069 [INFO] [Thread-174236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:20.072 [DEBUG] [Thread-174236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] client lang: <none>
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] server lang: <none>
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] kex follows: False
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] Compression: none
2026-04-11T17:55:20.073 [DEBUG] [Thread-174236] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:55:20.089 [DEBUG] [Thread-174236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:55:20.090 [DEBUG] [Thread-174236] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:55:20.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:55:20.091 [DEBUG] [Thread-174236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:55:20.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:55:20.093 [DEBUG] [Thread-174236] [transport.py] [_log()] userauth is OK
2026-04-11T17:55:20.093 [DEBUG] [Thread-174236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:55:20.093 [DEBUG] [Thread-174236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:55:20.094 [DEBUG] [Thread-174236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:55:20.094 [DEBUG] [Thread-174236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:55:20.111 [INFO] [Thread-174236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:55:20.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:55:21.495 [DEBUG] [Thread-174236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:55:21.496 [DEBUG] [Thread-174236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:55:21.496 [DEBUG] [Thread-174236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:55:21.536 [DEBUG] [Thread-174236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:55:21.537 [DEBUG] [Thread-174236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:55:21.540 [DEBUG] [Thread-174236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:55:21.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:55:21.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:55:21.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:55:21.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:55:21.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:55:21.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:55:21.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:55:21.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:55:21.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:55:21.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.662967 -999.00  +12.80  15.96     97  +12.30 1 3 1 3 1   887    0 0.42 -0.84 ----- 16.0 16.0 288.5 19.2 13.8 -1.0 13.6 -0.8 -999.0 -999.0 13.7 -0.2
2026-04-11T17:55:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:55:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:55:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.662967
2026-04-11T17:55:21.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:55:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:55:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:55:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:55:21.577 [DEBUG] [Thread-174236] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:55:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:55:21.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:54:56', tmtdew=0.036845, humidity=99.7209, cloud=0.0, wind=19.4447, temperature=12.7665, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:54:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:55:21.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:55:21.671 [DEBUG] [Thread-174239] [transport.py] [_log()] starting thread (client mode): 0xae562b30
2026-04-11T17:55:21.671 [DEBUG] [Thread-174239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:55:21.686 [DEBUG] [Thread-174239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:55:21.686 [INFO] [Thread-174239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] client lang: <none>
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] server lang: <none>
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] kex follows: False
2026-04-11T17:55:21.693 [DEBUG] [Thread-174239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:55:21.694 [DEBUG] [Thread-174239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:55:21.694 [DEBUG] [Thread-174239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:55:21.694 [DEBUG] [Thread-174239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:55:21.694 [DEBUG] [Thread-174239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:55:21.694 [DEBUG] [Thread-174239] [transport.py] [_log()] Compression: none
2026-04-11T17:55:21.694 [DEBUG] [Thread-174239] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:55:21.755 [DEBUG] [Thread-174239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:55:21.755 [DEBUG] [Thread-174239] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:55:21.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:55:21.757 [DEBUG] [Thread-174239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:55:21.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:55:21.810 [DEBUG] [Thread-174239] [transport.py] [_log()] userauth is OK
2026-04-11T17:55:21.811 [DEBUG] [Thread-174239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:55:21.811 [DEBUG] [Thread-174239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:55:21.811 [DEBUG] [Thread-174239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:55:21.811 [DEBUG] [Thread-174239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:55:21.835 [INFO] [Thread-174239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:55:21.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:55:21.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:55:22.664 [DEBUG] [Thread-174239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:55:22.664 [DEBUG] [Thread-174239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:55:22.712 [DEBUG] [Thread-174239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:55:22.712 [DEBUG] [Thread-174239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:55:22.721 [DEBUG] [Thread-174239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:55:22.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:55:22.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:55:22.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-04-11T17:55:22.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:55:22.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:55:22.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:55:22.753 [DEBUG] [Thread-174239] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:55:31.796 [DEBUG] [Thread-174241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:39.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:39.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:46.850 [DEBUG] [Thread-174242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:55:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:55:52.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:55:52.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:55:54.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 55, 32), 0.036845, 99.7209, 0.0, 19.5505, 12.7665, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:55:54.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:55:32
2026-04-11T17:55:54.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:55:54.625 [DEBUG] [Thread-174243] [transport.py] [_log()] starting thread (client mode): 0xae5148e0
2026-04-11T17:55:54.625 [DEBUG] [Thread-174243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:55:54.645 [DEBUG] [Thread-174243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:55:54.645 [INFO] [Thread-174243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:55:54.648 [DEBUG] [Thread-174243] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] client lang: <none>
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] server lang: <none>
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] kex follows: False
2026-04-11T17:55:54.649 [DEBUG] [Thread-174243] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:55:54.650 [DEBUG] [Thread-174243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:55:54.650 [DEBUG] [Thread-174243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:55:54.650 [DEBUG] [Thread-174243] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:55:54.650 [DEBUG] [Thread-174243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:55:54.650 [DEBUG] [Thread-174243] [transport.py] [_log()] Compression: none
2026-04-11T17:55:54.650 [DEBUG] [Thread-174243] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:55:54.669 [DEBUG] [Thread-174243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:55:54.670 [DEBUG] [Thread-174243] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:55:54.671 [DEBUG] [Thread-174243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:55:54.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:55:54.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:55:54.673 [DEBUG] [Thread-174243] [transport.py] [_log()] userauth is OK
2026-04-11T17:55:54.673 [DEBUG] [Thread-174243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:55:54.673 [DEBUG] [Thread-174243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:55:54.673 [DEBUG] [Thread-174243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:55:54.673 [DEBUG] [Thread-174243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:55:54.698 [INFO] [Thread-174243] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:55:54.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:55:55.471 [DEBUG] [Thread-174243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:55:55.471 [DEBUG] [Thread-174243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:55:55.472 [DEBUG] [Thread-174243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:55:55.512 [DEBUG] [Thread-174243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:55:55.512 [DEBUG] [Thread-174243] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:55:55.516 [DEBUG] [Thread-174243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:55:55.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:55:55.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:55:55.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:55:55.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:55:55.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:55:55.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:55:55.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:55:55.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:55:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:55:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.663314 -999.00  +12.80  16.02     97  +12.30 1 3 1 3 1   887    0 0.43 -0.76 ----- 16.0 16.0 293.0 19.8 13.8 -0.8 13.7 -0.7 13.3 -1.0 13.7 -0.1
2026-04-11T17:55:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:55:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:55:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.663314
2026-04-11T17:55:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:55:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:55:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:55:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:55:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:55:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:55:32', tmtdew=0.036845, humidity=99.7209, cloud=0.0, wind=19.5505, temperature=12.7665, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:55:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:55:55.547 [DEBUG] [Thread-174243] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:55:55.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:55:55.641 [DEBUG] [Thread-174246] [transport.py] [_log()] starting thread (client mode): 0xae5a6f50
2026-04-11T17:55:55.641 [DEBUG] [Thread-174246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:55:55.655 [DEBUG] [Thread-174246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:55:55.655 [INFO] [Thread-174246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] client lang: <none>
2026-04-11T17:55:55.663 [DEBUG] [Thread-174246] [transport.py] [_log()] server lang: <none>
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] kex follows: False
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] Compression: none
2026-04-11T17:55:55.664 [DEBUG] [Thread-174246] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:55:55.727 [DEBUG] [Thread-174246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:55:55.728 [DEBUG] [Thread-174246] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:55:55.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:55:55.729 [DEBUG] [Thread-174246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:55:55.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:55:55.788 [DEBUG] [Thread-174246] [transport.py] [_log()] userauth is OK
2026-04-11T17:55:55.788 [DEBUG] [Thread-174246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:55:55.788 [DEBUG] [Thread-174246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:55:55.788 [DEBUG] [Thread-174246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:55:55.788 [DEBUG] [Thread-174246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:55:55.807 [INFO] [Thread-174246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:55:55.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:55:55.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:55:56.617 [DEBUG] [Thread-174246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:55:56.617 [DEBUG] [Thread-174246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:55:56.665 [DEBUG] [Thread-174246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:55:56.665 [DEBUG] [Thread-174246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:55:56.674 [DEBUG] [Thread-174246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:55:56.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:55:56.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:55:56.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T17:55:56.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:55:56.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:55:56.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:55:56.710 [DEBUG] [Thread-174246] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:56:01.887 [DEBUG] [Thread-174248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:56:16.942 [DEBUG] [Thread-174249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:56:19.734 [DEBUG] [Thread-174250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:56:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:56:26.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:56:26.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-04-11T17:56:27.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 56, 7), 0.039355, 99.7046, 0.0, 17.7865, 12.7666, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:56:27.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:56:07
2026-04-11T17:56:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:56:28.513 [DEBUG] [Thread-174251] [transport.py] [_log()] starting thread (client mode): 0xae562260
2026-04-11T17:56:28.513 [DEBUG] [Thread-174251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:56:28.533 [DEBUG] [Thread-174251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:56:28.534 [INFO] [Thread-174251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] client lang: <none>
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] server lang: <none>
2026-04-11T17:56:28.537 [DEBUG] [Thread-174251] [transport.py] [_log()] kex follows: False
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] Compression: none
2026-04-11T17:56:28.538 [DEBUG] [Thread-174251] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:56:28.556 [DEBUG] [Thread-174251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:56:28.556 [DEBUG] [Thread-174251] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:56:28.557 [DEBUG] [Thread-174251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:56:28.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:56:28.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:56:28.559 [DEBUG] [Thread-174251] [transport.py] [_log()] userauth is OK
2026-04-11T17:56:28.559 [DEBUG] [Thread-174251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:56:28.559 [DEBUG] [Thread-174251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:56:28.559 [DEBUG] [Thread-174251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:56:28.559 [DEBUG] [Thread-174251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:56:28.596 [INFO] [Thread-174251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:56:28.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:56:29.423 [DEBUG] [Thread-174251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:56:29.423 [DEBUG] [Thread-174251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:56:29.424 [DEBUG] [Thread-174251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:56:29.464 [DEBUG] [Thread-174251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:56:29.464 [DEBUG] [Thread-174251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:56:29.468 [DEBUG] [Thread-174251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:56:29.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:56:29.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:56:29.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:56:29.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:56:29.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:56:29.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:56:29.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:56:29.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:56:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:56:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.663662 -999.00  +12.70  13.36     97  +12.30 1 3 1 3 1   887    0 0.44 -0.44 ----- 13.4 13.4 291.0 18.2 13.8 -0.9 13.6 -0.7 13.3 -0.3 13.7 -0.2
2026-04-11T17:56:29.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:56:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:56:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.663662
2026-04-11T17:56:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:56:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:56:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:56:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:56:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:56:29.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:56:07', tmtdew=0.039355, humidity=99.7046, cloud=0.0, wind=17.7865, temperature=12.7666, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:55:40.397', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:56:29.497 [DEBUG] [Thread-174251] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:56:29.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:56:29.603 [DEBUG] [Thread-174254] [transport.py] [_log()] starting thread (client mode): 0xae51b610
2026-04-11T17:56:29.603 [DEBUG] [Thread-174254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:56:29.617 [DEBUG] [Thread-174254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:56:29.618 [INFO] [Thread-174254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:56:29.625 [DEBUG] [Thread-174254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] client lang: <none>
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] server lang: <none>
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] kex follows: False
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] Compression: none
2026-04-11T17:56:29.626 [DEBUG] [Thread-174254] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:56:29.687 [DEBUG] [Thread-174254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:56:29.687 [DEBUG] [Thread-174254] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:56:29.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:56:29.689 [DEBUG] [Thread-174254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:56:29.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:56:29.746 [DEBUG] [Thread-174254] [transport.py] [_log()] userauth is OK
2026-04-11T17:56:29.747 [DEBUG] [Thread-174254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:56:29.747 [DEBUG] [Thread-174254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:56:29.747 [DEBUG] [Thread-174254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:56:29.747 [DEBUG] [Thread-174254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:56:29.765 [INFO] [Thread-174254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:56:29.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:56:29.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:56:30.596 [DEBUG] [Thread-174254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:56:30.596 [DEBUG] [Thread-174254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:56:30.643 [DEBUG] [Thread-174254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:56:30.644 [DEBUG] [Thread-174254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:56:30.653 [DEBUG] [Thread-174254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:56:30.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:56:30.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-04-11T17:56:30.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-04-11T17:56:30.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:56:30.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:56:30.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:56:30.686 [DEBUG] [Thread-174254] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:56:31.975 [DEBUG] [Thread-174256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:56:40.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:56:40.143 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:56:47.035 [DEBUG] [Thread-174257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:00.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:57:00.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:57:00.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-04-11T17:57:01.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 56, 43), 0.07361, 99.4424, 0.0, 20.8188, 13.2333, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:57:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:56:43
2026-04-11T17:57:02.074 [DEBUG] [Thread-174258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:57:02.496 [DEBUG] [Thread-174259] [transport.py] [_log()] starting thread (client mode): 0xae5633a0
2026-04-11T17:57:02.496 [DEBUG] [Thread-174259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:57:02.515 [DEBUG] [Thread-174259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:57:02.516 [INFO] [Thread-174259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] client lang: <none>
2026-04-11T17:57:02.519 [DEBUG] [Thread-174259] [transport.py] [_log()] server lang: <none>
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] kex follows: False
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] Compression: none
2026-04-11T17:57:02.520 [DEBUG] [Thread-174259] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:57:02.530 [DEBUG] [Thread-174259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:57:02.531 [DEBUG] [Thread-174259] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:57:02.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:57:02.533 [DEBUG] [Thread-174259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:57:02.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:57:02.535 [DEBUG] [Thread-174259] [transport.py] [_log()] userauth is OK
2026-04-11T17:57:02.535 [DEBUG] [Thread-174259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:57:02.535 [DEBUG] [Thread-174259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:57:02.536 [DEBUG] [Thread-174259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:57:02.536 [DEBUG] [Thread-174259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:57:02.556 [INFO] [Thread-174259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:57:02.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:57:03.345 [DEBUG] [Thread-174259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:57:03.346 [DEBUG] [Thread-174259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:57:03.346 [DEBUG] [Thread-174259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:57:03.386 [DEBUG] [Thread-174259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:57:03.386 [DEBUG] [Thread-174259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:57:03.389 [DEBUG] [Thread-174259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:57:03.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:57:03.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:57:03.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:57:03.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:57:03.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:57:03.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:57:03.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:57:03.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:57:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:57:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.664009 -999.00  +12.80  17.67     97  +12.30 1 3 1 3 1   887    0 0.43 -0.48 ----- 17.7 17.7 294.2 19.0 13.9 -1.0 13.7 -0.8 13.3 -0.6 13.7 -0.2
2026-04-11T17:57:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:57:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:57:03.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.664009
2026-04-11T17:57:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:57:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:57:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:57:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:57:03.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:57:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:56:43', tmtdew=0.07361, humidity=99.4424, cloud=0.0, wind=20.8188, temperature=13.2333, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:56:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:57:03.415 [DEBUG] [Thread-174259] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:57:03.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:57:03.505 [DEBUG] [Thread-174262] [transport.py] [_log()] starting thread (client mode): 0xa7953130
2026-04-11T17:57:03.505 [DEBUG] [Thread-174262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:57:03.520 [DEBUG] [Thread-174262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:57:03.520 [INFO] [Thread-174262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:57:03.528 [DEBUG] [Thread-174262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:57:03.528 [DEBUG] [Thread-174262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:57:03.528 [DEBUG] [Thread-174262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:57:03.528 [DEBUG] [Thread-174262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] client lang: <none>
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] server lang: <none>
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] kex follows: False
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] Compression: none
2026-04-11T17:57:03.529 [DEBUG] [Thread-174262] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:57:03.591 [DEBUG] [Thread-174262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:57:03.592 [DEBUG] [Thread-174262] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:57:03.592 [DEBUG] [Thread-174262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:57:03.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:57:03.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:57:03.650 [DEBUG] [Thread-174262] [transport.py] [_log()] userauth is OK
2026-04-11T17:57:03.650 [DEBUG] [Thread-174262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:57:03.650 [DEBUG] [Thread-174262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:57:03.650 [DEBUG] [Thread-174262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:57:03.650 [DEBUG] [Thread-174262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:57:03.664 [INFO] [Thread-174262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:57:03.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:57:03.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:57:04.513 [DEBUG] [Thread-174262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:57:04.513 [DEBUG] [Thread-174262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:57:04.561 [DEBUG] [Thread-174262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:57:04.561 [DEBUG] [Thread-174262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:57:04.571 [DEBUG] [Thread-174262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:57:04.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:57:04.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-04-11T17:57:04.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-04-11T17:57:04.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:57:04.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:57:04.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:57:04.607 [DEBUG] [Thread-174262] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:57:17.113 [DEBUG] [Thread-174264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:19.787 [DEBUG] [Thread-174265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:32.174 [DEBUG] [Thread-174266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:34.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:57:34.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:57:34.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-04-11T17:57:35.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 57, 18), 0.08684, 99.721, 0.0, 18.8096, 12.7499, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:57:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:57:18
2026-04-11T17:57:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:57:36.478 [DEBUG] [Thread-174267] [transport.py] [_log()] starting thread (client mode): 0xae5f1de0
2026-04-11T17:57:36.478 [DEBUG] [Thread-174267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:57:36.497 [DEBUG] [Thread-174267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:57:36.497 [INFO] [Thread-174267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:57:36.501 [DEBUG] [Thread-174267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:57:36.501 [DEBUG] [Thread-174267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] client lang: <none>
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] server lang: <none>
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] kex follows: False
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:57:36.502 [DEBUG] [Thread-174267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:57:36.503 [DEBUG] [Thread-174267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:57:36.503 [DEBUG] [Thread-174267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:57:36.503 [DEBUG] [Thread-174267] [transport.py] [_log()] Compression: none
2026-04-11T17:57:36.503 [DEBUG] [Thread-174267] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:57:36.521 [DEBUG] [Thread-174267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:57:36.521 [DEBUG] [Thread-174267] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:57:36.522 [DEBUG] [Thread-174267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:57:36.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:57:36.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:57:36.524 [DEBUG] [Thread-174267] [transport.py] [_log()] userauth is OK
2026-04-11T17:57:36.524 [DEBUG] [Thread-174267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:57:36.524 [DEBUG] [Thread-174267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:57:36.524 [DEBUG] [Thread-174267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:57:36.525 [DEBUG] [Thread-174267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:57:36.560 [INFO] [Thread-174267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:57:36.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:57:37.345 [DEBUG] [Thread-174267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:57:37.345 [DEBUG] [Thread-174267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:57:37.346 [DEBUG] [Thread-174267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:57:37.387 [DEBUG] [Thread-174267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:57:37.387 [DEBUG] [Thread-174267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:57:37.390 [DEBUG] [Thread-174267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:57:37.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:57:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:57:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:57:37.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:57:37.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:57:37.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:57:37.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:57:37.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:57:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:57:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.664356 -999.00  +12.70  14.88     97  +12.30 1 3 1 3 1   887    0 0.44 -0.50 ----- 14.9 14.9 287.0 17.8 13.8 -1.0 13.7 -0.8 13.3 -0.6 13.7 -0.2
2026-04-11T17:57:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:57:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:57:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.664356
2026-04-11T17:57:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:57:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:57:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:57:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:57:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:57:37.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:57:18', tmtdew=0.08684, humidity=99.721, cloud=0.0, wind=18.8096, temperature=12.7499, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:56:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:57:37.418 [DEBUG] [Thread-174267] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:57:37.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:57:37.511 [DEBUG] [Thread-174270] [transport.py] [_log()] starting thread (client mode): 0xae518b80
2026-04-11T17:57:37.511 [DEBUG] [Thread-174270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:57:37.526 [DEBUG] [Thread-174270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:57:37.526 [INFO] [Thread-174270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:57:37.533 [DEBUG] [Thread-174270] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:57:37.534 [DEBUG] [Thread-174270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] client lang: <none>
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] server lang: <none>
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] kex follows: False
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:57:37.535 [DEBUG] [Thread-174270] [transport.py] [_log()] Compression: none
2026-04-11T17:57:37.536 [DEBUG] [Thread-174270] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:57:37.591 [DEBUG] [Thread-174270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:57:37.592 [DEBUG] [Thread-174270] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:57:37.593 [DEBUG] [Thread-174270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:57:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:57:37.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:57:37.651 [DEBUG] [Thread-174270] [transport.py] [_log()] userauth is OK
2026-04-11T17:57:37.651 [DEBUG] [Thread-174270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:57:37.652 [DEBUG] [Thread-174270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:57:37.652 [DEBUG] [Thread-174270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:57:37.652 [DEBUG] [Thread-174270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:57:37.670 [INFO] [Thread-174270] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:57:37.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:57:37.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:57:38.496 [DEBUG] [Thread-174270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:57:38.497 [DEBUG] [Thread-174270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:57:38.544 [DEBUG] [Thread-174270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:57:38.544 [DEBUG] [Thread-174270] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:57:38.553 [DEBUG] [Thread-174270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:57:38.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:57:38.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T17:57:38.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-04-11T17:57:38.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:57:38.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:57:38.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:57:38.590 [DEBUG] [Thread-174270] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:57:40.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:40.285 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:57:47.212 [DEBUG] [Thread-174272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:02.265 [DEBUG] [Thread-174273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:08.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:58:08.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:58:08.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:58:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 57, 54), 0.07879, 99.4088, 0.0, 19.6546, 13.1999, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:58:09.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:57:54
2026-04-11T17:58:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:58:10.476 [DEBUG] [Thread-174274] [transport.py] [_log()] starting thread (client mode): 0xae5092d0
2026-04-11T17:58:10.476 [DEBUG] [Thread-174274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:58:10.497 [DEBUG] [Thread-174274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:58:10.498 [INFO] [Thread-174274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] client lang: <none>
2026-04-11T17:58:10.502 [DEBUG] [Thread-174274] [transport.py] [_log()] server lang: <none>
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] kex follows: False
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] Compression: none
2026-04-11T17:58:10.503 [DEBUG] [Thread-174274] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:58:10.521 [DEBUG] [Thread-174274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:58:10.521 [DEBUG] [Thread-174274] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:58:10.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:58:10.522 [DEBUG] [Thread-174274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:58:10.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:58:10.526 [DEBUG] [Thread-174274] [transport.py] [_log()] userauth is OK
2026-04-11T17:58:10.526 [DEBUG] [Thread-174274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:58:10.526 [DEBUG] [Thread-174274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:58:10.526 [DEBUG] [Thread-174274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:58:10.527 [DEBUG] [Thread-174274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:58:10.564 [INFO] [Thread-174274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:58:10.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:58:11.380 [DEBUG] [Thread-174274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:58:11.380 [DEBUG] [Thread-174274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:58:11.380 [DEBUG] [Thread-174274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:58:11.421 [DEBUG] [Thread-174274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:58:11.421 [DEBUG] [Thread-174274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:58:11.425 [DEBUG] [Thread-174274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:58:11.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:58:11.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:58:11.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:58:11.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:58:11.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:58:11.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:58:11.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:58:11.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:58:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:58:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.664703 -999.00  +12.80  13.18     97  +12.30 1 3 1 3 1   887    0 0.43 -0.74 ----- 13.2 13.2 289.3 18.0 13.8 -1.1 13.7 -0.9 13.3 -0.7 13.7 -0.5
2026-04-11T17:58:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:58:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:58:11.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.664703
2026-04-11T17:58:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:58:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:58:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:58:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:58:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:58:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:57:54', tmtdew=0.07879, humidity=99.4088, cloud=0.0, wind=19.6546, temperature=13.1999, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:57:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:58:11.451 [DEBUG] [Thread-174274] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:58:11.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:58:11.549 [DEBUG] [Thread-174277] [transport.py] [_log()] starting thread (client mode): 0xb0febd90
2026-04-11T17:58:11.549 [DEBUG] [Thread-174277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:58:11.567 [DEBUG] [Thread-174277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:58:11.567 [INFO] [Thread-174277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:58:11.579 [DEBUG] [Thread-174277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] client lang: <none>
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] server lang: <none>
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] kex follows: False
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:58:11.580 [DEBUG] [Thread-174277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:58:11.581 [DEBUG] [Thread-174277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:58:11.581 [DEBUG] [Thread-174277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:58:11.581 [DEBUG] [Thread-174277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:58:11.581 [DEBUG] [Thread-174277] [transport.py] [_log()] Compression: none
2026-04-11T17:58:11.581 [DEBUG] [Thread-174277] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:58:11.634 [DEBUG] [Thread-174277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:58:11.635 [DEBUG] [Thread-174277] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:58:11.635 [DEBUG] [Thread-174277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:58:11.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:58:11.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:58:11.693 [DEBUG] [Thread-174277] [transport.py] [_log()] userauth is OK
2026-04-11T17:58:11.694 [DEBUG] [Thread-174277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:58:11.694 [DEBUG] [Thread-174277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:58:11.694 [DEBUG] [Thread-174277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:58:11.694 [DEBUG] [Thread-174277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:58:11.714 [INFO] [Thread-174277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:58:11.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:58:11.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:58:12.564 [DEBUG] [Thread-174277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:58:12.564 [DEBUG] [Thread-174277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:58:12.612 [DEBUG] [Thread-174277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:58:12.612 [DEBUG] [Thread-174277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:58:12.622 [DEBUG] [Thread-174277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:58:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:58:12.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-04-11T17:58:12.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-04-11T17:58:12.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:58:12.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:58:12.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:58:12.659 [DEBUG] [Thread-174277] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:58:17.305 [DEBUG] [Thread-174279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:19.837 [DEBUG] [Thread-174280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:32.355 [DEBUG] [Thread-174281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:40.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:40.426 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:58:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:58:42.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:58:42.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:58:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 58, 29), 0.0868, 99.7213, 0.0, 20.2216, 12.7501, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:58:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:58:29
2026-04-11T17:58:44.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:58:44.491 [DEBUG] [Thread-174282] [transport.py] [_log()] starting thread (client mode): 0xae514e20
2026-04-11T17:58:44.491 [DEBUG] [Thread-174282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:58:44.511 [DEBUG] [Thread-174282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:58:44.511 [INFO] [Thread-174282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] client lang: <none>
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] server lang: <none>
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] kex follows: False
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] Compression: none
2026-04-11T17:58:44.515 [DEBUG] [Thread-174282] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:58:44.533 [DEBUG] [Thread-174282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:58:44.533 [DEBUG] [Thread-174282] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:58:44.534 [DEBUG] [Thread-174282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:58:44.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:58:44.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:58:44.536 [DEBUG] [Thread-174282] [transport.py] [_log()] userauth is OK
2026-04-11T17:58:44.537 [DEBUG] [Thread-174282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:58:44.537 [DEBUG] [Thread-174282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:58:44.537 [DEBUG] [Thread-174282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:58:44.537 [DEBUG] [Thread-174282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:58:44.561 [INFO] [Thread-174282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:58:44.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:58:45.291 [DEBUG] [Thread-174282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:58:45.291 [DEBUG] [Thread-174282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:58:45.292 [DEBUG] [Thread-174282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:58:45.332 [DEBUG] [Thread-174282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:58:45.333 [DEBUG] [Thread-174282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:58:45.336 [DEBUG] [Thread-174282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:58:45.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:58:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:58:45.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:58:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:58:45.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:58:45.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:58:45.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:58:45.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:58:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:58:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.665398 -999.00  +12.70  19.56     97  +12.20 1 3 1 3 1   887    0 0.43 -0.49 ----- 19.6 19.6 281.6 23.1 13.8 -1.2 13.7 -0.7 13.2 -0.6 13.7 -0.3
2026-04-11T17:58:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:58:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:58:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.665398
2026-04-11T17:58:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:58:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:58:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:58:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:58:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:58:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:58:29', tmtdew=0.0868, humidity=99.7213, cloud=0.0, wind=20.2216, temperature=12.7501, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:58:10.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:58:45.363 [DEBUG] [Thread-174282] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:58:45.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:58:45.469 [DEBUG] [Thread-174285] [transport.py] [_log()] starting thread (client mode): 0xae537400
2026-04-11T17:58:45.469 [DEBUG] [Thread-174285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:58:45.484 [DEBUG] [Thread-174285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:58:45.484 [INFO] [Thread-174285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] client lang: <none>
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] server lang: <none>
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] kex follows: False
2026-04-11T17:58:45.492 [DEBUG] [Thread-174285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:58:45.493 [DEBUG] [Thread-174285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:58:45.493 [DEBUG] [Thread-174285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:58:45.493 [DEBUG] [Thread-174285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:58:45.493 [DEBUG] [Thread-174285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:58:45.493 [DEBUG] [Thread-174285] [transport.py] [_log()] Compression: none
2026-04-11T17:58:45.493 [DEBUG] [Thread-174285] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:58:45.550 [DEBUG] [Thread-174285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:58:45.551 [DEBUG] [Thread-174285] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:58:45.551 [DEBUG] [Thread-174285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:58:45.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:58:45.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:58:45.607 [DEBUG] [Thread-174285] [transport.py] [_log()] userauth is OK
2026-04-11T17:58:45.607 [DEBUG] [Thread-174285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:58:45.607 [DEBUG] [Thread-174285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:58:45.607 [DEBUG] [Thread-174285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:58:45.607 [DEBUG] [Thread-174285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:58:45.626 [INFO] [Thread-174285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:58:45.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:58:45.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:58:46.450 [DEBUG] [Thread-174285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:58:46.450 [DEBUG] [Thread-174285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:58:46.499 [DEBUG] [Thread-174285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:58:46.499 [DEBUG] [Thread-174285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:58:46.508 [DEBUG] [Thread-174285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:58:46.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:58:46.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-04-11T17:58:46.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-04-11T17:58:46.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:58:46.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:58:46.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:58:46.545 [DEBUG] [Thread-174285] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:58:47.388 [DEBUG] [Thread-174287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:02.443 [DEBUG] [Thread-174288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:16.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:59:16.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:59:16.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T17:59:17.483 [DEBUG] [Thread-174289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:17.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 59, 4), 0.091905, 99.6881, 0.0, 21.2976, 12.7501, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:59:17.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:59:04
2026-04-11T17:59:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:59:18.341 [DEBUG] [Thread-174290] [transport.py] [_log()] starting thread (client mode): 0xae509a20
2026-04-11T17:59:18.341 [DEBUG] [Thread-174290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:59:18.362 [DEBUG] [Thread-174290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:59:18.362 [INFO] [Thread-174290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:59:18.365 [DEBUG] [Thread-174290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] client lang: <none>
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] server lang: <none>
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] kex follows: False
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] Compression: none
2026-04-11T17:59:18.366 [DEBUG] [Thread-174290] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:59:18.384 [DEBUG] [Thread-174290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:59:18.385 [DEBUG] [Thread-174290] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:59:18.386 [DEBUG] [Thread-174290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:59:18.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:59:18.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:59:18.388 [DEBUG] [Thread-174290] [transport.py] [_log()] userauth is OK
2026-04-11T17:59:18.389 [DEBUG] [Thread-174290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:59:18.389 [DEBUG] [Thread-174290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:59:18.389 [DEBUG] [Thread-174290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:59:18.389 [DEBUG] [Thread-174290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:59:18.407 [INFO] [Thread-174290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:59:18.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:59:19.118 [DEBUG] [Thread-174290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:59:19.119 [DEBUG] [Thread-174290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:59:19.119 [DEBUG] [Thread-174290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:59:19.159 [DEBUG] [Thread-174290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:59:19.160 [DEBUG] [Thread-174290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:59:19.163 [DEBUG] [Thread-174290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:59:19.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:59:19.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:59:19.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:59:19.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:59:19.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:59:19.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:59:19.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:59:19.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:59:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:59:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.665745 -999.00  +12.70  13.51     97  +12.30 1 3 1 3 1   887    0 0.42 -0.70 ----- 13.5 13.5 297.0 20.9 13.8 -1.2 13.6 -0.7 13.2 -0.7 13.7 -0.2
2026-04-11T17:59:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:59:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:59:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.665745
2026-04-11T17:59:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:59:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:59:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:59:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:59:19.196 [DEBUG] [Thread-174290] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:59:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:59:19.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:59:04', tmtdew=0.091905, humidity=99.6881, cloud=0.0, wind=21.2976, temperature=12.7501, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:58:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:59:19.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T17:59:19.294 [DEBUG] [Thread-174293] [transport.py] [_log()] starting thread (client mode): 0xae50aa10
2026-04-11T17:59:19.295 [DEBUG] [Thread-174293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:59:19.310 [DEBUG] [Thread-174293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T17:59:19.311 [INFO] [Thread-174293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T17:59:19.319 [DEBUG] [Thread-174293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:59:19.319 [DEBUG] [Thread-174293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T17:59:19.319 [DEBUG] [Thread-174293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] client lang: <none>
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] server lang: <none>
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] kex follows: False
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] Compression: none
2026-04-11T17:59:19.320 [DEBUG] [Thread-174293] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:59:19.379 [DEBUG] [Thread-174293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:59:19.380 [DEBUG] [Thread-174293] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:59:19.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T17:59:19.381 [DEBUG] [Thread-174293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T17:59:19.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:59:19.439 [DEBUG] [Thread-174293] [transport.py] [_log()] userauth is OK
2026-04-11T17:59:19.439 [DEBUG] [Thread-174293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:59:19.439 [DEBUG] [Thread-174293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:59:19.439 [DEBUG] [Thread-174293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T17:59:19.439 [DEBUG] [Thread-174293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:59:19.460 [INFO] [Thread-174293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:59:19.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T17:59:19.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:59:19.893 [DEBUG] [Thread-174295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:20.311 [DEBUG] [Thread-174293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:59:20.312 [DEBUG] [Thread-174293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:59:20.359 [DEBUG] [Thread-174293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:59:20.359 [DEBUG] [Thread-174293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:59:20.369 [DEBUG] [Thread-174293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:59:20.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:59:20.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-04-11T17:59:20.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-04-11T17:59:20.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:59:20.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:59:20.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:59:20.406 [DEBUG] [Thread-174293] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:59:32.520 [DEBUG] [Thread-174296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:40.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:40.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:47.571 [DEBUG] [Thread-174297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T17:59:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T17:59:50.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T17:59:50.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-04-11T17:59:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 17, 59, 39), 0.0941, 99.3095, 0.0, 22.6886, 13.1668, 2, 2, 2, 2, 0, 0),)
2026-04-11T17:59:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 17:59:39
2026-04-11T17:59:52.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T17:59:52.265 [DEBUG] [Thread-174298] [transport.py] [_log()] starting thread (client mode): 0xae5f0b20
2026-04-11T17:59:52.265 [DEBUG] [Thread-174298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T17:59:52.286 [DEBUG] [Thread-174298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T17:59:52.286 [INFO] [Thread-174298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T17:59:52.289 [DEBUG] [Thread-174298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T17:59:52.289 [DEBUG] [Thread-174298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] client lang: <none>
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] server lang: <none>
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] kex follows: False
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] Compression: none
2026-04-11T17:59:52.290 [DEBUG] [Thread-174298] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T17:59:52.307 [DEBUG] [Thread-174298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T17:59:52.308 [DEBUG] [Thread-174298] [transport.py] [_log()] Switch to new keys ...
2026-04-11T17:59:52.308 [DEBUG] [Thread-174298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T17:59:52.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T17:59:52.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T17:59:52.310 [DEBUG] [Thread-174298] [transport.py] [_log()] userauth is OK
2026-04-11T17:59:52.310 [DEBUG] [Thread-174298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T17:59:52.310 [DEBUG] [Thread-174298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T17:59:52.310 [DEBUG] [Thread-174298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T17:59:52.311 [DEBUG] [Thread-174298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T17:59:52.329 [INFO] [Thread-174298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T17:59:52.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T17:59:53.084 [DEBUG] [Thread-174298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T17:59:53.085 [DEBUG] [Thread-174298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T17:59:53.085 [DEBUG] [Thread-174298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T17:59:53.126 [DEBUG] [Thread-174298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T17:59:53.126 [DEBUG] [Thread-174298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T17:59:53.129 [DEBUG] [Thread-174298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T17:59:53.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T17:59:53.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T17:59:53.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T17:59:53.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T17:59:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T17:59:53.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T17:59:53.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T17:59:53.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T17:59:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T17:59:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.666439 -999.00  +12.60  17.53     97  +12.20 1 3 1 3 1   887    0 0.42 -0.89 ----- 17.5 17.5 277.8 23.2 13.7 -1.1 13.6 -0.7 13.2 -0.5 13.6 -0.2
2026-04-11T17:59:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T17:59:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T17:59:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.666439
2026-04-11T17:59:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T17:59:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T17:59:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T17:59:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T17:59:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T17:59:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T17:59:39', tmtdew=0.0941, humidity=99.3095, cloud=0.0, wind=22.6886, temperature=13.1668, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T15:59:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T17:59:53.156 [DEBUG] [Thread-174298] [transport.py] [_log()] EOF in transport thread
2026-04-11T17:59:53.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:00:02.610 [DEBUG] [Thread-174301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:00:17.665 [DEBUG] [Thread-174302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:00:19.952 [DEBUG] [Thread-174303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:00:32.700 [DEBUG] [Thread-174304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:00:40.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:00:40.724 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:00:47.733 [DEBUG] [Thread-174305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:02.769 [DEBUG] [Thread-174306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:17.808 [DEBUG] [Thread-174307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:20.005 [DEBUG] [Thread-174308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:32.845 [DEBUG] [Thread-174309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:40.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:40.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:01:47.878 [DEBUG] [Thread-174310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:02.917 [DEBUG] [Thread-174311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:06.591 [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-04-11T18:02:17.954 [DEBUG] [Thread-174312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:20.079 [DEBUG] [Thread-174313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:32.990 [DEBUG] [Thread-174314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:36.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:02:36.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:02:36.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-04-11T18:02:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 2, 2), 0.084265, 99.7377, 0.0, 19.5858, 12.7831, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:02:37.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:02:02
2026-04-11T18:02:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:02:38.507 [DEBUG] [Thread-174315] [transport.py] [_log()] starting thread (client mode): 0xb0fea650
2026-04-11T18:02:38.507 [DEBUG] [Thread-174315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:02:38.529 [DEBUG] [Thread-174315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:02:38.529 [INFO] [Thread-174315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] client lang: <none>
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] server lang: <none>
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] kex follows: False
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] Compression: none
2026-04-11T18:02:38.532 [DEBUG] [Thread-174315] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:02:38.549 [DEBUG] [Thread-174315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:02:38.549 [DEBUG] [Thread-174315] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:02:38.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:02:38.550 [DEBUG] [Thread-174315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:02:38.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:02:38.552 [DEBUG] [Thread-174315] [transport.py] [_log()] userauth is OK
2026-04-11T18:02:38.552 [DEBUG] [Thread-174315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:02:38.552 [DEBUG] [Thread-174315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:02:38.552 [DEBUG] [Thread-174315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:02:38.552 [DEBUG] [Thread-174315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:02:38.587 [INFO] [Thread-174315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:02:38.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:02:39.337 [DEBUG] [Thread-174315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:02:39.338 [DEBUG] [Thread-174315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:02:39.338 [DEBUG] [Thread-174315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:02:39.379 [DEBUG] [Thread-174315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:02:39.379 [DEBUG] [Thread-174315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:02:39.382 [DEBUG] [Thread-174315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:02:39.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:02:39.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:02:39.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:02:39.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:02:39.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:02:39.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:02:39.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:02:39.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:02:39.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:02:39.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.667828 -999.00  +12.70  17.38     97  +12.30 1 3 1 3 1   887    0 0.40 -1.38 ----- 17.4 17.4 288.4 23.5 13.7 -1.1 13.5 -0.3 13.2 -1.1 13.6 -0.3
2026-04-11T18:02:39.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:02:39.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:02:39.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.667828
2026-04-11T18:02:39.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:02:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:02:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:02:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:02:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:02:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:02:02', tmtdew=0.084265, humidity=99.7377, cloud=0.0, wind=19.5858, temperature=12.7831, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:01:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:02:39.405 [DEBUG] [Thread-174315] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:02:39.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:02:39.499 [DEBUG] [Thread-174318] [transport.py] [_log()] starting thread (client mode): 0xae5f3850
2026-04-11T18:02:39.499 [DEBUG] [Thread-174318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:02:39.514 [DEBUG] [Thread-174318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:02:39.515 [INFO] [Thread-174318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:02:39.523 [DEBUG] [Thread-174318] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] client lang: <none>
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] server lang: <none>
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] kex follows: False
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:02:39.524 [DEBUG] [Thread-174318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:02:39.525 [DEBUG] [Thread-174318] [transport.py] [_log()] Compression: none
2026-04-11T18:02:39.525 [DEBUG] [Thread-174318] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:02:39.584 [DEBUG] [Thread-174318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:02:39.584 [DEBUG] [Thread-174318] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:02:39.585 [DEBUG] [Thread-174318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:02:39.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:02:39.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:02:39.642 [DEBUG] [Thread-174318] [transport.py] [_log()] userauth is OK
2026-04-11T18:02:39.643 [DEBUG] [Thread-174318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:02:39.643 [DEBUG] [Thread-174318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:02:39.643 [DEBUG] [Thread-174318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:02:39.643 [DEBUG] [Thread-174318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:02:39.671 [INFO] [Thread-174318] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:02:39.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:02:39.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:02:40.503 [DEBUG] [Thread-174318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:02:40.504 [DEBUG] [Thread-174318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:02:40.551 [DEBUG] [Thread-174318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:02:40.551 [DEBUG] [Thread-174318] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:02:40.560 [DEBUG] [Thread-174318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:02:40.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:02:40.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:02:40.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:02:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:02:40.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:02:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:02:40.597 [DEBUG] [Thread-174318] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:02:41.005 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:41.006 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:02:48.026 [DEBUG] [Thread-174320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:03.075 [DEBUG] [Thread-174321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:10.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:03:10.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:03:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:03:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 2, 37), 0.06335, 99.5089, 0.0, 22.6181, 13.2666, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:03:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:02:37
2026-04-11T18:03:12.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:03:12.455 [DEBUG] [Thread-174322] [transport.py] [_log()] starting thread (client mode): 0xae509570
2026-04-11T18:03:12.455 [DEBUG] [Thread-174322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:03:12.473 [DEBUG] [Thread-174322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:03:12.473 [INFO] [Thread-174322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] client lang: <none>
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] server lang: <none>
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] kex follows: False
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] Compression: none
2026-04-11T18:03:12.475 [DEBUG] [Thread-174322] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:03:12.491 [DEBUG] [Thread-174322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:03:12.492 [DEBUG] [Thread-174322] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:03:12.492 [DEBUG] [Thread-174322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:03:12.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:03:12.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:03:12.495 [DEBUG] [Thread-174322] [transport.py] [_log()] userauth is OK
2026-04-11T18:03:12.495 [DEBUG] [Thread-174322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:03:12.495 [DEBUG] [Thread-174322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:03:12.495 [DEBUG] [Thread-174322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:03:12.495 [DEBUG] [Thread-174322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:03:12.510 [INFO] [Thread-174322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:03:12.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:03:13.148 [DEBUG] [Thread-174322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:03:13.149 [DEBUG] [Thread-174322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:03:13.149 [DEBUG] [Thread-174322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:03:13.190 [DEBUG] [Thread-174322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:03:13.190 [DEBUG] [Thread-174322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:03:13.193 [DEBUG] [Thread-174322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:03:13.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:03:13.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:03:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:03:13.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:03:13.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:03:13.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:03:13.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:03:13.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:03:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:03:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.668523 -999.00  +12.60  18.18     97  +12.20 1 3 1 3 1   887    0 0.39 -1.50 ----- 18.2 18.2 278.0 22.0 13.7 -1.0 13.5 -0.3 13.2 -0.9 13.6 -0.5
2026-04-11T18:03:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:03:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:03:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.668523
2026-04-11T18:03:13.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:03:13.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:03:13.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:03:13.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:03:13.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:03:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:02:37', tmtdew=0.06335, humidity=99.5089, cloud=0.0, wind=22.6181, temperature=13.2666, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:02:40.387', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:03:13.211 [DEBUG] [Thread-174322] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:03:13.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:03:13.303 [DEBUG] [Thread-174325] [transport.py] [_log()] starting thread (client mode): 0xae5341c0
2026-04-11T18:03:13.303 [DEBUG] [Thread-174325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:03:13.318 [DEBUG] [Thread-174325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:03:13.318 [INFO] [Thread-174325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:03:13.326 [DEBUG] [Thread-174325] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:03:13.326 [DEBUG] [Thread-174325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:03:13.326 [DEBUG] [Thread-174325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:03:13.326 [DEBUG] [Thread-174325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:13.326 [DEBUG] [Thread-174325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] client lang: <none>
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] server lang: <none>
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] kex follows: False
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] Compression: none
2026-04-11T18:03:13.327 [DEBUG] [Thread-174325] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:03:13.386 [DEBUG] [Thread-174325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:03:13.386 [DEBUG] [Thread-174325] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:03:13.387 [DEBUG] [Thread-174325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:03:13.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:03:13.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:03:13.443 [DEBUG] [Thread-174325] [transport.py] [_log()] userauth is OK
2026-04-11T18:03:13.443 [DEBUG] [Thread-174325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:03:13.444 [DEBUG] [Thread-174325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:03:13.444 [DEBUG] [Thread-174325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:03:13.444 [DEBUG] [Thread-174325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:03:13.463 [INFO] [Thread-174325] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:03:13.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:03:13.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:03:14.318 [DEBUG] [Thread-174325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:03:14.318 [DEBUG] [Thread-174325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:03:14.366 [DEBUG] [Thread-174325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:03:14.366 [DEBUG] [Thread-174325] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:03:14.376 [DEBUG] [Thread-174325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:03:14.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:03:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:03:14.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-04-11T18:03:14.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:03:14.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:03:14.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:03:14.412 [DEBUG] [Thread-174325] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:03:18.112 [DEBUG] [Thread-174327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:20.129 [DEBUG] [Thread-174328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:33.159 [DEBUG] [Thread-174329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:41.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:41.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:03:44.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:03:44.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:03:44.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-04-11T18:03:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 3, 13), 0.084225, 99.7379, 0.0, 21.0859, 12.7999, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:03:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:03:13
2026-04-11T18:03:46.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:03:46.240 [DEBUG] [Thread-174330] [transport.py] [_log()] starting thread (client mode): 0xae5f3cd0
2026-04-11T18:03:46.241 [DEBUG] [Thread-174330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:03:46.260 [DEBUG] [Thread-174330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:03:46.260 [INFO] [Thread-174330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] client lang: <none>
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] server lang: <none>
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] kex follows: False
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] Compression: none
2026-04-11T18:03:46.262 [DEBUG] [Thread-174330] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:03:46.272 [DEBUG] [Thread-174330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:03:46.273 [DEBUG] [Thread-174330] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:03:46.273 [DEBUG] [Thread-174330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:03:46.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:03:46.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:03:46.275 [DEBUG] [Thread-174330] [transport.py] [_log()] userauth is OK
2026-04-11T18:03:46.275 [DEBUG] [Thread-174330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:03:46.275 [DEBUG] [Thread-174330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:03:46.275 [DEBUG] [Thread-174330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:03:46.276 [DEBUG] [Thread-174330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:03:46.300 [INFO] [Thread-174330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:03:46.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:03:46.868 [DEBUG] [Thread-174330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:03:46.868 [DEBUG] [Thread-174330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:03:46.868 [DEBUG] [Thread-174330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:03:46.909 [DEBUG] [Thread-174330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:03:46.909 [DEBUG] [Thread-174330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:03:46.913 [DEBUG] [Thread-174330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:03:46.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:03:46.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:03:46.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:03:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:03:46.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:03:46.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:03:46.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:03:46.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:03:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:03:46.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.669217 -999.00  +12.60  17.27     97  +12.20 1 3 1 3 1   887    0 0.37 -2.33 ----- 17.3 17.3 273.2 24.5 13.7 -0.8 13.5 -0.2 13.2 -0.8 13.6 -0.4
2026-04-11T18:03:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:03:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:03:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.669217
2026-04-11T18:03:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:03:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:03:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:03:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:03:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:03:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:03:13', tmtdew=0.084225, humidity=99.7379, cloud=0.0, wind=21.0859, temperature=12.7999, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:03:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:03:46.938 [DEBUG] [Thread-174330] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:03:47.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:03:47.042 [DEBUG] [Thread-174333] [transport.py] [_log()] starting thread (client mode): 0xae5175b0
2026-04-11T18:03:47.042 [DEBUG] [Thread-174333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:03:47.057 [DEBUG] [Thread-174333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:03:47.057 [INFO] [Thread-174333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:03:47.064 [DEBUG] [Thread-174333] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:03:47.064 [DEBUG] [Thread-174333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:03:47.064 [DEBUG] [Thread-174333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:03:47.064 [DEBUG] [Thread-174333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] client lang: <none>
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] server lang: <none>
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] kex follows: False
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] Compression: none
2026-04-11T18:03:47.065 [DEBUG] [Thread-174333] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:03:47.122 [DEBUG] [Thread-174333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:03:47.123 [DEBUG] [Thread-174333] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:03:47.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:03:47.124 [DEBUG] [Thread-174333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:03:47.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:03:47.181 [DEBUG] [Thread-174333] [transport.py] [_log()] userauth is OK
2026-04-11T18:03:47.182 [DEBUG] [Thread-174333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:03:47.182 [DEBUG] [Thread-174333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:03:47.182 [DEBUG] [Thread-174333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:03:47.182 [DEBUG] [Thread-174333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:03:47.198 [INFO] [Thread-174333] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:03:47.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:03:47.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:03:48.021 [DEBUG] [Thread-174333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:03:48.022 [DEBUG] [Thread-174333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:03:48.074 [DEBUG] [Thread-174333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:03:48.074 [DEBUG] [Thread-174333] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:03:48.083 [DEBUG] [Thread-174333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:03:48.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:03:48.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-04-11T18:03:48.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-04-11T18:03:48.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:03:48.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:03:48.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:03:48.116 [DEBUG] [Thread-174333] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:03:48.192 [DEBUG] [Thread-174335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:03.243 [DEBUG] [Thread-174336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:04:18.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:04:18.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-04-11T18:04:18.281 [DEBUG] [Thread-174337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:19.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 3, 48), 0.0684, 99.4762, 0.0, 17.7494, 13.2337, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:04:19.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:03:48
2026-04-11T18:04:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:04:20.021 [DEBUG] [Thread-174338] [transport.py] [_log()] starting thread (client mode): 0xae537400
2026-04-11T18:04:20.021 [DEBUG] [Thread-174338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:04:20.035 [DEBUG] [Thread-174338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:04:20.035 [INFO] [Thread-174338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] client lang: <none>
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] server lang: <none>
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] kex follows: False
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] Compression: none
2026-04-11T18:04:20.037 [DEBUG] [Thread-174338] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:04:20.050 [DEBUG] [Thread-174338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:04:20.050 [DEBUG] [Thread-174338] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:04:20.050 [DEBUG] [Thread-174338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:04:20.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:04:20.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:04:20.052 [DEBUG] [Thread-174338] [transport.py] [_log()] userauth is OK
2026-04-11T18:04:20.052 [DEBUG] [Thread-174338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:04:20.052 [DEBUG] [Thread-174338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:04:20.052 [DEBUG] [Thread-174338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:04:20.052 [DEBUG] [Thread-174338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:04:20.069 [INFO] [Thread-174338] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:04:20.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:04:20.183 [DEBUG] [Thread-174340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:20.708 [DEBUG] [Thread-174338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:04:20.708 [DEBUG] [Thread-174338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:04:20.709 [DEBUG] [Thread-174338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:04:20.749 [DEBUG] [Thread-174338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:04:20.749 [DEBUG] [Thread-174338] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:04:20.751 [DEBUG] [Thread-174338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:04:20.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:04:20.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:04:20.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:04:20.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:04:20.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:04:20.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:04:20.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.669564 -999.00  +12.60  19.07     97  +12.20 1 3 1 3 1   887    0 0.36 -2.13 ----- 19.1 19.1 283.4 24.7 13.6 -0.7 13.4 -0.3 13.1 -0.9 13.6 -0.7
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.669564
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:04:20.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:03:48', tmtdew=0.0684, humidity=99.4762, cloud=0.0, wind=17.7494, temperature=13.2337, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:04:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:04:20.769 [DEBUG] [Thread-174338] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:04:20.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:04:20.851 [DEBUG] [Thread-174342] [transport.py] [_log()] starting thread (client mode): 0xae5629e0
2026-04-11T18:04:20.851 [DEBUG] [Thread-174342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:04:20.866 [DEBUG] [Thread-174342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:04:20.866 [INFO] [Thread-174342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:04:20.873 [DEBUG] [Thread-174342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:04:20.873 [DEBUG] [Thread-174342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:04:20.873 [DEBUG] [Thread-174342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:04:20.873 [DEBUG] [Thread-174342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] client lang: <none>
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] server lang: <none>
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] kex follows: False
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] Compression: none
2026-04-11T18:04:20.874 [DEBUG] [Thread-174342] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:04:20.935 [DEBUG] [Thread-174342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:04:20.936 [DEBUG] [Thread-174342] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:04:20.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:04:20.937 [DEBUG] [Thread-174342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:04:20.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:04:20.995 [DEBUG] [Thread-174342] [transport.py] [_log()] userauth is OK
2026-04-11T18:04:20.995 [DEBUG] [Thread-174342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:04:20.995 [DEBUG] [Thread-174342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:04:20.995 [DEBUG] [Thread-174342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:04:20.995 [DEBUG] [Thread-174342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:04:21.014 [INFO] [Thread-174342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:04:21.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:04:21.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:04:21.832 [DEBUG] [Thread-174342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:04:21.832 [DEBUG] [Thread-174342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:04:21.880 [DEBUG] [Thread-174342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:04:21.880 [DEBUG] [Thread-174342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:04:21.889 [DEBUG] [Thread-174342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:04:21.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:04:21.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-04-11T18:04:21.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-04-11T18:04:21.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:04:21.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:04:21.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:04:21.926 [DEBUG] [Thread-174342] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:04:33.317 [DEBUG] [Thread-174344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:41.288 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:41.289 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:48.374 [DEBUG] [Thread-174345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:04:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:04:51.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:04:51.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-04-11T18:04:53.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 4, 24), 0.0842, 99.7381, 0.0, 19.3219, 12.7834, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:04:53.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:04:24
2026-04-11T18:04:53.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:04:53.774 [DEBUG] [Thread-174346] [transport.py] [_log()] starting thread (client mode): 0xae561b40
2026-04-11T18:04:53.774 [DEBUG] [Thread-174346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:04:53.795 [DEBUG] [Thread-174346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:04:53.796 [INFO] [Thread-174346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:04:53.797 [DEBUG] [Thread-174346] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:04:53.797 [DEBUG] [Thread-174346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:04:53.797 [DEBUG] [Thread-174346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:04:53.797 [DEBUG] [Thread-174346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] client lang: <none>
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] server lang: <none>
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] kex follows: False
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] Compression: none
2026-04-11T18:04:53.798 [DEBUG] [Thread-174346] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:04:53.810 [DEBUG] [Thread-174346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:04:53.810 [DEBUG] [Thread-174346] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:04:53.811 [DEBUG] [Thread-174346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:04:53.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:04:53.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:04:53.813 [DEBUG] [Thread-174346] [transport.py] [_log()] userauth is OK
2026-04-11T18:04:53.813 [DEBUG] [Thread-174346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:04:53.813 [DEBUG] [Thread-174346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:04:53.813 [DEBUG] [Thread-174346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:04:53.813 [DEBUG] [Thread-174346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:04:53.831 [INFO] [Thread-174346] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:04:53.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:04:54.438 [DEBUG] [Thread-174346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:04:54.438 [DEBUG] [Thread-174346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:04:54.438 [DEBUG] [Thread-174346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:04:54.480 [DEBUG] [Thread-174346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:04:54.480 [DEBUG] [Thread-174346] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:04:54.484 [DEBUG] [Thread-174346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:04:54.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:04:54.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:04:54.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:04:54.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:04:54.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:04:54.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:04:54.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:04:54.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:04:54.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:04:54.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.669911 -999.00  +12.60  20.33     97  +12.20 1 3 1 3 1   887    0 0.36 -2.45 ----- 20.3 20.3 270.8 25.3 13.7 -0.7 13.5 -0.4 13.2 -0.8 13.6 -0.5
2026-04-11T18:04:54.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:04:54.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:04:54.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.669911
2026-04-11T18:04:54.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:04:54.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:04:54.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:04:54.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:04:54.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:04:54.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:04:24', tmtdew=0.0842, humidity=99.7381, cloud=0.0, wind=19.3219, temperature=12.7834, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:04:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:04:54.508 [DEBUG] [Thread-174346] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:04:54.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:04:54.601 [DEBUG] [Thread-174349] [transport.py] [_log()] starting thread (client mode): 0xae514400
2026-04-11T18:04:54.602 [DEBUG] [Thread-174349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:04:54.617 [DEBUG] [Thread-174349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:04:54.617 [INFO] [Thread-174349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] client lang: <none>
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] server lang: <none>
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] kex follows: False
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:04:54.624 [DEBUG] [Thread-174349] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:04:54.625 [DEBUG] [Thread-174349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:04:54.625 [DEBUG] [Thread-174349] [transport.py] [_log()] Compression: none
2026-04-11T18:04:54.625 [DEBUG] [Thread-174349] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:04:54.685 [DEBUG] [Thread-174349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:04:54.686 [DEBUG] [Thread-174349] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:04:54.686 [DEBUG] [Thread-174349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:04:54.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:04:54.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:04:54.741 [DEBUG] [Thread-174349] [transport.py] [_log()] userauth is OK
2026-04-11T18:04:54.742 [DEBUG] [Thread-174349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:04:54.742 [DEBUG] [Thread-174349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:04:54.742 [DEBUG] [Thread-174349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:04:54.742 [DEBUG] [Thread-174349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:04:54.761 [INFO] [Thread-174349] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:04:54.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:04:54.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:04:55.599 [DEBUG] [Thread-174349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:04:55.600 [DEBUG] [Thread-174349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:04:55.647 [DEBUG] [Thread-174349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:04:55.647 [DEBUG] [Thread-174349] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:04:55.656 [DEBUG] [Thread-174349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:04:55.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:04:55.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-04-11T18:04:55.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-04-11T18:04:55.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:04:55.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:04:55.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:04:55.690 [DEBUG] [Thread-174349] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:05:03.408 [DEBUG] [Thread-174351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:18.477 [DEBUG] [Thread-174352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:20.239 [DEBUG] [Thread-174353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:25.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:05:25.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:05:25.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-04-11T18:05:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 4, 59), 0.031675, 99.7544, 0.0, 16.9391, 12.7998, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:05:26.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:04:59
2026-04-11T18:05:27.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:05:27.487 [DEBUG] [Thread-174354] [transport.py] [_log()] starting thread (client mode): 0xae5f10c0
2026-04-11T18:05:27.487 [DEBUG] [Thread-174354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:05:27.503 [DEBUG] [Thread-174354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:05:27.503 [INFO] [Thread-174354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] client lang: <none>
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] server lang: <none>
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] kex follows: False
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:05:27.507 [DEBUG] [Thread-174354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:05:27.508 [DEBUG] [Thread-174354] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:05:27.508 [DEBUG] [Thread-174354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:05:27.508 [DEBUG] [Thread-174354] [transport.py] [_log()] Compression: none
2026-04-11T18:05:27.508 [DEBUG] [Thread-174354] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:05:27.527 [DEBUG] [Thread-174354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:05:27.528 [DEBUG] [Thread-174354] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:05:27.529 [DEBUG] [Thread-174354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:05:27.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:05:27.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:05:27.574 [DEBUG] [Thread-174354] [transport.py] [_log()] userauth is OK
2026-04-11T18:05:27.574 [DEBUG] [Thread-174354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:05:27.574 [DEBUG] [Thread-174354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:05:27.574 [DEBUG] [Thread-174354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:05:27.575 [DEBUG] [Thread-174354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:05:27.606 [INFO] [Thread-174354] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:05:27.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:05:28.176 [DEBUG] [Thread-174354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:05:28.176 [DEBUG] [Thread-174354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:05:28.176 [DEBUG] [Thread-174354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:05:28.217 [DEBUG] [Thread-174354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:05:28.217 [DEBUG] [Thread-174354] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:05:28.221 [DEBUG] [Thread-174354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:05:28.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:05:28.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:05:28.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:05:28.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:05:28.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:05:28.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:05:28.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:05:28.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:05:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:05:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.670259 -999.00  +12.60  16.26     97  +12.20 1 3 1 3 1   887    0 0.36 -2.37 ----- 16.3 16.3 269.4 21.0 13.7 -0.8 13.4 -0.2 13.2 -0.6 13.5 -0.5
2026-04-11T18:05:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:05:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:05:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.670259
2026-04-11T18:05:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:05:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:05:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:05:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:05:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:05:28.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:04:59', tmtdew=0.031675, humidity=99.7544, cloud=0.0, wind=16.9391, temperature=12.7998, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:05:10.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:05:28.250 [DEBUG] [Thread-174354] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:05:28.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:05:28.344 [DEBUG] [Thread-174357] [transport.py] [_log()] starting thread (client mode): 0xae5f3940
2026-04-11T18:05:28.344 [DEBUG] [Thread-174357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:05:28.357 [DEBUG] [Thread-174357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:05:28.358 [INFO] [Thread-174357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] client lang: <none>
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] server lang: <none>
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] kex follows: False
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:05:28.367 [DEBUG] [Thread-174357] [transport.py] [_log()] Compression: none
2026-04-11T18:05:28.368 [DEBUG] [Thread-174357] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:05:28.430 [DEBUG] [Thread-174357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:05:28.431 [DEBUG] [Thread-174357] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:05:28.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:05:28.432 [DEBUG] [Thread-174357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:05:28.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:05:28.492 [DEBUG] [Thread-174357] [transport.py] [_log()] userauth is OK
2026-04-11T18:05:28.492 [DEBUG] [Thread-174357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:05:28.493 [DEBUG] [Thread-174357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:05:28.493 [DEBUG] [Thread-174357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:05:28.493 [DEBUG] [Thread-174357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:05:28.513 [INFO] [Thread-174357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:05:28.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:05:28.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:05:29.334 [DEBUG] [Thread-174357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:05:29.335 [DEBUG] [Thread-174357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:05:29.382 [DEBUG] [Thread-174357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:05:29.382 [DEBUG] [Thread-174357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:05:29.392 [DEBUG] [Thread-174357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:05:29.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:05:29.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-04-11T18:05: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') -> 00000000
2026-04-11T18:05:29.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:05:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:05:29.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:05:29.430 [DEBUG] [Thread-174357] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:05:33.514 [DEBUG] [Thread-174359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:41.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:41.441 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:48.565 [DEBUG] [Thread-174360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:05:59.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:05:59.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:05:59.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-04-11T18:06:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 5, 35), 0.06849, 99.4756, 0.0, 21.3833, 13.2334, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:06:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:05:35
2026-04-11T18:06:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:06:01.223 [DEBUG] [Thread-174361] [transport.py] [_log()] starting thread (client mode): 0xae561b10
2026-04-11T18:06:01.223 [DEBUG] [Thread-174361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:06:01.245 [DEBUG] [Thread-174361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:06:01.245 [INFO] [Thread-174361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:06:01.247 [DEBUG] [Thread-174361] [transport.py] [_log()] client lang: <none>
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] server lang: <none>
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] kex follows: False
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] Compression: none
2026-04-11T18:06:01.248 [DEBUG] [Thread-174361] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:06:01.264 [DEBUG] [Thread-174361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:06:01.265 [DEBUG] [Thread-174361] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:06:01.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:06:01.266 [DEBUG] [Thread-174361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:06:01.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:06:01.268 [DEBUG] [Thread-174361] [transport.py] [_log()] userauth is OK
2026-04-11T18:06:01.268 [DEBUG] [Thread-174361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:06:01.268 [DEBUG] [Thread-174361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:06:01.268 [DEBUG] [Thread-174361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:06:01.268 [DEBUG] [Thread-174361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:06:01.286 [INFO] [Thread-174361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:06:01.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:06:01.868 [DEBUG] [Thread-174361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:06:01.869 [DEBUG] [Thread-174361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:06:01.869 [DEBUG] [Thread-174361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:06:01.910 [DEBUG] [Thread-174361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:06:01.910 [DEBUG] [Thread-174361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:06:01.913 [DEBUG] [Thread-174361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:06:01.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:06:01.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:06:01.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:06:01.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:06:01.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:06:01.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:06:01.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:06:01.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:06:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:06:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.670606 -999.00  +12.60  17.73     97  +12.20 1 3 1 3 1   887    0 0.36 -2.33 ----- 17.7 17.7 280.2 24.3 13.6 -0.6 13.4 -0.4 13.1 -0.5 13.5 -0.3
2026-04-11T18:06:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:06:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:06:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.670606
2026-04-11T18:06:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:06:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:06:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:06:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:06:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:06:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:05:35', tmtdew=0.06849, humidity=99.4756, cloud=0.0, wind=21.3833, temperature=13.2334, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:05:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:06:01.944 [DEBUG] [Thread-174361] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:06:02.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:06:02.040 [DEBUG] [Thread-174364] [transport.py] [_log()] starting thread (client mode): 0xae5a5030
2026-04-11T18:06:02.040 [DEBUG] [Thread-174364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:06:02.056 [DEBUG] [Thread-174364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:06:02.056 [INFO] [Thread-174364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:06:02.063 [DEBUG] [Thread-174364] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:06:02.064 [DEBUG] [Thread-174364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:06:02.064 [DEBUG] [Thread-174364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:06:02.064 [DEBUG] [Thread-174364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:02.064 [DEBUG] [Thread-174364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:02.064 [DEBUG] [Thread-174364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:02.064 [DEBUG] [Thread-174364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] client lang: <none>
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] server lang: <none>
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] kex follows: False
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:06:02.065 [DEBUG] [Thread-174364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:06:02.066 [DEBUG] [Thread-174364] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:06:02.066 [DEBUG] [Thread-174364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:06:02.066 [DEBUG] [Thread-174364] [transport.py] [_log()] Compression: none
2026-04-11T18:06:02.066 [DEBUG] [Thread-174364] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:06:02.125 [DEBUG] [Thread-174364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:06:02.126 [DEBUG] [Thread-174364] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:06:02.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:06:02.128 [DEBUG] [Thread-174364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:06:02.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:06:02.188 [DEBUG] [Thread-174364] [transport.py] [_log()] userauth is OK
2026-04-11T18:06:02.188 [DEBUG] [Thread-174364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:06:02.188 [DEBUG] [Thread-174364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:06:02.188 [DEBUG] [Thread-174364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:06:02.188 [DEBUG] [Thread-174364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:06:02.207 [INFO] [Thread-174364] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:06:02.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:06:02.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:06:03.032 [DEBUG] [Thread-174364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:06:03.033 [DEBUG] [Thread-174364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:06:03.081 [DEBUG] [Thread-174364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:06:03.081 [DEBUG] [Thread-174364] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:06:03.090 [DEBUG] [Thread-174364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:06:03.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:06:03.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:06:03.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-04-11T18:06:03.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:06:03.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:06:03.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:06:03.127 [DEBUG] [Thread-174364] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:06:03.603 [DEBUG] [Thread-174366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:06:18.667 [DEBUG] [Thread-174367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:06:20.289 [DEBUG] [Thread-174368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:06:33.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:06:33.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:06:33.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-04-11T18:06:33.704 [DEBUG] [Thread-174369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:06:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 6, 10), 0.03684, 99.721, 0.0, 21.5798, 12.7168, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:06:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:06:10
2026-04-11T18:06:34.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:06:35.009 [DEBUG] [Thread-174370] [transport.py] [_log()] starting thread (client mode): 0xae5341c0
2026-04-11T18:06:35.010 [DEBUG] [Thread-174370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:06:35.023 [DEBUG] [Thread-174370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:06:35.023 [INFO] [Thread-174370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] client lang: <none>
2026-04-11T18:06:35.025 [DEBUG] [Thread-174370] [transport.py] [_log()] server lang: <none>
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] kex follows: False
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] Compression: none
2026-04-11T18:06:35.026 [DEBUG] [Thread-174370] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:06:35.041 [DEBUG] [Thread-174370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:06:35.041 [DEBUG] [Thread-174370] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:06:35.042 [DEBUG] [Thread-174370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:06:35.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:06:35.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:06:35.043 [DEBUG] [Thread-174370] [transport.py] [_log()] userauth is OK
2026-04-11T18:06:35.044 [DEBUG] [Thread-174370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:06:35.044 [DEBUG] [Thread-174370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:06:35.044 [DEBUG] [Thread-174370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:06:35.044 [DEBUG] [Thread-174370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:06:35.064 [INFO] [Thread-174370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:06:35.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:06:35.718 [DEBUG] [Thread-174370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:06:35.718 [DEBUG] [Thread-174370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:06:35.719 [DEBUG] [Thread-174370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:06:35.759 [DEBUG] [Thread-174370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:06:35.760 [DEBUG] [Thread-174370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:06:35.763 [DEBUG] [Thread-174370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:06:35.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:06:35.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:06:35.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:06:35.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:06:35.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:06:35.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:06:35.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:06:35.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:06:35.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:06:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.670953 -999.00  +12.60  16.77     97  +12.20 1 3 1 3 1   887    0 0.37 -2.26 ----- 16.8 16.8 286.0 26.2 13.6 -0.9 13.4 -0.4 13.1 -0.7 13.5 -0.3
2026-04-11T18:06:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:06:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:06:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.670953
2026-04-11T18:06:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:06:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:06:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:06:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:06:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:06:35.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:06:10', tmtdew=0.03684, humidity=99.721, cloud=0.0, wind=21.5798, temperature=12.7168, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:06:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:06:35.791 [DEBUG] [Thread-174370] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:06:35.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:06:35.885 [DEBUG] [Thread-174373] [transport.py] [_log()] starting thread (client mode): 0xa79525c0
2026-04-11T18:06:35.885 [DEBUG] [Thread-174373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:06:35.899 [DEBUG] [Thread-174373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:06:35.899 [INFO] [Thread-174373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] client lang: <none>
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] server lang: <none>
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] kex follows: False
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:06:35.907 [DEBUG] [Thread-174373] [transport.py] [_log()] Compression: none
2026-04-11T18:06:35.908 [DEBUG] [Thread-174373] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:06:35.968 [DEBUG] [Thread-174373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:06:35.969 [DEBUG] [Thread-174373] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:06:35.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:06:35.970 [DEBUG] [Thread-174373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:06:35.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:06:36.026 [DEBUG] [Thread-174373] [transport.py] [_log()] userauth is OK
2026-04-11T18:06:36.027 [DEBUG] [Thread-174373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:06:36.027 [DEBUG] [Thread-174373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:06:36.036 [DEBUG] [Thread-174373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:06:36.036 [DEBUG] [Thread-174373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:06:36.054 [INFO] [Thread-174373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:06:36.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:06:36.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:06:36.875 [DEBUG] [Thread-174373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:06:36.876 [DEBUG] [Thread-174373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:06:36.924 [DEBUG] [Thread-174373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:06:36.924 [DEBUG] [Thread-174373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:06:36.934 [DEBUG] [Thread-174373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:06:36.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:06:36.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-04-11T18:06:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:06:36.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:06:36.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:06:36.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:06:36.971 [DEBUG] [Thread-174373] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:06:41.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:06:41.583 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:06:48.741 [DEBUG] [Thread-174375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:03.798 [DEBUG] [Thread-174376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:06.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:07:06.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:07:06.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-04-11T18:07:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 6, 45), 0.07368, 99.4421, 0.0, 18.949, 13.1336, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:07:08.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:06:45
2026-04-11T18:07:08.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:07:08.808 [DEBUG] [Thread-174377] [transport.py] [_log()] starting thread (client mode): 0xb0fe92a0
2026-04-11T18:07:08.808 [DEBUG] [Thread-174377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:07:08.828 [DEBUG] [Thread-174377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:07:08.829 [INFO] [Thread-174377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:07:08.831 [DEBUG] [Thread-174377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] client lang: <none>
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] server lang: <none>
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] kex follows: False
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] Compression: none
2026-04-11T18:07:08.832 [DEBUG] [Thread-174377] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:07:08.850 [DEBUG] [Thread-174377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:07:08.850 [DEBUG] [Thread-174377] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:07:08.851 [DEBUG] [Thread-174377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:07:08.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:07:08.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:07:08.853 [DEBUG] [Thread-174377] [transport.py] [_log()] userauth is OK
2026-04-11T18:07:08.853 [DEBUG] [Thread-174377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:07:08.853 [DEBUG] [Thread-174377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:07:08.853 [DEBUG] [Thread-174377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:07:08.853 [DEBUG] [Thread-174377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:07:08.872 [INFO] [Thread-174377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:07:08.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:07:09.532 [DEBUG] [Thread-174377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:07:09.532 [DEBUG] [Thread-174377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:07:09.533 [DEBUG] [Thread-174377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:07:09.573 [DEBUG] [Thread-174377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:07:09.573 [DEBUG] [Thread-174377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:07:09.577 [DEBUG] [Thread-174377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:07:09.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:07:09.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:07:09.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:07:09.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:07:09.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:07:09.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:07:09.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:07:09.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:07:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:07:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.671300 -999.00  +12.60  17.68     97  +12.20 1 3 1 3 1   887    0 0.37 -1.94 ----- 17.7 17.7 285.2 26.8 13.6 -0.8 13.4 -0.4 13.1 -0.6 13.5 -0.5
2026-04-11T18:07:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:07:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:07:09.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.671300
2026-04-11T18:07:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:07:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:07:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:07:09.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:07:09.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:07:09.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:06:45', tmtdew=0.07368, humidity=99.4421, cloud=0.0, wind=18.949, temperature=13.1336, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:06:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:07:09.603 [DEBUG] [Thread-174377] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:07:09.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:07:09.696 [DEBUG] [Thread-174380] [transport.py] [_log()] starting thread (client mode): 0xa7952080
2026-04-11T18:07:09.696 [DEBUG] [Thread-174380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:07:09.710 [DEBUG] [Thread-174380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:07:09.711 [INFO] [Thread-174380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:07:09.718 [DEBUG] [Thread-174380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:07:09.718 [DEBUG] [Thread-174380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] client lang: <none>
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] server lang: <none>
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] kex follows: False
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] Compression: none
2026-04-11T18:07:09.719 [DEBUG] [Thread-174380] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:07:09.781 [DEBUG] [Thread-174380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:07:09.781 [DEBUG] [Thread-174380] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:07:09.782 [DEBUG] [Thread-174380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:07:09.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:07:09.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:07:09.844 [DEBUG] [Thread-174380] [transport.py] [_log()] userauth is OK
2026-04-11T18:07:09.845 [DEBUG] [Thread-174380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:07:09.845 [DEBUG] [Thread-174380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:07:09.845 [DEBUG] [Thread-174380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:07:09.845 [DEBUG] [Thread-174380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:07:09.867 [INFO] [Thread-174380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:07:09.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:07:09.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:07:10.721 [DEBUG] [Thread-174380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:07:10.721 [DEBUG] [Thread-174380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:07:10.769 [DEBUG] [Thread-174380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:07:10.769 [DEBUG] [Thread-174380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:07:10.778 [DEBUG] [Thread-174380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:07:10.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:07:10.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:07:10.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-04-11T18:07:10.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:07:10.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:07:10.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:07:10.812 [DEBUG] [Thread-174380] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:07:18.837 [DEBUG] [Thread-174382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:20.351 [DEBUG] [Thread-174383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:33.887 [DEBUG] [Thread-174384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:07:40.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:07:40.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:07:41.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:41.734 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:07:42.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 7, 22), 0.029125, 99.771, 0.0, 20.2392, 12.7833, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:07:42.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:07:22
2026-04-11T18:07:42.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:07:42.617 [DEBUG] [Thread-174385] [transport.py] [_log()] starting thread (client mode): 0xae562e30
2026-04-11T18:07:42.617 [DEBUG] [Thread-174385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:07:42.636 [DEBUG] [Thread-174385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:07:42.636 [INFO] [Thread-174385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] client lang: <none>
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] server lang: <none>
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] kex follows: False
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:07:42.640 [DEBUG] [Thread-174385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:07:42.641 [DEBUG] [Thread-174385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:07:42.641 [DEBUG] [Thread-174385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:07:42.641 [DEBUG] [Thread-174385] [transport.py] [_log()] Compression: none
2026-04-11T18:07:42.641 [DEBUG] [Thread-174385] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:07:42.657 [DEBUG] [Thread-174385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:07:42.657 [DEBUG] [Thread-174385] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:07:42.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:07:42.658 [DEBUG] [Thread-174385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:07:42.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:07:42.660 [DEBUG] [Thread-174385] [transport.py] [_log()] userauth is OK
2026-04-11T18:07:42.661 [DEBUG] [Thread-174385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:07:42.661 [DEBUG] [Thread-174385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:07:42.661 [DEBUG] [Thread-174385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:07:42.661 [DEBUG] [Thread-174385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:07:42.678 [INFO] [Thread-174385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:07:42.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:07:43.318 [DEBUG] [Thread-174385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:07:43.319 [DEBUG] [Thread-174385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:07:43.319 [DEBUG] [Thread-174385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:07:43.360 [DEBUG] [Thread-174385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:07:43.360 [DEBUG] [Thread-174385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:07:43.364 [DEBUG] [Thread-174385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:07:43.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:07:43.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:07:43.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:07:43.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:07:43.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:07:43.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:07:43.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:07:43.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:07:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:07:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.671647 -999.00  +12.60  20.68     97  +12.20 1 3 1 3 1   887    0 0.37 -1.74 ----- 20.7 20.7 282.8 24.0 13.6 -0.7 13.4 -0.3 13.1 -0.3 13.5 -0.3
2026-04-11T18:07:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:07:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:07:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.671647
2026-04-11T18:07:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:07:43.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:07:43.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:07:43.392 [DEBUG] [Thread-174385] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:07:43.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:07:43.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:07:43.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:07:22', tmtdew=0.029125, humidity=99.771, cloud=0.0, wind=20.2392, temperature=12.7833, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:07:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:07: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-04-11T18:07:43.485 [DEBUG] [Thread-174388] [transport.py] [_log()] starting thread (client mode): 0xae508310
2026-04-11T18:07:43.485 [DEBUG] [Thread-174388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:07:43.500 [DEBUG] [Thread-174388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:07:43.500 [INFO] [Thread-174388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:07:43.508 [DEBUG] [Thread-174388] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:07:43.508 [DEBUG] [Thread-174388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:07:43.508 [DEBUG] [Thread-174388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] client lang: <none>
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] server lang: <none>
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] kex follows: False
2026-04-11T18:07:43.509 [DEBUG] [Thread-174388] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:07:43.510 [DEBUG] [Thread-174388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:07:43.510 [DEBUG] [Thread-174388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:07:43.510 [DEBUG] [Thread-174388] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:07:43.510 [DEBUG] [Thread-174388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:07:43.510 [DEBUG] [Thread-174388] [transport.py] [_log()] Compression: none
2026-04-11T18:07:43.510 [DEBUG] [Thread-174388] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:07:43.571 [DEBUG] [Thread-174388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:07:43.572 [DEBUG] [Thread-174388] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:07:43.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:07:43.574 [DEBUG] [Thread-174388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:07:43.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:07:43.630 [DEBUG] [Thread-174388] [transport.py] [_log()] userauth is OK
2026-04-11T18:07:43.631 [DEBUG] [Thread-174388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:07:43.632 [DEBUG] [Thread-174388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:07:43.632 [DEBUG] [Thread-174388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:07:43.632 [DEBUG] [Thread-174388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:07:43.651 [INFO] [Thread-174388] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:07:43.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:07:43.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:07:44.468 [DEBUG] [Thread-174388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:07:44.468 [DEBUG] [Thread-174388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:07:44.516 [DEBUG] [Thread-174388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:07:44.516 [DEBUG] [Thread-174388] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:07:44.525 [DEBUG] [Thread-174388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:07:44.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:07:44.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:07:44.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-04-11T18:07:44.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:07:44.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:07:44.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:07:44.563 [DEBUG] [Thread-174388] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:07:48.924 [DEBUG] [Thread-174390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:03.980 [DEBUG] [Thread-174391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:08:14.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:08:14.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-04-11T18:08:15.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 7, 57), 0.079115, 99.771, 0.0, 20.9801, 12.8164, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:08:15.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:07:57
2026-04-11T18:08:16.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:08:16.374 [DEBUG] [Thread-174392] [transport.py] [_log()] starting thread (client mode): 0xae5636d0
2026-04-11T18:08:16.375 [DEBUG] [Thread-174392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:08:16.397 [DEBUG] [Thread-174392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:08:16.397 [INFO] [Thread-174392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:08:16.401 [DEBUG] [Thread-174392] [transport.py] [_log()] client lang: <none>
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] server lang: <none>
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] kex follows: False
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] Compression: none
2026-04-11T18:08:16.402 [DEBUG] [Thread-174392] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:08:16.420 [DEBUG] [Thread-174392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:08:16.420 [DEBUG] [Thread-174392] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:08:16.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:08:16.421 [DEBUG] [Thread-174392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:08:16.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:08:16.423 [DEBUG] [Thread-174392] [transport.py] [_log()] userauth is OK
2026-04-11T18:08:16.424 [DEBUG] [Thread-174392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:08:16.424 [DEBUG] [Thread-174392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:08:16.424 [DEBUG] [Thread-174392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:08:16.424 [DEBUG] [Thread-174392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:08:16.459 [INFO] [Thread-174392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:08:16.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:08:17.121 [DEBUG] [Thread-174392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:08:17.121 [DEBUG] [Thread-174392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:08:17.122 [DEBUG] [Thread-174392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:08:17.162 [DEBUG] [Thread-174392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:08:17.162 [DEBUG] [Thread-174392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:08:17.166 [DEBUG] [Thread-174392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:08:17.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:08:17.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:08:17.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:08:17.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:08:17.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:08:17.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:08:17.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:08:17.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:08:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:08:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.671995 -999.00  +12.60  17.55     97  +12.20 1 3 1 3 1   886    0 0.38 -1.84 ----- 17.6 17.6 287.7 23.6 13.6 -0.7 13.4 -0.2 13.1 -0.4 13.5 -0.5
2026-04-11T18:08:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:08:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:08:17.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.671995
2026-04-11T18:08:17.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:08:17.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:08:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:08:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:08:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:08:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:07:57', tmtdew=0.079115, humidity=99.771, cloud=0.0, wind=20.9801, temperature=12.8164, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:07:40.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:08:17.196 [DEBUG] [Thread-174392] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:08:17.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:08:17.289 [DEBUG] [Thread-174395] [transport.py] [_log()] starting thread (client mode): 0xae561ed0
2026-04-11T18:08:17.289 [DEBUG] [Thread-174395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:08:17.304 [DEBUG] [Thread-174395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:08:17.304 [INFO] [Thread-174395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] client lang: <none>
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] server lang: <none>
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] kex follows: False
2026-04-11T18:08:17.312 [DEBUG] [Thread-174395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:08:17.313 [DEBUG] [Thread-174395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:08:17.313 [DEBUG] [Thread-174395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:08:17.313 [DEBUG] [Thread-174395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:08:17.313 [DEBUG] [Thread-174395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:08:17.313 [DEBUG] [Thread-174395] [transport.py] [_log()] Compression: none
2026-04-11T18:08:17.313 [DEBUG] [Thread-174395] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:08:17.370 [DEBUG] [Thread-174395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:08:17.371 [DEBUG] [Thread-174395] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:08:17.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:08:17.372 [DEBUG] [Thread-174395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:08:17.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:08:17.427 [DEBUG] [Thread-174395] [transport.py] [_log()] userauth is OK
2026-04-11T18:08:17.427 [DEBUG] [Thread-174395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:08:17.427 [DEBUG] [Thread-174395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:08:17.427 [DEBUG] [Thread-174395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:08:17.427 [DEBUG] [Thread-174395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:08:17.446 [INFO] [Thread-174395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:08:17.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:08:17.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:08:18.299 [DEBUG] [Thread-174395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:08:18.299 [DEBUG] [Thread-174395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:08:18.348 [DEBUG] [Thread-174395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:08:18.349 [DEBUG] [Thread-174395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:08:18.358 [DEBUG] [Thread-174395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:08:18.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:08:18.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-04-11T18:08:18.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-04-11T18:08:18.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:08:18.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:08:18.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:08:18.400 [DEBUG] [Thread-174395] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:08:19.020 [DEBUG] [Thread-174397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:20.400 [DEBUG] [Thread-174398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:34.063 [DEBUG] [Thread-174399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:41.876 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:41.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:08:48.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:08:48.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-04-11T18:08:49.103 [DEBUG] [Thread-174400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:08:49.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 8, 33), 0.08677, 99.7215, 0.0, 21.2447, 12.7337, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:08:49.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:08:33
2026-04-11T18:08:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:08:50.275 [DEBUG] [Thread-174401] [transport.py] [_log()] starting thread (client mode): 0xb0f54fd0
2026-04-11T18:08:50.275 [DEBUG] [Thread-174401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:08:50.296 [DEBUG] [Thread-174401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:08:50.296 [INFO] [Thread-174401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] client lang: <none>
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] server lang: <none>
2026-04-11T18:08:50.298 [DEBUG] [Thread-174401] [transport.py] [_log()] kex follows: False
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] Compression: none
2026-04-11T18:08:50.299 [DEBUG] [Thread-174401] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:08:50.315 [DEBUG] [Thread-174401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:08:50.315 [DEBUG] [Thread-174401] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:08:50.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:08:50.316 [DEBUG] [Thread-174401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:08:50.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:08:50.318 [DEBUG] [Thread-174401] [transport.py] [_log()] userauth is OK
2026-04-11T18:08:50.319 [DEBUG] [Thread-174401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:08:50.319 [DEBUG] [Thread-174401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:08:50.319 [DEBUG] [Thread-174401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:08:50.319 [DEBUG] [Thread-174401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:08:50.337 [INFO] [Thread-174401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:08:50.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:08:50.972 [DEBUG] [Thread-174401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:08:50.972 [DEBUG] [Thread-174401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:08:50.973 [DEBUG] [Thread-174401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:08:51.013 [DEBUG] [Thread-174401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:08:51.013 [DEBUG] [Thread-174401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:08:51.017 [DEBUG] [Thread-174401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:08:51.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:08:51.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:08:51.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:08:51.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:08:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:08:51.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:08:51.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:08:51.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:08:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:08:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.672689 -999.00  +12.60  17.81     97  +12.20 1 3 1 3 1   886    0 0.36 -1.96 ----- 17.8 17.8 296.4 21.1 13.6 -0.3 13.3 -0.1 13.1 -0.8 13.5 -0.6
2026-04-11T18:08:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:08:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:08:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.672689
2026-04-11T18:08:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:08:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:08:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:08:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:08:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:08:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:08:33', tmtdew=0.08677, humidity=99.7215, cloud=0.0, wind=21.2447, temperature=12.7337, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:08:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:08:51.046 [DEBUG] [Thread-174401] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:08:51.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:08:51.139 [DEBUG] [Thread-174404] [transport.py] [_log()] starting thread (client mode): 0xae5f10c0
2026-04-11T18:08:51.139 [DEBUG] [Thread-174404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:08:51.154 [DEBUG] [Thread-174404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:08:51.154 [INFO] [Thread-174404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:51.162 [DEBUG] [Thread-174404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] client lang: <none>
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] server lang: <none>
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] kex follows: False
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] Compression: none
2026-04-11T18:08:51.163 [DEBUG] [Thread-174404] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:08:51.223 [DEBUG] [Thread-174404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:08:51.224 [DEBUG] [Thread-174404] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:08:51.225 [DEBUG] [Thread-174404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:08:51.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:08:51.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:08:51.287 [DEBUG] [Thread-174404] [transport.py] [_log()] userauth is OK
2026-04-11T18:08:51.287 [DEBUG] [Thread-174404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:08:51.287 [DEBUG] [Thread-174404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:08:51.287 [DEBUG] [Thread-174404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:08:51.287 [DEBUG] [Thread-174404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:08:51.307 [INFO] [Thread-174404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:08:51.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:08:51.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:08:52.182 [DEBUG] [Thread-174404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:08:52.183 [DEBUG] [Thread-174404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:08:52.230 [DEBUG] [Thread-174404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:08:52.230 [DEBUG] [Thread-174404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:08:52.240 [DEBUG] [Thread-174404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:08:52.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:08:52.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-04-11T18:08:52.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:08:52.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:08:52.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:08:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:08:52.278 [DEBUG] [Thread-174404] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:09:04.146 [DEBUG] [Thread-174406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:19.204 [DEBUG] [Thread-174407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:20.454 [DEBUG] [Thread-174408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:22.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:09:22.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:09:22.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-04-11T18:09:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 9, 8), 0.08165, 99.7546, 0.0, 22.4266, 12.7668, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:09:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:09:08
2026-04-11T18:09:23.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:09:24.084 [DEBUG] [Thread-174409] [transport.py] [_log()] starting thread (client mode): 0xb0f57010
2026-04-11T18:09:24.084 [DEBUG] [Thread-174409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:09:24.104 [DEBUG] [Thread-174409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:09:24.104 [INFO] [Thread-174409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] client lang: <none>
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] server lang: <none>
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] kex follows: False
2026-04-11T18:09:24.108 [DEBUG] [Thread-174409] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:09:24.109 [DEBUG] [Thread-174409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:09:24.109 [DEBUG] [Thread-174409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:09:24.109 [DEBUG] [Thread-174409] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:09:24.109 [DEBUG] [Thread-174409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:09:24.109 [DEBUG] [Thread-174409] [transport.py] [_log()] Compression: none
2026-04-11T18:09:24.109 [DEBUG] [Thread-174409] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:09:24.129 [DEBUG] [Thread-174409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:09:24.129 [DEBUG] [Thread-174409] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:09:24.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:09:24.130 [DEBUG] [Thread-174409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:09:24.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:09:24.133 [DEBUG] [Thread-174409] [transport.py] [_log()] userauth is OK
2026-04-11T18:09:24.133 [DEBUG] [Thread-174409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:09:24.133 [DEBUG] [Thread-174409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:09:24.133 [DEBUG] [Thread-174409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:09:24.133 [DEBUG] [Thread-174409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:09:24.157 [INFO] [Thread-174409] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:09:24.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:09:24.772 [DEBUG] [Thread-174409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:09:24.773 [DEBUG] [Thread-174409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:09:24.773 [DEBUG] [Thread-174409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:09:24.813 [DEBUG] [Thread-174409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:09:24.814 [DEBUG] [Thread-174409] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:09:24.817 [DEBUG] [Thread-174409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:09:24.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:09:24.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:09:24.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:09:24.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:09:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:09:24.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:09:24.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:09:24.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:09:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:09:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.673036 -999.00  +12.70  13.33     97  +12.30 1 3 1 3 1   886    0 0.36 -2.37 ----- 13.3 13.3 300.2 20.1 13.6 -0.5 13.4 -0.2 13.1 -0.3 13.5 -0.4
2026-04-11T18:09:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:09:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:09:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.673036
2026-04-11T18:09:24.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:09:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:09:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:09:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:09:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:09:24.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:09:08', tmtdew=0.08165, humidity=99.7546, cloud=0.0, wind=22.4266, temperature=12.7668, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:09:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:09:24.845 [DEBUG] [Thread-174409] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:09:24.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:09:24.939 [DEBUG] [Thread-174412] [transport.py] [_log()] starting thread (client mode): 0xb0f56590
2026-04-11T18:09:24.939 [DEBUG] [Thread-174412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:09:24.954 [DEBUG] [Thread-174412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:09:24.954 [INFO] [Thread-174412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] client lang: <none>
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] server lang: <none>
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] kex follows: False
2026-04-11T18:09:24.962 [DEBUG] [Thread-174412] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:09:24.963 [DEBUG] [Thread-174412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:09:24.963 [DEBUG] [Thread-174412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:09:24.963 [DEBUG] [Thread-174412] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:09:24.963 [DEBUG] [Thread-174412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:09:24.963 [DEBUG] [Thread-174412] [transport.py] [_log()] Compression: none
2026-04-11T18:09:24.963 [DEBUG] [Thread-174412] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:09:25.024 [DEBUG] [Thread-174412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:09:25.025 [DEBUG] [Thread-174412] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:09:25.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:09:25.026 [DEBUG] [Thread-174412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:09:25.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:09:25.084 [DEBUG] [Thread-174412] [transport.py] [_log()] userauth is OK
2026-04-11T18:09:25.084 [DEBUG] [Thread-174412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:09:25.085 [DEBUG] [Thread-174412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:09:25.085 [DEBUG] [Thread-174412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:09:25.085 [DEBUG] [Thread-174412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:09:25.105 [INFO] [Thread-174412] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:09:25.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:09:25.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:09:25.970 [DEBUG] [Thread-174412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:09:25.970 [DEBUG] [Thread-174412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:09:26.018 [DEBUG] [Thread-174412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:09:26.018 [DEBUG] [Thread-174412] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:09:26.028 [DEBUG] [Thread-174412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:09:26.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:09:26.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:09:26.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:09:26.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:09:26.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:09:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:09:26.065 [DEBUG] [Thread-174412] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:09:34.242 [DEBUG] [Thread-174414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:42.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:42.020 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:49.297 [DEBUG] [Thread-174415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:09:56.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:09:56.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:09:56.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-04-11T18:09:57.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 9, 43), 0.05815, 99.5428, 0.0, 24.4879, 13.2338, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:09:57.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:09:43
2026-04-11T18:09:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:09:57.956 [DEBUG] [Thread-174416] [transport.py] [_log()] starting thread (client mode): 0xae562a40
2026-04-11T18:09:57.956 [DEBUG] [Thread-174416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:09:57.975 [DEBUG] [Thread-174416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:09:57.975 [INFO] [Thread-174416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] client lang: <none>
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] server lang: <none>
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] kex follows: False
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:09:57.979 [DEBUG] [Thread-174416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:09:57.980 [DEBUG] [Thread-174416] [transport.py] [_log()] Compression: none
2026-04-11T18:09:57.980 [DEBUG] [Thread-174416] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:09:57.998 [DEBUG] [Thread-174416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:09:57.999 [DEBUG] [Thread-174416] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:09:57.999 [DEBUG] [Thread-174416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:09:57.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:09:58.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:09:58.001 [DEBUG] [Thread-174416] [transport.py] [_log()] userauth is OK
2026-04-11T18:09:58.001 [DEBUG] [Thread-174416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:09:58.002 [DEBUG] [Thread-174416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:09:58.002 [DEBUG] [Thread-174416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:09:58.002 [DEBUG] [Thread-174416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:09:58.026 [INFO] [Thread-174416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:09:58.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:09:58.671 [DEBUG] [Thread-174416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:09:58.672 [DEBUG] [Thread-174416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:09:58.672 [DEBUG] [Thread-174416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:09:58.713 [DEBUG] [Thread-174416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:09:58.713 [DEBUG] [Thread-174416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:09:58.717 [DEBUG] [Thread-174416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:09:58.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:09:58.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:09:58.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:09:58.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:09:58.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:09:58.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:09:58.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:09:58.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:09:58.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:09:58.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.673384 -999.00  +12.60  22.40     97  +12.20 1 3 1 3 1   886    0 0.34 -2.68 ----- 22.4 22.4 296.4 25.3 13.6 -0.3 13.4 -0.4 13.1 -0.3 13.6 -0.4
2026-04-11T18:09:58.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:09:58.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:09:58.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.673384
2026-04-11T18:09:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:09:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:09:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:09:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:09:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:09:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:09:43', tmtdew=0.05815, humidity=99.5428, cloud=0.0, wind=24.4879, temperature=13.2338, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:09:40.378', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:09:58.744 [DEBUG] [Thread-174416] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:09:58.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:09:58.837 [DEBUG] [Thread-174419] [transport.py] [_log()] starting thread (client mode): 0xae516aa0
2026-04-11T18:09:58.837 [DEBUG] [Thread-174419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:09:58.852 [DEBUG] [Thread-174419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:09:58.853 [INFO] [Thread-174419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:09:58.860 [DEBUG] [Thread-174419] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:09:58.860 [DEBUG] [Thread-174419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] client lang: <none>
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] server lang: <none>
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] kex follows: False
2026-04-11T18:09:58.861 [DEBUG] [Thread-174419] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:09:58.862 [DEBUG] [Thread-174419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:09:58.862 [DEBUG] [Thread-174419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:09:58.862 [DEBUG] [Thread-174419] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:09:58.862 [DEBUG] [Thread-174419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:09:58.862 [DEBUG] [Thread-174419] [transport.py] [_log()] Compression: none
2026-04-11T18:09:58.862 [DEBUG] [Thread-174419] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:09:58.920 [DEBUG] [Thread-174419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:09:58.920 [DEBUG] [Thread-174419] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:09:58.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:09:58.922 [DEBUG] [Thread-174419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:09:58.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:09:58.979 [DEBUG] [Thread-174419] [transport.py] [_log()] userauth is OK
2026-04-11T18:09:58.979 [DEBUG] [Thread-174419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:09:58.980 [DEBUG] [Thread-174419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:09:58.980 [DEBUG] [Thread-174419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:09:58.980 [DEBUG] [Thread-174419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:09:59.000 [INFO] [Thread-174419] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:09:59.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:09:59.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:09:59.823 [DEBUG] [Thread-174419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:09:59.823 [DEBUG] [Thread-174419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:09:59.872 [DEBUG] [Thread-174419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:09:59.872 [DEBUG] [Thread-174419] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:09:59.880 [DEBUG] [Thread-174419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:09:59.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:09:59.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-04-11T18:09:59.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-04-11T18:09:59.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:09:59.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:09:59.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:09:59.914 [DEBUG] [Thread-174419] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:10:04.333 [DEBUG] [Thread-174421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:10:19.383 [DEBUG] [Thread-174422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:10:20.513 [DEBUG] [Thread-174423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:10:29.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:10:29.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:10:29.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-04-11T18:10:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 10, 19), 0.0842, 99.7382, 0.0, 18.509, 12.7672, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:10:31.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:10:19
2026-04-11T18:10:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:10:31.789 [DEBUG] [Thread-174424] [transport.py] [_log()] starting thread (client mode): 0xae561540
2026-04-11T18:10:31.789 [DEBUG] [Thread-174424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:10:31.811 [DEBUG] [Thread-174424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:10:31.811 [INFO] [Thread-174424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:10:31.814 [DEBUG] [Thread-174424] [transport.py] [_log()] client lang: <none>
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] server lang: <none>
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] kex follows: False
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] Compression: none
2026-04-11T18:10:31.815 [DEBUG] [Thread-174424] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:10:31.832 [DEBUG] [Thread-174424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:10:31.832 [DEBUG] [Thread-174424] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:10:31.833 [DEBUG] [Thread-174424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:10:31.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:10:31.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:10:31.835 [DEBUG] [Thread-174424] [transport.py] [_log()] userauth is OK
2026-04-11T18:10:31.835 [DEBUG] [Thread-174424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:10:31.835 [DEBUG] [Thread-174424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:10:31.836 [DEBUG] [Thread-174424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:10:31.836 [DEBUG] [Thread-174424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:10:31.854 [INFO] [Thread-174424] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:10:31.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:10:32.486 [DEBUG] [Thread-174424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:10:32.487 [DEBUG] [Thread-174424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:10:32.487 [DEBUG] [Thread-174424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:10:32.528 [DEBUG] [Thread-174424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:10:32.528 [DEBUG] [Thread-174424] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:10:32.531 [DEBUG] [Thread-174424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:10:32.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:10:32.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:10:32.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:10:32.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:10:32.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:10:32.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:10:32.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:10:32.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:10:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:10:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.673731 -999.00  +12.60  20.17     97  +12.20 1 3 1 3 1   886    0 0.34 -2.62 ----- 20.2 20.2 302.2 23.9 13.6 -0.3 13.5 -0.3 13.2 -0.8 13.6 -0.5
2026-04-11T18:10:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:10:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:10:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.673731
2026-04-11T18:10:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:10:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:10:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:10:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:10:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:10:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:10:19', tmtdew=0.0842, humidity=99.7382, cloud=0.0, wind=18.509, temperature=12.7672, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:10:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:10:32.550 [DEBUG] [Thread-174424] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:10:32.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:10:32.656 [DEBUG] [Thread-174427] [transport.py] [_log()] starting thread (client mode): 0xae562b60
2026-04-11T18:10:32.657 [DEBUG] [Thread-174427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:10:32.673 [DEBUG] [Thread-174427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:10:32.673 [INFO] [Thread-174427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:10:32.681 [DEBUG] [Thread-174427] [transport.py] [_log()] client lang: <none>
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] server lang: <none>
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] kex follows: False
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] Compression: none
2026-04-11T18:10:32.682 [DEBUG] [Thread-174427] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:10:32.742 [DEBUG] [Thread-174427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:10:32.742 [DEBUG] [Thread-174427] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:10:32.742 [DEBUG] [Thread-174427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:10:32.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:10:32.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:10:32.799 [DEBUG] [Thread-174427] [transport.py] [_log()] userauth is OK
2026-04-11T18:10:32.799 [DEBUG] [Thread-174427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:10:32.800 [DEBUG] [Thread-174427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:10:32.800 [DEBUG] [Thread-174427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:10:32.800 [DEBUG] [Thread-174427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:10:32.819 [INFO] [Thread-174427] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:10:32.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:10:32.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:10:33.663 [DEBUG] [Thread-174427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:10:33.664 [DEBUG] [Thread-174427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:10:33.712 [DEBUG] [Thread-174427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:10:33.712 [DEBUG] [Thread-174427] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:10:33.721 [DEBUG] [Thread-174427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:10:33.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:10:33.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-04-11T18:10:33.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:10:33.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:10:33.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:10:33.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:10:33.761 [DEBUG] [Thread-174427] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:10:34.421 [DEBUG] [Thread-174429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:10:42.162 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:10:42.163 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:10:49.482 [DEBUG] [Thread-174430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:11:03.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:11:03.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-04-11T18:11:04.520 [DEBUG] [Thread-174431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:05.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 10, 55), 0.08162, 99.7549, 0.0, 22.8676, 12.7838, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:11:05.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:10:55
2026-04-11T18:11:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:11:05.687 [DEBUG] [Thread-174432] [transport.py] [_log()] starting thread (client mode): 0xae5f18d0
2026-04-11T18:11:05.688 [DEBUG] [Thread-174432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:11:05.708 [DEBUG] [Thread-174432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:11:05.708 [INFO] [Thread-174432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:11:05.711 [DEBUG] [Thread-174432] [transport.py] [_log()] client lang: <none>
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] server lang: <none>
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] kex follows: False
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] Compression: none
2026-04-11T18:11:05.712 [DEBUG] [Thread-174432] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:11:05.728 [DEBUG] [Thread-174432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:11:05.729 [DEBUG] [Thread-174432] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:11:05.729 [DEBUG] [Thread-174432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:11:05.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:11:05.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:11:05.730 [DEBUG] [Thread-174432] [transport.py] [_log()] userauth is OK
2026-04-11T18:11:05.731 [DEBUG] [Thread-174432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:11:05.731 [DEBUG] [Thread-174432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:11:05.731 [DEBUG] [Thread-174432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:11:05.731 [DEBUG] [Thread-174432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:11:05.752 [INFO] [Thread-174432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:11:05.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:11:06.408 [DEBUG] [Thread-174432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:11:06.408 [DEBUG] [Thread-174432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:11:06.409 [DEBUG] [Thread-174432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:11:06.449 [DEBUG] [Thread-174432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:11:06.449 [DEBUG] [Thread-174432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:11:06.452 [DEBUG] [Thread-174432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:11:06.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:11:06.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:11:06.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:11:06.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:11:06.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:11:06.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:11:06.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:11:06.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:11:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:11:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.674078 -999.00  +12.60  19.10     97  +12.20 1 3 1 3 1   886    0 0.34 -2.48 ----- 19.1 19.1 291.6 26.9 13.6 -0.4 13.4 -0.3 13.1 -0.6 13.6 -0.4
2026-04-11T18:11:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:11:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:11:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.674078
2026-04-11T18:11:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:11:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:11:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:11:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:11:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:11:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:10:55', tmtdew=0.08162, humidity=99.7549, cloud=0.0, wind=22.8676, temperature=12.7838, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:10:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:11:06.477 [DEBUG] [Thread-174432] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:11:06.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:11:06.570 [DEBUG] [Thread-174435] [transport.py] [_log()] starting thread (client mode): 0xae515630
2026-04-11T18:11:06.570 [DEBUG] [Thread-174435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:11:06.585 [DEBUG] [Thread-174435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:11:06.585 [INFO] [Thread-174435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:06.595 [DEBUG] [Thread-174435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] client lang: <none>
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] server lang: <none>
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] kex follows: False
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] Compression: none
2026-04-11T18:11:06.596 [DEBUG] [Thread-174435] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:11:06.654 [DEBUG] [Thread-174435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:11:06.655 [DEBUG] [Thread-174435] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:11:06.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:11:06.656 [DEBUG] [Thread-174435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:11:06.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:11:06.711 [DEBUG] [Thread-174435] [transport.py] [_log()] userauth is OK
2026-04-11T18:11:06.711 [DEBUG] [Thread-174435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:11:06.712 [DEBUG] [Thread-174435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:11:06.712 [DEBUG] [Thread-174435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:11:06.712 [DEBUG] [Thread-174435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:11:06.730 [INFO] [Thread-174435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:11:06.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:11:06.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:11:07.561 [DEBUG] [Thread-174435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:11:07.561 [DEBUG] [Thread-174435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:11:07.609 [DEBUG] [Thread-174435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:11:07.609 [DEBUG] [Thread-174435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:11:07.619 [DEBUG] [Thread-174435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:11:07.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:11:07.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-04-11T18:11:07.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:11:07.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:11:07.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:11:07.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:11:07.663 [DEBUG] [Thread-174435] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:11:19.560 [DEBUG] [Thread-174437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:20.563 [DEBUG] [Thread-174438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:34.609 [DEBUG] [Thread-174439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:11:37.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:11:37.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-04-11T18:11:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 11, 30), 0.07652, 99.7881, 0.0, 21.8444, 12.7838, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:11:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:11:30
2026-04-11T18:11:39.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:11:39.541 [DEBUG] [Thread-174440] [transport.py] [_log()] starting thread (client mode): 0xb0fb5150
2026-04-11T18:11:39.542 [DEBUG] [Thread-174440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:11:39.564 [DEBUG] [Thread-174440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:11:39.564 [INFO] [Thread-174440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:11:39.576 [DEBUG] [Thread-174440] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] client lang: <none>
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] server lang: <none>
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] kex follows: False
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:11:39.577 [DEBUG] [Thread-174440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:11:39.578 [DEBUG] [Thread-174440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:11:39.578 [DEBUG] [Thread-174440] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:11:39.578 [DEBUG] [Thread-174440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:11:39.578 [DEBUG] [Thread-174440] [transport.py] [_log()] Compression: none
2026-04-11T18:11:39.578 [DEBUG] [Thread-174440] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:11:39.601 [DEBUG] [Thread-174440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:11:39.601 [DEBUG] [Thread-174440] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:11:39.602 [DEBUG] [Thread-174440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:11:39.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:11:39.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:11:39.604 [DEBUG] [Thread-174440] [transport.py] [_log()] userauth is OK
2026-04-11T18:11:39.604 [DEBUG] [Thread-174440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:11:39.604 [DEBUG] [Thread-174440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:11:39.604 [DEBUG] [Thread-174440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:11:39.604 [DEBUG] [Thread-174440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:11:39.629 [INFO] [Thread-174440] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:11:39.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:11:40.315 [DEBUG] [Thread-174440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:11:40.315 [DEBUG] [Thread-174440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:11:40.316 [DEBUG] [Thread-174440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:11:40.356 [DEBUG] [Thread-174440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:11:40.356 [DEBUG] [Thread-174440] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:11:40.359 [DEBUG] [Thread-174440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:11:40.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:11:40.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:11:40.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:11:40.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:11:40.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:11:40.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:11:40.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:11:40.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:11:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:11:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.674425 -999.00  +12.60  22.79     97  +12.20 1 3 1 3 1   885    0 0.35 -2.48 ----- 22.8 22.8 296.2 25.7 13.6 -0.6 13.4 -0.3 13.2 -0.3 13.6 -0.4
2026-04-11T18:11:40.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:11:40.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:11:40.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.674425
2026-04-11T18:11:40.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:11:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:11:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:11:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:11:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:11:40.383 [DEBUG] [Thread-174440] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:11:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:11:30', tmtdew=0.07652, humidity=99.7881, cloud=0.0, wind=21.8444, temperature=12.7838, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:11:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:11:40.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:11:40.476 [DEBUG] [Thread-174443] [transport.py] [_log()] starting thread (client mode): 0xb0fb44f0
2026-04-11T18:11:40.476 [DEBUG] [Thread-174443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:11:40.491 [DEBUG] [Thread-174443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:11:40.492 [INFO] [Thread-174443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:40.499 [DEBUG] [Thread-174443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] client lang: <none>
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] server lang: <none>
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] kex follows: False
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] Compression: none
2026-04-11T18:11:40.500 [DEBUG] [Thread-174443] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:11:40.559 [DEBUG] [Thread-174443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:11:40.560 [DEBUG] [Thread-174443] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:11:40.560 [DEBUG] [Thread-174443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:11:40.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:11:40.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:11:40.615 [DEBUG] [Thread-174443] [transport.py] [_log()] userauth is OK
2026-04-11T18:11:40.615 [DEBUG] [Thread-174443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:11:40.616 [DEBUG] [Thread-174443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:11:40.616 [DEBUG] [Thread-174443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:11:40.616 [DEBUG] [Thread-174443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:11:40.634 [INFO] [Thread-174443] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:11:40.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:11:40.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:11:41.473 [DEBUG] [Thread-174443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:11:41.474 [DEBUG] [Thread-174443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:11:41.522 [DEBUG] [Thread-174443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:11:41.523 [DEBUG] [Thread-174443] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:11:41.532 [DEBUG] [Thread-174443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:11:41.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:11:41.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:11:41.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-04-11T18:11:41.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:11:41.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:11:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:11:41.572 [DEBUG] [Thread-174443] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:11:42.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:42.306 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:11:49.647 [DEBUG] [Thread-174445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:04.710 [DEBUG] [Thread-174446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:11.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:12:11.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:12:11.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-04-11T18:12:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 11, 30), 0.07652, 99.7881, 0.0, 21.8444, 12.7838, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:12:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:11:30
2026-04-11T18:12:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:12:13.495 [DEBUG] [Thread-174447] [transport.py] [_log()] starting thread (client mode): 0xb0fb52d0
2026-04-11T18:12:13.495 [DEBUG] [Thread-174447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:12:13.515 [DEBUG] [Thread-174447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:12:13.515 [INFO] [Thread-174447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] client lang: <none>
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] server lang: <none>
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] kex follows: False
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] Compression: none
2026-04-11T18:12:13.518 [DEBUG] [Thread-174447] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:12:13.538 [DEBUG] [Thread-174447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:12:13.538 [DEBUG] [Thread-174447] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:12:13.539 [DEBUG] [Thread-174447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:12:13.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:12:13.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:12:13.541 [DEBUG] [Thread-174447] [transport.py] [_log()] userauth is OK
2026-04-11T18:12:13.541 [DEBUG] [Thread-174447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:12:13.541 [DEBUG] [Thread-174447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:12:13.542 [DEBUG] [Thread-174447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:12:13.542 [DEBUG] [Thread-174447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:12:13.568 [INFO] [Thread-174447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:12:13.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:12:14.161 [DEBUG] [Thread-174447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:12:14.162 [DEBUG] [Thread-174447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:12:14.162 [DEBUG] [Thread-174447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:12:14.203 [DEBUG] [Thread-174447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:12:14.204 [DEBUG] [Thread-174447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:12:14.207 [DEBUG] [Thread-174447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:12:14.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:12:14.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:12:14.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:12:14.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:12:14.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:12:14.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:12:14.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:12:14.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:12:14.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:12:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.674772 -999.00  +12.60  17.06     97  +12.20 1 3 1 3 1   885    0 0.35 -2.25 ----- 17.1 17.1 298.6 22.1 13.6 -0.6 13.4 -0.2 13.1 -0.5 13.6 -0.3
2026-04-11T18:12:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:12:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:12:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.674772
2026-04-11T18:12:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:12:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:12:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:12:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:12:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:12:14.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:11:30', tmtdew=0.07652, humidity=99.7881, cloud=0.0, wind=21.8444, temperature=12.7838, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:11:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:12:14.238 [DEBUG] [Thread-174447] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:12:14.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:12:14.321 [DEBUG] [Thread-174450] [transport.py] [_log()] starting thread (client mode): 0xb0fb51e0
2026-04-11T18:12:14.321 [DEBUG] [Thread-174450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:12:14.336 [DEBUG] [Thread-174450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:12:14.336 [INFO] [Thread-174450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:14.344 [DEBUG] [Thread-174450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] client lang: <none>
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] server lang: <none>
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] kex follows: False
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] Compression: none
2026-04-11T18:12:14.345 [DEBUG] [Thread-174450] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:12:14.403 [DEBUG] [Thread-174450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:12:14.404 [DEBUG] [Thread-174450] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:12:14.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:12:14.405 [DEBUG] [Thread-174450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:12:14.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:12:14.459 [DEBUG] [Thread-174450] [transport.py] [_log()] userauth is OK
2026-04-11T18:12:14.459 [DEBUG] [Thread-174450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:12:14.460 [DEBUG] [Thread-174450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:12:14.460 [DEBUG] [Thread-174450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:12:14.460 [DEBUG] [Thread-174450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:12:14.484 [INFO] [Thread-174450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:12:14.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:12:14.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:12:15.298 [DEBUG] [Thread-174450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:12:15.298 [DEBUG] [Thread-174450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:12:15.346 [DEBUG] [Thread-174450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:12:15.346 [DEBUG] [Thread-174450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:12:15.356 [DEBUG] [Thread-174450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:12:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:12:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:12:15.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-04-11T18:12:15.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:12:15.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:12:15.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:12:15.393 [DEBUG] [Thread-174450] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:12:19.747 [DEBUG] [Thread-174452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:20.626 [DEBUG] [Thread-174453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:34.808 [DEBUG] [Thread-174454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:42.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:42.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:12:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:12:45.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:12:45.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-04-11T18:12:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 12, 6), 0.081615, 99.755, 0.0, 23.5202, 12.7673, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:12:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:12:06
2026-04-11T18:12:47.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:12:47.238 [DEBUG] [Thread-174455] [transport.py] [_log()] starting thread (client mode): 0xb0fb4f70
2026-04-11T18:12:47.238 [DEBUG] [Thread-174455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:12:47.259 [DEBUG] [Thread-174455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:12:47.259 [INFO] [Thread-174455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] client lang: <none>
2026-04-11T18:12:47.262 [DEBUG] [Thread-174455] [transport.py] [_log()] server lang: <none>
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] kex follows: False
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] Compression: none
2026-04-11T18:12:47.263 [DEBUG] [Thread-174455] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:12:47.279 [DEBUG] [Thread-174455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:12:47.280 [DEBUG] [Thread-174455] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:12:47.280 [DEBUG] [Thread-174455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:12:47.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:12:47.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:12:47.282 [DEBUG] [Thread-174455] [transport.py] [_log()] userauth is OK
2026-04-11T18:12:47.282 [DEBUG] [Thread-174455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:12:47.283 [DEBUG] [Thread-174455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:12:47.283 [DEBUG] [Thread-174455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:12:47.283 [DEBUG] [Thread-174455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:12:47.307 [INFO] [Thread-174455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:12:47.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:12:47.984 [DEBUG] [Thread-174455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:12:47.984 [DEBUG] [Thread-174455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:12:47.985 [DEBUG] [Thread-174455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:12:48.025 [DEBUG] [Thread-174455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:12:48.025 [DEBUG] [Thread-174455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:12:48.027 [DEBUG] [Thread-174455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:12:48.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:12:48.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:12:48.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:12:48.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:12:48.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:12:48.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:12:48.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:12:48.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:12:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:12:48.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.675120 -999.00  +12.60  16.55     97  +12.20 1 3 1 3 1   885    0 0.34 -2.59 ----- 16.6 16.6 293.4 22.1 13.6 -0.3 13.4 -0.2 13.2 -0.4 13.6 -0.3
2026-04-11T18:12:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:12:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:12:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.675120
2026-04-11T18:12:48.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:12:48.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:12:48.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:12:48.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:12:48.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:12:48.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:12:06', tmtdew=0.081615, humidity=99.755, cloud=0.0, wind=23.5202, temperature=12.7673, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:12:10.368', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:12:48.051 [DEBUG] [Thread-174455] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:12:48.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:12:48.144 [DEBUG] [Thread-174458] [transport.py] [_log()] starting thread (client mode): 0xae561c90
2026-04-11T18:12:48.144 [DEBUG] [Thread-174458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:12:48.160 [DEBUG] [Thread-174458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:12:48.160 [INFO] [Thread-174458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] client lang: <none>
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] server lang: <none>
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] kex follows: False
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] Compression: none
2026-04-11T18:12:48.168 [DEBUG] [Thread-174458] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:12:48.227 [DEBUG] [Thread-174458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:12:48.228 [DEBUG] [Thread-174458] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:12:48.229 [DEBUG] [Thread-174458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:12:48.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:12:48.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:12:48.283 [DEBUG] [Thread-174458] [transport.py] [_log()] userauth is OK
2026-04-11T18:12:48.283 [DEBUG] [Thread-174458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:12:48.284 [DEBUG] [Thread-174458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:12:48.284 [DEBUG] [Thread-174458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:12:48.284 [DEBUG] [Thread-174458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:12:48.302 [INFO] [Thread-174458] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:12:48.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:12:48.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:12:49.130 [DEBUG] [Thread-174458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:12:49.130 [DEBUG] [Thread-174458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:12:49.178 [DEBUG] [Thread-174458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:12:49.178 [DEBUG] [Thread-174458] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:12:49.187 [DEBUG] [Thread-174458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:12:49.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:12:49.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-04-11T18:12: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') -> 00000000
2026-04-11T18:12:49.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:12:49.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:12:49.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:12:49.231 [DEBUG] [Thread-174458] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:12:49.846 [DEBUG] [Thread-174460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:04.902 [DEBUG] [Thread-174461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:19.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:13:19.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:13:19.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-04-11T18:13:19.939 [DEBUG] [Thread-174462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 12, 41), 0.06835, 99.4769, 0.0, 23.4295, 13.0352, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:13:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:12:41
2026-04-11T18:13:20.676 [DEBUG] [Thread-174463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:21.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:13:21.264 [DEBUG] [Thread-174464] [transport.py] [_log()] starting thread (client mode): 0xae5e4850
2026-04-11T18:13:21.264 [DEBUG] [Thread-174464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:13:21.285 [DEBUG] [Thread-174464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:13:21.285 [INFO] [Thread-174464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] client lang: <none>
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] server lang: <none>
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] kex follows: False
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:13:21.288 [DEBUG] [Thread-174464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:13:21.289 [DEBUG] [Thread-174464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:13:21.289 [DEBUG] [Thread-174464] [transport.py] [_log()] Compression: none
2026-04-11T18:13:21.289 [DEBUG] [Thread-174464] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:13:21.306 [DEBUG] [Thread-174464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:13:21.306 [DEBUG] [Thread-174464] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:13:21.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:13:21.307 [DEBUG] [Thread-174464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:13:21.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:13:21.309 [DEBUG] [Thread-174464] [transport.py] [_log()] userauth is OK
2026-04-11T18:13:21.309 [DEBUG] [Thread-174464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:13:21.309 [DEBUG] [Thread-174464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:13:21.310 [DEBUG] [Thread-174464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:13:21.310 [DEBUG] [Thread-174464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:13:21.332 [INFO] [Thread-174464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:13:21.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:13:21.925 [DEBUG] [Thread-174464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:13:21.925 [DEBUG] [Thread-174464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:13:21.925 [DEBUG] [Thread-174464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:13:21.966 [DEBUG] [Thread-174464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:13:21.966 [DEBUG] [Thread-174464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:13:21.969 [DEBUG] [Thread-174464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:13:21.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:13:21.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:13:21.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:13:21.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:13:21.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:13:21.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:13:21.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:13:21.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:13:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:13:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.675467 -999.00  +12.70  13.89     97  +12.30 1 3 1 3 1   885    0 0.32 -3.48 ----- 13.9 13.9 297.4 21.5 13.7 -0.4 13.4 -0.2 13.2 -0.5 13.6 -0.2
2026-04-11T18:13:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:13:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:13:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.675467
2026-04-11T18:13:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:13:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:13:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:13:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:13:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:13:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:12:41', tmtdew=0.06835, humidity=99.4769, cloud=0.0, wind=23.4295, temperature=13.0352, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:12:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:13:21.990 [DEBUG] [Thread-174464] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:13:22.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:13:22.082 [DEBUG] [Thread-174467] [transport.py] [_log()] starting thread (client mode): 0xb0fb57b0
2026-04-11T18:13:22.082 [DEBUG] [Thread-174467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:13:22.096 [DEBUG] [Thread-174467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:13:22.096 [INFO] [Thread-174467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] client lang: <none>
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] server lang: <none>
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] kex follows: False
2026-04-11T18:13:22.104 [DEBUG] [Thread-174467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:13:22.105 [DEBUG] [Thread-174467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:13:22.105 [DEBUG] [Thread-174467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:13:22.105 [DEBUG] [Thread-174467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:13:22.105 [DEBUG] [Thread-174467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:13:22.105 [DEBUG] [Thread-174467] [transport.py] [_log()] Compression: none
2026-04-11T18:13:22.105 [DEBUG] [Thread-174467] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:13:22.163 [DEBUG] [Thread-174467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:13:22.164 [DEBUG] [Thread-174467] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:13:22.164 [DEBUG] [Thread-174467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:13:22.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:13:22.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:13:22.219 [DEBUG] [Thread-174467] [transport.py] [_log()] userauth is OK
2026-04-11T18:13:22.219 [DEBUG] [Thread-174467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:13:22.219 [DEBUG] [Thread-174467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:13:22.219 [DEBUG] [Thread-174467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:13:22.219 [DEBUG] [Thread-174467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:13:22.237 [INFO] [Thread-174467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:13:22.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:13:22.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:13:23.046 [DEBUG] [Thread-174467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:13:23.047 [DEBUG] [Thread-174467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:13:23.098 [DEBUG] [Thread-174467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:13:23.098 [DEBUG] [Thread-174467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:13:23.110 [DEBUG] [Thread-174467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:13:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:13:23.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-04-11T18:13:23.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:13:23.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:13:23.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:13:23.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:13:23.153 [DEBUG] [Thread-174467] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:13:34.974 [DEBUG] [Thread-174469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:42.589 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:42.591 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:50.029 [DEBUG] [Thread-174470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:13:53.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:13:53.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:13:53.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-04-11T18:13:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 13, 17), 0.0765, 99.7883, 0.0, 22.7088, 12.7174, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:13:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:13:17
2026-04-11T18:13:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:13:55.044 [DEBUG] [Thread-174471] [transport.py] [_log()] starting thread (client mode): 0xae562e30
2026-04-11T18:13:55.044 [DEBUG] [Thread-174471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:13:55.065 [DEBUG] [Thread-174471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:13:55.065 [INFO] [Thread-174471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:55.066 [DEBUG] [Thread-174471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] client lang: <none>
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] server lang: <none>
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] kex follows: False
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] Compression: none
2026-04-11T18:13:55.067 [DEBUG] [Thread-174471] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:13:55.078 [DEBUG] [Thread-174471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:13:55.078 [DEBUG] [Thread-174471] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:13:55.078 [DEBUG] [Thread-174471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:13:55.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:13:55.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:13:55.079 [DEBUG] [Thread-174471] [transport.py] [_log()] userauth is OK
2026-04-11T18:13:55.079 [DEBUG] [Thread-174471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:13:55.079 [DEBUG] [Thread-174471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:13:55.079 [DEBUG] [Thread-174471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:13:55.079 [DEBUG] [Thread-174471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:13:55.092 [INFO] [Thread-174471] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:13:55.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:13:55.748 [DEBUG] [Thread-174471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:13:55.749 [DEBUG] [Thread-174471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:13:55.749 [DEBUG] [Thread-174471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:13:55.789 [DEBUG] [Thread-174471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:13:55.789 [DEBUG] [Thread-174471] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:13:55.793 [DEBUG] [Thread-174471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:13:55.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:13:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:13:55.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:13:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:13:55.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:13:55.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:13:55.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:13:55.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:13:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:13:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.676161 -999.00  +12.70  15.49     97  +12.30 1 3 1 3 1   884    0 0.30 -3.40 ----- 15.5 15.5 275.2 22.8 13.6 -0.4 13.5 -0.5 13.2 -0.5 13.7 -0.5
2026-04-11T18:13:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:13:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:13:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.676161
2026-04-11T18:13:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:13:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:13:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:13:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:13:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:13:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:13:17', tmtdew=0.0765, humidity=99.7883, cloud=0.0, wind=22.7088, temperature=12.7174, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:13:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:13:55.823 [DEBUG] [Thread-174471] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:13:55.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:13:55.917 [DEBUG] [Thread-174474] [transport.py] [_log()] starting thread (client mode): 0xb0fb5b40
2026-04-11T18:13:55.917 [DEBUG] [Thread-174474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:13:55.931 [DEBUG] [Thread-174474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:13:55.931 [INFO] [Thread-174474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] client lang: <none>
2026-04-11T18:13:55.939 [DEBUG] [Thread-174474] [transport.py] [_log()] server lang: <none>
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] kex follows: False
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] Compression: none
2026-04-11T18:13:55.940 [DEBUG] [Thread-174474] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:13:55.999 [DEBUG] [Thread-174474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:13:56.000 [DEBUG] [Thread-174474] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:13:56.001 [DEBUG] [Thread-174474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:13:56.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:13:56.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:13:56.055 [DEBUG] [Thread-174474] [transport.py] [_log()] userauth is OK
2026-04-11T18:13:56.055 [DEBUG] [Thread-174474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:13:56.056 [DEBUG] [Thread-174474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:13:56.056 [DEBUG] [Thread-174474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:13:56.056 [DEBUG] [Thread-174474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:13:56.074 [INFO] [Thread-174474] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:13:56.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:13:56.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:13:56.922 [DEBUG] [Thread-174474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:13:56.922 [DEBUG] [Thread-174474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:13:56.970 [DEBUG] [Thread-174474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:13:56.970 [DEBUG] [Thread-174474] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:13:56.979 [DEBUG] [Thread-174474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:13:56.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:13:56.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-04-11T18:13:56.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:13:57.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:13:57.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:13:57.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:13:57.017 [DEBUG] [Thread-174474] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:14:05.067 [DEBUG] [Thread-174476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:14:20.118 [DEBUG] [Thread-174477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:14:20.729 [DEBUG] [Thread-174478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:14:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:14:27.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:14:27.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-04-11T18:14:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 13, 53), 0.06317, 99.5104, 0.0, 22.0889, 13.168, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:14:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:13:53
2026-04-11T18:14:28.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:14:28.825 [DEBUG] [Thread-174479] [transport.py] [_log()] starting thread (client mode): 0xb0fb6230
2026-04-11T18:14:28.825 [DEBUG] [Thread-174479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:14:28.844 [DEBUG] [Thread-174479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:14:28.844 [INFO] [Thread-174479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] client lang: <none>
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] server lang: <none>
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] kex follows: False
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] Compression: none
2026-04-11T18:14:28.848 [DEBUG] [Thread-174479] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:14:28.864 [DEBUG] [Thread-174479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:14:28.865 [DEBUG] [Thread-174479] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:14:28.865 [DEBUG] [Thread-174479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:14:28.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:14:28.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:14:28.868 [DEBUG] [Thread-174479] [transport.py] [_log()] userauth is OK
2026-04-11T18:14:28.868 [DEBUG] [Thread-174479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:14:28.868 [DEBUG] [Thread-174479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:14:28.868 [DEBUG] [Thread-174479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:14:28.869 [DEBUG] [Thread-174479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:14:28.893 [INFO] [Thread-174479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:14:28.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:14:29.536 [DEBUG] [Thread-174479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:14:29.536 [DEBUG] [Thread-174479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:14:29.536 [DEBUG] [Thread-174479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:14:29.577 [DEBUG] [Thread-174479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:14:29.577 [DEBUG] [Thread-174479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:14:29.581 [DEBUG] [Thread-174479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:14:29.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:14:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:14:29.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:14:29.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:14:29.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:14:29.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:14:29.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:14:29.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:14:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:14:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.676508 -999.00  +12.70  14.88     97  +12.30 1 3 1 3 1   883    0 0.31 -3.62 ----- 14.9 14.9 293.6 19.7 13.7 -0.7 13.4 -0.2 13.2 -0.5 13.6 -0.3
2026-04-11T18:14:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:14:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:14:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.676508
2026-04-11T18:14:29.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:14:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:14:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:14:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:14:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:14:29.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:13:53', tmtdew=0.06317, humidity=99.5104, cloud=0.0, wind=22.0889, temperature=13.168, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:14:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:14:29.608 [DEBUG] [Thread-174479] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:14:29.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:14:29.701 [DEBUG] [Thread-174482] [transport.py] [_log()] starting thread (client mode): 0xb0f55720
2026-04-11T18:14:29.701 [DEBUG] [Thread-174482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:14:29.716 [DEBUG] [Thread-174482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:14:29.716 [INFO] [Thread-174482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] client lang: <none>
2026-04-11T18:14:29.726 [DEBUG] [Thread-174482] [transport.py] [_log()] server lang: <none>
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] kex follows: False
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] Compression: none
2026-04-11T18:14:29.727 [DEBUG] [Thread-174482] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:14:29.783 [DEBUG] [Thread-174482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:14:29.783 [DEBUG] [Thread-174482] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:14:29.784 [DEBUG] [Thread-174482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:14:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:14:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:14:29.839 [DEBUG] [Thread-174482] [transport.py] [_log()] userauth is OK
2026-04-11T18:14:29.839 [DEBUG] [Thread-174482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:14:29.839 [DEBUG] [Thread-174482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:14:29.839 [DEBUG] [Thread-174482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:14:29.839 [DEBUG] [Thread-174482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:14:29.858 [INFO] [Thread-174482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:14:29.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:14:29.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:14:30.695 [DEBUG] [Thread-174482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:14:30.695 [DEBUG] [Thread-174482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:14:30.743 [DEBUG] [Thread-174482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:14:30.743 [DEBUG] [Thread-174482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:14:30.753 [DEBUG] [Thread-174482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:14:30.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:14:30.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-04-11T18:14:30.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-04-11T18:14:30.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:14:30.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:14:30.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:14:30.790 [DEBUG] [Thread-174482] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:14:35.157 [DEBUG] [Thread-174484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:14:42.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:14:42.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:14:50.213 [DEBUG] [Thread-174485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:00.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:15:00.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:15:00.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:15:02.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 14, 29), 0.076475, 99.7883, 0.0, 24.0494, 12.8006, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:15:02.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:14:29
2026-04-11T18:15:02.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:15:02.671 [DEBUG] [Thread-174486] [transport.py] [_log()] starting thread (client mode): 0xb0f56680
2026-04-11T18:15:02.671 [DEBUG] [Thread-174486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:15:02.691 [DEBUG] [Thread-174486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:15:02.691 [INFO] [Thread-174486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:15:02.694 [DEBUG] [Thread-174486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:15:02.694 [DEBUG] [Thread-174486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] client lang: <none>
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] server lang: <none>
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] kex follows: False
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] Compression: none
2026-04-11T18:15:02.695 [DEBUG] [Thread-174486] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:15:02.711 [DEBUG] [Thread-174486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:15:02.711 [DEBUG] [Thread-174486] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:15:02.711 [DEBUG] [Thread-174486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:15:02.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:15:02.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:15:02.712 [DEBUG] [Thread-174486] [transport.py] [_log()] userauth is OK
2026-04-11T18:15:02.712 [DEBUG] [Thread-174486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:15:02.712 [DEBUG] [Thread-174486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:15:02.712 [DEBUG] [Thread-174486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:15:02.712 [DEBUG] [Thread-174486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:15:02.722 [INFO] [Thread-174486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:15:02.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:15:03.395 [DEBUG] [Thread-174486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:15:03.395 [DEBUG] [Thread-174486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:15:03.396 [DEBUG] [Thread-174486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:15:03.436 [DEBUG] [Thread-174486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:15:03.436 [DEBUG] [Thread-174486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:15:03.440 [DEBUG] [Thread-174486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:15:03.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:15:03.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:15:03.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:15:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:15:03.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:15:03.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:15:03.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:15:03.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:15:03.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:15:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.676856 -999.00  +12.70  16.51     97  +12.30 1 3 1 3 1   883    0 0.31 -3.48 ----- 16.5 16.5 295.4 21.2 13.7 -0.5 13.5 -0.2 13.2 -0.5 13.6 -0.6
2026-04-11T18:15:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:15:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:15:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.676856
2026-04-11T18:15:03.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:15:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:15:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:15:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:15:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:15:03.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:14:29', tmtdew=0.076475, humidity=99.7883, cloud=0.0, wind=24.0494, temperature=12.8006, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:14:40.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:15:03.508 [DEBUG] [Thread-174486] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:15:03.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:15:03.597 [DEBUG] [Thread-174489] [transport.py] [_log()] starting thread (client mode): 0xb0f56110
2026-04-11T18:15:03.597 [DEBUG] [Thread-174489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:15:03.612 [DEBUG] [Thread-174489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:15:03.612 [INFO] [Thread-174489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] client lang: <none>
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] server lang: <none>
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] kex follows: False
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:15:03.620 [DEBUG] [Thread-174489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:15:03.621 [DEBUG] [Thread-174489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:15:03.621 [DEBUG] [Thread-174489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:15:03.621 [DEBUG] [Thread-174489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:15:03.621 [DEBUG] [Thread-174489] [transport.py] [_log()] Compression: none
2026-04-11T18:15:03.621 [DEBUG] [Thread-174489] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:15:03.679 [DEBUG] [Thread-174489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:15:03.679 [DEBUG] [Thread-174489] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:15:03.680 [DEBUG] [Thread-174489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:15:03.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:15:03.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:15:03.735 [DEBUG] [Thread-174489] [transport.py] [_log()] userauth is OK
2026-04-11T18:15:03.736 [DEBUG] [Thread-174489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:15:03.736 [DEBUG] [Thread-174489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:15:03.736 [DEBUG] [Thread-174489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:15:03.736 [DEBUG] [Thread-174489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:15:03.756 [INFO] [Thread-174489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:15:03.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:15:03.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:15:04.600 [DEBUG] [Thread-174489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:15:04.601 [DEBUG] [Thread-174489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:15:04.649 [DEBUG] [Thread-174489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:15:04.649 [DEBUG] [Thread-174489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:15:04.658 [DEBUG] [Thread-174489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:15:04.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:15: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-04-11T18:15: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-04-11T18:15:04.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:15:04.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:15:04.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:15:04.694 [DEBUG] [Thread-174489] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:15:05.253 [DEBUG] [Thread-174491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:20.303 [DEBUG] [Thread-174492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:20.800 [DEBUG] [Thread-174493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:34.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:15:34.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:15:34.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-04-11T18:15:35.340 [DEBUG] [Thread-174494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 15, 4), 0.08159, 99.7552, 0.0, 22.7441, 12.7508, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:15:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:15:04
2026-04-11T18:15:36.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:15:36.525 [DEBUG] [Thread-174495] [transport.py] [_log()] starting thread (client mode): 0xae561c90
2026-04-11T18:15:36.526 [DEBUG] [Thread-174495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:15:36.548 [DEBUG] [Thread-174495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:15:36.548 [INFO] [Thread-174495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:36.551 [DEBUG] [Thread-174495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] client lang: <none>
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] server lang: <none>
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] kex follows: False
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:15:36.552 [DEBUG] [Thread-174495] [transport.py] [_log()] Compression: none
2026-04-11T18:15:36.553 [DEBUG] [Thread-174495] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:15:36.572 [DEBUG] [Thread-174495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:15:36.573 [DEBUG] [Thread-174495] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:15:36.573 [DEBUG] [Thread-174495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:15:36.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:15:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:15:36.575 [DEBUG] [Thread-174495] [transport.py] [_log()] userauth is OK
2026-04-11T18:15:36.575 [DEBUG] [Thread-174495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:15:36.575 [DEBUG] [Thread-174495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:15:36.575 [DEBUG] [Thread-174495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:15:36.576 [DEBUG] [Thread-174495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:15:36.610 [INFO] [Thread-174495] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:15:36.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:15:37.215 [DEBUG] [Thread-174495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:15:37.215 [DEBUG] [Thread-174495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:15:37.215 [DEBUG] [Thread-174495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:15:37.257 [DEBUG] [Thread-174495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:15:37.257 [DEBUG] [Thread-174495] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:15:37.259 [DEBUG] [Thread-174495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:15:37.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:15:37.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:15:37.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:15:37.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:15:37.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:15:37.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:15:37.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.677202 -999.00  +12.60  23.16     97  +12.20 1 3 1 3 1   883    0 0.31 -3.53 ----- 23.2 23.2 299.0 28.5 13.7 -0.6 13.5 -0.3 13.2 -0.7 13.6 -0.6
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.677202
2026-04-11T18:15:37.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:15:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:15:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:15:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:15:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:15:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:15:04', tmtdew=0.08159, humidity=99.7552, cloud=0.0, wind=22.7441, temperature=12.7508, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:15:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:15:37.280 [DEBUG] [Thread-174495] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:15:37.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:15:37.365 [DEBUG] [Thread-174498] [transport.py] [_log()] starting thread (client mode): 0xb0fb5b70
2026-04-11T18:15:37.365 [DEBUG] [Thread-174498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:15:37.381 [DEBUG] [Thread-174498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:15:37.381 [INFO] [Thread-174498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:15:37.389 [DEBUG] [Thread-174498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:15:37.389 [DEBUG] [Thread-174498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:15:37.389 [DEBUG] [Thread-174498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] client lang: <none>
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] server lang: <none>
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] kex follows: False
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] Compression: none
2026-04-11T18:15:37.390 [DEBUG] [Thread-174498] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:15:37.451 [DEBUG] [Thread-174498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:15:37.452 [DEBUG] [Thread-174498] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:15:37.453 [DEBUG] [Thread-174498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:15:37.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:15:37.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:15:37.508 [DEBUG] [Thread-174498] [transport.py] [_log()] userauth is OK
2026-04-11T18:15:37.508 [DEBUG] [Thread-174498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:15:37.508 [DEBUG] [Thread-174498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:15:37.509 [DEBUG] [Thread-174498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:15:37.509 [DEBUG] [Thread-174498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:15:37.528 [INFO] [Thread-174498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:15:37.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:15:37.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:15:38.394 [DEBUG] [Thread-174498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:15:38.394 [DEBUG] [Thread-174498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:15:38.442 [DEBUG] [Thread-174498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:15:38.442 [DEBUG] [Thread-174498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:15:38.451 [DEBUG] [Thread-174498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:15:38.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:15:38.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:15:38.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:15:38.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:15:38.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:15:38.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:15:38.489 [DEBUG] [Thread-174498] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:15:42.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:42.880 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:15:50.377 [DEBUG] [Thread-174500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:05.430 [DEBUG] [Thread-174501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:08.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:16:08.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:16:08.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:16:09.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 15, 40), 0.07339, 99.4441, 0.0, 24.9818, 13.0354, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:16:09.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:15:40
2026-04-11T18:16:10.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:16:10.293 [DEBUG] [Thread-174502] [transport.py] [_log()] starting thread (client mode): 0xb0fb53c0
2026-04-11T18:16:10.293 [DEBUG] [Thread-174502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:16:10.313 [DEBUG] [Thread-174502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:16:10.314 [INFO] [Thread-174502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:16:10.317 [DEBUG] [Thread-174502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:16:10.317 [DEBUG] [Thread-174502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:16:10.317 [DEBUG] [Thread-174502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:16:10.317 [DEBUG] [Thread-174502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:10.317 [DEBUG] [Thread-174502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] client lang: <none>
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] server lang: <none>
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] kex follows: False
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:16:10.318 [DEBUG] [Thread-174502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:16:10.319 [DEBUG] [Thread-174502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:16:10.319 [DEBUG] [Thread-174502] [transport.py] [_log()] Compression: none
2026-04-11T18:16:10.319 [DEBUG] [Thread-174502] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:16:10.338 [DEBUG] [Thread-174502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:16:10.338 [DEBUG] [Thread-174502] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:16:10.338 [DEBUG] [Thread-174502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:16:10.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:16:10.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:16:10.339 [DEBUG] [Thread-174502] [transport.py] [_log()] userauth is OK
2026-04-11T18:16:10.339 [DEBUG] [Thread-174502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:16:10.339 [DEBUG] [Thread-174502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:16:10.339 [DEBUG] [Thread-174502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:16:10.339 [DEBUG] [Thread-174502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:16:10.353 [INFO] [Thread-174502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:16:10.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:16:10.994 [DEBUG] [Thread-174502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:16:10.994 [DEBUG] [Thread-174502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:16:10.994 [DEBUG] [Thread-174502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:16:11.035 [DEBUG] [Thread-174502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:16:11.036 [DEBUG] [Thread-174502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:16:11.039 [DEBUG] [Thread-174502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:16:11.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:16:11.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:16:11.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:16:11.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:16:11.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:16:11.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:16:11.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:16:11.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:16:11.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:16:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.677550 -999.00  +12.50  24.38     97  +12.10 1 3 1 3 1   882    0 0.33 -3.16 ----- 24.4 24.4 290.0 27.4 13.6 -0.6 13.4 -0.3 13.2 -0.6 13.6 -0.6
2026-04-11T18:16:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:16:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:16:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.677550
2026-04-11T18:16:11.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:16:11.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:16:11.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:16:11.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:16:11.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:16:11.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:15:40', tmtdew=0.07339, humidity=99.4441, cloud=0.0, wind=24.9818, temperature=13.0354, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:15:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:16:11.067 [DEBUG] [Thread-174502] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:16:11.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:16:11.171 [DEBUG] [Thread-174505] [transport.py] [_log()] starting thread (client mode): 0xb0f57040
2026-04-11T18:16:11.172 [DEBUG] [Thread-174505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:16:11.185 [DEBUG] [Thread-174505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:16:11.186 [INFO] [Thread-174505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:16:11.193 [DEBUG] [Thread-174505] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:16:11.193 [DEBUG] [Thread-174505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] client lang: <none>
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] server lang: <none>
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] kex follows: False
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] Compression: none
2026-04-11T18:16:11.194 [DEBUG] [Thread-174505] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:16:11.255 [DEBUG] [Thread-174505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:16:11.256 [DEBUG] [Thread-174505] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:16:11.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:16:11.257 [DEBUG] [Thread-174505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:16:11.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:16:11.312 [DEBUG] [Thread-174505] [transport.py] [_log()] userauth is OK
2026-04-11T18:16:11.312 [DEBUG] [Thread-174505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:16:11.313 [DEBUG] [Thread-174505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:16:11.313 [DEBUG] [Thread-174505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:16:11.313 [DEBUG] [Thread-174505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:16:11.332 [INFO] [Thread-174505] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:16:11.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:16:11.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:16:12.175 [DEBUG] [Thread-174505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:16:12.175 [DEBUG] [Thread-174505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:16:12.223 [DEBUG] [Thread-174505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:16:12.223 [DEBUG] [Thread-174505] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:16:12.233 [DEBUG] [Thread-174505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:16:12.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:16:12.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-04-11T18:16:12.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:16:12.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:16:12.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:16:12.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:16:12.270 [DEBUG] [Thread-174505] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:16:20.470 [DEBUG] [Thread-174507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:20.868 [DEBUG] [Thread-174508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:35.523 [DEBUG] [Thread-174509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:16:42.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:16:42.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-04-11T18:16:43.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:43.022 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:16:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 16, 16), 0.029025, 99.7718, 0.0, 20.0628, 12.6509, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:16:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:16:16
2026-04-11T18:16:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:16:44.112 [DEBUG] [Thread-174510] [transport.py] [_log()] starting thread (client mode): 0xb0f57010
2026-04-11T18:16:44.112 [DEBUG] [Thread-174510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:16:44.133 [DEBUG] [Thread-174510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:16:44.133 [INFO] [Thread-174510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:44.136 [DEBUG] [Thread-174510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] client lang: <none>
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] server lang: <none>
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] kex follows: False
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] Compression: none
2026-04-11T18:16:44.137 [DEBUG] [Thread-174510] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:16:44.154 [DEBUG] [Thread-174510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:16:44.155 [DEBUG] [Thread-174510] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:16:44.155 [DEBUG] [Thread-174510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:16:44.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:16:44.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:16:44.158 [DEBUG] [Thread-174510] [transport.py] [_log()] userauth is OK
2026-04-11T18:16:44.159 [DEBUG] [Thread-174510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:16:44.159 [DEBUG] [Thread-174510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:16:44.159 [DEBUG] [Thread-174510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:16:44.159 [DEBUG] [Thread-174510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:16:44.183 [INFO] [Thread-174510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:16:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:16:44.813 [DEBUG] [Thread-174510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:16:44.813 [DEBUG] [Thread-174510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:16:44.813 [DEBUG] [Thread-174510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:16:44.854 [DEBUG] [Thread-174510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:16:44.854 [DEBUG] [Thread-174510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:16:44.858 [DEBUG] [Thread-174510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:16:44.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:16:44.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:16:44.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:16:44.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:16:44.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:16:44.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:16:44.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:16:44.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:16:44.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:16:44.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.677897 -999.00  +12.50  21.74     97  +12.10 1 3 1 3 1   881    0 0.32 -3.40 ----- 21.7 21.7 298.2 28.3 13.6 -0.7 13.4 -0.3 13.1 -0.5 13.6 -0.5
2026-04-11T18:16:44.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:16:44.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:16:44.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.677897
2026-04-11T18:16:44.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:16:44.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:16:44.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:16:44.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:16:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:16:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:16:16', tmtdew=0.029025, humidity=99.7718, cloud=0.0, wind=20.0628, temperature=12.6509, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:16:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:16:44.890 [DEBUG] [Thread-174510] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:16:44.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:16:44.986 [DEBUG] [Thread-174513] [transport.py] [_log()] starting thread (client mode): 0xb0f54460
2026-04-11T18:16:44.986 [DEBUG] [Thread-174513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:16:45.005 [DEBUG] [Thread-174513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:16:45.005 [INFO] [Thread-174513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:16:45.013 [DEBUG] [Thread-174513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:16:45.014 [DEBUG] [Thread-174513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:16:45.014 [DEBUG] [Thread-174513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:16:45.014 [DEBUG] [Thread-174513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] client lang: <none>
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] server lang: <none>
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] kex follows: False
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] Compression: none
2026-04-11T18:16:45.015 [DEBUG] [Thread-174513] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:16:45.077 [DEBUG] [Thread-174513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:16:45.077 [DEBUG] [Thread-174513] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:16:45.078 [DEBUG] [Thread-174513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:16:45.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:16:45.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:16:45.136 [DEBUG] [Thread-174513] [transport.py] [_log()] userauth is OK
2026-04-11T18:16:45.136 [DEBUG] [Thread-174513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:16:45.136 [DEBUG] [Thread-174513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:16:45.136 [DEBUG] [Thread-174513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:16:45.136 [DEBUG] [Thread-174513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:16:45.156 [INFO] [Thread-174513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:16:45.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:16:45.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:16:45.997 [DEBUG] [Thread-174513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:16:45.997 [DEBUG] [Thread-174513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:16:46.045 [DEBUG] [Thread-174513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:16:46.045 [DEBUG] [Thread-174513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:16:46.054 [DEBUG] [Thread-174513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:16:46.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:16:46.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:16: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-04-11T18:16:46.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:16:46.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:16:46.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:16:46.091 [DEBUG] [Thread-174513] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:16:50.561 [DEBUG] [Thread-174515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:05.615 [DEBUG] [Thread-174516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:17:16.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:17:16.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-04-11T18:17:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 16, 51), 0.05807, 99.5437, 0.0, 24.4526, 13.0687, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:17:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:16:51
2026-04-11T18:17:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:17:17.893 [DEBUG] [Thread-174517] [transport.py] [_log()] starting thread (client mode): 0xae516f20
2026-04-11T18:17:17.893 [DEBUG] [Thread-174517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:17:17.912 [DEBUG] [Thread-174517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:17:17.912 [INFO] [Thread-174517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:17:17.915 [DEBUG] [Thread-174517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:17:17.915 [DEBUG] [Thread-174517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:17:17.915 [DEBUG] [Thread-174517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:17:17.915 [DEBUG] [Thread-174517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:17.915 [DEBUG] [Thread-174517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:17.915 [DEBUG] [Thread-174517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] client lang: <none>
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] server lang: <none>
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] kex follows: False
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] Compression: none
2026-04-11T18:17:17.916 [DEBUG] [Thread-174517] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:17:17.932 [DEBUG] [Thread-174517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:17:17.933 [DEBUG] [Thread-174517] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:17:17.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:17:17.933 [DEBUG] [Thread-174517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:17:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:17:17.935 [DEBUG] [Thread-174517] [transport.py] [_log()] userauth is OK
2026-04-11T18:17:17.936 [DEBUG] [Thread-174517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:17:17.936 [DEBUG] [Thread-174517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:17:17.936 [DEBUG] [Thread-174517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:17:17.936 [DEBUG] [Thread-174517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:17:17.957 [INFO] [Thread-174517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:17:17.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:17:18.599 [DEBUG] [Thread-174517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:17:18.599 [DEBUG] [Thread-174517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:17:18.600 [DEBUG] [Thread-174517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:17:18.640 [DEBUG] [Thread-174517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:17:18.641 [DEBUG] [Thread-174517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:17:18.644 [DEBUG] [Thread-174517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:17:18.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:17:18.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:17:18.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:17:18.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:17:18.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:17:18.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:17:18.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:17:18.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:17:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:17:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.678244 -999.00  +12.50  23.34     97  +12.10 1 3 1 3 1   881    0 0.32 -3.13 ----- 23.3 23.3 293.6 28.7 13.6 -0.5 13.4 -0.5 13.1 -0.9 13.5 -0.5
2026-04-11T18:17:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:17:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:17:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.678244
2026-04-11T18:17:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:17:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:17:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:17:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:17:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:17:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:16:51', tmtdew=0.05807, humidity=99.5437, cloud=0.0, wind=24.4526, temperature=13.0687, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:16:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:17:18.665 [DEBUG] [Thread-174517] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:17:18.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:17:18.760 [DEBUG] [Thread-174520] [transport.py] [_log()] starting thread (client mode): 0xae5a6470
2026-04-11T18:17:18.760 [DEBUG] [Thread-174520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:17:18.775 [DEBUG] [Thread-174520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:17:18.775 [INFO] [Thread-174520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] client lang: <none>
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] server lang: <none>
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] kex follows: False
2026-04-11T18:17:18.783 [DEBUG] [Thread-174520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:17:18.784 [DEBUG] [Thread-174520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:17:18.784 [DEBUG] [Thread-174520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:17:18.784 [DEBUG] [Thread-174520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:17:18.784 [DEBUG] [Thread-174520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:17:18.784 [DEBUG] [Thread-174520] [transport.py] [_log()] Compression: none
2026-04-11T18:17:18.784 [DEBUG] [Thread-174520] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:17:18.844 [DEBUG] [Thread-174520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:17:18.844 [DEBUG] [Thread-174520] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:17:18.845 [DEBUG] [Thread-174520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:17:18.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:17:18.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:17:18.899 [DEBUG] [Thread-174520] [transport.py] [_log()] userauth is OK
2026-04-11T18:17:18.900 [DEBUG] [Thread-174520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:17:18.900 [DEBUG] [Thread-174520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:17:18.900 [DEBUG] [Thread-174520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:17:18.900 [DEBUG] [Thread-174520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:17:18.924 [INFO] [Thread-174520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:17:18.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:17:18.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:17:19.777 [DEBUG] [Thread-174520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:17:19.777 [DEBUG] [Thread-174520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:17:19.826 [DEBUG] [Thread-174520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:17:19.826 [DEBUG] [Thread-174520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:17:19.835 [DEBUG] [Thread-174520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:17:19.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:17:19.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-04-11T18:17:19.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-04-11T18:17:19.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:17:19.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:17:19.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:17:19.872 [DEBUG] [Thread-174520] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:17:20.652 [DEBUG] [Thread-174522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:20.945 [DEBUG] [Thread-174523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:35.704 [DEBUG] [Thread-174524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:48.111 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:48.112 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:49.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:17:49.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:17:49.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-04-11T18:17:50.741 [DEBUG] [Thread-174525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:17:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 17, 26), 0.03414, 99.7387, 0.0, 20.2385, 12.6012, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:17:51.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:17:26
2026-04-11T18:17:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:17:51.705 [DEBUG] [Thread-174526] [transport.py] [_log()] starting thread (client mode): 0xae561210
2026-04-11T18:17:51.706 [DEBUG] [Thread-174526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:17:51.720 [DEBUG] [Thread-174526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:17:51.720 [INFO] [Thread-174526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] client lang: <none>
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] server lang: <none>
2026-04-11T18:17:51.723 [DEBUG] [Thread-174526] [transport.py] [_log()] kex follows: False
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] Compression: none
2026-04-11T18:17:51.724 [DEBUG] [Thread-174526] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:17:51.741 [DEBUG] [Thread-174526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:17:51.741 [DEBUG] [Thread-174526] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:17:51.741 [DEBUG] [Thread-174526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:17:51.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:17:51.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:17:51.743 [DEBUG] [Thread-174526] [transport.py] [_log()] userauth is OK
2026-04-11T18:17:51.743 [DEBUG] [Thread-174526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:17:51.743 [DEBUG] [Thread-174526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:17:51.743 [DEBUG] [Thread-174526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:17:51.743 [DEBUG] [Thread-174526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:17:51.761 [INFO] [Thread-174526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:17:51.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:17:52.520 [DEBUG] [Thread-174526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:17:52.520 [DEBUG] [Thread-174526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:17:52.520 [DEBUG] [Thread-174526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:17:52.561 [DEBUG] [Thread-174526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:17:52.561 [DEBUG] [Thread-174526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:17:52.565 [DEBUG] [Thread-174526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:17:52.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:17:52.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:17:52.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:17:52.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:17:52.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:17:52.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:17:52.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:17:52.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:17:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:17:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.678593 -999.00  +12.50  21.96     97  +12.10 1 3 1 3 1   880    0 0.31 -3.22 ----- 22.0 22.0 295.2 25.2 13.6 -0.6 13.3 -0.4 13.2 -0.5 13.5 -0.5
2026-04-11T18:17:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:17:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:17:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.678593
2026-04-11T18:17:52.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:17:52.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:17:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:17:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:17:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:17:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:17:26', tmtdew=0.03414, humidity=99.7387, cloud=0.0, wind=20.2385, temperature=12.6012, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:17:10.435', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:17:52.592 [DEBUG] [Thread-174526] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:17:52.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:17:52.685 [DEBUG] [Thread-174529] [transport.py] [_log()] starting thread (client mode): 0xae516e00
2026-04-11T18:17:52.685 [DEBUG] [Thread-174529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:17:52.699 [DEBUG] [Thread-174529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:17:52.699 [INFO] [Thread-174529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:17:52.706 [DEBUG] [Thread-174529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] client lang: <none>
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] server lang: <none>
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] kex follows: False
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] Compression: none
2026-04-11T18:17:52.707 [DEBUG] [Thread-174529] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:17:52.772 [DEBUG] [Thread-174529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:17:52.773 [DEBUG] [Thread-174529] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:17:52.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:17:52.774 [DEBUG] [Thread-174529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:17:52.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:17:52.828 [DEBUG] [Thread-174529] [transport.py] [_log()] userauth is OK
2026-04-11T18:17:52.828 [DEBUG] [Thread-174529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:17:52.828 [DEBUG] [Thread-174529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:17:52.829 [DEBUG] [Thread-174529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:17:52.829 [DEBUG] [Thread-174529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:17:52.848 [INFO] [Thread-174529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:17:52.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:17:52.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:17:53.683 [DEBUG] [Thread-174529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:17:53.683 [DEBUG] [Thread-174529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:17:53.731 [DEBUG] [Thread-174529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:17:53.731 [DEBUG] [Thread-174529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:17:53.741 [DEBUG] [Thread-174529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:17:53.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:17:53.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-04-11T18:17:53.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-04-11T18:17:53.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:17:53.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:17:53.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:17:53.779 [DEBUG] [Thread-174529] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:18:05.781 [DEBUG] [Thread-174531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:20.839 [DEBUG] [Thread-174532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:20.996 [DEBUG] [Thread-174533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:18:23.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:18:23.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-04-11T18:18:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 18, 2), 0.02904, 99.7719, 0.0, 20.4502, 12.6178, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:18:25.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:18:02
2026-04-11T18:18:25.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:18:25.663 [DEBUG] [Thread-174534] [transport.py] [_log()] starting thread (client mode): 0xae50a170
2026-04-11T18:18:25.663 [DEBUG] [Thread-174534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:18:25.684 [DEBUG] [Thread-174534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:18:25.684 [INFO] [Thread-174534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] client lang: <none>
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] server lang: <none>
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] kex follows: False
2026-04-11T18:18:25.687 [DEBUG] [Thread-174534] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:18:25.688 [DEBUG] [Thread-174534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:18:25.688 [DEBUG] [Thread-174534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:18:25.688 [DEBUG] [Thread-174534] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:18:25.688 [DEBUG] [Thread-174534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:18:25.688 [DEBUG] [Thread-174534] [transport.py] [_log()] Compression: none
2026-04-11T18:18:25.688 [DEBUG] [Thread-174534] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:18:25.707 [DEBUG] [Thread-174534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:18:25.707 [DEBUG] [Thread-174534] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:18:25.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:18:25.708 [DEBUG] [Thread-174534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:18:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:18:25.711 [DEBUG] [Thread-174534] [transport.py] [_log()] userauth is OK
2026-04-11T18:18:25.711 [DEBUG] [Thread-174534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:18:25.711 [DEBUG] [Thread-174534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:18:25.711 [DEBUG] [Thread-174534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:18:25.711 [DEBUG] [Thread-174534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:18:25.735 [INFO] [Thread-174534] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:18:25.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:18:26.545 [DEBUG] [Thread-174534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:18:26.545 [DEBUG] [Thread-174534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:18:26.546 [DEBUG] [Thread-174534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:18:26.586 [DEBUG] [Thread-174534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:18:26.587 [DEBUG] [Thread-174534] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:18:26.590 [DEBUG] [Thread-174534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:18:26.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:18:26.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:18:26.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:18:26.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:18:26.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:18:26.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:18:26.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:18:26.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:18:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:18:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.678939 -999.00  +12.50  19.09     97  +12.10 1 3 1 3 1   879    0 0.31 -3.32 ----- 19.1 19.1 293.6 26.8 13.6 -0.5 13.4 -0.4 13.1 -0.5 13.5 -0.6
2026-04-11T18:18:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:18:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:18:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.678939
2026-04-11T18:18:26.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:18:26.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:18:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:18:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:18:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:18:26.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:18:02', tmtdew=0.02904, humidity=99.7719, cloud=0.0, wind=20.4502, temperature=12.6178, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:17:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:18:26.618 [DEBUG] [Thread-174534] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:18:26.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:18:26.711 [DEBUG] [Thread-174537] [transport.py] [_log()] starting thread (client mode): 0xae50a050
2026-04-11T18:18:26.711 [DEBUG] [Thread-174537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:18:26.726 [DEBUG] [Thread-174537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:18:26.727 [INFO] [Thread-174537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:18:26.734 [DEBUG] [Thread-174537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:18:26.734 [DEBUG] [Thread-174537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:18:26.734 [DEBUG] [Thread-174537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] client lang: <none>
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] server lang: <none>
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] kex follows: False
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] Compression: none
2026-04-11T18:18:26.735 [DEBUG] [Thread-174537] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:18:26.800 [DEBUG] [Thread-174537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:18:26.800 [DEBUG] [Thread-174537] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:18:26.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:18:26.802 [DEBUG] [Thread-174537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:18:26.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:18:26.856 [DEBUG] [Thread-174537] [transport.py] [_log()] userauth is OK
2026-04-11T18:18:26.856 [DEBUG] [Thread-174537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:18:26.856 [DEBUG] [Thread-174537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:18:26.856 [DEBUG] [Thread-174537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:18:26.856 [DEBUG] [Thread-174537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:18:26.875 [INFO] [Thread-174537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:18:26.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:18:26.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:18:27.751 [DEBUG] [Thread-174537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:18:27.752 [DEBUG] [Thread-174537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:18:27.800 [DEBUG] [Thread-174537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:18:27.801 [DEBUG] [Thread-174537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:18:27.809 [DEBUG] [Thread-174537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:18:27.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:18:27.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-04-11T18:18:27.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-04-11T18:18:27.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:18:27.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:18:27.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:18:27.842 [DEBUG] [Thread-174537] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:18:35.880 [DEBUG] [Thread-174539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:50.934 [DEBUG] [Thread-174540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:53.783 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:53.784 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:18:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:18:57.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:18:57.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-04-11T18:18:59.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 18, 37), 0.07847, 99.4112, 0.0, 25.9697, 13.0024, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:18:59.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:18:37
2026-04-11T18:18:59.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:18:59.663 [DEBUG] [Thread-174541] [transport.py] [_log()] starting thread (client mode): 0xb0fea470
2026-04-11T18:18:59.663 [DEBUG] [Thread-174541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:18:59.683 [DEBUG] [Thread-174541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:18:59.684 [INFO] [Thread-174541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:18:59.687 [DEBUG] [Thread-174541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:18:59.687 [DEBUG] [Thread-174541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:18:59.687 [DEBUG] [Thread-174541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:18:59.687 [DEBUG] [Thread-174541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:18:59.687 [DEBUG] [Thread-174541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:18:59.687 [DEBUG] [Thread-174541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] client lang: <none>
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] server lang: <none>
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] kex follows: False
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:18:59.688 [DEBUG] [Thread-174541] [transport.py] [_log()] Compression: none
2026-04-11T18:18:59.689 [DEBUG] [Thread-174541] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:18:59.698 [DEBUG] [Thread-174541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:18:59.699 [DEBUG] [Thread-174541] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:18:59.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:18:59.700 [DEBUG] [Thread-174541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:18:59.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:18:59.741 [DEBUG] [Thread-174541] [transport.py] [_log()] userauth is OK
2026-04-11T18:18:59.741 [DEBUG] [Thread-174541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:18:59.741 [DEBUG] [Thread-174541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:18:59.741 [DEBUG] [Thread-174541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:18:59.741 [DEBUG] [Thread-174541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:18:59.778 [INFO] [Thread-174541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:18:59.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:19:00.599 [DEBUG] [Thread-174541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:19:00.599 [DEBUG] [Thread-174541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:19:00.600 [DEBUG] [Thread-174541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:19:00.640 [DEBUG] [Thread-174541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:19:00.640 [DEBUG] [Thread-174541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:19:00.642 [DEBUG] [Thread-174541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:19:00.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:19:00.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:19:00.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:19:00.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:19:00.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:19:00.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:19:00.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.679633 -999.00  +12.50  19.24     97  +12.10 1 3 1 3 1   877    0 0.33 -2.92 ----- 19.2 19.2 291.2 26.3 13.6 -0.5 13.4 -0.6 13.1 -0.5 13.5 -0.6
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.679633
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:19:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:18:37', tmtdew=0.07847, humidity=99.4112, cloud=0.0, wind=25.9697, temperature=13.0024, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:18:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:19:00.663 [DEBUG] [Thread-174541] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:19:00.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:19:00.744 [DEBUG] [Thread-174544] [transport.py] [_log()] starting thread (client mode): 0xae516290
2026-04-11T18:19:00.744 [DEBUG] [Thread-174544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:19:00.759 [DEBUG] [Thread-174544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:19:00.759 [INFO] [Thread-174544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:19:00.767 [DEBUG] [Thread-174544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:19:00.767 [DEBUG] [Thread-174544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:19:00.767 [DEBUG] [Thread-174544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:19:00.767 [DEBUG] [Thread-174544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:19:00.767 [DEBUG] [Thread-174544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:19:00.767 [DEBUG] [Thread-174544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] client lang: <none>
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] server lang: <none>
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] kex follows: False
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] Compression: none
2026-04-11T18:19:00.768 [DEBUG] [Thread-174544] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:19:00.824 [DEBUG] [Thread-174544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:19:00.825 [DEBUG] [Thread-174544] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:19:00.825 [DEBUG] [Thread-174544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:19:00.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:19:00.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:19:00.884 [DEBUG] [Thread-174544] [transport.py] [_log()] userauth is OK
2026-04-11T18:19:00.884 [DEBUG] [Thread-174544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:19:00.884 [DEBUG] [Thread-174544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:19:00.884 [DEBUG] [Thread-174544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:19:00.884 [DEBUG] [Thread-174544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:19:00.903 [INFO] [Thread-174544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:19:00.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:19:00.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:19:01.724 [DEBUG] [Thread-174544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:19:01.725 [DEBUG] [Thread-174544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:19:01.772 [DEBUG] [Thread-174544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:19:01.772 [DEBUG] [Thread-174544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:19:01.781 [DEBUG] [Thread-174544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:19:01.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:19:01.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:19:01.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:19:01.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:19:01.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:19:01.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:19:01.818 [DEBUG] [Thread-174544] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:19:05.974 [DEBUG] [Thread-174546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:19:21.027 [DEBUG] [Thread-174547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:19:21.071 [DEBUG] [Thread-174548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:19:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:19:31.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:19:31.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-04-11T18:19:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 19, 12), 0.089245, 99.7056, 0.0, 24.9851, 12.5515, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:19:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:19:12
2026-04-11T18:19:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:19:33.694 [DEBUG] [Thread-174549] [transport.py] [_log()] starting thread (client mode): 0xb0fea2c0
2026-04-11T18:19:33.694 [DEBUG] [Thread-174549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:19:33.714 [DEBUG] [Thread-174549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:19:33.714 [INFO] [Thread-174549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] client lang: <none>
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] server lang: <none>
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] kex follows: False
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] Compression: none
2026-04-11T18:19:33.718 [DEBUG] [Thread-174549] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:19:33.735 [DEBUG] [Thread-174549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:19:33.736 [DEBUG] [Thread-174549] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:19:33.736 [DEBUG] [Thread-174549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:19:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:19:33.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:19:33.738 [DEBUG] [Thread-174549] [transport.py] [_log()] userauth is OK
2026-04-11T18:19:33.739 [DEBUG] [Thread-174549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:19:33.739 [DEBUG] [Thread-174549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:19:33.739 [DEBUG] [Thread-174549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:19:33.739 [DEBUG] [Thread-174549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:19:33.776 [INFO] [Thread-174549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:19:33.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:19:34.562 [DEBUG] [Thread-174549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:19:34.562 [DEBUG] [Thread-174549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:19:34.563 [DEBUG] [Thread-174549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:19:34.603 [DEBUG] [Thread-174549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:19:34.604 [DEBUG] [Thread-174549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:19:34.606 [DEBUG] [Thread-174549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:19:34.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:19:34.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:19:34.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:19:34.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:19:34.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:19:34.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:19:34.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:19:34.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:19:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:19:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.679981 -999.00  +12.50  19.94     97  +12.10 1 3 1 3 1   876    0 0.32 -2.84 ----- 19.9 19.9 294.4 26.0 13.6 -0.5 13.4 -0.6 13.1 -0.4 13.5 -0.5
2026-04-11T18:19:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:19:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:19:34.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.679981
2026-04-11T18:19:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:19:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:19:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:19:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:19:34.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:19:34.627 [DEBUG] [Thread-174549] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:19:34.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:19:12', tmtdew=0.089245, humidity=99.7056, cloud=0.0, wind=24.9851, temperature=12.5515, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:19:10.358', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:19:34.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:19:34.721 [DEBUG] [Thread-174552] [transport.py] [_log()] starting thread (client mode): 0xb0f57c40
2026-04-11T18:19:34.721 [DEBUG] [Thread-174552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:19:34.736 [DEBUG] [Thread-174552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:19:34.736 [INFO] [Thread-174552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:19:34.744 [DEBUG] [Thread-174552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:19:34.744 [DEBUG] [Thread-174552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:19:34.744 [DEBUG] [Thread-174552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:19:34.744 [DEBUG] [Thread-174552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:19:34.744 [DEBUG] [Thread-174552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:19:34.744 [DEBUG] [Thread-174552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] client lang: <none>
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] server lang: <none>
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] kex follows: False
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:19:34.745 [DEBUG] [Thread-174552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:19:34.746 [DEBUG] [Thread-174552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:19:34.746 [DEBUG] [Thread-174552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:19:34.746 [DEBUG] [Thread-174552] [transport.py] [_log()] Compression: none
2026-04-11T18:19:34.746 [DEBUG] [Thread-174552] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:19:34.804 [DEBUG] [Thread-174552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:19:34.805 [DEBUG] [Thread-174552] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:19:34.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:19:34.806 [DEBUG] [Thread-174552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:19:34.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:19:34.863 [DEBUG] [Thread-174552] [transport.py] [_log()] userauth is OK
2026-04-11T18:19:34.864 [DEBUG] [Thread-174552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:19:34.864 [DEBUG] [Thread-174552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:19:34.864 [DEBUG] [Thread-174552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:19:34.864 [DEBUG] [Thread-174552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:19:34.888 [INFO] [Thread-174552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:19:34.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:19:34.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:19:35.714 [DEBUG] [Thread-174552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:19:35.714 [DEBUG] [Thread-174552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:19:35.762 [DEBUG] [Thread-174552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:19:35.762 [DEBUG] [Thread-174552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:19:35.771 [DEBUG] [Thread-174552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:19:35.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:19:35.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-04-11T18:19:35.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:19:35.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:19:35.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:19:35.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:19:35.810 [DEBUG] [Thread-174552] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:19:36.066 [DEBUG] [Thread-174554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:19:51.125 [DEBUG] [Thread-174555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:19:58.919 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:19:58.920 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:20:05.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:20:05.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:20:05.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-04-11T18:20:06.163 [DEBUG] [Thread-174556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:20:07.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 19, 48), 0.05296, 99.577, 0.0, 23.8882, 13.0356, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:20:07.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:19:48
2026-04-11T18:20:07.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:20:07.638 [DEBUG] [Thread-174557] [transport.py] [_log()] starting thread (client mode): 0xae5a53c0
2026-04-11T18:20:07.638 [DEBUG] [Thread-174557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:20:07.654 [DEBUG] [Thread-174557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:20:07.654 [INFO] [Thread-174557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:20:07.659 [DEBUG] [Thread-174557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] client lang: <none>
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] server lang: <none>
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] kex follows: False
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:20:07.660 [DEBUG] [Thread-174557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:20:07.661 [DEBUG] [Thread-174557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:20:07.661 [DEBUG] [Thread-174557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:20:07.661 [DEBUG] [Thread-174557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:20:07.661 [DEBUG] [Thread-174557] [transport.py] [_log()] Compression: none
2026-04-11T18:20:07.661 [DEBUG] [Thread-174557] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:20:07.673 [DEBUG] [Thread-174557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:20:07.674 [DEBUG] [Thread-174557] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:20:07.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:20:07.675 [DEBUG] [Thread-174557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:20:07.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:20:07.677 [DEBUG] [Thread-174557] [transport.py] [_log()] userauth is OK
2026-04-11T18:20:07.677 [DEBUG] [Thread-174557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:20:07.677 [DEBUG] [Thread-174557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:20:07.677 [DEBUG] [Thread-174557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:20:07.677 [DEBUG] [Thread-174557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:20:07.701 [INFO] [Thread-174557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:20:07.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:20:09.358 [DEBUG] [Thread-174557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:20:09.358 [DEBUG] [Thread-174557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:20:09.359 [DEBUG] [Thread-174557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:20:09.399 [DEBUG] [Thread-174557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:20:09.399 [DEBUG] [Thread-174557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:20:09.402 [DEBUG] [Thread-174557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:20:09.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:20:09.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:20:09.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:20:09.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:20:09.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:20:09.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:20:09.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:20:09.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:20:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:20:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.680328 -999.00  +12.50  15.56     97  +12.10 1 3 1 3 1   875    0 0.32 -3.09 ----- 15.6 15.6 290.4 23.1 13.6 -0.4 13.4 -0.5 13.1 -0.5 13.5 -0.3
2026-04-11T18:20:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:20:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:20:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.680328
2026-04-11T18:20:09.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:20:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:20:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:20:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:20:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:20:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:19:48', tmtdew=0.05296, humidity=99.577, cloud=0.0, wind=23.8882, temperature=13.0356, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:19:40.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:20:09.662 [DEBUG] [Thread-174557] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:20: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-04-11T18:20:09.760 [DEBUG] [Thread-174560] [transport.py] [_log()] starting thread (client mode): 0xae5a7550
2026-04-11T18:20:09.760 [DEBUG] [Thread-174560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:20:09.775 [DEBUG] [Thread-174560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:20:09.775 [INFO] [Thread-174560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:20:09.782 [DEBUG] [Thread-174560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] client lang: <none>
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] server lang: <none>
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] kex follows: False
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:20:09.783 [DEBUG] [Thread-174560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:20:09.784 [DEBUG] [Thread-174560] [transport.py] [_log()] Compression: none
2026-04-11T18:20:09.784 [DEBUG] [Thread-174560] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:20:09.840 [DEBUG] [Thread-174560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:20:09.840 [DEBUG] [Thread-174560] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:20:09.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:20:09.841 [DEBUG] [Thread-174560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:20:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:20:09.895 [DEBUG] [Thread-174560] [transport.py] [_log()] userauth is OK
2026-04-11T18:20:09.896 [DEBUG] [Thread-174560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:20:09.896 [DEBUG] [Thread-174560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:20:09.896 [DEBUG] [Thread-174560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:20:09.896 [DEBUG] [Thread-174560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:20:09.915 [INFO] [Thread-174560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:20: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-04-11T18:20:09.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:20:10.733 [DEBUG] [Thread-174560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:20:10.734 [DEBUG] [Thread-174560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:20:10.781 [DEBUG] [Thread-174560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:20:10.781 [DEBUG] [Thread-174560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:20:10.790 [DEBUG] [Thread-174560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:20:10.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:20:10.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:20:10.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:20:10.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:20:10.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:20:10.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:20:10.825 [DEBUG] [Thread-174560] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:20:21.128 [DEBUG] [Thread-174562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:20:21.200 [DEBUG] [Thread-174563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:20:36.251 [DEBUG] [Thread-174564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:20:40.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:20:40.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:20:40.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-04-11T18:20:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 20, 23), 0.02392, 99.8051, 0.0, 23.8914, 12.651, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:20:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:20:23
2026-04-11T18:20:42.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:20:42.648 [DEBUG] [Thread-174565] [transport.py] [_log()] starting thread (client mode): 0xb0feb850
2026-04-11T18:20:42.648 [DEBUG] [Thread-174565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:20:42.668 [DEBUG] [Thread-174565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:20:42.668 [INFO] [Thread-174565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] client lang: <none>
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] server lang: <none>
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] kex follows: False
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] Compression: none
2026-04-11T18:20:42.671 [DEBUG] [Thread-174565] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:20:42.688 [DEBUG] [Thread-174565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:20:42.689 [DEBUG] [Thread-174565] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:20:42.698 [DEBUG] [Thread-174565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:20:42.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:20:42.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:20:42.699 [DEBUG] [Thread-174565] [transport.py] [_log()] userauth is OK
2026-04-11T18:20:42.700 [DEBUG] [Thread-174565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:20:42.700 [DEBUG] [Thread-174565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:20:42.700 [DEBUG] [Thread-174565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:20:42.700 [DEBUG] [Thread-174565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:20:42.724 [INFO] [Thread-174565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:20:42.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:20:43.501 [DEBUG] [Thread-174565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:20:43.501 [DEBUG] [Thread-174565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:20:43.501 [DEBUG] [Thread-174565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:20:43.542 [DEBUG] [Thread-174565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:20:43.542 [DEBUG] [Thread-174565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:20:43.546 [DEBUG] [Thread-174565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:20:43.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:20:43.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:20:43.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:20:43.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:20:43.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:20:43.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:20:43.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:20:43.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:20:43.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:20:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.680675 -999.00  +12.50  17.57     97  +12.10 1 3 1 3 1   874    0 0.31 -3.58 ----- 17.6 17.6 289.9 23.3 13.6 -0.7 13.4 -0.6 13.1 -0.6 13.5 -0.2
2026-04-11T18:20:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:20:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:20:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.680675
2026-04-11T18:20:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:20:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:20:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:20:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:20:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:20:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:20:23', tmtdew=0.02392, humidity=99.8051, cloud=0.0, wind=23.8914, temperature=12.651, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:20:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:20:43.576 [DEBUG] [Thread-174565] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:20:43.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:20:43.668 [DEBUG] [Thread-174568] [transport.py] [_log()] starting thread (client mode): 0xae514b20
2026-04-11T18:20:43.668 [DEBUG] [Thread-174568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:20:43.683 [DEBUG] [Thread-174568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:20:43.683 [INFO] [Thread-174568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] client lang: <none>
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] server lang: <none>
2026-04-11T18:20:43.691 [DEBUG] [Thread-174568] [transport.py] [_log()] kex follows: False
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] Compression: none
2026-04-11T18:20:43.692 [DEBUG] [Thread-174568] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:20:43.747 [DEBUG] [Thread-174568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:20:43.748 [DEBUG] [Thread-174568] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:20:43.748 [DEBUG] [Thread-174568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:20:43.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:20:43.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:20:43.804 [DEBUG] [Thread-174568] [transport.py] [_log()] userauth is OK
2026-04-11T18:20:43.804 [DEBUG] [Thread-174568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:20:43.804 [DEBUG] [Thread-174568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:20:43.804 [DEBUG] [Thread-174568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:20:43.804 [DEBUG] [Thread-174568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:20:43.828 [INFO] [Thread-174568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:20:43.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:20:43.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:20:44.659 [DEBUG] [Thread-174568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:20:44.659 [DEBUG] [Thread-174568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:20:44.707 [DEBUG] [Thread-174568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:20:44.707 [DEBUG] [Thread-174568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:20:44.716 [DEBUG] [Thread-174568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:20:44.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:20:44.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-04-11T18:20:44.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-04-11T18:20:44.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:20:44.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:20:44.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:20:44.754 [DEBUG] [Thread-174568] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:20:51.290 [DEBUG] [Thread-174570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:04.924 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:04.926 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:06.347 [DEBUG] [Thread-174571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:14.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:21:14.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:21:14.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-04-11T18:21:16.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 20, 59), 0.073935, 99.8051, 0.0, 21.7908, 12.6678, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:21:16.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:20:59
2026-04-11T18:21:16.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:21:16.603 [DEBUG] [Thread-174572] [transport.py] [_log()] starting thread (client mode): 0xae50a710
2026-04-11T18:21:16.604 [DEBUG] [Thread-174572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:21:16.624 [DEBUG] [Thread-174572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:21:16.624 [INFO] [Thread-174572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] client lang: <none>
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] server lang: <none>
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] kex follows: False
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:21:16.627 [DEBUG] [Thread-174572] [transport.py] [_log()] Compression: none
2026-04-11T18:21:16.628 [DEBUG] [Thread-174572] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:21:16.646 [DEBUG] [Thread-174572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:21:16.647 [DEBUG] [Thread-174572] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:21:16.647 [DEBUG] [Thread-174572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:21:16.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:21:16.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:21:16.689 [DEBUG] [Thread-174572] [transport.py] [_log()] userauth is OK
2026-04-11T18:21:16.690 [DEBUG] [Thread-174572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:21:16.690 [DEBUG] [Thread-174572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:21:16.690 [DEBUG] [Thread-174572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:21:16.690 [DEBUG] [Thread-174572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:21:16.721 [INFO] [Thread-174572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:21:16.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:21:17.522 [DEBUG] [Thread-174572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:21:17.522 [DEBUG] [Thread-174572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:21:17.523 [DEBUG] [Thread-174572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:21:17.563 [DEBUG] [Thread-174572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:21:17.564 [DEBUG] [Thread-174572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:21:17.567 [DEBUG] [Thread-174572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:21:17.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:21:17.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:21:17.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:21:17.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:21:17.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:21:17.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:21:17.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:21:17.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:21:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:21:17.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.681022 -999.00  +12.60  16.65     97  +12.20 1 3 1 3 1   872    0 0.31 -3.15 ----- 16.6 16.6 298.6 21.5 13.6 -0.8 13.4 -0.4 13.1 -0.5 13.5 -0.2
2026-04-11T18:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.681022
2026-04-11T18:21:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:21:17.593 [DEBUG] [Thread-174572] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:21:17.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:21:17.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:20:59', tmtdew=0.073935, humidity=99.8051, cloud=0.0, wind=21.7908, temperature=12.6678, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:20:40.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:21:17.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:21:17.683 [DEBUG] [Thread-174575] [transport.py] [_log()] starting thread (client mode): 0xb0f56c50
2026-04-11T18:21:17.683 [DEBUG] [Thread-174575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:21:17.698 [DEBUG] [Thread-174575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:21:17.698 [INFO] [Thread-174575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] client lang: <none>
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] server lang: <none>
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] kex follows: False
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] Compression: none
2026-04-11T18:21:17.705 [DEBUG] [Thread-174575] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:21:17.763 [DEBUG] [Thread-174575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:21:17.763 [DEBUG] [Thread-174575] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:21:17.764 [DEBUG] [Thread-174575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:21:17.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:21:17.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:21:17.819 [DEBUG] [Thread-174575] [transport.py] [_log()] userauth is OK
2026-04-11T18:21:17.819 [DEBUG] [Thread-174575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:21:17.819 [DEBUG] [Thread-174575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:21:17.819 [DEBUG] [Thread-174575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:21:17.819 [DEBUG] [Thread-174575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:21:17.837 [INFO] [Thread-174575] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:21:17.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:21:17.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:21:18.698 [DEBUG] [Thread-174575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:21:18.699 [DEBUG] [Thread-174575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:21:18.746 [DEBUG] [Thread-174575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:21:18.747 [DEBUG] [Thread-174575] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:21:18.756 [DEBUG] [Thread-174575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:21:18.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:21:18.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:21:18.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:21:18.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:21:18.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:21:18.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:21:18.793 [DEBUG] [Thread-174575] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:21:21.187 [DEBUG] [Thread-174577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:21.383 [DEBUG] [Thread-174578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:36.434 [DEBUG] [Thread-174579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:48.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:21:48.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:21:48.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-04-11T18:21:50.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 21, 35), 0.05295, 99.577, 0.0, 25.4052, 13.0688, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:21:50.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:21:35
2026-04-11T18:21:50.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:21:50.637 [DEBUG] [Thread-174580] [transport.py] [_log()] starting thread (client mode): 0xae50b250
2026-04-11T18:21:50.637 [DEBUG] [Thread-174580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:21:50.656 [DEBUG] [Thread-174580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:21:50.656 [INFO] [Thread-174580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] client lang: <none>
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] server lang: <none>
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] kex follows: False
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] Compression: none
2026-04-11T18:21:50.660 [DEBUG] [Thread-174580] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:21:50.677 [DEBUG] [Thread-174580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:21:50.677 [DEBUG] [Thread-174580] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:21:50.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:21:50.678 [DEBUG] [Thread-174580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:21:50.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:21:50.680 [DEBUG] [Thread-174580] [transport.py] [_log()] userauth is OK
2026-04-11T18:21:50.680 [DEBUG] [Thread-174580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:21:50.681 [DEBUG] [Thread-174580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:21:50.681 [DEBUG] [Thread-174580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:21:50.681 [DEBUG] [Thread-174580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:21:50.699 [INFO] [Thread-174580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:21:50.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:21:51.422 [DEBUG] [Thread-174580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:21:51.423 [DEBUG] [Thread-174580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:21:51.423 [DEBUG] [Thread-174580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:21:51.465 [DEBUG] [Thread-174580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:21:51.465 [DEBUG] [Thread-174580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:21:51.469 [DEBUG] [Thread-174580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:21:51.472 [DEBUG] [Thread-174582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:21:51.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:21:51.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:21:51.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:21:51.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:21:51.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:21:51.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:21:51.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:21:51.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:21:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:21:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.681369 -999.00  +12.60  17.28     97  +12.20 1 3 1 3 1   870    0 0.33 -2.73 ----- 17.3 17.3 295.0 23.4 13.6 -0.8 13.4 -0.5 13.1 -0.5 13.5 -0.2
2026-04-11T18:21:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:21:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:21:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.681369
2026-04-11T18:21:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:21:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:21:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:21:51.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:21:51.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:21:51.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:21:35', tmtdew=0.05295, humidity=99.577, cloud=0.0, wind=25.4052, temperature=13.0688, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:21:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:21:51.499 [DEBUG] [Thread-174580] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:21:51.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:21:51.600 [DEBUG] [Thread-174584] [transport.py] [_log()] starting thread (client mode): 0xae509870
2026-04-11T18:21:51.600 [DEBUG] [Thread-174584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:21:51.615 [DEBUG] [Thread-174584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:21:51.615 [INFO] [Thread-174584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:21:51.622 [DEBUG] [Thread-174584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] client lang: <none>
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] server lang: <none>
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] kex follows: False
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:21:51.623 [DEBUG] [Thread-174584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:21:51.624 [DEBUG] [Thread-174584] [transport.py] [_log()] Compression: none
2026-04-11T18:21:51.624 [DEBUG] [Thread-174584] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:21:51.683 [DEBUG] [Thread-174584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:21:51.684 [DEBUG] [Thread-174584] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:21:51.684 [DEBUG] [Thread-174584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:21:51.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:21:51.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:21:51.743 [DEBUG] [Thread-174584] [transport.py] [_log()] userauth is OK
2026-04-11T18:21:51.743 [DEBUG] [Thread-174584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:21:51.743 [DEBUG] [Thread-174584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:21:51.743 [DEBUG] [Thread-174584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:21:51.743 [DEBUG] [Thread-174584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:21:51.759 [INFO] [Thread-174584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:21:51.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:21:51.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:21:52.613 [DEBUG] [Thread-174584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:21:52.613 [DEBUG] [Thread-174584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:21:52.661 [DEBUG] [Thread-174584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:21:52.661 [DEBUG] [Thread-174584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:21:52.671 [DEBUG] [Thread-174584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:21:52.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:21:52.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:21:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:21:52.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:21:52.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:21:52.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:21:52.708 [DEBUG] [Thread-174584] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:22:06.508 [DEBUG] [Thread-174586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:09.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:09.306 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:21.257 [DEBUG] [Thread-174587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:21.571 [DEBUG] [Thread-174588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:22.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:22:22.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:22:22.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:22:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 22, 11), 0.08158, 99.7554, 0.0, 20.75, 12.6512, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:22:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:22:11
2026-04-11T18:22:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:22:24.538 [DEBUG] [Thread-174589] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d00
2026-04-11T18:22:24.538 [DEBUG] [Thread-174589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:22:24.558 [DEBUG] [Thread-174589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:22:24.558 [INFO] [Thread-174589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] client lang: <none>
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] server lang: <none>
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] kex follows: False
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] Compression: none
2026-04-11T18:22:24.562 [DEBUG] [Thread-174589] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:22:24.580 [DEBUG] [Thread-174589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:22:24.580 [DEBUG] [Thread-174589] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:22:24.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:22:24.581 [DEBUG] [Thread-174589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:22:24.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:22:24.583 [DEBUG] [Thread-174589] [transport.py] [_log()] userauth is OK
2026-04-11T18:22:24.583 [DEBUG] [Thread-174589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:22:24.583 [DEBUG] [Thread-174589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:22:24.583 [DEBUG] [Thread-174589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:22:24.583 [DEBUG] [Thread-174589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:22:24.598 [INFO] [Thread-174589] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:22:24.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:22:25.385 [DEBUG] [Thread-174589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:22:25.385 [DEBUG] [Thread-174589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:22:25.385 [DEBUG] [Thread-174589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:22:25.426 [DEBUG] [Thread-174589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:22:25.426 [DEBUG] [Thread-174589] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:22:25.429 [DEBUG] [Thread-174589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:22:25.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:22:25.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:22:25.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:22:25.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:22:25.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:22:25.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:22:25.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:22:25.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:22:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:22:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.681717 -999.00  +12.60  16.39     97  +12.20 1 3 1 3 1   869    0 0.33 -2.80 ----- 16.4 16.4 297.8 20.3 13.6 -0.7 13.4 -0.4 13.1 -0.4 13.5 -0.3
2026-04-11T18:22:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:22:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:22:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.681717
2026-04-11T18:22:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:22:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:22:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:22:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:22:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:22:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:22:11', tmtdew=0.08158, humidity=99.7554, cloud=0.0, wind=20.75, temperature=12.6512, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:21:40.349', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:22:25.458 [DEBUG] [Thread-174589] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:22:25.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:22:25.548 [DEBUG] [Thread-174592] [transport.py] [_log()] starting thread (client mode): 0xb0fea5f0
2026-04-11T18:22:25.548 [DEBUG] [Thread-174592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:22:25.563 [DEBUG] [Thread-174592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:22:25.563 [INFO] [Thread-174592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] client lang: <none>
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] server lang: <none>
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] kex follows: False
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:22:25.571 [DEBUG] [Thread-174592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:22:25.572 [DEBUG] [Thread-174592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:22:25.572 [DEBUG] [Thread-174592] [transport.py] [_log()] Compression: none
2026-04-11T18:22:25.572 [DEBUG] [Thread-174592] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:22:25.632 [DEBUG] [Thread-174592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:22:25.633 [DEBUG] [Thread-174592] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:22:25.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:22:25.634 [DEBUG] [Thread-174592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:22:25.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:22:25.692 [DEBUG] [Thread-174592] [transport.py] [_log()] userauth is OK
2026-04-11T18:22:25.692 [DEBUG] [Thread-174592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:22:25.693 [DEBUG] [Thread-174592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:22:25.693 [DEBUG] [Thread-174592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:22:25.693 [DEBUG] [Thread-174592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:22:25.718 [INFO] [Thread-174592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:22:25.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:22:25.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:22:26.588 [DEBUG] [Thread-174592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:22:26.598 [DEBUG] [Thread-174592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:22:26.637 [DEBUG] [Thread-174592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:22:26.638 [DEBUG] [Thread-174592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:22:26.647 [DEBUG] [Thread-174592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:22:26.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:22:26.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:22:26.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-04-11T18:22:26.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:22:26.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:22:26.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:22:26.684 [DEBUG] [Thread-174592] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:22:36.608 [DEBUG] [Thread-174594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:51.658 [DEBUG] [Thread-174595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:22:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:22:56.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:22:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:22:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 22, 46), 0.06825, 99.4776, 0.0, 22.5828, 13.0356, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:22:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:22:46
2026-04-11T18:22:58.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:22:58.501 [DEBUG] [Thread-174596] [transport.py] [_log()] starting thread (client mode): 0xb0fb4880
2026-04-11T18:22:58.502 [DEBUG] [Thread-174596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:22:58.522 [DEBUG] [Thread-174596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:22:58.522 [INFO] [Thread-174596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:22:58.534 [DEBUG] [Thread-174596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:22:58.535 [DEBUG] [Thread-174596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:22:58.535 [DEBUG] [Thread-174596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:22:58.535 [DEBUG] [Thread-174596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:58.535 [DEBUG] [Thread-174596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:58.535 [DEBUG] [Thread-174596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] client lang: <none>
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] server lang: <none>
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] kex follows: False
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:22:58.536 [DEBUG] [Thread-174596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:22:58.537 [DEBUG] [Thread-174596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:22:58.537 [DEBUG] [Thread-174596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:22:58.537 [DEBUG] [Thread-174596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:22:58.537 [DEBUG] [Thread-174596] [transport.py] [_log()] Compression: none
2026-04-11T18:22:58.537 [DEBUG] [Thread-174596] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:22:58.552 [DEBUG] [Thread-174596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:22:58.553 [DEBUG] [Thread-174596] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:22:58.554 [DEBUG] [Thread-174596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:22:58.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:22:58.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:22:58.556 [DEBUG] [Thread-174596] [transport.py] [_log()] userauth is OK
2026-04-11T18:22:58.556 [DEBUG] [Thread-174596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:22:58.557 [DEBUG] [Thread-174596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:22:58.557 [DEBUG] [Thread-174596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:22:58.557 [DEBUG] [Thread-174596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:22:58.593 [INFO] [Thread-174596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:22:58.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:22:59.356 [DEBUG] [Thread-174596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:22:59.357 [DEBUG] [Thread-174596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:22:59.357 [DEBUG] [Thread-174596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:22:59.398 [DEBUG] [Thread-174596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:22:59.398 [DEBUG] [Thread-174596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:22:59.401 [DEBUG] [Thread-174596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:22:59.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:22:59.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:22:59.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:22:59.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:22:59.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:22:59.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:22:59.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:22:59.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:22:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:22:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.682064 -999.00  +12.60  16.95     97  +12.30 1 3 1 3 1   867    0 0.32 -3.03 ----- 16.9 16.9 287.6 20.9 13.6 -0.7 13.4 -0.5 13.2 -0.3 13.5 -0.1
2026-04-11T18:22:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:22:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:22:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.682064
2026-04-11T18:22:59.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:22:59.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:22:59.428 [DEBUG] [Thread-174596] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:22:59.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:22:59.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:22:59.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:22:59.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:22:46', tmtdew=0.06825, humidity=99.4776, cloud=0.0, wind=22.5828, temperature=13.0356, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:22:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:22:59.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:22:59.513 [DEBUG] [Thread-174599] [transport.py] [_log()] starting thread (client mode): 0xb0fea830
2026-04-11T18:22:59.513 [DEBUG] [Thread-174599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:22:59.528 [DEBUG] [Thread-174599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:22:59.528 [INFO] [Thread-174599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] client lang: <none>
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] server lang: <none>
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] kex follows: False
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] Compression: none
2026-04-11T18:22:59.535 [DEBUG] [Thread-174599] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:22:59.594 [DEBUG] [Thread-174599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:22:59.594 [DEBUG] [Thread-174599] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:22:59.594 [DEBUG] [Thread-174599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:22:59.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:22:59.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:22:59.651 [DEBUG] [Thread-174599] [transport.py] [_log()] userauth is OK
2026-04-11T18:22:59.651 [DEBUG] [Thread-174599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:22:59.651 [DEBUG] [Thread-174599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:22:59.651 [DEBUG] [Thread-174599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:22:59.652 [DEBUG] [Thread-174599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:22:59.670 [INFO] [Thread-174599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:22:59.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:22:59.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:23:00.497 [DEBUG] [Thread-174599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:23:00.497 [DEBUG] [Thread-174599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:23:00.545 [DEBUG] [Thread-174599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:23:00.545 [DEBUG] [Thread-174599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:23:00.557 [DEBUG] [Thread-174599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:23:00.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:23:00.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-04-11T18:23:00.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-04-11T18:23:00.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:23:00.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:23:00.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:23:00.599 [DEBUG] [Thread-174599] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:23:06.693 [DEBUG] [Thread-174601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:23:15.033 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:23:15.035 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:23:21.315 [DEBUG] [Thread-174602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:23:21.747 [DEBUG] [Thread-174603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:23:30.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:23:30.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:23:30.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-04-11T18:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 23, 22), 0.081565, 99.7554, 0.0, 23.7319, 12.6844, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:23:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:23:22
2026-04-11T18:23:32.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:23:32.523 [DEBUG] [Thread-174604] [transport.py] [_log()] starting thread (client mode): 0xae534a90
2026-04-11T18:23:32.523 [DEBUG] [Thread-174604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:23:32.545 [DEBUG] [Thread-174604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:23:32.546 [INFO] [Thread-174604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:23:32.549 [DEBUG] [Thread-174604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] client lang: <none>
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] server lang: <none>
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] kex follows: False
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:23:32.550 [DEBUG] [Thread-174604] [transport.py] [_log()] Compression: none
2026-04-11T18:23:32.551 [DEBUG] [Thread-174604] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:23:32.568 [DEBUG] [Thread-174604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:23:32.569 [DEBUG] [Thread-174604] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:23:32.569 [DEBUG] [Thread-174604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:23:32.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:23:32.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:23:32.572 [DEBUG] [Thread-174604] [transport.py] [_log()] userauth is OK
2026-04-11T18:23:32.572 [DEBUG] [Thread-174604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:23:32.572 [DEBUG] [Thread-174604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:23:32.572 [DEBUG] [Thread-174604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:23:32.572 [DEBUG] [Thread-174604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:23:32.595 [INFO] [Thread-174604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:23:32.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:23:33.345 [DEBUG] [Thread-174604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:23:33.346 [DEBUG] [Thread-174604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:23:33.346 [DEBUG] [Thread-174604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:23:33.387 [DEBUG] [Thread-174604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:23:33.387 [DEBUG] [Thread-174604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:23:33.390 [DEBUG] [Thread-174604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:23:33.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:23:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:23:33.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:23:33.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:23:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:23:33.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:23:33.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:23:33.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:23:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:23:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.682411 -999.00  +12.60  22.45     97  +12.20 1 3 1 3 1   864    0 0.30 -3.46 ----- 22.4 22.4 299.8 24.5 13.6 -0.8 13.4 -0.4 13.2 -0.9 13.5 -0.3
2026-04-11T18:23:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:23:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:23:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.682411
2026-04-11T18:23:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:23:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:23:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:23:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:23:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:23:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:23:22', tmtdew=0.081565, humidity=99.7554, cloud=0.0, wind=23.7319, temperature=12.6844, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:22:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:23:33.416 [DEBUG] [Thread-174604] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:23:33.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:23:33.510 [DEBUG] [Thread-174607] [transport.py] [_log()] starting thread (client mode): 0xae534940
2026-04-11T18:23:33.510 [DEBUG] [Thread-174607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:23:33.525 [DEBUG] [Thread-174607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:23:33.525 [INFO] [Thread-174607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:23:33.532 [DEBUG] [Thread-174607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] client lang: <none>
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] server lang: <none>
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] kex follows: False
2026-04-11T18:23:33.533 [DEBUG] [Thread-174607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:23:33.534 [DEBUG] [Thread-174607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:23:33.534 [DEBUG] [Thread-174607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:23:33.534 [DEBUG] [Thread-174607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:23:33.534 [DEBUG] [Thread-174607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:23:33.534 [DEBUG] [Thread-174607] [transport.py] [_log()] Compression: none
2026-04-11T18:23:33.534 [DEBUG] [Thread-174607] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:23:33.595 [DEBUG] [Thread-174607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:23:33.596 [DEBUG] [Thread-174607] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:23:33.597 [DEBUG] [Thread-174607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:23:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:23:33.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:23:33.652 [DEBUG] [Thread-174607] [transport.py] [_log()] userauth is OK
2026-04-11T18:23:33.652 [DEBUG] [Thread-174607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:23:33.652 [DEBUG] [Thread-174607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:23:33.653 [DEBUG] [Thread-174607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:23:33.653 [DEBUG] [Thread-174607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:23:33.674 [INFO] [Thread-174607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:23:33.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:23:33.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:23:34.509 [DEBUG] [Thread-174607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:23:34.510 [DEBUG] [Thread-174607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:23:34.557 [DEBUG] [Thread-174607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:23:34.557 [DEBUG] [Thread-174607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:23:34.567 [DEBUG] [Thread-174607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:23:34.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:23: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')
2026-04-11T18:23:34.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:23:34.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:23:34.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:23:34.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:23:34.604 [DEBUG] [Thread-174607] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:23:36.786 [DEBUG] [Thread-174609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:23:51.841 [DEBUG] [Thread-174610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:04.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:24:04.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:24:04.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-04-11T18:24:05.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 23, 58), 0.079045, 99.772, 0.0, 18.3856, 12.6181, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:24:05.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:23:58
2026-04-11T18:24:06.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:24:06.430 [DEBUG] [Thread-174611] [transport.py] [_log()] starting thread (client mode): 0xae5f30d0
2026-04-11T18:24:06.430 [DEBUG] [Thread-174611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:24:06.451 [DEBUG] [Thread-174611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:24:06.451 [INFO] [Thread-174611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:24:06.454 [DEBUG] [Thread-174611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:24:06.454 [DEBUG] [Thread-174611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:24:06.454 [DEBUG] [Thread-174611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:24:06.454 [DEBUG] [Thread-174611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:06.454 [DEBUG] [Thread-174611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:06.454 [DEBUG] [Thread-174611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] client lang: <none>
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] server lang: <none>
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] kex follows: False
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] Compression: none
2026-04-11T18:24:06.455 [DEBUG] [Thread-174611] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:24:06.472 [DEBUG] [Thread-174611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:24:06.472 [DEBUG] [Thread-174611] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:24:06.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:24:06.473 [DEBUG] [Thread-174611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:24:06.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:24:06.474 [DEBUG] [Thread-174611] [transport.py] [_log()] userauth is OK
2026-04-11T18:24:06.474 [DEBUG] [Thread-174611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:24:06.474 [DEBUG] [Thread-174611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:24:06.474 [DEBUG] [Thread-174611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:24:06.475 [DEBUG] [Thread-174611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:24:06.487 [INFO] [Thread-174611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:24:06.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:24:06.880 [DEBUG] [Thread-174613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:07.316 [DEBUG] [Thread-174611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:24:07.316 [DEBUG] [Thread-174611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:24:07.317 [DEBUG] [Thread-174611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:24:07.356 [DEBUG] [Thread-174611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:24:07.357 [DEBUG] [Thread-174611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:24:07.359 [DEBUG] [Thread-174611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:24:07.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:24:07.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:24:07.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:24:07.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:24:07.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:24:07.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:24:07.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:24:07.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:24:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:24:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.683105 -999.00  +12.50  23.66     97  +12.10 1 3 1 3 1   859    0 0.31 -3.11 ----- 23.7 23.7 293.4 27.7 13.6 -1.0 13.4 -0.5 13.1 -0.7 13.5 -0.5
2026-04-11T18:24:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:24:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:24:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.683105
2026-04-11T18:24:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:24:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:24:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:24:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:24:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:24:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:23:58', tmtdew=0.079045, humidity=99.772, cloud=0.0, wind=18.3856, temperature=12.6181, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:23:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:24:07.386 [DEBUG] [Thread-174611] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:24:07.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:24:07.474 [DEBUG] [Thread-174615] [transport.py] [_log()] starting thread (client mode): 0xae5f1de0
2026-04-11T18:24:07.474 [DEBUG] [Thread-174615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:24:07.488 [DEBUG] [Thread-174615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:24:07.488 [INFO] [Thread-174615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:24:07.495 [DEBUG] [Thread-174615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:24:07.495 [DEBUG] [Thread-174615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] client lang: <none>
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] server lang: <none>
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] kex follows: False
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] Compression: none
2026-04-11T18:24:07.496 [DEBUG] [Thread-174615] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:24:07.557 [DEBUG] [Thread-174615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:24:07.558 [DEBUG] [Thread-174615] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:24:07.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:24:07.559 [DEBUG] [Thread-174615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:24:07.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:24:07.615 [DEBUG] [Thread-174615] [transport.py] [_log()] userauth is OK
2026-04-11T18:24:07.615 [DEBUG] [Thread-174615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:24:07.615 [DEBUG] [Thread-174615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:24:07.616 [DEBUG] [Thread-174615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:24:07.616 [DEBUG] [Thread-174615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:24:07.635 [INFO] [Thread-174615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:24:07.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:24:07.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:24:08.480 [DEBUG] [Thread-174615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:24:08.481 [DEBUG] [Thread-174615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:24:08.529 [DEBUG] [Thread-174615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:24:08.529 [DEBUG] [Thread-174615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:24:08.538 [DEBUG] [Thread-174615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:24:08.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:24:08.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-04-11T18:24:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:24:08.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:24:08.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:24:08.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:24:08.576 [DEBUG] [Thread-174615] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:24:19.218 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:19.219 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:21.374 [DEBUG] [Thread-174617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:21.917 [DEBUG] [Thread-174618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:36.978 [DEBUG] [Thread-174619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:24:38.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:24:38.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:24:38.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-04-11T18:24:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 23, 58), 0.079045, 99.772, 0.0, 18.3856, 12.6181, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:24:39.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:23:58
2026-04-11T18:24:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:24:40.452 [DEBUG] [Thread-174620] [transport.py] [_log()] starting thread (client mode): 0xae5f0670
2026-04-11T18:24:40.452 [DEBUG] [Thread-174620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:24:40.473 [DEBUG] [Thread-174620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:24:40.473 [INFO] [Thread-174620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:40.476 [DEBUG] [Thread-174620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] client lang: <none>
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] server lang: <none>
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] kex follows: False
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] Compression: none
2026-04-11T18:24:40.477 [DEBUG] [Thread-174620] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:24:40.495 [DEBUG] [Thread-174620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:24:40.495 [DEBUG] [Thread-174620] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:24:40.496 [DEBUG] [Thread-174620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:24:40.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:24:40.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:24:40.498 [DEBUG] [Thread-174620] [transport.py] [_log()] userauth is OK
2026-04-11T18:24:40.498 [DEBUG] [Thread-174620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:24:40.498 [DEBUG] [Thread-174620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:24:40.498 [DEBUG] [Thread-174620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:24:40.498 [DEBUG] [Thread-174620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:24:40.523 [INFO] [Thread-174620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:24:40.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:24:41.300 [DEBUG] [Thread-174620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:24:41.300 [DEBUG] [Thread-174620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:24:41.300 [DEBUG] [Thread-174620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:24:41.341 [DEBUG] [Thread-174620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:24:41.341 [DEBUG] [Thread-174620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:24:41.344 [DEBUG] [Thread-174620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:24:41.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:24:41.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:24:41.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:24:41.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:24:41.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:24:41.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:24:41.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:24:41.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:24:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:24:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.683453 -999.00  +12.50  19.89     97  +12.10 1 3 1 3 1   856    0 0.32 -2.81 ----- 19.9 19.9 299.8 25.0 13.6 -0.9 13.4 -0.4 13.1 -0.8 13.5 -0.6
2026-04-11T18:24:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:24:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:24:41.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.683453
2026-04-11T18:24:41.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:24:41.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:24:41.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:24:41.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:24:41.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:24:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:23:58', tmtdew=0.079045, humidity=99.772, cloud=0.0, wind=18.3856, temperature=12.6181, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:24:10.339', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:24:41.370 [DEBUG] [Thread-174620] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:24:41.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:24:41.463 [DEBUG] [Thread-174623] [transport.py] [_log()] starting thread (client mode): 0xb0fe8b80
2026-04-11T18:24:41.463 [DEBUG] [Thread-174623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:24:41.478 [DEBUG] [Thread-174623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:24:41.478 [INFO] [Thread-174623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:24:41.485 [DEBUG] [Thread-174623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] client lang: <none>
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] server lang: <none>
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] kex follows: False
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] Compression: none
2026-04-11T18:24:41.486 [DEBUG] [Thread-174623] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:24:41.543 [DEBUG] [Thread-174623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:24:41.544 [DEBUG] [Thread-174623] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:24:41.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:24:41.545 [DEBUG] [Thread-174623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:24:41.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:24:41.600 [DEBUG] [Thread-174623] [transport.py] [_log()] userauth is OK
2026-04-11T18:24:41.600 [DEBUG] [Thread-174623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:24:41.600 [DEBUG] [Thread-174623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:24:41.600 [DEBUG] [Thread-174623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:24:41.600 [DEBUG] [Thread-174623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:24:41.618 [INFO] [Thread-174623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:24:41.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:24:41.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:24:42.426 [DEBUG] [Thread-174623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:24:42.427 [DEBUG] [Thread-174623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:24:42.475 [DEBUG] [Thread-174623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:24:42.475 [DEBUG] [Thread-174623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:24:42.485 [DEBUG] [Thread-174623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:24:42.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:24:42.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-04-11T18:24:42.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:24:42.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:24:42.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:24:42.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:24:42.523 [DEBUG] [Thread-174623] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:24:52.015 [DEBUG] [Thread-174625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:07.067 [DEBUG] [Thread-174626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:12.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:25:12.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:25:12.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-04-11T18:25:13.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 24, 33), 0.06829, 99.4776, 0.0, 24.5232, 12.8699, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:25:13.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:24:33
2026-04-11T18:25:14.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:25:14.404 [DEBUG] [Thread-174627] [transport.py] [_log()] starting thread (client mode): 0xae5630d0
2026-04-11T18:25:14.404 [DEBUG] [Thread-174627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:25:14.423 [DEBUG] [Thread-174627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:25:14.423 [INFO] [Thread-174627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] client lang: <none>
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] server lang: <none>
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] kex follows: False
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] Compression: none
2026-04-11T18:25:14.426 [DEBUG] [Thread-174627] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:25:14.435 [DEBUG] [Thread-174627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:25:14.435 [DEBUG] [Thread-174627] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:25:14.435 [DEBUG] [Thread-174627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:25:14.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:25:14.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:25:14.438 [DEBUG] [Thread-174627] [transport.py] [_log()] userauth is OK
2026-04-11T18:25:14.438 [DEBUG] [Thread-174627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:25:14.438 [DEBUG] [Thread-174627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:25:14.438 [DEBUG] [Thread-174627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:25:14.438 [DEBUG] [Thread-174627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:25:14.453 [INFO] [Thread-174627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:25:14.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:25:15.878 [DEBUG] [Thread-174627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:25:15.878 [DEBUG] [Thread-174627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:25:15.878 [DEBUG] [Thread-174627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:25:15.919 [DEBUG] [Thread-174627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:25:15.919 [DEBUG] [Thread-174627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:25:15.923 [DEBUG] [Thread-174627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:25:15.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:25:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:25:15.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:25:15.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:25:15.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:25:15.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:25:15.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:25:15.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:25:15.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:25:15.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.683800 -999.00  +12.50  19.40     97  +12.10 1 3 1 3 1   853    0 0.33 -2.27 ----- 19.4 19.4 298.4 24.7 13.6 -0.7 13.4 -0.4 13.1 -0.5 13.5 -0.4
2026-04-11T18:25:15.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:25:15.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:25:15.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.683800
2026-04-11T18:25:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:25:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:25:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:25:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:25:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:25:15.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:24:33', tmtdew=0.06829, humidity=99.4776, cloud=0.0, wind=24.5232, temperature=12.8699, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:24:40.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:25:15.976 [DEBUG] [Thread-174627] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:25:16.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:25:16.070 [DEBUG] [Thread-174630] [transport.py] [_log()] starting thread (client mode): 0xae536440
2026-04-11T18:25:16.070 [DEBUG] [Thread-174630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:25:16.086 [DEBUG] [Thread-174630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:25:16.086 [INFO] [Thread-174630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:16.094 [DEBUG] [Thread-174630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] client lang: <none>
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] server lang: <none>
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] kex follows: False
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:25:16.095 [DEBUG] [Thread-174630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:25:16.096 [DEBUG] [Thread-174630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:25:16.096 [DEBUG] [Thread-174630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:25:16.096 [DEBUG] [Thread-174630] [transport.py] [_log()] Compression: none
2026-04-11T18:25:16.096 [DEBUG] [Thread-174630] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:25:16.152 [DEBUG] [Thread-174630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:25:16.153 [DEBUG] [Thread-174630] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:25:16.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:25:16.154 [DEBUG] [Thread-174630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:25:16.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:25:16.207 [DEBUG] [Thread-174630] [transport.py] [_log()] userauth is OK
2026-04-11T18:25:16.208 [DEBUG] [Thread-174630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:25:16.208 [DEBUG] [Thread-174630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:25:16.208 [DEBUG] [Thread-174630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:25:16.208 [DEBUG] [Thread-174630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:25:16.232 [INFO] [Thread-174630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:25:16.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:25:16.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:25:17.093 [DEBUG] [Thread-174630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:25:17.094 [DEBUG] [Thread-174630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:25:17.142 [DEBUG] [Thread-174630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:25:17.142 [DEBUG] [Thread-174630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:25:17.151 [DEBUG] [Thread-174630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:25:17.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:25:17.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:25:17.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:25:17.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:25:17.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:25:17.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:25:17.188 [DEBUG] [Thread-174630] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:25:21.431 [DEBUG] [Thread-174632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:22.107 [DEBUG] [Thread-174633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:25.000 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:25.002 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:37.164 [DEBUG] [Thread-174634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:25:47.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:25:47.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:25:47.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-04-11T18:25:48.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 25, 8), 0.076465, 99.7886, 0.0, 20.997, 12.6344, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:25:48.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:25:08
2026-04-11T18:25:48.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:25:49.159 [DEBUG] [Thread-174635] [transport.py] [_log()] starting thread (client mode): 0xae534eb0
2026-04-11T18:25:49.159 [DEBUG] [Thread-174635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:25:49.178 [DEBUG] [Thread-174635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:25:49.178 [INFO] [Thread-174635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:25:49.181 [DEBUG] [Thread-174635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] client lang: <none>
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] server lang: <none>
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] kex follows: False
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] Compression: none
2026-04-11T18:25:49.182 [DEBUG] [Thread-174635] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:25:49.199 [DEBUG] [Thread-174635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:25:49.200 [DEBUG] [Thread-174635] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:25:49.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:25:49.201 [DEBUG] [Thread-174635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:25:49.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:25:49.203 [DEBUG] [Thread-174635] [transport.py] [_log()] userauth is OK
2026-04-11T18:25:49.203 [DEBUG] [Thread-174635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:25:49.203 [DEBUG] [Thread-174635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:25:49.203 [DEBUG] [Thread-174635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:25:49.203 [DEBUG] [Thread-174635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:25:49.220 [INFO] [Thread-174635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:25:49.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:25:50.018 [DEBUG] [Thread-174635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:25:50.018 [DEBUG] [Thread-174635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:25:50.018 [DEBUG] [Thread-174635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:25:50.059 [DEBUG] [Thread-174635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:25:50.059 [DEBUG] [Thread-174635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:25:50.062 [DEBUG] [Thread-174635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:25:50.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:25:50.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:25:50.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:25:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:25:50.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:25:50.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:25:50.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:25:50.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:25:50.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:25:50.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.684147 -999.00  +12.50  21.86     97  +12.10 1 3 1 3 1   849    0 0.36 -1.69 ----- 21.9 21.9 297.8 26.2 13.6 -0.7 13.4 -0.3 13.1 -0.6 13.5 -0.5
2026-04-11T18:25:50.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:25:50.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:25:50.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.684147
2026-04-11T18:25:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:25:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:25:50.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:25:50.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:25:50.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:25:50.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:25:08', tmtdew=0.076465, humidity=99.7886, cloud=0.0, wind=20.997, temperature=12.6344, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:25:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:25:50.085 [DEBUG] [Thread-174635] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:25:50.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:25:50.179 [DEBUG] [Thread-174638] [transport.py] [_log()] starting thread (client mode): 0xae50a740
2026-04-11T18:25:50.180 [DEBUG] [Thread-174638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:25:50.195 [DEBUG] [Thread-174638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:25:50.195 [INFO] [Thread-174638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] client lang: <none>
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] server lang: <none>
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] kex follows: False
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] Compression: none
2026-04-11T18:25:50.202 [DEBUG] [Thread-174638] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:25:50.260 [DEBUG] [Thread-174638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:25:50.261 [DEBUG] [Thread-174638] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:25:50.261 [DEBUG] [Thread-174638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:25:50.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:25:50.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:25:50.319 [DEBUG] [Thread-174638] [transport.py] [_log()] userauth is OK
2026-04-11T18:25:50.319 [DEBUG] [Thread-174638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:25:50.319 [DEBUG] [Thread-174638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:25:50.319 [DEBUG] [Thread-174638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:25:50.320 [DEBUG] [Thread-174638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:25:50.343 [INFO] [Thread-174638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:25:50.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:25:50.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:25:51.177 [DEBUG] [Thread-174638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:25:51.177 [DEBUG] [Thread-174638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:25:51.225 [DEBUG] [Thread-174638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:25:51.225 [DEBUG] [Thread-174638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:25:51.234 [DEBUG] [Thread-174638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:25:51.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:25:51.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-04-11T18:25:51.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-04-11T18:25:51.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:25:51.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:25:51.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:25:51.271 [DEBUG] [Thread-174638] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:25:52.202 [DEBUG] [Thread-174640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:07.255 [DEBUG] [Thread-174641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:26:21.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:26:21.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-04-11T18:26:21.488 [DEBUG] [Thread-174642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:22.289 [DEBUG] [Thread-174643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 25, 44), 0.05295, 99.5771, 0.0, 23.6059, 13.0357, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:26:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:25:44
2026-04-11T18:26:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:26:23.136 [DEBUG] [Thread-174644] [transport.py] [_log()] starting thread (client mode): 0xae509f00
2026-04-11T18:26:23.136 [DEBUG] [Thread-174644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:26:23.147 [DEBUG] [Thread-174644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:26:23.147 [INFO] [Thread-174644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] client lang: <none>
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] server lang: <none>
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] kex follows: False
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] Compression: none
2026-04-11T18:26:23.151 [DEBUG] [Thread-174644] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:26:23.167 [DEBUG] [Thread-174644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:26:23.167 [DEBUG] [Thread-174644] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:26:23.168 [DEBUG] [Thread-174644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:26:23.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:26:23.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:26:23.170 [DEBUG] [Thread-174644] [transport.py] [_log()] userauth is OK
2026-04-11T18:26:23.170 [DEBUG] [Thread-174644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:26:23.170 [DEBUG] [Thread-174644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:26:23.170 [DEBUG] [Thread-174644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:26:23.170 [DEBUG] [Thread-174644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:26:23.195 [INFO] [Thread-174644] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:26:23.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:26:23.998 [DEBUG] [Thread-174644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:26:23.998 [DEBUG] [Thread-174644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:26:23.999 [DEBUG] [Thread-174644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:26:24.039 [DEBUG] [Thread-174644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:26:24.039 [DEBUG] [Thread-174644] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:26:24.042 [DEBUG] [Thread-174644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:26:24.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:26:24.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:26:24.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:26:24.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:26:24.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:26:24.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:26:24.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:26:24.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:26:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:26:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.684494 -999.00  +12.50  19.14     97  +12.10 1 3 1 3 1   845    0 0.36 -1.34 ----- 19.1 19.1 299.4 23.5 13.6 -0.6 13.4 -0.2 13.1 -0.4 13.5 -0.5
2026-04-11T18:26:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:26:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:26:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.684494
2026-04-11T18:26:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:26:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:26:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:26:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:26:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:26:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:25:44', tmtdew=0.05295, humidity=99.5771, cloud=0.0, wind=23.6059, temperature=13.0357, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:25:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:26:24.072 [DEBUG] [Thread-174644] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:26:24.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:26:24.165 [DEBUG] [Thread-174647] [transport.py] [_log()] starting thread (client mode): 0xa7951120
2026-04-11T18:26:24.165 [DEBUG] [Thread-174647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:26:24.180 [DEBUG] [Thread-174647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:26:24.180 [INFO] [Thread-174647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] client lang: <none>
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] server lang: <none>
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] kex follows: False
2026-04-11T18:26:24.189 [DEBUG] [Thread-174647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:26:24.190 [DEBUG] [Thread-174647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:26:24.190 [DEBUG] [Thread-174647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:26:24.190 [DEBUG] [Thread-174647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:26:24.190 [DEBUG] [Thread-174647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:26:24.190 [DEBUG] [Thread-174647] [transport.py] [_log()] Compression: none
2026-04-11T18:26:24.190 [DEBUG] [Thread-174647] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:26:24.247 [DEBUG] [Thread-174647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:26:24.248 [DEBUG] [Thread-174647] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:26:24.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:26:24.249 [DEBUG] [Thread-174647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:26:24.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:26:24.304 [DEBUG] [Thread-174647] [transport.py] [_log()] userauth is OK
2026-04-11T18:26:24.304 [DEBUG] [Thread-174647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:26:24.304 [DEBUG] [Thread-174647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:26:24.304 [DEBUG] [Thread-174647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:26:24.304 [DEBUG] [Thread-174647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:26:24.325 [INFO] [Thread-174647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:26:24.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:26:24.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:26:25.196 [DEBUG] [Thread-174647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:26:25.196 [DEBUG] [Thread-174647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:26:25.245 [DEBUG] [Thread-174647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:26:25.245 [DEBUG] [Thread-174647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:26:25.258 [DEBUG] [Thread-174647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:26:25.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:26:25.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-04-11T18:26:25.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:26:25.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:26:25.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:26:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:26:25.308 [DEBUG] [Thread-174647] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:26:29.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:29.581 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:37.327 [DEBUG] [Thread-174649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:52.371 [DEBUG] [Thread-174650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:26:55.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:26:55.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:26:55.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:26:56.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 26, 20), 0.071375, 99.8217, 0.0, 22.6912, 12.6344, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:26:56.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:26:20
2026-04-11T18:26:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:26:57.280 [DEBUG] [Thread-174651] [transport.py] [_log()] starting thread (client mode): 0xae5f11b0
2026-04-11T18:26:57.280 [DEBUG] [Thread-174651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:26:57.293 [DEBUG] [Thread-174651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:26:57.293 [INFO] [Thread-174651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] client lang: <none>
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] server lang: <none>
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] kex follows: False
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:26:57.296 [DEBUG] [Thread-174651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:26:57.297 [DEBUG] [Thread-174651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:26:57.297 [DEBUG] [Thread-174651] [transport.py] [_log()] Compression: none
2026-04-11T18:26:57.297 [DEBUG] [Thread-174651] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:26:57.312 [DEBUG] [Thread-174651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:26:57.312 [DEBUG] [Thread-174651] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:26:57.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:26:57.312 [DEBUG] [Thread-174651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:26:57.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:26:57.313 [DEBUG] [Thread-174651] [transport.py] [_log()] userauth is OK
2026-04-11T18:26:57.313 [DEBUG] [Thread-174651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:26:57.314 [DEBUG] [Thread-174651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:26:57.314 [DEBUG] [Thread-174651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:26:57.314 [DEBUG] [Thread-174651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:26:57.336 [INFO] [Thread-174651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:26:57.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:26:58.119 [DEBUG] [Thread-174651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:26:58.120 [DEBUG] [Thread-174651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:26:58.120 [DEBUG] [Thread-174651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:26:58.162 [DEBUG] [Thread-174651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:26:58.162 [DEBUG] [Thread-174651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:26:58.165 [DEBUG] [Thread-174651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:26:58.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:26:58.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:26:58.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:26:58.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:26:58.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:26:58.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:26:58.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:26:58.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:26:58.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:26:58.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.684841 -999.00  +12.50  22.91     97  +12.20 1 3 1 3 1   841    0 0.35 -1.64 ----- 22.9 22.9 287.6 26.3 13.6 -0.5 13.4 -0.3 13.2 -0.5 13.5 -0.5
2026-04-11T18:26:58.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:26:58.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:26:58.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.684841
2026-04-11T18:26:58.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:26:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:26:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:26:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:26:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:26:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:26:20', tmtdew=0.071375, humidity=99.8217, cloud=0.0, wind=22.6912, temperature=12.6344, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:26:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:26:58.188 [DEBUG] [Thread-174651] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:26:58.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:26:58.283 [DEBUG] [Thread-174654] [transport.py] [_log()] starting thread (client mode): 0xae5f3250
2026-04-11T18:26:58.283 [DEBUG] [Thread-174654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:26:58.301 [DEBUG] [Thread-174654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:26:58.301 [INFO] [Thread-174654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:26:58.308 [DEBUG] [Thread-174654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:26:58.309 [DEBUG] [Thread-174654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] client lang: <none>
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] server lang: <none>
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] kex follows: False
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:26:58.310 [DEBUG] [Thread-174654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:26:58.311 [DEBUG] [Thread-174654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:26:58.311 [DEBUG] [Thread-174654] [transport.py] [_log()] Compression: none
2026-04-11T18:26:58.311 [DEBUG] [Thread-174654] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:26:58.368 [DEBUG] [Thread-174654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:26:58.368 [DEBUG] [Thread-174654] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:26:58.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:26:58.369 [DEBUG] [Thread-174654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:26:58.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:26:58.423 [DEBUG] [Thread-174654] [transport.py] [_log()] userauth is OK
2026-04-11T18:26:58.424 [DEBUG] [Thread-174654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:26:58.424 [DEBUG] [Thread-174654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:26:58.424 [DEBUG] [Thread-174654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:26:58.424 [DEBUG] [Thread-174654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:26:58.444 [INFO] [Thread-174654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:26:58.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:26:58.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:26:59.257 [DEBUG] [Thread-174654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:26:59.257 [DEBUG] [Thread-174654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:26:59.305 [DEBUG] [Thread-174654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:26:59.305 [DEBUG] [Thread-174654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:26:59.315 [DEBUG] [Thread-174654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:26:59.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:26:59.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-04-11T18:26:59.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-04-11T18:26:59.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:26:59.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:26:59.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:26:59.351 [DEBUG] [Thread-174654] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:27:07.408 [DEBUG] [Thread-174656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:27:21.544 [DEBUG] [Thread-174657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:27:22.462 [DEBUG] [Thread-174658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:27:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:27:29.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:27:29.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-04-11T18:27:30.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 26, 55), 0.023935, 99.8051, 0.0, 21.879, 12.5513, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:27:30.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:26:55
2026-04-11T18:27:31.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:27:31.166 [DEBUG] [Thread-174659] [transport.py] [_log()] starting thread (client mode): 0xae563490
2026-04-11T18:27:31.166 [DEBUG] [Thread-174659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:27:31.187 [DEBUG] [Thread-174659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:27:31.187 [INFO] [Thread-174659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] client lang: <none>
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] server lang: <none>
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] kex follows: False
2026-04-11T18:27:31.190 [DEBUG] [Thread-174659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:27:31.191 [DEBUG] [Thread-174659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:27:31.191 [DEBUG] [Thread-174659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:27:31.191 [DEBUG] [Thread-174659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:27:31.191 [DEBUG] [Thread-174659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:27:31.191 [DEBUG] [Thread-174659] [transport.py] [_log()] Compression: none
2026-04-11T18:27:31.191 [DEBUG] [Thread-174659] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:27:31.208 [DEBUG] [Thread-174659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:27:31.209 [DEBUG] [Thread-174659] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:27:31.210 [DEBUG] [Thread-174659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:27:31.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:27:31.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:27:31.213 [DEBUG] [Thread-174659] [transport.py] [_log()] userauth is OK
2026-04-11T18:27:31.213 [DEBUG] [Thread-174659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:27:31.213 [DEBUG] [Thread-174659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:27:31.213 [DEBUG] [Thread-174659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:27:31.213 [DEBUG] [Thread-174659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:27:31.249 [INFO] [Thread-174659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:27:31.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:27:32.036 [DEBUG] [Thread-174659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:27:32.036 [DEBUG] [Thread-174659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:27:32.036 [DEBUG] [Thread-174659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:27:32.082 [DEBUG] [Thread-174659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:27:32.082 [DEBUG] [Thread-174659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:27:32.086 [DEBUG] [Thread-174659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:27:32.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:27:32.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:27:32.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:27:32.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:27:32.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:27:32.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:27:32.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:27:32.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:27:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:27:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.685189 -999.00  +12.50  18.79     97  +12.10 1 3 1 3 1   836    0 0.35 -1.58 ----- 18.8 18.8 295.2 23.4 13.5 -0.6 13.4 -0.3 13.0 -0.2 13.5 -0.5
2026-04-11T18:27:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:27:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:27:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.685189
2026-04-11T18:27:32.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:27:32.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:27:32.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:27:32.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:27:32.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:27:32.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:26:55', tmtdew=0.023935, humidity=99.8051, cloud=0.0, wind=21.879, temperature=12.5513, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:26:40.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:27:32.110 [DEBUG] [Thread-174659] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:27:32.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:27:32.203 [DEBUG] [Thread-174662] [transport.py] [_log()] starting thread (client mode): 0xa7953670
2026-04-11T18:27:32.203 [DEBUG] [Thread-174662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:27:32.218 [DEBUG] [Thread-174662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:27:32.218 [INFO] [Thread-174662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] client lang: <none>
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] server lang: <none>
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] kex follows: False
2026-04-11T18:27:32.226 [DEBUG] [Thread-174662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:27:32.227 [DEBUG] [Thread-174662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:27:32.227 [DEBUG] [Thread-174662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:27:32.227 [DEBUG] [Thread-174662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:27:32.227 [DEBUG] [Thread-174662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:27:32.227 [DEBUG] [Thread-174662] [transport.py] [_log()] Compression: none
2026-04-11T18:27:32.227 [DEBUG] [Thread-174662] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:27:32.283 [DEBUG] [Thread-174662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:27:32.283 [DEBUG] [Thread-174662] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:27:32.284 [DEBUG] [Thread-174662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:27:32.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:27:32.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:27:32.339 [DEBUG] [Thread-174662] [transport.py] [_log()] userauth is OK
2026-04-11T18:27:32.339 [DEBUG] [Thread-174662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:27:32.340 [DEBUG] [Thread-174662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:27:32.340 [DEBUG] [Thread-174662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:27:32.340 [DEBUG] [Thread-174662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:27:32.359 [INFO] [Thread-174662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:27:32.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:27:32.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:27:33.187 [DEBUG] [Thread-174662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:27:33.187 [DEBUG] [Thread-174662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:27:33.235 [DEBUG] [Thread-174662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:27:33.235 [DEBUG] [Thread-174662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:27:33.244 [DEBUG] [Thread-174662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:27:33.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:27:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:27:33.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-04-11T18:27:33.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:27:33.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:27:33.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:27:33.286 [DEBUG] [Thread-174662] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:27:33.705 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:27:33.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:27:37.500 [DEBUG] [Thread-174664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:27:52.553 [DEBUG] [Thread-174665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:03.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:28:03.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:28:03.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-04-11T18:28:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 27, 31), 0.02649, 99.7886, 0.0, 22.3906, 12.5347, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:28:04.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:27:31
2026-04-11T18:28:04.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:28:05.163 [DEBUG] [Thread-174666] [transport.py] [_log()] starting thread (client mode): 0xae509120
2026-04-11T18:28:05.163 [DEBUG] [Thread-174666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:28:05.185 [DEBUG] [Thread-174666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:28:05.185 [INFO] [Thread-174666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:28:05.189 [DEBUG] [Thread-174666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:28:05.189 [DEBUG] [Thread-174666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:28:05.189 [DEBUG] [Thread-174666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] client lang: <none>
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] server lang: <none>
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] kex follows: False
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:28:05.190 [DEBUG] [Thread-174666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:28:05.191 [DEBUG] [Thread-174666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:28:05.191 [DEBUG] [Thread-174666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:28:05.191 [DEBUG] [Thread-174666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:28:05.191 [DEBUG] [Thread-174666] [transport.py] [_log()] Compression: none
2026-04-11T18:28:05.191 [DEBUG] [Thread-174666] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:28:05.211 [DEBUG] [Thread-174666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:28:05.212 [DEBUG] [Thread-174666] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:28:05.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:28:05.213 [DEBUG] [Thread-174666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:28:05.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:28:05.215 [DEBUG] [Thread-174666] [transport.py] [_log()] userauth is OK
2026-04-11T18:28:05.215 [DEBUG] [Thread-174666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:28:05.215 [DEBUG] [Thread-174666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:28:05.216 [DEBUG] [Thread-174666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:28:05.216 [DEBUG] [Thread-174666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:28:05.252 [INFO] [Thread-174666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:28:05.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:28:06.010 [DEBUG] [Thread-174666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:28:06.010 [DEBUG] [Thread-174666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:28:06.010 [DEBUG] [Thread-174666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:28:06.051 [DEBUG] [Thread-174666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:28:06.051 [DEBUG] [Thread-174666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:28:06.053 [DEBUG] [Thread-174666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:28:06.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:28:06.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:28:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:28:06.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:28:06.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:28:06.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:28:06.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:28:06.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:28:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:28:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.685536 -999.00  +12.50  21.64     97  +12.10 1 3 1 3 1   831    0 0.35 -1.52 ----- 21.6 21.6 289.2 26.8 13.6 -0.6 13.4 -0.4 13.1 -0.6 13.5 -0.5
2026-04-11T18:28:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:28:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:28:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.685536
2026-04-11T18:28:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:28:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:28:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:28:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:28:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:28:06.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:27:31', tmtdew=0.02649, humidity=99.7886, cloud=0.0, wind=22.3906, temperature=12.5347, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:27:10.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:28:06.084 [DEBUG] [Thread-174666] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:28:06.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:28:06.176 [DEBUG] [Thread-174669] [transport.py] [_log()] starting thread (client mode): 0xae5098a0
2026-04-11T18:28:06.176 [DEBUG] [Thread-174669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:28:06.192 [DEBUG] [Thread-174669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:28:06.192 [INFO] [Thread-174669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:28:06.199 [DEBUG] [Thread-174669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] client lang: <none>
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] server lang: <none>
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] kex follows: False
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] Compression: none
2026-04-11T18:28:06.200 [DEBUG] [Thread-174669] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:28:06.264 [DEBUG] [Thread-174669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:28:06.265 [DEBUG] [Thread-174669] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:28:06.265 [DEBUG] [Thread-174669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:28:06.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:28:06.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:28:06.319 [DEBUG] [Thread-174669] [transport.py] [_log()] userauth is OK
2026-04-11T18:28:06.320 [DEBUG] [Thread-174669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:28:06.320 [DEBUG] [Thread-174669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:28:06.320 [DEBUG] [Thread-174669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:28:06.320 [DEBUG] [Thread-174669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:28:06.339 [INFO] [Thread-174669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:28:06.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:28:06.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:28:07.183 [DEBUG] [Thread-174669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:28:07.183 [DEBUG] [Thread-174669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:28:07.231 [DEBUG] [Thread-174669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:28:07.231 [DEBUG] [Thread-174669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:28:07.240 [DEBUG] [Thread-174669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:28:07.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:28:07.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-04-11T18:28:07.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:28:07.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:28:07.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:28:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:28:07.277 [DEBUG] [Thread-174669] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:28:07.587 [DEBUG] [Thread-174671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:21.600 [DEBUG] [Thread-174672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:22.633 [DEBUG] [Thread-174673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:28:37.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:28:37.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-04-11T18:28:37.667 [DEBUG] [Thread-174674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:38.482 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:38.483 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:28:38.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 28, 6), 0.026495, 99.7886, 0.0, 21.3145, 12.5181, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:28:38.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:28:06
2026-04-11T18:28:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:28:39.159 [DEBUG] [Thread-174675] [transport.py] [_log()] starting thread (client mode): 0xae50ae30
2026-04-11T18:28:39.159 [DEBUG] [Thread-174675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:28:39.180 [DEBUG] [Thread-174675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:28:39.180 [INFO] [Thread-174675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] client lang: <none>
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] server lang: <none>
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] kex follows: False
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:28:39.183 [DEBUG] [Thread-174675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:28:39.184 [DEBUG] [Thread-174675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:28:39.184 [DEBUG] [Thread-174675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:28:39.184 [DEBUG] [Thread-174675] [transport.py] [_log()] Compression: none
2026-04-11T18:28:39.184 [DEBUG] [Thread-174675] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:28:39.201 [DEBUG] [Thread-174675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:28:39.201 [DEBUG] [Thread-174675] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:28:39.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:28:39.202 [DEBUG] [Thread-174675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:28:39.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:28:39.205 [DEBUG] [Thread-174675] [transport.py] [_log()] userauth is OK
2026-04-11T18:28:39.205 [DEBUG] [Thread-174675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:28:39.205 [DEBUG] [Thread-174675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:28:39.205 [DEBUG] [Thread-174675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:28:39.205 [DEBUG] [Thread-174675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:28:39.241 [INFO] [Thread-174675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:28:39.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:28:40.053 [DEBUG] [Thread-174675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:28:40.053 [DEBUG] [Thread-174675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:28:40.054 [DEBUG] [Thread-174675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:28:40.094 [DEBUG] [Thread-174675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:28:40.095 [DEBUG] [Thread-174675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:28:40.098 [DEBUG] [Thread-174675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:28:40.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:28:40.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:28:40.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:28:40.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:28:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:28:40.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:28:40.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:28:40.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:28:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:28:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.685883 -999.00  +12.50  15.58     97  +12.10 1 3 1 3 1   825    0 0.36 -1.27 ----- 15.6 15.6 299.5 21.7 13.6 -0.7 13.4 -0.2 13.1 -0.5 13.5 -0.5
2026-04-11T18:28:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:28:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:28:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.685883
2026-04-11T18:28:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:28:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:28:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:28:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:28:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:28:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:28:06', tmtdew=0.026495, humidity=99.7886, cloud=0.0, wind=21.3145, temperature=12.5181, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:27:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:28:40.125 [DEBUG] [Thread-174675] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:28:40.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:28:40.222 [DEBUG] [Thread-174678] [transport.py] [_log()] starting thread (client mode): 0xae5621a0
2026-04-11T18:28:40.222 [DEBUG] [Thread-174678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:28:40.237 [DEBUG] [Thread-174678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:28:40.237 [INFO] [Thread-174678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:40.244 [DEBUG] [Thread-174678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] client lang: <none>
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] server lang: <none>
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] kex follows: False
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] Compression: none
2026-04-11T18:28:40.245 [DEBUG] [Thread-174678] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:28:40.303 [DEBUG] [Thread-174678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:28:40.304 [DEBUG] [Thread-174678] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:28:40.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:28:40.305 [DEBUG] [Thread-174678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:28:40.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:28:40.359 [DEBUG] [Thread-174678] [transport.py] [_log()] userauth is OK
2026-04-11T18:28:40.359 [DEBUG] [Thread-174678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:28:40.360 [DEBUG] [Thread-174678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:28:40.360 [DEBUG] [Thread-174678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:28:40.360 [DEBUG] [Thread-174678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:28:40.378 [INFO] [Thread-174678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:28:40.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:28:40.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:28:41.215 [DEBUG] [Thread-174678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:28:41.216 [DEBUG] [Thread-174678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:28:41.264 [DEBUG] [Thread-174678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:28:41.264 [DEBUG] [Thread-174678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:28:41.273 [DEBUG] [Thread-174678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:28:41.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:28:41.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-04-11T18:28:41.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-04-11T18:28:41.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:28:41.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:28:41.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:28:41.310 [DEBUG] [Thread-174678] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:28:52.705 [DEBUG] [Thread-174680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:07.757 [DEBUG] [Thread-174681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:11.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:29:11.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:29:11.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-04-11T18:29:12.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 28, 42), 0.05296, 99.5771, 0.0, 26.1814, 13.0025, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:29:12.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:28:42
2026-04-11T18:29:12.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:29:13.128 [DEBUG] [Thread-174682] [transport.py] [_log()] starting thread (client mode): 0xae5a6080
2026-04-11T18:29:13.128 [DEBUG] [Thread-174682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:29:13.147 [DEBUG] [Thread-174682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:29:13.147 [INFO] [Thread-174682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] client lang: <none>
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] server lang: <none>
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] kex follows: False
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] Compression: none
2026-04-11T18:29:13.150 [DEBUG] [Thread-174682] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:29:13.167 [DEBUG] [Thread-174682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:29:13.167 [DEBUG] [Thread-174682] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:29:13.168 [DEBUG] [Thread-174682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:29:13.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:29:13.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:29:13.170 [DEBUG] [Thread-174682] [transport.py] [_log()] userauth is OK
2026-04-11T18:29:13.170 [DEBUG] [Thread-174682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:29:13.170 [DEBUG] [Thread-174682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:29:13.170 [DEBUG] [Thread-174682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:29:13.170 [DEBUG] [Thread-174682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:29:13.186 [INFO] [Thread-174682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:29:13.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:29:13.947 [DEBUG] [Thread-174682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:29:13.948 [DEBUG] [Thread-174682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:29:13.948 [DEBUG] [Thread-174682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:29:13.988 [DEBUG] [Thread-174682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:29:13.988 [DEBUG] [Thread-174682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:29:13.991 [DEBUG] [Thread-174682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:29:14.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:29:14.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:29:14.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:29:14.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:29:14.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:29:14.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:29:14.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:29:14.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:29:14.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:29:14.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.686230 -999.00  +12.60  14.27     97  +12.20 1 3 1 3 1   818    0 0.35 -1.34 ----- 14.3 14.3 290.7 19.9 13.6 -0.4 13.5 -0.3 13.1 -0.5 13.5 -0.5
2026-04-11T18:29:14.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:29:14.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:29:14.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.686230
2026-04-11T18:29:14.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:29:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:29:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:29:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:29:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:29:14.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:28:42', tmtdew=0.05296, humidity=99.5771, cloud=0.0, wind=26.1814, temperature=13.0025, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:28:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:29:14.019 [DEBUG] [Thread-174682] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:29:14.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:29:14.124 [DEBUG] [Thread-174685] [transport.py] [_log()] starting thread (client mode): 0xae514970
2026-04-11T18:29:14.125 [DEBUG] [Thread-174685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:29:14.139 [DEBUG] [Thread-174685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:29:14.139 [INFO] [Thread-174685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:29:14.146 [DEBUG] [Thread-174685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] client lang: <none>
2026-04-11T18:29:14.147 [DEBUG] [Thread-174685] [transport.py] [_log()] server lang: <none>
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] kex follows: False
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] Compression: none
2026-04-11T18:29:14.148 [DEBUG] [Thread-174685] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:29:14.204 [DEBUG] [Thread-174685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:29:14.204 [DEBUG] [Thread-174685] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:29:14.205 [DEBUG] [Thread-174685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:29:14.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:29:14.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:29:14.260 [DEBUG] [Thread-174685] [transport.py] [_log()] userauth is OK
2026-04-11T18:29:14.260 [DEBUG] [Thread-174685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:29:14.260 [DEBUG] [Thread-174685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:29:14.260 [DEBUG] [Thread-174685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:29:14.261 [DEBUG] [Thread-174685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:29:14.279 [INFO] [Thread-174685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:29:14.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:29:14.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:29:15.095 [DEBUG] [Thread-174685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:29:15.095 [DEBUG] [Thread-174685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:29:15.143 [DEBUG] [Thread-174685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:29:15.143 [DEBUG] [Thread-174685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:29:15.153 [DEBUG] [Thread-174685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:29:15.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:29:15.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-04-11T18:29:15.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-04-11T18:29:15.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:29:15.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:29:15.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:29:15.190 [DEBUG] [Thread-174685] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:29:21.669 [DEBUG] [Thread-174687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:22.791 [DEBUG] [Thread-174688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:37.844 [DEBUG] [Thread-174689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:42.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:42.546 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:29:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:29:45.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:29:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:29:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 29, 17), 0.07905, 99.772, 0.0, 22.7264, 12.5349, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:29:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:29:17
2026-04-11T18:29:46.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:29:47.010 [DEBUG] [Thread-174690] [transport.py] [_log()] starting thread (client mode): 0xae514d00
2026-04-11T18:29:47.010 [DEBUG] [Thread-174690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:29:47.028 [DEBUG] [Thread-174690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:29:47.028 [INFO] [Thread-174690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:29:47.031 [DEBUG] [Thread-174690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] client lang: <none>
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] server lang: <none>
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] kex follows: False
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:29:47.032 [DEBUG] [Thread-174690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:29:47.033 [DEBUG] [Thread-174690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:29:47.033 [DEBUG] [Thread-174690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:29:47.033 [DEBUG] [Thread-174690] [transport.py] [_log()] Compression: none
2026-04-11T18:29:47.033 [DEBUG] [Thread-174690] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:29:47.052 [DEBUG] [Thread-174690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:29:47.052 [DEBUG] [Thread-174690] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:29:47.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:29:47.054 [DEBUG] [Thread-174690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:29:47.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:29:47.056 [DEBUG] [Thread-174690] [transport.py] [_log()] userauth is OK
2026-04-11T18:29:47.056 [DEBUG] [Thread-174690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:29:47.056 [DEBUG] [Thread-174690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:29:47.057 [DEBUG] [Thread-174690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:29:47.057 [DEBUG] [Thread-174690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:29:47.080 [INFO] [Thread-174690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:29:47.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:29:47.864 [DEBUG] [Thread-174690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:29:47.864 [DEBUG] [Thread-174690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:29:47.865 [DEBUG] [Thread-174690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:29:47.905 [DEBUG] [Thread-174690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:29:47.905 [DEBUG] [Thread-174690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:29:47.907 [DEBUG] [Thread-174690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:29:47.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:29:47.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:29:47.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:29:47.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:29:47.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:29:47.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:29:47.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:29:47.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:29:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:29:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.686925 -999.00  +12.50  17.68     97  +12.20 1 3 1 3 1   804    0 0.35 -1.41 ----- 17.7 17.7 306.6 23.6 13.6 -0.5 13.4 -0.2 13.1 -0.5 13.5 -0.5
2026-04-11T18:29:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:29:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:29:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.686925
2026-04-11T18:29:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:29:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:29:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:29:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:29:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:29:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:29:17', tmtdew=0.07905, humidity=99.772, cloud=0.0, wind=22.7264, temperature=12.5349, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:29:10.320', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:29:47.928 [DEBUG] [Thread-174690] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:29:48.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:29:48.025 [DEBUG] [Thread-174693] [transport.py] [_log()] starting thread (client mode): 0xa79520e0
2026-04-11T18:29:48.025 [DEBUG] [Thread-174693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:29:48.039 [DEBUG] [Thread-174693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:29:48.039 [INFO] [Thread-174693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:48.047 [DEBUG] [Thread-174693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] client lang: <none>
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] server lang: <none>
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] kex follows: False
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:29:48.048 [DEBUG] [Thread-174693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:29:48.049 [DEBUG] [Thread-174693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:29:48.049 [DEBUG] [Thread-174693] [transport.py] [_log()] Compression: none
2026-04-11T18:29:48.049 [DEBUG] [Thread-174693] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:29:48.104 [DEBUG] [Thread-174693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:29:48.104 [DEBUG] [Thread-174693] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:29:48.105 [DEBUG] [Thread-174693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:29:48.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:29:48.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:29:48.159 [DEBUG] [Thread-174693] [transport.py] [_log()] userauth is OK
2026-04-11T18:29:48.159 [DEBUG] [Thread-174693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:29:48.159 [DEBUG] [Thread-174693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:29:48.159 [DEBUG] [Thread-174693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:29:48.160 [DEBUG] [Thread-174693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:29:48.178 [INFO] [Thread-174693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:29:48.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:29:48.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:29:49.004 [DEBUG] [Thread-174693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:29:49.005 [DEBUG] [Thread-174693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:29:49.053 [DEBUG] [Thread-174693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:29:49.053 [DEBUG] [Thread-174693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:29:49.063 [DEBUG] [Thread-174693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:29:49.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:29:49.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-04-11T18:29:49.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-04-11T18:29:49.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:29:49.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:29:49.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:29:49.100 [DEBUG] [Thread-174693] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:29:52.879 [DEBUG] [Thread-174695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:07.932 [DEBUG] [Thread-174696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:30:19.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:30:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:30:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 29, 53), 0.06318, 99.5108, 0.0, 24.9818, 12.9031, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:30:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:29:53
2026-04-11T18:30:20.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:30:20.932 [DEBUG] [Thread-174697] [transport.py] [_log()] starting thread (client mode): 0xae50b430
2026-04-11T18:30:20.932 [DEBUG] [Thread-174697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:30:20.952 [DEBUG] [Thread-174697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:30:20.953 [INFO] [Thread-174697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] client lang: <none>
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] server lang: <none>
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] kex follows: False
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:30:20.956 [DEBUG] [Thread-174697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:30:20.957 [DEBUG] [Thread-174697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:30:20.957 [DEBUG] [Thread-174697] [transport.py] [_log()] Compression: none
2026-04-11T18:30:20.957 [DEBUG] [Thread-174697] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:30:20.974 [DEBUG] [Thread-174697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:30:20.975 [DEBUG] [Thread-174697] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:30:20.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:30:20.976 [DEBUG] [Thread-174697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:30:20.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:30:20.978 [DEBUG] [Thread-174697] [transport.py] [_log()] userauth is OK
2026-04-11T18:30:20.978 [DEBUG] [Thread-174697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:30:20.979 [DEBUG] [Thread-174697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:30:20.979 [DEBUG] [Thread-174697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:30:20.979 [DEBUG] [Thread-174697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:30:21.002 [INFO] [Thread-174697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:30:21.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:30:21.734 [DEBUG] [Thread-174699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:21.908 [DEBUG] [Thread-174697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:30:21.908 [DEBUG] [Thread-174697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:30:21.909 [DEBUG] [Thread-174697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:30:21.949 [DEBUG] [Thread-174697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:30:21.949 [DEBUG] [Thread-174697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:30:21.950 [DEBUG] [Thread-174697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:30:21.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:30:21.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:30:21.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:30:21.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:30:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:30:21.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:30:21.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:30:21.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:30:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:30:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.687271 -999.00  +12.50  16.93     97  +12.10 1 3 1 3 1   796    0 0.35 -1.45 ----- 16.9 16.9 294.6 23.4 13.6 -0.5 13.4 -0.3 13.1 -0.2 13.5 -0.4
2026-04-11T18:30:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:30:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:30:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.687271
2026-04-11T18:30:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:30:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:30:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:30:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:30:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:30:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:29:53', tmtdew=0.06318, humidity=99.5108, cloud=0.0, wind=24.9818, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:29:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:30:21.970 [DEBUG] [Thread-174697] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:30:22.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:30:22.055 [DEBUG] [Thread-174701] [transport.py] [_log()] starting thread (client mode): 0xa7950a60
2026-04-11T18:30:22.055 [DEBUG] [Thread-174701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:30:22.070 [DEBUG] [Thread-174701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:30:22.070 [INFO] [Thread-174701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:30:22.077 [DEBUG] [Thread-174701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] client lang: <none>
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] server lang: <none>
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] kex follows: False
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] Compression: none
2026-04-11T18:30:22.078 [DEBUG] [Thread-174701] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:30:22.136 [DEBUG] [Thread-174701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:30:22.136 [DEBUG] [Thread-174701] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:30:22.137 [DEBUG] [Thread-174701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:30:22.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:30:22.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:30:22.192 [DEBUG] [Thread-174701] [transport.py] [_log()] userauth is OK
2026-04-11T18:30:22.192 [DEBUG] [Thread-174701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:30:22.192 [DEBUG] [Thread-174701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:30:22.192 [DEBUG] [Thread-174701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:30:22.192 [DEBUG] [Thread-174701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:30:22.212 [INFO] [Thread-174701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:30:22.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:30:22.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:30:22.968 [DEBUG] [Thread-174703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:23.046 [DEBUG] [Thread-174701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:30:23.046 [DEBUG] [Thread-174701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:30:23.094 [DEBUG] [Thread-174701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:30:23.095 [DEBUG] [Thread-174701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:30:23.104 [DEBUG] [Thread-174701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:30:23.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:30:23.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:30:23.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-04-11T18:30:23.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:30:23.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:30:23.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:30:23.139 [DEBUG] [Thread-174701] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:30:38.016 [DEBUG] [Thread-174704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:48.534 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:48.536 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:53.054 [DEBUG] [Thread-174705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:30:53.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:30:53.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:30:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:30:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 30, 28), 0.02649, 99.7886, 0.0, 20.4149, 12.5847, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:30:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:30:28
2026-04-11T18:30:54.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:30:55.002 [DEBUG] [Thread-174706] [transport.py] [_log()] starting thread (client mode): 0xae51b5e0
2026-04-11T18:30:55.002 [DEBUG] [Thread-174706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:30:55.023 [DEBUG] [Thread-174706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:30:55.023 [INFO] [Thread-174706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:30:55.025 [DEBUG] [Thread-174706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] client lang: <none>
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] server lang: <none>
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] kex follows: False
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] Compression: none
2026-04-11T18:30:55.026 [DEBUG] [Thread-174706] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:30:55.043 [DEBUG] [Thread-174706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:30:55.043 [DEBUG] [Thread-174706] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:30:55.044 [DEBUG] [Thread-174706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:30:55.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:30:55.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:30:55.046 [DEBUG] [Thread-174706] [transport.py] [_log()] userauth is OK
2026-04-11T18:30:55.046 [DEBUG] [Thread-174706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:30:55.046 [DEBUG] [Thread-174706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:30:55.046 [DEBUG] [Thread-174706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:30:55.046 [DEBUG] [Thread-174706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:30:55.061 [INFO] [Thread-174706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:30:55.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:30:55.627 [DEBUG] [Thread-174706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:30:55.628 [DEBUG] [Thread-174706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:30:55.628 [DEBUG] [Thread-174706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:30:55.668 [DEBUG] [Thread-174706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:30:55.668 [DEBUG] [Thread-174706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:30:55.672 [DEBUG] [Thread-174706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:30:55.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:30:55.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:30:55.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:30:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:30:55.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:30:55.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:30:55.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:30:55.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:30:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:30:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.687966 -999.00  +12.50  19.90     97  +12.10 1 3 1 3 1   777    0 0.35 -1.42 ----- 19.9 19.9 292.7 24.9 13.6 -0.7 13.4 -0.2 13.1 -0.5 13.5 -0.5
2026-04-11T18:30:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:30:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:30:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.687966
2026-04-11T18:30:55.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:30:55.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:30:55.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:30:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:30:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:30:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:30:28', tmtdew=0.02649, humidity=99.7886, cloud=0.0, wind=20.4149, temperature=12.5847, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:30:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:30:55.702 [DEBUG] [Thread-174706] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:30: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-04-11T18:30:55.795 [DEBUG] [Thread-174709] [transport.py] [_log()] starting thread (client mode): 0xae51b580
2026-04-11T18:30:55.796 [DEBUG] [Thread-174709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:30:55.810 [DEBUG] [Thread-174709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:30:55.810 [INFO] [Thread-174709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:30:55.817 [DEBUG] [Thread-174709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] client lang: <none>
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] server lang: <none>
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] kex follows: False
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] Compression: none
2026-04-11T18:30:55.818 [DEBUG] [Thread-174709] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:30:55.875 [DEBUG] [Thread-174709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:30:55.876 [DEBUG] [Thread-174709] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:30:55.876 [DEBUG] [Thread-174709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:30:55.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:30:55.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:30:55.938 [DEBUG] [Thread-174709] [transport.py] [_log()] userauth is OK
2026-04-11T18:30:55.938 [DEBUG] [Thread-174709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:30:55.939 [DEBUG] [Thread-174709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:30:55.939 [DEBUG] [Thread-174709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:30:55.939 [DEBUG] [Thread-174709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:30:55.957 [INFO] [Thread-174709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:30:55.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:30:55.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:30:56.773 [DEBUG] [Thread-174709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:30:56.774 [DEBUG] [Thread-174709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:30:56.822 [DEBUG] [Thread-174709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:30:56.822 [DEBUG] [Thread-174709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:30:56.831 [DEBUG] [Thread-174709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:30:56.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:30:56.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-04-11T18:30:56.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-04-11T18:30:56.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:30:56.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:30:56.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:30:56.867 [DEBUG] [Thread-174709] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:31:08.092 [DEBUG] [Thread-174711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:31:21.807 [DEBUG] [Thread-174712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:31:23.147 [DEBUG] [Thread-174713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:31:26.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:31:26.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:31:26.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-04-11T18:31:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 31, 3), 0.023945, 99.8052, 0.0, 19.8328, 12.5847, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:31:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:31:03
2026-04-11T18:31:28.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:31:28.692 [DEBUG] [Thread-174714] [transport.py] [_log()] starting thread (client mode): 0xae514610
2026-04-11T18:31:28.692 [DEBUG] [Thread-174714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:31:28.713 [DEBUG] [Thread-174714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:31:28.714 [INFO] [Thread-174714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:31:28.715 [DEBUG] [Thread-174714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] client lang: <none>
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] server lang: <none>
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] kex follows: False
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] Compression: none
2026-04-11T18:31:28.716 [DEBUG] [Thread-174714] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:31:28.735 [DEBUG] [Thread-174714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:31:28.735 [DEBUG] [Thread-174714] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:31:28.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:31:28.736 [DEBUG] [Thread-174714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:31:28.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:31:28.740 [DEBUG] [Thread-174714] [transport.py] [_log()] userauth is OK
2026-04-11T18:31:28.741 [DEBUG] [Thread-174714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:31:28.741 [DEBUG] [Thread-174714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:31:28.741 [DEBUG] [Thread-174714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:31:28.741 [DEBUG] [Thread-174714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:31:28.765 [INFO] [Thread-174714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:31:28.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:31:29.361 [DEBUG] [Thread-174714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:31:29.361 [DEBUG] [Thread-174714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:31:29.362 [DEBUG] [Thread-174714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:31:29.402 [DEBUG] [Thread-174714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:31:29.403 [DEBUG] [Thread-174714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:31:29.405 [DEBUG] [Thread-174714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:31:29.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:31:29.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:31:29.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:31:29.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:31:29.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:31:29.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:31:29.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:31:29.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:31:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:31:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.688314 -999.00  +12.50  16.12     97  +12.10 1 3 1 3 1   766    0 0.35 -1.31 ----- 16.1 16.1 284.2 25.5 13.6 -0.7 13.4 -0.4 13.1 -0.5 13.5 -0.5
2026-04-11T18:31:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:31:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:31:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.688314
2026-04-11T18:31:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:31:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:31:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:31:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:31:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:31:29.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:31:03', tmtdew=0.023945, humidity=99.8052, cloud=0.0, wind=19.8328, temperature=12.5847, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:31:10.330', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:31:29.427 [DEBUG] [Thread-174714] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:31:29.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:31:29.519 [DEBUG] [Thread-174717] [transport.py] [_log()] starting thread (client mode): 0xae5f3bb0
2026-04-11T18:31:29.519 [DEBUG] [Thread-174717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:31:29.533 [DEBUG] [Thread-174717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:31:29.533 [INFO] [Thread-174717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:31:29.541 [DEBUG] [Thread-174717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] client lang: <none>
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] server lang: <none>
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] kex follows: False
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:31:29.542 [DEBUG] [Thread-174717] [transport.py] [_log()] Compression: none
2026-04-11T18:31:29.543 [DEBUG] [Thread-174717] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:31:29.600 [DEBUG] [Thread-174717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:31:29.600 [DEBUG] [Thread-174717] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:31:29.601 [DEBUG] [Thread-174717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:31:29.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:31:29.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:31:29.658 [DEBUG] [Thread-174717] [transport.py] [_log()] userauth is OK
2026-04-11T18:31:29.658 [DEBUG] [Thread-174717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:31:29.658 [DEBUG] [Thread-174717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:31:29.659 [DEBUG] [Thread-174717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:31:29.659 [DEBUG] [Thread-174717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:31:29.684 [INFO] [Thread-174717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:31:29.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:31:29.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:31:30.531 [DEBUG] [Thread-174717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:31:30.532 [DEBUG] [Thread-174717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:31:30.580 [DEBUG] [Thread-174717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:31:30.580 [DEBUG] [Thread-174717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:31:30.588 [DEBUG] [Thread-174717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:31:30.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:31:30.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:31:30.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-04-11T18:31:30.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:31:30.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:31:30.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:31:30.625 [DEBUG] [Thread-174717] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:31:38.184 [DEBUG] [Thread-174719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:31:52.816 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:31:52.817 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:31:53.234 [DEBUG] [Thread-174720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:00.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:32:00.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:32:00.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-04-11T18:32:01.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 31, 39), 0.05294, 99.5772, 0.0, 23.994, 13.0357, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:32:01.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:31:39
2026-04-11T18:32:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:32:02.466 [DEBUG] [Thread-174721] [transport.py] [_log()] starting thread (client mode): 0xb0fb5210
2026-04-11T18:32:02.466 [DEBUG] [Thread-174721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:32:02.479 [DEBUG] [Thread-174721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:32:02.480 [INFO] [Thread-174721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] client lang: <none>
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] server lang: <none>
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] kex follows: False
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] Compression: none
2026-04-11T18:32:02.481 [DEBUG] [Thread-174721] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:32:02.491 [DEBUG] [Thread-174721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:32:02.491 [DEBUG] [Thread-174721] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:32:02.491 [DEBUG] [Thread-174721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:32:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:32:02.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:32:02.493 [DEBUG] [Thread-174721] [transport.py] [_log()] userauth is OK
2026-04-11T18:32:02.493 [DEBUG] [Thread-174721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:32:02.493 [DEBUG] [Thread-174721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:32:02.493 [DEBUG] [Thread-174721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:32:02.493 [DEBUG] [Thread-174721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:32:02.508 [INFO] [Thread-174721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:32:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:32:03.144 [DEBUG] [Thread-174721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:32:03.145 [DEBUG] [Thread-174721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:32:03.145 [DEBUG] [Thread-174721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:32:03.186 [DEBUG] [Thread-174721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:32:03.187 [DEBUG] [Thread-174721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:32:03.190 [DEBUG] [Thread-174721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:32:03.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:32:03.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:32:03.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:32:03.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:32:03.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:32:03.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:32:03.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:32:03.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.688661 -999.00  +12.50  17.91     97  +12.10 1 3 1 3 1   755    0 0.35 -1.22 ----- 17.9 17.9 286.6 25.6 13.5 -0.7 13.4 -0.3 13.1 -0.5 13.5 -0.4
2026-04-11T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.688661
2026-04-11T18:32:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:32:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:32:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:32:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:32:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:32:03.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:31:39', tmtdew=0.05294, humidity=99.5772, cloud=0.0, wind=23.994, temperature=13.0357, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:31:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:32:03.217 [DEBUG] [Thread-174721] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:32:03.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:32:03.308 [DEBUG] [Thread-174724] [transport.py] [_log()] starting thread (client mode): 0xa7953b20
2026-04-11T18:32:03.308 [DEBUG] [Thread-174724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:32:03.323 [DEBUG] [Thread-174724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:32:03.323 [INFO] [Thread-174724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:32:03.330 [DEBUG] [Thread-174724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:32:03.330 [DEBUG] [Thread-174724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:32:03.330 [DEBUG] [Thread-174724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:32:03.330 [DEBUG] [Thread-174724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:03.330 [DEBUG] [Thread-174724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:03.330 [DEBUG] [Thread-174724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] client lang: <none>
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] server lang: <none>
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] kex follows: False
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] Compression: none
2026-04-11T18:32:03.331 [DEBUG] [Thread-174724] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:32:03.388 [DEBUG] [Thread-174724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:32:03.388 [DEBUG] [Thread-174724] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:32:03.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:32:03.389 [DEBUG] [Thread-174724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:32:03.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:32:03.444 [DEBUG] [Thread-174724] [transport.py] [_log()] userauth is OK
2026-04-11T18:32:03.444 [DEBUG] [Thread-174724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:32:03.444 [DEBUG] [Thread-174724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:32:03.444 [DEBUG] [Thread-174724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:32:03.445 [DEBUG] [Thread-174724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:32:03.467 [INFO] [Thread-174724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:32:03.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:32:03.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:32:04.362 [DEBUG] [Thread-174724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:32:04.362 [DEBUG] [Thread-174724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:32:04.410 [DEBUG] [Thread-174724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:32:04.410 [DEBUG] [Thread-174724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:32:04.419 [DEBUG] [Thread-174724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:32:04.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:32:04.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-04-11T18:32:04.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:32:04.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:32:04.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:32:04.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:32:04.456 [DEBUG] [Thread-174724] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:32:08.271 [DEBUG] [Thread-174726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:21.886 [DEBUG] [Thread-174727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:23.325 [DEBUG] [Thread-174728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:32:34.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:32:34.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-04-11T18:32:35.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 32, 14), 0.073925, 99.8052, 0.0, 22.7264, 12.5678, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:32:35.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:32:14
2026-04-11T18:32:36.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:32:36.410 [DEBUG] [Thread-174729] [transport.py] [_log()] starting thread (client mode): 0xb0fb7d30
2026-04-11T18:32:36.410 [DEBUG] [Thread-174729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:32:36.422 [DEBUG] [Thread-174729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:32:36.422 [INFO] [Thread-174729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:32:36.423 [DEBUG] [Thread-174729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:32:36.423 [DEBUG] [Thread-174729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:32:36.423 [DEBUG] [Thread-174729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:32:36.423 [DEBUG] [Thread-174729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:36.423 [DEBUG] [Thread-174729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] client lang: <none>
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] server lang: <none>
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] kex follows: False
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] Compression: none
2026-04-11T18:32:36.424 [DEBUG] [Thread-174729] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:32:36.433 [DEBUG] [Thread-174729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:32:36.433 [DEBUG] [Thread-174729] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:32:36.433 [DEBUG] [Thread-174729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:32:36.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:32:36.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:32:36.434 [DEBUG] [Thread-174729] [transport.py] [_log()] userauth is OK
2026-04-11T18:32:36.434 [DEBUG] [Thread-174729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:32:36.434 [DEBUG] [Thread-174729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:32:36.434 [DEBUG] [Thread-174729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:32:36.434 [DEBUG] [Thread-174729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:32:36.446 [INFO] [Thread-174729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:32:36.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:32:37.063 [DEBUG] [Thread-174729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:32:37.063 [DEBUG] [Thread-174729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:32:37.063 [DEBUG] [Thread-174729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:32:37.104 [DEBUG] [Thread-174729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:32:37.104 [DEBUG] [Thread-174729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:32:37.107 [DEBUG] [Thread-174729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:32:37.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:32:37.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:32:37.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:32:37.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:32:37.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:32:37.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:32:37.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:32:37.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:32:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:32:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.689008 -999.00  +12.50  20.90     97  +12.10 1 3 1 3 1   743    0 0.35 -1.17 ----- 20.9 20.9 277.6 25.0 13.6 -0.7 13.3 -0.4 13.0 -1.1 13.5 -0.8
2026-04-11T18:32:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:32:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:32:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.689008
2026-04-11T18:32:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:32:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:32:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:32:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:32:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:32:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:32:14', tmtdew=0.073925, humidity=99.8052, cloud=0.0, wind=22.7264, temperature=12.5678, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:32:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:32:37.125 [DEBUG] [Thread-174729] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:32:37.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:32:37.220 [DEBUG] [Thread-174732] [transport.py] [_log()] starting thread (client mode): 0xae517ee0
2026-04-11T18:32:37.220 [DEBUG] [Thread-174732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:32:37.235 [DEBUG] [Thread-174732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:32:37.235 [INFO] [Thread-174732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] client lang: <none>
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] server lang: <none>
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] kex follows: False
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:32:37.242 [DEBUG] [Thread-174732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:32:37.243 [DEBUG] [Thread-174732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:32:37.243 [DEBUG] [Thread-174732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:32:37.243 [DEBUG] [Thread-174732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:32:37.243 [DEBUG] [Thread-174732] [transport.py] [_log()] Compression: none
2026-04-11T18:32:37.243 [DEBUG] [Thread-174732] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:32:37.299 [DEBUG] [Thread-174732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:32:37.299 [DEBUG] [Thread-174732] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:32:37.299 [DEBUG] [Thread-174732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:32:37.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:32:37.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:32:37.355 [DEBUG] [Thread-174732] [transport.py] [_log()] userauth is OK
2026-04-11T18:32:37.356 [DEBUG] [Thread-174732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:32:37.356 [DEBUG] [Thread-174732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:32:37.356 [DEBUG] [Thread-174732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:32:37.356 [DEBUG] [Thread-174732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:32:37.374 [INFO] [Thread-174732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:32: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-04-11T18:32:37.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:32:38.210 [DEBUG] [Thread-174732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:32:38.210 [DEBUG] [Thread-174732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:32:38.258 [DEBUG] [Thread-174732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:32:38.259 [DEBUG] [Thread-174732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:32:38.267 [DEBUG] [Thread-174732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:32:38.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:32:38.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-04-11T18:32:38.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-04-11T18:32:38.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:32:38.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:32:38.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:32:38.302 [DEBUG] [Thread-174732] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:32:38.362 [DEBUG] [Thread-174734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:53.411 [DEBUG] [Thread-174735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:58.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:32:58.438 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:33:08.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:33:08.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:33:08.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-04-11T18:33:08.447 [DEBUG] [Thread-174736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:33:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 32, 50), 0.053, 99.5772, 0.0, 22.9356, 12.9031, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:33:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:32:50
2026-04-11T18:33:10.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:33:10.189 [DEBUG] [Thread-174737] [transport.py] [_log()] starting thread (client mode): 0xae515c30
2026-04-11T18:33:10.189 [DEBUG] [Thread-174737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:33:10.209 [DEBUG] [Thread-174737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:33:10.209 [INFO] [Thread-174737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:33:10.212 [DEBUG] [Thread-174737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] client lang: <none>
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] server lang: <none>
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] kex follows: False
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:33:10.213 [DEBUG] [Thread-174737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:33:10.214 [DEBUG] [Thread-174737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:33:10.214 [DEBUG] [Thread-174737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:33:10.214 [DEBUG] [Thread-174737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:33:10.214 [DEBUG] [Thread-174737] [transport.py] [_log()] Compression: none
2026-04-11T18:33:10.214 [DEBUG] [Thread-174737] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:33:10.232 [DEBUG] [Thread-174737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:33:10.233 [DEBUG] [Thread-174737] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:33:10.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:33:10.234 [DEBUG] [Thread-174737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:33:10.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:33:10.236 [DEBUG] [Thread-174737] [transport.py] [_log()] userauth is OK
2026-04-11T18:33:10.236 [DEBUG] [Thread-174737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:33:10.236 [DEBUG] [Thread-174737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:33:10.236 [DEBUG] [Thread-174737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:33:10.236 [DEBUG] [Thread-174737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:33:10.254 [INFO] [Thread-174737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:33:10.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:33:10.930 [DEBUG] [Thread-174737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:33:10.930 [DEBUG] [Thread-174737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:33:10.930 [DEBUG] [Thread-174737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:33:10.971 [DEBUG] [Thread-174737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:33:10.971 [DEBUG] [Thread-174737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:33:10.974 [DEBUG] [Thread-174737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:33:10.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:33:10.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:33:10.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:33:10.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:33:10.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:33:11.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:33:11.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:33:11.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:33:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:33:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.689355 -999.00  +12.50  15.04     97  +12.10 1 3 1 3 1   729    0 0.35 -1.24 ----- 15.0 15.0 305.8 22.0 13.5 -0.7 13.4 -0.2 13.0 -0.4 13.4 -0.6
2026-04-11T18:33:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:33:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:33:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.689355
2026-04-11T18:33:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:33:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:33:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:33:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:33:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:33:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:32:50', tmtdew=0.053, humidity=99.5772, cloud=0.0, wind=22.9356, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:32:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:33:11.004 [DEBUG] [Thread-174737] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:33:11.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:33:11.096 [DEBUG] [Thread-174740] [transport.py] [_log()] starting thread (client mode): 0xae5f1c30
2026-04-11T18:33:11.096 [DEBUG] [Thread-174740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:33:11.111 [DEBUG] [Thread-174740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:33:11.111 [INFO] [Thread-174740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:33:11.120 [DEBUG] [Thread-174740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:33:11.120 [DEBUG] [Thread-174740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:33:11.120 [DEBUG] [Thread-174740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:33:11.120 [DEBUG] [Thread-174740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:11.120 [DEBUG] [Thread-174740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] client lang: <none>
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] server lang: <none>
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] kex follows: False
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] Compression: none
2026-04-11T18:33:11.121 [DEBUG] [Thread-174740] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:33:11.188 [DEBUG] [Thread-174740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:33:11.188 [DEBUG] [Thread-174740] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:33:11.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:33:11.189 [DEBUG] [Thread-174740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:33:11.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:33:11.244 [DEBUG] [Thread-174740] [transport.py] [_log()] userauth is OK
2026-04-11T18:33:11.244 [DEBUG] [Thread-174740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:33:11.244 [DEBUG] [Thread-174740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:33:11.244 [DEBUG] [Thread-174740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:33:11.244 [DEBUG] [Thread-174740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:33:11.263 [INFO] [Thread-174740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:33:11.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:33:11.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:33:12.095 [DEBUG] [Thread-174740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:33:12.096 [DEBUG] [Thread-174740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:33:12.143 [DEBUG] [Thread-174740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:33:12.143 [DEBUG] [Thread-174740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:33:12.152 [DEBUG] [Thread-174740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:33:12.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:33:12.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:33:12.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:33:12.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:33:12.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:33:12.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:33:12.188 [DEBUG] [Thread-174740] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:33:21.971 [DEBUG] [Thread-174742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:33:23.486 [DEBUG] [Thread-174743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:33:38.545 [DEBUG] [Thread-174744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:33:42.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:33:42.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:33:42.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:33:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 33, 25), 0.081585, 99.7554, 0.0, 24.5264, 12.4181, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:33:43.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:33:25
2026-04-11T18:33:43.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:33:44.023 [DEBUG] [Thread-174745] [transport.py] [_log()] starting thread (client mode): 0xae514e20
2026-04-11T18:33:44.023 [DEBUG] [Thread-174745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:33:44.043 [DEBUG] [Thread-174745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:33:44.043 [INFO] [Thread-174745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] client lang: <none>
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] server lang: <none>
2026-04-11T18:33:44.046 [DEBUG] [Thread-174745] [transport.py] [_log()] kex follows: False
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] Compression: none
2026-04-11T18:33:44.047 [DEBUG] [Thread-174745] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:33:44.064 [DEBUG] [Thread-174745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:33:44.065 [DEBUG] [Thread-174745] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:33:44.065 [DEBUG] [Thread-174745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:33:44.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:33:44.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:33:44.067 [DEBUG] [Thread-174745] [transport.py] [_log()] userauth is OK
2026-04-11T18:33:44.068 [DEBUG] [Thread-174745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:33:44.068 [DEBUG] [Thread-174745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:33:44.068 [DEBUG] [Thread-174745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:33:44.068 [DEBUG] [Thread-174745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:33:44.092 [INFO] [Thread-174745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:33:44.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:33:44.742 [DEBUG] [Thread-174745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:33:44.742 [DEBUG] [Thread-174745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:33:44.743 [DEBUG] [Thread-174745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:33:44.783 [DEBUG] [Thread-174745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:33:44.783 [DEBUG] [Thread-174745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:33:44.787 [DEBUG] [Thread-174745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:33:44.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:33:44.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:33:44.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:33:44.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:33:44.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:33:44.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:33:44.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:33:44.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:33:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:33:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.689702 -999.00  +12.40  18.94     97  +12.10 1 3 1 3 1   715    0 0.34 -1.30 ----- 18.9 18.9 293.3 23.0 13.5 -0.7 13.3 -0.3 13.0 -0.4 13.4 -0.6
2026-04-11T18:33:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:33:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:33:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.689702
2026-04-11T18:33:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:33:44.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:33:44.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:33:44.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:33:44.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:33:44.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:33:25', tmtdew=0.081585, humidity=99.7554, cloud=0.0, wind=24.5264, temperature=12.4181, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:33:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:33:44.813 [DEBUG] [Thread-174745] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:33:44.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:33:44.905 [DEBUG] [Thread-174748] [transport.py] [_log()] starting thread (client mode): 0xae51baf0
2026-04-11T18:33:44.905 [DEBUG] [Thread-174748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:33:44.920 [DEBUG] [Thread-174748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:33:44.921 [INFO] [Thread-174748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:33:44.928 [DEBUG] [Thread-174748] [transport.py] [_log()] client lang: <none>
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] server lang: <none>
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] kex follows: False
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] Compression: none
2026-04-11T18:33:44.929 [DEBUG] [Thread-174748] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:33:44.992 [DEBUG] [Thread-174748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:33:44.992 [DEBUG] [Thread-174748] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:33:44.993 [DEBUG] [Thread-174748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:33:44.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:33:44.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:33:45.047 [DEBUG] [Thread-174748] [transport.py] [_log()] userauth is OK
2026-04-11T18:33:45.048 [DEBUG] [Thread-174748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:33:45.048 [DEBUG] [Thread-174748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:33:45.048 [DEBUG] [Thread-174748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:33:45.048 [DEBUG] [Thread-174748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:33:45.066 [INFO] [Thread-174748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:33:45.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:33:45.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:33:45.917 [DEBUG] [Thread-174748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:33:45.917 [DEBUG] [Thread-174748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:33:45.965 [DEBUG] [Thread-174748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:33:45.965 [DEBUG] [Thread-174748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:33:45.975 [DEBUG] [Thread-174748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:33:45.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:33:45.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-04-11T18:33:45.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-04-11T18:33:46.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:33:46.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:33:46.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:33:46.012 [DEBUG] [Thread-174748] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:33:53.587 [DEBUG] [Thread-174750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:03.933 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:03.934 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:08.638 [DEBUG] [Thread-174751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:34:16.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:34:16.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-04-11T18:34:17.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 34, 1), 0.079045, 99.772, 0.0, 24.7558, 12.4015, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:34:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:34:01
2026-04-11T18:34:17.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:34:17.928 [DEBUG] [Thread-174752] [transport.py] [_log()] starting thread (client mode): 0xb0f55d20
2026-04-11T18:34:17.928 [DEBUG] [Thread-174752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:34:17.948 [DEBUG] [Thread-174752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:34:17.948 [INFO] [Thread-174752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:34:17.950 [DEBUG] [Thread-174752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:34:17.951 [DEBUG] [Thread-174752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:34:17.951 [DEBUG] [Thread-174752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:34:17.951 [DEBUG] [Thread-174752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:17.951 [DEBUG] [Thread-174752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:17.951 [DEBUG] [Thread-174752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:17.951 [DEBUG] [Thread-174752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:17.960 [DEBUG] [Thread-174752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:34:17.960 [DEBUG] [Thread-174752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:34:17.960 [DEBUG] [Thread-174752] [transport.py] [_log()] client lang: <none>
2026-04-11T18:34:17.960 [DEBUG] [Thread-174752] [transport.py] [_log()] server lang: <none>
2026-04-11T18:34:17.960 [DEBUG] [Thread-174752] [transport.py] [_log()] kex follows: False
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] Compression: none
2026-04-11T18:34:17.961 [DEBUG] [Thread-174752] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:34:17.975 [DEBUG] [Thread-174752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:34:17.976 [DEBUG] [Thread-174752] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:34:17.976 [DEBUG] [Thread-174752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:34:17.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:34:17.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:34:17.979 [DEBUG] [Thread-174752] [transport.py] [_log()] userauth is OK
2026-04-11T18:34:17.979 [DEBUG] [Thread-174752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:34:17.979 [DEBUG] [Thread-174752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:34:17.979 [DEBUG] [Thread-174752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:34:17.979 [DEBUG] [Thread-174752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:34:18.002 [INFO] [Thread-174752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:34:18.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:34:18.643 [DEBUG] [Thread-174752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:34:18.644 [DEBUG] [Thread-174752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:34:18.644 [DEBUG] [Thread-174752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:34:18.684 [DEBUG] [Thread-174752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:34:18.684 [DEBUG] [Thread-174752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:34:18.688 [DEBUG] [Thread-174752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:34:18.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:34:18.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:34:18.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:34:18.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:34:18.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:34:18.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:34:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:34:18.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:34:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:34:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.690397 -999.00  +12.30  23.36     97  +11.90 1 3 1 3 1   684    0 0.35 -1.38 ----- 23.4 23.4 280.8 27.9 13.4 -0.7 13.3 -0.6 12.9 -1.5 13.4 -1.0
2026-04-11T18:34:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:34:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:34:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.690397
2026-04-11T18:34:18.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:34:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:34:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:34:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:34:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:34:18.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:34:01', tmtdew=0.079045, humidity=99.772, cloud=0.0, wind=24.7558, temperature=12.4015, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:34:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:34:18.716 [DEBUG] [Thread-174752] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:34:18.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:34:18.812 [DEBUG] [Thread-174755] [transport.py] [_log()] starting thread (client mode): 0xb0f56650
2026-04-11T18:34:18.812 [DEBUG] [Thread-174755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:34:18.827 [DEBUG] [Thread-174755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:34:18.827 [INFO] [Thread-174755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] client lang: <none>
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] server lang: <none>
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] kex follows: False
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:34:18.834 [DEBUG] [Thread-174755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:34:18.835 [DEBUG] [Thread-174755] [transport.py] [_log()] Compression: none
2026-04-11T18:34:18.835 [DEBUG] [Thread-174755] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:34:18.890 [DEBUG] [Thread-174755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:34:18.890 [DEBUG] [Thread-174755] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:34:18.890 [DEBUG] [Thread-174755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:34:18.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:34:18.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:34:18.947 [DEBUG] [Thread-174755] [transport.py] [_log()] userauth is OK
2026-04-11T18:34:18.947 [DEBUG] [Thread-174755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:34:18.947 [DEBUG] [Thread-174755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:34:18.947 [DEBUG] [Thread-174755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:34:18.947 [DEBUG] [Thread-174755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:34:18.962 [INFO] [Thread-174755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:34:18.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:34:18.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:34:19.792 [DEBUG] [Thread-174755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:34:19.792 [DEBUG] [Thread-174755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:34:19.840 [DEBUG] [Thread-174755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:34:19.840 [DEBUG] [Thread-174755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:34:19.849 [DEBUG] [Thread-174755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:34:19.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:34:19.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-04-11T18:34:19.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-04-11T18:34:19.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:34:19.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:34:19.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:34:19.886 [DEBUG] [Thread-174755] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:34:22.056 [DEBUG] [Thread-174757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:23.676 [DEBUG] [Thread-174758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:38.733 [DEBUG] [Thread-174759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:34:49.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:34:49.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:34:49.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-04-11T18:34:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 34, 37), 0.04791, 99.6103, 0.0, 24.8407, 12.9031, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:34:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:34:37
2026-04-11T18:34:51.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:34:51.718 [DEBUG] [Thread-174760] [transport.py] [_log()] starting thread (client mode): 0xb0f54250
2026-04-11T18:34:51.718 [DEBUG] [Thread-174760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:34:51.737 [DEBUG] [Thread-174760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:34:51.737 [INFO] [Thread-174760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:34:51.741 [DEBUG] [Thread-174760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:34:51.741 [DEBUG] [Thread-174760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:34:51.741 [DEBUG] [Thread-174760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:34:51.741 [DEBUG] [Thread-174760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:51.741 [DEBUG] [Thread-174760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:51.741 [DEBUG] [Thread-174760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] client lang: <none>
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] server lang: <none>
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] kex follows: False
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] Compression: none
2026-04-11T18:34:51.742 [DEBUG] [Thread-174760] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:34:51.759 [DEBUG] [Thread-174760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:34:51.760 [DEBUG] [Thread-174760] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:34:51.760 [DEBUG] [Thread-174760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:34:51.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:34:51.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:34:51.762 [DEBUG] [Thread-174760] [transport.py] [_log()] userauth is OK
2026-04-11T18:34:51.763 [DEBUG] [Thread-174760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:34:51.763 [DEBUG] [Thread-174760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:34:51.763 [DEBUG] [Thread-174760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:34:51.763 [DEBUG] [Thread-174760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:34:51.781 [INFO] [Thread-174760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:34:51.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:34:52.406 [DEBUG] [Thread-174760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:34:52.407 [DEBUG] [Thread-174760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:34:52.407 [DEBUG] [Thread-174760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:34:52.448 [DEBUG] [Thread-174760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:34:52.448 [DEBUG] [Thread-174760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:34:52.452 [DEBUG] [Thread-174760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:34:52.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:34:52.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:34:52.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:34:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:34:52.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:34:52.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:34:52.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:34:52.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:34:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:34:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.690744 -999.00  +12.20  20.44     97  +11.80 1 3 1 3 1   668    0 0.34 -1.36 ----- 20.4 20.4 293.6 27.9 13.4 -1.2 13.2 -0.5 12.8 -0.9 13.3 -0.9
2026-04-11T18:34:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:34:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:34:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.690744
2026-04-11T18:34:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:34:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:34:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:34:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:34:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:34:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:34:37', tmtdew=0.04791, humidity=99.6103, cloud=0.0, wind=24.8407, temperature=12.9031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:34:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:34:52.482 [DEBUG] [Thread-174760] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:34:52.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:34:52.576 [DEBUG] [Thread-174763] [transport.py] [_log()] starting thread (client mode): 0xb0f55e10
2026-04-11T18:34:52.576 [DEBUG] [Thread-174763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:34:52.591 [DEBUG] [Thread-174763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:34:52.591 [INFO] [Thread-174763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:34:52.599 [DEBUG] [Thread-174763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:34:52.599 [DEBUG] [Thread-174763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:34:52.600 [DEBUG] [Thread-174763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] client lang: <none>
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] server lang: <none>
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] kex follows: False
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] Compression: none
2026-04-11T18:34:52.601 [DEBUG] [Thread-174763] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:34:52.659 [DEBUG] [Thread-174763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:34:52.660 [DEBUG] [Thread-174763] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:34:52.661 [DEBUG] [Thread-174763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:34:52.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:34:52.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:34:52.715 [DEBUG] [Thread-174763] [transport.py] [_log()] userauth is OK
2026-04-11T18:34:52.716 [DEBUG] [Thread-174763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:34:52.716 [DEBUG] [Thread-174763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:34:52.716 [DEBUG] [Thread-174763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:34:52.716 [DEBUG] [Thread-174763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:34:52.735 [INFO] [Thread-174763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:34:52.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:34:52.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:34:53.539 [DEBUG] [Thread-174763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:34:53.539 [DEBUG] [Thread-174763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:34:53.588 [DEBUG] [Thread-174763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:34:53.588 [DEBUG] [Thread-174763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:34:53.597 [DEBUG] [Thread-174763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:34:53.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:34:53.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-04-11T18:34:53.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-04-11T18:34:53.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:34:53.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:34:53.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:34:53.634 [DEBUG] [Thread-174763] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:34:53.767 [DEBUG] [Thread-174765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:08.817 [DEBUG] [Thread-174766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:09.217 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:09.217 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:22.133 [DEBUG] [Thread-174767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:23.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:35:23.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:35:23.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:35:23.854 [DEBUG] [Thread-174768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:24.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 35, 12), 0.076505, 99.7886, 0.0, 23.4144, 12.3849, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:35:24.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:35:12
2026-04-11T18:35:25.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:35:25.475 [DEBUG] [Thread-174769] [transport.py] [_log()] starting thread (client mode): 0xb0f57280
2026-04-11T18:35:25.475 [DEBUG] [Thread-174769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:35:25.496 [DEBUG] [Thread-174769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:35:25.496 [INFO] [Thread-174769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:35:25.499 [DEBUG] [Thread-174769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:35:25.499 [DEBUG] [Thread-174769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:35:25.499 [DEBUG] [Thread-174769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] client lang: <none>
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] server lang: <none>
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] kex follows: False
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:35:25.500 [DEBUG] [Thread-174769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:35:25.501 [DEBUG] [Thread-174769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:35:25.501 [DEBUG] [Thread-174769] [transport.py] [_log()] Compression: none
2026-04-11T18:35:25.501 [DEBUG] [Thread-174769] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:35:25.519 [DEBUG] [Thread-174769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:35:25.520 [DEBUG] [Thread-174769] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:35:25.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:35:25.521 [DEBUG] [Thread-174769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:35:25.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:35:25.523 [DEBUG] [Thread-174769] [transport.py] [_log()] userauth is OK
2026-04-11T18:35:25.523 [DEBUG] [Thread-174769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:35:25.524 [DEBUG] [Thread-174769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:35:25.524 [DEBUG] [Thread-174769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:35:25.524 [DEBUG] [Thread-174769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:35:25.547 [INFO] [Thread-174769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:35:25.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:35:26.188 [DEBUG] [Thread-174769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:35:26.188 [DEBUG] [Thread-174769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:35:26.188 [DEBUG] [Thread-174769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:35:26.229 [DEBUG] [Thread-174769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:35:26.229 [DEBUG] [Thread-174769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:35:26.233 [DEBUG] [Thread-174769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:35:26.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:35:26.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:35:26.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:35:26.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:35:26.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:35:26.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:35:26.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:35:26.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:35:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:35:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.691091 -999.00  +12.20  17.55     97  +11.80 1 3 1 3 1   650    0 0.35 -1.47 ----- 17.6 17.6 285.1 24.0 13.4 -1.0 13.2 -0.6 12.9 -1.3 13.3 -1.3
2026-04-11T18:35:26.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:35:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:35:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.691091
2026-04-11T18:35:26.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:35:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:35:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:35:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:35:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:35:26.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:35:12', tmtdew=0.076505, humidity=99.7886, cloud=0.0, wind=23.4144, temperature=12.3849, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:35:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:35:26.260 [DEBUG] [Thread-174769] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:35:26.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:35:38.893 [DEBUG] [Thread-174772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:35:53.948 [DEBUG] [Thread-174773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:08.990 [DEBUG] [Thread-174774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:15.037 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:15.038 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:22.206 [DEBUG] [Thread-174775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:24.030 [DEBUG] [Thread-174776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:39.066 [DEBUG] [Thread-174777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:36:54.101 [DEBUG] [Thread-174778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:09.136 [DEBUG] [Thread-174779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:20.023 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:20.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:22.287 [DEBUG] [Thread-174780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:24.176 [DEBUG] [Thread-174781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:39.214 [DEBUG] [Thread-174782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:37:40.607 [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-04-11T18:37:54.249 [DEBUG] [Thread-174783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:09.285 [DEBUG] [Thread-174784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:10.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:38:10.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:38:10.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-04-11T18:38:12.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 37, 35), 0.06327, 99.5108, 0.0, 26.0402, 12.6378, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:38:12.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:37:35
2026-04-11T18:38:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:38:12.574 [DEBUG] [Thread-174785] [transport.py] [_log()] starting thread (client mode): 0xb0f55720
2026-04-11T18:38:12.574 [DEBUG] [Thread-174785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:38:12.595 [DEBUG] [Thread-174785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:38:12.595 [INFO] [Thread-174785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:38:12.599 [DEBUG] [Thread-174785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:38:12.599 [DEBUG] [Thread-174785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:38:12.599 [DEBUG] [Thread-174785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:38:12.599 [DEBUG] [Thread-174785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] client lang: <none>
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] server lang: <none>
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] kex follows: False
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:38:12.600 [DEBUG] [Thread-174785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:38:12.601 [DEBUG] [Thread-174785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:38:12.601 [DEBUG] [Thread-174785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:38:12.601 [DEBUG] [Thread-174785] [transport.py] [_log()] Compression: none
2026-04-11T18:38:12.601 [DEBUG] [Thread-174785] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:38:12.619 [DEBUG] [Thread-174785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:38:12.620 [DEBUG] [Thread-174785] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:38:12.620 [DEBUG] [Thread-174785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:38:12.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:38:12.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:38:12.623 [DEBUG] [Thread-174785] [transport.py] [_log()] userauth is OK
2026-04-11T18:38:12.623 [DEBUG] [Thread-174785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:38:12.623 [DEBUG] [Thread-174785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:38:12.623 [DEBUG] [Thread-174785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:38:12.623 [DEBUG] [Thread-174785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:38:12.646 [INFO] [Thread-174785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:38:12.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:38:13.300 [DEBUG] [Thread-174785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:38:13.300 [DEBUG] [Thread-174785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:38:13.301 [DEBUG] [Thread-174785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:38:13.342 [DEBUG] [Thread-174785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:38:13.342 [DEBUG] [Thread-174785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:38:13.345 [DEBUG] [Thread-174785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:38:13.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:38:13.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:38:13.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:38:13.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:38:13.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:38:13.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:38:13.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:38:13.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:38:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:38:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.692827 -999.00  +12.10  20.99     97  +11.70 1 3 1 3 1   549    0 0.36 -1.00 ----- 21.0 21.0 294.4 26.1 13.3 -0.7 13.1 -0.5 12.7 -1.7 13.2 -1.0
2026-04-11T18:38:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:38:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:38:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.692827
2026-04-11T18:38:13.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:38:13.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:38:13.374 [DEBUG] [Thread-174785] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:38:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:38:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:38:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:38:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:37:35', tmtdew=0.06327, humidity=99.5108, cloud=0.0, wind=26.0402, temperature=12.6378, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:37:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:38:13.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:38:13.472 [DEBUG] [Thread-174788] [transport.py] [_log()] starting thread (client mode): 0xb0f57400
2026-04-11T18:38:13.472 [DEBUG] [Thread-174788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:38:13.490 [DEBUG] [Thread-174788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:38:13.490 [INFO] [Thread-174788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:38:13.498 [DEBUG] [Thread-174788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:38:13.498 [DEBUG] [Thread-174788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:38:13.498 [DEBUG] [Thread-174788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:38:13.498 [DEBUG] [Thread-174788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:13.498 [DEBUG] [Thread-174788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] client lang: <none>
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] server lang: <none>
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] kex follows: False
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] Compression: none
2026-04-11T18:38:13.499 [DEBUG] [Thread-174788] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:38:13.555 [DEBUG] [Thread-174788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:38:13.556 [DEBUG] [Thread-174788] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:38:13.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:38:13.557 [DEBUG] [Thread-174788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:38:13.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:38:13.613 [DEBUG] [Thread-174788] [transport.py] [_log()] userauth is OK
2026-04-11T18:38:13.613 [DEBUG] [Thread-174788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:38:13.613 [DEBUG] [Thread-174788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:38:13.613 [DEBUG] [Thread-174788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:38:13.614 [DEBUG] [Thread-174788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:38:13.634 [INFO] [Thread-174788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:38:13.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:38:13.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:38:14.475 [DEBUG] [Thread-174788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:38:14.475 [DEBUG] [Thread-174788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:38:14.523 [DEBUG] [Thread-174788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:38:14.523 [DEBUG] [Thread-174788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:38:14.533 [DEBUG] [Thread-174788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:38:14.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:38:14.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-04-11T18:38:14.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-04-11T18:38:14.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:38:14.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:38:14.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:38:14.567 [DEBUG] [Thread-174788] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:38:22.366 [DEBUG] [Thread-174790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:24.323 [DEBUG] [Thread-174791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:24.915 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:24.916 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:39.377 [DEBUG] [Thread-174792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:38:44.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:38:44.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:38:44.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-04-11T18:38:45.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 38, 11), 0.02655, 99.7886, 0.0, 23.679, 12.2355, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:38:45.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:38:11
2026-04-11T18:38:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:38:46.538 [DEBUG] [Thread-174793] [transport.py] [_log()] starting thread (client mode): 0xb0f57b50
2026-04-11T18:38:46.538 [DEBUG] [Thread-174793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:38:46.559 [DEBUG] [Thread-174793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:38:46.559 [INFO] [Thread-174793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:38:46.562 [DEBUG] [Thread-174793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:38:46.562 [DEBUG] [Thread-174793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] client lang: <none>
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] server lang: <none>
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] kex follows: False
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:38:46.563 [DEBUG] [Thread-174793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:38:46.564 [DEBUG] [Thread-174793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:38:46.564 [DEBUG] [Thread-174793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:38:46.564 [DEBUG] [Thread-174793] [transport.py] [_log()] Compression: none
2026-04-11T18:38:46.564 [DEBUG] [Thread-174793] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:38:46.583 [DEBUG] [Thread-174793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:38:46.584 [DEBUG] [Thread-174793] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:38:46.584 [DEBUG] [Thread-174793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:38:46.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:38:46.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:38:46.586 [DEBUG] [Thread-174793] [transport.py] [_log()] userauth is OK
2026-04-11T18:38:46.586 [DEBUG] [Thread-174793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:38:46.586 [DEBUG] [Thread-174793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:38:46.586 [DEBUG] [Thread-174793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:38:46.586 [DEBUG] [Thread-174793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:38:46.618 [INFO] [Thread-174793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:38:46.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:38:47.249 [DEBUG] [Thread-174793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:38:47.250 [DEBUG] [Thread-174793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:38:47.250 [DEBUG] [Thread-174793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:38:47.290 [DEBUG] [Thread-174793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:38:47.290 [DEBUG] [Thread-174793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:38:47.294 [DEBUG] [Thread-174793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:38:47.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:38:47.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:38:47.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:38:47.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:38:47.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:38:47.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:38:47.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:38:47.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:38:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:38:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.693174 -999.00  +12.10  22.82     97  +11.70 1 3 1 3 1   526    0 0.36 -0.95 ----- 22.8 22.8 300.8 25.4 13.2 -0.6 13.1 -0.4 12.7 -0.8 13.1 -0.9
2026-04-11T18:38:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:38:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:38:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.693174
2026-04-11T18:38:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:38:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:38:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:38:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:38:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:38:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:38:11', tmtdew=0.02655, humidity=99.7886, cloud=0.0, wind=23.679, temperature=12.2355, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:38:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:38:47.323 [DEBUG] [Thread-174793] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:38:47.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:38:47.429 [DEBUG] [Thread-174796] [transport.py] [_log()] starting thread (client mode): 0xb0f57f10
2026-04-11T18:38:47.429 [DEBUG] [Thread-174796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:38:47.444 [DEBUG] [Thread-174796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:38:47.444 [INFO] [Thread-174796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] client lang: <none>
2026-04-11T18:38:47.452 [DEBUG] [Thread-174796] [transport.py] [_log()] server lang: <none>
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] kex follows: False
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] Compression: none
2026-04-11T18:38:47.453 [DEBUG] [Thread-174796] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:38:47.512 [DEBUG] [Thread-174796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:38:47.513 [DEBUG] [Thread-174796] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:38:47.513 [DEBUG] [Thread-174796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:38:47.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:38:47.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:38:47.573 [DEBUG] [Thread-174796] [transport.py] [_log()] userauth is OK
2026-04-11T18:38:47.573 [DEBUG] [Thread-174796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:38:47.574 [DEBUG] [Thread-174796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:38:47.574 [DEBUG] [Thread-174796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:38:47.574 [DEBUG] [Thread-174796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:38:47.593 [INFO] [Thread-174796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:38:47.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:38:47.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:38:48.437 [DEBUG] [Thread-174796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:38:48.437 [DEBUG] [Thread-174796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:38:48.486 [DEBUG] [Thread-174796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:38:48.486 [DEBUG] [Thread-174796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:38:48.495 [DEBUG] [Thread-174796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:38:48.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:38: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-04-11T18:38: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-04-11T18:38:48.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:38:48.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:38:48.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:38:48.532 [DEBUG] [Thread-174796] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:38:54.413 [DEBUG] [Thread-174798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:09.464 [DEBUG] [Thread-174799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:18.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:39:18.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:39:18.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:39:19.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 38, 46), 0.0531, 99.5772, 0.0, 23.0767, 12.6709, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:39:19.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:38:46
2026-04-11T18:39:20.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:39:20.374 [DEBUG] [Thread-174800] [transport.py] [_log()] starting thread (client mode): 0xb0f54b50
2026-04-11T18:39:20.374 [DEBUG] [Thread-174800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:39:20.395 [DEBUG] [Thread-174800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:39:20.395 [INFO] [Thread-174800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:39:20.398 [DEBUG] [Thread-174800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:39:20.398 [DEBUG] [Thread-174800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:39:20.398 [DEBUG] [Thread-174800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] client lang: <none>
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] server lang: <none>
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] kex follows: False
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:39:20.399 [DEBUG] [Thread-174800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:39:20.400 [DEBUG] [Thread-174800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:39:20.400 [DEBUG] [Thread-174800] [transport.py] [_log()] Compression: none
2026-04-11T18:39:20.400 [DEBUG] [Thread-174800] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:39:20.415 [DEBUG] [Thread-174800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:39:20.415 [DEBUG] [Thread-174800] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:39:20.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:39:20.417 [DEBUG] [Thread-174800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:39:20.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:39:20.418 [DEBUG] [Thread-174800] [transport.py] [_log()] userauth is OK
2026-04-11T18:39:20.419 [DEBUG] [Thread-174800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:39:20.419 [DEBUG] [Thread-174800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:39:20.419 [DEBUG] [Thread-174800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:39:20.419 [DEBUG] [Thread-174800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:39:20.442 [INFO] [Thread-174800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:39:20.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:39:21.078 [DEBUG] [Thread-174800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:39:21.078 [DEBUG] [Thread-174800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:39:21.078 [DEBUG] [Thread-174800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:39:21.119 [DEBUG] [Thread-174800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:39:21.120 [DEBUG] [Thread-174800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:39:21.124 [DEBUG] [Thread-174800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:39:21.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:39:21.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:39:21.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:39:21.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:39:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:39:21.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:39:21.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:39:21.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:39:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:39:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.693869 -999.00  +12.10  19.95     97  +11.80 1 3 1 3 1   481    0 0.35 -1.12 ----- 19.9 19.9 297.6 21.9 13.2 -1.1 13.1 -0.3 12.7 -0.8 13.1 -0.7
2026-04-11T18:39:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:39:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:39:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.693869
2026-04-11T18:39:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:39:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:39:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:39:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:39:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:39:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:38:46', tmtdew=0.0531, humidity=99.5772, cloud=0.0, wind=23.0767, temperature=12.6709, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:39:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:39:21.150 [DEBUG] [Thread-174800] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:39:21.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:39:21.248 [DEBUG] [Thread-174803] [transport.py] [_log()] starting thread (client mode): 0xb0f54eb0
2026-04-11T18:39:21.248 [DEBUG] [Thread-174803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:39:21.263 [DEBUG] [Thread-174803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:39:21.263 [INFO] [Thread-174803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:39:21.271 [DEBUG] [Thread-174803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:39:21.271 [DEBUG] [Thread-174803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:39:21.271 [DEBUG] [Thread-174803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:39:21.271 [DEBUG] [Thread-174803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:21.271 [DEBUG] [Thread-174803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:21.271 [DEBUG] [Thread-174803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] client lang: <none>
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] server lang: <none>
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] kex follows: False
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:39:21.272 [DEBUG] [Thread-174803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:39:21.273 [DEBUG] [Thread-174803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:39:21.273 [DEBUG] [Thread-174803] [transport.py] [_log()] Compression: none
2026-04-11T18:39:21.273 [DEBUG] [Thread-174803] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:39:21.332 [DEBUG] [Thread-174803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:39:21.332 [DEBUG] [Thread-174803] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:39:21.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:39:21.333 [DEBUG] [Thread-174803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:39:21.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:39:21.387 [DEBUG] [Thread-174803] [transport.py] [_log()] userauth is OK
2026-04-11T18:39:21.388 [DEBUG] [Thread-174803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:39:21.388 [DEBUG] [Thread-174803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:39:21.388 [DEBUG] [Thread-174803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:39:21.388 [DEBUG] [Thread-174803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:39:21.409 [INFO] [Thread-174803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:39:21.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:39:21.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:39:22.221 [DEBUG] [Thread-174803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:39:22.222 [DEBUG] [Thread-174803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:39:22.270 [DEBUG] [Thread-174803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:39:22.270 [DEBUG] [Thread-174803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:39:22.280 [DEBUG] [Thread-174803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:39:22.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:39:22.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:39:22.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-04-11T18:39:22.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:39:22.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:39:22.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:39:22.321 [DEBUG] [Thread-174803] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:39:22.441 [DEBUG] [Thread-174805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:24.502 [DEBUG] [Thread-174806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:31.567 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:31.568 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:39.565 [DEBUG] [Thread-174807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:39:52.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:39:52.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-04-11T18:39:53.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 39, 22), 0.076535, 99.7886, 0.0, 21.4034, 12.2186, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:39:53.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:39:22
2026-04-11T18:39:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:39:54.149 [DEBUG] [Thread-174808] [transport.py] [_log()] starting thread (client mode): 0xae5184f0
2026-04-11T18:39:54.149 [DEBUG] [Thread-174808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:39:54.169 [DEBUG] [Thread-174808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:39:54.169 [INFO] [Thread-174808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:39:54.172 [DEBUG] [Thread-174808] [transport.py] [_log()] client lang: <none>
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] server lang: <none>
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] kex follows: False
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] Compression: none
2026-04-11T18:39:54.173 [DEBUG] [Thread-174808] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:39:54.189 [DEBUG] [Thread-174808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:39:54.190 [DEBUG] [Thread-174808] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:39:54.190 [DEBUG] [Thread-174808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:39:54.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:39:54.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:39:54.192 [DEBUG] [Thread-174808] [transport.py] [_log()] userauth is OK
2026-04-11T18:39:54.192 [DEBUG] [Thread-174808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:39:54.193 [DEBUG] [Thread-174808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:39:54.193 [DEBUG] [Thread-174808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:39:54.193 [DEBUG] [Thread-174808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:39:54.210 [INFO] [Thread-174808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:39:54.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:39:54.601 [DEBUG] [Thread-174810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:39:54.815 [DEBUG] [Thread-174808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:39:54.815 [DEBUG] [Thread-174808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:39:54.816 [DEBUG] [Thread-174808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:39:54.856 [DEBUG] [Thread-174808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:39:54.856 [DEBUG] [Thread-174808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:39:54.860 [DEBUG] [Thread-174808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:39:54.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:39:54.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:39:54.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:39:54.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:39:54.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:39:54.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:39:54.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:39:54.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:39:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:39:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.694216 -999.00  +12.10  15.78     97  +11.70 1 3 1 3 1   457    0 0.36 -1.05 ----- 15.8 15.8 288.0 25.8 13.2 -1.2 13.1 -0.3 12.7 -0.9 13.1 -0.7
2026-04-11T18:39:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:39:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:39:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.694216
2026-04-11T18:39:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:39:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:39:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:39:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:39:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:39:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:39:22', tmtdew=0.076535, humidity=99.7886, cloud=0.0, wind=21.4034, temperature=12.2186, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:39:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:39:54.886 [DEBUG] [Thread-174808] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:39:54.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:39:54.978 [DEBUG] [Thread-174812] [transport.py] [_log()] starting thread (client mode): 0xae518760
2026-04-11T18:39:54.979 [DEBUG] [Thread-174812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:39:54.993 [DEBUG] [Thread-174812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:39:54.994 [INFO] [Thread-174812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:39:55.001 [DEBUG] [Thread-174812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:39:55.001 [DEBUG] [Thread-174812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:39:55.001 [DEBUG] [Thread-174812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:39:55.001 [DEBUG] [Thread-174812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:55.001 [DEBUG] [Thread-174812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] client lang: <none>
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] server lang: <none>
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] kex follows: False
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] Compression: none
2026-04-11T18:39:55.002 [DEBUG] [Thread-174812] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:39:55.058 [DEBUG] [Thread-174812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:39:55.059 [DEBUG] [Thread-174812] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:39:55.060 [DEBUG] [Thread-174812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:39:55.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:39:55.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:39:55.115 [DEBUG] [Thread-174812] [transport.py] [_log()] userauth is OK
2026-04-11T18:39:55.116 [DEBUG] [Thread-174812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:39:55.116 [DEBUG] [Thread-174812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:39:55.116 [DEBUG] [Thread-174812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:39:55.116 [DEBUG] [Thread-174812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:39:55.136 [INFO] [Thread-174812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:39:55.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:39:55.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:39:55.968 [DEBUG] [Thread-174812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:39:55.968 [DEBUG] [Thread-174812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:39:56.016 [DEBUG] [Thread-174812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:39:56.016 [DEBUG] [Thread-174812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:39:56.025 [DEBUG] [Thread-174812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:39:56.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:39:56.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-04-11T18:39:56.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-04-11T18:39:56.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:39:56.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:39:56.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:39:56.062 [DEBUG] [Thread-174812] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:40:09.641 [DEBUG] [Thread-174814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:22.514 [DEBUG] [Thread-174815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:24.694 [DEBUG] [Thread-174816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:40:26.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:40:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:40:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 39, 58), 0.02401, 99.8052, 0.0, 20.9801, 12.1855, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:40:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:39:58
2026-04-11T18:40:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:40:27.857 [DEBUG] [Thread-174817] [transport.py] [_log()] starting thread (client mode): 0xb0fb5510
2026-04-11T18:40:27.857 [DEBUG] [Thread-174817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:40:27.878 [DEBUG] [Thread-174817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:40:27.879 [INFO] [Thread-174817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] client lang: <none>
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] server lang: <none>
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] kex follows: False
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:40:27.882 [DEBUG] [Thread-174817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:40:27.883 [DEBUG] [Thread-174817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:40:27.883 [DEBUG] [Thread-174817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:40:27.883 [DEBUG] [Thread-174817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:40:27.883 [DEBUG] [Thread-174817] [transport.py] [_log()] Compression: none
2026-04-11T18:40:27.883 [DEBUG] [Thread-174817] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:40:27.900 [DEBUG] [Thread-174817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:40:27.900 [DEBUG] [Thread-174817] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:40:27.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:40:27.901 [DEBUG] [Thread-174817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:40:27.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:40:27.903 [DEBUG] [Thread-174817] [transport.py] [_log()] userauth is OK
2026-04-11T18:40:27.903 [DEBUG] [Thread-174817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:40:27.903 [DEBUG] [Thread-174817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:40:27.904 [DEBUG] [Thread-174817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:40:27.904 [DEBUG] [Thread-174817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:40:27.938 [INFO] [Thread-174817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:40:27.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:40:28.542 [DEBUG] [Thread-174817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:40:28.543 [DEBUG] [Thread-174817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:40:28.543 [DEBUG] [Thread-174817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:40:28.584 [DEBUG] [Thread-174817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:40:28.584 [DEBUG] [Thread-174817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:40:28.587 [DEBUG] [Thread-174817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:40:28.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:40:28.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:40:28.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:40:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:40:28.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:40:28.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:40:28.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:40:28.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:40:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:40:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.694563 -999.00  +12.10  21.02     97  +11.70 1 3 1 3 1   434    0 0.36 -1.01 ----- 21.0 21.0 284.0 25.3 13.2 -1.2 13.1 -0.8 12.7 -0.9 13.1 -0.8
2026-04-11T18:40:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:40:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:40:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.694563
2026-04-11T18:40:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:40:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:40:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:40:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:40:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:40:28.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:39:58', tmtdew=0.02401, humidity=99.8052, cloud=0.0, wind=20.9801, temperature=12.1855, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:40:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:40:28.616 [DEBUG] [Thread-174817] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:40:28.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:40:28.710 [DEBUG] [Thread-174820] [transport.py] [_log()] starting thread (client mode): 0xb0fb6e60
2026-04-11T18:40:28.710 [DEBUG] [Thread-174820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:40:28.725 [DEBUG] [Thread-174820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:40:28.726 [INFO] [Thread-174820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:40:28.733 [DEBUG] [Thread-174820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:40:28.734 [DEBUG] [Thread-174820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] client lang: <none>
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] server lang: <none>
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] kex follows: False
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:40:28.735 [DEBUG] [Thread-174820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:40:28.736 [DEBUG] [Thread-174820] [transport.py] [_log()] Compression: none
2026-04-11T18:40:28.736 [DEBUG] [Thread-174820] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:40:28.793 [DEBUG] [Thread-174820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:40:28.793 [DEBUG] [Thread-174820] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:40:28.794 [DEBUG] [Thread-174820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:40:28.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:40:28.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:40:28.848 [DEBUG] [Thread-174820] [transport.py] [_log()] userauth is OK
2026-04-11T18:40:28.849 [DEBUG] [Thread-174820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:40:28.849 [DEBUG] [Thread-174820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:40:28.849 [DEBUG] [Thread-174820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:40:28.849 [DEBUG] [Thread-174820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:40:28.868 [INFO] [Thread-174820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:40:28.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:40:28.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:40:29.713 [DEBUG] [Thread-174820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:40:29.713 [DEBUG] [Thread-174820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:40:29.761 [DEBUG] [Thread-174820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:40:29.761 [DEBUG] [Thread-174820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:40:29.771 [DEBUG] [Thread-174820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:40:29.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:40:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:40: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') -> 00000000
2026-04-11T18:40:29.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:40:29.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:40:29.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:40:29.808 [DEBUG] [Thread-174820] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:40:36.151 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:36.152 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:39.730 [DEBUG] [Thread-174822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:54.784 [DEBUG] [Thread-174823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:40:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:40:59.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:40:59.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:41:01.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 40, 33), 0.06329, 99.5108, 0.0, 22.477, 12.6046, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:41:01.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:40:33
2026-04-11T18:41:01.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:41:01.765 [DEBUG] [Thread-174824] [transport.py] [_log()] starting thread (client mode): 0xb0f57760
2026-04-11T18:41:01.765 [DEBUG] [Thread-174824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:41:01.779 [DEBUG] [Thread-174824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:41:01.779 [INFO] [Thread-174824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] client lang: <none>
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] server lang: <none>
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] kex follows: False
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] Compression: none
2026-04-11T18:41:01.781 [DEBUG] [Thread-174824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:41:01.792 [DEBUG] [Thread-174824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:41:01.792 [DEBUG] [Thread-174824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:41:01.793 [DEBUG] [Thread-174824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:41:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:41:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:41:01.793 [DEBUG] [Thread-174824] [transport.py] [_log()] userauth is OK
2026-04-11T18:41:01.793 [DEBUG] [Thread-174824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:41:01.793 [DEBUG] [Thread-174824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:41:01.793 [DEBUG] [Thread-174824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:41:01.793 [DEBUG] [Thread-174824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:41:01.803 [INFO] [Thread-174824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:41:01.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:41:02.440 [DEBUG] [Thread-174824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:41:02.441 [DEBUG] [Thread-174824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:41:02.441 [DEBUG] [Thread-174824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:41:02.481 [DEBUG] [Thread-174824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:41:02.481 [DEBUG] [Thread-174824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:41:02.485 [DEBUG] [Thread-174824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:41:02.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:41:02.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:41:02.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:41:02.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:41:02.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:41:02.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:41:02.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:41:02.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:41:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:41:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.694911 -999.00  +12.10  14.21     97  +11.70 1 3 1 3 1   411    0 0.36 -0.83 ----- 14.2 14.2 290.0 20.7 13.2 -1.0 13.0 -0.6 12.7 -0.6 13.1 -0.3
2026-04-11T18:41:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:41:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:41:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.694911
2026-04-11T18:41:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:41:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:41:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:41:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:41:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:41:02.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:40:33', tmtdew=0.06329, humidity=99.5108, cloud=0.0, wind=22.477, temperature=12.6046, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:40:40.310', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:41:02.515 [DEBUG] [Thread-174824] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:41:02.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:41:02.608 [DEBUG] [Thread-174827] [transport.py] [_log()] starting thread (client mode): 0xb0f55d80
2026-04-11T18:41:02.608 [DEBUG] [Thread-174827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:41:02.623 [DEBUG] [Thread-174827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:41:02.623 [INFO] [Thread-174827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:41:02.631 [DEBUG] [Thread-174827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:41:02.631 [DEBUG] [Thread-174827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:41:02.631 [DEBUG] [Thread-174827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] client lang: <none>
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] server lang: <none>
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] kex follows: False
2026-04-11T18:41:02.632 [DEBUG] [Thread-174827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:41:02.633 [DEBUG] [Thread-174827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:41:02.633 [DEBUG] [Thread-174827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:41:02.633 [DEBUG] [Thread-174827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:41:02.633 [DEBUG] [Thread-174827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:41:02.633 [DEBUG] [Thread-174827] [transport.py] [_log()] Compression: none
2026-04-11T18:41:02.633 [DEBUG] [Thread-174827] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:41:02.692 [DEBUG] [Thread-174827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:41:02.692 [DEBUG] [Thread-174827] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:41:02.693 [DEBUG] [Thread-174827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:41:02.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:41:02.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:41:02.747 [DEBUG] [Thread-174827] [transport.py] [_log()] userauth is OK
2026-04-11T18:41:02.747 [DEBUG] [Thread-174827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:41:02.747 [DEBUG] [Thread-174827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:41:02.747 [DEBUG] [Thread-174827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:41:02.748 [DEBUG] [Thread-174827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:41:02.772 [INFO] [Thread-174827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:41:02.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:41:02.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:41:03.626 [DEBUG] [Thread-174827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:41:03.626 [DEBUG] [Thread-174827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:41:03.673 [DEBUG] [Thread-174827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:41:03.673 [DEBUG] [Thread-174827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:41:03.682 [DEBUG] [Thread-174827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:41:03.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:41:03.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-04-11T18:41:03.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-04-11T18:41:03.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:41:03.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:41:03.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:41:03.716 [DEBUG] [Thread-174827] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:41:09.815 [DEBUG] [Thread-174829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:41:22.602 [DEBUG] [Thread-174830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:41:24.867 [DEBUG] [Thread-174831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:41:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:41:33.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:41:33.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-04-11T18:41:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 41, 8), 0.081635, 99.7554, 0.0, 21.9856, 12.1689, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:41:35.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:41:08
2026-04-11T18:41:35.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:41:35.540 [DEBUG] [Thread-174832] [transport.py] [_log()] starting thread (client mode): 0xb0f56c50
2026-04-11T18:41:35.540 [DEBUG] [Thread-174832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:41:35.561 [DEBUG] [Thread-174832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:41:35.561 [INFO] [Thread-174832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] client lang: <none>
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] server lang: <none>
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] kex follows: False
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] Compression: none
2026-04-11T18:41:35.565 [DEBUG] [Thread-174832] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:41:35.582 [DEBUG] [Thread-174832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:41:35.583 [DEBUG] [Thread-174832] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:41:35.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:41:35.584 [DEBUG] [Thread-174832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:41:35.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:41:35.586 [DEBUG] [Thread-174832] [transport.py] [_log()] userauth is OK
2026-04-11T18:41:35.586 [DEBUG] [Thread-174832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:41:35.586 [DEBUG] [Thread-174832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:41:35.586 [DEBUG] [Thread-174832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:41:35.586 [DEBUG] [Thread-174832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:41:35.604 [INFO] [Thread-174832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:41:35.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:41:36.261 [DEBUG] [Thread-174832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:41:36.261 [DEBUG] [Thread-174832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:41:36.262 [DEBUG] [Thread-174832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:41:36.302 [DEBUG] [Thread-174832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:41:36.302 [DEBUG] [Thread-174832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:41:36.305 [DEBUG] [Thread-174832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:41:36.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:41:36.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:41:36.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:41:36.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:41:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:41:36.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:41:36.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:41:36.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:41:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:41:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.695258 -999.00  +12.20  14.67     97  +11.80 1 3 1 3 1   388    0 0.35 -0.95 ----- 14.7 14.7 304.6 20.6 13.2 -0.9 13.0 -0.6 12.7 -0.6 13.1 -0.2
2026-04-11T18:41:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:41:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:41:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.695258
2026-04-11T18:41:36.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:41:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:41:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:41:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:41:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:41:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:41:08', tmtdew=0.081635, humidity=99.7554, cloud=0.0, wind=21.9856, temperature=12.1689, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:41:10.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:41:36.334 [DEBUG] [Thread-174832] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:41:36.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:41:36.426 [DEBUG] [Thread-174835] [transport.py] [_log()] starting thread (client mode): 0xae517f40
2026-04-11T18:41:36.427 [DEBUG] [Thread-174835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:41:36.442 [DEBUG] [Thread-174835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:41:36.442 [INFO] [Thread-174835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] client lang: <none>
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] server lang: <none>
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] kex follows: False
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] Compression: none
2026-04-11T18:41:36.450 [DEBUG] [Thread-174835] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:41:36.509 [DEBUG] [Thread-174835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:41:36.510 [DEBUG] [Thread-174835] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:41:36.511 [DEBUG] [Thread-174835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:41:36.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:41:36.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:41:36.569 [DEBUG] [Thread-174835] [transport.py] [_log()] userauth is OK
2026-04-11T18:41:36.570 [DEBUG] [Thread-174835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:41:36.570 [DEBUG] [Thread-174835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:41:36.570 [DEBUG] [Thread-174835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:41:36.570 [DEBUG] [Thread-174835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:41:36.588 [INFO] [Thread-174835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:41:36.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:41:36.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:41:37.429 [DEBUG] [Thread-174835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:41:37.429 [DEBUG] [Thread-174835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:41:37.477 [DEBUG] [Thread-174835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:41:37.477 [DEBUG] [Thread-174835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:41:37.487 [DEBUG] [Thread-174835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:41:37.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:41:37.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-04-11T18:41:37.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-04-11T18:41:37.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:41:37.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:41:37.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:41:37.529 [DEBUG] [Thread-174835] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:41:39.906 [DEBUG] [Thread-174837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:41:40.718 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:41:40.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:41:54.957 [DEBUG] [Thread-174838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:42:07.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:42:07.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-04-11T18:42:08.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 41, 44), 0.04291, 99.6435, 0.0, 25.0877, 12.7373, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:42:08.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:41:44
2026-04-11T18:42:09.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:42:09.335 [DEBUG] [Thread-174839] [transport.py] [_log()] starting thread (client mode): 0xb0f57370
2026-04-11T18:42:09.335 [DEBUG] [Thread-174839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:42:09.358 [DEBUG] [Thread-174839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:42:09.358 [INFO] [Thread-174839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:42:09.362 [DEBUG] [Thread-174839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:42:09.362 [DEBUG] [Thread-174839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] client lang: <none>
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] server lang: <none>
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] kex follows: False
2026-04-11T18:42:09.363 [DEBUG] [Thread-174839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:42:09.364 [DEBUG] [Thread-174839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:42:09.364 [DEBUG] [Thread-174839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:42:09.364 [DEBUG] [Thread-174839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:42:09.364 [DEBUG] [Thread-174839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:42:09.364 [DEBUG] [Thread-174839] [transport.py] [_log()] Compression: none
2026-04-11T18:42:09.364 [DEBUG] [Thread-174839] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:42:09.382 [DEBUG] [Thread-174839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:42:09.382 [DEBUG] [Thread-174839] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:42:09.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:42:09.383 [DEBUG] [Thread-174839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:42:09.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:42:09.385 [DEBUG] [Thread-174839] [transport.py] [_log()] userauth is OK
2026-04-11T18:42:09.386 [DEBUG] [Thread-174839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:42:09.386 [DEBUG] [Thread-174839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:42:09.386 [DEBUG] [Thread-174839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:42:09.386 [DEBUG] [Thread-174839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:42:09.404 [INFO] [Thread-174839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:42:09.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:42:09.993 [DEBUG] [Thread-174841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:10.016 [DEBUG] [Thread-174839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:42:10.017 [DEBUG] [Thread-174839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:42:10.017 [DEBUG] [Thread-174839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:42:10.059 [DEBUG] [Thread-174839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:42:10.059 [DEBUG] [Thread-174839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:42:10.062 [DEBUG] [Thread-174839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:42:10.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:42:10.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:42:10.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:42:10.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:42:10.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:42:10.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:42:10.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:42:10.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:42:10.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:42:10.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.695605 -999.00  +12.20  17.65     97  +11.80 1 3 1 3 1   365    0 0.36 -0.79 ----- 17.6 17.6 293.5 23.1 13.2 -1.0 13.0 -0.7 12.7 -0.8 13.1 -0.5
2026-04-11T18:42:10.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:42:10.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:42:10.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.695605
2026-04-11T18:42:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:42:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:42:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:42:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:42:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:42:10.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:41:44', tmtdew=0.04291, humidity=99.6435, cloud=0.0, wind=25.0877, temperature=12.7373, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:41:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:42:10.094 [DEBUG] [Thread-174839] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:42:10.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:42:10.185 [DEBUG] [Thread-174843] [transport.py] [_log()] starting thread (client mode): 0xae5182e0
2026-04-11T18:42:10.186 [DEBUG] [Thread-174843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:42:10.200 [DEBUG] [Thread-174843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:42:10.200 [INFO] [Thread-174843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:42:10.208 [DEBUG] [Thread-174843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:42:10.208 [DEBUG] [Thread-174843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] client lang: <none>
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] server lang: <none>
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] kex follows: False
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] Compression: none
2026-04-11T18:42:10.209 [DEBUG] [Thread-174843] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:42:10.267 [DEBUG] [Thread-174843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:42:10.267 [DEBUG] [Thread-174843] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:42:10.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:42:10.268 [DEBUG] [Thread-174843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:42:10.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:42:10.323 [DEBUG] [Thread-174843] [transport.py] [_log()] userauth is OK
2026-04-11T18:42:10.324 [DEBUG] [Thread-174843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:42:10.324 [DEBUG] [Thread-174843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:42:10.324 [DEBUG] [Thread-174843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:42:10.324 [DEBUG] [Thread-174843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:42:10.344 [INFO] [Thread-174843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:42:10.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:42:10.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:42:11.183 [DEBUG] [Thread-174843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:42:11.184 [DEBUG] [Thread-174843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:42:11.232 [DEBUG] [Thread-174843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:42:11.232 [DEBUG] [Thread-174843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:42:11.243 [DEBUG] [Thread-174843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:42:11.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:42:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:42:11.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:42:11.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:42:11.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:42:11.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:42:11.278 [DEBUG] [Thread-174843] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:42:22.689 [DEBUG] [Thread-174845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:25.029 [DEBUG] [Thread-174846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:40.080 [DEBUG] [Thread-174847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:41.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:42:41.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:42:41.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-04-11T18:42:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 42, 20), 0.024005, 99.8052, 0.0, 20.8382, 12.2521, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:42:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:42:20
2026-04-11T18:42:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:42:43.181 [DEBUG] [Thread-174848] [transport.py] [_log()] starting thread (client mode): 0xae5a7580
2026-04-11T18:42:43.181 [DEBUG] [Thread-174848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:42:43.201 [DEBUG] [Thread-174848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:42:43.201 [INFO] [Thread-174848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] client lang: <none>
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] server lang: <none>
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] kex follows: False
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] Compression: none
2026-04-11T18:42:43.204 [DEBUG] [Thread-174848] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:42:43.220 [DEBUG] [Thread-174848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:42:43.221 [DEBUG] [Thread-174848] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:42:43.221 [DEBUG] [Thread-174848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:42:43.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:42:43.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:42:43.223 [DEBUG] [Thread-174848] [transport.py] [_log()] userauth is OK
2026-04-11T18:42:43.224 [DEBUG] [Thread-174848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:42:43.224 [DEBUG] [Thread-174848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:42:43.224 [DEBUG] [Thread-174848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:42:43.224 [DEBUG] [Thread-174848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:42:43.248 [INFO] [Thread-174848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:42:43.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:42:43.852 [DEBUG] [Thread-174848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:42:43.852 [DEBUG] [Thread-174848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:42:43.853 [DEBUG] [Thread-174848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:42:43.893 [DEBUG] [Thread-174848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:42:43.893 [DEBUG] [Thread-174848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:42:43.897 [DEBUG] [Thread-174848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:42:43.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:42:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:42:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:42:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:42:43.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:42:43.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:42:43.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:42:43.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:42:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:42:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.695952 -999.00  +12.20  19.12     97  +11.80 1 3 1 3 1   343    0 0.36 -0.87 ----- 19.1 19.1 303.0 24.4 13.2 -1.0 13.0 -0.8 12.7 -0.8 13.1 -0.5
2026-04-11T18:42:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:42:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:42:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.695952
2026-04-11T18:42:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:42:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:42:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:42:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:42:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:42:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:42:20', tmtdew=0.024005, humidity=99.8052, cloud=0.0, wind=20.8382, temperature=12.2521, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:42:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:42:43.925 [DEBUG] [Thread-174848] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:42:44.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:42:44.017 [DEBUG] [Thread-174851] [transport.py] [_log()] starting thread (client mode): 0xae5a6440
2026-04-11T18:42:44.017 [DEBUG] [Thread-174851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:42:44.032 [DEBUG] [Thread-174851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:42:44.032 [INFO] [Thread-174851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:42:44.040 [DEBUG] [Thread-174851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:42:44.040 [DEBUG] [Thread-174851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:42:44.040 [DEBUG] [Thread-174851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:42:44.040 [DEBUG] [Thread-174851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] client lang: <none>
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] server lang: <none>
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] kex follows: False
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] Compression: none
2026-04-11T18:42:44.041 [DEBUG] [Thread-174851] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:42:44.097 [DEBUG] [Thread-174851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:42:44.098 [DEBUG] [Thread-174851] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:42:44.098 [DEBUG] [Thread-174851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:42:44.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:42:44.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:42:44.156 [DEBUG] [Thread-174851] [transport.py] [_log()] userauth is OK
2026-04-11T18:42:44.156 [DEBUG] [Thread-174851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:42:44.156 [DEBUG] [Thread-174851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:42:44.156 [DEBUG] [Thread-174851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:42:44.156 [DEBUG] [Thread-174851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:42:44.174 [INFO] [Thread-174851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:42: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-04-11T18:42:44.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:42:44.818 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:44.819 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:42:45.018 [DEBUG] [Thread-174851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:42:45.018 [DEBUG] [Thread-174851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:42:45.066 [DEBUG] [Thread-174851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:42:45.066 [DEBUG] [Thread-174851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:42:45.076 [DEBUG] [Thread-174851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:42:45.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:42:45.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-04-11T18:42: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') -> 00000000
2026-04-11T18:42:45.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:42:45.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:42:45.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:42:45.113 [DEBUG] [Thread-174851] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:42:55.117 [DEBUG] [Thread-174853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:10.177 [DEBUG] [Thread-174854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:15.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:43:15.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:43:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:43:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 42, 55), 0.07655, 99.7886, 0.0, 21.3851, 12.2855, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:43:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:42:55
2026-04-11T18:43:16.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:43:16.952 [DEBUG] [Thread-174855] [transport.py] [_log()] starting thread (client mode): 0xae5a45e0
2026-04-11T18:43:16.952 [DEBUG] [Thread-174855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:43:16.971 [DEBUG] [Thread-174855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:43:16.971 [INFO] [Thread-174855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:43:16.974 [DEBUG] [Thread-174855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] client lang: <none>
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] server lang: <none>
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] kex follows: False
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:43:16.975 [DEBUG] [Thread-174855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:43:16.976 [DEBUG] [Thread-174855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:43:16.976 [DEBUG] [Thread-174855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:43:16.976 [DEBUG] [Thread-174855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:43:16.976 [DEBUG] [Thread-174855] [transport.py] [_log()] Compression: none
2026-04-11T18:43:16.976 [DEBUG] [Thread-174855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:43:16.994 [DEBUG] [Thread-174855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:43:16.994 [DEBUG] [Thread-174855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:43:16.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:43:16.995 [DEBUG] [Thread-174855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:43:16.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:43:16.997 [DEBUG] [Thread-174855] [transport.py] [_log()] userauth is OK
2026-04-11T18:43:16.997 [DEBUG] [Thread-174855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:43:16.997 [DEBUG] [Thread-174855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:43:16.997 [DEBUG] [Thread-174855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:43:16.997 [DEBUG] [Thread-174855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:43:17.015 [INFO] [Thread-174855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:43:17.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:43:17.629 [DEBUG] [Thread-174855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:43:17.629 [DEBUG] [Thread-174855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:43:17.629 [DEBUG] [Thread-174855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:43:17.670 [DEBUG] [Thread-174855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:43:17.670 [DEBUG] [Thread-174855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:43:17.673 [DEBUG] [Thread-174855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:43:17.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:43:17.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:43:17.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:43:17.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:43:17.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:43:17.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:43:17.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.696299 -999.00  +12.10  22.40     97  +11.80 1 3 1 3 1   321    0 0.35 -1.01 ----- 22.4 22.4 297.0 25.2 13.2 -0.7 13.0 -0.7 12.7 -0.9 13.1 -0.5
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.696299
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:43:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:43:17.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:43:17.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:43:17.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:43:17.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:42:55', tmtdew=0.07655, humidity=99.7886, cloud=0.0, wind=21.3851, temperature=12.2855, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:42:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:43:17.694 [DEBUG] [Thread-174855] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:43:17.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:43:17.785 [DEBUG] [Thread-174858] [transport.py] [_log()] starting thread (client mode): 0xb0f56fe0
2026-04-11T18:43:17.785 [DEBUG] [Thread-174858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:43:17.800 [DEBUG] [Thread-174858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:43:17.800 [INFO] [Thread-174858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] client lang: <none>
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] server lang: <none>
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] kex follows: False
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] Compression: none
2026-04-11T18:43:17.808 [DEBUG] [Thread-174858] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:43:17.865 [DEBUG] [Thread-174858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:43:17.865 [DEBUG] [Thread-174858] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:43:17.865 [DEBUG] [Thread-174858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:43:17.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:43:17.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:43:17.922 [DEBUG] [Thread-174858] [transport.py] [_log()] userauth is OK
2026-04-11T18:43:17.922 [DEBUG] [Thread-174858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:43:17.923 [DEBUG] [Thread-174858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:43:17.923 [DEBUG] [Thread-174858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:43:17.923 [DEBUG] [Thread-174858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:43:17.942 [INFO] [Thread-174858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:43:17.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:43:17.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:43:18.787 [DEBUG] [Thread-174858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:43:18.787 [DEBUG] [Thread-174858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:43:18.835 [DEBUG] [Thread-174858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:43:18.835 [DEBUG] [Thread-174858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:43:18.844 [DEBUG] [Thread-174858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:43:18.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:43:18.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:43:18.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:43:18.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:43:18.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:43:18.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:43:18.880 [DEBUG] [Thread-174858] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:43:22.754 [DEBUG] [Thread-174860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:25.216 [DEBUG] [Thread-174861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:40.266 [DEBUG] [Thread-174862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:48.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:43:48.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:43:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:43:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 43, 30), 0.071455, 99.8217, 0.0, 20.6971, 12.3186, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:43:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:43:30
2026-04-11T18:43:50.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:43:50.725 [DEBUG] [Thread-174863] [transport.py] [_log()] starting thread (client mode): 0xb0f57340
2026-04-11T18:43:50.725 [DEBUG] [Thread-174863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:43:50.747 [DEBUG] [Thread-174863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:43:50.747 [INFO] [Thread-174863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:43:50.748 [DEBUG] [Thread-174863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:43:50.748 [DEBUG] [Thread-174863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:43:50.748 [DEBUG] [Thread-174863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:43:50.748 [DEBUG] [Thread-174863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:50.748 [DEBUG] [Thread-174863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] client lang: <none>
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] server lang: <none>
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] kex follows: False
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] Compression: none
2026-04-11T18:43:50.749 [DEBUG] [Thread-174863] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:43:50.766 [DEBUG] [Thread-174863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:43:50.767 [DEBUG] [Thread-174863] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:43:50.768 [DEBUG] [Thread-174863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:43:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:43:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:43:50.769 [DEBUG] [Thread-174863] [transport.py] [_log()] userauth is OK
2026-04-11T18:43:50.770 [DEBUG] [Thread-174863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:43:50.770 [DEBUG] [Thread-174863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:43:50.770 [DEBUG] [Thread-174863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:43:50.770 [DEBUG] [Thread-174863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:43:50.807 [INFO] [Thread-174863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:43:50.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:43:51.174 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:51.175 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:43:51.460 [DEBUG] [Thread-174863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:43:51.460 [DEBUG] [Thread-174863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:43:51.461 [DEBUG] [Thread-174863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:43:51.501 [DEBUG] [Thread-174863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:43:51.501 [DEBUG] [Thread-174863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:43:51.505 [DEBUG] [Thread-174863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:43:51.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:43:51.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:43:51.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:43:51.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:43:51.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:43:51.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:43:51.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:43:51.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:43:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:43:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.696647 -999.00  +12.10  22.87     97  +11.70 1 3 1 3 1   300    0 0.36 -0.97 ----- 22.9 22.9 299.6 26.5 13.2 -0.8 13.0 -0.8 12.7 -0.6 13.1 -0.6
2026-04-11T18:43:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:43:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:43:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.696647
2026-04-11T18:43:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:43:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:43:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:43:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:43:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:43:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:43:30', tmtdew=0.071455, humidity=99.8217, cloud=0.0, wind=20.6971, temperature=12.3186, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:43:10.301', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:43:51.533 [DEBUG] [Thread-174863] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:43:51.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:43:51.626 [DEBUG] [Thread-174866] [transport.py] [_log()] starting thread (client mode): 0xae5159c0
2026-04-11T18:43:51.626 [DEBUG] [Thread-174866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:43:51.643 [DEBUG] [Thread-174866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:43:51.643 [INFO] [Thread-174866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:43:51.650 [DEBUG] [Thread-174866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] client lang: <none>
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] server lang: <none>
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] kex follows: False
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:43:51.651 [DEBUG] [Thread-174866] [transport.py] [_log()] Compression: none
2026-04-11T18:43:51.652 [DEBUG] [Thread-174866] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:43:51.711 [DEBUG] [Thread-174866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:43:51.712 [DEBUG] [Thread-174866] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:43:51.712 [DEBUG] [Thread-174866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:43:51.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:43:51.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:43:51.768 [DEBUG] [Thread-174866] [transport.py] [_log()] userauth is OK
2026-04-11T18:43:51.768 [DEBUG] [Thread-174866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:43:51.768 [DEBUG] [Thread-174866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:43:51.768 [DEBUG] [Thread-174866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:43:51.768 [DEBUG] [Thread-174866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:43:51.788 [INFO] [Thread-174866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:43:51.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:43:51.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:43:52.667 [DEBUG] [Thread-174866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:43:52.667 [DEBUG] [Thread-174866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:43:52.715 [DEBUG] [Thread-174866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:43:52.715 [DEBUG] [Thread-174866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:43:52.724 [DEBUG] [Thread-174866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:43:52.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:43:52.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-04-11T18:43:52.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-04-11T18:43:52.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:43:52.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:43:52.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:43:52.761 [DEBUG] [Thread-174866] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:43:55.309 [DEBUG] [Thread-174868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:10.363 [DEBUG] [Thread-174869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:22.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:44:22.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:44:22.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-04-11T18:44:22.811 [DEBUG] [Thread-174870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:24.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 44, 5), 0.079105, 99.772, 0.0, 22.3729, 12.2357, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:44:24.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:44:05
2026-04-11T18:44:24.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:44:24.610 [DEBUG] [Thread-174871] [transport.py] [_log()] starting thread (client mode): 0xb0fb5990
2026-04-11T18:44:24.610 [DEBUG] [Thread-174871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:44:24.630 [DEBUG] [Thread-174871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:44:24.630 [INFO] [Thread-174871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:24.633 [DEBUG] [Thread-174871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] client lang: <none>
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] server lang: <none>
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] kex follows: False
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] Compression: none
2026-04-11T18:44:24.634 [DEBUG] [Thread-174871] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:44:24.653 [DEBUG] [Thread-174871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:44:24.654 [DEBUG] [Thread-174871] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:44:24.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:44:24.655 [DEBUG] [Thread-174871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:44:24.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:44:24.657 [DEBUG] [Thread-174871] [transport.py] [_log()] userauth is OK
2026-04-11T18:44:24.657 [DEBUG] [Thread-174871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:44:24.658 [DEBUG] [Thread-174871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:44:24.658 [DEBUG] [Thread-174871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:44:24.658 [DEBUG] [Thread-174871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:44:24.682 [INFO] [Thread-174871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:44:24.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:44:25.323 [DEBUG] [Thread-174871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:44:25.323 [DEBUG] [Thread-174871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:44:25.323 [DEBUG] [Thread-174871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:44:25.365 [DEBUG] [Thread-174871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:44:25.365 [DEBUG] [Thread-174871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:44:25.368 [DEBUG] [Thread-174871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:44:25.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:44:25.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:44:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:44:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:44:25.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:44:25.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:44:25.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:44:25.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:44:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:44:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.697341 -999.00  +12.20  18.58     97  +11.80 1 3 1 3 1   260    0 0.36 -0.87 ----- 18.6 18.6 301.6 20.6 13.2 -0.4 13.1 -0.5 12.7 -0.4 13.1 -0.4
2026-04-11T18:44:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:44:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:44:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.697341
2026-04-11T18:44:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:44:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:44:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:44:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:44:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:44:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:44:05', tmtdew=0.079105, humidity=99.772, cloud=0.0, wind=22.3729, temperature=12.2357, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:44:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:44:25.396 [DEBUG] [Thread-174871] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:44:25.400 [DEBUG] [Thread-174874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:25.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:44:25.499 [DEBUG] [Thread-174875] [transport.py] [_log()] starting thread (client mode): 0xae561bd0
2026-04-11T18:44:25.499 [DEBUG] [Thread-174875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:44:25.513 [DEBUG] [Thread-174875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:44:25.514 [INFO] [Thread-174875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:44:25.521 [DEBUG] [Thread-174875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:44:25.521 [DEBUG] [Thread-174875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] client lang: <none>
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] server lang: <none>
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] kex follows: False
2026-04-11T18:44:25.522 [DEBUG] [Thread-174875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:44:25.523 [DEBUG] [Thread-174875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:44:25.523 [DEBUG] [Thread-174875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:44:25.523 [DEBUG] [Thread-174875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:44:25.523 [DEBUG] [Thread-174875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:44:25.523 [DEBUG] [Thread-174875] [transport.py] [_log()] Compression: none
2026-04-11T18:44:25.523 [DEBUG] [Thread-174875] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:44:25.578 [DEBUG] [Thread-174875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:44:25.578 [DEBUG] [Thread-174875] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:44:25.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:44:25.580 [DEBUG] [Thread-174875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:44:25.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:44:25.634 [DEBUG] [Thread-174875] [transport.py] [_log()] userauth is OK
2026-04-11T18:44:25.635 [DEBUG] [Thread-174875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:44:25.635 [DEBUG] [Thread-174875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:44:25.635 [DEBUG] [Thread-174875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:44:25.635 [DEBUG] [Thread-174875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:44:25.654 [INFO] [Thread-174875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:44:25.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:44:25.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:44:26.544 [DEBUG] [Thread-174875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:44:26.545 [DEBUG] [Thread-174875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:44:26.594 [DEBUG] [Thread-174875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:44:26.594 [DEBUG] [Thread-174875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:44:26.605 [DEBUG] [Thread-174875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:44:26.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:44:26.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-04-11T18:44:26.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-04-11T18:44:26.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:44:26.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:44:26.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:44:26.645 [DEBUG] [Thread-174875] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:44:40.447 [DEBUG] [Thread-174877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:55.483 [DEBUG] [Thread-174878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:55.774 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:55.775 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:44:56.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:44:56.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:44:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:44:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 44, 41), 0.04811, 99.6103, 0.0, 27.4514, 12.5051, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:44:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:44:41
2026-04-11T18:44:58.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:44:58.572 [DEBUG] [Thread-174879] [transport.py] [_log()] starting thread (client mode): 0xae5631c0
2026-04-11T18:44:58.572 [DEBUG] [Thread-174879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:44:58.588 [DEBUG] [Thread-174879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:44:58.588 [INFO] [Thread-174879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] client lang: <none>
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] server lang: <none>
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] kex follows: False
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] Compression: none
2026-04-11T18:44:58.591 [DEBUG] [Thread-174879] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:44:58.609 [DEBUG] [Thread-174879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:44:58.609 [DEBUG] [Thread-174879] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:44:58.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:44:58.610 [DEBUG] [Thread-174879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:44:58.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:44:58.613 [DEBUG] [Thread-174879] [transport.py] [_log()] userauth is OK
2026-04-11T18:44:58.613 [DEBUG] [Thread-174879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:44:58.613 [DEBUG] [Thread-174879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:44:58.613 [DEBUG] [Thread-174879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:44:58.613 [DEBUG] [Thread-174879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:44:58.638 [INFO] [Thread-174879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:44:58.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:44:59.287 [DEBUG] [Thread-174879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:44:59.287 [DEBUG] [Thread-174879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:44:59.288 [DEBUG] [Thread-174879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:44:59.328 [DEBUG] [Thread-174879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:44:59.328 [DEBUG] [Thread-174879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:44:59.331 [DEBUG] [Thread-174879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:44:59.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:44:59.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:44:59.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:44:59.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:44:59.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:44:59.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:44:59.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:44:59.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:44:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:44:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.697688 -999.00  +12.20  19.62     97  +11.90 1 3 1 3 1   241    0 0.35 -1.06 ----- 19.6 19.6 291.4 24.1 13.2 -0.5 13.1 -0.6 12.7 -0.8 13.1 -0.9
2026-04-11T18:44:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:44:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:44:59.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.697688
2026-04-11T18:44:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:44:59.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:44:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:44:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:44:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:44:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:44:41', tmtdew=0.04811, humidity=99.6103, cloud=0.0, wind=27.4514, temperature=12.5051, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:44:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:44:59.358 [DEBUG] [Thread-174879] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:44:59.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:44:59.451 [DEBUG] [Thread-174882] [transport.py] [_log()] starting thread (client mode): 0xb0fb6080
2026-04-11T18:44:59.451 [DEBUG] [Thread-174882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:44:59.466 [DEBUG] [Thread-174882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:44:59.466 [INFO] [Thread-174882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:44:59.473 [DEBUG] [Thread-174882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] client lang: <none>
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] server lang: <none>
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] kex follows: False
2026-04-11T18:44:59.474 [DEBUG] [Thread-174882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:44:59.475 [DEBUG] [Thread-174882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:44:59.475 [DEBUG] [Thread-174882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:44:59.475 [DEBUG] [Thread-174882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:44:59.475 [DEBUG] [Thread-174882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:44:59.475 [DEBUG] [Thread-174882] [transport.py] [_log()] Compression: none
2026-04-11T18:44:59.475 [DEBUG] [Thread-174882] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:44:59.531 [DEBUG] [Thread-174882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:44:59.532 [DEBUG] [Thread-174882] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:44:59.533 [DEBUG] [Thread-174882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:44:59.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:44:59.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:44:59.587 [DEBUG] [Thread-174882] [transport.py] [_log()] userauth is OK
2026-04-11T18:44:59.587 [DEBUG] [Thread-174882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:44:59.587 [DEBUG] [Thread-174882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:44:59.587 [DEBUG] [Thread-174882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:44:59.587 [DEBUG] [Thread-174882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:44:59.602 [INFO] [Thread-174882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:44:59.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:44:59.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:45:00.471 [DEBUG] [Thread-174882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:45:00.471 [DEBUG] [Thread-174882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:45:00.519 [DEBUG] [Thread-174882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:45:00.520 [DEBUG] [Thread-174882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:45:00.529 [DEBUG] [Thread-174882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:45:00.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:45: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')
2026-04-11T18:45:00.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-04-11T18:45:00.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:45:00.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:45:00.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:45:00.564 [DEBUG] [Thread-174882] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:45:10.519 [DEBUG] [Thread-174884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:45:22.870 [DEBUG] [Thread-174885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:45:25.576 [DEBUG] [Thread-174886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:45:30.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:45:30.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:45:30.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-04-11T18:45:31.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 45, 17), 0.029125, 99.772, 0.0, 23.9436, 12.1526, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:45:31.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:45:17
2026-04-11T18:45:32.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:45:32.385 [DEBUG] [Thread-174887] [transport.py] [_log()] starting thread (client mode): 0xb0f56920
2026-04-11T18:45:32.385 [DEBUG] [Thread-174887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:45:32.405 [DEBUG] [Thread-174887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:45:32.405 [INFO] [Thread-174887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:45:32.408 [DEBUG] [Thread-174887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:45:32.408 [DEBUG] [Thread-174887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:45:32.408 [DEBUG] [Thread-174887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:45:32.408 [DEBUG] [Thread-174887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:45:32.408 [DEBUG] [Thread-174887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] client lang: <none>
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] server lang: <none>
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] kex follows: False
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] Compression: none
2026-04-11T18:45:32.409 [DEBUG] [Thread-174887] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:45:32.426 [DEBUG] [Thread-174887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:45:32.427 [DEBUG] [Thread-174887] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:45:32.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:45:32.428 [DEBUG] [Thread-174887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:45:32.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:45:32.430 [DEBUG] [Thread-174887] [transport.py] [_log()] userauth is OK
2026-04-11T18:45:32.430 [DEBUG] [Thread-174887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:45:32.430 [DEBUG] [Thread-174887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:45:32.430 [DEBUG] [Thread-174887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:45:32.430 [DEBUG] [Thread-174887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:45:32.454 [INFO] [Thread-174887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:45:32.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:45:33.095 [DEBUG] [Thread-174887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:45:33.095 [DEBUG] [Thread-174887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:45:33.095 [DEBUG] [Thread-174887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:45:33.137 [DEBUG] [Thread-174887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:45:33.137 [DEBUG] [Thread-174887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:45:33.139 [DEBUG] [Thread-174887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:45:33.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:45:33.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:45:33.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:45:33.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:45:33.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:45:33.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:45:33.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.698035 -999.00  +12.10  14.64     97  +11.70 1 3 1 3 1   223    0 0.35 -1.02 ----- 14.6 14.6 285.8 22.7 13.2 -0.5 13.0 -0.6 12.7 -1.3 13.1 -0.8
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.698035
2026-04-11T18:45:33.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:45:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:45:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:45:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:45:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:45:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:45:17', tmtdew=0.029125, humidity=99.772, cloud=0.0, wind=23.9436, temperature=12.1526, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:45:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:45:33.157 [DEBUG] [Thread-174887] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:45:33.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:45:33.237 [DEBUG] [Thread-174890] [transport.py] [_log()] starting thread (client mode): 0xae5f3d60
2026-04-11T18:45:33.237 [DEBUG] [Thread-174890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:45:33.252 [DEBUG] [Thread-174890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:45:33.252 [INFO] [Thread-174890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:45:33.259 [DEBUG] [Thread-174890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] client lang: <none>
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] server lang: <none>
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] kex follows: False
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:45:33.260 [DEBUG] [Thread-174890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:45:33.261 [DEBUG] [Thread-174890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:45:33.261 [DEBUG] [Thread-174890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:45:33.261 [DEBUG] [Thread-174890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:45:33.261 [DEBUG] [Thread-174890] [transport.py] [_log()] Compression: none
2026-04-11T18:45:33.261 [DEBUG] [Thread-174890] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:45:33.317 [DEBUG] [Thread-174890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:45:33.317 [DEBUG] [Thread-174890] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:45:33.318 [DEBUG] [Thread-174890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:45:33.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:45:33.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:45:33.373 [DEBUG] [Thread-174890] [transport.py] [_log()] userauth is OK
2026-04-11T18:45:33.373 [DEBUG] [Thread-174890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:45:33.373 [DEBUG] [Thread-174890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:45:33.373 [DEBUG] [Thread-174890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:45:33.373 [DEBUG] [Thread-174890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:45:33.392 [INFO] [Thread-174890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:45:33.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:45:33.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:45:34.251 [DEBUG] [Thread-174890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:45:34.251 [DEBUG] [Thread-174890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:45:34.299 [DEBUG] [Thread-174890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:45:34.299 [DEBUG] [Thread-174890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:45:34.308 [DEBUG] [Thread-174890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:45:34.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:45: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-04-11T18:45: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') -> 00000000
2026-04-11T18:45:34.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:45:34.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:45:34.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:45:34.346 [DEBUG] [Thread-174890] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:45:40.612 [DEBUG] [Thread-174892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:45:55.667 [DEBUG] [Thread-174893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:00.558 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:00.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:46:04.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:46:04.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-04-11T18:46:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 45, 52), 0.06337, 99.5108, 0.0, 23.8882, 12.3725, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:46:05.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:45:52
2026-04-11T18:46:06.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:46:06.182 [DEBUG] [Thread-174894] [transport.py] [_log()] starting thread (client mode): 0xae5198d0
2026-04-11T18:46:06.182 [DEBUG] [Thread-174894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:46:06.203 [DEBUG] [Thread-174894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:46:06.203 [INFO] [Thread-174894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:46:06.205 [DEBUG] [Thread-174894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:46:06.205 [DEBUG] [Thread-174894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:46:06.205 [DEBUG] [Thread-174894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:46:06.205 [DEBUG] [Thread-174894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] client lang: <none>
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] server lang: <none>
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] kex follows: False
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] Compression: none
2026-04-11T18:46:06.206 [DEBUG] [Thread-174894] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:46:06.225 [DEBUG] [Thread-174894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:46:06.226 [DEBUG] [Thread-174894] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:46:06.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:46:06.227 [DEBUG] [Thread-174894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:46:06.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:46:06.230 [DEBUG] [Thread-174894] [transport.py] [_log()] userauth is OK
2026-04-11T18:46:06.230 [DEBUG] [Thread-174894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:46:06.230 [DEBUG] [Thread-174894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:46:06.231 [DEBUG] [Thread-174894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:46:06.231 [DEBUG] [Thread-174894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:46:06.266 [INFO] [Thread-174894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:46:06.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:46:06.931 [DEBUG] [Thread-174894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:46:06.931 [DEBUG] [Thread-174894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:46:06.932 [DEBUG] [Thread-174894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:46:06.972 [DEBUG] [Thread-174894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:46:06.972 [DEBUG] [Thread-174894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:46:06.975 [DEBUG] [Thread-174894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:46:06.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:46:06.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:46:06.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:46:06.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:46:06.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:46:06.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:46:06.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.698383 -999.00  +12.20  20.89     97  +11.80 1 3 1 3 1   206    0 0.36 -0.67 ----- 20.9 20.9 295.0 24.2 13.2 -0.3 13.0 -0.6 12.7 -0.9 13.1 -0.8
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.698383
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:46:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:45:52', tmtdew=0.06337, humidity=99.5108, cloud=0.0, wind=23.8882, temperature=12.3725, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:45:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:46:07.003 [DEBUG] [Thread-174894] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:46:07.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:46:07.084 [DEBUG] [Thread-174897] [transport.py] [_log()] starting thread (client mode): 0xae5f2080
2026-04-11T18:46:07.084 [DEBUG] [Thread-174897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:46:07.100 [DEBUG] [Thread-174897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:46:07.100 [INFO] [Thread-174897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:46:07.107 [DEBUG] [Thread-174897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] client lang: <none>
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] server lang: <none>
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] kex follows: False
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] Compression: none
2026-04-11T18:46:07.108 [DEBUG] [Thread-174897] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:46:07.167 [DEBUG] [Thread-174897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:46:07.167 [DEBUG] [Thread-174897] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:46:07.168 [DEBUG] [Thread-174897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:46:07.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:46:07.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:46:07.222 [DEBUG] [Thread-174897] [transport.py] [_log()] userauth is OK
2026-04-11T18:46:07.223 [DEBUG] [Thread-174897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:46:07.223 [DEBUG] [Thread-174897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:46:07.223 [DEBUG] [Thread-174897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:46:07.223 [DEBUG] [Thread-174897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:46:07.242 [INFO] [Thread-174897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:46:07.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:46:07.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:46:08.078 [DEBUG] [Thread-174897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:46:08.078 [DEBUG] [Thread-174897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:46:08.126 [DEBUG] [Thread-174897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:46:08.127 [DEBUG] [Thread-174897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:46:08.135 [DEBUG] [Thread-174897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:46:08.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:46:08.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-04-11T18:46:08.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-04-11T18:46:08.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:46:08.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:46:08.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:46:08.169 [DEBUG] [Thread-174897] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:46:10.705 [DEBUG] [Thread-174899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:22.928 [DEBUG] [Thread-174900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:25.757 [DEBUG] [Thread-174901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:38.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:46:38.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:46:38.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:46:39.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 46, 27), 0.06897, 99.8383, 0.0, 25.6201, 12.1192, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:46:39.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:46:27
2026-04-11T18:46:39.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:46:40.020 [DEBUG] [Thread-174902] [transport.py] [_log()] starting thread (client mode): 0xae5607f0
2026-04-11T18:46:40.021 [DEBUG] [Thread-174902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:46:40.036 [DEBUG] [Thread-174902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:46:40.036 [INFO] [Thread-174902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] client lang: <none>
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] server lang: <none>
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] kex follows: False
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] Compression: none
2026-04-11T18:46:40.039 [DEBUG] [Thread-174902] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:46:40.056 [DEBUG] [Thread-174902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:46:40.056 [DEBUG] [Thread-174902] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:46:40.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:46:40.057 [DEBUG] [Thread-174902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:46:40.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:46:40.058 [DEBUG] [Thread-174902] [transport.py] [_log()] userauth is OK
2026-04-11T18:46:40.058 [DEBUG] [Thread-174902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:46:40.058 [DEBUG] [Thread-174902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:46:40.058 [DEBUG] [Thread-174902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:46:40.058 [DEBUG] [Thread-174902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:46:40.073 [INFO] [Thread-174902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:46:40.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:46:40.717 [DEBUG] [Thread-174902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:46:40.717 [DEBUG] [Thread-174902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:46:40.718 [DEBUG] [Thread-174902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:46:40.758 [DEBUG] [Thread-174902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:46:40.759 [DEBUG] [Thread-174902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:46:40.762 [DEBUG] [Thread-174902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:46:40.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:46:40.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:46:40.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:46:40.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:46:40.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:46:40.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:46:40.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:46:40.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.698730 -999.00  +12.10  14.67     97  +11.70 1 3 1 3 1   190    0 0.37 -0.56 ----- 14.7 14.7 288.4 24.2 13.2 -0.7 13.0 -0.4 12.7 -0.5 13.1 -0.6
2026-04-11T18:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:46:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:46:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.698730
2026-04-11T18:46:40.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:46:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:46:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:46:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:46:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:46:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:46:27', tmtdew=0.06897, humidity=99.8383, cloud=0.0, wind=25.6201, temperature=12.1192, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:46:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:46:40.788 [DEBUG] [Thread-174902] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:46:40.797 [DEBUG] [Thread-174905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:46:40.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:46:40.882 [DEBUG] [Thread-174906] [transport.py] [_log()] starting thread (client mode): 0xb0f57340
2026-04-11T18:46:40.882 [DEBUG] [Thread-174906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:46:40.897 [DEBUG] [Thread-174906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:46:40.897 [INFO] [Thread-174906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:46:40.905 [DEBUG] [Thread-174906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:46:40.905 [DEBUG] [Thread-174906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:46:40.905 [DEBUG] [Thread-174906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:46:40.905 [DEBUG] [Thread-174906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:40.905 [DEBUG] [Thread-174906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] client lang: <none>
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] server lang: <none>
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] kex follows: False
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] Compression: none
2026-04-11T18:46:40.906 [DEBUG] [Thread-174906] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:46:40.963 [DEBUG] [Thread-174906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:46:40.964 [DEBUG] [Thread-174906] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:46:40.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:46:40.965 [DEBUG] [Thread-174906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:46:40.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:46:41.020 [DEBUG] [Thread-174906] [transport.py] [_log()] userauth is OK
2026-04-11T18:46:41.021 [DEBUG] [Thread-174906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:46:41.021 [DEBUG] [Thread-174906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:46:41.021 [DEBUG] [Thread-174906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:46:41.021 [DEBUG] [Thread-174906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:46:41.040 [INFO] [Thread-174906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:46:41.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:46:41.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:46:41.870 [DEBUG] [Thread-174906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:46:41.870 [DEBUG] [Thread-174906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:46:41.919 [DEBUG] [Thread-174906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:46:41.919 [DEBUG] [Thread-174906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:46:41.928 [DEBUG] [Thread-174906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:46:41.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:46:41.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:46:41.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:46:41.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:46:41.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:46:41.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:46:41.964 [DEBUG] [Thread-174906] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:46:55.842 [DEBUG] [Thread-174908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:05.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:05.065 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:10.878 [DEBUG] [Thread-174909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:11.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:47:11.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:47:11.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-04-11T18:47:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 47, 3), 0.06644, 99.8549, 0.0, 24.8263, 12.1192, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:47:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:47:03
2026-04-11T18:47:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:47:13.829 [DEBUG] [Thread-174910] [transport.py] [_log()] starting thread (client mode): 0xae562920
2026-04-11T18:47:13.830 [DEBUG] [Thread-174910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:47:13.849 [DEBUG] [Thread-174910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:47:13.850 [INFO] [Thread-174910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] client lang: <none>
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] server lang: <none>
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] kex follows: False
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:47:13.852 [DEBUG] [Thread-174910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:47:13.853 [DEBUG] [Thread-174910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:47:13.853 [DEBUG] [Thread-174910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:47:13.853 [DEBUG] [Thread-174910] [transport.py] [_log()] Compression: none
2026-04-11T18:47:13.853 [DEBUG] [Thread-174910] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:47:13.871 [DEBUG] [Thread-174910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:47:13.871 [DEBUG] [Thread-174910] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:47:13.872 [DEBUG] [Thread-174910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:47:13.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:47:13.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:47:13.874 [DEBUG] [Thread-174910] [transport.py] [_log()] userauth is OK
2026-04-11T18:47:13.874 [DEBUG] [Thread-174910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:47:13.874 [DEBUG] [Thread-174910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:47:13.874 [DEBUG] [Thread-174910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:47:13.874 [DEBUG] [Thread-174910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:47:13.909 [INFO] [Thread-174910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:47:13.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:47:14.730 [DEBUG] [Thread-174910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:47:14.730 [DEBUG] [Thread-174910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:47:14.731 [DEBUG] [Thread-174910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:47:14.771 [DEBUG] [Thread-174910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:47:14.771 [DEBUG] [Thread-174910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:47:14.774 [DEBUG] [Thread-174910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:47:14.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:47:14.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:47:14.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:47:14.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:47:14.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:47:14.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:47:14.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:47:14.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:47:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:47:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.699077 -999.00  +12.10  22.61     97  +11.70 1 3 1 3 1   174    0 0.37 -0.44 ----- 22.6 22.6 295.4 28.1 13.2 -0.6 12.9 -0.6 12.7 -1.3 13.1 -0.9
2026-04-11T18:47:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:47:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:47:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.699077
2026-04-11T18:47:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:47:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:47:14.803 [DEBUG] [Thread-174910] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:47:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:47:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:47:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:47:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:47:03', tmtdew=0.06644, humidity=99.8549, cloud=0.0, wind=24.8263, temperature=12.1192, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:46:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:47:14.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:47:14.894 [DEBUG] [Thread-174913] [transport.py] [_log()] starting thread (client mode): 0xa7951f00
2026-04-11T18:47:14.894 [DEBUG] [Thread-174913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:47:14.908 [DEBUG] [Thread-174913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:47:14.908 [INFO] [Thread-174913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] client lang: <none>
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] server lang: <none>
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] kex follows: False
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:47:14.916 [DEBUG] [Thread-174913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:47:14.917 [DEBUG] [Thread-174913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:47:14.917 [DEBUG] [Thread-174913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:47:14.917 [DEBUG] [Thread-174913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:47:14.917 [DEBUG] [Thread-174913] [transport.py] [_log()] Compression: none
2026-04-11T18:47:14.917 [DEBUG] [Thread-174913] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:47:14.972 [DEBUG] [Thread-174913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:47:14.973 [DEBUG] [Thread-174913] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:47:14.973 [DEBUG] [Thread-174913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:47:14.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:47:14.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:47:15.028 [DEBUG] [Thread-174913] [transport.py] [_log()] userauth is OK
2026-04-11T18:47:15.029 [DEBUG] [Thread-174913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:47:15.029 [DEBUG] [Thread-174913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:47:15.029 [DEBUG] [Thread-174913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:47:15.029 [DEBUG] [Thread-174913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:47:15.052 [INFO] [Thread-174913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:47:15.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:47:15.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:47:15.864 [DEBUG] [Thread-174913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:47:15.864 [DEBUG] [Thread-174913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:47:15.912 [DEBUG] [Thread-174913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:47:15.912 [DEBUG] [Thread-174913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:47:15.921 [DEBUG] [Thread-174913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:47:15.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:47:15.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:47:15.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-04-11T18:47:15.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:47:15.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:47:15.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:47:15.958 [DEBUG] [Thread-174913] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:47:22.991 [DEBUG] [Thread-174915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:25.919 [DEBUG] [Thread-174916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:40.966 [DEBUG] [Thread-174917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:47:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:47:45.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:47:45.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-04-11T18:47:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 47, 38), 0.05321, 99.5772, 0.0, 23.0767, 12.4388, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:47:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:47:38
2026-04-11T18:47:47.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:47:47.842 [DEBUG] [Thread-174918] [transport.py] [_log()] starting thread (client mode): 0xae562b60
2026-04-11T18:47:47.842 [DEBUG] [Thread-174918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:47:47.864 [DEBUG] [Thread-174918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:47:47.865 [INFO] [Thread-174918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] client lang: <none>
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] server lang: <none>
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] kex follows: False
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] Compression: none
2026-04-11T18:47:47.869 [DEBUG] [Thread-174918] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:47:47.886 [DEBUG] [Thread-174918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:47:47.887 [DEBUG] [Thread-174918] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:47:47.887 [DEBUG] [Thread-174918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:47:47.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:47:47.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:47:47.889 [DEBUG] [Thread-174918] [transport.py] [_log()] userauth is OK
2026-04-11T18:47:47.889 [DEBUG] [Thread-174918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:47:47.889 [DEBUG] [Thread-174918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:47:47.890 [DEBUG] [Thread-174918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:47:47.890 [DEBUG] [Thread-174918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:47:47.926 [INFO] [Thread-174918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:47:47.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:47:48.757 [DEBUG] [Thread-174918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:47:48.767 [DEBUG] [Thread-174918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:47:48.767 [DEBUG] [Thread-174918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:47:48.799 [DEBUG] [Thread-174918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:47:48.799 [DEBUG] [Thread-174918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:47:48.803 [DEBUG] [Thread-174918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:47:48.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:47:48.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:47:48.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:47:48.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:47:48.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:47:48.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:47:48.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:47:48.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:47:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:47:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.699424 -999.00  +12.10  14.48     97  +11.70 1 3 1 3 1   160    0 0.38 -0.32 ----- 14.5 14.5 283.6 23.9 13.2 -0.6 12.9 -0.6 12.6 -1.0 13.1 -0.8
2026-04-11T18:47:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:47:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:47:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.699424
2026-04-11T18:47:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:47:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:47:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:47:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:47:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:47:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:47:38', tmtdew=0.05321, humidity=99.5772, cloud=0.0, wind=23.0767, temperature=12.4388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:47:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:47:48.832 [DEBUG] [Thread-174918] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:47: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-04-11T18:47:48.927 [DEBUG] [Thread-174921] [transport.py] [_log()] starting thread (client mode): 0xae5a4e80
2026-04-11T18:47:48.927 [DEBUG] [Thread-174921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:47:48.942 [DEBUG] [Thread-174921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:47:48.942 [INFO] [Thread-174921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:47:48.950 [DEBUG] [Thread-174921] [transport.py] [_log()] client lang: <none>
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] server lang: <none>
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] kex follows: False
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] Compression: none
2026-04-11T18:47:48.951 [DEBUG] [Thread-174921] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:47:49.011 [DEBUG] [Thread-174921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:47:49.012 [DEBUG] [Thread-174921] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:47:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:47:49.013 [DEBUG] [Thread-174921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:47:49.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:47:49.070 [DEBUG] [Thread-174921] [transport.py] [_log()] userauth is OK
2026-04-11T18:47:49.070 [DEBUG] [Thread-174921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:47:49.071 [DEBUG] [Thread-174921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:47:49.071 [DEBUG] [Thread-174921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:47:49.071 [DEBUG] [Thread-174921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:47:49.095 [INFO] [Thread-174921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:47:49.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:47:49.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:47:49.938 [DEBUG] [Thread-174921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:47:49.938 [DEBUG] [Thread-174921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:47:49.977 [DEBUG] [Thread-174921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:47:49.977 [DEBUG] [Thread-174921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:47:49.987 [DEBUG] [Thread-174921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:47:49.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:47:49.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-04-11T18:47:50.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:47:50.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:47:50.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:47:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:47:50.024 [DEBUG] [Thread-174921] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:47:56.004 [DEBUG] [Thread-174923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:11.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:11.043 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:11.056 [DEBUG] [Thread-174924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:48:20.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:48:20.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-04-11T18:48:21.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 48, 13), 0.076605, 99.7886, 0.0, 22.1972, 12.0194, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:48:21.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:48:13
2026-04-11T18:48:21.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:48:21.921 [DEBUG] [Thread-174925] [transport.py] [_log()] starting thread (client mode): 0xae5e4850
2026-04-11T18:48:21.921 [DEBUG] [Thread-174925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:48:21.941 [DEBUG] [Thread-174925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:48:21.941 [INFO] [Thread-174925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] client lang: <none>
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] server lang: <none>
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] kex follows: False
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:48:21.944 [DEBUG] [Thread-174925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:48:21.945 [DEBUG] [Thread-174925] [transport.py] [_log()] Compression: none
2026-04-11T18:48:21.945 [DEBUG] [Thread-174925] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:48:21.961 [DEBUG] [Thread-174925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:48:21.961 [DEBUG] [Thread-174925] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:48:21.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:48:21.962 [DEBUG] [Thread-174925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:48:21.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:48:21.965 [DEBUG] [Thread-174925] [transport.py] [_log()] userauth is OK
2026-04-11T18:48:21.965 [DEBUG] [Thread-174925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:48:21.965 [DEBUG] [Thread-174925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:48:21.965 [DEBUG] [Thread-174925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:48:21.965 [DEBUG] [Thread-174925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:48:21.983 [INFO] [Thread-174925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:48:21.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:48:22.738 [DEBUG] [Thread-174925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:48:22.738 [DEBUG] [Thread-174925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:48:22.739 [DEBUG] [Thread-174925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:48:22.780 [DEBUG] [Thread-174925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:48:22.780 [DEBUG] [Thread-174925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:48:22.783 [DEBUG] [Thread-174925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:48:22.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:48:22.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:48:22.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:48:22.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:48:22.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:48:22.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:48:22.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:48:22.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:48:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:48:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.699771 -999.00  +12.10  21.10     97  +11.70 1 3 1 3 1   147    0 0.38 -0.17 ----- 21.1 21.1 301.0 24.1 13.1 -0.6 12.9 -0.6 12.7 -0.9 13.0 -0.7
2026-04-11T18:48:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:48:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:48:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.699771
2026-04-11T18:48:22.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:48:22.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:48:22.810 [DEBUG] [Thread-174925] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:48:22.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:48:22.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:48:22.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:48:22.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:48:13', tmtdew=0.076605, humidity=99.7886, cloud=0.0, wind=22.1972, temperature=12.0194, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:47:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:48:22.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:48:22.901 [DEBUG] [Thread-174928] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-11T18:48:22.901 [DEBUG] [Thread-174928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:48:22.916 [DEBUG] [Thread-174928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:48:22.916 [INFO] [Thread-174928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] client lang: <none>
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] server lang: <none>
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] kex follows: False
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:48:22.924 [DEBUG] [Thread-174928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:48:22.925 [DEBUG] [Thread-174928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:48:22.925 [DEBUG] [Thread-174928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:48:22.925 [DEBUG] [Thread-174928] [transport.py] [_log()] Compression: none
2026-04-11T18:48:22.925 [DEBUG] [Thread-174928] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:48:22.984 [DEBUG] [Thread-174928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:48:22.984 [DEBUG] [Thread-174928] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:48:22.985 [DEBUG] [Thread-174928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:48:22.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:48:22.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:48:23.039 [DEBUG] [Thread-174928] [transport.py] [_log()] userauth is OK
2026-04-11T18:48:23.039 [DEBUG] [Thread-174928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:48:23.039 [DEBUG] [Thread-174928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:48:23.039 [DEBUG] [Thread-174928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:48:23.039 [DEBUG] [Thread-174928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:48:23.053 [INFO] [Thread-174928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:48:23.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:48:23.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:48:23.054 [DEBUG] [Thread-174930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:23.860 [DEBUG] [Thread-174928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:48:23.860 [DEBUG] [Thread-174928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:48:23.908 [DEBUG] [Thread-174928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:48:23.908 [DEBUG] [Thread-174928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:48:23.918 [DEBUG] [Thread-174928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:48:23.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:48:23.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-04-11T18:48:23.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-04-11T18:48:23.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:48:23.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:48:23.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:48:23.954 [DEBUG] [Thread-174928] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:48:26.087 [DEBUG] [Thread-174931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:41.150 [DEBUG] [Thread-174932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:53.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:48:53.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:48:53.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-04-11T18:48:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 48, 13), 0.076605, 99.7886, 0.0, 22.1972, 12.0194, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:48:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:48:13
2026-04-11T18:48:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:48:55.840 [DEBUG] [Thread-174933] [transport.py] [_log()] starting thread (client mode): 0xae51b040
2026-04-11T18:48:55.840 [DEBUG] [Thread-174933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:48:55.862 [DEBUG] [Thread-174933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:48:55.862 [INFO] [Thread-174933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] client lang: <none>
2026-04-11T18:48:55.865 [DEBUG] [Thread-174933] [transport.py] [_log()] server lang: <none>
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] kex follows: False
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] Compression: none
2026-04-11T18:48:55.866 [DEBUG] [Thread-174933] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:48:55.883 [DEBUG] [Thread-174933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:48:55.883 [DEBUG] [Thread-174933] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:48:55.884 [DEBUG] [Thread-174933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:48:55.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:48:55.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:48:55.886 [DEBUG] [Thread-174933] [transport.py] [_log()] userauth is OK
2026-04-11T18:48:55.886 [DEBUG] [Thread-174933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:48:55.886 [DEBUG] [Thread-174933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:48:55.886 [DEBUG] [Thread-174933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:48:55.886 [DEBUG] [Thread-174933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:48:55.908 [INFO] [Thread-174933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:48:55.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:48:56.187 [DEBUG] [Thread-174935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:48:56.705 [DEBUG] [Thread-174933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:48:56.706 [DEBUG] [Thread-174933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:48:56.706 [DEBUG] [Thread-174933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:48:56.747 [DEBUG] [Thread-174933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:48:56.748 [DEBUG] [Thread-174933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:48:56.751 [DEBUG] [Thread-174933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:48:56.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:48:56.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:48:56.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:48:56.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:48:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:48:56.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:48:56.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.700119 -999.00  +12.10  14.43     97  +11.70 1 3 1 3 1   134    0 0.37 -0.26 ----- 14.4 14.4 288.6 20.3 13.2 -0.5 13.0 -0.6 12.7 -0.7 13.1 -0.8
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.700119
2026-04-11T18:48:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:48:56.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:48:56.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:48:56.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:48:56.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:48:56.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:48:13', tmtdew=0.076605, humidity=99.7886, cloud=0.0, wind=22.1972, temperature=12.0194, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:48:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:48:56.771 [DEBUG] [Thread-174933] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:48:56.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:48:56.853 [DEBUG] [Thread-174937] [transport.py] [_log()] starting thread (client mode): 0xae562b30
2026-04-11T18:48:56.853 [DEBUG] [Thread-174937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:48:56.867 [DEBUG] [Thread-174937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:48:56.867 [INFO] [Thread-174937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] client lang: <none>
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] server lang: <none>
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] kex follows: False
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] Compression: none
2026-04-11T18:48:56.875 [DEBUG] [Thread-174937] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:48:56.931 [DEBUG] [Thread-174937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:48:56.931 [DEBUG] [Thread-174937] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:48:56.931 [DEBUG] [Thread-174937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:48:56.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:48:56.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:48:56.988 [DEBUG] [Thread-174937] [transport.py] [_log()] userauth is OK
2026-04-11T18:48:56.988 [DEBUG] [Thread-174937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:48:56.988 [DEBUG] [Thread-174937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:48:56.988 [DEBUG] [Thread-174937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:48:56.988 [DEBUG] [Thread-174937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:48:57.006 [INFO] [Thread-174937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:48:57.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:48:57.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:48:57.836 [DEBUG] [Thread-174937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:48:57.836 [DEBUG] [Thread-174937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:48:57.884 [DEBUG] [Thread-174937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:48:57.884 [DEBUG] [Thread-174937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:48:57.892 [DEBUG] [Thread-174937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:48:57.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:48:57.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-04-11T18:48:57.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-04-11T18:48:57.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:48:57.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:48:57.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:48:57.926 [DEBUG] [Thread-174937] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:49:11.225 [DEBUG] [Thread-174939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:49:15.804 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:49:15.806 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:49:23.110 [DEBUG] [Thread-174940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:49:26.287 [DEBUG] [Thread-174941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:49:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:49:27.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:49: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-04-11T18:49:29.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 48, 49), 0.05319, 99.5772, 0.0, 23.3942, 12.472, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:49:29.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:48:49
2026-04-11T18:49:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:49:29.875 [DEBUG] [Thread-174942] [transport.py] [_log()] starting thread (client mode): 0xae5357e0
2026-04-11T18:49:29.875 [DEBUG] [Thread-174942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:49:29.892 [DEBUG] [Thread-174942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:49:29.892 [INFO] [Thread-174942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:49:29.895 [DEBUG] [Thread-174942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] client lang: <none>
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] server lang: <none>
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] kex follows: False
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:49:29.896 [DEBUG] [Thread-174942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:49:29.897 [DEBUG] [Thread-174942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:49:29.897 [DEBUG] [Thread-174942] [transport.py] [_log()] Compression: none
2026-04-11T18:49:29.897 [DEBUG] [Thread-174942] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:49:29.915 [DEBUG] [Thread-174942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:49:29.915 [DEBUG] [Thread-174942] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:49:29.916 [DEBUG] [Thread-174942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:49:29.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:49:29.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:49:29.918 [DEBUG] [Thread-174942] [transport.py] [_log()] userauth is OK
2026-04-11T18:49:29.918 [DEBUG] [Thread-174942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:49:29.918 [DEBUG] [Thread-174942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:49:29.918 [DEBUG] [Thread-174942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:49:29.918 [DEBUG] [Thread-174942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:49:29.940 [INFO] [Thread-174942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:49:29.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:49:30.720 [DEBUG] [Thread-174942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:49:30.720 [DEBUG] [Thread-174942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:49:30.720 [DEBUG] [Thread-174942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:49:30.761 [DEBUG] [Thread-174942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:49:30.761 [DEBUG] [Thread-174942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:49:30.764 [DEBUG] [Thread-174942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:49:30.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:49:30.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:49:30.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:49:30.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:49:30.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:49:30.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:49:30.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:49:30.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:49:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:49:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.700813 -999.00  +12.00  16.26     97  +11.60 1 3 1 3 1   112    0 0.37 -0.16 ----- 16.3 16.3 302.0 23.8 13.1 -0.5 12.9 -0.5 12.6 -0.5 13.0 -0.7
2026-04-11T18:49:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:49:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:49:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.700813
2026-04-11T18:49:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:49:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:49:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:49:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:49:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:49:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:48:49', tmtdew=0.05319, humidity=99.5772, cloud=0.0, wind=23.3942, temperature=12.472, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:49:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:49:30.790 [DEBUG] [Thread-174942] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:49:30.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:49:30.884 [DEBUG] [Thread-174945] [transport.py] [_log()] starting thread (client mode): 0xa7950fd0
2026-04-11T18:49:30.884 [DEBUG] [Thread-174945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:49:30.899 [DEBUG] [Thread-174945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:49:30.899 [INFO] [Thread-174945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:49:30.906 [DEBUG] [Thread-174945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:49:30.907 [DEBUG] [Thread-174945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] client lang: <none>
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] server lang: <none>
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] kex follows: False
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] Compression: none
2026-04-11T18:49:30.908 [DEBUG] [Thread-174945] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:49:30.964 [DEBUG] [Thread-174945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:49:30.964 [DEBUG] [Thread-174945] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:49:30.965 [DEBUG] [Thread-174945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:49:30.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:49:30.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:49:31.021 [DEBUG] [Thread-174945] [transport.py] [_log()] userauth is OK
2026-04-11T18:49:31.021 [DEBUG] [Thread-174945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:49:31.021 [DEBUG] [Thread-174945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:49:31.021 [DEBUG] [Thread-174945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:49:31.021 [DEBUG] [Thread-174945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:49:31.037 [INFO] [Thread-174945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:49:31.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:49:31.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:49:31.863 [DEBUG] [Thread-174945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:49:31.863 [DEBUG] [Thread-174945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:49:31.911 [DEBUG] [Thread-174945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:49:31.911 [DEBUG] [Thread-174945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:49:31.920 [DEBUG] [Thread-174945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:49:31.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:49:31.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-04-11T18:49:31.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:49:31.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:49:31.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:49:31.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:49:31.955 [DEBUG] [Thread-174945] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:49:41.320 [DEBUG] [Thread-174947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:49:56.377 [DEBUG] [Thread-174948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:50:01.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:50:01.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-04-11T18:50:03.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 49, 24), 0.084205, 99.7388, 0.0, 24.0847, 12.036, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:50:03.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:49:24
2026-04-11T18:50:03.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:50:03.840 [DEBUG] [Thread-174949] [transport.py] [_log()] starting thread (client mode): 0xae563d90
2026-04-11T18:50:03.840 [DEBUG] [Thread-174949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:50:03.860 [DEBUG] [Thread-174949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:50:03.861 [INFO] [Thread-174949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] client lang: <none>
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] server lang: <none>
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] kex follows: False
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] Compression: none
2026-04-11T18:50:03.864 [DEBUG] [Thread-174949] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:50:03.881 [DEBUG] [Thread-174949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:50:03.881 [DEBUG] [Thread-174949] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:50:03.882 [DEBUG] [Thread-174949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:50:03.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:50:03.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:50:03.884 [DEBUG] [Thread-174949] [transport.py] [_log()] userauth is OK
2026-04-11T18:50:03.884 [DEBUG] [Thread-174949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:50:03.884 [DEBUG] [Thread-174949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:50:03.884 [DEBUG] [Thread-174949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:50:03.884 [DEBUG] [Thread-174949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:50:03.909 [INFO] [Thread-174949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:50:03.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:50:04.811 [DEBUG] [Thread-174949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:50:04.811 [DEBUG] [Thread-174949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:50:04.812 [DEBUG] [Thread-174949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:50:04.852 [DEBUG] [Thread-174949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:50:04.852 [DEBUG] [Thread-174949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:50:04.855 [DEBUG] [Thread-174949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:50:04.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:50:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:50:04.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:50:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:50:04.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:50:04.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:50:04.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:50:04.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:50:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:50:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.701160 -999.00  +12.10  19.89     97  +11.70 1 3 1 3 1   102    0 0.39 -0.05 ----- 19.9 19.9 296.6 22.1 13.1 -0.3 12.9 -0.9 12.6 -0.9 13.0 -0.9
2026-04-11T18:50:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:50:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:50:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.701160
2026-04-11T18:50:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:50:04.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:50:04.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:50:04.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:50:04.893 [DEBUG] [Thread-174949] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:50:04.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:50:04.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:49:24', tmtdew=0.084205, humidity=99.7388, cloud=0.0, wind=24.0847, temperature=12.036, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:49:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:50:04.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:50:04.984 [DEBUG] [Thread-174952] [transport.py] [_log()] starting thread (client mode): 0xae51bf10
2026-04-11T18:50:04.984 [DEBUG] [Thread-174952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:50:04.999 [DEBUG] [Thread-174952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:50:04.999 [INFO] [Thread-174952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:50:05.006 [DEBUG] [Thread-174952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:50:05.006 [DEBUG] [Thread-174952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] client lang: <none>
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] server lang: <none>
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] kex follows: False
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] Compression: none
2026-04-11T18:50:05.007 [DEBUG] [Thread-174952] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:50:05.066 [DEBUG] [Thread-174952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:50:05.067 [DEBUG] [Thread-174952] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:50:05.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:50:05.068 [DEBUG] [Thread-174952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:50:05.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:50:05.123 [DEBUG] [Thread-174952] [transport.py] [_log()] userauth is OK
2026-04-11T18:50:05.123 [DEBUG] [Thread-174952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:50:05.123 [DEBUG] [Thread-174952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:50:05.124 [DEBUG] [Thread-174952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:50:05.124 [DEBUG] [Thread-174952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:50:05.151 [INFO] [Thread-174952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:50:05.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:50:05.989 [DEBUG] [Thread-174952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:50:05.989 [DEBUG] [Thread-174952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:50:06.037 [DEBUG] [Thread-174952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:50:06.037 [DEBUG] [Thread-174952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:50:06.046 [DEBUG] [Thread-174952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:50:06.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:50:06.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:50:06.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:50:06.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:50:06.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:50:06.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:50:06.082 [DEBUG] [Thread-174952] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:50:11.414 [DEBUG] [Thread-174954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:21.261 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:21.262 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:23.167 [DEBUG] [Thread-174955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:26.475 [DEBUG] [Thread-174956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:36.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:50:36.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:50:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:50:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 49, 24), 0.084205, 99.7388, 0.0, 24.0847, 12.086, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:50:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:49:24
2026-04-11T18:50:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:50:37.973 [DEBUG] [Thread-174957] [transport.py] [_log()] starting thread (client mode): 0xb0f6e350
2026-04-11T18:50:37.973 [DEBUG] [Thread-174957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:50:37.991 [DEBUG] [Thread-174957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:50:37.992 [INFO] [Thread-174957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:50:37.995 [DEBUG] [Thread-174957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:50:37.995 [DEBUG] [Thread-174957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:50:37.995 [DEBUG] [Thread-174957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] client lang: <none>
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] server lang: <none>
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] kex follows: False
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:50:37.996 [DEBUG] [Thread-174957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:50:37.997 [DEBUG] [Thread-174957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:50:37.997 [DEBUG] [Thread-174957] [transport.py] [_log()] Compression: none
2026-04-11T18:50:37.997 [DEBUG] [Thread-174957] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:50:38.017 [DEBUG] [Thread-174957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:50:38.018 [DEBUG] [Thread-174957] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:50:38.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:50:38.019 [DEBUG] [Thread-174957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:50:38.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:50:38.021 [DEBUG] [Thread-174957] [transport.py] [_log()] userauth is OK
2026-04-11T18:50:38.021 [DEBUG] [Thread-174957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:50:38.021 [DEBUG] [Thread-174957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:50:38.021 [DEBUG] [Thread-174957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:50:38.021 [DEBUG] [Thread-174957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:50:38.044 [INFO] [Thread-174957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:50:38.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:50:38.854 [DEBUG] [Thread-174957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:50:38.854 [DEBUG] [Thread-174957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:50:38.855 [DEBUG] [Thread-174957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:50:38.895 [DEBUG] [Thread-174957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:50:38.896 [DEBUG] [Thread-174957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:50:38.899 [DEBUG] [Thread-174957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:50:38.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:50:38.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:50:38.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:50:38.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:50:38.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:50:38.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:50:38.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:50:38.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:50:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:50:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.701507 -999.00  +12.00  17.50     97  +11.60 1 3 1 3 1    93    0 0.36 -0.51 ----- 17.5 17.5 286.4 25.2 13.2 -0.6 12.9 -0.8 12.6 -0.8 13.1 -0.8
2026-04-11T18:50:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:50:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:50:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.701507
2026-04-11T18:50:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:50:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:50:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:50:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:50:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:50:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:49:24', tmtdew=0.084205, humidity=99.7388, cloud=0.0, wind=24.0847, temperature=12.086, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:50:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:50:38.926 [DEBUG] [Thread-174957] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:50:39.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:50:39.018 [DEBUG] [Thread-174960] [transport.py] [_log()] starting thread (client mode): 0xae535c30
2026-04-11T18:50:39.018 [DEBUG] [Thread-174960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:50:39.033 [DEBUG] [Thread-174960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:50:39.033 [INFO] [Thread-174960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:50:39.041 [DEBUG] [Thread-174960] [transport.py] [_log()] client lang: <none>
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] server lang: <none>
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] kex follows: False
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] Compression: none
2026-04-11T18:50:39.042 [DEBUG] [Thread-174960] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:50:39.100 [DEBUG] [Thread-174960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:50:39.100 [DEBUG] [Thread-174960] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:50:39.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:50:39.102 [DEBUG] [Thread-174960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:50:39.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:50:39.156 [DEBUG] [Thread-174960] [transport.py] [_log()] userauth is OK
2026-04-11T18:50:39.156 [DEBUG] [Thread-174960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:50:39.156 [DEBUG] [Thread-174960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:50:39.156 [DEBUG] [Thread-174960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:50:39.156 [DEBUG] [Thread-174960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:50:39.175 [INFO] [Thread-174960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:50:39.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:50:39.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:50:40.004 [DEBUG] [Thread-174960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:50:40.004 [DEBUG] [Thread-174960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:50:40.052 [DEBUG] [Thread-174960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:50:40.053 [DEBUG] [Thread-174960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:50:40.062 [DEBUG] [Thread-174960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:50:40.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:50:40.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-04-11T18:50:40.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-04-11T18:50:40.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:50:40.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:50:40.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:50:40.098 [DEBUG] [Thread-174960] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:50:41.515 [DEBUG] [Thread-174962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:50:56.569 [DEBUG] [Thread-174963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:10.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:51:10.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:51:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:51:11.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 50, 35), 0.0634, 99.5108, 0.0, 26.0755, 12.273, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:51:11.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:50:35
2026-04-11T18:51:11.603 [DEBUG] [Thread-174964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:11.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:51:12.060 [DEBUG] [Thread-174965] [transport.py] [_log()] starting thread (client mode): 0xb0f6d1e0
2026-04-11T18:51:12.060 [DEBUG] [Thread-174965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:51:12.081 [DEBUG] [Thread-174965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:51:12.081 [INFO] [Thread-174965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] client lang: <none>
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] server lang: <none>
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] kex follows: False
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] Compression: none
2026-04-11T18:51:12.085 [DEBUG] [Thread-174965] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:51:12.102 [DEBUG] [Thread-174965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:51:12.103 [DEBUG] [Thread-174965] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:51:12.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:51:12.104 [DEBUG] [Thread-174965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:51:12.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:51:12.107 [DEBUG] [Thread-174965] [transport.py] [_log()] userauth is OK
2026-04-11T18:51:12.107 [DEBUG] [Thread-174965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:51:12.107 [DEBUG] [Thread-174965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:51:12.107 [DEBUG] [Thread-174965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:51:12.107 [DEBUG] [Thread-174965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:51:12.132 [INFO] [Thread-174965] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:51:12.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:51:12.913 [DEBUG] [Thread-174965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:51:12.913 [DEBUG] [Thread-174965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:51:12.914 [DEBUG] [Thread-174965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:51:12.954 [DEBUG] [Thread-174965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:51:12.954 [DEBUG] [Thread-174965] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:51:12.958 [DEBUG] [Thread-174965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:51:12.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:51:12.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:51:12.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:51:12.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:51:12.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:51:12.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:51:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:51:12.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:51:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:51:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.701855 -999.00  +12.00  18.83     97  +11.70 1 3 1 3 1    84    0 0.37 -0.49 ----- 18.8 18.8 297.0 20.6 13.1 -0.4 12.9 -1.1 12.6 -0.8 13.1 -0.8
2026-04-11T18:51:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:51:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:51:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.701855
2026-04-11T18:51:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:51:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:51:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:51:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:51:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:51:12.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:50:35', tmtdew=0.0634, humidity=99.5108, cloud=0.0, wind=26.0755, temperature=12.273, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:50:40.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:51:12.986 [DEBUG] [Thread-174965] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:51:13.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:51:13.077 [DEBUG] [Thread-174968] [transport.py] [_log()] starting thread (client mode): 0xae5f2620
2026-04-11T18:51:13.077 [DEBUG] [Thread-174968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:51:13.093 [DEBUG] [Thread-174968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:51:13.093 [INFO] [Thread-174968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:51:13.100 [DEBUG] [Thread-174968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:51:13.100 [DEBUG] [Thread-174968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:51:13.100 [DEBUG] [Thread-174968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:51:13.100 [DEBUG] [Thread-174968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] client lang: <none>
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] server lang: <none>
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] kex follows: False
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:51:13.101 [DEBUG] [Thread-174968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:51:13.102 [DEBUG] [Thread-174968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:51:13.102 [DEBUG] [Thread-174968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:51:13.102 [DEBUG] [Thread-174968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:51:13.102 [DEBUG] [Thread-174968] [transport.py] [_log()] Compression: none
2026-04-11T18:51:13.102 [DEBUG] [Thread-174968] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:51:13.162 [DEBUG] [Thread-174968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:51:13.162 [DEBUG] [Thread-174968] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:51:13.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:51:13.164 [DEBUG] [Thread-174968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:51:13.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:51:13.221 [DEBUG] [Thread-174968] [transport.py] [_log()] userauth is OK
2026-04-11T18:51:13.221 [DEBUG] [Thread-174968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:51:13.222 [DEBUG] [Thread-174968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:51:13.222 [DEBUG] [Thread-174968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:51:13.222 [DEBUG] [Thread-174968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:51:13.246 [INFO] [Thread-174968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:51:13.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:51:13.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:51:14.101 [DEBUG] [Thread-174968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:51:14.102 [DEBUG] [Thread-174968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:51:14.149 [DEBUG] [Thread-174968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:51:14.150 [DEBUG] [Thread-174968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:51:14.159 [DEBUG] [Thread-174968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:51:14.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:51:14.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-04-11T18:51:14.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:51:14.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:51:14.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:51:14.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:51:14.195 [DEBUG] [Thread-174968] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:51:23.233 [DEBUG] [Thread-174970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:26.638 [DEBUG] [Thread-174971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:26.919 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:26.921 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:41.690 [DEBUG] [Thread-174972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:51:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:51:44.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:51:44.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:51:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 51, 11), 0.02155, 99.8217, 0.0, 26.167, 11.9863, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:51:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:51:11
2026-04-11T18:51:45.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:51:46.020 [DEBUG] [Thread-174973] [transport.py] [_log()] starting thread (client mode): 0xa79510c0
2026-04-11T18:51:46.020 [DEBUG] [Thread-174973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:51:46.040 [DEBUG] [Thread-174973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:51:46.040 [INFO] [Thread-174973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:51:46.041 [DEBUG] [Thread-174973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:51:46.041 [DEBUG] [Thread-174973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:51:46.041 [DEBUG] [Thread-174973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] client lang: <none>
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] server lang: <none>
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] kex follows: False
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] Compression: none
2026-04-11T18:51:46.042 [DEBUG] [Thread-174973] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:51:46.059 [DEBUG] [Thread-174973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:51:46.060 [DEBUG] [Thread-174973] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:51:46.060 [DEBUG] [Thread-174973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:51:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:51:46.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:51:46.062 [DEBUG] [Thread-174973] [transport.py] [_log()] userauth is OK
2026-04-11T18:51:46.062 [DEBUG] [Thread-174973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:51:46.062 [DEBUG] [Thread-174973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:51:46.062 [DEBUG] [Thread-174973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:51:46.062 [DEBUG] [Thread-174973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:51:46.086 [INFO] [Thread-174973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:51:46.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:51:46.880 [DEBUG] [Thread-174973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:51:46.880 [DEBUG] [Thread-174973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:51:46.881 [DEBUG] [Thread-174973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:51:46.922 [DEBUG] [Thread-174973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:51:46.922 [DEBUG] [Thread-174973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:51:46.925 [DEBUG] [Thread-174973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:51:46.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:51:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:51:46.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:51:46.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:51:46.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:51:46.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:51:46.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:51:46.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:51:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:51:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.702202 -999.00  +11.90  21.04     97  +11.60 1 3 1 3 1    77    0 0.36 -0.81 ----- 21.0 21.0 299.0 28.2 13.1 -0.4 12.9 -1.0 12.6 -0.8 13.0 -0.8
2026-04-11T18:51:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:51:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:51:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.702202
2026-04-11T18:51:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:51:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:51:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:51:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:51:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:51:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:51:11', tmtdew=0.02155, humidity=99.8217, cloud=0.0, wind=26.167, temperature=11.9863, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:51:10.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:51:46.952 [DEBUG] [Thread-174973] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:51:47.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:51:47.045 [DEBUG] [Thread-174976] [transport.py] [_log()] starting thread (client mode): 0xae5624a0
2026-04-11T18:51:47.045 [DEBUG] [Thread-174976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:51:47.060 [DEBUG] [Thread-174976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:51:47.060 [INFO] [Thread-174976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:47.068 [DEBUG] [Thread-174976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] client lang: <none>
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] server lang: <none>
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] kex follows: False
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:51:47.069 [DEBUG] [Thread-174976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:51:47.070 [DEBUG] [Thread-174976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:51:47.070 [DEBUG] [Thread-174976] [transport.py] [_log()] Compression: none
2026-04-11T18:51:47.070 [DEBUG] [Thread-174976] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:51:47.124 [DEBUG] [Thread-174976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:51:47.125 [DEBUG] [Thread-174976] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:51:47.125 [DEBUG] [Thread-174976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:51:47.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:51:47.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:51:47.185 [DEBUG] [Thread-174976] [transport.py] [_log()] userauth is OK
2026-04-11T18:51:47.185 [DEBUG] [Thread-174976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:51:47.185 [DEBUG] [Thread-174976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:51:47.185 [DEBUG] [Thread-174976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:51:47.185 [DEBUG] [Thread-174976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:51:47.204 [INFO] [Thread-174976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:51:47.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:51:47.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:51:48.085 [DEBUG] [Thread-174976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:51:48.085 [DEBUG] [Thread-174976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:51:48.137 [DEBUG] [Thread-174976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:51:48.137 [DEBUG] [Thread-174976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:51:48.146 [DEBUG] [Thread-174976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:51:48.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:51:48.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:51:48.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-04-11T18:51:48.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:51:48.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:51:48.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:51:48.179 [DEBUG] [Thread-174976] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:51:56.725 [DEBUG] [Thread-174978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:11.785 [DEBUG] [Thread-174979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:52:18.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:52:18.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-04-11T18:52:19.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 51, 46), 0.04308, 99.6435, 0.0, 25.1935, 12.4057, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:52:19.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:51:46
2026-04-11T18:52:19.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:52:19.988 [DEBUG] [Thread-174980] [transport.py] [_log()] starting thread (client mode): 0xae537fd0
2026-04-11T18:52:19.988 [DEBUG] [Thread-174980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:52:20.008 [DEBUG] [Thread-174980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:52:20.008 [INFO] [Thread-174980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] client lang: <none>
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] server lang: <none>
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] kex follows: False
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] Compression: none
2026-04-11T18:52:20.012 [DEBUG] [Thread-174980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:52:20.029 [DEBUG] [Thread-174980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:52:20.030 [DEBUG] [Thread-174980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:52:20.030 [DEBUG] [Thread-174980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:52:20.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:52:20.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:52:20.033 [DEBUG] [Thread-174980] [transport.py] [_log()] userauth is OK
2026-04-11T18:52:20.033 [DEBUG] [Thread-174980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:52:20.033 [DEBUG] [Thread-174980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:52:20.033 [DEBUG] [Thread-174980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:52:20.033 [DEBUG] [Thread-174980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:52:20.051 [INFO] [Thread-174980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:52:20.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:52:20.838 [DEBUG] [Thread-174980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:52:20.838 [DEBUG] [Thread-174980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:52:20.839 [DEBUG] [Thread-174980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:52:20.879 [DEBUG] [Thread-174980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:52:20.879 [DEBUG] [Thread-174980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:52:20.882 [DEBUG] [Thread-174980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:52:20.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:52:20.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:52:20.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:52:20.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:52:20.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:52:20.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:52:20.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:52:20.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:52:20.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:52:20.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.702549 -999.00  +11.90  18.03     97  +11.50 1 3 1 3 1    70    0 0.37 -0.52 ----- 18.0 18.0 290.1 24.3 13.1 -0.5 12.9 -1.1 12.6 -0.9 13.0 -0.7
2026-04-11T18:52:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:52:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:52:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.702549
2026-04-11T18:52:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:52:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:52:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:52:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:52:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:52:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:51:46', tmtdew=0.04308, humidity=99.6435, cloud=0.0, wind=25.1935, temperature=12.4057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:51:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:52:20.911 [DEBUG] [Thread-174980] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:52:20.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:52:21.005 [DEBUG] [Thread-174983] [transport.py] [_log()] starting thread (client mode): 0xae5183a0
2026-04-11T18:52:21.005 [DEBUG] [Thread-174983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:52:21.020 [DEBUG] [Thread-174983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:52:21.020 [INFO] [Thread-174983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:52:21.027 [DEBUG] [Thread-174983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:52:21.027 [DEBUG] [Thread-174983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:52:21.027 [DEBUG] [Thread-174983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:52:21.027 [DEBUG] [Thread-174983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] client lang: <none>
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] server lang: <none>
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] kex follows: False
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] Compression: none
2026-04-11T18:52:21.028 [DEBUG] [Thread-174983] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:52:21.086 [DEBUG] [Thread-174983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:52:21.086 [DEBUG] [Thread-174983] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:52:21.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:52:21.087 [DEBUG] [Thread-174983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:52:21.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:52:21.142 [DEBUG] [Thread-174983] [transport.py] [_log()] userauth is OK
2026-04-11T18:52:21.143 [DEBUG] [Thread-174983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:52:21.143 [DEBUG] [Thread-174983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:52:21.143 [DEBUG] [Thread-174983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:52:21.143 [DEBUG] [Thread-174983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:52:21.161 [INFO] [Thread-174983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:52:21.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:52:21.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:52:21.977 [DEBUG] [Thread-174983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:52:21.977 [DEBUG] [Thread-174983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:52:22.025 [DEBUG] [Thread-174983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:52:22.025 [DEBUG] [Thread-174983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:52:22.035 [DEBUG] [Thread-174983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:52:22.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:52:22.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-04-11T18:52:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:52:22.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:52:22.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:52:22.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:52:22.075 [DEBUG] [Thread-174983] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:52:23.308 [DEBUG] [Thread-174985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:26.823 [DEBUG] [Thread-174986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:31.752 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:31.753 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:41.883 [DEBUG] [Thread-174987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:52:52.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:52:52.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:52:52.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-04-11T18:52:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 52, 22), 0.07156, 99.8217, 0.0, 21.0154, 11.9697, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:52:53.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:52:22
2026-04-11T18:52:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:52:53.887 [DEBUG] [Thread-174988] [transport.py] [_log()] starting thread (client mode): 0xb0febe80
2026-04-11T18:52:53.887 [DEBUG] [Thread-174988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:52:53.907 [DEBUG] [Thread-174988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:52:53.907 [INFO] [Thread-174988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:52:53.910 [DEBUG] [Thread-174988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] client lang: <none>
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] server lang: <none>
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] kex follows: False
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] Compression: none
2026-04-11T18:52:53.911 [DEBUG] [Thread-174988] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:52:53.928 [DEBUG] [Thread-174988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:52:53.929 [DEBUG] [Thread-174988] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:52:53.929 [DEBUG] [Thread-174988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:52:53.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:52:53.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:52:53.932 [DEBUG] [Thread-174988] [transport.py] [_log()] userauth is OK
2026-04-11T18:52:53.932 [DEBUG] [Thread-174988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:52:53.932 [DEBUG] [Thread-174988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:52:53.932 [DEBUG] [Thread-174988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:52:53.932 [DEBUG] [Thread-174988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:52:53.956 [INFO] [Thread-174988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:52:53.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:52:54.759 [DEBUG] [Thread-174988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:52:54.759 [DEBUG] [Thread-174988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:52:54.759 [DEBUG] [Thread-174988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:52:54.800 [DEBUG] [Thread-174988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:52:54.800 [DEBUG] [Thread-174988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:52:54.804 [DEBUG] [Thread-174988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:52:54.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:52:54.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:52:54.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:52:54.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:52:54.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:52:54.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:52:54.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:52:54.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:52:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:52:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.702896 -999.00  +11.90  20.66     97  +11.50 1 3 1 3 1    63    0 0.36 -0.47 ----- 20.7 20.7 298.6 24.1 13.1 -1.1 12.8 -1.1 12.6 -0.8 12.9 -0.8
2026-04-11T18:52:54.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:52:54.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:52:54.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.702896
2026-04-11T18:52:54.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:52:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:52:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:52:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:52:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:52:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:52:22', tmtdew=0.07156, humidity=99.8217, cloud=0.0, wind=21.0154, temperature=11.9697, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:52:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:52:54.834 [DEBUG] [Thread-174988] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:52:54.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:52:54.935 [DEBUG] [Thread-174991] [transport.py] [_log()] starting thread (client mode): 0xae509f60
2026-04-11T18:52:54.935 [DEBUG] [Thread-174991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:52:54.949 [DEBUG] [Thread-174991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:52:54.950 [INFO] [Thread-174991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:52:54.957 [DEBUG] [Thread-174991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:52:54.957 [DEBUG] [Thread-174991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:52:54.957 [DEBUG] [Thread-174991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] client lang: <none>
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] server lang: <none>
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] kex follows: False
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:52:54.958 [DEBUG] [Thread-174991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:52:54.959 [DEBUG] [Thread-174991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:52:54.959 [DEBUG] [Thread-174991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:52:54.959 [DEBUG] [Thread-174991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:52:54.959 [DEBUG] [Thread-174991] [transport.py] [_log()] Compression: none
2026-04-11T18:52:54.959 [DEBUG] [Thread-174991] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:52:55.019 [DEBUG] [Thread-174991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:52:55.019 [DEBUG] [Thread-174991] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:52:55.020 [DEBUG] [Thread-174991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:52:55.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:52:55.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:52:55.075 [DEBUG] [Thread-174991] [transport.py] [_log()] userauth is OK
2026-04-11T18:52:55.075 [DEBUG] [Thread-174991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:52:55.075 [DEBUG] [Thread-174991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:52:55.075 [DEBUG] [Thread-174991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:52:55.076 [DEBUG] [Thread-174991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:52:55.099 [INFO] [Thread-174991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:52:55.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:52:55.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:52:55.909 [DEBUG] [Thread-174991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:52:55.910 [DEBUG] [Thread-174991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:52:55.959 [DEBUG] [Thread-174991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:52:55.959 [DEBUG] [Thread-174991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:52:55.969 [DEBUG] [Thread-174991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:52:55.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:52:55.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-04-11T18:52:55.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-04-11T18:52:55.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:52:55.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:52:55.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:52:56.007 [DEBUG] [Thread-174991] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:52:56.924 [DEBUG] [Thread-174993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:11.978 [DEBUG] [Thread-174994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:23.365 [DEBUG] [Thread-174995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:26.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:53:26.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:53:26.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-04-11T18:53:27.021 [DEBUG] [Thread-174996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 52, 58), 0.06902, 99.8383, 0.0, 23.1145, 11.9863, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:53:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:52:58
2026-04-11T18:53:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:53:27.810 [DEBUG] [Thread-174997] [transport.py] [_log()] starting thread (client mode): 0xb0f6d570
2026-04-11T18:53:27.810 [DEBUG] [Thread-174997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:53:27.830 [DEBUG] [Thread-174997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:53:27.830 [INFO] [Thread-174997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:53:27.833 [DEBUG] [Thread-174997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:53:27.833 [DEBUG] [Thread-174997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:53:27.833 [DEBUG] [Thread-174997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:53:27.833 [DEBUG] [Thread-174997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] client lang: <none>
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] server lang: <none>
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] kex follows: False
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:53:27.834 [DEBUG] [Thread-174997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:53:27.835 [DEBUG] [Thread-174997] [transport.py] [_log()] Compression: none
2026-04-11T18:53:27.835 [DEBUG] [Thread-174997] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:53:27.851 [DEBUG] [Thread-174997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:53:27.851 [DEBUG] [Thread-174997] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:53:27.852 [DEBUG] [Thread-174997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:53:27.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:53:27.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:53:27.854 [DEBUG] [Thread-174997] [transport.py] [_log()] userauth is OK
2026-04-11T18:53:27.854 [DEBUG] [Thread-174997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:53:27.854 [DEBUG] [Thread-174997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:53:27.854 [DEBUG] [Thread-174997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:53:27.854 [DEBUG] [Thread-174997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:53:27.888 [INFO] [Thread-174997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:53:27.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:53:28.699 [DEBUG] [Thread-174997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:53:28.700 [DEBUG] [Thread-174997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:53:28.700 [DEBUG] [Thread-174997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:53:28.740 [DEBUG] [Thread-174997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:53:28.740 [DEBUG] [Thread-174997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:53:28.744 [DEBUG] [Thread-174997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:53:28.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:53:28.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:53:28.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:53:28.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:53:28.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:53:28.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:53:28.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:53:28.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:53:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:53:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.703244 -999.00  +11.90  22.02     97  +11.50 1 3 1 3 1    57    0 0.36 -0.63 ----- 22.0 22.0 298.6 24.6 13.1 -0.7 12.9 -1.3 12.6 -0.7 13.0 -0.4
2026-04-11T18:53:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:53:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:53:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.703244
2026-04-11T18:53:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:53:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:53:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:53:28.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:53:28.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:53:28.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:52:58', tmtdew=0.06902, humidity=99.8383, cloud=0.0, wind=23.1145, temperature=11.9863, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:52:40.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:53:28.772 [DEBUG] [Thread-174997] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:53:28.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:53:28.862 [DEBUG] [Thread-175000] [transport.py] [_log()] starting thread (client mode): 0xae5083d0
2026-04-11T18:53:28.863 [DEBUG] [Thread-175000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:53:28.877 [DEBUG] [Thread-175000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:53:28.877 [INFO] [Thread-175000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:53:28.885 [DEBUG] [Thread-175000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] client lang: <none>
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] server lang: <none>
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] kex follows: False
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] Compression: none
2026-04-11T18:53:28.886 [DEBUG] [Thread-175000] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:53:28.944 [DEBUG] [Thread-175000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:53:28.944 [DEBUG] [Thread-175000] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:53:28.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:53:28.945 [DEBUG] [Thread-175000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:53:28.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:53:29.001 [DEBUG] [Thread-175000] [transport.py] [_log()] userauth is OK
2026-04-11T18:53:29.002 [DEBUG] [Thread-175000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:53:29.002 [DEBUG] [Thread-175000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:53:29.002 [DEBUG] [Thread-175000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:53:29.002 [DEBUG] [Thread-175000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:53:29.020 [INFO] [Thread-175000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:53: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-04-11T18:53:29.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:53:29.840 [DEBUG] [Thread-175000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:53:29.841 [DEBUG] [Thread-175000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:53:29.889 [DEBUG] [Thread-175000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:53:29.889 [DEBUG] [Thread-175000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:53:29.898 [DEBUG] [Thread-175000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:53:29.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:53:29.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:53:29.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-04-11T18:53:29.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:53:29.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:53:29.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:53:29.938 [DEBUG] [Thread-175000] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:53:36.136 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:36.137 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:42.054 [DEBUG] [Thread-175002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:57.107 [DEBUG] [Thread-175003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:53:59.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:53:59.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:53:59.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-04-11T18:54:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 53, 33), 0.03804, 99.6766, 0.0, 21.3127, 12.3725, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:54:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:53:33
2026-04-11T18:54:01.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:54:01.797 [DEBUG] [Thread-175004] [transport.py] [_log()] starting thread (client mode): 0xae5f3520
2026-04-11T18:54:01.797 [DEBUG] [Thread-175004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:54:01.816 [DEBUG] [Thread-175004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:54:01.816 [INFO] [Thread-175004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:54:01.818 [DEBUG] [Thread-175004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:54:01.818 [DEBUG] [Thread-175004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:54:01.818 [DEBUG] [Thread-175004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] client lang: <none>
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] server lang: <none>
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] kex follows: False
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:54:01.819 [DEBUG] [Thread-175004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:54:01.820 [DEBUG] [Thread-175004] [transport.py] [_log()] Compression: none
2026-04-11T18:54:01.820 [DEBUG] [Thread-175004] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:54:01.830 [DEBUG] [Thread-175004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:54:01.831 [DEBUG] [Thread-175004] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:54:01.831 [DEBUG] [Thread-175004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:54:01.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:54:01.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:54:01.833 [DEBUG] [Thread-175004] [transport.py] [_log()] userauth is OK
2026-04-11T18:54:01.834 [DEBUG] [Thread-175004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:54:01.834 [DEBUG] [Thread-175004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:54:01.834 [DEBUG] [Thread-175004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:54:01.834 [DEBUG] [Thread-175004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:54:01.858 [INFO] [Thread-175004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:54:01.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:54:02.658 [DEBUG] [Thread-175004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:54:02.659 [DEBUG] [Thread-175004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:54:02.660 [DEBUG] [Thread-175004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:54:02.700 [DEBUG] [Thread-175004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:54:02.700 [DEBUG] [Thread-175004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:54:02.704 [DEBUG] [Thread-175004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:54:02.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:54:02.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:54:02.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:54:02.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:54:02.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:54:02.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:54:02.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:54:02.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:54:02.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:54:02.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.703591 -999.00  +11.90  21.73     97  +11.50 1 3 1 3 1    52    0 0.37 -0.52 ----- 21.7 21.7 297.8 24.4 13.0 -0.6 12.8 -1.2 12.5 -0.7 12.9 -0.2
2026-04-11T18:54:02.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:54:02.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:54:02.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.703591
2026-04-11T18:54:02.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:54:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:54:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:54:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:54:02.732 [DEBUG] [Thread-175004] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:54:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:54:02.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:53:33', tmtdew=0.03804, humidity=99.6766, cloud=0.0, wind=21.3127, temperature=12.3725, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:53:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:54:02.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:54:02.826 [DEBUG] [Thread-175007] [transport.py] [_log()] starting thread (client mode): 0xae5f1d80
2026-04-11T18:54:02.826 [DEBUG] [Thread-175007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:54:02.840 [DEBUG] [Thread-175007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:54:02.841 [INFO] [Thread-175007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] client lang: <none>
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] server lang: <none>
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] kex follows: False
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:54:02.848 [DEBUG] [Thread-175007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:54:02.849 [DEBUG] [Thread-175007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:54:02.849 [DEBUG] [Thread-175007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:54:02.849 [DEBUG] [Thread-175007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:54:02.849 [DEBUG] [Thread-175007] [transport.py] [_log()] Compression: none
2026-04-11T18:54:02.849 [DEBUG] [Thread-175007] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:54:02.908 [DEBUG] [Thread-175007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:54:02.909 [DEBUG] [Thread-175007] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:54:02.909 [DEBUG] [Thread-175007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:54:02.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:54:02.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:54:02.964 [DEBUG] [Thread-175007] [transport.py] [_log()] userauth is OK
2026-04-11T18:54:02.964 [DEBUG] [Thread-175007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:54:02.964 [DEBUG] [Thread-175007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:54:02.964 [DEBUG] [Thread-175007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:54:02.964 [DEBUG] [Thread-175007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:54:02.977 [INFO] [Thread-175007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:54:02.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:54:02.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:54:03.847 [DEBUG] [Thread-175007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:54:03.847 [DEBUG] [Thread-175007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:54:03.895 [DEBUG] [Thread-175007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:54:03.895 [DEBUG] [Thread-175007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:54:03.905 [DEBUG] [Thread-175007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:54:03.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:54:03.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-04-11T18:54:03.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-04-11T18:54:03.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:54:03.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:54:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:54:03.941 [DEBUG] [Thread-175007] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:54:12.144 [DEBUG] [Thread-175009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:54:23.423 [DEBUG] [Thread-175010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:54:27.198 [DEBUG] [Thread-175011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:54:33.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:54:33.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:54:33.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:54:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 54, 8), 0.071535, 99.8217, 0.0, 22.9558, 12.0194, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:54:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:54:08
2026-04-11T18:54:35.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:54:35.746 [DEBUG] [Thread-175012] [transport.py] [_log()] starting thread (client mode): 0xae5f0670
2026-04-11T18:54:35.746 [DEBUG] [Thread-175012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:54:35.766 [DEBUG] [Thread-175012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:54:35.767 [INFO] [Thread-175012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:54:35.769 [DEBUG] [Thread-175012] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:54:35.769 [DEBUG] [Thread-175012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] client lang: <none>
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] server lang: <none>
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] kex follows: False
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] Compression: none
2026-04-11T18:54:35.770 [DEBUG] [Thread-175012] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:54:35.787 [DEBUG] [Thread-175012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:54:35.788 [DEBUG] [Thread-175012] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:54:35.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:54:35.789 [DEBUG] [Thread-175012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:54:35.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:54:35.791 [DEBUG] [Thread-175012] [transport.py] [_log()] userauth is OK
2026-04-11T18:54:35.791 [DEBUG] [Thread-175012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:54:35.791 [DEBUG] [Thread-175012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:54:35.791 [DEBUG] [Thread-175012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:54:35.791 [DEBUG] [Thread-175012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:54:35.816 [INFO] [Thread-175012] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:54:35.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:54:36.547 [DEBUG] [Thread-175012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:54:36.547 [DEBUG] [Thread-175012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:54:36.547 [DEBUG] [Thread-175012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:54:36.589 [DEBUG] [Thread-175012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:54:36.589 [DEBUG] [Thread-175012] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:54:36.593 [DEBUG] [Thread-175012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:54:36.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:54:36.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:54:36.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:54:36.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:54:36.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:54:36.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:54:36.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:54:36.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:54:36.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:54:36.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.703938 -999.00  +11.90  22.48     97  +11.50 1 3 1 3 1    47    0 0.37 -0.32 ----- 22.5 22.5 297.2 26.7 13.0 -0.7 12.9 -1.1 12.5 -0.5 12.9 -0.2
2026-04-11T18:54:36.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:54:36.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:54:36.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.703938
2026-04-11T18:54:36.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:54:36.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:54:36.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:54:36.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:54:36.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:54:36.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:54:08', tmtdew=0.071535, humidity=99.8217, cloud=0.0, wind=22.9558, temperature=12.0194, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:53:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:54:36.619 [DEBUG] [Thread-175012] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:54:36.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:54:36.711 [DEBUG] [Thread-175015] [transport.py] [_log()] starting thread (client mode): 0xb0fe9f00
2026-04-11T18:54:36.711 [DEBUG] [Thread-175015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:54:36.726 [DEBUG] [Thread-175015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:54:36.726 [INFO] [Thread-175015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:54:36.733 [DEBUG] [Thread-175015] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] client lang: <none>
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] server lang: <none>
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] kex follows: False
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] Compression: none
2026-04-11T18:54:36.734 [DEBUG] [Thread-175015] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:54:36.793 [DEBUG] [Thread-175015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:54:36.794 [DEBUG] [Thread-175015] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:54:36.794 [DEBUG] [Thread-175015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:54:36.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:54:36.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:54:36.849 [DEBUG] [Thread-175015] [transport.py] [_log()] userauth is OK
2026-04-11T18:54:36.850 [DEBUG] [Thread-175015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:54:36.850 [DEBUG] [Thread-175015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:54:36.850 [DEBUG] [Thread-175015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:54:36.850 [DEBUG] [Thread-175015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:54:36.870 [INFO] [Thread-175015] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:54:36.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:54:36.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:54:37.662 [DEBUG] [Thread-175015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:54:37.663 [DEBUG] [Thread-175015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:54:37.711 [DEBUG] [Thread-175015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:54:37.712 [DEBUG] [Thread-175015] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:54:37.720 [DEBUG] [Thread-175015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:54:37.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:54:37.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:54:37.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-04-11T18:54:37.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:54:37.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:54:37.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:54:37.753 [DEBUG] [Thread-175015] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:54:40.267 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:54:40.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:54:42.238 [DEBUG] [Thread-175017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:54:57.293 [DEBUG] [Thread-175018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:07.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:55:07.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:55:07.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-04-11T18:55:09.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 54, 44), 0.05323, 99.5772, 0.0, 23.7823, 12.3725, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:55:09.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:54:44
2026-04-11T18:55:09.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:55:09.575 [DEBUG] [Thread-175019] [transport.py] [_log()] starting thread (client mode): 0xa7952680
2026-04-11T18:55:09.575 [DEBUG] [Thread-175019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:55:09.591 [DEBUG] [Thread-175019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:55:09.591 [INFO] [Thread-175019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] client lang: <none>
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] server lang: <none>
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] kex follows: False
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] Compression: none
2026-04-11T18:55:09.593 [DEBUG] [Thread-175019] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:55:09.603 [DEBUG] [Thread-175019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:55:09.603 [DEBUG] [Thread-175019] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:55:09.603 [DEBUG] [Thread-175019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:55:09.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:55:09.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:55:09.605 [DEBUG] [Thread-175019] [transport.py] [_log()] userauth is OK
2026-04-11T18:55:09.605 [DEBUG] [Thread-175019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:55:09.605 [DEBUG] [Thread-175019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:55:09.605 [DEBUG] [Thread-175019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:55:09.605 [DEBUG] [Thread-175019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:55:09.629 [INFO] [Thread-175019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:55:09.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:55:10.918 [DEBUG] [Thread-175019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:55:10.919 [DEBUG] [Thread-175019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:55:10.919 [DEBUG] [Thread-175019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:55:10.960 [DEBUG] [Thread-175019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:55:10.960 [DEBUG] [Thread-175019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:55:10.963 [DEBUG] [Thread-175019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:55:10.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:55:10.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:55:10.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:55:10.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:55:10.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:55:10.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:55:10.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:55:10.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:55:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:55:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.704633 -999.00  +11.80  20.15     97  +11.40 1 3 1 3 1    38    0 0.38 -0.14 ----- 20.1 20.1 302.0 30.1 13.0 -0.7 12.8 -0.9 12.5 -0.5 12.9 -0.2
2026-04-11T18:55:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:55:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:55:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.704633
2026-04-11T18:55:10.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:55:10.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:55:10.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:55:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:55:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:55:10.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:54:44', tmtdew=0.05323, humidity=99.5772, cloud=0.0, wind=23.7823, temperature=12.3725, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:54:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:55:10.998 [DEBUG] [Thread-175019] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:55:11.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:55:11.101 [DEBUG] [Thread-175022] [transport.py] [_log()] starting thread (client mode): 0xae509d20
2026-04-11T18:55:11.101 [DEBUG] [Thread-175022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:55:11.116 [DEBUG] [Thread-175022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:55:11.116 [INFO] [Thread-175022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:55:11.124 [DEBUG] [Thread-175022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:55:11.124 [DEBUG] [Thread-175022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:55:11.124 [DEBUG] [Thread-175022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] client lang: <none>
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] server lang: <none>
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] kex follows: False
2026-04-11T18:55:11.125 [DEBUG] [Thread-175022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:55:11.126 [DEBUG] [Thread-175022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:55:11.126 [DEBUG] [Thread-175022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:55:11.126 [DEBUG] [Thread-175022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:55:11.126 [DEBUG] [Thread-175022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:55:11.126 [DEBUG] [Thread-175022] [transport.py] [_log()] Compression: none
2026-04-11T18:55:11.126 [DEBUG] [Thread-175022] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:55:11.186 [DEBUG] [Thread-175022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:55:11.187 [DEBUG] [Thread-175022] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:55:11.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:55:11.189 [DEBUG] [Thread-175022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:55:11.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:55:11.242 [DEBUG] [Thread-175022] [transport.py] [_log()] userauth is OK
2026-04-11T18:55:11.243 [DEBUG] [Thread-175022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:55:11.243 [DEBUG] [Thread-175022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:55:11.243 [DEBUG] [Thread-175022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:55:11.243 [DEBUG] [Thread-175022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:55:11.262 [INFO] [Thread-175022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:55:11.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:55:11.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:55:12.089 [DEBUG] [Thread-175022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:55:12.089 [DEBUG] [Thread-175022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:55:12.137 [DEBUG] [Thread-175022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:55:12.137 [DEBUG] [Thread-175022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:55:12.147 [DEBUG] [Thread-175022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:55:12.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:55:12.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:55:12.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:55:12.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:55:12.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:55:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:55:12.184 [DEBUG] [Thread-175022] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:55:12.334 [DEBUG] [Thread-175024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:23.480 [DEBUG] [Thread-175025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:27.386 [DEBUG] [Thread-175026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:42.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:55:42.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:55:42.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-04-11T18:55:42.427 [DEBUG] [Thread-175027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 55, 20), 0.029085, 99.7724, 0.0, 23.0792, 11.9365, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:55:43.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:55:20
2026-04-11T18:55:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:55:44.110 [DEBUG] [Thread-175028] [transport.py] [_log()] starting thread (client mode): 0xb0feabc0
2026-04-11T18:55:44.110 [DEBUG] [Thread-175028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:55:44.131 [DEBUG] [Thread-175028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:55:44.131 [INFO] [Thread-175028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:55:44.134 [DEBUG] [Thread-175028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:55:44.134 [DEBUG] [Thread-175028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:55:44.134 [DEBUG] [Thread-175028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:55:44.134 [DEBUG] [Thread-175028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:44.134 [DEBUG] [Thread-175028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] client lang: <none>
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] server lang: <none>
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] kex follows: False
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] Compression: none
2026-04-11T18:55:44.135 [DEBUG] [Thread-175028] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:55:44.152 [DEBUG] [Thread-175028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:55:44.152 [DEBUG] [Thread-175028] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:55:44.153 [DEBUG] [Thread-175028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:55:44.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:55:44.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:55:44.155 [DEBUG] [Thread-175028] [transport.py] [_log()] userauth is OK
2026-04-11T18:55:44.156 [DEBUG] [Thread-175028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:55:44.156 [DEBUG] [Thread-175028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:55:44.156 [DEBUG] [Thread-175028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:55:44.156 [DEBUG] [Thread-175028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:55:44.178 [INFO] [Thread-175028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:55:44.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:55:44.944 [DEBUG] [Thread-175028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:55:44.944 [DEBUG] [Thread-175028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:55:44.945 [DEBUG] [Thread-175028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:55:44.985 [DEBUG] [Thread-175028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:55:44.985 [DEBUG] [Thread-175028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:55:44.988 [DEBUG] [Thread-175028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:55:44.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:55:44.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:55:45.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:55:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:55:45.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:55:45.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:55:45.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:55:45.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:55:45.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:55:45.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.704980 -999.00  +11.80  18.97     97  +11.50 1 3 1 3 1    34    0 0.39 -0.03 ----- 19.0 19.0 300.2 25.0 13.0 -0.7 12.8 -0.8 12.4 -0.4 12.9 -0.2
2026-04-11T18:55:45.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:55:45.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:55:45.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.704980
2026-04-11T18:55:45.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:55:45.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:55:45.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:55:45.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:55:45.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:55:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:55:20', tmtdew=0.029085, humidity=99.7724, cloud=0.0, wind=23.0792, temperature=11.9365, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:55:10.272', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:55:45.010 [DEBUG] [Thread-175028] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:55:45.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:45.094 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:55:45.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:55:45.106 [DEBUG] [Thread-175031] [transport.py] [_log()] starting thread (client mode): 0xb0feb280
2026-04-11T18:55:45.107 [DEBUG] [Thread-175031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:55:45.120 [DEBUG] [Thread-175031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:55:45.121 [INFO] [Thread-175031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:55:45.128 [DEBUG] [Thread-175031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:55:45.129 [DEBUG] [Thread-175031] [transport.py] [_log()] client lang: <none>
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] server lang: <none>
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] kex follows: False
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:55:45.130 [DEBUG] [Thread-175031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:55:45.131 [DEBUG] [Thread-175031] [transport.py] [_log()] Compression: none
2026-04-11T18:55:45.131 [DEBUG] [Thread-175031] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:55:45.186 [DEBUG] [Thread-175031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:55:45.187 [DEBUG] [Thread-175031] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:55:45.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:55:45.188 [DEBUG] [Thread-175031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:55:45.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:55:45.243 [DEBUG] [Thread-175031] [transport.py] [_log()] userauth is OK
2026-04-11T18:55:45.243 [DEBUG] [Thread-175031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:55:45.243 [DEBUG] [Thread-175031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:55:45.244 [DEBUG] [Thread-175031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:55:45.244 [DEBUG] [Thread-175031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:55:45.263 [INFO] [Thread-175031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:55:45.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:55:45.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:55:46.123 [DEBUG] [Thread-175031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:55:46.123 [DEBUG] [Thread-175031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:55:46.171 [DEBUG] [Thread-175031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:55:46.171 [DEBUG] [Thread-175031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:55:46.180 [DEBUG] [Thread-175031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:55:46.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:55:46.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-04-11T18:55:46.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-04-11T18:55:46.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:55:46.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:55:46.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:55:46.216 [DEBUG] [Thread-175031] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:55:57.469 [DEBUG] [Thread-175033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:12.522 [DEBUG] [Thread-175034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:16.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:56:16.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:56:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:56:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 55, 55), 0.06893, 99.8387, 0.0, 25.5848, 12.0528, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:56:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:55:55
2026-04-11T18:56:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:56:18.103 [DEBUG] [Thread-175035] [transport.py] [_log()] starting thread (client mode): 0xae516860
2026-04-11T18:56:18.103 [DEBUG] [Thread-175035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:56:18.127 [DEBUG] [Thread-175035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:56:18.127 [INFO] [Thread-175035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:56:18.130 [DEBUG] [Thread-175035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] client lang: <none>
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] server lang: <none>
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] kex follows: False
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:56:18.131 [DEBUG] [Thread-175035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:56:18.132 [DEBUG] [Thread-175035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:56:18.132 [DEBUG] [Thread-175035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:56:18.132 [DEBUG] [Thread-175035] [transport.py] [_log()] Compression: none
2026-04-11T18:56:18.132 [DEBUG] [Thread-175035] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:56:18.147 [DEBUG] [Thread-175035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:56:18.148 [DEBUG] [Thread-175035] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:56:18.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:56:18.149 [DEBUG] [Thread-175035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:56:18.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:56:18.192 [DEBUG] [Thread-175035] [transport.py] [_log()] userauth is OK
2026-04-11T18:56:18.193 [DEBUG] [Thread-175035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:56:18.193 [DEBUG] [Thread-175035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:56:18.201 [DEBUG] [Thread-175035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:56:18.202 [DEBUG] [Thread-175035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:56:18.222 [INFO] [Thread-175035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:56:18.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:56:19.091 [DEBUG] [Thread-175035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:56:19.091 [DEBUG] [Thread-175035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:56:19.092 [DEBUG] [Thread-175035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:56:19.132 [DEBUG] [Thread-175035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:56:19.132 [DEBUG] [Thread-175035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:56:19.136 [DEBUG] [Thread-175035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:56:19.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:56:19.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:56:19.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:56:19.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:56:19.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:56:19.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:56:19.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:56:19.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:56:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:56:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.705327 -999.00  +11.90  15.02     97  +11.60 1 3 1 3 1    31    0 0.39 0.00 ----- 15.0 15.0 288.9 21.9 13.0 -0.5 12.7 -0.8 12.4 -0.7 12.9 -0.2
2026-04-11T18:56:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:56:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:56:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.705327
2026-04-11T18:56:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:56:19.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:56:19.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:56:19.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:56:19.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:56:19.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:55:55', tmtdew=0.06893, humidity=99.8387, cloud=0.0, wind=25.5848, temperature=12.0528, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:55:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:56:19.165 [DEBUG] [Thread-175035] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:56:19.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:56:19.257 [DEBUG] [Thread-175038] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-11T18:56:19.258 [DEBUG] [Thread-175038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:56:19.272 [DEBUG] [Thread-175038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:56:19.272 [INFO] [Thread-175038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:56:19.279 [DEBUG] [Thread-175038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:56:19.280 [DEBUG] [Thread-175038] [transport.py] [_log()] client lang: <none>
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] server lang: <none>
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] kex follows: False
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] Compression: none
2026-04-11T18:56:19.281 [DEBUG] [Thread-175038] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:56:19.339 [DEBUG] [Thread-175038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:56:19.339 [DEBUG] [Thread-175038] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:56:19.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:56:19.341 [DEBUG] [Thread-175038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:56:19.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:56:19.395 [DEBUG] [Thread-175038] [transport.py] [_log()] userauth is OK
2026-04-11T18:56:19.395 [DEBUG] [Thread-175038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:56:19.395 [DEBUG] [Thread-175038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:56:19.395 [DEBUG] [Thread-175038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:56:19.396 [DEBUG] [Thread-175038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:56:19.414 [INFO] [Thread-175038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:56:19.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:56:19.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:56:20.226 [DEBUG] [Thread-175038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:56:20.226 [DEBUG] [Thread-175038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:56:20.274 [DEBUG] [Thread-175038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:56:20.274 [DEBUG] [Thread-175038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:56:20.285 [DEBUG] [Thread-175038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:56:20.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:56:20.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-04-11T18:56:20.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-04-11T18:56:20.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:56:20.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:56:20.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:56:20.320 [DEBUG] [Thread-175038] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:56:23.533 [DEBUG] [Thread-175040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:27.557 [DEBUG] [Thread-175041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:42.608 [DEBUG] [Thread-175042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:49.587 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:49.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:56:50.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:56:50.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:56:50.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-04-11T18:56:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 56, 30), 0.066395, 99.8552, 0.0, 25.7436, 12.0528, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:56:51.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:56:30
2026-04-11T18:56:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:56:52.172 [DEBUG] [Thread-175043] [transport.py] [_log()] starting thread (client mode): 0xb0f56b30
2026-04-11T18:56:52.172 [DEBUG] [Thread-175043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:56:52.191 [DEBUG] [Thread-175043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:56:52.192 [INFO] [Thread-175043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:52.195 [DEBUG] [Thread-175043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] client lang: <none>
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] server lang: <none>
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] kex follows: False
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] Compression: none
2026-04-11T18:56:52.196 [DEBUG] [Thread-175043] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:56:52.215 [DEBUG] [Thread-175043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:56:52.215 [DEBUG] [Thread-175043] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:56:52.216 [DEBUG] [Thread-175043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:56:52.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:56:52.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:56:52.219 [DEBUG] [Thread-175043] [transport.py] [_log()] userauth is OK
2026-04-11T18:56:52.219 [DEBUG] [Thread-175043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:56:52.219 [DEBUG] [Thread-175043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:56:52.219 [DEBUG] [Thread-175043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:56:52.219 [DEBUG] [Thread-175043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:56:52.256 [INFO] [Thread-175043] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:56:52.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:56:53.055 [DEBUG] [Thread-175043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:56:53.056 [DEBUG] [Thread-175043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:56:53.056 [DEBUG] [Thread-175043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:56:53.097 [DEBUG] [Thread-175043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:56:53.097 [DEBUG] [Thread-175043] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:56:53.101 [DEBUG] [Thread-175043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:56:53.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:56:53.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:56:53.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:56:53.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:56:53.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:56:53.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:56:53.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:56:53.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:56:53.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:56:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.705674 -999.00  +11.90  20.48     97  +11.50 1 3 1 3 1    28    0 0.36 -0.67 ----- 20.5 20.5 292.2 25.2 13.0 -0.8 12.8 -0.8 12.5 -0.4 12.9 -0.1
2026-04-11T18:56:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:56:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:56:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.705674
2026-04-11T18:56:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:56:53.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:56:53.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:56:53.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:56:53.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:56:53.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:56:30', tmtdew=0.066395, humidity=99.8552, cloud=0.0, wind=25.7436, temperature=12.0528, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:56:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:56:53.128 [DEBUG] [Thread-175043] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:56:53.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:56:53.223 [DEBUG] [Thread-175046] [transport.py] [_log()] starting thread (client mode): 0xb0f57ca0
2026-04-11T18:56:53.223 [DEBUG] [Thread-175046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:56:53.238 [DEBUG] [Thread-175046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:56:53.238 [INFO] [Thread-175046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] client lang: <none>
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] server lang: <none>
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] kex follows: False
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] Compression: none
2026-04-11T18:56:53.246 [DEBUG] [Thread-175046] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:56:53.304 [DEBUG] [Thread-175046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:56:53.304 [DEBUG] [Thread-175046] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:56:53.305 [DEBUG] [Thread-175046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:56:53.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:56:53.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:56:53.364 [DEBUG] [Thread-175046] [transport.py] [_log()] userauth is OK
2026-04-11T18:56:53.364 [DEBUG] [Thread-175046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:56:53.365 [DEBUG] [Thread-175046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:56:53.365 [DEBUG] [Thread-175046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:56:53.365 [DEBUG] [Thread-175046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:56:53.383 [INFO] [Thread-175046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:56:53.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:56:53.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:56:54.221 [DEBUG] [Thread-175046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:56:54.222 [DEBUG] [Thread-175046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:56:54.270 [DEBUG] [Thread-175046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:56:54.270 [DEBUG] [Thread-175046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:56:54.280 [DEBUG] [Thread-175046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:56:54.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:56:54.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:56:54.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:56:54.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:56:54.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:56:54.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:56:54.317 [DEBUG] [Thread-175046] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:56:57.646 [DEBUG] [Thread-175048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:12.702 [DEBUG] [Thread-175049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:23.600 [DEBUG] [Thread-175050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:24.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:57:24.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:57:24.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-04-11T18:57:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 57, 6), 0.068945, 99.8386, 0.0, 24.35, 12.0362, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:57:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:57:06
2026-04-11T18:57:25.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:57:26.108 [DEBUG] [Thread-175051] [transport.py] [_log()] starting thread (client mode): 0xae50a170
2026-04-11T18:57:26.108 [DEBUG] [Thread-175051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:57:26.120 [DEBUG] [Thread-175051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:57:26.120 [INFO] [Thread-175051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] client lang: <none>
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] server lang: <none>
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] kex follows: False
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] Compression: none
2026-04-11T18:57:26.123 [DEBUG] [Thread-175051] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:57:26.139 [DEBUG] [Thread-175051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:57:26.139 [DEBUG] [Thread-175051] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:57:26.139 [DEBUG] [Thread-175051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:57:26.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:57:26.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:57:26.142 [DEBUG] [Thread-175051] [transport.py] [_log()] userauth is OK
2026-04-11T18:57:26.142 [DEBUG] [Thread-175051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:57:26.142 [DEBUG] [Thread-175051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:57:26.142 [DEBUG] [Thread-175051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:57:26.142 [DEBUG] [Thread-175051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:57:26.160 [INFO] [Thread-175051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:57:26.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:57:26.952 [DEBUG] [Thread-175051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:57:26.952 [DEBUG] [Thread-175051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:57:26.953 [DEBUG] [Thread-175051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:57:26.993 [DEBUG] [Thread-175051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:57:26.993 [DEBUG] [Thread-175051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:57:26.996 [DEBUG] [Thread-175051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:57:27.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:57:27.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:57:27.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:57:27.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:57:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:57:27.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:57:27.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:57:27.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:57:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:57:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.706021 -999.00  +11.90  21.56     97  +11.60 1 3 1 3 1    25    0 0.35 -0.97 ----- 21.6 21.6 304.8 26.8 13.0 -0.5 12.8 -0.8 12.5 -0.5 12.9 -0.1
2026-04-11T18:57:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:57:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:57:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.706021
2026-04-11T18:57:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:57:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:57:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:57:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:57:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:57:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:57:06', tmtdew=0.068945, humidity=99.8386, cloud=0.0, wind=24.35, temperature=12.0362, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:56:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:57:27.014 [DEBUG] [Thread-175051] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:57:27.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:57:27.114 [DEBUG] [Thread-175054] [transport.py] [_log()] starting thread (client mode): 0xae536e90
2026-04-11T18:57:27.114 [DEBUG] [Thread-175054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:57:27.129 [DEBUG] [Thread-175054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:57:27.129 [INFO] [Thread-175054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:57:27.136 [DEBUG] [Thread-175054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:57:27.136 [DEBUG] [Thread-175054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] client lang: <none>
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] server lang: <none>
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] kex follows: False
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] Compression: none
2026-04-11T18:57:27.137 [DEBUG] [Thread-175054] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:57:27.197 [DEBUG] [Thread-175054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:57:27.197 [DEBUG] [Thread-175054] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:57:27.198 [DEBUG] [Thread-175054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:57:27.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:57:27.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:57:27.254 [DEBUG] [Thread-175054] [transport.py] [_log()] userauth is OK
2026-04-11T18:57:27.254 [DEBUG] [Thread-175054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:57:27.254 [DEBUG] [Thread-175054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:57:27.255 [DEBUG] [Thread-175054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:57:27.255 [DEBUG] [Thread-175054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:57:27.273 [INFO] [Thread-175054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:57:27.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:57:27.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:57:27.738 [DEBUG] [Thread-175056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:28.110 [DEBUG] [Thread-175054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:57:28.110 [DEBUG] [Thread-175054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:57:28.159 [DEBUG] [Thread-175054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:57:28.159 [DEBUG] [Thread-175054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:57:28.167 [DEBUG] [Thread-175054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:57:28.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:57:28.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-04-11T18:57:28.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-04-11T18:57:28.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:57:28.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:57:28.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:57:28.201 [DEBUG] [Thread-175054] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:57:42.787 [DEBUG] [Thread-175057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:55.245 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:55.246 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:57.827 [DEBUG] [Thread-175058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:57:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:57:58.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:57:58.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-04-11T18:57:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 57, 41), 0.04296, 99.644, 0.0, 25.4405, 12.4723, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:57:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:57:41
2026-04-11T18:58:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:58:00.209 [DEBUG] [Thread-175059] [transport.py] [_log()] starting thread (client mode): 0xae519960
2026-04-11T18:58:00.209 [DEBUG] [Thread-175059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:58:00.220 [DEBUG] [Thread-175059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:58:00.220 [INFO] [Thread-175059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:58:00.223 [DEBUG] [Thread-175059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:58:00.223 [DEBUG] [Thread-175059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:58:00.223 [DEBUG] [Thread-175059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:58:00.223 [DEBUG] [Thread-175059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:00.223 [DEBUG] [Thread-175059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] client lang: <none>
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] server lang: <none>
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] kex follows: False
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] Compression: none
2026-04-11T18:58:00.224 [DEBUG] [Thread-175059] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:58:00.238 [DEBUG] [Thread-175059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:58:00.239 [DEBUG] [Thread-175059] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:58:00.239 [DEBUG] [Thread-175059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:58:00.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:58:00.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:58:00.240 [DEBUG] [Thread-175059] [transport.py] [_log()] userauth is OK
2026-04-11T18:58:00.240 [DEBUG] [Thread-175059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:58:00.240 [DEBUG] [Thread-175059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:58:00.240 [DEBUG] [Thread-175059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:58:00.240 [DEBUG] [Thread-175059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:58:00.253 [INFO] [Thread-175059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:58:00.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:58:01.027 [DEBUG] [Thread-175059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:58:01.028 [DEBUG] [Thread-175059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:58:01.028 [DEBUG] [Thread-175059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:58:01.069 [DEBUG] [Thread-175059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:58:01.069 [DEBUG] [Thread-175059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:58:01.073 [DEBUG] [Thread-175059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:58:01.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:58:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:58:01.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:58:01.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:58:01.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:58:01.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:58:01.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:58:01.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:58:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:58:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.706369 -999.00  +11.90  18.21     97  +11.50 1 3 1 3 1    23    0 0.35 -0.90 ----- 18.2 18.2 298.0 24.7 13.0 -0.5 12.8 -0.9 12.4 -0.7 12.9 -0.1
2026-04-11T18:58:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:58:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:58:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.706369
2026-04-11T18:58:01.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:58:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:58:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:58:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:58:01.098 [DEBUG] [Thread-175059] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:58:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:58:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:57:41', tmtdew=0.04296, humidity=99.644, cloud=0.0, wind=25.4405, temperature=12.4723, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:57:10.282', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:58:01.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:58:01.194 [DEBUG] [Thread-175062] [transport.py] [_log()] starting thread (client mode): 0xae5196f0
2026-04-11T18:58:01.194 [DEBUG] [Thread-175062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:58:01.209 [DEBUG] [Thread-175062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:58:01.209 [INFO] [Thread-175062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] client lang: <none>
2026-04-11T18:58:01.216 [DEBUG] [Thread-175062] [transport.py] [_log()] server lang: <none>
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] kex follows: False
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] Compression: none
2026-04-11T18:58:01.217 [DEBUG] [Thread-175062] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:58:01.273 [DEBUG] [Thread-175062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:58:01.274 [DEBUG] [Thread-175062] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:58:01.275 [DEBUG] [Thread-175062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:58:01.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:58:01.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:58:01.329 [DEBUG] [Thread-175062] [transport.py] [_log()] userauth is OK
2026-04-11T18:58:01.330 [DEBUG] [Thread-175062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:58:01.330 [DEBUG] [Thread-175062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:58:01.330 [DEBUG] [Thread-175062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:58:01.330 [DEBUG] [Thread-175062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:58:01.354 [INFO] [Thread-175062] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:58:01.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:58:01.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:58:02.243 [DEBUG] [Thread-175062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:58:02.243 [DEBUG] [Thread-175062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:58:02.291 [DEBUG] [Thread-175062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:58:02.291 [DEBUG] [Thread-175062] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:58:02.301 [DEBUG] [Thread-175062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:58:02.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:58:02.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-04-11T18:58:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:58:02.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:58:02.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:58:02.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:58:02.338 [DEBUG] [Thread-175062] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:58:12.861 [DEBUG] [Thread-175064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:58:23.656 [DEBUG] [Thread-175065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:58:27.912 [DEBUG] [Thread-175066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:58:32.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:58:32.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:58:32.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T18:58:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 58, 17), 0.0215, 99.822, 0.0, 19.9026, 12.0195, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:58:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:58:17
2026-04-11T18:58:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:58:34.216 [DEBUG] [Thread-175067] [transport.py] [_log()] starting thread (client mode): 0xae517d30
2026-04-11T18:58:34.216 [DEBUG] [Thread-175067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:58:34.236 [DEBUG] [Thread-175067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:58:34.236 [INFO] [Thread-175067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:58:34.239 [DEBUG] [Thread-175067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:58:34.239 [DEBUG] [Thread-175067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] client lang: <none>
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] server lang: <none>
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] kex follows: False
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] Compression: none
2026-04-11T18:58:34.240 [DEBUG] [Thread-175067] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:58:34.261 [DEBUG] [Thread-175067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:58:34.261 [DEBUG] [Thread-175067] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:58:34.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:58:34.262 [DEBUG] [Thread-175067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:58:34.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:58:34.264 [DEBUG] [Thread-175067] [transport.py] [_log()] userauth is OK
2026-04-11T18:58:34.265 [DEBUG] [Thread-175067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:58:34.265 [DEBUG] [Thread-175067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:58:34.265 [DEBUG] [Thread-175067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:58:34.265 [DEBUG] [Thread-175067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:58:34.299 [INFO] [Thread-175067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:58:34.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:58:35.122 [DEBUG] [Thread-175067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:58:35.122 [DEBUG] [Thread-175067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:58:35.123 [DEBUG] [Thread-175067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:58:35.163 [DEBUG] [Thread-175067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:58:35.163 [DEBUG] [Thread-175067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:58:35.166 [DEBUG] [Thread-175067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:58:35.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:58:35.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:58:35.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:58:35.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:58:35.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:58:35.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:58:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:58:35.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:58:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:58:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.706716 -999.00  +11.90  21.72     97  +11.60 1 3 1 3 1    20    0 0.36 -0.76 ----- 21.7 21.7 301.0 23.8 13.0 -0.8 12.8 -0.9 12.5 -0.7 12.9 -0.1
2026-04-11T18:58:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:58:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:58:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.706716
2026-04-11T18:58:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:58:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:58:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:58:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:58:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:58:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:58:17', tmtdew=0.0215, humidity=99.822, cloud=0.0, wind=19.9026, temperature=12.0195, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:57:40.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:58:35.193 [DEBUG] [Thread-175067] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:58:35.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:58:35.285 [DEBUG] [Thread-175070] [transport.py] [_log()] starting thread (client mode): 0xae535300
2026-04-11T18:58:35.285 [DEBUG] [Thread-175070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:58:35.300 [DEBUG] [Thread-175070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:58:35.300 [INFO] [Thread-175070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:58:35.308 [DEBUG] [Thread-175070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:58:35.308 [DEBUG] [Thread-175070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:58:35.308 [DEBUG] [Thread-175070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:58:35.308 [DEBUG] [Thread-175070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:35.308 [DEBUG] [Thread-175070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] client lang: <none>
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] server lang: <none>
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] kex follows: False
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] Compression: none
2026-04-11T18:58:35.309 [DEBUG] [Thread-175070] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:58:35.366 [DEBUG] [Thread-175070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:58:35.367 [DEBUG] [Thread-175070] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:58:35.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:58:35.368 [DEBUG] [Thread-175070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:58:35.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:58:35.426 [DEBUG] [Thread-175070] [transport.py] [_log()] userauth is OK
2026-04-11T18:58:35.426 [DEBUG] [Thread-175070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:58:35.426 [DEBUG] [Thread-175070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:58:35.427 [DEBUG] [Thread-175070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:58:35.427 [DEBUG] [Thread-175070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:58:35.445 [INFO] [Thread-175070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:58:35.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:58:35.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:58:36.286 [DEBUG] [Thread-175070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:58:36.286 [DEBUG] [Thread-175070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:58:36.334 [DEBUG] [Thread-175070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:58:36.334 [DEBUG] [Thread-175070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:58:36.343 [DEBUG] [Thread-175070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:58:36.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:58:36.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-04-11T18:58:36.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:58:36.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:58:36.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:58:36.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:58:36.380 [DEBUG] [Thread-175070] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:58:42.948 [DEBUG] [Thread-175072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:58:58.004 [DEBUG] [Thread-175073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:00.410 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:00.411 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:59:06.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:59:06.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-04-11T18:59:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 58, 53), 0.03792, 99.6771, 0.0, 25.6169, 12.4723, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:59:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:58:53
2026-04-11T18:59:08.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:59:08.241 [DEBUG] [Thread-175074] [transport.py] [_log()] starting thread (client mode): 0xae562020
2026-04-11T18:59:08.241 [DEBUG] [Thread-175074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:59:08.261 [DEBUG] [Thread-175074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:59:08.261 [INFO] [Thread-175074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] client lang: <none>
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] server lang: <none>
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] kex follows: False
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] Compression: none
2026-04-11T18:59:08.264 [DEBUG] [Thread-175074] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:59:08.281 [DEBUG] [Thread-175074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:59:08.282 [DEBUG] [Thread-175074] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:59:08.282 [DEBUG] [Thread-175074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:59:08.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:59:08.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:59:08.285 [DEBUG] [Thread-175074] [transport.py] [_log()] userauth is OK
2026-04-11T18:59:08.285 [DEBUG] [Thread-175074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:59:08.285 [DEBUG] [Thread-175074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:59:08.285 [DEBUG] [Thread-175074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:59:08.285 [DEBUG] [Thread-175074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:59:08.302 [INFO] [Thread-175074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:59:08.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:59:09.122 [DEBUG] [Thread-175074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:59:09.122 [DEBUG] [Thread-175074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:59:09.122 [DEBUG] [Thread-175074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:59:09.163 [DEBUG] [Thread-175074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:59:09.163 [DEBUG] [Thread-175074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:59:09.165 [DEBUG] [Thread-175074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:59:09.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:59:09.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:59:09.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:59:09.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:59:09.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:59:09.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:59:09.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:59:09.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:59:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:59:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.707063 -999.00  +11.90  19.38     97  +11.60 1 3 1 3 1    18    0 0.34 -1.14 ----- 19.4 19.4 288.0 25.5 13.0 -0.9 12.8 -0.9 12.5 -0.7 12.9 -0.4
2026-04-11T18:59:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:59:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:59:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.707063
2026-04-11T18:59:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:59:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:59:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:59:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:59:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:59:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:58:53', tmtdew=0.03792, humidity=99.6771, cloud=0.0, wind=25.6169, temperature=12.4723, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:58:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:59:09.192 [DEBUG] [Thread-175074] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:59:09.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:59:09.288 [DEBUG] [Thread-175077] [transport.py] [_log()] starting thread (client mode): 0xae562260
2026-04-11T18:59:09.289 [DEBUG] [Thread-175077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:59:09.302 [DEBUG] [Thread-175077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:59:09.303 [INFO] [Thread-175077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:09.310 [DEBUG] [Thread-175077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] client lang: <none>
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] server lang: <none>
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] kex follows: False
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] Compression: none
2026-04-11T18:59:09.311 [DEBUG] [Thread-175077] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:59:09.371 [DEBUG] [Thread-175077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:59:09.372 [DEBUG] [Thread-175077] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:59:09.373 [DEBUG] [Thread-175077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:59:09.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:59:09.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:59:09.431 [DEBUG] [Thread-175077] [transport.py] [_log()] userauth is OK
2026-04-11T18:59:09.431 [DEBUG] [Thread-175077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:59:09.431 [DEBUG] [Thread-175077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:59:09.432 [DEBUG] [Thread-175077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:59:09.432 [DEBUG] [Thread-175077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:59:09.451 [INFO] [Thread-175077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:59:09.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:59:09.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:59:10.264 [DEBUG] [Thread-175077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:59:10.264 [DEBUG] [Thread-175077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:59:10.312 [DEBUG] [Thread-175077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:59:10.312 [DEBUG] [Thread-175077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:59:10.322 [DEBUG] [Thread-175077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:59:10.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:59:10.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T18:59:10.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:59:10.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:59:10.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:59:10.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:59:10.358 [DEBUG] [Thread-175077] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:59:13.043 [DEBUG] [Thread-175079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:23.713 [DEBUG] [Thread-175080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:28.097 [DEBUG] [Thread-175081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T18:59:40.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T18:59:40.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-04-11T18:59:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 18, 59, 28), 0.06639, 99.8555, 0.0, 22.126, 12.0532, 2, 2, 2, 2, 0, 0),)
2026-04-11T18:59:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 18:59:28
2026-04-11T18:59:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T18:59:42.287 [DEBUG] [Thread-175082] [transport.py] [_log()] starting thread (client mode): 0xae50bbe0
2026-04-11T18:59:42.288 [DEBUG] [Thread-175082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:59:42.308 [DEBUG] [Thread-175082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T18:59:42.308 [INFO] [Thread-175082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T18:59:42.311 [DEBUG] [Thread-175082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:59:42.311 [DEBUG] [Thread-175082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T18:59:42.311 [DEBUG] [Thread-175082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:59:42.311 [DEBUG] [Thread-175082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] client lang: <none>
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] server lang: <none>
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] kex follows: False
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:59:42.312 [DEBUG] [Thread-175082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:59:42.313 [DEBUG] [Thread-175082] [transport.py] [_log()] Compression: none
2026-04-11T18:59:42.313 [DEBUG] [Thread-175082] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:59:42.325 [DEBUG] [Thread-175082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:59:42.326 [DEBUG] [Thread-175082] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:59:42.327 [DEBUG] [Thread-175082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T18:59:42.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T18:59:42.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:59:42.370 [DEBUG] [Thread-175082] [transport.py] [_log()] userauth is OK
2026-04-11T18:59:42.370 [DEBUG] [Thread-175082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:59:42.370 [DEBUG] [Thread-175082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:59:42.371 [DEBUG] [Thread-175082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T18:59:42.371 [DEBUG] [Thread-175082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:59:42.391 [INFO] [Thread-175082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:59:42.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:59:43.137 [DEBUG] [Thread-175084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T18:59:43.169 [DEBUG] [Thread-175082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:59:43.169 [DEBUG] [Thread-175082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:59:43.170 [DEBUG] [Thread-175082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T18:59:43.210 [DEBUG] [Thread-175082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:59:43.210 [DEBUG] [Thread-175082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:59:43.213 [DEBUG] [Thread-175082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:59:43.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:59:43.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T18:59:43.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T18:59:43.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T18:59:43.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:59:43.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T18:59:43.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:59:43.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:59:43.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T18:59:43.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.707410 -999.00  +12.00  20.22     97  +11.60 1 3 1 3 1    17    0 0.34 -1.11 ----- 20.2 20.2 299.8 24.7 13.0 -0.8 12.8 -0.7 12.5 -0.4 12.9 -0.4
2026-04-11T18:59:43.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T18:59:43.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T18:59:43.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.707410
2026-04-11T18:59:43.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T18:59:43.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T18:59:43.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T18:59:43.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T18:59:43.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T18:59:43.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T18:59:28', tmtdew=0.06639, humidity=99.8555, cloud=0.0, wind=22.126, temperature=12.0532, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T16:58:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T18:59:43.240 [DEBUG] [Thread-175082] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:59:43.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T18:59:43.339 [DEBUG] [Thread-175086] [transport.py] [_log()] starting thread (client mode): 0xb0fb75e0
2026-04-11T18:59:43.339 [DEBUG] [Thread-175086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T18:59:43.353 [DEBUG] [Thread-175086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T18:59:43.353 [INFO] [Thread-175086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T18:59:43.361 [DEBUG] [Thread-175086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T18:59:43.361 [DEBUG] [Thread-175086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T18:59:43.361 [DEBUG] [Thread-175086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T18:59:43.361 [DEBUG] [Thread-175086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:43.361 [DEBUG] [Thread-175086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T18:59:43.361 [DEBUG] [Thread-175086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] client lang: <none>
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] server lang: <none>
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] kex follows: False
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T18:59:43.362 [DEBUG] [Thread-175086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T18:59:43.363 [DEBUG] [Thread-175086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T18:59:43.363 [DEBUG] [Thread-175086] [transport.py] [_log()] Compression: none
2026-04-11T18:59:43.363 [DEBUG] [Thread-175086] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T18:59:43.419 [DEBUG] [Thread-175086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T18:59:43.419 [DEBUG] [Thread-175086] [transport.py] [_log()] Switch to new keys ...
2026-04-11T18:59:43.420 [DEBUG] [Thread-175086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T18:59:43.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T18:59:43.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T18:59:43.475 [DEBUG] [Thread-175086] [transport.py] [_log()] userauth is OK
2026-04-11T18:59:43.475 [DEBUG] [Thread-175086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T18:59:43.475 [DEBUG] [Thread-175086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T18:59:43.475 [DEBUG] [Thread-175086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T18:59:43.476 [DEBUG] [Thread-175086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T18:59:43.494 [INFO] [Thread-175086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T18:59:43.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T18:59:43.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T18:59:44.342 [DEBUG] [Thread-175086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T18:59:44.343 [DEBUG] [Thread-175086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T18:59:44.391 [DEBUG] [Thread-175086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T18:59:44.391 [DEBUG] [Thread-175086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T18:59:44.400 [DEBUG] [Thread-175086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T18:59:44.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T18:59:44.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-04-11T18:59:44.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T18:59:44.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T18:59:44.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T18:59:44.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T18:59:44.439 [DEBUG] [Thread-175086] [transport.py] [_log()] EOF in transport thread
2026-04-11T18:59:58.171 [DEBUG] [Thread-175088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:06.057 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:06.058 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:13.228 [DEBUG] [Thread-175089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:14.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:00:14.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:00:14.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-04-11T19:00:15.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 0, 5), 0.07653, 99.7892, 0.0, 21.0146, 12.0366, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:00:15.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:00:05
2026-04-11T19:00:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:00:16.324 [DEBUG] [Thread-175090] [transport.py] [_log()] starting thread (client mode): 0xb0fb4d60
2026-04-11T19:00:16.324 [DEBUG] [Thread-175090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:00:16.343 [DEBUG] [Thread-175090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:00:16.343 [INFO] [Thread-175090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:00:16.346 [DEBUG] [Thread-175090] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] client lang: <none>
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] server lang: <none>
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] kex follows: False
2026-04-11T19:00:16.347 [DEBUG] [Thread-175090] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:00:16.348 [DEBUG] [Thread-175090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:00:16.348 [DEBUG] [Thread-175090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:00:16.348 [DEBUG] [Thread-175090] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:00:16.348 [DEBUG] [Thread-175090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:00:16.348 [DEBUG] [Thread-175090] [transport.py] [_log()] Compression: none
2026-04-11T19:00:16.348 [DEBUG] [Thread-175090] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:00:16.366 [DEBUG] [Thread-175090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:00:16.366 [DEBUG] [Thread-175090] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:00:16.367 [DEBUG] [Thread-175090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:00:16.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:00:16.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:00:16.369 [DEBUG] [Thread-175090] [transport.py] [_log()] userauth is OK
2026-04-11T19:00:16.369 [DEBUG] [Thread-175090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:00:16.370 [DEBUG] [Thread-175090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:00:16.370 [DEBUG] [Thread-175090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:00:16.370 [DEBUG] [Thread-175090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:00:16.392 [INFO] [Thread-175090] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:00:16.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:00:17.020 [DEBUG] [Thread-175090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:00:17.021 [DEBUG] [Thread-175090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:00:17.021 [DEBUG] [Thread-175090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:00:17.062 [DEBUG] [Thread-175090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:00:17.062 [DEBUG] [Thread-175090] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:00:17.065 [DEBUG] [Thread-175090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:00:17.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:00:17.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:00:17.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:00:17.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:00:17.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:00:17.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:00:17.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:00:17.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:00:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:00:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.708451 -999.00  +11.90  16.46     97  +11.60 1 3 1 3 1    12    0 0.33 -1.55 ----- 16.5 16.5 298.6 26.2 13.0 -0.8 12.8 -0.9 12.6 -0.9 12.9 -0.5
2026-04-11T19:00:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:00:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:00:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.708451
2026-04-11T19:00:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:00:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:00:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:00:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:00:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:00:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:00:05', tmtdew=0.07653, humidity=99.7892, cloud=0.0, wind=21.0146, temperature=12.0366, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:00:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:00:17.092 [DEBUG] [Thread-175090] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:00:17.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:00:17.182 [DEBUG] [Thread-175093] [transport.py] [_log()] starting thread (client mode): 0xb0fb52d0
2026-04-11T19:00:17.182 [DEBUG] [Thread-175093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:00:17.196 [DEBUG] [Thread-175093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:00:17.196 [INFO] [Thread-175093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] client lang: <none>
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] server lang: <none>
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] kex follows: False
2026-04-11T19:00:17.204 [DEBUG] [Thread-175093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:00:17.205 [DEBUG] [Thread-175093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:00:17.205 [DEBUG] [Thread-175093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:00:17.205 [DEBUG] [Thread-175093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:00:17.205 [DEBUG] [Thread-175093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:00:17.205 [DEBUG] [Thread-175093] [transport.py] [_log()] Compression: none
2026-04-11T19:00:17.205 [DEBUG] [Thread-175093] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:00:17.263 [DEBUG] [Thread-175093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:00:17.263 [DEBUG] [Thread-175093] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:00:17.264 [DEBUG] [Thread-175093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:00:17.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:00:17.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:00:17.319 [DEBUG] [Thread-175093] [transport.py] [_log()] userauth is OK
2026-04-11T19:00:17.319 [DEBUG] [Thread-175093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:00:17.319 [DEBUG] [Thread-175093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:00:17.319 [DEBUG] [Thread-175093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:00:17.319 [DEBUG] [Thread-175093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:00:17.338 [INFO] [Thread-175093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:00:17.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:00:17.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:00:18.176 [DEBUG] [Thread-175093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:00:18.176 [DEBUG] [Thread-175093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:00:18.226 [DEBUG] [Thread-175093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:00:18.226 [DEBUG] [Thread-175093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:00:18.235 [DEBUG] [Thread-175093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:00:18.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:00:18.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-04-11T19:00:18.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:00:18.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:00:18.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:00:18.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:00:18.269 [DEBUG] [Thread-175093] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:00:23.789 [DEBUG] [Thread-175095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:28.263 [DEBUG] [Thread-175096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:43.316 [DEBUG] [Thread-175097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:00:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:00:48.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:00:48.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-04-11T19:00:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 0, 40), 0.03786, 99.6776, 0.0, 23.9587, 12.4394, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:00:49.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:00:40
2026-04-11T19:00:49.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:00:50.125 [DEBUG] [Thread-175098] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ee0
2026-04-11T19:00:50.125 [DEBUG] [Thread-175098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:00:50.140 [DEBUG] [Thread-175098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:00:50.140 [INFO] [Thread-175098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:00:50.142 [DEBUG] [Thread-175098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] client lang: <none>
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] server lang: <none>
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] kex follows: False
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] Compression: none
2026-04-11T19:00:50.143 [DEBUG] [Thread-175098] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:00:50.159 [DEBUG] [Thread-175098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:00:50.160 [DEBUG] [Thread-175098] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:00:50.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:00:50.161 [DEBUG] [Thread-175098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:00:50.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:00:50.164 [DEBUG] [Thread-175098] [transport.py] [_log()] userauth is OK
2026-04-11T19:00:50.164 [DEBUG] [Thread-175098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:00:50.165 [DEBUG] [Thread-175098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:00:50.165 [DEBUG] [Thread-175098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:00:50.165 [DEBUG] [Thread-175098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:00:50.190 [INFO] [Thread-175098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:00:50.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:00:50.752 [DEBUG] [Thread-175098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:00:50.752 [DEBUG] [Thread-175098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:00:50.753 [DEBUG] [Thread-175098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:00:50.792 [DEBUG] [Thread-175098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:00:50.793 [DEBUG] [Thread-175098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:00:50.796 [DEBUG] [Thread-175098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:00:50.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:00:50.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:00:50.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:00:50.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:00:50.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:00:50.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:00:50.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:00:50.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:00:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:00:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.708799 -999.00  +11.90  21.66     97  +11.60 1 3 1 3 1    11    0 0.32 -1.78 ----- 21.7 21.7 291.4 23.6 13.0 -1.0 12.8 -0.9 12.5 -0.7 12.9 -0.5
2026-04-11T19:00:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:00:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:00:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.708799
2026-04-11T19:00:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:00:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:00:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:00:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:00:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:00:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:00:40', tmtdew=0.03786, humidity=99.6776, cloud=0.0, wind=23.9587, temperature=12.4394, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:00:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:00:50.813 [DEBUG] [Thread-175098] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:00:50.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:00:50.916 [DEBUG] [Thread-175101] [transport.py] [_log()] starting thread (client mode): 0xb0fb4370
2026-04-11T19:00:50.916 [DEBUG] [Thread-175101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:00:50.930 [DEBUG] [Thread-175101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:00:50.931 [INFO] [Thread-175101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:00:50.938 [DEBUG] [Thread-175101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:00:50.939 [DEBUG] [Thread-175101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] client lang: <none>
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] server lang: <none>
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] kex follows: False
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:00:50.940 [DEBUG] [Thread-175101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:00:50.941 [DEBUG] [Thread-175101] [transport.py] [_log()] Compression: none
2026-04-11T19:00:50.941 [DEBUG] [Thread-175101] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:00:50.997 [DEBUG] [Thread-175101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:00:50.997 [DEBUG] [Thread-175101] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:00:50.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:00:50.999 [DEBUG] [Thread-175101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:00:50.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:00:51.056 [DEBUG] [Thread-175101] [transport.py] [_log()] userauth is OK
2026-04-11T19:00:51.056 [DEBUG] [Thread-175101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:00:51.057 [DEBUG] [Thread-175101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:00:51.057 [DEBUG] [Thread-175101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:00:51.057 [DEBUG] [Thread-175101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:00:51.075 [INFO] [Thread-175101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:00:51.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:00:51.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:00:51.920 [DEBUG] [Thread-175101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:00:51.920 [DEBUG] [Thread-175101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:00:51.968 [DEBUG] [Thread-175101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:00:51.968 [DEBUG] [Thread-175101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:00:51.977 [DEBUG] [Thread-175101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:00:51.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:00:51.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-04-11T19:00:52.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-04-11T19:00:52.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:00:52.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:00:52.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:00:52.019 [DEBUG] [Thread-175101] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:00:58.356 [DEBUG] [Thread-175103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:11.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:11.131 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:13.420 [DEBUG] [Thread-175104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:22.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:01:22.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:01:22.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-04-11T19:01:23.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 1, 16), 0.018935, 99.8388, 0.0, 21.0506, 12.0031, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:01:23.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:01:16
2026-04-11T19:01:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:01:23.856 [DEBUG] [Thread-175105] [transport.py] [_log()] starting thread (client mode): 0xb0fb45e0
2026-04-11T19:01:23.857 [DEBUG] [Thread-175105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:01:23.861 [DEBUG] [Thread-175106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:23.876 [DEBUG] [Thread-175105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:01:23.876 [INFO] [Thread-175105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] client lang: <none>
2026-04-11T19:01:23.879 [DEBUG] [Thread-175105] [transport.py] [_log()] server lang: <none>
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] kex follows: False
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] Compression: none
2026-04-11T19:01:23.880 [DEBUG] [Thread-175105] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:01:23.895 [DEBUG] [Thread-175105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:01:23.896 [DEBUG] [Thread-175105] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:01:23.896 [DEBUG] [Thread-175105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:01:23.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:01:23.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:01:23.898 [DEBUG] [Thread-175105] [transport.py] [_log()] userauth is OK
2026-04-11T19:01:23.899 [DEBUG] [Thread-175105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:01:23.899 [DEBUG] [Thread-175105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:01:23.899 [DEBUG] [Thread-175105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:01:23.899 [DEBUG] [Thread-175105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:01:23.912 [INFO] [Thread-175105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:01:23.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:01:24.514 [DEBUG] [Thread-175105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:01:24.514 [DEBUG] [Thread-175105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:01:24.515 [DEBUG] [Thread-175105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:01:24.555 [DEBUG] [Thread-175105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:01:24.555 [DEBUG] [Thread-175105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:01:24.559 [DEBUG] [Thread-175105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:01:24.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:01:24.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:01:24.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:01:24.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:01:24.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:01:24.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:01:24.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:01:24.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:01:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:01:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.709146 -999.00  +12.00  19.97     97  +11.60 1 3 1 3 1    10    0 0.33 -1.54 ----- 20.0 20.0 302.4 24.1 13.0 -0.7 12.9 -0.9 12.5 -0.6 12.9 -0.5
2026-04-11T19:01:24.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:01:24.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:01:24.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.709146
2026-04-11T19:01:24.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:01:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:01:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:01:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:01:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:01:24.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:01:16', tmtdew=0.018935, humidity=99.8388, cloud=0.0, wind=21.0506, temperature=12.0031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:01:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:01:24.583 [DEBUG] [Thread-175105] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:01:24.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:01:24.676 [DEBUG] [Thread-175109] [transport.py] [_log()] starting thread (client mode): 0xb0fea470
2026-04-11T19:01:24.676 [DEBUG] [Thread-175109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:01:24.691 [DEBUG] [Thread-175109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:01:24.691 [INFO] [Thread-175109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:24.700 [DEBUG] [Thread-175109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] client lang: <none>
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] server lang: <none>
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] kex follows: False
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] Compression: none
2026-04-11T19:01:24.701 [DEBUG] [Thread-175109] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:01:24.760 [DEBUG] [Thread-175109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:01:24.760 [DEBUG] [Thread-175109] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:01:24.761 [DEBUG] [Thread-175109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:01:24.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:01:24.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:01:24.817 [DEBUG] [Thread-175109] [transport.py] [_log()] userauth is OK
2026-04-11T19:01:24.817 [DEBUG] [Thread-175109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:01:24.817 [DEBUG] [Thread-175109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:01:24.817 [DEBUG] [Thread-175109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:01:24.817 [DEBUG] [Thread-175109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:01:24.836 [INFO] [Thread-175109] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:01:24.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:01:24.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:01:25.641 [DEBUG] [Thread-175109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:01:25.641 [DEBUG] [Thread-175109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:01:25.689 [DEBUG] [Thread-175109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:01:25.689 [DEBUG] [Thread-175109] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:01:25.698 [DEBUG] [Thread-175109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:01:25.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:01:25.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-04-11T19:01:25.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-04-11T19:01:25.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:01:25.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:01:25.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:01:25.736 [DEBUG] [Thread-175109] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:01:28.458 [DEBUG] [Thread-175111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:43.511 [DEBUG] [Thread-175112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:01:55.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:01:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:01:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 1, 16), 0.018935, 99.8388, 0.0, 21.0506, 12.0031, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:01:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:01:16
2026-04-11T19:01:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:01:57.541 [DEBUG] [Thread-175113] [transport.py] [_log()] starting thread (client mode): 0xb0f56f50
2026-04-11T19:01:57.542 [DEBUG] [Thread-175113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:01:57.559 [DEBUG] [Thread-175113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:01:57.559 [INFO] [Thread-175113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:57.560 [DEBUG] [Thread-175113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] client lang: <none>
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] server lang: <none>
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] kex follows: False
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] Compression: none
2026-04-11T19:01:57.561 [DEBUG] [Thread-175113] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:01:57.572 [DEBUG] [Thread-175113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:01:57.573 [DEBUG] [Thread-175113] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:01:57.573 [DEBUG] [Thread-175113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:01:57.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:01:57.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:01:57.574 [DEBUG] [Thread-175113] [transport.py] [_log()] userauth is OK
2026-04-11T19:01:57.574 [DEBUG] [Thread-175113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:01:57.575 [DEBUG] [Thread-175113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:01:57.575 [DEBUG] [Thread-175113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:01:57.575 [DEBUG] [Thread-175113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:01:57.596 [INFO] [Thread-175113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:01:57.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:01:58.188 [DEBUG] [Thread-175113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:01:58.188 [DEBUG] [Thread-175113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:01:58.189 [DEBUG] [Thread-175113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:01:58.230 [DEBUG] [Thread-175113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:01:58.230 [DEBUG] [Thread-175113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:01:58.233 [DEBUG] [Thread-175113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:01:58.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:01:58.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:01:58.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:01:58.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:01:58.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:01:58.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:01:58.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:01:58.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:01:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:01:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.709493 -999.00  +12.00  19.71     97  +11.60 1 3 1 3 1     9    0 0.33 -1.33 ----- 19.7 19.7 295.6 24.5 13.0 -0.8 12.8 -0.8 12.5 -0.7 12.9 -0.7
2026-04-11T19:01:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:01:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:01:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.709493
2026-04-11T19:01:58.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:01:58.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:01:58.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:01:58.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:01:58.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:01:58.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:01:16', tmtdew=0.018935, humidity=99.8388, cloud=0.0, wind=21.0506, temperature=12.0031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:01:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:01:58.254 [DEBUG] [Thread-175113] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:01:58.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:01:58.347 [DEBUG] [Thread-175116] [transport.py] [_log()] starting thread (client mode): 0xb0f55ff0
2026-04-11T19:01:58.347 [DEBUG] [Thread-175116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:01:58.365 [DEBUG] [Thread-175116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:01:58.365 [INFO] [Thread-175116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:58.373 [DEBUG] [Thread-175116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] client lang: <none>
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] server lang: <none>
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] kex follows: False
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:01:58.374 [DEBUG] [Thread-175116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:01:58.375 [DEBUG] [Thread-175116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:01:58.375 [DEBUG] [Thread-175116] [transport.py] [_log()] Compression: none
2026-04-11T19:01:58.375 [DEBUG] [Thread-175116] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:01:58.434 [DEBUG] [Thread-175116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:01:58.434 [DEBUG] [Thread-175116] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:01:58.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:01:58.436 [DEBUG] [Thread-175116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:01:58.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:01:58.493 [DEBUG] [Thread-175116] [transport.py] [_log()] userauth is OK
2026-04-11T19:01:58.493 [DEBUG] [Thread-175116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:01:58.494 [DEBUG] [Thread-175116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:01:58.494 [DEBUG] [Thread-175116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:01:58.494 [DEBUG] [Thread-175116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:01:58.513 [INFO] [Thread-175116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:01:58.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:01:58.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:01:58.551 [DEBUG] [Thread-175118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:01:59.344 [DEBUG] [Thread-175116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:01:59.344 [DEBUG] [Thread-175116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:01:59.392 [DEBUG] [Thread-175116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:01:59.392 [DEBUG] [Thread-175116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:01:59.401 [DEBUG] [Thread-175116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:01:59.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:01:59.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-04-11T19:01:59.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-04-11T19:01:59.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:01:59.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:01:59.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:01:59.438 [DEBUG] [Thread-175116] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:02:13.605 [DEBUG] [Thread-175119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:02:15.063 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:02:15.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:02:23.946 [DEBUG] [Thread-175120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:02:28.640 [DEBUG] [Thread-175121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:02:29.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:02:29.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:02:29.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:02:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 1, 51), 0.04279, 99.6451, 0.0, 21.3833, 12.5062, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:02:30.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:01:51
2026-04-11T19:02:31.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:02:31.311 [DEBUG] [Thread-175122] [transport.py] [_log()] starting thread (client mode): 0xb0feb280
2026-04-11T19:02:31.311 [DEBUG] [Thread-175122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:02:31.331 [DEBUG] [Thread-175122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:02:31.331 [INFO] [Thread-175122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:02:31.333 [DEBUG] [Thread-175122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] client lang: <none>
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] server lang: <none>
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] kex follows: False
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] Compression: none
2026-04-11T19:02:31.334 [DEBUG] [Thread-175122] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:02:31.349 [DEBUG] [Thread-175122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:02:31.349 [DEBUG] [Thread-175122] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:02:31.349 [DEBUG] [Thread-175122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:02:31.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:02:31.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:02:31.350 [DEBUG] [Thread-175122] [transport.py] [_log()] userauth is OK
2026-04-11T19:02:31.350 [DEBUG] [Thread-175122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:02:31.350 [DEBUG] [Thread-175122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:02:31.350 [DEBUG] [Thread-175122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:02:31.351 [DEBUG] [Thread-175122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:02:31.361 [INFO] [Thread-175122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:02:31.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:02:31.954 [DEBUG] [Thread-175122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:02:31.954 [DEBUG] [Thread-175122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:02:31.954 [DEBUG] [Thread-175122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:02:31.996 [DEBUG] [Thread-175122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:02:31.996 [DEBUG] [Thread-175122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:02:31.999 [DEBUG] [Thread-175122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:02:32.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:02:32.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:02:32.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:02:32.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:02:32.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:02:32.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:02:32.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.709841 -999.00  +12.00  19.31     97  +11.60 1 3 1 3 1     8    0 0.35 -1.06 ----- 19.3 19.3 301.0 22.0 13.0 -0.7 12.9 -0.8 12.5 -0.9 12.9 -0.5
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.709841
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:02:32.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:01:51', tmtdew=0.04279, humidity=99.6451, cloud=0.0, wind=21.3833, temperature=12.5062, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:02:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:02:32.021 [DEBUG] [Thread-175122] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:02:32.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:02:32.112 [DEBUG] [Thread-175125] [transport.py] [_log()] starting thread (client mode): 0xb0fea650
2026-04-11T19:02:32.112 [DEBUG] [Thread-175125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:02:32.127 [DEBUG] [Thread-175125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:02:32.127 [INFO] [Thread-175125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:02:32.134 [DEBUG] [Thread-175125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] client lang: <none>
2026-04-11T19:02:32.135 [DEBUG] [Thread-175125] [transport.py] [_log()] server lang: <none>
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] kex follows: False
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] Compression: none
2026-04-11T19:02:32.136 [DEBUG] [Thread-175125] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:02:32.197 [DEBUG] [Thread-175125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:02:32.198 [DEBUG] [Thread-175125] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:02:32.198 [DEBUG] [Thread-175125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:02:32.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:02:32.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:02:32.261 [DEBUG] [Thread-175125] [transport.py] [_log()] userauth is OK
2026-04-11T19:02:32.261 [DEBUG] [Thread-175125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:02:32.261 [DEBUG] [Thread-175125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:02:32.261 [DEBUG] [Thread-175125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:02:32.261 [DEBUG] [Thread-175125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:02:32.281 [INFO] [Thread-175125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:02:32.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:02:32.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:02:33.108 [DEBUG] [Thread-175125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:02:33.108 [DEBUG] [Thread-175125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:02:33.155 [DEBUG] [Thread-175125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:02:33.155 [DEBUG] [Thread-175125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:02:33.164 [DEBUG] [Thread-175125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:02:33.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:02:33.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-04-11T19:02:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:02:33.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:02:33.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:02:33.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:02:33.197 [DEBUG] [Thread-175125] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:02:43.676 [DEBUG] [Thread-175127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:02:58.727 [DEBUG] [Thread-175128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:03:03.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:03:03.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-04-11T19:03:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 2, 27), 0.071395, 99.8225, 0.0, 20.5736, 12.1031, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:03:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:02:27
2026-04-11T19:03:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:03:05.090 [DEBUG] [Thread-175129] [transport.py] [_log()] starting thread (client mode): 0xb0fb4850
2026-04-11T19:03:05.090 [DEBUG] [Thread-175129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:03:05.109 [DEBUG] [Thread-175129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:03:05.109 [INFO] [Thread-175129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:03:05.115 [DEBUG] [Thread-175129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:03:05.115 [DEBUG] [Thread-175129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:03:05.115 [DEBUG] [Thread-175129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:03:05.115 [DEBUG] [Thread-175129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] client lang: <none>
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] server lang: <none>
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] kex follows: False
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:03:05.116 [DEBUG] [Thread-175129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:03:05.117 [DEBUG] [Thread-175129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:03:05.117 [DEBUG] [Thread-175129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:03:05.117 [DEBUG] [Thread-175129] [transport.py] [_log()] Compression: none
2026-04-11T19:03:05.117 [DEBUG] [Thread-175129] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:03:05.130 [DEBUG] [Thread-175129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:03:05.131 [DEBUG] [Thread-175129] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:03:05.132 [DEBUG] [Thread-175129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:03:05.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:03:05.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:03:05.134 [DEBUG] [Thread-175129] [transport.py] [_log()] userauth is OK
2026-04-11T19:03:05.135 [DEBUG] [Thread-175129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:03:05.135 [DEBUG] [Thread-175129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:03:05.135 [DEBUG] [Thread-175129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:03:05.135 [DEBUG] [Thread-175129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:03:05.150 [INFO] [Thread-175129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:03:05.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:03:05.714 [DEBUG] [Thread-175129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:03:05.714 [DEBUG] [Thread-175129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:03:05.715 [DEBUG] [Thread-175129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:03:05.755 [DEBUG] [Thread-175129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:03:05.756 [DEBUG] [Thread-175129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:03:05.759 [DEBUG] [Thread-175129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:03:05.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:03:05.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:03:05.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:03:05.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:03:05.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:03:05.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:03:05.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:03:05.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:03:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:03:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.710188 -999.00  +11.90  15.74     97  +11.60 1 3 1 3 1     7    0 0.34 -1.30 ----- 15.7 15.7 294.8 23.3 13.0 -0.6 12.8 -0.8 12.6 -0.6 12.9 -0.4
2026-04-11T19:03:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.710188
2026-04-11T19:03:05.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:03:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:03:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:03:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:03:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:03:05.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:02:27', tmtdew=0.071395, humidity=99.8225, cloud=0.0, wind=20.5736, temperature=12.1031, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:02:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:03:05.793 [DEBUG] [Thread-175129] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:03:05.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:03:05.899 [DEBUG] [Thread-175132] [transport.py] [_log()] starting thread (client mode): 0xb0f56da0
2026-04-11T19:03:05.899 [DEBUG] [Thread-175132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:03:05.914 [DEBUG] [Thread-175132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:03:05.914 [INFO] [Thread-175132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] client lang: <none>
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] server lang: <none>
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] kex follows: False
2026-04-11T19:03:05.925 [DEBUG] [Thread-175132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:03:05.926 [DEBUG] [Thread-175132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:03:05.926 [DEBUG] [Thread-175132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:03:05.926 [DEBUG] [Thread-175132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:03:05.926 [DEBUG] [Thread-175132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:03:05.926 [DEBUG] [Thread-175132] [transport.py] [_log()] Compression: none
2026-04-11T19:03:05.926 [DEBUG] [Thread-175132] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:03:05.987 [DEBUG] [Thread-175132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:03:05.987 [DEBUG] [Thread-175132] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:03:05.988 [DEBUG] [Thread-175132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:03:05.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:03:05.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:03:06.046 [DEBUG] [Thread-175132] [transport.py] [_log()] userauth is OK
2026-04-11T19:03:06.046 [DEBUG] [Thread-175132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:03:06.046 [DEBUG] [Thread-175132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:03:06.046 [DEBUG] [Thread-175132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:03:06.046 [DEBUG] [Thread-175132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:03:06.064 [INFO] [Thread-175132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:03:06.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:03:06.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:03:06.914 [DEBUG] [Thread-175132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:03:06.914 [DEBUG] [Thread-175132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:03:06.965 [DEBUG] [Thread-175132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:03:06.965 [DEBUG] [Thread-175132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:03:06.974 [DEBUG] [Thread-175132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:03:06.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:03: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')
2026-04-11T19:03:06.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-04-11T19:03:07.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:03:07.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:03:07.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:03:07.011 [DEBUG] [Thread-175132] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:03:13.767 [DEBUG] [Thread-175134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:19.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:19.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:24.021 [DEBUG] [Thread-175135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:28.822 [DEBUG] [Thread-175136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:37.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:03:37.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:03:37.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-04-11T19:03:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 3, 2), 0.071435, 99.8224, 0.0, 20.9794, 12.0698, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:03:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:03:02
2026-04-11T19:03:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:03:38.857 [DEBUG] [Thread-175137] [transport.py] [_log()] starting thread (client mode): 0xae516cb0
2026-04-11T19:03:38.857 [DEBUG] [Thread-175137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:03:38.878 [DEBUG] [Thread-175137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:03:38.878 [INFO] [Thread-175137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:03:38.879 [DEBUG] [Thread-175137] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:03:38.879 [DEBUG] [Thread-175137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:03:38.879 [DEBUG] [Thread-175137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:03:38.879 [DEBUG] [Thread-175137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:38.879 [DEBUG] [Thread-175137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:38.879 [DEBUG] [Thread-175137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] client lang: <none>
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] server lang: <none>
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] kex follows: False
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] Compression: none
2026-04-11T19:03:38.880 [DEBUG] [Thread-175137] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:03:38.892 [DEBUG] [Thread-175137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:03:38.893 [DEBUG] [Thread-175137] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:03:38.893 [DEBUG] [Thread-175137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:03:38.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:03:38.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:03:38.902 [DEBUG] [Thread-175137] [transport.py] [_log()] userauth is OK
2026-04-11T19:03:38.902 [DEBUG] [Thread-175137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:03:38.902 [DEBUG] [Thread-175137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:03:38.902 [DEBUG] [Thread-175137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:03:38.902 [DEBUG] [Thread-175137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:03:38.927 [INFO] [Thread-175137] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:03:38.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:03:39.540 [DEBUG] [Thread-175137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:03:39.540 [DEBUG] [Thread-175137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:03:39.540 [DEBUG] [Thread-175137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:03:39.581 [DEBUG] [Thread-175137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:03:39.581 [DEBUG] [Thread-175137] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:03:39.585 [DEBUG] [Thread-175137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:03:39.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:03:39.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:03:39.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:03:39.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:03:39.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:03:39.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:03:39.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:03:39.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:03:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:03:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.710535 -999.00  +12.00  20.34     97  +11.60 1 3 1 3 1     6    0 0.34 -1.15 ----- 20.3 20.3 299.6 25.1 13.0 -0.5 12.8 -0.7 12.6 -0.6 12.9 -0.4
2026-04-11T19:03:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:03:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:03:39.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.710535
2026-04-11T19:03:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:03:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:03:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:03:39.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:03:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:03:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:03:02', tmtdew=0.071435, humidity=99.8224, cloud=0.0, wind=20.9794, temperature=12.0698, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:03:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:03:39.613 [DEBUG] [Thread-175137] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:03:39.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:03:39.719 [DEBUG] [Thread-175140] [transport.py] [_log()] starting thread (client mode): 0xae515a50
2026-04-11T19:03:39.719 [DEBUG] [Thread-175140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:03:39.734 [DEBUG] [Thread-175140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:03:39.735 [INFO] [Thread-175140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:03:39.742 [DEBUG] [Thread-175140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:03:39.742 [DEBUG] [Thread-175140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:03:39.742 [DEBUG] [Thread-175140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:03:39.742 [DEBUG] [Thread-175140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] client lang: <none>
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] server lang: <none>
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] kex follows: False
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] Compression: none
2026-04-11T19:03:39.743 [DEBUG] [Thread-175140] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:03:39.802 [DEBUG] [Thread-175140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:03:39.803 [DEBUG] [Thread-175140] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:03:39.804 [DEBUG] [Thread-175140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:03:39.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:03:39.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:03:39.858 [DEBUG] [Thread-175140] [transport.py] [_log()] userauth is OK
2026-04-11T19:03:39.859 [DEBUG] [Thread-175140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:03:39.859 [DEBUG] [Thread-175140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:03:39.859 [DEBUG] [Thread-175140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:03:39.859 [DEBUG] [Thread-175140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:03:39.878 [INFO] [Thread-175140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:03:39.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:03:39.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:03:40.708 [DEBUG] [Thread-175140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:03:40.709 [DEBUG] [Thread-175140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:03:40.757 [DEBUG] [Thread-175140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:03:40.757 [DEBUG] [Thread-175140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:03:40.766 [DEBUG] [Thread-175140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:03:40.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:03:40.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-04-11T19:03:40.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:03:40.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:03:40.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:03:40.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:03:40.803 [DEBUG] [Thread-175140] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:03:43.859 [DEBUG] [Thread-175142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:03:58.922 [DEBUG] [Thread-175143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:10.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:04:10.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:04:10.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:04:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 3, 38), 0.03775, 99.6779, 0.0, 23.0767, 12.5391, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:04:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:03:38
2026-04-11T19:04:12.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:04:12.692 [DEBUG] [Thread-175144] [transport.py] [_log()] starting thread (client mode): 0xae517400
2026-04-11T19:04:12.692 [DEBUG] [Thread-175144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:04:12.715 [DEBUG] [Thread-175144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:04:12.715 [INFO] [Thread-175144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:04:12.717 [DEBUG] [Thread-175144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] client lang: <none>
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] server lang: <none>
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] kex follows: False
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] Compression: none
2026-04-11T19:04:12.718 [DEBUG] [Thread-175144] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:04:12.730 [DEBUG] [Thread-175144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:04:12.731 [DEBUG] [Thread-175144] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:04:12.731 [DEBUG] [Thread-175144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:04:12.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:04:12.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:04:12.734 [DEBUG] [Thread-175144] [transport.py] [_log()] userauth is OK
2026-04-11T19:04:12.734 [DEBUG] [Thread-175144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:04:12.734 [DEBUG] [Thread-175144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:04:12.734 [DEBUG] [Thread-175144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:04:12.734 [DEBUG] [Thread-175144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:04:12.759 [INFO] [Thread-175144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:04:12.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:04:13.364 [DEBUG] [Thread-175144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:04:13.365 [DEBUG] [Thread-175144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:04:13.365 [DEBUG] [Thread-175144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:04:13.405 [DEBUG] [Thread-175144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:04:13.405 [DEBUG] [Thread-175144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:04:13.409 [DEBUG] [Thread-175144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:04:13.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:04:13.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:04:13.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:04:13.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:04:13.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:04:13.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:04:13.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:04:13.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:04:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:04:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.710883 -999.00  +12.00  19.41     97  +11.70 1 3 1 3 1     6    0 0.33 -1.36 ----- 19.4 19.4 302.6 25.4 -999.0 -999.0 12.9 -0.7 12.6 -0.6 12.9 -0.4
2026-04-11T19:04:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:04:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:04:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.710883
2026-04-11T19:04:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:04:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:04:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:04:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:04:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:04:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:03:38', tmtdew=0.03775, humidity=99.6779, cloud=0.0, wind=23.0767, temperature=12.5391, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:03:40.291', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:04:13.438 [DEBUG] [Thread-175144] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:04:13.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:04:13.530 [DEBUG] [Thread-175147] [transport.py] [_log()] starting thread (client mode): 0xae5a6fb0
2026-04-11T19:04:13.530 [DEBUG] [Thread-175147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:04:13.545 [DEBUG] [Thread-175147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:04:13.545 [INFO] [Thread-175147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:13.553 [DEBUG] [Thread-175147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] client lang: <none>
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] server lang: <none>
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] kex follows: False
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] Compression: none
2026-04-11T19:04:13.554 [DEBUG] [Thread-175147] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:04:13.611 [DEBUG] [Thread-175147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:04:13.611 [DEBUG] [Thread-175147] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:04:13.612 [DEBUG] [Thread-175147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:04:13.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:04:13.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:04:13.667 [DEBUG] [Thread-175147] [transport.py] [_log()] userauth is OK
2026-04-11T19:04:13.667 [DEBUG] [Thread-175147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:04:13.667 [DEBUG] [Thread-175147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:04:13.667 [DEBUG] [Thread-175147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:04:13.667 [DEBUG] [Thread-175147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:04:13.686 [INFO] [Thread-175147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:04:13.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:04:13.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:04:13.965 [DEBUG] [Thread-175149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:14.503 [DEBUG] [Thread-175147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:04:14.503 [DEBUG] [Thread-175147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:04:14.551 [DEBUG] [Thread-175147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:04:14.551 [DEBUG] [Thread-175147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:04:14.561 [DEBUG] [Thread-175147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:04:14.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:04:14.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:04:14.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-04-11T19:04:14.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:04:14.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:04:14.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:04:14.598 [DEBUG] [Thread-175147] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:04:24.097 [DEBUG] [Thread-175150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:25.518 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:25.519 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:29.015 [DEBUG] [Thread-175151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:44.048 [DEBUG] [Thread-175152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:04:44.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:04:44.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:04:44.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-04-11T19:04:45.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 4, 13), 0.02641, 99.7899, 0.0, 21.0154, 11.9871, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:04:45.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:04:13
2026-04-11T19:04:46.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:04:46.371 [DEBUG] [Thread-175153] [transport.py] [_log()] starting thread (client mode): 0xae515a80
2026-04-11T19:04:46.371 [DEBUG] [Thread-175153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:04:46.390 [DEBUG] [Thread-175153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:04:46.390 [INFO] [Thread-175153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] client lang: <none>
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] server lang: <none>
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] kex follows: False
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] Compression: none
2026-04-11T19:04:46.394 [DEBUG] [Thread-175153] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:04:46.412 [DEBUG] [Thread-175153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:04:46.412 [DEBUG] [Thread-175153] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:04:46.413 [DEBUG] [Thread-175153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:04:46.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:04:46.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:04:46.414 [DEBUG] [Thread-175153] [transport.py] [_log()] userauth is OK
2026-04-11T19:04:46.415 [DEBUG] [Thread-175153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:04:46.415 [DEBUG] [Thread-175153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:04:46.415 [DEBUG] [Thread-175153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:04:46.415 [DEBUG] [Thread-175153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:04:46.440 [INFO] [Thread-175153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:04:46.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:04:47.096 [DEBUG] [Thread-175153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:04:47.096 [DEBUG] [Thread-175153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:04:47.096 [DEBUG] [Thread-175153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:04:47.138 [DEBUG] [Thread-175153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:04:47.138 [DEBUG] [Thread-175153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:04:47.142 [DEBUG] [Thread-175153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:04:47.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:04:47.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:04:47.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:04:47.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:04:47.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:04:47.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:04:47.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:04:47.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:04:47.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:04:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.711577 -999.00  +11.90  22.10     97  +11.50 1 3 1 3 1     4    0 0.34 -1.27 ----- 22.1 22.1 298.0 27.1 13.1 -0.6 12.9 -1.0 12.5 -0.6 12.9 -0.5
2026-04-11T19:04:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:04:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:04:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.711577
2026-04-11T19:04:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:04:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:04:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:04:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:04:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:04:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:04:13', tmtdew=0.02641, humidity=99.7899, cloud=0.0, wind=21.0154, temperature=11.9871, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:04:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:04:47.174 [DEBUG] [Thread-175153] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:04:47.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:04:47.267 [DEBUG] [Thread-175156] [transport.py] [_log()] starting thread (client mode): 0xb0fb66e0
2026-04-11T19:04:47.267 [DEBUG] [Thread-175156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:04:47.283 [DEBUG] [Thread-175156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:04:47.283 [INFO] [Thread-175156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:04:47.290 [DEBUG] [Thread-175156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:04:47.290 [DEBUG] [Thread-175156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] client lang: <none>
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] server lang: <none>
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] kex follows: False
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] Compression: none
2026-04-11T19:04:47.291 [DEBUG] [Thread-175156] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:04:47.352 [DEBUG] [Thread-175156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:04:47.352 [DEBUG] [Thread-175156] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:04:47.353 [DEBUG] [Thread-175156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:04:47.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:04:47.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:04:47.408 [DEBUG] [Thread-175156] [transport.py] [_log()] userauth is OK
2026-04-11T19:04:47.408 [DEBUG] [Thread-175156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:04:47.408 [DEBUG] [Thread-175156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:04:47.408 [DEBUG] [Thread-175156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:04:47.408 [DEBUG] [Thread-175156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:04:47.427 [INFO] [Thread-175156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:04:47.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:04:47.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:04:48.255 [DEBUG] [Thread-175156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:04:48.255 [DEBUG] [Thread-175156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:04:48.303 [DEBUG] [Thread-175156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:04:48.303 [DEBUG] [Thread-175156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:04:48.312 [DEBUG] [Thread-175156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:04:48.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:04:48.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:04:48.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-04-11T19:04:48.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:04:48.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:04:48.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:04:48.350 [DEBUG] [Thread-175156] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:04:59.090 [DEBUG] [Thread-175158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:14.151 [DEBUG] [Thread-175159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:05:18.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:05:18.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-04-11T19:05:19.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 4, 49), 0.03737, 99.6805, 0.0, 23.359, 12.5075, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:05:19.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:04:49
2026-04-11T19:05:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:05:20.164 [DEBUG] [Thread-175160] [transport.py] [_log()] starting thread (client mode): 0xae5082b0
2026-04-11T19:05:20.164 [DEBUG] [Thread-175160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:05:20.184 [DEBUG] [Thread-175160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:05:20.184 [INFO] [Thread-175160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:05:20.187 [DEBUG] [Thread-175160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:05:20.187 [DEBUG] [Thread-175160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:05:20.187 [DEBUG] [Thread-175160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:05:20.187 [DEBUG] [Thread-175160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:20.187 [DEBUG] [Thread-175160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] client lang: <none>
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] server lang: <none>
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] kex follows: False
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] Compression: none
2026-04-11T19:05:20.188 [DEBUG] [Thread-175160] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:05:20.205 [DEBUG] [Thread-175160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:05:20.205 [DEBUG] [Thread-175160] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:05:20.206 [DEBUG] [Thread-175160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:05:20.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:05:20.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:05:20.208 [DEBUG] [Thread-175160] [transport.py] [_log()] userauth is OK
2026-04-11T19:05:20.208 [DEBUG] [Thread-175160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:05:20.208 [DEBUG] [Thread-175160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:05:20.209 [DEBUG] [Thread-175160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:05:20.209 [DEBUG] [Thread-175160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:05:20.231 [INFO] [Thread-175160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:05:20.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:05:20.830 [DEBUG] [Thread-175160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:05:20.830 [DEBUG] [Thread-175160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:05:20.830 [DEBUG] [Thread-175160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:05:20.871 [DEBUG] [Thread-175160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:05:20.871 [DEBUG] [Thread-175160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:05:20.875 [DEBUG] [Thread-175160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:05:20.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:05:20.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:05:20.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:05:20.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:05:20.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:05:20.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:05:20.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:05:20.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:05:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:05:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.711923 -999.00  +11.90  22.33     97  +11.50 1 3 1 3 1     4    0 0.34 -0.98 ----- 22.3 22.3 297.2 25.4 13.1 -0.6 12.8 -0.8 12.6 -0.4 12.9 -0.6
2026-04-11T19:05:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:05:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:05:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.711923
2026-04-11T19:05:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:05:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:05:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:05:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:05:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:05:20.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:04:49', tmtdew=0.03737, humidity=99.6805, cloud=0.0, wind=23.359, temperature=12.5075, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:05:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:05:20.898 [DEBUG] [Thread-175160] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:05:20.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:05:20.993 [DEBUG] [Thread-175163] [transport.py] [_log()] starting thread (client mode): 0xae509870
2026-04-11T19:05:20.993 [DEBUG] [Thread-175163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:05:21.012 [DEBUG] [Thread-175163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:05:21.012 [INFO] [Thread-175163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:05:21.019 [DEBUG] [Thread-175163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:05:21.020 [DEBUG] [Thread-175163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:05:21.020 [DEBUG] [Thread-175163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:05:21.020 [DEBUG] [Thread-175163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:21.020 [DEBUG] [Thread-175163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:21.020 [DEBUG] [Thread-175163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:21.020 [DEBUG] [Thread-175163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] client lang: <none>
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] server lang: <none>
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] kex follows: False
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:05:21.021 [DEBUG] [Thread-175163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:05:21.022 [DEBUG] [Thread-175163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:05:21.022 [DEBUG] [Thread-175163] [transport.py] [_log()] Compression: none
2026-04-11T19:05:21.022 [DEBUG] [Thread-175163] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:05:21.081 [DEBUG] [Thread-175163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:05:21.081 [DEBUG] [Thread-175163] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:05:21.082 [DEBUG] [Thread-175163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:05:21.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:05:21.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:05:21.140 [DEBUG] [Thread-175163] [transport.py] [_log()] userauth is OK
2026-04-11T19:05:21.140 [DEBUG] [Thread-175163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:05:21.141 [DEBUG] [Thread-175163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:05:21.141 [DEBUG] [Thread-175163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:05:21.141 [DEBUG] [Thread-175163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:05:21.160 [INFO] [Thread-175163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:05:21.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:05:21.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:05:21.981 [DEBUG] [Thread-175163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:05:21.981 [DEBUG] [Thread-175163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:05:22.029 [DEBUG] [Thread-175163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:05:22.030 [DEBUG] [Thread-175163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:05:22.039 [DEBUG] [Thread-175163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:05:22.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:05:22.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-04-11T19:05:22.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-04-11T19:05:22.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:05:22.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:05:22.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:05:22.084 [DEBUG] [Thread-175163] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:05:24.167 [DEBUG] [Thread-175165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:29.189 [DEBUG] [Thread-175166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:30.097 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:30.098 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:44.242 [DEBUG] [Thread-175167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:05:52.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:05:52.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:05:52.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-04-11T19:05:53.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 5, 24), 0.066155, 99.8568, 0.0, 22.9205, 12.1038, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:05:53.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:05:24
2026-04-11T19:05:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:05:53.886 [DEBUG] [Thread-175168] [transport.py] [_log()] starting thread (client mode): 0xb0fb5a50
2026-04-11T19:05:53.886 [DEBUG] [Thread-175168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:05:53.906 [DEBUG] [Thread-175168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:05:53.906 [INFO] [Thread-175168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:53.909 [DEBUG] [Thread-175168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] client lang: <none>
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] server lang: <none>
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] kex follows: False
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] Compression: none
2026-04-11T19:05:53.910 [DEBUG] [Thread-175168] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:05:53.931 [DEBUG] [Thread-175168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:05:53.932 [DEBUG] [Thread-175168] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:05:53.932 [DEBUG] [Thread-175168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:05:53.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:05:53.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:05:53.936 [DEBUG] [Thread-175168] [transport.py] [_log()] userauth is OK
2026-04-11T19:05:53.937 [DEBUG] [Thread-175168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:05:53.937 [DEBUG] [Thread-175168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:05:53.937 [DEBUG] [Thread-175168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:05:53.937 [DEBUG] [Thread-175168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:05:53.962 [INFO] [Thread-175168] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:05:53.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:05:54.621 [DEBUG] [Thread-175168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:05:54.622 [DEBUG] [Thread-175168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:05:54.622 [DEBUG] [Thread-175168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:05:54.665 [DEBUG] [Thread-175168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:05:54.665 [DEBUG] [Thread-175168] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:05:54.670 [DEBUG] [Thread-175168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:05:54.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:05:54.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:05:54.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:05:54.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:05:54.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:05:54.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:05:54.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:05:54.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:05:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:05:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.712271 -999.00  +11.90  19.30     97  +11.50 1 3 1 3 1     3    0 0.35 -0.74 ----- 19.3 19.3 298.2 24.3 13.0 -0.6 12.8 -0.9 12.5 -0.5 12.9 -0.4
2026-04-11T19:05:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:05:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:05:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.712271
2026-04-11T19:05:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:05:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:05:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:05:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:05:54.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:05:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:05:24', tmtdew=0.066155, humidity=99.8568, cloud=0.0, wind=22.9205, temperature=12.1038, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:05:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:05:54.707 [DEBUG] [Thread-175168] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:05:54.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:05:54.798 [DEBUG] [Thread-175171] [transport.py] [_log()] starting thread (client mode): 0xae517d30
2026-04-11T19:05:54.798 [DEBUG] [Thread-175171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:05:54.814 [DEBUG] [Thread-175171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:05:54.814 [INFO] [Thread-175171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:05:54.822 [DEBUG] [Thread-175171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:05:54.822 [DEBUG] [Thread-175171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:05:54.822 [DEBUG] [Thread-175171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:05:54.822 [DEBUG] [Thread-175171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:54.822 [DEBUG] [Thread-175171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:05:54.822 [DEBUG] [Thread-175171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] client lang: <none>
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] server lang: <none>
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] kex follows: False
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] Compression: none
2026-04-11T19:05:54.823 [DEBUG] [Thread-175171] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:05:54.879 [DEBUG] [Thread-175171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:05:54.879 [DEBUG] [Thread-175171] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:05:54.879 [DEBUG] [Thread-175171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:05:54.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:05:54.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:05:54.937 [DEBUG] [Thread-175171] [transport.py] [_log()] userauth is OK
2026-04-11T19:05:54.937 [DEBUG] [Thread-175171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:05:54.937 [DEBUG] [Thread-175171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:05:54.937 [DEBUG] [Thread-175171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:05:54.937 [DEBUG] [Thread-175171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:05:54.956 [INFO] [Thread-175171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:05:54.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:05:54.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:05:55.829 [DEBUG] [Thread-175171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:05:55.829 [DEBUG] [Thread-175171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:05:55.877 [DEBUG] [Thread-175171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:05:55.877 [DEBUG] [Thread-175171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:05:55.887 [DEBUG] [Thread-175171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:05:55.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:05:55.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-04-11T19:05:55.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-04-11T19:05:55.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:05:55.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:05:55.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:05:55.921 [DEBUG] [Thread-175171] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:05:59.280 [DEBUG] [Thread-175173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:14.323 [DEBUG] [Thread-175174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:24.257 [DEBUG] [Thread-175175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:06:25.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:06:25.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-04-11T19:06:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 5, 24), 0.066155, 99.8568, 0.0, 22.9205, 12.0538, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:06:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:05:24
2026-04-11T19:06:27.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:06:27.940 [DEBUG] [Thread-175176] [transport.py] [_log()] starting thread (client mode): 0xae5a6bc0
2026-04-11T19:06:27.940 [DEBUG] [Thread-175176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:06:27.961 [DEBUG] [Thread-175176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:06:27.961 [INFO] [Thread-175176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] client lang: <none>
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] server lang: <none>
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] kex follows: False
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] Compression: none
2026-04-11T19:06:27.965 [DEBUG] [Thread-175176] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:06:27.982 [DEBUG] [Thread-175176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:06:27.983 [DEBUG] [Thread-175176] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:06:27.983 [DEBUG] [Thread-175176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:06:27.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:06:27.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:06:27.985 [DEBUG] [Thread-175176] [transport.py] [_log()] userauth is OK
2026-04-11T19:06:27.986 [DEBUG] [Thread-175176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:06:27.986 [DEBUG] [Thread-175176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:06:27.986 [DEBUG] [Thread-175176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:06:27.986 [DEBUG] [Thread-175176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:06:28.001 [INFO] [Thread-175176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:06:28.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:06:28.632 [DEBUG] [Thread-175176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:06:28.632 [DEBUG] [Thread-175176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:06:28.633 [DEBUG] [Thread-175176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:06:28.673 [DEBUG] [Thread-175176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:06:28.673 [DEBUG] [Thread-175176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:06:28.677 [DEBUG] [Thread-175176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:06:28.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:06:28.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:06:28.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:06:28.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:06:28.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:06:28.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:06:28.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:06:28.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:06:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:06:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.712618 -999.00  +12.00  20.30     97  +11.60 1 3 1 3 1     3    0 0.35 -0.72 ----- 20.3 20.3 296.8 23.2 13.0 -0.5 12.9 -0.9 12.5 -0.2 12.9 -0.5
2026-04-11T19:06:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:06:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:06:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.712618
2026-04-11T19:06:28.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:06:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:06:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:06:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:06:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:06:28.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:05:24', tmtdew=0.066155, humidity=99.8568, cloud=0.0, wind=22.9205, temperature=12.0538, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:06:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:06:28.699 [DEBUG] [Thread-175176] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:06:28.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:06:28.797 [DEBUG] [Thread-175179] [transport.py] [_log()] starting thread (client mode): 0xb0fb7dc0
2026-04-11T19:06:28.797 [DEBUG] [Thread-175179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:06:28.811 [DEBUG] [Thread-175179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:06:28.811 [INFO] [Thread-175179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] client lang: <none>
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] server lang: <none>
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] kex follows: False
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:06:28.819 [DEBUG] [Thread-175179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:06:28.820 [DEBUG] [Thread-175179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:06:28.820 [DEBUG] [Thread-175179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:06:28.820 [DEBUG] [Thread-175179] [transport.py] [_log()] Compression: none
2026-04-11T19:06:28.820 [DEBUG] [Thread-175179] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:06:28.877 [DEBUG] [Thread-175179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:06:28.877 [DEBUG] [Thread-175179] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:06:28.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:06:28.878 [DEBUG] [Thread-175179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:06:28.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:06:28.933 [DEBUG] [Thread-175179] [transport.py] [_log()] userauth is OK
2026-04-11T19:06:28.933 [DEBUG] [Thread-175179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:06:28.933 [DEBUG] [Thread-175179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:06:28.933 [DEBUG] [Thread-175179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:06:28.933 [DEBUG] [Thread-175179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:06:28.957 [INFO] [Thread-175179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:06:28.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:06:28.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:06:29.362 [DEBUG] [Thread-175181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:29.775 [DEBUG] [Thread-175179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:06:29.775 [DEBUG] [Thread-175179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:06:29.823 [DEBUG] [Thread-175179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:06:29.824 [DEBUG] [Thread-175179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:06:29.833 [DEBUG] [Thread-175179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:06:29.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:06: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-04-11T19:06:29.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:06:29.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:06:29.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:06:29.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:06:29.869 [DEBUG] [Thread-175179] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:06:34.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:34.119 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:44.419 [DEBUG] [Thread-175182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:59.461 [DEBUG] [Thread-175183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:06:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:06:59.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:06:59.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-04-11T19:07:01.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 6, 35), 0.02722, 99.7468, 0.0, 22.477, 12.5407, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:07:01.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:06:35
2026-04-11T19:07:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:07:01.673 [DEBUG] [Thread-175184] [transport.py] [_log()] starting thread (client mode): 0xb0fb4bb0
2026-04-11T19:07:01.673 [DEBUG] [Thread-175184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:07:01.693 [DEBUG] [Thread-175184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:07:01.693 [INFO] [Thread-175184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:07:01.696 [DEBUG] [Thread-175184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] client lang: <none>
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] server lang: <none>
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] kex follows: False
2026-04-11T19:07:01.697 [DEBUG] [Thread-175184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:07:01.698 [DEBUG] [Thread-175184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:07:01.698 [DEBUG] [Thread-175184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:07:01.698 [DEBUG] [Thread-175184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:07:01.698 [DEBUG] [Thread-175184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:07:01.698 [DEBUG] [Thread-175184] [transport.py] [_log()] Compression: none
2026-04-11T19:07:01.698 [DEBUG] [Thread-175184] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:07:01.718 [DEBUG] [Thread-175184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:07:01.718 [DEBUG] [Thread-175184] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:07:01.719 [DEBUG] [Thread-175184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:07:01.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:07:01.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:07:01.721 [DEBUG] [Thread-175184] [transport.py] [_log()] userauth is OK
2026-04-11T19:07:01.721 [DEBUG] [Thread-175184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:07:01.721 [DEBUG] [Thread-175184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:07:01.721 [DEBUG] [Thread-175184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:07:01.721 [DEBUG] [Thread-175184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:07:01.747 [INFO] [Thread-175184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:07:01.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:07:02.389 [DEBUG] [Thread-175184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:07:02.389 [DEBUG] [Thread-175184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:07:02.390 [DEBUG] [Thread-175184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:07:02.430 [DEBUG] [Thread-175184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:07:02.430 [DEBUG] [Thread-175184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:07:02.434 [DEBUG] [Thread-175184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:07:02.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:07:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:07:02.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:07:02.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:07:02.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:07:02.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:07:02.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:07:02.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:07:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:07:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.712965 -999.00  +11.90  24.56     97  +11.60 1 3 1 3 1     3    0 0.35 -0.79 ----- 24.6 24.6 297.8 24.9 13.1 -0.6 12.8 -1.0 12.5 -0.5 13.0 -0.5
2026-04-11T19:07:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:07:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:07:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.712965
2026-04-11T19:07:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:07:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:07:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:07:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:07:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:07:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:06:35', tmtdew=0.02722, humidity=99.7468, cloud=0.0, wind=22.477, temperature=12.5407, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:06:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:07:02.463 [DEBUG] [Thread-175184] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:07:02.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:07:02.556 [DEBUG] [Thread-175187] [transport.py] [_log()] starting thread (client mode): 0xae5f0e50
2026-04-11T19:07:02.556 [DEBUG] [Thread-175187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:07:02.572 [DEBUG] [Thread-175187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:07:02.572 [INFO] [Thread-175187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:07:02.580 [DEBUG] [Thread-175187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:07:02.580 [DEBUG] [Thread-175187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:07:02.580 [DEBUG] [Thread-175187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] client lang: <none>
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] server lang: <none>
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] kex follows: False
2026-04-11T19:07:02.581 [DEBUG] [Thread-175187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:07:02.582 [DEBUG] [Thread-175187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:07:02.582 [DEBUG] [Thread-175187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:07:02.582 [DEBUG] [Thread-175187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:07:02.582 [DEBUG] [Thread-175187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:07:02.582 [DEBUG] [Thread-175187] [transport.py] [_log()] Compression: none
2026-04-11T19:07:02.582 [DEBUG] [Thread-175187] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:07:02.638 [DEBUG] [Thread-175187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:07:02.639 [DEBUG] [Thread-175187] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:07:02.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:07:02.640 [DEBUG] [Thread-175187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:07:02.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:07:02.697 [DEBUG] [Thread-175187] [transport.py] [_log()] userauth is OK
2026-04-11T19:07:02.698 [DEBUG] [Thread-175187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:07:02.698 [DEBUG] [Thread-175187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:07:02.699 [DEBUG] [Thread-175187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:07:02.699 [DEBUG] [Thread-175187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:07:02.719 [INFO] [Thread-175187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:07:02.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:07:02.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:07:03.581 [DEBUG] [Thread-175187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:07:03.581 [DEBUG] [Thread-175187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:07:03.629 [DEBUG] [Thread-175187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:07:03.629 [DEBUG] [Thread-175187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:07:03.639 [DEBUG] [Thread-175187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:07:03.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:07:03.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:07:03.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:07:03.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:07:03.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:07:03.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:07:03.675 [DEBUG] [Thread-175187] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:07:14.500 [DEBUG] [Thread-175189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:07:24.344 [DEBUG] [Thread-175190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:07:29.561 [DEBUG] [Thread-175191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:07:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:07:33.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:07:33.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-04-11T19:07:34.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 7, 10), 0.06876, 99.8399, 0.0, 21.1212, 12.0204, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:07:34.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:07:10
2026-04-11T19:07:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:07:35.489 [DEBUG] [Thread-175192] [transport.py] [_log()] starting thread (client mode): 0xae5a7a60
2026-04-11T19:07:35.489 [DEBUG] [Thread-175192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:07:35.512 [DEBUG] [Thread-175192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:07:35.512 [INFO] [Thread-175192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:07:35.515 [DEBUG] [Thread-175192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] client lang: <none>
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] server lang: <none>
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] kex follows: False
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] Compression: none
2026-04-11T19:07:35.516 [DEBUG] [Thread-175192] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:07:35.534 [DEBUG] [Thread-175192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:07:35.535 [DEBUG] [Thread-175192] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:07:35.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:07:35.536 [DEBUG] [Thread-175192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:07:35.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:07:35.538 [DEBUG] [Thread-175192] [transport.py] [_log()] userauth is OK
2026-04-11T19:07:35.538 [DEBUG] [Thread-175192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:07:35.539 [DEBUG] [Thread-175192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:07:35.539 [DEBUG] [Thread-175192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:07:35.539 [DEBUG] [Thread-175192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:07:35.561 [INFO] [Thread-175192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:07:35.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:07:36.221 [DEBUG] [Thread-175192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:07:36.222 [DEBUG] [Thread-175192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:07:36.222 [DEBUG] [Thread-175192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:07:36.262 [DEBUG] [Thread-175192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:07:36.263 [DEBUG] [Thread-175192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:07:36.266 [DEBUG] [Thread-175192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:07:36.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:07:36.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:07:36.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:07:36.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:07:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:07:36.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:07:36.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:07:36.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:07:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:07:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.713313 -999.00  +11.90  21.06     97  +11.50 1 3 1 3 1     2    0 0.35 -0.64 ----- 21.1 21.1 294.6 24.1 13.0 -0.6 12.9 -0.8 12.5 -0.5 12.9 -0.5
2026-04-11T19:07:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:07:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:07:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.713313
2026-04-11T19:07:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:07:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:07:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:07:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:07:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:07:36.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:07:10', tmtdew=0.06876, humidity=99.8399, cloud=0.0, wind=21.1212, temperature=12.0204, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:07:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:07:36.294 [DEBUG] [Thread-175192] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:07:36.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:07:36.387 [DEBUG] [Thread-175195] [transport.py] [_log()] starting thread (client mode): 0xae5a5630
2026-04-11T19:07:36.387 [DEBUG] [Thread-175195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:07:36.401 [DEBUG] [Thread-175195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:07:36.401 [INFO] [Thread-175195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:07:36.409 [DEBUG] [Thread-175195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] client lang: <none>
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] server lang: <none>
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] kex follows: False
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:07:36.410 [DEBUG] [Thread-175195] [transport.py] [_log()] Compression: none
2026-04-11T19:07:36.411 [DEBUG] [Thread-175195] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:07:36.465 [DEBUG] [Thread-175195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:07:36.466 [DEBUG] [Thread-175195] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:07:36.467 [DEBUG] [Thread-175195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:07:36.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:07:36.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:07:36.522 [DEBUG] [Thread-175195] [transport.py] [_log()] userauth is OK
2026-04-11T19:07:36.522 [DEBUG] [Thread-175195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:07:36.522 [DEBUG] [Thread-175195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:07:36.522 [DEBUG] [Thread-175195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:07:36.522 [DEBUG] [Thread-175195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:07:36.547 [INFO] [Thread-175195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:07:36.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:07:36.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:07:37.368 [DEBUG] [Thread-175195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:07:37.368 [DEBUG] [Thread-175195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:07:37.416 [DEBUG] [Thread-175195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:07:37.416 [DEBUG] [Thread-175195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:07:37.425 [DEBUG] [Thread-175195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:07:37.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:07:37.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-04-11T19:07:37.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-04-11T19:07:37.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:07:37.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:07:37.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:07:37.462 [DEBUG] [Thread-175195] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:07:38.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:07:38.252 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:07:44.598 [DEBUG] [Thread-175197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:07:59.648 [DEBUG] [Thread-175198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:07.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:08:07.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:08:07.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-04-11T19:08:08.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 7, 46), 0.04257, 99.6466, 0.0, 21.348, 12.4739, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:08:08.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:07:46
2026-04-11T19:08:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:08:09.274 [DEBUG] [Thread-175199] [transport.py] [_log()] starting thread (client mode): 0xae5a7d00
2026-04-11T19:08:09.274 [DEBUG] [Thread-175199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:08:09.294 [DEBUG] [Thread-175199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:08:09.294 [INFO] [Thread-175199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:08:09.297 [DEBUG] [Thread-175199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:08:09.297 [DEBUG] [Thread-175199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] client lang: <none>
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] server lang: <none>
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] kex follows: False
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] Compression: none
2026-04-11T19:08:09.298 [DEBUG] [Thread-175199] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:08:09.318 [DEBUG] [Thread-175199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:08:09.319 [DEBUG] [Thread-175199] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:08:09.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:08:09.320 [DEBUG] [Thread-175199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:08:09.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:08:09.322 [DEBUG] [Thread-175199] [transport.py] [_log()] userauth is OK
2026-04-11T19:08:09.322 [DEBUG] [Thread-175199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:08:09.322 [DEBUG] [Thread-175199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:08:09.322 [DEBUG] [Thread-175199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:08:09.322 [DEBUG] [Thread-175199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:08:09.359 [INFO] [Thread-175199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:08:09.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:08:09.960 [DEBUG] [Thread-175199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:08:09.960 [DEBUG] [Thread-175199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:08:09.961 [DEBUG] [Thread-175199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:08:10.001 [DEBUG] [Thread-175199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:08:10.001 [DEBUG] [Thread-175199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:08:10.005 [DEBUG] [Thread-175199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:08:10.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:08:10.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:08:10.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:08:10.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:08:10.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:08:10.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:08:10.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:08:10.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:08:10.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:08:10.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.713660 -999.00  +11.90  19.66     97  +11.50 1 3 1 3 1     2    0 0.35 -0.63 ----- 19.7 19.7 294.2 25.2 13.0 -0.4 12.8 -0.9 12.6 -0.4 12.9 -0.6
2026-04-11T19:08:10.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:08:10.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:08:10.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.713660
2026-04-11T19:08:10.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:08:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:08:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:08:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:08:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:08:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:07:46', tmtdew=0.04257, humidity=99.6466, cloud=0.0, wind=21.348, temperature=12.4739, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:07:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:08:10.026 [DEBUG] [Thread-175199] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:08: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-04-11T19:08:10.118 [DEBUG] [Thread-175202] [transport.py] [_log()] starting thread (client mode): 0xae51b910
2026-04-11T19:08:10.118 [DEBUG] [Thread-175202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:08:10.133 [DEBUG] [Thread-175202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:08:10.133 [INFO] [Thread-175202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:08:10.140 [DEBUG] [Thread-175202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] client lang: <none>
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] server lang: <none>
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] kex follows: False
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] Compression: none
2026-04-11T19:08:10.141 [DEBUG] [Thread-175202] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:08:10.198 [DEBUG] [Thread-175202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:08:10.198 [DEBUG] [Thread-175202] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:08:10.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:08:10.199 [DEBUG] [Thread-175202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:08:10.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:08:10.253 [DEBUG] [Thread-175202] [transport.py] [_log()] userauth is OK
2026-04-11T19:08:10.254 [DEBUG] [Thread-175202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:08:10.254 [DEBUG] [Thread-175202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:08:10.254 [DEBUG] [Thread-175202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:08:10.254 [DEBUG] [Thread-175202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:08:10.272 [INFO] [Thread-175202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:08:10.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:08:10.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:08:11.071 [DEBUG] [Thread-175202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:08:11.072 [DEBUG] [Thread-175202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:08:11.120 [DEBUG] [Thread-175202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:08:11.120 [DEBUG] [Thread-175202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:08:11.128 [DEBUG] [Thread-175202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:08:11.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:08:11.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-04-11T19:08:11.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:08:11.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:08:11.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:08:11.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:08:11.164 [DEBUG] [Thread-175202] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:08:14.689 [DEBUG] [Thread-175204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:24.419 [DEBUG] [Thread-175205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:29.742 [DEBUG] [Thread-175206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:41.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:08:41.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:08:41.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-04-11T19:08:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 8, 21), 0.01622, 99.8565, 0.0, 21.6857, 11.987, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:08:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:08:21
2026-04-11T19:08:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:08:43.039 [DEBUG] [Thread-175207] [transport.py] [_log()] starting thread (client mode): 0xb0f56d10
2026-04-11T19:08:43.039 [DEBUG] [Thread-175207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:08:43.059 [DEBUG] [Thread-175207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:08:43.059 [INFO] [Thread-175207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:08:43.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:08:43.063 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] client lang: <none>
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] server lang: <none>
2026-04-11T19:08:43.063 [DEBUG] [Thread-175207] [transport.py] [_log()] kex follows: False
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] Compression: none
2026-04-11T19:08:43.064 [DEBUG] [Thread-175207] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:08:43.082 [DEBUG] [Thread-175207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:08:43.082 [DEBUG] [Thread-175207] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:08:43.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:08:43.083 [DEBUG] [Thread-175207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:08:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:08:43.124 [DEBUG] [Thread-175207] [transport.py] [_log()] userauth is OK
2026-04-11T19:08:43.124 [DEBUG] [Thread-175207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:08:43.124 [DEBUG] [Thread-175207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:08:43.124 [DEBUG] [Thread-175207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:08:43.124 [DEBUG] [Thread-175207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:08:43.151 [INFO] [Thread-175207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:08:43.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:08:43.774 [DEBUG] [Thread-175207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:08:43.774 [DEBUG] [Thread-175207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:08:43.775 [DEBUG] [Thread-175207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:08:43.816 [DEBUG] [Thread-175207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:08:43.816 [DEBUG] [Thread-175207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:08:43.818 [DEBUG] [Thread-175207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:08:43.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:08:43.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:08:43.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:08:43.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:08:43.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:08:43.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:08:43.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:08:43.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:08:43.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:08:43.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.714007 -999.00  +11.90  16.28     97  +11.50 1 3 1 3 1     2    0 0.36 -0.43 ----- 16.3 16.3 300.6 24.5 13.0 -0.5 12.8 -0.4 12.6 -0.4 12.9 -0.4
2026-04-11T19:08:43.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:08:43.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:08:43.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.714007
2026-04-11T19:08:43.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:08:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:08:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:08:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:08:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:08:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:08:21', tmtdew=0.01622, humidity=99.8565, cloud=0.0, wind=21.6857, temperature=11.987, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:08:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:08:43.844 [DEBUG] [Thread-175207] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:08:43.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:08:43.940 [DEBUG] [Thread-175210] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-11T19:08:43.940 [DEBUG] [Thread-175210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:08:43.960 [DEBUG] [Thread-175210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:08:43.961 [INFO] [Thread-175210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] client lang: <none>
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] server lang: <none>
2026-04-11T19:08:43.968 [DEBUG] [Thread-175210] [transport.py] [_log()] kex follows: False
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] Compression: none
2026-04-11T19:08:43.969 [DEBUG] [Thread-175210] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:08:44.025 [DEBUG] [Thread-175210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:08:44.026 [DEBUG] [Thread-175210] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:08:44.026 [DEBUG] [Thread-175210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:08:44.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:08:44.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:08:44.082 [DEBUG] [Thread-175210] [transport.py] [_log()] userauth is OK
2026-04-11T19:08:44.082 [DEBUG] [Thread-175210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:08:44.082 [DEBUG] [Thread-175210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:08:44.082 [DEBUG] [Thread-175210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:08:44.082 [DEBUG] [Thread-175210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:08:44.100 [INFO] [Thread-175210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:08:44.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:08:44.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:08:44.778 [DEBUG] [Thread-175212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:08:44.928 [DEBUG] [Thread-175210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:08:44.929 [DEBUG] [Thread-175210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:08:44.976 [DEBUG] [Thread-175210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:08:44.977 [DEBUG] [Thread-175210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:08:44.985 [DEBUG] [Thread-175210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:08:44.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:08:44.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-04-11T19:08:45.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-04-11T19:08:45.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:08:45.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:08:45.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:08:45.019 [DEBUG] [Thread-175210] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:08:59.828 [DEBUG] [Thread-175213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:14.867 [DEBUG] [Thread-175214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:15.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:09:15.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:09:15.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-04-11T19:09:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 8, 57), 0.061075, 99.8901, 0.0, 17.9982, 12.0373, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:09:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:08:57
2026-04-11T19:09:16.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:09:16.798 [DEBUG] [Thread-175215] [transport.py] [_log()] starting thread (client mode): 0xb0f56d10
2026-04-11T19:09:16.798 [DEBUG] [Thread-175215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:09:16.818 [DEBUG] [Thread-175215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:09:16.818 [INFO] [Thread-175215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] client lang: <none>
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] server lang: <none>
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] kex follows: False
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] Compression: none
2026-04-11T19:09:16.821 [DEBUG] [Thread-175215] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:09:16.829 [DEBUG] [Thread-175215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:09:16.830 [DEBUG] [Thread-175215] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:09:16.830 [DEBUG] [Thread-175215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:09:16.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:09:16.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:09:16.832 [DEBUG] [Thread-175215] [transport.py] [_log()] userauth is OK
2026-04-11T19:09:16.832 [DEBUG] [Thread-175215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:09:16.832 [DEBUG] [Thread-175215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:09:16.832 [DEBUG] [Thread-175215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:09:16.832 [DEBUG] [Thread-175215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:09:16.856 [INFO] [Thread-175215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:09:16.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:09:17.470 [DEBUG] [Thread-175215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:09:17.471 [DEBUG] [Thread-175215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:09:17.471 [DEBUG] [Thread-175215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:09:17.512 [DEBUG] [Thread-175215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:09:17.512 [DEBUG] [Thread-175215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:09:17.515 [DEBUG] [Thread-175215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:09:17.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:09:17.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:09:17.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:09:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:09:17.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:09:17.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:09:17.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:09:17.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:09:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:09:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.714354 -999.00  +11.90  19.86     97  +11.50 1 3 1 3 1     2    0 0.37 -0.16 ----- 19.9 19.9 296.8 23.0 13.0 -0.8 12.8 -0.3 12.5 -0.3 12.9 -0.5
2026-04-11T19:09:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:09:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:09:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.714354
2026-04-11T19:09:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:09:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:09:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:09:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:09:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:09:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:08:57', tmtdew=0.061075, humidity=99.8901, cloud=0.0, wind=17.9982, temperature=12.0373, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:08:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:09:17.542 [DEBUG] [Thread-175215] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:09:17.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:09:17.648 [DEBUG] [Thread-175218] [transport.py] [_log()] starting thread (client mode): 0xae5149a0
2026-04-11T19:09:17.648 [DEBUG] [Thread-175218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:09:17.663 [DEBUG] [Thread-175218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:09:17.663 [INFO] [Thread-175218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:09:17.671 [DEBUG] [Thread-175218] [transport.py] [_log()] client lang: <none>
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] server lang: <none>
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] kex follows: False
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] Compression: none
2026-04-11T19:09:17.672 [DEBUG] [Thread-175218] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:09:17.730 [DEBUG] [Thread-175218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:09:17.731 [DEBUG] [Thread-175218] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:09:17.731 [DEBUG] [Thread-175218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:09:17.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:09:17.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:09:17.786 [DEBUG] [Thread-175218] [transport.py] [_log()] userauth is OK
2026-04-11T19:09:17.786 [DEBUG] [Thread-175218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:09:17.787 [DEBUG] [Thread-175218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:09:17.787 [DEBUG] [Thread-175218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:09:17.787 [DEBUG] [Thread-175218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:09:17.809 [INFO] [Thread-175218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:09:17.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:09:17.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:09:18.617 [DEBUG] [Thread-175218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:09:18.617 [DEBUG] [Thread-175218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:09:18.665 [DEBUG] [Thread-175218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:09:18.665 [DEBUG] [Thread-175218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:09:18.675 [DEBUG] [Thread-175218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:09:18.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:09:18.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:09: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-04-11T19:09:18.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:09:18.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:09:18.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:09:18.712 [DEBUG] [Thread-175218] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:09:24.505 [DEBUG] [Thread-175220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:29.904 [DEBUG] [Thread-175221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:44.967 [DEBUG] [Thread-175222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:47.612 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:47.613 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:09:48.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:09:48.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:09:48.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-04-11T19:09:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 9, 32), 0.06608, 99.8574, 0.0, 18.6332, 12.0376, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:09:49.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:09:32
2026-04-11T19:09:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:09:50.526 [DEBUG] [Thread-175223] [transport.py] [_log()] starting thread (client mode): 0xa7953070
2026-04-11T19:09:50.526 [DEBUG] [Thread-175223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:09:50.545 [DEBUG] [Thread-175223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:09:50.545 [INFO] [Thread-175223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] client lang: <none>
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] server lang: <none>
2026-04-11T19:09:50.549 [DEBUG] [Thread-175223] [transport.py] [_log()] kex follows: False
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] Compression: none
2026-04-11T19:09:50.550 [DEBUG] [Thread-175223] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:09:50.567 [DEBUG] [Thread-175223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:09:50.568 [DEBUG] [Thread-175223] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:09:50.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:09:50.569 [DEBUG] [Thread-175223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:09:50.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:09:50.571 [DEBUG] [Thread-175223] [transport.py] [_log()] userauth is OK
2026-04-11T19:09:50.571 [DEBUG] [Thread-175223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:09:50.571 [DEBUG] [Thread-175223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:09:50.572 [DEBUG] [Thread-175223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:09:50.572 [DEBUG] [Thread-175223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:09:50.589 [INFO] [Thread-175223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:09:50.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:09:51.173 [DEBUG] [Thread-175223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:09:51.173 [DEBUG] [Thread-175223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:09:51.173 [DEBUG] [Thread-175223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:09:51.214 [DEBUG] [Thread-175223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:09:51.214 [DEBUG] [Thread-175223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:09:51.217 [DEBUG] [Thread-175223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:09:51.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:09:51.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:09:51.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:09:51.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:09:51.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:09:51.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:09:51.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:09:51.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:09:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:09:51.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.715049 -999.00  +11.90  17.24     97  +11.50 1 3 1 3 1     1    0 0.38 -0.06 ----- 17.2 17.2 297.6 23.2 13.0 -0.7 12.8 -0.2 12.5 -0.3 12.9 -0.5
2026-04-11T19:09:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:09:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:09:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.715049
2026-04-11T19:09:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:09:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:09:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:09:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:09:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:09:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:09:32', tmtdew=0.06608, humidity=99.8574, cloud=0.0, wind=18.6332, temperature=12.0376, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:09:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:09:51.247 [DEBUG] [Thread-175223] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:09:51.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:09:51.340 [DEBUG] [Thread-175226] [transport.py] [_log()] starting thread (client mode): 0xb0fb5a50
2026-04-11T19:09:51.340 [DEBUG] [Thread-175226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:09:51.356 [DEBUG] [Thread-175226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:09:51.356 [INFO] [Thread-175226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:09:51.363 [DEBUG] [Thread-175226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] client lang: <none>
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] server lang: <none>
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] kex follows: False
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] Compression: none
2026-04-11T19:09:51.364 [DEBUG] [Thread-175226] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:09:51.428 [DEBUG] [Thread-175226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:09:51.428 [DEBUG] [Thread-175226] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:09:51.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:09:51.429 [DEBUG] [Thread-175226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:09:51.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:09:51.487 [DEBUG] [Thread-175226] [transport.py] [_log()] userauth is OK
2026-04-11T19:09:51.488 [DEBUG] [Thread-175226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:09:51.488 [DEBUG] [Thread-175226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:09:51.488 [DEBUG] [Thread-175226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:09:51.488 [DEBUG] [Thread-175226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:09:51.507 [INFO] [Thread-175226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:09:51.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:09:51.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:09:52.347 [DEBUG] [Thread-175226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:09:52.348 [DEBUG] [Thread-175226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:09:52.395 [DEBUG] [Thread-175226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:09:52.395 [DEBUG] [Thread-175226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:09:52.404 [DEBUG] [Thread-175226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:09:52.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:09:52.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-04-11T19:09:52.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-04-11T19:09:52.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:09:52.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:09:52.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:09:52.440 [DEBUG] [Thread-175226] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:10:00.002 [DEBUG] [Thread-175228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:15.055 [DEBUG] [Thread-175229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:22.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:10:22.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:10:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:10:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 10, 8), 0.066065, 99.8574, 0.0, 20.5207, 12.0541, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:10:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:10:08
2026-04-11T19:10:24.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:10:24.235 [DEBUG] [Thread-175230] [transport.py] [_log()] starting thread (client mode): 0xae5a5ea0
2026-04-11T19:10:24.235 [DEBUG] [Thread-175230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:10:24.255 [DEBUG] [Thread-175230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:10:24.255 [INFO] [Thread-175230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] client lang: <none>
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] server lang: <none>
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] kex follows: False
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:10:24.259 [DEBUG] [Thread-175230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:10:24.260 [DEBUG] [Thread-175230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:10:24.260 [DEBUG] [Thread-175230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:10:24.260 [DEBUG] [Thread-175230] [transport.py] [_log()] Compression: none
2026-04-11T19:10:24.260 [DEBUG] [Thread-175230] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:10:24.275 [DEBUG] [Thread-175230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:10:24.275 [DEBUG] [Thread-175230] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:10:24.276 [DEBUG] [Thread-175230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:10:24.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:10:24.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:10:24.317 [DEBUG] [Thread-175230] [transport.py] [_log()] userauth is OK
2026-04-11T19:10:24.317 [DEBUG] [Thread-175230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:10:24.317 [DEBUG] [Thread-175230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:10:24.317 [DEBUG] [Thread-175230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:10:24.318 [DEBUG] [Thread-175230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:10:24.338 [INFO] [Thread-175230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:10:24.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:10:24.591 [DEBUG] [Thread-175232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:24.984 [DEBUG] [Thread-175230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:10:24.984 [DEBUG] [Thread-175230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:10:24.985 [DEBUG] [Thread-175230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:10:25.025 [DEBUG] [Thread-175230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:10:25.025 [DEBUG] [Thread-175230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:10:25.029 [DEBUG] [Thread-175230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:10:25.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:10:25.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:10:25.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:10:25.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:10:25.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:10:25.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:10:25.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:10:25.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:10:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:10:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.715396 -999.00  +11.90  21.96     97  +11.60 1 3 1 3 1     1    0 0.37 -0.14 ----- 22.0 22.0 297.8 25.5 13.0 -0.7 12.8 -0.4 12.5 -0.2 12.9 -0.6
2026-04-11T19:10:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:10:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:10:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.715396
2026-04-11T19:10:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:10:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:10:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:10:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:10:25.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:10:25.064 [DEBUG] [Thread-175230] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:10:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:10:08', tmtdew=0.066065, humidity=99.8574, cloud=0.0, wind=20.5207, temperature=12.0541, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:10:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:10:25.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:10:25.159 [DEBUG] [Thread-175234] [transport.py] [_log()] starting thread (client mode): 0xae516260
2026-04-11T19:10:25.159 [DEBUG] [Thread-175234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:10:25.173 [DEBUG] [Thread-175234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:10:25.173 [INFO] [Thread-175234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:10:25.181 [DEBUG] [Thread-175234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:10:25.181 [DEBUG] [Thread-175234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:10:25.181 [DEBUG] [Thread-175234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:10:25.181 [DEBUG] [Thread-175234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:25.181 [DEBUG] [Thread-175234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:25.181 [DEBUG] [Thread-175234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] client lang: <none>
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] server lang: <none>
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] kex follows: False
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:10:25.182 [DEBUG] [Thread-175234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:10:25.183 [DEBUG] [Thread-175234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:10:25.183 [DEBUG] [Thread-175234] [transport.py] [_log()] Compression: none
2026-04-11T19:10:25.183 [DEBUG] [Thread-175234] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:10:25.244 [DEBUG] [Thread-175234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:10:25.245 [DEBUG] [Thread-175234] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:10:25.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:10:25.246 [DEBUG] [Thread-175234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:10:25.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:10:25.300 [DEBUG] [Thread-175234] [transport.py] [_log()] userauth is OK
2026-04-11T19:10:25.300 [DEBUG] [Thread-175234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:10:25.300 [DEBUG] [Thread-175234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:10:25.300 [DEBUG] [Thread-175234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:10:25.300 [DEBUG] [Thread-175234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:10:25.319 [INFO] [Thread-175234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:10:25.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:10:25.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:10:26.144 [DEBUG] [Thread-175234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:10:26.145 [DEBUG] [Thread-175234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:10:26.192 [DEBUG] [Thread-175234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:10:26.192 [DEBUG] [Thread-175234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:10:26.201 [DEBUG] [Thread-175234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:10:26.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:10:26.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-04-11T19:10:26.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-04-11T19:10:26.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:10:26.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:10:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:10:26.233 [DEBUG] [Thread-175234] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:10:30.093 [DEBUG] [Thread-175236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:45.146 [DEBUG] [Thread-175237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:52.086 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:52.087 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:10:56.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:10:56.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:10:56.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-04-11T19:10:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 10, 43), 0.03219, 99.7146, 0.0, 22.7239, 12.4418, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:10:57.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:10:43
2026-04-11T19:10:57.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:10:58.045 [DEBUG] [Thread-175238] [transport.py] [_log()] starting thread (client mode): 0xae5a7370
2026-04-11T19:10:58.046 [DEBUG] [Thread-175238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:10:58.066 [DEBUG] [Thread-175238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:10:58.066 [INFO] [Thread-175238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:10:58.069 [DEBUG] [Thread-175238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:10:58.069 [DEBUG] [Thread-175238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] client lang: <none>
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] server lang: <none>
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] kex follows: False
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] Compression: none
2026-04-11T19:10:58.070 [DEBUG] [Thread-175238] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:10:58.084 [DEBUG] [Thread-175238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:10:58.084 [DEBUG] [Thread-175238] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:10:58.085 [DEBUG] [Thread-175238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:10:58.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:10:58.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:10:58.085 [DEBUG] [Thread-175238] [transport.py] [_log()] userauth is OK
2026-04-11T19:10:58.085 [DEBUG] [Thread-175238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:10:58.085 [DEBUG] [Thread-175238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:10:58.085 [DEBUG] [Thread-175238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:10:58.085 [DEBUG] [Thread-175238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:10:58.112 [INFO] [Thread-175238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:10:58.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:10:58.731 [DEBUG] [Thread-175238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:10:58.732 [DEBUG] [Thread-175238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:10:58.732 [DEBUG] [Thread-175238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:10:58.772 [DEBUG] [Thread-175238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:10:58.772 [DEBUG] [Thread-175238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:10:58.776 [DEBUG] [Thread-175238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:10:58.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:10:58.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:10:58.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:10:58.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:10:58.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:10:58.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:10:58.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:10:58.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:10:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:10:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.715743 -999.00  +11.90  19.63     97  +11.50 1 3 1 3 1     1    0 0.37 0.12 ----- 19.6 19.6 293.8 25.1 13.0 -1.2 12.8 -0.3 12.5 -0.3 12.9 -0.5
2026-04-11T19:10:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:10:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:10:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.715743
2026-04-11T19:10:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:10:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:10:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:10:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:10:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:10:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:10:43', tmtdew=0.03219, humidity=99.7146, cloud=0.0, wind=22.7239, temperature=12.4418, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:10:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:10:58.801 [DEBUG] [Thread-175238] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:10:58.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:10:58.898 [DEBUG] [Thread-175241] [transport.py] [_log()] starting thread (client mode): 0xae536ce0
2026-04-11T19:10:58.898 [DEBUG] [Thread-175241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:10:58.913 [DEBUG] [Thread-175241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:10:58.913 [INFO] [Thread-175241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] client lang: <none>
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] server lang: <none>
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] kex follows: False
2026-04-11T19:10:58.920 [DEBUG] [Thread-175241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:10:58.921 [DEBUG] [Thread-175241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:10:58.921 [DEBUG] [Thread-175241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:10:58.921 [DEBUG] [Thread-175241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:10:58.921 [DEBUG] [Thread-175241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:10:58.921 [DEBUG] [Thread-175241] [transport.py] [_log()] Compression: none
2026-04-11T19:10:58.921 [DEBUG] [Thread-175241] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:10:58.979 [DEBUG] [Thread-175241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:10:58.980 [DEBUG] [Thread-175241] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:10:58.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:10:58.981 [DEBUG] [Thread-175241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:10:58.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:10:59.036 [DEBUG] [Thread-175241] [transport.py] [_log()] userauth is OK
2026-04-11T19:10:59.036 [DEBUG] [Thread-175241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:10:59.037 [DEBUG] [Thread-175241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:10:59.037 [DEBUG] [Thread-175241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:10:59.037 [DEBUG] [Thread-175241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:10:59.055 [INFO] [Thread-175241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:10:59.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:10:59.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:10:59.872 [DEBUG] [Thread-175241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:10:59.872 [DEBUG] [Thread-175241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:10:59.920 [DEBUG] [Thread-175241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:10:59.920 [DEBUG] [Thread-175241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:10:59.928 [DEBUG] [Thread-175241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:10:59.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:10:59.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-04-11T19:10:59.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-04-11T19:10:59.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:10:59.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:10:59.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:10:59.962 [DEBUG] [Thread-175241] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:11:00.178 [DEBUG] [Thread-175243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:11:15.229 [DEBUG] [Thread-175244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:11:24.668 [DEBUG] [Thread-175245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:11:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:11:29.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:11:29.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-04-11T19:11:30.266 [DEBUG] [Thread-175246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:11:31.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 11, 18), 0.01609, 99.8573, 0.0, 21.4034, 12.0375, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:11:31.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:11:18
2026-04-11T19:11:31.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:11:31.780 [DEBUG] [Thread-175247] [transport.py] [_log()] starting thread (client mode): 0xb0febca0
2026-04-11T19:11:31.780 [DEBUG] [Thread-175247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:11:31.800 [DEBUG] [Thread-175247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:11:31.800 [INFO] [Thread-175247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:11:31.803 [DEBUG] [Thread-175247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:11:31.803 [DEBUG] [Thread-175247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:11:31.803 [DEBUG] [Thread-175247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:11:31.803 [DEBUG] [Thread-175247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] client lang: <none>
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] server lang: <none>
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] kex follows: False
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] Compression: none
2026-04-11T19:11:31.804 [DEBUG] [Thread-175247] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:11:31.821 [DEBUG] [Thread-175247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:11:31.822 [DEBUG] [Thread-175247] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:11:31.822 [DEBUG] [Thread-175247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:11:31.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:11:31.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:11:31.824 [DEBUG] [Thread-175247] [transport.py] [_log()] userauth is OK
2026-04-11T19:11:31.824 [DEBUG] [Thread-175247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:11:31.824 [DEBUG] [Thread-175247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:11:31.824 [DEBUG] [Thread-175247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:11:31.825 [DEBUG] [Thread-175247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:11:31.849 [INFO] [Thread-175247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:11:31.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:11:32.489 [DEBUG] [Thread-175247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:11:32.489 [DEBUG] [Thread-175247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:11:32.489 [DEBUG] [Thread-175247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:11:32.530 [DEBUG] [Thread-175247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:11:32.530 [DEBUG] [Thread-175247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:11:32.533 [DEBUG] [Thread-175247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:11:32.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:11:32.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:11:32.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:11:32.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:11:32.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:11:32.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:11:32.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:11:32.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:11:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:11:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.716091 -999.00  +11.80  18.12     97  +11.50 1 3 1 3 1     1    0 0.37 -0.11 ----- 18.1 18.1 296.6 23.5 13.0 -1.0 12.8 -0.3 12.5 -0.5 12.9 -0.5
2026-04-11T19:11:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:11:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:11:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.716091
2026-04-11T19:11:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:11:32.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:11:32.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:11:32.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:11:32.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:11:32.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:11:18', tmtdew=0.01609, humidity=99.8573, cloud=0.0, wind=21.4034, temperature=12.0375, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:11:10.262', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:11:32.558 [DEBUG] [Thread-175247] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:11:32.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:11:32.653 [DEBUG] [Thread-175250] [transport.py] [_log()] starting thread (client mode): 0xae50b9d0
2026-04-11T19:11:32.653 [DEBUG] [Thread-175250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:11:32.668 [DEBUG] [Thread-175250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:11:32.668 [INFO] [Thread-175250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:11:32.675 [DEBUG] [Thread-175250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:11:32.675 [DEBUG] [Thread-175250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:11:32.675 [DEBUG] [Thread-175250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] client lang: <none>
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] server lang: <none>
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] kex follows: False
2026-04-11T19:11:32.676 [DEBUG] [Thread-175250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:11:32.677 [DEBUG] [Thread-175250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:11:32.677 [DEBUG] [Thread-175250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:11:32.677 [DEBUG] [Thread-175250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:11:32.677 [DEBUG] [Thread-175250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:11:32.677 [DEBUG] [Thread-175250] [transport.py] [_log()] Compression: none
2026-04-11T19:11:32.677 [DEBUG] [Thread-175250] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:11:32.732 [DEBUG] [Thread-175250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:11:32.733 [DEBUG] [Thread-175250] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:11:32.733 [DEBUG] [Thread-175250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:11:32.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:11:32.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:11:32.788 [DEBUG] [Thread-175250] [transport.py] [_log()] userauth is OK
2026-04-11T19:11:32.788 [DEBUG] [Thread-175250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:11:32.788 [DEBUG] [Thread-175250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:11:32.788 [DEBUG] [Thread-175250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:11:32.788 [DEBUG] [Thread-175250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:11:32.807 [INFO] [Thread-175250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:11:32.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:11:32.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:11:33.659 [DEBUG] [Thread-175250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:11:33.659 [DEBUG] [Thread-175250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:11:33.707 [DEBUG] [Thread-175250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:11:33.708 [DEBUG] [Thread-175250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:11:33.717 [DEBUG] [Thread-175250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:11:33.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:11:33.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-04-11T19:11:33.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-04-11T19:11:33.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:11:33.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:11:33.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:11:33.755 [DEBUG] [Thread-175250] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:11:45.302 [DEBUG] [Thread-175252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:11:56.273 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:11:56.275 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:12:00.355 [DEBUG] [Thread-175253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:12:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:12:03.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:12:03.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-04-11T19:12:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 11, 54), 0.04235, 99.6482, 0.0, 21.348, 12.4418, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:12:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:11:54
2026-04-11T19:12:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:12:05.593 [DEBUG] [Thread-175254] [transport.py] [_log()] starting thread (client mode): 0xa79517e0
2026-04-11T19:12:05.593 [DEBUG] [Thread-175254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:12:05.614 [DEBUG] [Thread-175254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:12:05.615 [INFO] [Thread-175254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] client lang: <none>
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] server lang: <none>
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] kex follows: False
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:12:05.618 [DEBUG] [Thread-175254] [transport.py] [_log()] Compression: none
2026-04-11T19:12:05.619 [DEBUG] [Thread-175254] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:12:05.635 [DEBUG] [Thread-175254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:12:05.635 [DEBUG] [Thread-175254] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:12:05.636 [DEBUG] [Thread-175254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:12:05.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:12:05.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:12:05.638 [DEBUG] [Thread-175254] [transport.py] [_log()] userauth is OK
2026-04-11T19:12:05.638 [DEBUG] [Thread-175254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:12:05.638 [DEBUG] [Thread-175254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:12:05.638 [DEBUG] [Thread-175254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:12:05.638 [DEBUG] [Thread-175254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:12:05.662 [INFO] [Thread-175254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:12:05.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:12:06.307 [DEBUG] [Thread-175254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:12:06.308 [DEBUG] [Thread-175254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:12:06.308 [DEBUG] [Thread-175254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:12:06.350 [DEBUG] [Thread-175254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:12:06.350 [DEBUG] [Thread-175254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:12:06.354 [DEBUG] [Thread-175254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:12:06.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:12:06.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:12:06.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:12:06.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:12:06.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:12:06.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:12:06.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:12:06.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:12:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:12:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.716438 -999.00  +11.90  19.20     97  +11.50 1 3 1 3 1     1    0 0.38 0.15 ----- 19.2 19.2 290.2 24.2 13.0 -0.9 12.8 -0.3 12.5 -0.5 12.9 -0.5
2026-04-11T19:12:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:12:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:12:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.716438
2026-04-11T19:12:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:12:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:12:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:12:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:12:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:12:06.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:11:54', tmtdew=0.04235, humidity=99.6482, cloud=0.0, wind=21.348, temperature=12.4418, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:11:40.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:12:06.385 [DEBUG] [Thread-175254] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:12:06.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:12:06.477 [DEBUG] [Thread-175257] [transport.py] [_log()] starting thread (client mode): 0xa7953550
2026-04-11T19:12:06.477 [DEBUG] [Thread-175257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:12:06.492 [DEBUG] [Thread-175257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:12:06.493 [INFO] [Thread-175257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:12:06.500 [DEBUG] [Thread-175257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:12:06.500 [DEBUG] [Thread-175257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:12:06.500 [DEBUG] [Thread-175257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:12:06.500 [DEBUG] [Thread-175257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:06.500 [DEBUG] [Thread-175257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:06.500 [DEBUG] [Thread-175257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] client lang: <none>
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] server lang: <none>
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] kex follows: False
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] Compression: none
2026-04-11T19:12:06.501 [DEBUG] [Thread-175257] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:12:06.561 [DEBUG] [Thread-175257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:12:06.562 [DEBUG] [Thread-175257] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:12:06.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:12:06.563 [DEBUG] [Thread-175257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:12:06.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:12:06.617 [DEBUG] [Thread-175257] [transport.py] [_log()] userauth is OK
2026-04-11T19:12:06.617 [DEBUG] [Thread-175257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:12:06.617 [DEBUG] [Thread-175257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:12:06.618 [DEBUG] [Thread-175257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:12:06.618 [DEBUG] [Thread-175257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:12:06.636 [INFO] [Thread-175257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:12:06.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:12:06.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:12:07.458 [DEBUG] [Thread-175257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:12:07.459 [DEBUG] [Thread-175257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:12:07.507 [DEBUG] [Thread-175257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:12:07.507 [DEBUG] [Thread-175257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:12:07.516 [DEBUG] [Thread-175257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:12:07.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:12:07.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-04-11T19:12:07.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-04-11T19:12:07.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:12:07.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:12:07.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:12:07.553 [DEBUG] [Thread-175257] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:12:15.389 [DEBUG] [Thread-175259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:12:24.747 [DEBUG] [Thread-175260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:12:30.441 [DEBUG] [Thread-175261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:12:37.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:12:37.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:12:37.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-04-11T19:12:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 12, 29), 0.06864, 99.8407, 0.0, 19.868, 12.0209, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:12:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:12:29
2026-04-11T19:12:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:12:39.430 [DEBUG] [Thread-175262] [transport.py] [_log()] starting thread (client mode): 0xa7952950
2026-04-11T19:12:39.430 [DEBUG] [Thread-175262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:12:39.450 [DEBUG] [Thread-175262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:12:39.450 [INFO] [Thread-175262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] client lang: <none>
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] server lang: <none>
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] kex follows: False
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:12:39.453 [DEBUG] [Thread-175262] [transport.py] [_log()] Compression: none
2026-04-11T19:12:39.454 [DEBUG] [Thread-175262] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:12:39.471 [DEBUG] [Thread-175262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:12:39.471 [DEBUG] [Thread-175262] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:12:39.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:12:39.472 [DEBUG] [Thread-175262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:12:39.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:12:39.475 [DEBUG] [Thread-175262] [transport.py] [_log()] userauth is OK
2026-04-11T19:12:39.475 [DEBUG] [Thread-175262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:12:39.475 [DEBUG] [Thread-175262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:12:39.475 [DEBUG] [Thread-175262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:12:39.475 [DEBUG] [Thread-175262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:12:39.497 [INFO] [Thread-175262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:12:39.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:12:40.118 [DEBUG] [Thread-175262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:12:40.118 [DEBUG] [Thread-175262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:12:40.119 [DEBUG] [Thread-175262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:12:40.160 [DEBUG] [Thread-175262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:12:40.160 [DEBUG] [Thread-175262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:12:40.164 [DEBUG] [Thread-175262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:12:40.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:12:40.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:12:40.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:12:40.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:12:40.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:12:40.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:12:40.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:12:40.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:12:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:12:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.716785 -999.00  +11.90  17.66     97  +11.50 1 3 1 3 1     1    0 0.39 0.15 ----- 17.7 17.7 296.8 25.7 13.0 -1.5 12.8 -0.3 12.5 -0.2 12.9 -0.5
2026-04-11T19:12:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:12:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:12:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.716785
2026-04-11T19:12:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:12:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:12:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:12:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:12:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:12:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:12:29', tmtdew=0.06864, humidity=99.8407, cloud=0.0, wind=19.868, temperature=12.0209, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:12:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:12:40.197 [DEBUG] [Thread-175262] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:12:40.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:12:40.291 [DEBUG] [Thread-175265] [transport.py] [_log()] starting thread (client mode): 0xae5f2d70
2026-04-11T19:12:40.291 [DEBUG] [Thread-175265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:12:40.306 [DEBUG] [Thread-175265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:12:40.306 [INFO] [Thread-175265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:12:40.313 [DEBUG] [Thread-175265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:12:40.314 [DEBUG] [Thread-175265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] client lang: <none>
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] server lang: <none>
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] kex follows: False
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:12:40.315 [DEBUG] [Thread-175265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:12:40.316 [DEBUG] [Thread-175265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:12:40.316 [DEBUG] [Thread-175265] [transport.py] [_log()] Compression: none
2026-04-11T19:12:40.316 [DEBUG] [Thread-175265] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:12:40.375 [DEBUG] [Thread-175265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:12:40.376 [DEBUG] [Thread-175265] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:12:40.377 [DEBUG] [Thread-175265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:12:40.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:12:40.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:12:40.433 [DEBUG] [Thread-175265] [transport.py] [_log()] userauth is OK
2026-04-11T19:12:40.434 [DEBUG] [Thread-175265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:12:40.434 [DEBUG] [Thread-175265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:12:40.434 [DEBUG] [Thread-175265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:12:40.434 [DEBUG] [Thread-175265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:12:40.453 [INFO] [Thread-175265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:12:40.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:12:40.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:12:41.292 [DEBUG] [Thread-175265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:12:41.292 [DEBUG] [Thread-175265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:12:41.340 [DEBUG] [Thread-175265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:12:41.341 [DEBUG] [Thread-175265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:12:41.350 [DEBUG] [Thread-175265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:12:41.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:12:41.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-04-11T19:12:41.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-04-11T19:12:41.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:12:41.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:12:41.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:12:41.384 [DEBUG] [Thread-175265] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:12:45.481 [DEBUG] [Thread-175267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:00.532 [DEBUG] [Thread-175268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:00.837 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:00.838 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:11.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:13:11.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:13:11.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-04-11T19:13:12.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 13, 5), 0.063645, 99.8734, 0.0, 20.309, 12.0206, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:13:12.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:13:05
2026-04-11T19:13:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:13:13.183 [DEBUG] [Thread-175269] [transport.py] [_log()] starting thread (client mode): 0xae5616f0
2026-04-11T19:13:13.183 [DEBUG] [Thread-175269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:13:13.202 [DEBUG] [Thread-175269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:13:13.202 [INFO] [Thread-175269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:13:13.205 [DEBUG] [Thread-175269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] client lang: <none>
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] server lang: <none>
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] kex follows: False
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] Compression: none
2026-04-11T19:13:13.206 [DEBUG] [Thread-175269] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:13:13.224 [DEBUG] [Thread-175269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:13:13.225 [DEBUG] [Thread-175269] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:13:13.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:13:13.226 [DEBUG] [Thread-175269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:13:13.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:13:13.228 [DEBUG] [Thread-175269] [transport.py] [_log()] userauth is OK
2026-04-11T19:13:13.229 [DEBUG] [Thread-175269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:13:13.229 [DEBUG] [Thread-175269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:13:13.229 [DEBUG] [Thread-175269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:13:13.229 [DEBUG] [Thread-175269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:13:13.245 [INFO] [Thread-175269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:13:13.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:13:13.898 [DEBUG] [Thread-175269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:13:13.898 [DEBUG] [Thread-175269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:13:13.899 [DEBUG] [Thread-175269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:13:13.939 [DEBUG] [Thread-175269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:13:13.939 [DEBUG] [Thread-175269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:13:13.942 [DEBUG] [Thread-175269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:13:13.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:13:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:13:13.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:13:13.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:13:13.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:13:13.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:13:13.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:13:13.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:13:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:13:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.717132 -999.00  +11.90  20.65     97  +11.50 1 3 1 3 1     0    0 0.39 0.23 ----- 20.6 20.6 302.4 22.9 13.0 -1.2 12.8 -0.3 12.5 -0.1 12.9 -0.7
2026-04-11T19:13:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:13:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:13:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.717132
2026-04-11T19:13:13.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:13:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:13:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:13:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:13:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:13:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:13:05', tmtdew=0.063645, humidity=99.8734, cloud=0.0, wind=20.309, temperature=12.0206, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:12:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:13:13.969 [DEBUG] [Thread-175269] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:13:14.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:13:14.063 [DEBUG] [Thread-175272] [transport.py] [_log()] starting thread (client mode): 0xa7952770
2026-04-11T19:13:14.063 [DEBUG] [Thread-175272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:13:14.078 [DEBUG] [Thread-175272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:13:14.078 [INFO] [Thread-175272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:14.086 [DEBUG] [Thread-175272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] client lang: <none>
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] server lang: <none>
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] kex follows: False
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] Compression: none
2026-04-11T19:13:14.087 [DEBUG] [Thread-175272] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:13:14.153 [DEBUG] [Thread-175272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:13:14.153 [DEBUG] [Thread-175272] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:13:14.154 [DEBUG] [Thread-175272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:13:14.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:13:14.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:13:14.209 [DEBUG] [Thread-175272] [transport.py] [_log()] userauth is OK
2026-04-11T19:13:14.209 [DEBUG] [Thread-175272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:13:14.209 [DEBUG] [Thread-175272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:13:14.210 [DEBUG] [Thread-175272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:13:14.210 [DEBUG] [Thread-175272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:13:14.228 [INFO] [Thread-175272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:13:14.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:13:14.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:13:15.047 [DEBUG] [Thread-175272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:13:15.047 [DEBUG] [Thread-175272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:13:15.096 [DEBUG] [Thread-175272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:13:15.097 [DEBUG] [Thread-175272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:13:15.106 [DEBUG] [Thread-175272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:13:15.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:13:15.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-04-11T19:13:15.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-04-11T19:13:15.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:13:15.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:13:15.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:13:15.143 [DEBUG] [Thread-175272] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:13:15.568 [DEBUG] [Thread-175274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:24.804 [DEBUG] [Thread-175275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:30.618 [DEBUG] [Thread-175276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:45.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:13:45.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:13:45.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-04-11T19:13:45.654 [DEBUG] [Thread-175277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:13:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 13, 5), 0.063645, 99.8734, 0.0, 20.309, 12.0206, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:13:46.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:13:05
2026-04-11T19:13:46.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:13:47.054 [DEBUG] [Thread-175278] [transport.py] [_log()] starting thread (client mode): 0xae518910
2026-04-11T19:13:47.054 [DEBUG] [Thread-175278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:13:47.075 [DEBUG] [Thread-175278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:13:47.075 [INFO] [Thread-175278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] client lang: <none>
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] server lang: <none>
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] kex follows: False
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] Compression: none
2026-04-11T19:13:47.078 [DEBUG] [Thread-175278] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:13:47.095 [DEBUG] [Thread-175278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:13:47.096 [DEBUG] [Thread-175278] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:13:47.096 [DEBUG] [Thread-175278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:13:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:13:47.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:13:47.098 [DEBUG] [Thread-175278] [transport.py] [_log()] userauth is OK
2026-04-11T19:13:47.098 [DEBUG] [Thread-175278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:13:47.099 [DEBUG] [Thread-175278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:13:47.099 [DEBUG] [Thread-175278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:13:47.099 [DEBUG] [Thread-175278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:13:47.134 [INFO] [Thread-175278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:13:47.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:13:47.776 [DEBUG] [Thread-175278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:13:47.777 [DEBUG] [Thread-175278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:13:47.777 [DEBUG] [Thread-175278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:13:47.817 [DEBUG] [Thread-175278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:13:47.818 [DEBUG] [Thread-175278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:13:47.820 [DEBUG] [Thread-175278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:13:47.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:13:47.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:13:47.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:13:47.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:13:47.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:13:47.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:13:47.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:13:47.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:13:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:13:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.717479 -999.00  +11.90  16.10     97  +11.50 1 3 1 3 1     0    0 0.38 0.32 ----- 16.1 16.1 286.2 21.4 13.0 -1.0 12.8 -0.1 12.5 -0.3 12.9 -0.6
2026-04-11T19:13:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:13:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:13:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.717479
2026-04-11T19:13:47.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:13:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:13:47.843 [DEBUG] [Thread-175278] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:13:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:13:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:13:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:13:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:13:05', tmtdew=0.063645, humidity=99.8734, cloud=0.0, wind=20.309, temperature=12.0206, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:13:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:13:47.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:13:47.937 [DEBUG] [Thread-175281] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb90
2026-04-11T19:13:47.937 [DEBUG] [Thread-175281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:13:47.951 [DEBUG] [Thread-175281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:13:47.951 [INFO] [Thread-175281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] client lang: <none>
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] server lang: <none>
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] kex follows: False
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] Compression: none
2026-04-11T19:13:47.959 [DEBUG] [Thread-175281] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:13:48.022 [DEBUG] [Thread-175281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:13:48.023 [DEBUG] [Thread-175281] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:13:48.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:13:48.024 [DEBUG] [Thread-175281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:13:48.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:13:48.078 [DEBUG] [Thread-175281] [transport.py] [_log()] userauth is OK
2026-04-11T19:13:48.078 [DEBUG] [Thread-175281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:13:48.078 [DEBUG] [Thread-175281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:13:48.078 [DEBUG] [Thread-175281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:13:48.078 [DEBUG] [Thread-175281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:13:48.101 [INFO] [Thread-175281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:13:48.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:13:48.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:13:49.016 [DEBUG] [Thread-175281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:13:49.017 [DEBUG] [Thread-175281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:13:49.065 [DEBUG] [Thread-175281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:13:49.065 [DEBUG] [Thread-175281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:13:49.074 [DEBUG] [Thread-175281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:13:49.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:13:49.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:13:49.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:13:49.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:13:49.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:13:49.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:13:49.111 [DEBUG] [Thread-175281] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:14:00.691 [DEBUG] [Thread-175283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:01.040 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:01.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:15.749 [DEBUG] [Thread-175284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:14:19.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:14:19.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-04-11T19:14:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 13, 40), 0.03238, 99.7136, 0.0, 20.8894, 12.408, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:14:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:13:40
2026-04-11T19:14:20.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:14:21.139 [DEBUG] [Thread-175285] [transport.py] [_log()] starting thread (client mode): 0xae5198d0
2026-04-11T19:14:21.139 [DEBUG] [Thread-175285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:14:21.161 [DEBUG] [Thread-175285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:14:21.161 [INFO] [Thread-175285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] client lang: <none>
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] server lang: <none>
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] kex follows: False
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] Compression: none
2026-04-11T19:14:21.165 [DEBUG] [Thread-175285] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:14:21.183 [DEBUG] [Thread-175285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:14:21.183 [DEBUG] [Thread-175285] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:14:21.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:14:21.184 [DEBUG] [Thread-175285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:14:21.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:14:21.187 [DEBUG] [Thread-175285] [transport.py] [_log()] userauth is OK
2026-04-11T19:14:21.187 [DEBUG] [Thread-175285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:14:21.187 [DEBUG] [Thread-175285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:14:21.187 [DEBUG] [Thread-175285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:14:21.187 [DEBUG] [Thread-175285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:14:21.209 [INFO] [Thread-175285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:14:21.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:14:21.860 [DEBUG] [Thread-175285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:14:21.860 [DEBUG] [Thread-175285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:14:21.861 [DEBUG] [Thread-175285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:14:21.901 [DEBUG] [Thread-175285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:14:21.901 [DEBUG] [Thread-175285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:14:21.905 [DEBUG] [Thread-175285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:14:21.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:14:21.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:14:21.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:14:21.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:14:21.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:14:21.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:14:21.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:14:21.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:14:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:14:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.717827 -999.00  +11.90  16.70     97  +11.60 1 3 1 3 1     0    0 0.38 0.21 ----- 16.7 16.7 291.0 20.4 13.0 -1.2 12.9 -0.3 12.5 -0.2 12.9 -0.4
2026-04-11T19:14:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:14:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:14:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.717827
2026-04-11T19:14:21.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:14:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:14:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:14:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:14:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:14:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:13:40', tmtdew=0.03238, humidity=99.7136, cloud=0.0, wind=20.8894, temperature=12.408, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:13:40.253', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:14:21.934 [DEBUG] [Thread-175285] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:14:22.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:14:22.034 [DEBUG] [Thread-175288] [transport.py] [_log()] starting thread (client mode): 0xa7950c10
2026-04-11T19:14:22.034 [DEBUG] [Thread-175288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:14:22.052 [DEBUG] [Thread-175288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:14:22.052 [INFO] [Thread-175288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:14:22.060 [DEBUG] [Thread-175288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:14:22.061 [DEBUG] [Thread-175288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:14:22.061 [DEBUG] [Thread-175288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:14:22.061 [DEBUG] [Thread-175288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:22.061 [DEBUG] [Thread-175288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:22.061 [DEBUG] [Thread-175288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:22.061 [DEBUG] [Thread-175288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] client lang: <none>
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] server lang: <none>
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] kex follows: False
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:14:22.062 [DEBUG] [Thread-175288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:14:22.063 [DEBUG] [Thread-175288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:14:22.063 [DEBUG] [Thread-175288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:14:22.063 [DEBUG] [Thread-175288] [transport.py] [_log()] Compression: none
2026-04-11T19:14:22.063 [DEBUG] [Thread-175288] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:14:22.122 [DEBUG] [Thread-175288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:14:22.122 [DEBUG] [Thread-175288] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:14:22.123 [DEBUG] [Thread-175288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:14:22.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:14:22.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:14:22.177 [DEBUG] [Thread-175288] [transport.py] [_log()] userauth is OK
2026-04-11T19:14:22.178 [DEBUG] [Thread-175288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:14:22.178 [DEBUG] [Thread-175288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:14:22.178 [DEBUG] [Thread-175288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:14:22.178 [DEBUG] [Thread-175288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:14:22.196 [INFO] [Thread-175288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:14:22.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:14:22.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:14:22.997 [DEBUG] [Thread-175288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:14:22.997 [DEBUG] [Thread-175288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:14:23.045 [DEBUG] [Thread-175288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:14:23.045 [DEBUG] [Thread-175288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:14:23.055 [DEBUG] [Thread-175288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:14:23.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:14:23.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:14:23.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-04-11T19:14:23.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:14:23.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:14:23.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:14:23.093 [DEBUG] [Thread-175288] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:14:24.862 [DEBUG] [Thread-175290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:30.786 [DEBUG] [Thread-175291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:45.841 [DEBUG] [Thread-175292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:14:53.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:14:53.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:14:53.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:14:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 14, 16), 0.07119, 99.8241, 0.0, 20.362, 11.9877, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:14:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:14:16
2026-04-11T19:14:54.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:14:54.966 [DEBUG] [Thread-175293] [transport.py] [_log()] starting thread (client mode): 0xae5f0910
2026-04-11T19:14:54.966 [DEBUG] [Thread-175293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:14:54.987 [DEBUG] [Thread-175293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:14:54.987 [INFO] [Thread-175293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:14:54.989 [DEBUG] [Thread-175293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] client lang: <none>
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] server lang: <none>
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] kex follows: False
2026-04-11T19:14:54.990 [DEBUG] [Thread-175293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:14:54.991 [DEBUG] [Thread-175293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:14:54.991 [DEBUG] [Thread-175293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:14:54.991 [DEBUG] [Thread-175293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:14:54.991 [DEBUG] [Thread-175293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:14:54.991 [DEBUG] [Thread-175293] [transport.py] [_log()] Compression: none
2026-04-11T19:14:54.991 [DEBUG] [Thread-175293] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:14:55.010 [DEBUG] [Thread-175293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:14:55.011 [DEBUG] [Thread-175293] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:14:55.012 [DEBUG] [Thread-175293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:14:55.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:14:55.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:14:55.014 [DEBUG] [Thread-175293] [transport.py] [_log()] userauth is OK
2026-04-11T19:14:55.015 [DEBUG] [Thread-175293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:14:55.015 [DEBUG] [Thread-175293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:14:55.015 [DEBUG] [Thread-175293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:14:55.015 [DEBUG] [Thread-175293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:14:55.038 [INFO] [Thread-175293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:14:55.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:14:55.638 [DEBUG] [Thread-175293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:14:55.638 [DEBUG] [Thread-175293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:14:55.638 [DEBUG] [Thread-175293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:14:55.679 [DEBUG] [Thread-175293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:14:55.680 [DEBUG] [Thread-175293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:14:55.683 [DEBUG] [Thread-175293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:14:55.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:14:55.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:14:55.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:14:55.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:14:55.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:14:55.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:14:55.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:14:55.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:14:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:14:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.718521 -999.00  +12.00  17.38     97  +11.60 1 3 1 3 1     0    0 0.37 0.07 ----- 17.4 17.4 289.6 22.4 13.0 -1.1 12.9 -0.3 12.6 -0.4 12.9 -0.3
2026-04-11T19:14:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:14:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:14:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.718521
2026-04-11T19:14:55.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:14:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:14:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:14:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:14:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:14:55.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:14:16', tmtdew=0.07119, humidity=99.8241, cloud=0.0, wind=20.362, temperature=11.9877, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:14:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:14:55.711 [DEBUG] [Thread-175293] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:14:55.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:14:55.806 [DEBUG] [Thread-175296] [transport.py] [_log()] starting thread (client mode): 0xae50ada0
2026-04-11T19:14:55.806 [DEBUG] [Thread-175296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:14:55.820 [DEBUG] [Thread-175296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:14:55.820 [INFO] [Thread-175296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] client lang: <none>
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] server lang: <none>
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] kex follows: False
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] Compression: none
2026-04-11T19:14:55.828 [DEBUG] [Thread-175296] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:14:55.886 [DEBUG] [Thread-175296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:14:55.887 [DEBUG] [Thread-175296] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:14:55.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:14:55.888 [DEBUG] [Thread-175296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:14:55.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:14:55.942 [DEBUG] [Thread-175296] [transport.py] [_log()] userauth is OK
2026-04-11T19:14:55.943 [DEBUG] [Thread-175296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:14:55.943 [DEBUG] [Thread-175296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:14:55.943 [DEBUG] [Thread-175296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:14:55.943 [DEBUG] [Thread-175296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:14:55.961 [INFO] [Thread-175296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:14:55.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:14:55.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:14:56.796 [DEBUG] [Thread-175296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:14:56.796 [DEBUG] [Thread-175296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:14:56.843 [DEBUG] [Thread-175296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:14:56.844 [DEBUG] [Thread-175296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:14:56.853 [DEBUG] [Thread-175296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:14:56.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:14:56.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:14:56.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:14:56.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:14:56.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:14:56.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:14:56.888 [DEBUG] [Thread-175296] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:15:00.878 [DEBUG] [Thread-175298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:15:01.256 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:15:01.257 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:15:15.928 [DEBUG] [Thread-175299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:15:24.936 [DEBUG] [Thread-175300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:15:26.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:15:26.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:15:26.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-04-11T19:15:28.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 14, 52), 0.02206, 99.7808, 0.0, 20.9246, 12.5081, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:15:28.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:14:52
2026-04-11T19:15:28.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:15:28.818 [DEBUG] [Thread-175301] [transport.py] [_log()] starting thread (client mode): 0xae5a73d0
2026-04-11T19:15:28.818 [DEBUG] [Thread-175301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:15:28.838 [DEBUG] [Thread-175301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:15:28.838 [INFO] [Thread-175301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:15:28.841 [DEBUG] [Thread-175301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:15:28.841 [DEBUG] [Thread-175301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] client lang: <none>
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] server lang: <none>
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] kex follows: False
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] Compression: none
2026-04-11T19:15:28.842 [DEBUG] [Thread-175301] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:15:28.859 [DEBUG] [Thread-175301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:15:28.860 [DEBUG] [Thread-175301] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:15:28.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:15:28.860 [DEBUG] [Thread-175301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:15:28.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:15:28.862 [DEBUG] [Thread-175301] [transport.py] [_log()] userauth is OK
2026-04-11T19:15:28.863 [DEBUG] [Thread-175301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:15:28.863 [DEBUG] [Thread-175301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:15:28.863 [DEBUG] [Thread-175301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:15:28.863 [DEBUG] [Thread-175301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:15:28.887 [INFO] [Thread-175301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:15:28.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:15:29.519 [DEBUG] [Thread-175301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:15:29.520 [DEBUG] [Thread-175301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:15:29.520 [DEBUG] [Thread-175301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:15:29.561 [DEBUG] [Thread-175301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:15:29.561 [DEBUG] [Thread-175301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:15:29.565 [DEBUG] [Thread-175301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:15:29.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:15:29.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:15:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:15:29.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:15:29.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:15:29.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:15:29.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:15:29.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:15:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:15:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.718868 -999.00  +12.00  13.72     97  +11.70 1 3 1 3 1     0    0 0.37 -0.09 ----- 13.7 13.7 289.2 22.1 13.0 -1.2 12.8 -0.1 12.5 -0.5 12.9 -0.4
2026-04-11T19:15:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:15:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:15:29.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.718868
2026-04-11T19:15:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:15:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:15:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:15:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:15:29.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:15:29.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:14:52', tmtdew=0.02206, humidity=99.7808, cloud=0.0, wind=20.9246, temperature=12.5081, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:15:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:15:29.594 [DEBUG] [Thread-175301] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:15:29.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:15:29.689 [DEBUG] [Thread-175304] [transport.py] [_log()] starting thread (client mode): 0xae5a6350
2026-04-11T19:15:29.689 [DEBUG] [Thread-175304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:15:29.704 [DEBUG] [Thread-175304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:15:29.705 [INFO] [Thread-175304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:15:29.712 [DEBUG] [Thread-175304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:15:29.713 [DEBUG] [Thread-175304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:15:29.713 [DEBUG] [Thread-175304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:15:29.713 [DEBUG] [Thread-175304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:15:29.713 [DEBUG] [Thread-175304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:15:29.713 [DEBUG] [Thread-175304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] client lang: <none>
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] server lang: <none>
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] kex follows: False
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] Compression: none
2026-04-11T19:15:29.714 [DEBUG] [Thread-175304] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:15:29.771 [DEBUG] [Thread-175304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:15:29.772 [DEBUG] [Thread-175304] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:15:29.772 [DEBUG] [Thread-175304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:15:29.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:15:29.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:15:29.827 [DEBUG] [Thread-175304] [transport.py] [_log()] userauth is OK
2026-04-11T19:15:29.828 [DEBUG] [Thread-175304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:15:29.828 [DEBUG] [Thread-175304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:15:29.828 [DEBUG] [Thread-175304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:15:29.828 [DEBUG] [Thread-175304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:15:29.847 [INFO] [Thread-175304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:15:29.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:15:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:15:30.682 [DEBUG] [Thread-175304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:15:30.682 [DEBUG] [Thread-175304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:15:30.730 [DEBUG] [Thread-175304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:15:30.730 [DEBUG] [Thread-175304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:15:30.739 [DEBUG] [Thread-175304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:15:30.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:15:30.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-04-11T19:15:30.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-04-11T19:15:30.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:15:30.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:15:30.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:15:30.776 [DEBUG] [Thread-175304] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:15:30.967 [DEBUG] [Thread-175306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:15:46.027 [DEBUG] [Thread-175307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:00.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:16:00.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:16:00.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:16:01.065 [DEBUG] [Thread-175308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:01.468 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:01.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:02.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 15, 27), 0.05844, 99.9073, 0.0, 18.351, 12.0543, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:16:02.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:15:27
2026-04-11T19:16:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:16:02.572 [DEBUG] [Thread-175309] [transport.py] [_log()] starting thread (client mode): 0xae5f36d0
2026-04-11T19:16:02.572 [DEBUG] [Thread-175309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:16:02.592 [DEBUG] [Thread-175309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:16:02.592 [INFO] [Thread-175309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] client lang: <none>
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] server lang: <none>
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] kex follows: False
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:16:02.596 [DEBUG] [Thread-175309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:16:02.597 [DEBUG] [Thread-175309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:16:02.597 [DEBUG] [Thread-175309] [transport.py] [_log()] Compression: none
2026-04-11T19:16:02.597 [DEBUG] [Thread-175309] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:16:02.613 [DEBUG] [Thread-175309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:16:02.614 [DEBUG] [Thread-175309] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:16:02.614 [DEBUG] [Thread-175309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:16:02.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:16:02.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:16:02.616 [DEBUG] [Thread-175309] [transport.py] [_log()] userauth is OK
2026-04-11T19:16:02.616 [DEBUG] [Thread-175309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:16:02.616 [DEBUG] [Thread-175309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:16:02.616 [DEBUG] [Thread-175309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:16:02.616 [DEBUG] [Thread-175309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:16:02.633 [INFO] [Thread-175309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:16:02.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:16:03.299 [DEBUG] [Thread-175309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:16:03.299 [DEBUG] [Thread-175309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:16:03.299 [DEBUG] [Thread-175309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:16:03.340 [DEBUG] [Thread-175309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:16:03.340 [DEBUG] [Thread-175309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:16:03.344 [DEBUG] [Thread-175309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:16:03.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:16:03.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:16:03.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:16:03.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:16:03.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:16:03.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:16:03.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:16:03.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:16:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:16:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.719215 -999.00  +12.00  16.93     97  +11.70 1 3 1 3 1     0    0 0.36 -0.38 ----- 16.9 16.9 289.4 20.0 13.0 -1.1 12.8 -0.1 12.6 -0.3 12.9 -0.1
2026-04-11T19:16:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:16:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:16:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.719215
2026-04-11T19:16:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:16:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:16:03.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:16:03.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:16:03.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:16:03.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:15:27', tmtdew=0.05844, humidity=99.9073, cloud=0.0, wind=18.351, temperature=12.0543, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:15:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:16:03.373 [DEBUG] [Thread-175309] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:16:03.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:16:03.467 [DEBUG] [Thread-175312] [transport.py] [_log()] starting thread (client mode): 0xae509120
2026-04-11T19:16:03.467 [DEBUG] [Thread-175312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:16:03.481 [DEBUG] [Thread-175312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:16:03.482 [INFO] [Thread-175312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] client lang: <none>
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] server lang: <none>
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] kex follows: False
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] Compression: none
2026-04-11T19:16:03.489 [DEBUG] [Thread-175312] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:16:03.548 [DEBUG] [Thread-175312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:16:03.548 [DEBUG] [Thread-175312] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:16:03.549 [DEBUG] [Thread-175312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:16:03.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:16:03.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:16:03.605 [DEBUG] [Thread-175312] [transport.py] [_log()] userauth is OK
2026-04-11T19:16:03.605 [DEBUG] [Thread-175312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:16:03.605 [DEBUG] [Thread-175312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:16:03.605 [DEBUG] [Thread-175312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:16:03.605 [DEBUG] [Thread-175312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:16:03.624 [INFO] [Thread-175312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:16:03.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:16:03.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:16:04.466 [DEBUG] [Thread-175312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:16:04.466 [DEBUG] [Thread-175312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:16:04.515 [DEBUG] [Thread-175312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:16:04.515 [DEBUG] [Thread-175312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:16:04.524 [DEBUG] [Thread-175312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:16:04.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:16:04.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-04-11T19:16:04.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-04-11T19:16:04.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:16:04.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:16:04.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:16:04.559 [DEBUG] [Thread-175312] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:16:16.104 [DEBUG] [Thread-175314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:25.013 [DEBUG] [Thread-175315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:31.161 [DEBUG] [Thread-175316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:16:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:16:34.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:16:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:16:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 16, 3), 0.05591, 99.9239, 0.0, 19.0037, 12.0543, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:16:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:16:03
2026-04-11T19:16:36.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:16:36.414 [DEBUG] [Thread-175317] [transport.py] [_log()] starting thread (client mode): 0xae515270
2026-04-11T19:16:36.414 [DEBUG] [Thread-175317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:16:36.434 [DEBUG] [Thread-175317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:16:36.434 [INFO] [Thread-175317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:16:36.437 [DEBUG] [Thread-175317] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:16:36.437 [DEBUG] [Thread-175317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:16:36.437 [DEBUG] [Thread-175317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:16:36.437 [DEBUG] [Thread-175317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:36.437 [DEBUG] [Thread-175317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] client lang: <none>
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] server lang: <none>
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] kex follows: False
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] Compression: none
2026-04-11T19:16:36.438 [DEBUG] [Thread-175317] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:16:36.457 [DEBUG] [Thread-175317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:16:36.457 [DEBUG] [Thread-175317] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:16:36.458 [DEBUG] [Thread-175317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:16:36.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:16:36.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:16:36.460 [DEBUG] [Thread-175317] [transport.py] [_log()] userauth is OK
2026-04-11T19:16:36.461 [DEBUG] [Thread-175317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:16:36.461 [DEBUG] [Thread-175317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:16:36.461 [DEBUG] [Thread-175317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:16:36.461 [DEBUG] [Thread-175317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:16:36.484 [INFO] [Thread-175317] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:16:36.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:16:37.115 [DEBUG] [Thread-175317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:16:37.115 [DEBUG] [Thread-175317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:16:37.116 [DEBUG] [Thread-175317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:16:37.156 [DEBUG] [Thread-175317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:16:37.156 [DEBUG] [Thread-175317] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:16:37.160 [DEBUG] [Thread-175317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:16:37.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:16:37.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:16:37.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:16:37.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:16:37.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:16:37.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:16:37.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:16:37.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:16:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:16:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.719563 -999.00  +12.00  17.04     97  +11.70 1 3 1 3 1     0    0 0.36 -0.61 ----- 17.0 17.0 294.0 21.0 13.1 -1.0 12.9 -0.2 12.6 -0.3 12.9 -0.0
2026-04-11T19:16:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:16:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:16:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.719563
2026-04-11T19:16:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:16:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:16:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:16:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:16:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:16:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:16:03', tmtdew=0.05591, humidity=99.9239, cloud=0.0, wind=19.0037, temperature=12.0543, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:16:10.243', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:16:37.187 [DEBUG] [Thread-175317] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:16:37.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:16:37.288 [DEBUG] [Thread-175320] [transport.py] [_log()] starting thread (client mode): 0xae5f0250
2026-04-11T19:16:37.289 [DEBUG] [Thread-175320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:16:37.302 [DEBUG] [Thread-175320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:16:37.303 [INFO] [Thread-175320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:16:37.310 [DEBUG] [Thread-175320] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:16:37.310 [DEBUG] [Thread-175320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:16:37.310 [DEBUG] [Thread-175320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:16:37.310 [DEBUG] [Thread-175320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:37.310 [DEBUG] [Thread-175320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] client lang: <none>
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] server lang: <none>
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] kex follows: False
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:16:37.311 [DEBUG] [Thread-175320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:16:37.312 [DEBUG] [Thread-175320] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:16:37.312 [DEBUG] [Thread-175320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:16:37.312 [DEBUG] [Thread-175320] [transport.py] [_log()] Compression: none
2026-04-11T19:16:37.312 [DEBUG] [Thread-175320] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:16:37.371 [DEBUG] [Thread-175320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:16:37.372 [DEBUG] [Thread-175320] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:16:37.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:16:37.374 [DEBUG] [Thread-175320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:16:37.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:16:37.430 [DEBUG] [Thread-175320] [transport.py] [_log()] userauth is OK
2026-04-11T19:16:37.430 [DEBUG] [Thread-175320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:16:37.430 [DEBUG] [Thread-175320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:16:37.430 [DEBUG] [Thread-175320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:16:37.430 [DEBUG] [Thread-175320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:16:37.452 [INFO] [Thread-175320] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:16:37.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:16:37.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:16:38.257 [DEBUG] [Thread-175320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:16:38.257 [DEBUG] [Thread-175320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:16:38.307 [DEBUG] [Thread-175320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:16:38.308 [DEBUG] [Thread-175320] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:16:38.320 [DEBUG] [Thread-175320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:16:38.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:16:38.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:16:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:16:38.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:16:38.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:16:38.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:16:38.371 [DEBUG] [Thread-175320] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:16:46.198 [DEBUG] [Thread-175322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:01.260 [DEBUG] [Thread-175323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:01.699 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:01.701 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:08.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:17:08.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:17:08.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-04-11T19:17:09.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 16, 38), 0.02692, 99.7489, 0.0, 18.949, 12.5089, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:17:09.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:16:38
2026-04-11T19:17:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:17:10.273 [DEBUG] [Thread-175324] [transport.py] [_log()] starting thread (client mode): 0xae516260
2026-04-11T19:17:10.273 [DEBUG] [Thread-175324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:17:10.292 [DEBUG] [Thread-175324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:17:10.292 [INFO] [Thread-175324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:17:10.293 [DEBUG] [Thread-175324] [transport.py] [_log()] client lang: <none>
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] server lang: <none>
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] kex follows: False
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] Compression: none
2026-04-11T19:17:10.294 [DEBUG] [Thread-175324] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:17:10.307 [DEBUG] [Thread-175324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:17:10.308 [DEBUG] [Thread-175324] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:17:10.308 [DEBUG] [Thread-175324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:17:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:17:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:17:10.310 [DEBUG] [Thread-175324] [transport.py] [_log()] userauth is OK
2026-04-11T19:17:10.310 [DEBUG] [Thread-175324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:17:10.310 [DEBUG] [Thread-175324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:17:10.311 [DEBUG] [Thread-175324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:17:10.311 [DEBUG] [Thread-175324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:17:10.328 [INFO] [Thread-175324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:17:10.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:17:10.973 [DEBUG] [Thread-175324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:17:10.974 [DEBUG] [Thread-175324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:17:10.974 [DEBUG] [Thread-175324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:17:11.014 [DEBUG] [Thread-175324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:17:11.014 [DEBUG] [Thread-175324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:17:11.018 [DEBUG] [Thread-175324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:17:11.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:17:11.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:17:11.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:17:11.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:17:11.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:17:11.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:17:11.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:17:11.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:17:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:17:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.719910 -999.00  +12.00  16.07     97  +11.70 1 3 1 3 1     0    0 0.34 -0.81 ----- 16.1 16.1 281.0 18.4 13.1 -2.0 12.9 -0.2 12.6 -0.2 13.0 -0.1
2026-04-11T19:17:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:17:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:17:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.719910
2026-04-11T19:17:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:17:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:17:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:17:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:17:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:17:11.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:16:38', tmtdew=0.02692, humidity=99.7489, cloud=0.0, wind=18.949, temperature=12.5089, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:16:40.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:17:11.041 [DEBUG] [Thread-175324] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:17:11.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:17:11.135 [DEBUG] [Thread-175327] [transport.py] [_log()] starting thread (client mode): 0xb0f6c250
2026-04-11T19:17:11.135 [DEBUG] [Thread-175327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:17:11.150 [DEBUG] [Thread-175327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:17:11.150 [INFO] [Thread-175327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:17:11.157 [DEBUG] [Thread-175327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:17:11.157 [DEBUG] [Thread-175327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] client lang: <none>
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] server lang: <none>
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] kex follows: False
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] Compression: none
2026-04-11T19:17:11.158 [DEBUG] [Thread-175327] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:17:11.216 [DEBUG] [Thread-175327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:17:11.216 [DEBUG] [Thread-175327] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:17:11.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:17:11.218 [DEBUG] [Thread-175327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:17:11.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:17:11.271 [DEBUG] [Thread-175327] [transport.py] [_log()] userauth is OK
2026-04-11T19:17:11.271 [DEBUG] [Thread-175327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:17:11.272 [DEBUG] [Thread-175327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:17:11.272 [DEBUG] [Thread-175327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:17:11.272 [DEBUG] [Thread-175327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:17:11.290 [INFO] [Thread-175327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:17:11.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:17:11.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:17:12.104 [DEBUG] [Thread-175327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:17:12.104 [DEBUG] [Thread-175327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:17:12.152 [DEBUG] [Thread-175327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:17:12.153 [DEBUG] [Thread-175327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:17:12.162 [DEBUG] [Thread-175327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:17:12.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:17:12.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-04-11T19:17:12.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-04-11T19:17:12.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:17:12.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:17:12.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:17:12.198 [DEBUG] [Thread-175327] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:17:16.297 [DEBUG] [Thread-175329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:25.074 [DEBUG] [Thread-175330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:31.341 [DEBUG] [Thread-175331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:17:42.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:17:42.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:17: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-04-11T19:17:43.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 17, 13), 0.01346, 99.8745, 0.0, 18.6332, 12.0544, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:17:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:17:13
2026-04-11T19:17:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:17:44.127 [DEBUG] [Thread-175332] [transport.py] [_log()] starting thread (client mode): 0xa79537f0
2026-04-11T19:17:44.127 [DEBUG] [Thread-175332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:17:44.149 [DEBUG] [Thread-175332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:17:44.149 [INFO] [Thread-175332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:17:44.152 [DEBUG] [Thread-175332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:17:44.152 [DEBUG] [Thread-175332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] client lang: <none>
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] server lang: <none>
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] kex follows: False
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:17:44.153 [DEBUG] [Thread-175332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:17:44.154 [DEBUG] [Thread-175332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:17:44.154 [DEBUG] [Thread-175332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:17:44.154 [DEBUG] [Thread-175332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:17:44.154 [DEBUG] [Thread-175332] [transport.py] [_log()] Compression: none
2026-04-11T19:17:44.154 [DEBUG] [Thread-175332] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:17:44.175 [DEBUG] [Thread-175332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:17:44.175 [DEBUG] [Thread-175332] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:17:44.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:17:44.176 [DEBUG] [Thread-175332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:17:44.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:17:44.178 [DEBUG] [Thread-175332] [transport.py] [_log()] userauth is OK
2026-04-11T19:17:44.179 [DEBUG] [Thread-175332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:17:44.179 [DEBUG] [Thread-175332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:17:44.179 [DEBUG] [Thread-175332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:17:44.179 [DEBUG] [Thread-175332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:17:44.214 [INFO] [Thread-175332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:17:44.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:17:44.833 [DEBUG] [Thread-175332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:17:44.834 [DEBUG] [Thread-175332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:17:44.834 [DEBUG] [Thread-175332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:17:44.874 [DEBUG] [Thread-175332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:17:44.874 [DEBUG] [Thread-175332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:17:44.878 [DEBUG] [Thread-175332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:17:44.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:17:44.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:17:44.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:17:44.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:17:44.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:17:44.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:17:44.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:17:44.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:17:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:17:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.720257 -999.00  +12.00  13.18     97  +11.60 1 3 1 3 1     0    0 0.34 -0.76 ----- 13.2 13.2 295.8 16.8 13.1 -1.7 12.9 -0.2 12.6 -0.2 13.0 -0.1
2026-04-11T19:17:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:17:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:17:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.720257
2026-04-11T19:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:17:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:17:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:17:13', tmtdew=0.01346, humidity=99.8745, cloud=0.0, wind=18.6332, temperature=12.0544, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:17:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:17:44.904 [DEBUG] [Thread-175332] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:17:44.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:17:45.000 [DEBUG] [Thread-175335] [transport.py] [_log()] starting thread (client mode): 0xb0f6da80
2026-04-11T19:17:45.000 [DEBUG] [Thread-175335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:17:45.015 [DEBUG] [Thread-175335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:17:45.015 [INFO] [Thread-175335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:17:45.022 [DEBUG] [Thread-175335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] client lang: <none>
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] server lang: <none>
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] kex follows: False
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:17:45.023 [DEBUG] [Thread-175335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:17:45.024 [DEBUG] [Thread-175335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:17:45.024 [DEBUG] [Thread-175335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:17:45.024 [DEBUG] [Thread-175335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:17:45.024 [DEBUG] [Thread-175335] [transport.py] [_log()] Compression: none
2026-04-11T19:17:45.024 [DEBUG] [Thread-175335] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:17:45.081 [DEBUG] [Thread-175335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:17:45.082 [DEBUG] [Thread-175335] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:17:45.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:17:45.083 [DEBUG] [Thread-175335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:17:45.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:17:45.141 [DEBUG] [Thread-175335] [transport.py] [_log()] userauth is OK
2026-04-11T19:17:45.141 [DEBUG] [Thread-175335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:17:45.141 [DEBUG] [Thread-175335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:17:45.141 [DEBUG] [Thread-175335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:17:45.142 [DEBUG] [Thread-175335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:17:45.160 [INFO] [Thread-175335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:17:45.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:17:45.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:17:45.990 [DEBUG] [Thread-175335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:17:45.991 [DEBUG] [Thread-175335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:17:46.038 [DEBUG] [Thread-175335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:17:46.039 [DEBUG] [Thread-175335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:17:46.048 [DEBUG] [Thread-175335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:17:46.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:17:46.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-04-11T19:17:46.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-04-11T19:17:46.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:17:46.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:17:46.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:17:46.087 [DEBUG] [Thread-175335] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:17:46.381 [DEBUG] [Thread-175337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:01.431 [DEBUG] [Thread-175338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:01.919 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:01.920 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:18:16.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:18:16.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-04-11T19:18:16.471 [DEBUG] [Thread-175339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:17.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 17, 49), 0.02176, 99.7826, 0.0, 18.0317, 12.5423, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:18:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:17:49
2026-04-11T19:18:17.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:18:17.847 [DEBUG] [Thread-175340] [transport.py] [_log()] starting thread (client mode): 0xb0f6dcf0
2026-04-11T19:18:17.847 [DEBUG] [Thread-175340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:18:17.867 [DEBUG] [Thread-175340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:18:17.867 [INFO] [Thread-175340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] client lang: <none>
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] server lang: <none>
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] kex follows: False
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] Compression: none
2026-04-11T19:18:17.870 [DEBUG] [Thread-175340] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:18:17.885 [DEBUG] [Thread-175340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:18:17.885 [DEBUG] [Thread-175340] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:18:17.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:18:17.886 [DEBUG] [Thread-175340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:18:17.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:18:17.888 [DEBUG] [Thread-175340] [transport.py] [_log()] userauth is OK
2026-04-11T19:18:17.888 [DEBUG] [Thread-175340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:18:17.888 [DEBUG] [Thread-175340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:18:17.889 [DEBUG] [Thread-175340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:18:17.889 [DEBUG] [Thread-175340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:18:17.909 [INFO] [Thread-175340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:18:17.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:18:18.526 [DEBUG] [Thread-175340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:18:18.526 [DEBUG] [Thread-175340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:18:18.526 [DEBUG] [Thread-175340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:18:18.567 [DEBUG] [Thread-175340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:18:18.567 [DEBUG] [Thread-175340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:18:18.570 [DEBUG] [Thread-175340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:18:18.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:18:18.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:18:18.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:18:18.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:18:18.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:18:18.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:18:18.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:18:18.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:18:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:18:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.720604 -999.00  +12.00  13.72     97  +11.60 1 3 1 3 1     0    0 0.36 -0.52 ----- 13.7 13.7 292.8 18.8 13.1 -0.6 12.9 -0.2 12.6 -0.5 12.9 0.0
2026-04-11T19:18:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:18:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:18:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.720604
2026-04-11T19:18:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:17:49', tmtdew=0.02176, humidity=99.7826, cloud=0.0, wind=18.0317, temperature=12.5423, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:17:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:18:18.596 [DEBUG] [Thread-175340] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:18:18.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:18:18.687 [DEBUG] [Thread-175343] [transport.py] [_log()] starting thread (client mode): 0xae50b7f0
2026-04-11T19:18:18.687 [DEBUG] [Thread-175343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:18:18.707 [DEBUG] [Thread-175343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:18:18.708 [INFO] [Thread-175343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:18:18.718 [DEBUG] [Thread-175343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] client lang: <none>
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] server lang: <none>
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] kex follows: False
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:18:18.719 [DEBUG] [Thread-175343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:18:18.720 [DEBUG] [Thread-175343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:18:18.720 [DEBUG] [Thread-175343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:18:18.720 [DEBUG] [Thread-175343] [transport.py] [_log()] Compression: none
2026-04-11T19:18:18.720 [DEBUG] [Thread-175343] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:18:18.775 [DEBUG] [Thread-175343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:18:18.776 [DEBUG] [Thread-175343] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:18:18.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:18:18.777 [DEBUG] [Thread-175343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:18:18.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:18:18.831 [DEBUG] [Thread-175343] [transport.py] [_log()] userauth is OK
2026-04-11T19:18:18.831 [DEBUG] [Thread-175343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:18:18.832 [DEBUG] [Thread-175343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:18:18.832 [DEBUG] [Thread-175343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:18:18.832 [DEBUG] [Thread-175343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:18:18.851 [INFO] [Thread-175343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:18:18.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:18:18.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:18:19.682 [DEBUG] [Thread-175343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:18:19.683 [DEBUG] [Thread-175343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:18:19.731 [DEBUG] [Thread-175343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:18:19.731 [DEBUG] [Thread-175343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:18:19.741 [DEBUG] [Thread-175343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:18:19.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:18:19.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:18:19.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:18:19.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:18:19.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:18:19.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:18:19.777 [DEBUG] [Thread-175343] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:18:25.134 [DEBUG] [Thread-175345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:31.508 [DEBUG] [Thread-175346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:46.562 [DEBUG] [Thread-175347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:18:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:18:49.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:18:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:18:51.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 18, 9), 0.013415, 99.8747, 0.0, 17.2566, 12.0712, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:18:51.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:18:09
2026-04-11T19:18:51.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:18:51.676 [DEBUG] [Thread-175348] [transport.py] [_log()] starting thread (client mode): 0xb0f541c0
2026-04-11T19:18:51.676 [DEBUG] [Thread-175348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:18:51.697 [DEBUG] [Thread-175348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:18:51.698 [INFO] [Thread-175348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:18:51.700 [DEBUG] [Thread-175348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] client lang: <none>
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] server lang: <none>
2026-04-11T19:18:51.701 [DEBUG] [Thread-175348] [transport.py] [_log()] kex follows: False
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] Compression: none
2026-04-11T19:18:51.702 [DEBUG] [Thread-175348] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:18:51.722 [DEBUG] [Thread-175348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:18:51.723 [DEBUG] [Thread-175348] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:18:51.723 [DEBUG] [Thread-175348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:18:51.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:18:51.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:18:51.725 [DEBUG] [Thread-175348] [transport.py] [_log()] userauth is OK
2026-04-11T19:18:51.725 [DEBUG] [Thread-175348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:18:51.725 [DEBUG] [Thread-175348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:18:51.726 [DEBUG] [Thread-175348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:18:51.726 [DEBUG] [Thread-175348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:18:51.760 [INFO] [Thread-175348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:18:51.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:18:52.412 [DEBUG] [Thread-175348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:18:52.412 [DEBUG] [Thread-175348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:18:52.412 [DEBUG] [Thread-175348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:18:52.453 [DEBUG] [Thread-175348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:18:52.453 [DEBUG] [Thread-175348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:18:52.456 [DEBUG] [Thread-175348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:18:52.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:18:52.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:18:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:18:52.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:18:52.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:18:52.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:18:52.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:18:52.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:18:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:18:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.720951 -999.00  +12.00  14.14     97  +11.70 1 3 1 3 1     0    0 0.36 -0.53 ----- 14.1 14.1 292.6 18.5 13.1 -0.5 12.9 -0.2 12.6 -0.3 13.0 -0.8
2026-04-11T19:18:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:18:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:18:52.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.720951
2026-04-11T19:18:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:18:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:18:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:18:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:18:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:18:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:18:09', tmtdew=0.013415, humidity=99.8747, cloud=0.0, wind=17.2566, temperature=12.0712, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:18:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:18:52.482 [DEBUG] [Thread-175348] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:18:52.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:18:52.577 [DEBUG] [Thread-175351] [transport.py] [_log()] starting thread (client mode): 0xae5a5030
2026-04-11T19:18:52.577 [DEBUG] [Thread-175351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:18:52.592 [DEBUG] [Thread-175351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:18:52.593 [INFO] [Thread-175351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:18:52.600 [DEBUG] [Thread-175351] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:18:52.601 [DEBUG] [Thread-175351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:18:52.601 [DEBUG] [Thread-175351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:18:52.601 [DEBUG] [Thread-175351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:52.601 [DEBUG] [Thread-175351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:18:52.601 [DEBUG] [Thread-175351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:52.601 [DEBUG] [Thread-175351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] client lang: <none>
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] server lang: <none>
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] kex follows: False
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:18:52.602 [DEBUG] [Thread-175351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:18:52.603 [DEBUG] [Thread-175351] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:18:52.603 [DEBUG] [Thread-175351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:18:52.603 [DEBUG] [Thread-175351] [transport.py] [_log()] Compression: none
2026-04-11T19:18:52.603 [DEBUG] [Thread-175351] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:18:52.662 [DEBUG] [Thread-175351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:18:52.662 [DEBUG] [Thread-175351] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:18:52.663 [DEBUG] [Thread-175351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:18:52.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:18:52.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:18:52.725 [DEBUG] [Thread-175351] [transport.py] [_log()] userauth is OK
2026-04-11T19:18:52.725 [DEBUG] [Thread-175351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:18:52.726 [DEBUG] [Thread-175351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:18:52.726 [DEBUG] [Thread-175351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:18:52.726 [DEBUG] [Thread-175351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:18:52.745 [INFO] [Thread-175351] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:18:52.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:18:52.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:18:53.585 [DEBUG] [Thread-175351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:18:53.586 [DEBUG] [Thread-175351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:18:53.634 [DEBUG] [Thread-175351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:18:53.634 [DEBUG] [Thread-175351] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:18:53.644 [DEBUG] [Thread-175351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:18:53.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:18:53.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-04-11T19:18:53.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-04-11T19:18:53.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:18:53.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:18:53.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:18:53.682 [DEBUG] [Thread-175351] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:19:01.602 [DEBUG] [Thread-175353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:02.137 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:02.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:16.655 [DEBUG] [Thread-175354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:23.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:19:23.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:19:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:19:25.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 18, 9), 0.013415, 99.8747, 0.0, 17.2566, 12.0712, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:19:25.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:18:09
2026-04-11T19:19:25.192 [DEBUG] [Thread-175355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:25.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:19:25.589 [DEBUG] [Thread-175356] [transport.py] [_log()] starting thread (client mode): 0xae5f20b0
2026-04-11T19:19:25.589 [DEBUG] [Thread-175356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:19:25.610 [DEBUG] [Thread-175356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:19:25.610 [INFO] [Thread-175356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] client lang: <none>
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] server lang: <none>
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] kex follows: False
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] Compression: none
2026-04-11T19:19:25.614 [DEBUG] [Thread-175356] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:19:25.627 [DEBUG] [Thread-175356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:19:25.628 [DEBUG] [Thread-175356] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:19:25.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:19:25.629 [DEBUG] [Thread-175356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:19:25.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:19:25.631 [DEBUG] [Thread-175356] [transport.py] [_log()] userauth is OK
2026-04-11T19:19:25.631 [DEBUG] [Thread-175356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:19:25.631 [DEBUG] [Thread-175356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:19:25.632 [DEBUG] [Thread-175356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:19:25.632 [DEBUG] [Thread-175356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:19:25.655 [INFO] [Thread-175356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:19:25.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:19:26.403 [DEBUG] [Thread-175356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:19:26.403 [DEBUG] [Thread-175356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:19:26.403 [DEBUG] [Thread-175356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:19:26.443 [DEBUG] [Thread-175356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:19:26.444 [DEBUG] [Thread-175356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:19:26.446 [DEBUG] [Thread-175356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:19:26.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:19:26.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:19:26.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:19:26.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:19:26.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:19:26.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:19:26.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:19:26.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:19:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:19:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.721299 -999.00  +12.00  17.14     97  +11.60 1 3 1 3 1     0    0 0.35 -0.63 ----- 17.1 17.1 294.0 21.7 13.1 -0.5 12.9 -0.2 12.6 -0.2 13.0 -0.7
2026-04-11T19:19:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:19:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:19:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.721299
2026-04-11T19:19:26.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:19:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:19:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:19:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:19:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:19:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:18:09', tmtdew=0.013415, humidity=99.8747, cloud=0.0, wind=17.2566, temperature=12.0712, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:18:40.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:19:26.469 [DEBUG] [Thread-175356] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:19:26.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:19:26.565 [DEBUG] [Thread-175359] [transport.py] [_log()] starting thread (client mode): 0xae5a4e80
2026-04-11T19:19:26.565 [DEBUG] [Thread-175359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:19:26.583 [DEBUG] [Thread-175359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:19:26.583 [INFO] [Thread-175359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:19:26.592 [DEBUG] [Thread-175359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:19:26.592 [DEBUG] [Thread-175359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] client lang: <none>
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] server lang: <none>
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] kex follows: False
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] Compression: none
2026-04-11T19:19:26.593 [DEBUG] [Thread-175359] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:19:26.647 [DEBUG] [Thread-175359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:19:26.648 [DEBUG] [Thread-175359] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:19:26.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:19:26.649 [DEBUG] [Thread-175359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:19:26.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:19:26.702 [DEBUG] [Thread-175359] [transport.py] [_log()] userauth is OK
2026-04-11T19:19:26.703 [DEBUG] [Thread-175359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:19:26.703 [DEBUG] [Thread-175359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:19:26.703 [DEBUG] [Thread-175359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:19:26.703 [DEBUG] [Thread-175359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:19:26.726 [INFO] [Thread-175359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:19:26.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:19:26.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:19:27.602 [DEBUG] [Thread-175359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:19:27.602 [DEBUG] [Thread-175359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:19:27.650 [DEBUG] [Thread-175359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:19:27.650 [DEBUG] [Thread-175359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:19:27.658 [DEBUG] [Thread-175359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:19:27.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:19:27.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-04-11T19:19:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:19:27.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:19:27.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:19:27.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:19:27.692 [DEBUG] [Thread-175359] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:19:31.690 [DEBUG] [Thread-175361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:46.752 [DEBUG] [Thread-175362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:19:57.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:19:57.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:19:57.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:19:58.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 18, 9), 0.013415, 99.8747, 0.0, 17.2566, 12.0712, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:19:58.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:18:09
2026-04-11T19:19:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:19:59.551 [DEBUG] [Thread-175363] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-11T19:19:59.551 [DEBUG] [Thread-175363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:19:59.570 [DEBUG] [Thread-175363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:19:59.570 [INFO] [Thread-175363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] client lang: <none>
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] server lang: <none>
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] kex follows: False
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] Compression: none
2026-04-11T19:19:59.573 [DEBUG] [Thread-175363] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:19:59.587 [DEBUG] [Thread-175363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:19:59.587 [DEBUG] [Thread-175363] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:19:59.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:19:59.588 [DEBUG] [Thread-175363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:19:59.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:19:59.588 [DEBUG] [Thread-175363] [transport.py] [_log()] userauth is OK
2026-04-11T19:19:59.588 [DEBUG] [Thread-175363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:19:59.588 [DEBUG] [Thread-175363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:19:59.588 [DEBUG] [Thread-175363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:19:59.588 [DEBUG] [Thread-175363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:19:59.603 [INFO] [Thread-175363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:19:59.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:20:00.356 [DEBUG] [Thread-175363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:20:00.356 [DEBUG] [Thread-175363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:20:00.356 [DEBUG] [Thread-175363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:20:00.397 [DEBUG] [Thread-175363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:20:00.397 [DEBUG] [Thread-175363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:20:00.399 [DEBUG] [Thread-175363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:20:00.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:20:00.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:20:00.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:20:00.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:20:00.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:20:00.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:20:00.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.721993 -999.00  +11.90  12.92     97  +11.60 1 3 1 3 1     0    0 0.34 -1.09 ----- 12.9 12.9 283.2 17.1 13.1 -0.7 12.9 -0.2 12.5 -0.4 13.0 -0.8
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.721993
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:20:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:18:09', tmtdew=0.013415, humidity=99.8747, cloud=0.0, wind=17.2566, temperature=12.0712, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:19:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:20:00.416 [DEBUG] [Thread-175363] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:20:00.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:20:00.501 [DEBUG] [Thread-175366] [transport.py] [_log()] starting thread (client mode): 0xb0f56da0
2026-04-11T19:20:00.501 [DEBUG] [Thread-175366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:20:00.517 [DEBUG] [Thread-175366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:20:00.517 [INFO] [Thread-175366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:20:00.524 [DEBUG] [Thread-175366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] client lang: <none>
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] server lang: <none>
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] kex follows: False
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] Compression: none
2026-04-11T19:20:00.525 [DEBUG] [Thread-175366] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:20:00.586 [DEBUG] [Thread-175366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:20:00.586 [DEBUG] [Thread-175366] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:20:00.587 [DEBUG] [Thread-175366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:20:00.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:20:00.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:20:00.642 [DEBUG] [Thread-175366] [transport.py] [_log()] userauth is OK
2026-04-11T19:20:00.642 [DEBUG] [Thread-175366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:20:00.642 [DEBUG] [Thread-175366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:20:00.642 [DEBUG] [Thread-175366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:20:00.642 [DEBUG] [Thread-175366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:20:00.667 [INFO] [Thread-175366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:20:00.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:20:00.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:20:01.512 [DEBUG] [Thread-175366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:20:01.513 [DEBUG] [Thread-175366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:20:01.561 [DEBUG] [Thread-175366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:20:01.561 [DEBUG] [Thread-175366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:20:01.570 [DEBUG] [Thread-175366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:20:01.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:20: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-04-11T19:20:01.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:20:01.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:20:01.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:20:01.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:20:01.606 [DEBUG] [Thread-175366] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:20:01.791 [DEBUG] [Thread-175368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:20:02.341 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:20:02.342 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:20:16.845 [DEBUG] [Thread-175369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:20:25.260 [DEBUG] [Thread-175370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:20:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:20:31.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:20:31.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:20:31.883 [DEBUG] [Thread-175371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:20:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 18, 9), 0.013415, 99.8747, 0.0, 17.2566, 12.0712, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:20:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:18:09
2026-04-11T19:20:33.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:20:33.410 [DEBUG] [Thread-175372] [transport.py] [_log()] starting thread (client mode): 0xae5f1900
2026-04-11T19:20:33.410 [DEBUG] [Thread-175372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:20:33.425 [DEBUG] [Thread-175372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:20:33.425 [INFO] [Thread-175372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] client lang: <none>
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] server lang: <none>
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] kex follows: False
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] Compression: none
2026-04-11T19:20:33.428 [DEBUG] [Thread-175372] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:20:33.445 [DEBUG] [Thread-175372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:20:33.445 [DEBUG] [Thread-175372] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:20:33.446 [DEBUG] [Thread-175372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:20:33.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:20:33.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:20:33.448 [DEBUG] [Thread-175372] [transport.py] [_log()] userauth is OK
2026-04-11T19:20:33.448 [DEBUG] [Thread-175372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:20:33.448 [DEBUG] [Thread-175372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:20:33.448 [DEBUG] [Thread-175372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:20:33.448 [DEBUG] [Thread-175372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:20:33.462 [INFO] [Thread-175372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:20:33.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:20:34.244 [DEBUG] [Thread-175372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:20:34.244 [DEBUG] [Thread-175372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:20:34.245 [DEBUG] [Thread-175372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:20:34.285 [DEBUG] [Thread-175372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:20:34.285 [DEBUG] [Thread-175372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:20:34.289 [DEBUG] [Thread-175372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:20:34.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:20:34.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:20:34.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:20:34.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:20:34.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:20:34.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:20:34.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:20:34.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:20:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:20:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.722340 -999.00  +11.90  14.63     97  +11.60 1 3 1 3 1     0    0 0.33 -1.11 ----- 14.6 14.6 300.2 22.7 13.1 -1.0 12.9 -0.3 12.6 -0.8 12.9 -1.4
2026-04-11T19:20:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:20:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:20:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.722340
2026-04-11T19:20:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:20:34.314 [DEBUG] [Thread-175372] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:20:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:20:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:20:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:20:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:20:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:18:09', tmtdew=0.013415, humidity=99.8747, cloud=0.0, wind=17.2566, temperature=12.0712, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:20:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:20:34.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:20:34.414 [DEBUG] [Thread-175375] [transport.py] [_log()] starting thread (client mode): 0xb0f6d780
2026-04-11T19:20:34.414 [DEBUG] [Thread-175375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:20:34.428 [DEBUG] [Thread-175375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:20:34.428 [INFO] [Thread-175375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:20:34.436 [DEBUG] [Thread-175375] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:20:34.436 [DEBUG] [Thread-175375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] client lang: <none>
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] server lang: <none>
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] kex follows: False
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] Compression: none
2026-04-11T19:20:34.437 [DEBUG] [Thread-175375] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:20:34.500 [DEBUG] [Thread-175375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:20:34.501 [DEBUG] [Thread-175375] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:20:34.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:20:34.502 [DEBUG] [Thread-175375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:20:34.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:20:34.560 [DEBUG] [Thread-175375] [transport.py] [_log()] userauth is OK
2026-04-11T19:20:34.560 [DEBUG] [Thread-175375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:20:34.560 [DEBUG] [Thread-175375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:20:34.560 [DEBUG] [Thread-175375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:20:34.561 [DEBUG] [Thread-175375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:20:34.580 [INFO] [Thread-175375] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:20:34.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:20:34.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:20:35.415 [DEBUG] [Thread-175375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:20:35.416 [DEBUG] [Thread-175375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:20:35.464 [DEBUG] [Thread-175375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:20:35.464 [DEBUG] [Thread-175375] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:20:35.474 [DEBUG] [Thread-175375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:20:35.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:20:35.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-04-11T19:20:35.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:20:35.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:20:35.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:20:35.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:20:35.513 [DEBUG] [Thread-175375] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:20:46.920 [DEBUG] [Thread-175377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:01.979 [DEBUG] [Thread-175378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:02.547 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:02.548 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:05.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:21:05.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:21:05.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:21:06.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 20, 47), 0.03189, 99.7166, 0.0, 19.9721, 12.4431, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:21:06.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:20:47
2026-04-11T19:21:07.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:21:07.463 [DEBUG] [Thread-175379] [transport.py] [_log()] starting thread (client mode): 0xb0fb7640
2026-04-11T19:21:07.463 [DEBUG] [Thread-175379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:21:07.480 [DEBUG] [Thread-175379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:21:07.480 [INFO] [Thread-175379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] client lang: <none>
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] server lang: <none>
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] kex follows: False
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:21:07.484 [DEBUG] [Thread-175379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:21:07.485 [DEBUG] [Thread-175379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:21:07.485 [DEBUG] [Thread-175379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:21:07.485 [DEBUG] [Thread-175379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:21:07.485 [DEBUG] [Thread-175379] [transport.py] [_log()] Compression: none
2026-04-11T19:21:07.485 [DEBUG] [Thread-175379] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:21:07.502 [DEBUG] [Thread-175379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:21:07.503 [DEBUG] [Thread-175379] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:21:07.503 [DEBUG] [Thread-175379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:21:07.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:21:07.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:21:07.506 [DEBUG] [Thread-175379] [transport.py] [_log()] userauth is OK
2026-04-11T19:21:07.506 [DEBUG] [Thread-175379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:21:07.506 [DEBUG] [Thread-175379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:21:07.506 [DEBUG] [Thread-175379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:21:07.506 [DEBUG] [Thread-175379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:21:07.526 [INFO] [Thread-175379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:21:07.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:21:08.353 [DEBUG] [Thread-175379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:21:08.354 [DEBUG] [Thread-175379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:21:08.354 [DEBUG] [Thread-175379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:21:08.394 [DEBUG] [Thread-175379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:21:08.394 [DEBUG] [Thread-175379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:21:08.397 [DEBUG] [Thread-175379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:21:08.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:21:08.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:21:08.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:21:08.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:21:08.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:21:08.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:21:08.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:21:08.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:21:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:21:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.722687 -999.00  +11.90  18.55     97  +11.50 1 3 1 3 1     0    0 0.33 -1.11 ----- 18.6 18.6 291.2 21.9 13.1 -0.6 12.9 -0.3 12.5 -0.5 13.0 -1.4
2026-04-11T19:21:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:21:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:21:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.722687
2026-04-11T19:21:08.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:21:08.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:21:08.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:21:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:21:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:21:08.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:20:47', tmtdew=0.03189, humidity=99.7166, cloud=0.0, wind=19.9721, temperature=12.4431, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:20:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:21:08.426 [DEBUG] [Thread-175379] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:21:08.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:21:08.518 [DEBUG] [Thread-175382] [transport.py] [_log()] starting thread (client mode): 0xae5f0910
2026-04-11T19:21:08.518 [DEBUG] [Thread-175382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:21:08.533 [DEBUG] [Thread-175382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:21:08.533 [INFO] [Thread-175382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] client lang: <none>
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] server lang: <none>
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] kex follows: False
2026-04-11T19:21:08.541 [DEBUG] [Thread-175382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:21:08.542 [DEBUG] [Thread-175382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:21:08.542 [DEBUG] [Thread-175382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:21:08.542 [DEBUG] [Thread-175382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:21:08.542 [DEBUG] [Thread-175382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:21:08.542 [DEBUG] [Thread-175382] [transport.py] [_log()] Compression: none
2026-04-11T19:21:08.542 [DEBUG] [Thread-175382] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:21:08.597 [DEBUG] [Thread-175382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:21:08.597 [DEBUG] [Thread-175382] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:21:08.597 [DEBUG] [Thread-175382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:21:08.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:21:08.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:21:08.654 [DEBUG] [Thread-175382] [transport.py] [_log()] userauth is OK
2026-04-11T19:21:08.654 [DEBUG] [Thread-175382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:21:08.654 [DEBUG] [Thread-175382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:21:08.654 [DEBUG] [Thread-175382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:21:08.654 [DEBUG] [Thread-175382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:21:08.671 [INFO] [Thread-175382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:21:08.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:21:08.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:21:09.513 [DEBUG] [Thread-175382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:21:09.513 [DEBUG] [Thread-175382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:21:09.561 [DEBUG] [Thread-175382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:21:09.561 [DEBUG] [Thread-175382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:21:09.570 [DEBUG] [Thread-175382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:21:09.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:21:09.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:21:09.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-04-11T19:21:09.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:21:09.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:21:09.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:21:09.606 [DEBUG] [Thread-175382] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:21:17.019 [DEBUG] [Thread-175384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:25.329 [DEBUG] [Thread-175385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:32.069 [DEBUG] [Thread-175386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:21:39.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:21:39.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:21:39.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-04-11T19:21:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 21, 22), 0.015945, 99.8583, 0.0, 20.5567, 11.9715, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:21:40.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:21:22
2026-04-11T19:21:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:21:41.646 [DEBUG] [Thread-175387] [transport.py] [_log()] starting thread (client mode): 0xae5f0730
2026-04-11T19:21:41.646 [DEBUG] [Thread-175387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:21:41.666 [DEBUG] [Thread-175387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:21:41.667 [INFO] [Thread-175387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:21:41.669 [DEBUG] [Thread-175387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] client lang: <none>
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] server lang: <none>
2026-04-11T19:21:41.670 [DEBUG] [Thread-175387] [transport.py] [_log()] kex follows: False
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] Compression: none
2026-04-11T19:21:41.671 [DEBUG] [Thread-175387] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:21:41.689 [DEBUG] [Thread-175387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:21:41.690 [DEBUG] [Thread-175387] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:21:41.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:21:41.691 [DEBUG] [Thread-175387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:21:41.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:21:41.693 [DEBUG] [Thread-175387] [transport.py] [_log()] userauth is OK
2026-04-11T19:21:41.693 [DEBUG] [Thread-175387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:21:41.693 [DEBUG] [Thread-175387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:21:41.694 [DEBUG] [Thread-175387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:21:41.694 [DEBUG] [Thread-175387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:21:41.718 [INFO] [Thread-175387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:21:41.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:21:42.522 [DEBUG] [Thread-175387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:21:42.522 [DEBUG] [Thread-175387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:21:42.522 [DEBUG] [Thread-175387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:21:42.564 [DEBUG] [Thread-175387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:21:42.564 [DEBUG] [Thread-175387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:21:42.567 [DEBUG] [Thread-175387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:21:42.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:21:42.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:21:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:21:42.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:21:42.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:21:42.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:21:42.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:21:42.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:21:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:21:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.723035 -999.00  +11.90  16.23     97  +11.60 1 3 1 3 1     0    0 0.33 -1.34 ----- 16.2 16.2 282.1 21.8 13.0 -0.6 12.9 -0.4 12.6 -0.3 12.9 -1.0
2026-04-11T19:21:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:21:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:21:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.723035
2026-04-11T19:21:42.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:21:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:21:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:21:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:21:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:21:42.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:21:22', tmtdew=0.015945, humidity=99.8583, cloud=0.0, wind=20.5567, temperature=11.9715, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:21:10.224', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:21:42.589 [DEBUG] [Thread-175387] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:21:42.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:21:42.679 [DEBUG] [Thread-175390] [transport.py] [_log()] starting thread (client mode): 0xb0fb6980
2026-04-11T19:21:42.680 [DEBUG] [Thread-175390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:21:42.694 [DEBUG] [Thread-175390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:21:42.694 [INFO] [Thread-175390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:21:42.702 [DEBUG] [Thread-175390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:21:42.702 [DEBUG] [Thread-175390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:21:42.702 [DEBUG] [Thread-175390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:21:42.702 [DEBUG] [Thread-175390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:42.702 [DEBUG] [Thread-175390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:21:42.702 [DEBUG] [Thread-175390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] client lang: <none>
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] server lang: <none>
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] kex follows: False
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:21:42.703 [DEBUG] [Thread-175390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:21:42.704 [DEBUG] [Thread-175390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:21:42.704 [DEBUG] [Thread-175390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:21:42.704 [DEBUG] [Thread-175390] [transport.py] [_log()] Compression: none
2026-04-11T19:21:42.704 [DEBUG] [Thread-175390] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:21:42.760 [DEBUG] [Thread-175390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:21:42.761 [DEBUG] [Thread-175390] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:21:42.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:21:42.762 [DEBUG] [Thread-175390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:21:42.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:21:42.817 [DEBUG] [Thread-175390] [transport.py] [_log()] userauth is OK
2026-04-11T19:21:42.817 [DEBUG] [Thread-175390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:21:42.818 [DEBUG] [Thread-175390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:21:42.818 [DEBUG] [Thread-175390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:21:42.818 [DEBUG] [Thread-175390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:21:42.836 [INFO] [Thread-175390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:21:42.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:21:42.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:21:43.688 [DEBUG] [Thread-175390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:21:43.688 [DEBUG] [Thread-175390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:21:43.736 [DEBUG] [Thread-175390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:21:43.736 [DEBUG] [Thread-175390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:21:43.746 [DEBUG] [Thread-175390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:21:43.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:21:43.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-04-11T19:21:43.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-04-11T19:21:43.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:21:43.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:21:43.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:21:43.783 [DEBUG] [Thread-175390] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:21:47.103 [DEBUG] [Thread-175392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:02.164 [DEBUG] [Thread-175393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:02.751 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:02.753 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:13.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:22:13.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:22:13.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-04-11T19:22:15.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 21, 58), 0.063435, 99.8746, 0.0, 16.4452, 12.0045, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:22:15.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:21:58
2026-04-11T19:22:15.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:22:15.633 [DEBUG] [Thread-175394] [transport.py] [_log()] starting thread (client mode): 0xae561ea0
2026-04-11T19:22:15.633 [DEBUG] [Thread-175394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:22:15.655 [DEBUG] [Thread-175394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:22:15.655 [INFO] [Thread-175394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] client lang: <none>
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] server lang: <none>
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] kex follows: False
2026-04-11T19:22:15.657 [DEBUG] [Thread-175394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:22:15.658 [DEBUG] [Thread-175394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:22:15.658 [DEBUG] [Thread-175394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:22:15.658 [DEBUG] [Thread-175394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:22:15.658 [DEBUG] [Thread-175394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:22:15.658 [DEBUG] [Thread-175394] [transport.py] [_log()] Compression: none
2026-04-11T19:22:15.658 [DEBUG] [Thread-175394] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:22:15.674 [DEBUG] [Thread-175394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:22:15.675 [DEBUG] [Thread-175394] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:22:15.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:22:15.676 [DEBUG] [Thread-175394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:22:15.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:22:15.678 [DEBUG] [Thread-175394] [transport.py] [_log()] userauth is OK
2026-04-11T19:22:15.678 [DEBUG] [Thread-175394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:22:15.678 [DEBUG] [Thread-175394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:22:15.678 [DEBUG] [Thread-175394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:22:15.678 [DEBUG] [Thread-175394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:22:15.705 [INFO] [Thread-175394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:22:15.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:22:16.519 [DEBUG] [Thread-175394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:22:16.519 [DEBUG] [Thread-175394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:22:16.520 [DEBUG] [Thread-175394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:22:16.560 [DEBUG] [Thread-175394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:22:16.560 [DEBUG] [Thread-175394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:22:16.563 [DEBUG] [Thread-175394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:22:16.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:22:16.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:22:16.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:22:16.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:22:16.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:22:16.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:22:16.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:22:16.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:22:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:22:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.723382 -999.00  +11.90  18.96     97  +11.60 1 3 1 3 1     0    0 0.32 -1.67 ----- 19.0 19.0 290.4 20.6 13.0 -0.6 12.9 -0.3 12.5 -0.3 13.0 -1.4
2026-04-11T19:22:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:22:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:22:16.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.723382
2026-04-11T19:22:16.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:22:16.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:22:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:22:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:22:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:22:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:21:58', tmtdew=0.063435, humidity=99.8746, cloud=0.0, wind=16.4452, temperature=12.0045, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:21:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:22:16.588 [DEBUG] [Thread-175394] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:22:16.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:22:16.679 [DEBUG] [Thread-175397] [transport.py] [_log()] starting thread (client mode): 0xb0fb69e0
2026-04-11T19:22:16.679 [DEBUG] [Thread-175397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:22:16.694 [DEBUG] [Thread-175397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:22:16.694 [INFO] [Thread-175397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:22:16.705 [DEBUG] [Thread-175397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:22:16.705 [DEBUG] [Thread-175397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:22:16.705 [DEBUG] [Thread-175397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:22:16.705 [DEBUG] [Thread-175397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:16.705 [DEBUG] [Thread-175397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:16.705 [DEBUG] [Thread-175397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] client lang: <none>
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] server lang: <none>
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] kex follows: False
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:22:16.706 [DEBUG] [Thread-175397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:22:16.707 [DEBUG] [Thread-175397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:22:16.707 [DEBUG] [Thread-175397] [transport.py] [_log()] Compression: none
2026-04-11T19:22:16.707 [DEBUG] [Thread-175397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:22:16.763 [DEBUG] [Thread-175397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:22:16.764 [DEBUG] [Thread-175397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:22:16.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:22:16.765 [DEBUG] [Thread-175397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:22:16.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:22:16.820 [DEBUG] [Thread-175397] [transport.py] [_log()] userauth is OK
2026-04-11T19:22:16.820 [DEBUG] [Thread-175397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:22:16.820 [DEBUG] [Thread-175397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:22:16.820 [DEBUG] [Thread-175397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:22:16.820 [DEBUG] [Thread-175397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:22:16.844 [INFO] [Thread-175397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:22:16.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:22:16.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:22:17.201 [DEBUG] [Thread-175399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:17.704 [DEBUG] [Thread-175397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:22:17.704 [DEBUG] [Thread-175397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:22:17.752 [DEBUG] [Thread-175397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:22:17.752 [DEBUG] [Thread-175397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:22:17.761 [DEBUG] [Thread-175397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:22:17.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:22:17.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-04-11T19:22:17.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:22:17.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:22:17.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:22:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:22:17.795 [DEBUG] [Thread-175397] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:22:25.385 [DEBUG] [Thread-175400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:32.251 [DEBUG] [Thread-175401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:47.286 [DEBUG] [Thread-175402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:22:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:22:47.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:22:47.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-04-11T19:22:49.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 22, 33), 0.01677, 99.8156, 0.0, 18.5609, 12.4759, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:22:49.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:22:33
2026-04-11T19:22:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:22:49.681 [DEBUG] [Thread-175403] [transport.py] [_log()] starting thread (client mode): 0xb0fb4550
2026-04-11T19:22:49.681 [DEBUG] [Thread-175403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:22:49.700 [DEBUG] [Thread-175403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:22:49.701 [INFO] [Thread-175403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:49.704 [DEBUG] [Thread-175403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] client lang: <none>
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] server lang: <none>
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] kex follows: False
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] Compression: none
2026-04-11T19:22:49.705 [DEBUG] [Thread-175403] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:22:49.723 [DEBUG] [Thread-175403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:22:49.724 [DEBUG] [Thread-175403] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:22:49.724 [DEBUG] [Thread-175403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:22:49.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:22:49.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:22:49.727 [DEBUG] [Thread-175403] [transport.py] [_log()] userauth is OK
2026-04-11T19:22:49.728 [DEBUG] [Thread-175403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:22:49.728 [DEBUG] [Thread-175403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:22:49.728 [DEBUG] [Thread-175403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:22:49.728 [DEBUG] [Thread-175403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:22:49.747 [INFO] [Thread-175403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:22:49.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:22:50.529 [DEBUG] [Thread-175403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:22:50.529 [DEBUG] [Thread-175403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:22:50.530 [DEBUG] [Thread-175403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:22:50.570 [DEBUG] [Thread-175403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:22:50.570 [DEBUG] [Thread-175403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:22:50.573 [DEBUG] [Thread-175403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:22:50.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:22:50.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:22:50.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:22:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:22:50.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:22:50.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:22:50.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:22:50.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:22:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:22:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.723729 -999.00  +11.90  13.59     97  +11.50 1 3 1 3 1     0    0 0.32 -1.38 ----- 13.6 13.6 301.6 17.0 13.1 -0.6 12.9 -0.4 12.5 -0.4 13.0 -1.8
2026-04-11T19:22:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:22:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:22:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.723729
2026-04-11T19:22:50.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:22:50.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:22:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:22:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:22:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:22:50.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:22:33', tmtdew=0.01677, humidity=99.8156, cloud=0.0, wind=18.5609, temperature=12.4759, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:22:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:22:50.601 [DEBUG] [Thread-175403] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:22:50.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:22:50.694 [DEBUG] [Thread-175406] [transport.py] [_log()] starting thread (client mode): 0xb0f6f100
2026-04-11T19:22:50.694 [DEBUG] [Thread-175406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:22:50.709 [DEBUG] [Thread-175406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:22:50.709 [INFO] [Thread-175406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:22:50.717 [DEBUG] [Thread-175406] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:22:50.718 [DEBUG] [Thread-175406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] client lang: <none>
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] server lang: <none>
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] kex follows: False
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] Compression: none
2026-04-11T19:22:50.719 [DEBUG] [Thread-175406] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:22:50.774 [DEBUG] [Thread-175406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:22:50.775 [DEBUG] [Thread-175406] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:22:50.775 [DEBUG] [Thread-175406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:22:50.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:22:50.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:22:50.830 [DEBUG] [Thread-175406] [transport.py] [_log()] userauth is OK
2026-04-11T19:22:50.830 [DEBUG] [Thread-175406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:22:50.830 [DEBUG] [Thread-175406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:22:50.830 [DEBUG] [Thread-175406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:22:50.830 [DEBUG] [Thread-175406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:22:50.849 [INFO] [Thread-175406] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:22:50.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:22:50.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:22:51.689 [DEBUG] [Thread-175406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:22:51.689 [DEBUG] [Thread-175406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:22:51.738 [DEBUG] [Thread-175406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:22:51.738 [DEBUG] [Thread-175406] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:22:51.748 [DEBUG] [Thread-175406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:22:51.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:22:51.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-04-11T19:22:51.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:22:51.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:22:51.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:22:51.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:22:51.783 [DEBUG] [Thread-175406] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:23:02.322 [DEBUG] [Thread-175408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:02.955 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:02.956 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:17.373 [DEBUG] [Thread-175409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:21.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:23:21.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:23:21.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-04-11T19:23:22.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 23, 9), 0.018515, 99.8417, 0.0, 20.9095, 11.9218, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:23:22.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:23:09
2026-04-11T19:23:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:23:23.546 [DEBUG] [Thread-175410] [transport.py] [_log()] starting thread (client mode): 0xae562920
2026-04-11T19:23:23.546 [DEBUG] [Thread-175410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:23:23.556 [DEBUG] [Thread-175410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:23:23.557 [INFO] [Thread-175410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:23:23.559 [DEBUG] [Thread-175410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:23:23.559 [DEBUG] [Thread-175410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:23:23.559 [DEBUG] [Thread-175410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] client lang: <none>
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] server lang: <none>
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] kex follows: False
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] Compression: none
2026-04-11T19:23:23.560 [DEBUG] [Thread-175410] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:23:23.576 [DEBUG] [Thread-175410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:23:23.576 [DEBUG] [Thread-175410] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:23:23.577 [DEBUG] [Thread-175410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:23:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:23:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:23:23.578 [DEBUG] [Thread-175410] [transport.py] [_log()] userauth is OK
2026-04-11T19:23:23.578 [DEBUG] [Thread-175410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:23:23.578 [DEBUG] [Thread-175410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:23:23.578 [DEBUG] [Thread-175410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:23:23.578 [DEBUG] [Thread-175410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:23:23.598 [INFO] [Thread-175410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:23:23.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:23:24.405 [DEBUG] [Thread-175410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:23:24.405 [DEBUG] [Thread-175410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:23:24.406 [DEBUG] [Thread-175410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:23:24.446 [DEBUG] [Thread-175410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:23:24.447 [DEBUG] [Thread-175410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:23:24.450 [DEBUG] [Thread-175410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:23:24.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:23:24.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:23:24.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:23:24.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:23:24.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:23:24.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:23:24.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:23:24.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:23:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:23:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.724076 -999.00  +12.00  15.60     97  +11.60 1 3 1 3 1     0    0 0.32 -1.47 ----- 15.6 15.6 293.4 16.9 13.1 -0.4 12.9 -0.3 12.6 -0.2 12.9 -0.8
2026-04-11T19:23:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:23:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:23:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.724076
2026-04-11T19:23:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:23:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:23:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:23:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:23:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:23:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:23:09', tmtdew=0.018515, humidity=99.8417, cloud=0.0, wind=20.9095, temperature=11.9218, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:22:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:23:24.477 [DEBUG] [Thread-175410] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:23:24.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:23:24.567 [DEBUG] [Thread-175413] [transport.py] [_log()] starting thread (client mode): 0xb0f6dae0
2026-04-11T19:23:24.567 [DEBUG] [Thread-175413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:23:24.582 [DEBUG] [Thread-175413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:23:24.582 [INFO] [Thread-175413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:24.590 [DEBUG] [Thread-175413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] client lang: <none>
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] server lang: <none>
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] kex follows: False
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] Compression: none
2026-04-11T19:23:24.591 [DEBUG] [Thread-175413] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:23:24.653 [DEBUG] [Thread-175413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:23:24.653 [DEBUG] [Thread-175413] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:23:24.654 [DEBUG] [Thread-175413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:23:24.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:23:24.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:23:24.709 [DEBUG] [Thread-175413] [transport.py] [_log()] userauth is OK
2026-04-11T19:23:24.709 [DEBUG] [Thread-175413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:23:24.710 [DEBUG] [Thread-175413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:23:24.710 [DEBUG] [Thread-175413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:23:24.710 [DEBUG] [Thread-175413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:23:24.729 [INFO] [Thread-175413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:23:24.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:23:24.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:23:25.443 [DEBUG] [Thread-175415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:25.522 [DEBUG] [Thread-175413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:23:25.522 [DEBUG] [Thread-175413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:23:25.570 [DEBUG] [Thread-175413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:23:25.570 [DEBUG] [Thread-175413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:23:25.579 [DEBUG] [Thread-175413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:23:25.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:23:25.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-04-11T19:23:25.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-04-11T19:23:25.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:23:25.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:23:25.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:23:25.616 [DEBUG] [Thread-175413] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:23:32.409 [DEBUG] [Thread-175416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:47.458 [DEBUG] [Thread-175417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:23:55.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:23:55.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:23:55.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-04-11T19:23:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 23, 44), 0.02683, 99.7496, 0.0, 17.8553, 12.4762, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:23:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:23:44
2026-04-11T19:23:57.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:23:57.426 [DEBUG] [Thread-175418] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b80
2026-04-11T19:23:57.426 [DEBUG] [Thread-175418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:23:57.448 [DEBUG] [Thread-175418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:23:57.448 [INFO] [Thread-175418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] client lang: <none>
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] server lang: <none>
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] kex follows: False
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] Compression: none
2026-04-11T19:23:57.452 [DEBUG] [Thread-175418] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:23:57.471 [DEBUG] [Thread-175418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:23:57.471 [DEBUG] [Thread-175418] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:23:57.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:23:57.472 [DEBUG] [Thread-175418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:23:57.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:23:57.475 [DEBUG] [Thread-175418] [transport.py] [_log()] userauth is OK
2026-04-11T19:23:57.475 [DEBUG] [Thread-175418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:23:57.475 [DEBUG] [Thread-175418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:23:57.475 [DEBUG] [Thread-175418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:23:57.475 [DEBUG] [Thread-175418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:23:57.500 [INFO] [Thread-175418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:23:57.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:23:58.277 [DEBUG] [Thread-175418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:23:58.277 [DEBUG] [Thread-175418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:23:58.278 [DEBUG] [Thread-175418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:23:58.317 [DEBUG] [Thread-175418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:23:58.318 [DEBUG] [Thread-175418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:23:58.321 [DEBUG] [Thread-175418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:23:58.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:23:58.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:23:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:23:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:23:58.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:23:58.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:23:58.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:23:58.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:23:58.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:23:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.724424 -999.00  +12.00  11.69     97  +11.70 1 3 1 3 1     0    0 0.31 -1.61 ----- 11.7 11.7 295.0 14.2 13.1 -0.4 12.9 -0.2 12.6 -0.4 12.9 -1.2
2026-04-11T19:23:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:23:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:23:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.724424
2026-04-11T19:23:58.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:23:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:23:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:23:58.346 [DEBUG] [Thread-175418] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:23:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:23:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:23:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:23:44', tmtdew=0.02683, humidity=99.7496, cloud=0.0, wind=17.8553, temperature=12.4762, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:23:10.234', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:23:58.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:23:58.449 [DEBUG] [Thread-175421] [transport.py] [_log()] starting thread (client mode): 0xae5636d0
2026-04-11T19:23:58.450 [DEBUG] [Thread-175421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:23:58.464 [DEBUG] [Thread-175421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:23:58.464 [INFO] [Thread-175421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] client lang: <none>
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] server lang: <none>
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] kex follows: False
2026-04-11T19:23:58.472 [DEBUG] [Thread-175421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:23:58.473 [DEBUG] [Thread-175421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:23:58.473 [DEBUG] [Thread-175421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:23:58.473 [DEBUG] [Thread-175421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:23:58.473 [DEBUG] [Thread-175421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:23:58.473 [DEBUG] [Thread-175421] [transport.py] [_log()] Compression: none
2026-04-11T19:23:58.473 [DEBUG] [Thread-175421] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:23:58.532 [DEBUG] [Thread-175421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:23:58.533 [DEBUG] [Thread-175421] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:23:58.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:23:58.534 [DEBUG] [Thread-175421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:23:58.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:23:58.592 [DEBUG] [Thread-175421] [transport.py] [_log()] userauth is OK
2026-04-11T19:23:58.592 [DEBUG] [Thread-175421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:23:58.592 [DEBUG] [Thread-175421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:23:58.592 [DEBUG] [Thread-175421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:23:58.592 [DEBUG] [Thread-175421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:23:58.612 [INFO] [Thread-175421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:23:58.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:23:58.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:23:59.475 [DEBUG] [Thread-175421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:23:59.475 [DEBUG] [Thread-175421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:23:59.522 [DEBUG] [Thread-175421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:23:59.522 [DEBUG] [Thread-175421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:23:59.531 [DEBUG] [Thread-175421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:23:59.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:23:59.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-04-11T19:23:59.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-04-11T19:23:59.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:23:59.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:23:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:23:59.563 [DEBUG] [Thread-175421] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:24:02.495 [DEBUG] [Thread-175423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:24:03.159 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:24:03.161 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:24:17.559 [DEBUG] [Thread-175424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:24:25.500 [DEBUG] [Thread-175425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:24:29.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:24:29.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:24:29.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-04-11T19:24:30.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 24, 19), 0.060845, 99.8916, 0.0, 15.8807, 12.0548, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:24:30.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:24:19
2026-04-11T19:24:31.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:24:31.375 [DEBUG] [Thread-175426] [transport.py] [_log()] starting thread (client mode): 0xb0fb4520
2026-04-11T19:24:31.375 [DEBUG] [Thread-175426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:24:31.395 [DEBUG] [Thread-175426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:24:31.395 [INFO] [Thread-175426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] client lang: <none>
2026-04-11T19:24:31.398 [DEBUG] [Thread-175426] [transport.py] [_log()] server lang: <none>
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] kex follows: False
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] Compression: none
2026-04-11T19:24:31.399 [DEBUG] [Thread-175426] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:24:31.417 [DEBUG] [Thread-175426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:24:31.417 [DEBUG] [Thread-175426] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:24:31.417 [DEBUG] [Thread-175426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:24:31.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:24:31.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:24:31.419 [DEBUG] [Thread-175426] [transport.py] [_log()] userauth is OK
2026-04-11T19:24:31.419 [DEBUG] [Thread-175426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:24:31.420 [DEBUG] [Thread-175426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:24:31.420 [DEBUG] [Thread-175426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:24:31.420 [DEBUG] [Thread-175426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:24:31.436 [INFO] [Thread-175426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:24:31.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:24:32.220 [DEBUG] [Thread-175426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:24:32.220 [DEBUG] [Thread-175426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:24:32.221 [DEBUG] [Thread-175426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:24:32.262 [DEBUG] [Thread-175426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:24:32.262 [DEBUG] [Thread-175426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:24:32.264 [DEBUG] [Thread-175426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:24:32.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:24:32.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:24:32.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:24:32.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:24:32.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:24:32.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:24:32.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:24:32.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:24:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:24:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.724771 -999.00  +12.00  15.24     97  +11.60 1 3 1 3 1     0    0 0.31 -1.58 ----- 15.2 15.2 299.2 17.6 13.1 -0.6 12.9 -0.2 12.6 -0.2 13.0 -1.4
2026-04-11T19:24:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:24:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:24:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.724771
2026-04-11T19:24:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:24:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:24:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:24:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:24:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:24:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:24:19', tmtdew=0.060845, humidity=99.8916, cloud=0.0, wind=15.8807, temperature=12.0548, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:23:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:24:32.289 [DEBUG] [Thread-175426] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:24:32.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:24:32.399 [DEBUG] [Thread-175429] [transport.py] [_log()] starting thread (client mode): 0xb0fb6800
2026-04-11T19:24:32.399 [DEBUG] [Thread-175429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:24:32.414 [DEBUG] [Thread-175429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:24:32.414 [INFO] [Thread-175429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] client lang: <none>
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] server lang: <none>
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] kex follows: False
2026-04-11T19:24:32.422 [DEBUG] [Thread-175429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:24:32.423 [DEBUG] [Thread-175429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:24:32.423 [DEBUG] [Thread-175429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:24:32.423 [DEBUG] [Thread-175429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:24:32.423 [DEBUG] [Thread-175429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:24:32.423 [DEBUG] [Thread-175429] [transport.py] [_log()] Compression: none
2026-04-11T19:24:32.423 [DEBUG] [Thread-175429] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:24:32.478 [DEBUG] [Thread-175429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:24:32.478 [DEBUG] [Thread-175429] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:24:32.479 [DEBUG] [Thread-175429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:24:32.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:24:32.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:24:32.534 [DEBUG] [Thread-175429] [transport.py] [_log()] userauth is OK
2026-04-11T19:24:32.534 [DEBUG] [Thread-175429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:24:32.534 [DEBUG] [Thread-175429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:24:32.534 [DEBUG] [Thread-175429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:24:32.534 [DEBUG] [Thread-175429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:24:32.553 [INFO] [Thread-175429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:24:32.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:24:32.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:24:32.594 [DEBUG] [Thread-175431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:24:33.380 [DEBUG] [Thread-175429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:24:33.381 [DEBUG] [Thread-175429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:24:33.428 [DEBUG] [Thread-175429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:24:33.428 [DEBUG] [Thread-175429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:24:33.437 [DEBUG] [Thread-175429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:24:33.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:24:33.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-04-11T19:24:33.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-04-11T19:24:33.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:24:33.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:24:33.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:24:33.471 [DEBUG] [Thread-175429] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:24:47.649 [DEBUG] [Thread-175432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:02.686 [DEBUG] [Thread-175433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:03.366 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:03.367 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:03.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:25:03.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:25:03.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-04-11T19:25:04.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 24, 54), 0.02169, 99.7831, 0.0, 16.8674, 12.5095, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:25:04.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:24:54
2026-04-11T19:25:05.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:25:05.282 [DEBUG] [Thread-175434] [transport.py] [_log()] starting thread (client mode): 0xae561750
2026-04-11T19:25:05.282 [DEBUG] [Thread-175434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:25:05.301 [DEBUG] [Thread-175434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:25:05.302 [INFO] [Thread-175434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] client lang: <none>
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] server lang: <none>
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] kex follows: False
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:25:05.305 [DEBUG] [Thread-175434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:25:05.306 [DEBUG] [Thread-175434] [transport.py] [_log()] Compression: none
2026-04-11T19:25:05.306 [DEBUG] [Thread-175434] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:25:05.323 [DEBUG] [Thread-175434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:25:05.324 [DEBUG] [Thread-175434] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:25:05.324 [DEBUG] [Thread-175434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:25:05.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:25:05.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:25:05.326 [DEBUG] [Thread-175434] [transport.py] [_log()] userauth is OK
2026-04-11T19:25:05.326 [DEBUG] [Thread-175434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:25:05.326 [DEBUG] [Thread-175434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:25:05.326 [DEBUG] [Thread-175434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:25:05.327 [DEBUG] [Thread-175434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:25:05.349 [INFO] [Thread-175434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:25:05.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:25:06.396 [DEBUG] [Thread-175434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:25:06.396 [DEBUG] [Thread-175434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:25:06.397 [DEBUG] [Thread-175434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:25:06.437 [DEBUG] [Thread-175434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:25:06.437 [DEBUG] [Thread-175434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:25:06.441 [DEBUG] [Thread-175434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:25:06.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:25:06.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:25:06.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:25:06.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:25:06.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:25:06.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:25:06.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:25:06.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:25:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:25:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.725465 -999.00  +11.90  16.91     97  +11.60 1 3 1 3 1     0    0 0.32 -1.43 ----- 16.9 16.9 300.7 20.9 13.1 -0.6 12.9 -0.2 12.6 -0.4 12.9 -0.9
2026-04-11T19:25:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:25:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:25:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.725465
2026-04-11T19:25:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:25:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:25:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:25:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:25:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:25:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:24:54', tmtdew=0.02169, humidity=99.7831, cloud=0.0, wind=16.8674, temperature=12.5095, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:24:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:25:06.502 [DEBUG] [Thread-175434] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:25:06.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:25:06.597 [DEBUG] [Thread-175437] [transport.py] [_log()] starting thread (client mode): 0xb0f54cd0
2026-04-11T19:25:06.597 [DEBUG] [Thread-175437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:25:06.612 [DEBUG] [Thread-175437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:25:06.612 [INFO] [Thread-175437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:25:06.620 [DEBUG] [Thread-175437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:25:06.620 [DEBUG] [Thread-175437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:25:06.621 [DEBUG] [Thread-175437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] client lang: <none>
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] server lang: <none>
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] kex follows: False
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] Compression: none
2026-04-11T19:25:06.622 [DEBUG] [Thread-175437] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:25:06.678 [DEBUG] [Thread-175437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:25:06.679 [DEBUG] [Thread-175437] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:25:06.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:25:06.680 [DEBUG] [Thread-175437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:25:06.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:25:06.734 [DEBUG] [Thread-175437] [transport.py] [_log()] userauth is OK
2026-04-11T19:25:06.734 [DEBUG] [Thread-175437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:25:06.734 [DEBUG] [Thread-175437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:25:06.734 [DEBUG] [Thread-175437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:25:06.735 [DEBUG] [Thread-175437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:25:06.753 [INFO] [Thread-175437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:25: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-04-11T19:25:06.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:25:07.637 [DEBUG] [Thread-175437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:25:07.637 [DEBUG] [Thread-175437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:25:07.685 [DEBUG] [Thread-175437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:25:07.686 [DEBUG] [Thread-175437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:25:07.694 [DEBUG] [Thread-175437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:25:07.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:25:07.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-04-11T19:25: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') -> 00000000
2026-04-11T19:25:07.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:25:07.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:25:07.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:25:07.733 [DEBUG] [Thread-175437] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:25:17.722 [DEBUG] [Thread-175439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:25.569 [DEBUG] [Thread-175440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:32.783 [DEBUG] [Thread-175441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:25:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:25:37.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:25:37.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-04-11T19:25:39.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 25, 30), 0.06338, 99.8751, 0.0, 16.3217, 12.0217, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:25:39.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:25:30
2026-04-11T19:25:39.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:25:39.613 [DEBUG] [Thread-175442] [transport.py] [_log()] starting thread (client mode): 0xb0fb4130
2026-04-11T19:25:39.613 [DEBUG] [Thread-175442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:25:39.633 [DEBUG] [Thread-175442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:25:39.633 [INFO] [Thread-175442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] client lang: <none>
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] server lang: <none>
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] kex follows: False
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] Compression: none
2026-04-11T19:25:39.634 [DEBUG] [Thread-175442] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:25:39.643 [DEBUG] [Thread-175442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:25:39.643 [DEBUG] [Thread-175442] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:25:39.643 [DEBUG] [Thread-175442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:25:39.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:25:39.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:25:39.645 [DEBUG] [Thread-175442] [transport.py] [_log()] userauth is OK
2026-04-11T19:25:39.646 [DEBUG] [Thread-175442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:25:39.646 [DEBUG] [Thread-175442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:25:39.646 [DEBUG] [Thread-175442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:25:39.646 [DEBUG] [Thread-175442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:25:39.670 [INFO] [Thread-175442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:25:39.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:25:40.488 [DEBUG] [Thread-175442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:25:40.489 [DEBUG] [Thread-175442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:25:40.489 [DEBUG] [Thread-175442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:25:40.530 [DEBUG] [Thread-175442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:25:40.530 [DEBUG] [Thread-175442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:25:40.532 [DEBUG] [Thread-175442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:25:40.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:25:40.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:25:40.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:25:40.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:25:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:25:40.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:25:40.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.725812 -999.00  +11.90  18.12     97  +11.50 1 3 1 3 1     0    0 0.32 -1.19 ----- 18.1 18.1 298.6 21.1 13.1 -0.5 12.9 -0.3 12.6 -0.4 13.0 -0.9
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.725812
2026-04-11T19:25:40.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:25:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:25:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:25:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:25:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:25:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:25:30', tmtdew=0.06338, humidity=99.8751, cloud=0.0, wind=16.3217, temperature=12.0217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:25:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:25:40.555 [DEBUG] [Thread-175442] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:25: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-04-11T19:25:40.636 [DEBUG] [Thread-175445] [transport.py] [_log()] starting thread (client mode): 0xae562b30
2026-04-11T19:25:40.636 [DEBUG] [Thread-175445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:25:40.651 [DEBUG] [Thread-175445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:25:40.651 [INFO] [Thread-175445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:25:40.659 [DEBUG] [Thread-175445] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:25:40.659 [DEBUG] [Thread-175445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:25:40.659 [DEBUG] [Thread-175445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] client lang: <none>
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] server lang: <none>
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] kex follows: False
2026-04-11T19:25:40.660 [DEBUG] [Thread-175445] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:25:40.661 [DEBUG] [Thread-175445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:25:40.661 [DEBUG] [Thread-175445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:25:40.661 [DEBUG] [Thread-175445] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:25:40.661 [DEBUG] [Thread-175445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:25:40.661 [DEBUG] [Thread-175445] [transport.py] [_log()] Compression: none
2026-04-11T19:25:40.661 [DEBUG] [Thread-175445] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:25:40.718 [DEBUG] [Thread-175445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:25:40.718 [DEBUG] [Thread-175445] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:25:40.719 [DEBUG] [Thread-175445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:25:40.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:25:40.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:25:40.777 [DEBUG] [Thread-175445] [transport.py] [_log()] userauth is OK
2026-04-11T19:25:40.777 [DEBUG] [Thread-175445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:25:40.777 [DEBUG] [Thread-175445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:25:40.777 [DEBUG] [Thread-175445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:25:40.777 [DEBUG] [Thread-175445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:25:40.796 [INFO] [Thread-175445] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:25:40.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:25:40.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:25:41.635 [DEBUG] [Thread-175445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:25:41.635 [DEBUG] [Thread-175445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:25:41.683 [DEBUG] [Thread-175445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:25:41.683 [DEBUG] [Thread-175445] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:25:41.695 [DEBUG] [Thread-175445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:25:41.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:25:41.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-04-11T19:25:41.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:25:41.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:25:41.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:25:41.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:25:41.732 [DEBUG] [Thread-175445] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:25:47.822 [DEBUG] [Thread-175447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:02.870 [DEBUG] [Thread-175448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:03.570 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:03.571 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:11.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:26:11.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:26:11.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-04-11T19:26:13.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 26, 5), 0.060845, 99.8917, 0.0, 16.4628, 12.0217, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:26:13.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:26:05
2026-04-11T19:26:13.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:26:13.531 [DEBUG] [Thread-175449] [transport.py] [_log()] starting thread (client mode): 0xb0f6d630
2026-04-11T19:26:13.531 [DEBUG] [Thread-175449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:26:13.552 [DEBUG] [Thread-175449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:26:13.552 [INFO] [Thread-175449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] client lang: <none>
2026-04-11T19:26:13.554 [DEBUG] [Thread-175449] [transport.py] [_log()] server lang: <none>
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] kex follows: False
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] Compression: none
2026-04-11T19:26:13.555 [DEBUG] [Thread-175449] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:26:13.576 [DEBUG] [Thread-175449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:26:13.576 [DEBUG] [Thread-175449] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:26:13.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:26:13.577 [DEBUG] [Thread-175449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:26:13.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:26:13.579 [DEBUG] [Thread-175449] [transport.py] [_log()] userauth is OK
2026-04-11T19:26:13.579 [DEBUG] [Thread-175449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:26:13.580 [DEBUG] [Thread-175449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:26:13.580 [DEBUG] [Thread-175449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:26:13.580 [DEBUG] [Thread-175449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:26:13.602 [INFO] [Thread-175449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:26:13.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:26:14.393 [DEBUG] [Thread-175449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:26:14.394 [DEBUG] [Thread-175449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:26:14.394 [DEBUG] [Thread-175449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:26:14.435 [DEBUG] [Thread-175449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:26:14.435 [DEBUG] [Thread-175449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:26:14.439 [DEBUG] [Thread-175449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:26:14.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:26:14.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:26:14.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:26:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:26:14.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:26:14.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:26:14.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:26:14.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:26:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:26:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.726159 -999.00  +11.90  15.88     97  +11.50 1 3 1 3 1     0    0 0.34 -0.98 ----- 15.9 15.9 293.3 23.0 13.1 -0.5 12.9 -0.3 12.6 -0.2 12.9 -0.8
2026-04-11T19:26:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:26:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:26:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.726159
2026-04-11T19:26:14.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:26:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:26:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:26:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:26:14.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:26:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:26:05', tmtdew=0.060845, humidity=99.8917, cloud=0.0, wind=16.4628, temperature=12.0217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:25:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:26:14.465 [DEBUG] [Thread-175449] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:26:14.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:26:14.557 [DEBUG] [Thread-175452] [transport.py] [_log()] starting thread (client mode): 0xb0f6d870
2026-04-11T19:26:14.558 [DEBUG] [Thread-175452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:26:14.578 [DEBUG] [Thread-175452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:26:14.578 [INFO] [Thread-175452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:26:14.586 [DEBUG] [Thread-175452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:26:14.586 [DEBUG] [Thread-175452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:26:14.586 [DEBUG] [Thread-175452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:26:14.586 [DEBUG] [Thread-175452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] client lang: <none>
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] server lang: <none>
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] kex follows: False
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:26:14.587 [DEBUG] [Thread-175452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:26:14.588 [DEBUG] [Thread-175452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:26:14.588 [DEBUG] [Thread-175452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:26:14.588 [DEBUG] [Thread-175452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:26:14.588 [DEBUG] [Thread-175452] [transport.py] [_log()] Compression: none
2026-04-11T19:26:14.588 [DEBUG] [Thread-175452] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:26:14.645 [DEBUG] [Thread-175452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:26:14.646 [DEBUG] [Thread-175452] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:26:14.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:26:14.647 [DEBUG] [Thread-175452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:26:14.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:26:14.704 [DEBUG] [Thread-175452] [transport.py] [_log()] userauth is OK
2026-04-11T19:26:14.705 [DEBUG] [Thread-175452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:26:14.705 [DEBUG] [Thread-175452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:26:14.705 [DEBUG] [Thread-175452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:26:14.705 [DEBUG] [Thread-175452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:26:14.726 [INFO] [Thread-175452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:26: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-04-11T19:26:14.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:26:15.562 [DEBUG] [Thread-175452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:26:15.563 [DEBUG] [Thread-175452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:26:15.611 [DEBUG] [Thread-175452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:26:15.611 [DEBUG] [Thread-175452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:26:15.621 [DEBUG] [Thread-175452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:26:15.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:26:15.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-04-11T19:26:15.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-04-11T19:26:15.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:26:15.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:26:15.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:26:15.659 [DEBUG] [Thread-175452] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:26:17.906 [DEBUG] [Thread-175454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:25.653 [DEBUG] [Thread-175455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:32.955 [DEBUG] [Thread-175456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:26:45.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:26:45.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-04-11T19:26:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 26, 5), 0.060845, 99.8917, 0.0, 16.4628, 12.0217, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:26:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:26:05
2026-04-11T19:26:47.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:26:47.477 [DEBUG] [Thread-175457] [transport.py] [_log()] starting thread (client mode): 0xae560220
2026-04-11T19:26:47.477 [DEBUG] [Thread-175457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:26:47.498 [DEBUG] [Thread-175457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:26:47.498 [INFO] [Thread-175457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:26:47.501 [DEBUG] [Thread-175457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:26:47.501 [DEBUG] [Thread-175457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:26:47.501 [DEBUG] [Thread-175457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] client lang: <none>
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] server lang: <none>
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] kex follows: False
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:26:47.502 [DEBUG] [Thread-175457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:26:47.503 [DEBUG] [Thread-175457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:26:47.503 [DEBUG] [Thread-175457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:26:47.503 [DEBUG] [Thread-175457] [transport.py] [_log()] Compression: none
2026-04-11T19:26:47.503 [DEBUG] [Thread-175457] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:26:47.522 [DEBUG] [Thread-175457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:26:47.522 [DEBUG] [Thread-175457] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:26:47.523 [DEBUG] [Thread-175457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:26:47.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:26:47.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:26:47.525 [DEBUG] [Thread-175457] [transport.py] [_log()] userauth is OK
2026-04-11T19:26:47.525 [DEBUG] [Thread-175457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:26:47.525 [DEBUG] [Thread-175457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:26:47.525 [DEBUG] [Thread-175457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:26:47.525 [DEBUG] [Thread-175457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:26:47.562 [INFO] [Thread-175457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:26:47.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:26:47.993 [DEBUG] [Thread-175459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:26:48.343 [DEBUG] [Thread-175457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:26:48.343 [DEBUG] [Thread-175457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:26:48.343 [DEBUG] [Thread-175457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:26:48.384 [DEBUG] [Thread-175457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:26:48.384 [DEBUG] [Thread-175457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:26:48.388 [DEBUG] [Thread-175457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:26:48.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:26:48.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:26:48.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:26:48.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:26:48.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:26:48.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:26:48.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:26:48.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:26:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:26:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.726507 -999.00  +11.90  15.78     97  +11.50 1 3 1 3 1     0    0 0.33 -1.08 ----- 15.8 15.8 292.6 20.4 13.1 -0.5 12.9 -0.3 12.6 -0.5 12.9 -0.9
2026-04-11T19:26:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:26:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:26:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.726507
2026-04-11T19:26:48.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:26:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:26:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:26:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:26:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:26:48.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:26:05', tmtdew=0.060845, humidity=99.8917, cloud=0.0, wind=16.4628, temperature=12.0217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:26:10.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:26:48.415 [DEBUG] [Thread-175457] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:26:48.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:26:48.508 [DEBUG] [Thread-175461] [transport.py] [_log()] starting thread (client mode): 0xae5182e0
2026-04-11T19:26:48.508 [DEBUG] [Thread-175461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:26:48.522 [DEBUG] [Thread-175461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:26:48.523 [INFO] [Thread-175461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:26:48.530 [DEBUG] [Thread-175461] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] client lang: <none>
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] server lang: <none>
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] kex follows: False
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] Compression: none
2026-04-11T19:26:48.531 [DEBUG] [Thread-175461] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:26:48.593 [DEBUG] [Thread-175461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:26:48.594 [DEBUG] [Thread-175461] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:26:48.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:26:48.595 [DEBUG] [Thread-175461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:26:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:26:48.656 [DEBUG] [Thread-175461] [transport.py] [_log()] userauth is OK
2026-04-11T19:26:48.657 [DEBUG] [Thread-175461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:26:48.657 [DEBUG] [Thread-175461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:26:48.657 [DEBUG] [Thread-175461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:26:48.657 [DEBUG] [Thread-175461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:26:48.676 [INFO] [Thread-175461] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:26:48.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:26:48.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:26:49.499 [DEBUG] [Thread-175461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:26:49.499 [DEBUG] [Thread-175461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:26:49.547 [DEBUG] [Thread-175461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:26:49.547 [DEBUG] [Thread-175461] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:26:49.556 [DEBUG] [Thread-175461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:26:49.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:26:49.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-04-11T19:26:49.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:26:49.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:26:49.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:26:49.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:26:49.592 [DEBUG] [Thread-175461] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:27:03.029 [DEBUG] [Thread-175463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:03.776 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:03.777 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:18.082 [DEBUG] [Thread-175464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:19.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:27:19.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:27: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-04-11T19:27:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 26, 41), 0.02672, 99.7504, 0.0, 19.1606, 12.4435, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:27:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:26:41
2026-04-11T19:27:21.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:27:21.468 [DEBUG] [Thread-175465] [transport.py] [_log()] starting thread (client mode): 0xb0f54ca0
2026-04-11T19:27:21.468 [DEBUG] [Thread-175465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:27:21.488 [DEBUG] [Thread-175465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:27:21.489 [INFO] [Thread-175465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] client lang: <none>
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] server lang: <none>
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] kex follows: False
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:27:21.492 [DEBUG] [Thread-175465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:27:21.493 [DEBUG] [Thread-175465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:27:21.493 [DEBUG] [Thread-175465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:27:21.493 [DEBUG] [Thread-175465] [transport.py] [_log()] Compression: none
2026-04-11T19:27:21.493 [DEBUG] [Thread-175465] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:27:21.508 [DEBUG] [Thread-175465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:27:21.509 [DEBUG] [Thread-175465] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:27:21.509 [DEBUG] [Thread-175465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:27:21.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:27:21.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:27:21.512 [DEBUG] [Thread-175465] [transport.py] [_log()] userauth is OK
2026-04-11T19:27:21.512 [DEBUG] [Thread-175465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:27:21.512 [DEBUG] [Thread-175465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:27:21.512 [DEBUG] [Thread-175465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:27:21.512 [DEBUG] [Thread-175465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:27:21.548 [INFO] [Thread-175465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:27:21.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:27:22.354 [DEBUG] [Thread-175465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:27:22.354 [DEBUG] [Thread-175465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:27:22.355 [DEBUG] [Thread-175465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:27:22.395 [DEBUG] [Thread-175465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:27:22.395 [DEBUG] [Thread-175465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:27:22.399 [DEBUG] [Thread-175465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:27:22.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:27:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:27:22.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:27:22.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:27:22.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:27:22.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:27:22.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:27:22.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:27:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:27:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.726854 -999.00  +11.90  14.31     97  +11.60 1 3 1 3 1     0    0 0.32 -1.23 ----- 14.3 14.3 291.2 16.7 13.1 -0.5 12.9 -0.3 12.6 -0.6 13.0 -0.7
2026-04-11T19:27:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:27:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:27:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.726854
2026-04-11T19:27:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:27:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:27:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:27:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:27:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:27:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:26:41', tmtdew=0.02672, humidity=99.7504, cloud=0.0, wind=19.1606, temperature=12.4435, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:26:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:27:22.427 [DEBUG] [Thread-175465] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:27:22.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:27:22.524 [DEBUG] [Thread-175468] [transport.py] [_log()] starting thread (client mode): 0xae5173d0
2026-04-11T19:27:22.524 [DEBUG] [Thread-175468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:27:22.538 [DEBUG] [Thread-175468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:27:22.538 [INFO] [Thread-175468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:22.546 [DEBUG] [Thread-175468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] client lang: <none>
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] server lang: <none>
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] kex follows: False
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:27:22.547 [DEBUG] [Thread-175468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:27:22.548 [DEBUG] [Thread-175468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:27:22.548 [DEBUG] [Thread-175468] [transport.py] [_log()] Compression: none
2026-04-11T19:27:22.548 [DEBUG] [Thread-175468] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:27:22.603 [DEBUG] [Thread-175468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:27:22.603 [DEBUG] [Thread-175468] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:27:22.604 [DEBUG] [Thread-175468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:27:22.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:27:22.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:27:22.659 [DEBUG] [Thread-175468] [transport.py] [_log()] userauth is OK
2026-04-11T19:27:22.659 [DEBUG] [Thread-175468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:27:22.659 [DEBUG] [Thread-175468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:27:22.659 [DEBUG] [Thread-175468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:27:22.660 [DEBUG] [Thread-175468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:27:22.682 [INFO] [Thread-175468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:27:22.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:27:22.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:27:23.508 [DEBUG] [Thread-175468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:27:23.509 [DEBUG] [Thread-175468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:27:23.556 [DEBUG] [Thread-175468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:27:23.556 [DEBUG] [Thread-175468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:27:23.565 [DEBUG] [Thread-175468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:27:23.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:27:23.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:27: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-04-11T19:27:23.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:27:23.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:27:23.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:27:23.601 [DEBUG] [Thread-175468] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:27:25.708 [DEBUG] [Thread-175470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:33.115 [DEBUG] [Thread-175471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:48.156 [DEBUG] [Thread-175472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:27:53.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:27:53.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:27:53.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-04-11T19:27:54.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 27, 16), 0.008295, 99.9084, 0.0, 18.104, 11.9883, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:27:54.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:27:16
2026-04-11T19:27:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:27:55.436 [DEBUG] [Thread-175473] [transport.py] [_log()] starting thread (client mode): 0xae509570
2026-04-11T19:27:55.436 [DEBUG] [Thread-175473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:27:55.456 [DEBUG] [Thread-175473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:27:55.456 [INFO] [Thread-175473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] client lang: <none>
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] server lang: <none>
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] kex follows: False
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] Compression: none
2026-04-11T19:27:55.459 [DEBUG] [Thread-175473] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:27:55.478 [DEBUG] [Thread-175473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:27:55.479 [DEBUG] [Thread-175473] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:27:55.479 [DEBUG] [Thread-175473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:27:55.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:27:55.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:27:55.481 [DEBUG] [Thread-175473] [transport.py] [_log()] userauth is OK
2026-04-11T19:27:55.481 [DEBUG] [Thread-175473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:27:55.481 [DEBUG] [Thread-175473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:27:55.481 [DEBUG] [Thread-175473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:27:55.481 [DEBUG] [Thread-175473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:27:55.504 [INFO] [Thread-175473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:27:55.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:27:56.282 [DEBUG] [Thread-175473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:27:56.282 [DEBUG] [Thread-175473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:27:56.282 [DEBUG] [Thread-175473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:27:56.322 [DEBUG] [Thread-175473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:27:56.323 [DEBUG] [Thread-175473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:27:56.325 [DEBUG] [Thread-175473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:27:56.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:27:56.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:27:56.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:27:56.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:27:56.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:27:56.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:27:56.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:27:56.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.727201 -999.00  +11.90  17.86     97  +11.60 1 3 1 3 1     0    0 0.31 -1.48 ----- 17.9 17.9 296.4 20.1 13.1 -0.6 12.9 -0.3 12.6 -0.4 13.1 -0.8
2026-04-11T19:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.727201
2026-04-11T19:27:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:27:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:27:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:27:56.347 [DEBUG] [Thread-175473] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:27:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:27:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:27:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:27:16', tmtdew=0.008295, humidity=99.9084, cloud=0.0, wind=18.104, temperature=11.9883, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:27:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:27:56.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:27:56.452 [DEBUG] [Thread-175476] [transport.py] [_log()] starting thread (client mode): 0xae509d50
2026-04-11T19:27:56.453 [DEBUG] [Thread-175476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:27:56.467 [DEBUG] [Thread-175476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:27:56.467 [INFO] [Thread-175476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:56.474 [DEBUG] [Thread-175476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] client lang: <none>
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] server lang: <none>
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] kex follows: False
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] Compression: none
2026-04-11T19:27:56.475 [DEBUG] [Thread-175476] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:27:56.533 [DEBUG] [Thread-175476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:27:56.533 [DEBUG] [Thread-175476] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:27:56.534 [DEBUG] [Thread-175476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:27:56.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:27:56.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:27:56.589 [DEBUG] [Thread-175476] [transport.py] [_log()] userauth is OK
2026-04-11T19:27:56.589 [DEBUG] [Thread-175476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:27:56.589 [DEBUG] [Thread-175476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:27:56.589 [DEBUG] [Thread-175476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:27:56.589 [DEBUG] [Thread-175476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:27:56.607 [INFO] [Thread-175476] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:27:56.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:27:56.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:27:57.438 [DEBUG] [Thread-175476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:27:57.438 [DEBUG] [Thread-175476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:27:57.485 [DEBUG] [Thread-175476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:27:57.486 [DEBUG] [Thread-175476] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:27:57.496 [DEBUG] [Thread-175476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:27:57.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:27:57.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-04-11T19:27:57.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-04-11T19:27:57.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:27:57.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:27:57.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:27:57.530 [DEBUG] [Thread-175476] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:28:03.194 [DEBUG] [Thread-175478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:28:03.987 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:28:03.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:28:18.246 [DEBUG] [Thread-175479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:28:25.787 [DEBUG] [Thread-175480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:28:27.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:28:27.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:28:27.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-04-11T19:28:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 27, 51), 0.03687, 99.6843, 0.0, 17.3966, 12.3773, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:28:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:27:51
2026-04-11T19:28:29.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:28:29.382 [DEBUG] [Thread-175481] [transport.py] [_log()] starting thread (client mode): 0xae5151e0
2026-04-11T19:28:29.382 [DEBUG] [Thread-175481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:28:29.401 [DEBUG] [Thread-175481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:28:29.401 [INFO] [Thread-175481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:28:29.404 [DEBUG] [Thread-175481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] client lang: <none>
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] server lang: <none>
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] kex follows: False
2026-04-11T19:28:29.405 [DEBUG] [Thread-175481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:28:29.406 [DEBUG] [Thread-175481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:28:29.406 [DEBUG] [Thread-175481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:28:29.406 [DEBUG] [Thread-175481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:28:29.406 [DEBUG] [Thread-175481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:28:29.406 [DEBUG] [Thread-175481] [transport.py] [_log()] Compression: none
2026-04-11T19:28:29.406 [DEBUG] [Thread-175481] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:28:29.423 [DEBUG] [Thread-175481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:28:29.424 [DEBUG] [Thread-175481] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:28:29.425 [DEBUG] [Thread-175481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:28:29.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:28:29.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:28:29.427 [DEBUG] [Thread-175481] [transport.py] [_log()] userauth is OK
2026-04-11T19:28:29.427 [DEBUG] [Thread-175481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:28:29.427 [DEBUG] [Thread-175481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:28:29.428 [DEBUG] [Thread-175481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:28:29.428 [DEBUG] [Thread-175481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:28:29.452 [INFO] [Thread-175481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:28:29.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:28:30.236 [DEBUG] [Thread-175481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:28:30.236 [DEBUG] [Thread-175481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:28:30.237 [DEBUG] [Thread-175481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:28:30.277 [DEBUG] [Thread-175481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:28:30.277 [DEBUG] [Thread-175481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:28:30.279 [DEBUG] [Thread-175481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:28:30.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:28:30.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:28:30.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:28:30.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:28:30.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:28:30.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:28:30.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:28:30.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:28:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:28:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.727548 -999.00  +11.90  12.88     97  +11.50 1 3 1 3 1     0    0 0.33 -1.14 ----- 12.9 12.9 284.9 19.3 13.0 -0.5 12.9 -0.4 12.6 -0.4 12.9 -1.4
2026-04-11T19:28:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:28:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:28:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.727548
2026-04-11T19:28:30.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:27:51', tmtdew=0.03687, humidity=99.6843, cloud=0.0, wind=17.3966, temperature=12.3773, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:27:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:28:30.305 [DEBUG] [Thread-175481] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:28:30.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:28:30.399 [DEBUG] [Thread-175484] [transport.py] [_log()] starting thread (client mode): 0xae517f70
2026-04-11T19:28:30.399 [DEBUG] [Thread-175484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:28:30.414 [DEBUG] [Thread-175484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:28:30.414 [INFO] [Thread-175484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:28:30.421 [DEBUG] [Thread-175484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] client lang: <none>
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] server lang: <none>
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] kex follows: False
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:28:30.422 [DEBUG] [Thread-175484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:28:30.423 [DEBUG] [Thread-175484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:28:30.423 [DEBUG] [Thread-175484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:28:30.423 [DEBUG] [Thread-175484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:28:30.423 [DEBUG] [Thread-175484] [transport.py] [_log()] Compression: none
2026-04-11T19:28:30.423 [DEBUG] [Thread-175484] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:28:30.481 [DEBUG] [Thread-175484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:28:30.482 [DEBUG] [Thread-175484] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:28:30.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:28:30.483 [DEBUG] [Thread-175484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:28:30.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:28:30.537 [DEBUG] [Thread-175484] [transport.py] [_log()] userauth is OK
2026-04-11T19:28:30.538 [DEBUG] [Thread-175484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:28:30.538 [DEBUG] [Thread-175484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:28:30.538 [DEBUG] [Thread-175484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:28:30.538 [DEBUG] [Thread-175484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:28:30.557 [INFO] [Thread-175484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:28:30.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:28:30.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:28:31.385 [DEBUG] [Thread-175484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:28:31.385 [DEBUG] [Thread-175484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:28:31.433 [DEBUG] [Thread-175484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:28:31.433 [DEBUG] [Thread-175484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:28:31.442 [DEBUG] [Thread-175484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:28:31.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:28:31.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:28:31.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-04-11T19:28:31.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:28:31.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:28:31.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:28:31.476 [DEBUG] [Thread-175484] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:28:33.281 [DEBUG] [Thread-175486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:28:48.334 [DEBUG] [Thread-175487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:29:01.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:29:01.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-04-11T19:29:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 28, 27), 0.01083, 99.8919, 0.0, 17.6983, 11.9552, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:29:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:28:27
2026-04-11T19:29:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:29:03.256 [DEBUG] [Thread-175488] [transport.py] [_log()] starting thread (client mode): 0xae560eb0
2026-04-11T19:29:03.257 [DEBUG] [Thread-175488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:29:03.276 [DEBUG] [Thread-175488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:29:03.276 [INFO] [Thread-175488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:29:03.279 [DEBUG] [Thread-175488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:29:03.279 [DEBUG] [Thread-175488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:29:03.279 [DEBUG] [Thread-175488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] client lang: <none>
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] server lang: <none>
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] kex follows: False
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] Compression: none
2026-04-11T19:29:03.280 [DEBUG] [Thread-175488] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:29:03.298 [DEBUG] [Thread-175488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:29:03.298 [DEBUG] [Thread-175488] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:29:03.299 [DEBUG] [Thread-175488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:29:03.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:29:03.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:29:03.300 [DEBUG] [Thread-175488] [transport.py] [_log()] userauth is OK
2026-04-11T19:29:03.300 [DEBUG] [Thread-175488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:29:03.300 [DEBUG] [Thread-175488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:29:03.301 [DEBUG] [Thread-175488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:29:03.301 [DEBUG] [Thread-175488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:29:03.313 [INFO] [Thread-175488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:29:03.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:29:03.371 [DEBUG] [Thread-175490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:04.118 [DEBUG] [Thread-175488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:29:04.118 [DEBUG] [Thread-175488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:29:04.118 [DEBUG] [Thread-175488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:29:04.159 [DEBUG] [Thread-175488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:29:04.159 [DEBUG] [Thread-175488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:29:04.163 [DEBUG] [Thread-175488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:29:04.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:29:04.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:29:04.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:29:04.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:29:04.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:29:04.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:29:04.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:29:04.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:29:04.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:29:04.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.727896 -999.00  +11.90  13.90     97  +11.50 1 3 1 3 1     0    0 0.32 -1.20 ----- 13.9 13.9 283.6 16.4 13.0 -0.9 12.9 -0.4 12.5 -0.7 12.9 -1.0
2026-04-11T19:29:04.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:29:04.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:29:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.727896
2026-04-11T19:29:04.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:29:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:29:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:29:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:29:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:29:04.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:28:27', tmtdew=0.01083, humidity=99.8919, cloud=0.0, wind=17.6983, temperature=11.9552, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:28:10.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:29:04.189 [DEBUG] [Thread-175488] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:29:04.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:04.193 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:04.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:29:04.282 [DEBUG] [Thread-175492] [transport.py] [_log()] starting thread (client mode): 0xae5190f0
2026-04-11T19:29:04.283 [DEBUG] [Thread-175492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:29:04.297 [DEBUG] [Thread-175492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:29:04.297 [INFO] [Thread-175492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:29:04.304 [DEBUG] [Thread-175492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:29:04.305 [DEBUG] [Thread-175492] [transport.py] [_log()] client lang: <none>
2026-04-11T19:29:04.305 [DEBUG] [Thread-175492] [transport.py] [_log()] server lang: <none>
2026-04-11T19:29:04.305 [DEBUG] [Thread-175492] [transport.py] [_log()] kex follows: False
2026-04-11T19:29:04.305 [DEBUG] [Thread-175492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:29:04.305 [DEBUG] [Thread-175492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:29:04.305 [DEBUG] [Thread-175492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:29:04.313 [DEBUG] [Thread-175492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:29:04.313 [DEBUG] [Thread-175492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:29:04.313 [DEBUG] [Thread-175492] [transport.py] [_log()] Compression: none
2026-04-11T19:29:04.314 [DEBUG] [Thread-175492] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:29:04.364 [DEBUG] [Thread-175492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:29:04.365 [DEBUG] [Thread-175492] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:29:04.366 [DEBUG] [Thread-175492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:29:04.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:29:04.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:29:04.425 [DEBUG] [Thread-175492] [transport.py] [_log()] userauth is OK
2026-04-11T19:29:04.425 [DEBUG] [Thread-175492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:29:04.425 [DEBUG] [Thread-175492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:29:04.425 [DEBUG] [Thread-175492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:29:04.425 [DEBUG] [Thread-175492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:29:04.444 [INFO] [Thread-175492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:29:04.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:29:04.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:29:05.281 [DEBUG] [Thread-175492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:29:05.281 [DEBUG] [Thread-175492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:29:05.329 [DEBUG] [Thread-175492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:29:05.329 [DEBUG] [Thread-175492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:29:05.338 [DEBUG] [Thread-175492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:29:05.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:29:05.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:29: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-04-11T19:29:05.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:29:05.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:29:05.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:29:05.378 [DEBUG] [Thread-175492] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:29:18.406 [DEBUG] [Thread-175494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:25.859 [DEBUG] [Thread-175495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:33.457 [DEBUG] [Thread-175496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:29:35.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:29:35.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:29:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:29:36.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 29, 3), 0.01337, 99.8754, 0.0, 17.6807, 11.9221, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:29:36.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:29:03
2026-04-11T19:29:37.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:29:37.193 [DEBUG] [Thread-175497] [transport.py] [_log()] starting thread (client mode): 0xae5a5720
2026-04-11T19:29:37.193 [DEBUG] [Thread-175497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:29:37.214 [DEBUG] [Thread-175497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:29:37.214 [INFO] [Thread-175497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:29:37.216 [DEBUG] [Thread-175497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] client lang: <none>
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] server lang: <none>
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] kex follows: False
2026-04-11T19:29:37.217 [DEBUG] [Thread-175497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:29:37.218 [DEBUG] [Thread-175497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:29:37.218 [DEBUG] [Thread-175497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:29:37.218 [DEBUG] [Thread-175497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:29:37.218 [DEBUG] [Thread-175497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:29:37.218 [DEBUG] [Thread-175497] [transport.py] [_log()] Compression: none
2026-04-11T19:29:37.218 [DEBUG] [Thread-175497] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:29:37.238 [DEBUG] [Thread-175497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:29:37.238 [DEBUG] [Thread-175497] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:29:37.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:29:37.239 [DEBUG] [Thread-175497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:29:37.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:29:37.241 [DEBUG] [Thread-175497] [transport.py] [_log()] userauth is OK
2026-04-11T19:29:37.242 [DEBUG] [Thread-175497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:29:37.242 [DEBUG] [Thread-175497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:29:37.242 [DEBUG] [Thread-175497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:29:37.242 [DEBUG] [Thread-175497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:29:37.267 [INFO] [Thread-175497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:29:37.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:29:38.039 [DEBUG] [Thread-175497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:29:38.039 [DEBUG] [Thread-175497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:29:38.040 [DEBUG] [Thread-175497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:29:38.082 [DEBUG] [Thread-175497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:29:38.082 [DEBUG] [Thread-175497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:29:38.086 [DEBUG] [Thread-175497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:29:38.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:29:38.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:29:38.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:29:38.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:29:38.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:29:38.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:29:38.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:29:38.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:29:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:29:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.728243 -999.00  +11.90  11.94     97  +11.50 1 3 1 3 1     0    0 0.32 -1.07 ----- 11.9 11.9 291.2 16.2 13.0 -0.7 12.9 -0.4 12.5 -0.5 12.9 -0.8
2026-04-11T19:29:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:29:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:29:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.728243
2026-04-11T19:29:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:29:38.116 [DEBUG] [Thread-175497] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:29:38.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:29:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:29:03', tmtdew=0.01337, humidity=99.8754, cloud=0.0, wind=17.6807, temperature=11.9221, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:28:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:29:38.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:29:38.220 [DEBUG] [Thread-175500] [transport.py] [_log()] starting thread (client mode): 0xae5a6fb0
2026-04-11T19:29:38.220 [DEBUG] [Thread-175500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:29:38.236 [DEBUG] [Thread-175500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:29:38.236 [INFO] [Thread-175500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] client lang: <none>
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] server lang: <none>
2026-04-11T19:29:38.244 [DEBUG] [Thread-175500] [transport.py] [_log()] kex follows: False
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] Compression: none
2026-04-11T19:29:38.245 [DEBUG] [Thread-175500] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:29:38.304 [DEBUG] [Thread-175500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:29:38.305 [DEBUG] [Thread-175500] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:29:38.305 [DEBUG] [Thread-175500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:29:38.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:29:38.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:29:38.364 [DEBUG] [Thread-175500] [transport.py] [_log()] userauth is OK
2026-04-11T19:29:38.364 [DEBUG] [Thread-175500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:29:38.364 [DEBUG] [Thread-175500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:29:38.364 [DEBUG] [Thread-175500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:29:38.365 [DEBUG] [Thread-175500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:29:38.384 [INFO] [Thread-175500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:29:38.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:29:38.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:29:39.204 [DEBUG] [Thread-175500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:29:39.205 [DEBUG] [Thread-175500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:29:39.253 [DEBUG] [Thread-175500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:29:39.253 [DEBUG] [Thread-175500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:29:39.262 [DEBUG] [Thread-175500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:29:39.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:29:39.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:29:39.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:29:39.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:29:39.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:29:39.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:29:39.301 [DEBUG] [Thread-175500] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:29:48.493 [DEBUG] [Thread-175502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:03.542 [DEBUG] [Thread-175503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:04.394 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:04.395 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:09.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:30:09.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:30:09.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-04-11T19:30:10.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 29, 38), 0.02672, 99.7507, 0.0, 19.9721, 12.3774, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:30:10.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:29:38
2026-04-11T19:30:11.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:30:11.167 [DEBUG] [Thread-175504] [transport.py] [_log()] starting thread (client mode): 0xae5a7940
2026-04-11T19:30:11.167 [DEBUG] [Thread-175504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:30:11.187 [DEBUG] [Thread-175504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:30:11.187 [INFO] [Thread-175504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:30:11.190 [DEBUG] [Thread-175504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] client lang: <none>
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] server lang: <none>
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] kex follows: False
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:30:11.191 [DEBUG] [Thread-175504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:30:11.192 [DEBUG] [Thread-175504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:30:11.192 [DEBUG] [Thread-175504] [transport.py] [_log()] Compression: none
2026-04-11T19:30:11.192 [DEBUG] [Thread-175504] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:30:11.208 [DEBUG] [Thread-175504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:30:11.209 [DEBUG] [Thread-175504] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:30:11.209 [DEBUG] [Thread-175504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:30:11.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:30:11.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:30:11.253 [DEBUG] [Thread-175504] [transport.py] [_log()] userauth is OK
2026-04-11T19:30:11.253 [DEBUG] [Thread-175504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:30:11.253 [DEBUG] [Thread-175504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:30:11.254 [DEBUG] [Thread-175504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:30:11.254 [DEBUG] [Thread-175504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:30:11.274 [INFO] [Thread-175504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:30:11.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:30:12.513 [DEBUG] [Thread-175504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:30:12.513 [DEBUG] [Thread-175504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:30:12.514 [DEBUG] [Thread-175504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:30:12.554 [DEBUG] [Thread-175504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:30:12.554 [DEBUG] [Thread-175504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:30:12.557 [DEBUG] [Thread-175504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:30:12.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:30:12.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:30:12.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:30:12.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:30:12.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:30:12.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:30:12.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:30:12.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:30:12.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:30:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.728937 -999.00  +11.90  14.26     97  +11.50 1 3 1 3 1     0    0 0.34 -0.70 ----- 14.3 14.3 281.6 20.6 13.0 -0.7 12.8 -0.3 12.4 -1.0 12.9 -1.1
2026-04-11T19:30:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:30:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:30:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.728937
2026-04-11T19:30:12.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:30:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:30:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:30:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:30:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:30:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:29:38', tmtdew=0.02672, humidity=99.7507, cloud=0.0, wind=19.9721, temperature=12.3774, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:29:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:30:12.583 [DEBUG] [Thread-175504] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:30:12.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:30:12.676 [DEBUG] [Thread-175507] [transport.py] [_log()] starting thread (client mode): 0xae509420
2026-04-11T19:30:12.677 [DEBUG] [Thread-175507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:30:12.692 [DEBUG] [Thread-175507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:30:12.693 [INFO] [Thread-175507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:30:12.700 [DEBUG] [Thread-175507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] client lang: <none>
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] server lang: <none>
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] kex follows: False
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] Compression: none
2026-04-11T19:30:12.701 [DEBUG] [Thread-175507] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:30:12.760 [DEBUG] [Thread-175507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:30:12.761 [DEBUG] [Thread-175507] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:30:12.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:30:12.762 [DEBUG] [Thread-175507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:30:12.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:30:12.819 [DEBUG] [Thread-175507] [transport.py] [_log()] userauth is OK
2026-04-11T19:30:12.820 [DEBUG] [Thread-175507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:30:12.820 [DEBUG] [Thread-175507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:30:12.820 [DEBUG] [Thread-175507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:30:12.820 [DEBUG] [Thread-175507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:30:12.839 [INFO] [Thread-175507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:30:12.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:30:12.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:30:13.689 [DEBUG] [Thread-175507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:30:13.689 [DEBUG] [Thread-175507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:30:13.737 [DEBUG] [Thread-175507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:30:13.737 [DEBUG] [Thread-175507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:30:13.747 [DEBUG] [Thread-175507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:30:13.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:30:13.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-04-11T19:30:13.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-04-11T19:30:13.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:30:13.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:30:13.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:30:13.783 [DEBUG] [Thread-175507] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:30:18.574 [DEBUG] [Thread-175509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:25.941 [DEBUG] [Thread-175510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:33.619 [DEBUG] [Thread-175511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:30:43.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:30:43.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:30:43.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-04-11T19:30:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 30, 13), 0.05831, 99.9086, 0.0, 16.6745, 11.9221, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:30:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:30:13
2026-04-11T19:30:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:30:45.613 [DEBUG] [Thread-175512] [transport.py] [_log()] starting thread (client mode): 0xae517220
2026-04-11T19:30:45.613 [DEBUG] [Thread-175512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:30:45.631 [DEBUG] [Thread-175512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:30:45.631 [INFO] [Thread-175512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:30:45.634 [DEBUG] [Thread-175512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] client lang: <none>
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] server lang: <none>
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] kex follows: False
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] Compression: none
2026-04-11T19:30:45.635 [DEBUG] [Thread-175512] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:30:45.651 [DEBUG] [Thread-175512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:30:45.652 [DEBUG] [Thread-175512] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:30:45.652 [DEBUG] [Thread-175512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:30:45.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:30:45.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:30:45.654 [DEBUG] [Thread-175512] [transport.py] [_log()] userauth is OK
2026-04-11T19:30:45.654 [DEBUG] [Thread-175512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:30:45.654 [DEBUG] [Thread-175512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:30:45.654 [DEBUG] [Thread-175512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:30:45.654 [DEBUG] [Thread-175512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:30:45.686 [INFO] [Thread-175512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:30:45.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:30:46.525 [DEBUG] [Thread-175512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:30:46.525 [DEBUG] [Thread-175512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:30:46.525 [DEBUG] [Thread-175512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:30:46.566 [DEBUG] [Thread-175512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:30:46.566 [DEBUG] [Thread-175512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:30:46.568 [DEBUG] [Thread-175512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:30:46.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:30:46.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:30:46.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:30:46.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:30:46.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:30:46.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:30:46.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:30:46.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:30:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:30:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.729284 -999.00  +11.90  15.23     97  +11.50 1 3 1 3 1     0    0 0.35 -0.53 ----- 15.2 15.2 297.7 19.8 13.1 -0.6 12.8 -0.2 12.5 -0.3 12.9 -0.8
2026-04-11T19:30:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:30:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:30:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.729284
2026-04-11T19:30:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:30:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:30:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:30:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:30:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:30:46.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:30:13', tmtdew=0.05831, humidity=99.9086, cloud=0.0, wind=16.6745, temperature=11.9221, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:30:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:30:46.587 [DEBUG] [Thread-175512] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:30:46.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:30:46.679 [DEBUG] [Thread-175515] [transport.py] [_log()] starting thread (client mode): 0xae50a3e0
2026-04-11T19:30:46.680 [DEBUG] [Thread-175515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:30:46.695 [DEBUG] [Thread-175515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:30:46.695 [INFO] [Thread-175515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:30:46.702 [DEBUG] [Thread-175515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:30:46.702 [DEBUG] [Thread-175515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:30:46.702 [DEBUG] [Thread-175515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:30:46.702 [DEBUG] [Thread-175515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:46.702 [DEBUG] [Thread-175515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:30:46.702 [DEBUG] [Thread-175515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] client lang: <none>
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] server lang: <none>
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] kex follows: False
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] Compression: none
2026-04-11T19:30:46.703 [DEBUG] [Thread-175515] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:30:46.764 [DEBUG] [Thread-175515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:30:46.765 [DEBUG] [Thread-175515] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:30:46.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:30:46.766 [DEBUG] [Thread-175515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:30:46.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:30:46.823 [DEBUG] [Thread-175515] [transport.py] [_log()] userauth is OK
2026-04-11T19:30:46.823 [DEBUG] [Thread-175515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:30:46.824 [DEBUG] [Thread-175515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:30:46.824 [DEBUG] [Thread-175515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:30:46.824 [DEBUG] [Thread-175515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:30:46.842 [INFO] [Thread-175515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:30:46.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:30:46.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:30:47.707 [DEBUG] [Thread-175515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:30:47.708 [DEBUG] [Thread-175515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:30:47.755 [DEBUG] [Thread-175515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:30:47.756 [DEBUG] [Thread-175515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:30:47.764 [DEBUG] [Thread-175515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:30:47.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:30:47.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-04-11T19:30:47.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-04-11T19:30:47.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:30:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:30:47.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:30:47.798 [DEBUG] [Thread-175515] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:30:48.656 [DEBUG] [Thread-175517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:03.710 [DEBUG] [Thread-175518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:04.596 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:04.597 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:17.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:31:17.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:31:17.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:31:18.746 [DEBUG] [Thread-175519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 30, 49), 0.01652, 99.8172, 0.0, 19.4076, 12.4769, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:31:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:30:49
2026-04-11T19:31:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:31:19.624 [DEBUG] [Thread-175520] [transport.py] [_log()] starting thread (client mode): 0xae5153f0
2026-04-11T19:31:19.625 [DEBUG] [Thread-175520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:31:19.644 [DEBUG] [Thread-175520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:31:19.645 [INFO] [Thread-175520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:31:19.647 [DEBUG] [Thread-175520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] client lang: <none>
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] server lang: <none>
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] kex follows: False
2026-04-11T19:31:19.648 [DEBUG] [Thread-175520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:31:19.649 [DEBUG] [Thread-175520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:31:19.649 [DEBUG] [Thread-175520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:31:19.649 [DEBUG] [Thread-175520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:31:19.649 [DEBUG] [Thread-175520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:31:19.649 [DEBUG] [Thread-175520] [transport.py] [_log()] Compression: none
2026-04-11T19:31:19.649 [DEBUG] [Thread-175520] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:31:19.667 [DEBUG] [Thread-175520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:31:19.668 [DEBUG] [Thread-175520] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:31:19.668 [DEBUG] [Thread-175520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:31:19.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:31:19.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:31:19.670 [DEBUG] [Thread-175520] [transport.py] [_log()] userauth is OK
2026-04-11T19:31:19.670 [DEBUG] [Thread-175520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:31:19.670 [DEBUG] [Thread-175520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:31:19.670 [DEBUG] [Thread-175520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:31:19.670 [DEBUG] [Thread-175520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:31:19.694 [INFO] [Thread-175520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:31:19.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:31:20.460 [DEBUG] [Thread-175520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:31:20.460 [DEBUG] [Thread-175520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:31:20.461 [DEBUG] [Thread-175520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:31:20.501 [DEBUG] [Thread-175520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:31:20.501 [DEBUG] [Thread-175520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:31:20.505 [DEBUG] [Thread-175520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:31:20.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:31:20.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:31:20.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:31:20.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:31:20.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:31:20.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:31:20.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:31:20.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:31:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:31:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.729632 -999.00  +11.90  12.97     97  +11.50 1 3 1 3 1     0    0 0.35 -0.60 ----- 13.0 13.0 297.4 17.9 13.0 -0.6 12.8 -0.3 12.5 -0.7 12.9 -0.6
2026-04-11T19:31:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:31:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:31:20.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.729632
2026-04-11T19:31:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:31:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:31:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:31:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:31:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:31:20.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:30:49', tmtdew=0.01652, humidity=99.8172, cloud=0.0, wind=19.4076, temperature=12.4769, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:30:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:31:20.529 [DEBUG] [Thread-175520] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:31:20.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:31:20.630 [DEBUG] [Thread-175523] [transport.py] [_log()] starting thread (client mode): 0xae514f10
2026-04-11T19:31:20.630 [DEBUG] [Thread-175523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:31:20.648 [DEBUG] [Thread-175523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:31:20.649 [INFO] [Thread-175523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:31:20.660 [DEBUG] [Thread-175523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:31:20.660 [DEBUG] [Thread-175523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:31:20.660 [DEBUG] [Thread-175523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:31:20.661 [DEBUG] [Thread-175523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:20.661 [DEBUG] [Thread-175523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:20.661 [DEBUG] [Thread-175523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:20.661 [DEBUG] [Thread-175523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:20.661 [DEBUG] [Thread-175523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:31:20.661 [DEBUG] [Thread-175523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] client lang: <none>
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] server lang: <none>
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] kex follows: False
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] Compression: none
2026-04-11T19:31:20.662 [DEBUG] [Thread-175523] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:31:20.718 [DEBUG] [Thread-175523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:31:20.719 [DEBUG] [Thread-175523] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:31:20.719 [DEBUG] [Thread-175523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:31:20.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:31:20.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:31:20.774 [DEBUG] [Thread-175523] [transport.py] [_log()] userauth is OK
2026-04-11T19:31:20.774 [DEBUG] [Thread-175523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:31:20.774 [DEBUG] [Thread-175523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:31:20.774 [DEBUG] [Thread-175523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:31:20.774 [DEBUG] [Thread-175523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:31:20.793 [INFO] [Thread-175523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:31:20.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:31:20.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:31:21.630 [DEBUG] [Thread-175523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:31:21.630 [DEBUG] [Thread-175523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:31:21.678 [DEBUG] [Thread-175523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:31:21.678 [DEBUG] [Thread-175523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:31:21.687 [DEBUG] [Thread-175523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:31:21.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:31:21.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-04-11T19:31:21.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-04-11T19:31:21.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:31:21.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:31:21.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:31:21.724 [DEBUG] [Thread-175523] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:31:26.016 [DEBUG] [Thread-175525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:33.783 [DEBUG] [Thread-175526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:48.835 [DEBUG] [Thread-175527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:31:51.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:31:51.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:31:51.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-04-11T19:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 31, 24), 0.063315, 99.8755, 0.0, 16.9744, 11.9885, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:31:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:31:24
2026-04-11T19:31:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:31:53.592 [DEBUG] [Thread-175528] [transport.py] [_log()] starting thread (client mode): 0xae5a7ac0
2026-04-11T19:31:53.592 [DEBUG] [Thread-175528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:31:53.614 [DEBUG] [Thread-175528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:31:53.614 [INFO] [Thread-175528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:31:53.617 [DEBUG] [Thread-175528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:31:53.618 [DEBUG] [Thread-175528] [transport.py] [_log()] client lang: <none>
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] server lang: <none>
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] kex follows: False
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] Compression: none
2026-04-11T19:31:53.619 [DEBUG] [Thread-175528] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:31:53.637 [DEBUG] [Thread-175528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:31:53.637 [DEBUG] [Thread-175528] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:31:53.638 [DEBUG] [Thread-175528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:31:53.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:31:53.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:31:53.640 [DEBUG] [Thread-175528] [transport.py] [_log()] userauth is OK
2026-04-11T19:31:53.640 [DEBUG] [Thread-175528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:31:53.640 [DEBUG] [Thread-175528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:31:53.640 [DEBUG] [Thread-175528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:31:53.640 [DEBUG] [Thread-175528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:31:53.665 [INFO] [Thread-175528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:31:53.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:31:54.479 [DEBUG] [Thread-175528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:31:54.479 [DEBUG] [Thread-175528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:31:54.479 [DEBUG] [Thread-175528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:31:54.520 [DEBUG] [Thread-175528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:31:54.520 [DEBUG] [Thread-175528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:31:54.523 [DEBUG] [Thread-175528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:31:54.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:31:54.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:31:54.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:31:54.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:31:54.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:31:54.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:31:54.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:31:54.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:31:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:31:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.729979 -999.00  +11.90  14.87     97  +11.60 1 3 1 3 1     0    0 0.34 -0.76 ----- 14.9 14.9 294.8 17.4 13.1 -0.6 12.8 -0.2 12.5 -0.5 12.9 -0.4
2026-04-11T19:31:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:31:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:31:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.729979
2026-04-11T19:31:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:31:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:31:54.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:31:54.548 [DEBUG] [Thread-175528] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:31:54.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:31:54.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:31:54.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:31:24', tmtdew=0.063315, humidity=99.8755, cloud=0.0, wind=16.9744, temperature=11.9885, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:31:10.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:31:54.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:31:54.641 [DEBUG] [Thread-175531] [transport.py] [_log()] starting thread (client mode): 0xae514100
2026-04-11T19:31:54.641 [DEBUG] [Thread-175531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:31:54.657 [DEBUG] [Thread-175531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:31:54.657 [INFO] [Thread-175531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] client lang: <none>
2026-04-11T19:31:54.665 [DEBUG] [Thread-175531] [transport.py] [_log()] server lang: <none>
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] kex follows: False
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] Compression: none
2026-04-11T19:31:54.666 [DEBUG] [Thread-175531] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:31:54.725 [DEBUG] [Thread-175531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:31:54.726 [DEBUG] [Thread-175531] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:31:54.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:31:54.727 [DEBUG] [Thread-175531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:31:54.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:31:54.782 [DEBUG] [Thread-175531] [transport.py] [_log()] userauth is OK
2026-04-11T19:31:54.782 [DEBUG] [Thread-175531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:31:54.782 [DEBUG] [Thread-175531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:31:54.783 [DEBUG] [Thread-175531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:31:54.783 [DEBUG] [Thread-175531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:31:54.802 [INFO] [Thread-175531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:31:54.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:31:54.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:31:55.656 [DEBUG] [Thread-175531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:31:55.657 [DEBUG] [Thread-175531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:31:55.706 [DEBUG] [Thread-175531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:31:55.706 [DEBUG] [Thread-175531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:31:55.715 [DEBUG] [Thread-175531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:31:55.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:31:55.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:31:55.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-04-11T19:31:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:31:55.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:31:55.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:31:55.754 [DEBUG] [Thread-175531] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:32:03.873 [DEBUG] [Thread-175533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:04.801 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:04.802 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:18.924 [DEBUG] [Thread-175534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:25.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:32:25.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:32:25.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-04-11T19:32:26.092 [DEBUG] [Thread-175535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 31, 24), 0.013315, 99.8755, 0.0, 18.7744, 11.9885, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:32:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:31:24
2026-04-11T19:32:27.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:32:27.646 [DEBUG] [Thread-175536] [transport.py] [_log()] starting thread (client mode): 0xa79504c0
2026-04-11T19:32:27.646 [DEBUG] [Thread-175536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:32:27.667 [DEBUG] [Thread-175536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:32:27.667 [INFO] [Thread-175536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:32:27.670 [DEBUG] [Thread-175536] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:32:27.670 [DEBUG] [Thread-175536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:32:27.670 [DEBUG] [Thread-175536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:32:27.670 [DEBUG] [Thread-175536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:32:27.670 [DEBUG] [Thread-175536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] client lang: <none>
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] server lang: <none>
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] kex follows: False
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:32:27.671 [DEBUG] [Thread-175536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:32:27.672 [DEBUG] [Thread-175536] [transport.py] [_log()] Compression: none
2026-04-11T19:32:27.672 [DEBUG] [Thread-175536] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:32:27.682 [DEBUG] [Thread-175536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:32:27.682 [DEBUG] [Thread-175536] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:32:27.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:32:27.683 [DEBUG] [Thread-175536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:32:27.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:32:27.684 [DEBUG] [Thread-175536] [transport.py] [_log()] userauth is OK
2026-04-11T19:32:27.684 [DEBUG] [Thread-175536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:32:27.685 [DEBUG] [Thread-175536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:32:27.685 [DEBUG] [Thread-175536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:32:27.685 [DEBUG] [Thread-175536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:32:27.699 [INFO] [Thread-175536] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:32:27.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:32:28.426 [DEBUG] [Thread-175536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:32:28.426 [DEBUG] [Thread-175536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:32:28.427 [DEBUG] [Thread-175536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:32:28.467 [DEBUG] [Thread-175536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:32:28.468 [DEBUG] [Thread-175536] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:32:28.471 [DEBUG] [Thread-175536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:32:28.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:32:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:32:28.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:32:28.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:32:28.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:32:28.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:32:28.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.730326 -999.00  +11.90  16.84     97  +11.60 1 3 1 3 1     0    0 0.35 -0.62 ----- 16.8 16.8 295.0 20.3 13.1 -0.6 12.9 -0.3 12.6 -0.8 12.9 -0.2
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.730326
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:32:28.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:31:24', tmtdew=0.013315, humidity=99.8755, cloud=0.0, wind=18.7744, temperature=11.9885, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:31:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:32:28.494 [DEBUG] [Thread-175536] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:32:28.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:32:28.584 [DEBUG] [Thread-175539] [transport.py] [_log()] starting thread (client mode): 0xb0f56e30
2026-04-11T19:32:28.585 [DEBUG] [Thread-175539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:32:28.600 [DEBUG] [Thread-175539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:32:28.600 [INFO] [Thread-175539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] client lang: <none>
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] server lang: <none>
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] kex follows: False
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:32:28.608 [DEBUG] [Thread-175539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:32:28.609 [DEBUG] [Thread-175539] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:32:28.609 [DEBUG] [Thread-175539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:32:28.609 [DEBUG] [Thread-175539] [transport.py] [_log()] Compression: none
2026-04-11T19:32:28.609 [DEBUG] [Thread-175539] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:32:28.670 [DEBUG] [Thread-175539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:32:28.670 [DEBUG] [Thread-175539] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:32:28.671 [DEBUG] [Thread-175539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:32:28.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:32:28.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:32:28.729 [DEBUG] [Thread-175539] [transport.py] [_log()] userauth is OK
2026-04-11T19:32:28.729 [DEBUG] [Thread-175539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:32:28.729 [DEBUG] [Thread-175539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:32:28.729 [DEBUG] [Thread-175539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:32:28.729 [DEBUG] [Thread-175539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:32:28.748 [INFO] [Thread-175539] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:32:28.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:32:28.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:32:29.578 [DEBUG] [Thread-175539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:32:29.578 [DEBUG] [Thread-175539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:32:29.626 [DEBUG] [Thread-175539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:32:29.626 [DEBUG] [Thread-175539] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:32:29.635 [DEBUG] [Thread-175539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:32:29.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:32:29.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:32:29.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:32:29.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:32:29.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:32:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:32:29.672 [DEBUG] [Thread-175539] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:32:33.959 [DEBUG] [Thread-175541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:49.002 [DEBUG] [Thread-175542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:32:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:32:59.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:32:59.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-04-11T19:33:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 32, 35), 0.01144, 99.8505, 0.0, 19.0548, 12.477, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:33:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:32:35
2026-04-11T19:33:01.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:33:01.504 [DEBUG] [Thread-175543] [transport.py] [_log()] starting thread (client mode): 0xb0f6e4a0
2026-04-11T19:33:01.504 [DEBUG] [Thread-175543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:33:01.525 [DEBUG] [Thread-175543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:33:01.525 [INFO] [Thread-175543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] client lang: <none>
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] server lang: <none>
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] kex follows: False
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] Compression: none
2026-04-11T19:33:01.528 [DEBUG] [Thread-175543] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:33:01.546 [DEBUG] [Thread-175543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:33:01.547 [DEBUG] [Thread-175543] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:33:01.547 [DEBUG] [Thread-175543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:33:01.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:33:01.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:33:01.549 [DEBUG] [Thread-175543] [transport.py] [_log()] userauth is OK
2026-04-11T19:33:01.549 [DEBUG] [Thread-175543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:33:01.550 [DEBUG] [Thread-175543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:33:01.550 [DEBUG] [Thread-175543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:33:01.550 [DEBUG] [Thread-175543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:33:01.573 [INFO] [Thread-175543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:33:01.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:33:02.391 [DEBUG] [Thread-175543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:33:02.392 [DEBUG] [Thread-175543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:33:02.392 [DEBUG] [Thread-175543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:33:02.433 [DEBUG] [Thread-175543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:33:02.433 [DEBUG] [Thread-175543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:33:02.437 [DEBUG] [Thread-175543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:33:02.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:33:02.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:33:02.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:33:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:33:02.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:33:02.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:33:02.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:33:02.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:33:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:33:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.730673 -999.00  +11.90  15.06     97  +11.60 1 3 1 3 1     0    0 0.34 -0.73 ----- 15.1 15.1 296.6 21.2 13.1 -0.5 12.9 -0.3 12.6 -0.9 12.9 -0.5
2026-04-11T19:33:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:33:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:33:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.730673
2026-04-11T19:33:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:33:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:33:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:33:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:33:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:33:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:32:35', tmtdew=0.01144, humidity=99.8505, cloud=0.0, wind=19.0548, temperature=12.477, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:32:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:33:02.463 [DEBUG] [Thread-175543] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:33:02.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:33:02.568 [DEBUG] [Thread-175546] [transport.py] [_log()] starting thread (client mode): 0xa7953550
2026-04-11T19:33:02.568 [DEBUG] [Thread-175546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:33:02.582 [DEBUG] [Thread-175546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:33:02.582 [INFO] [Thread-175546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] client lang: <none>
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] server lang: <none>
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] kex follows: False
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:33:02.590 [DEBUG] [Thread-175546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:33:02.591 [DEBUG] [Thread-175546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:33:02.591 [DEBUG] [Thread-175546] [transport.py] [_log()] Compression: none
2026-04-11T19:33:02.591 [DEBUG] [Thread-175546] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:33:02.649 [DEBUG] [Thread-175546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:33:02.650 [DEBUG] [Thread-175546] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:33:02.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:33:02.651 [DEBUG] [Thread-175546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:33:02.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:33:02.709 [DEBUG] [Thread-175546] [transport.py] [_log()] userauth is OK
2026-04-11T19:33:02.709 [DEBUG] [Thread-175546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:33:02.709 [DEBUG] [Thread-175546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:33:02.709 [DEBUG] [Thread-175546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:33:02.709 [DEBUG] [Thread-175546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:33:02.728 [INFO] [Thread-175546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:33:02.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:33:02.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:33:03.570 [DEBUG] [Thread-175546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:33:03.570 [DEBUG] [Thread-175546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:33:03.618 [DEBUG] [Thread-175546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:33:03.618 [DEBUG] [Thread-175546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:33:03.627 [DEBUG] [Thread-175546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:33:03.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:33:03.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:33:03.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-04-11T19:33:03.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:33:03.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:33:03.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:33:03.659 [DEBUG] [Thread-175546] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:33:04.042 [DEBUG] [Thread-175548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:33:05.006 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:33:05.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:33:19.100 [DEBUG] [Thread-175549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:33:26.150 [DEBUG] [Thread-175550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:33:33.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:33:33.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:33:33.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-04-11T19:33:34.139 [DEBUG] [Thread-175551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:33:34.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 33, 10), 0.01334, 99.8755, 0.0, 18.2099, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:33:34.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:33:10
2026-04-11T19:33:35.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:33:35.485 [DEBUG] [Thread-175552] [transport.py] [_log()] starting thread (client mode): 0xae5a54e0
2026-04-11T19:33:35.486 [DEBUG] [Thread-175552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:33:35.504 [DEBUG] [Thread-175552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:33:35.504 [INFO] [Thread-175552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:33:35.507 [DEBUG] [Thread-175552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] client lang: <none>
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] server lang: <none>
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] kex follows: False
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] Compression: none
2026-04-11T19:33:35.508 [DEBUG] [Thread-175552] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:33:35.523 [DEBUG] [Thread-175552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:33:35.524 [DEBUG] [Thread-175552] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:33:35.524 [DEBUG] [Thread-175552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:33:35.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:33:35.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:33:35.526 [DEBUG] [Thread-175552] [transport.py] [_log()] userauth is OK
2026-04-11T19:33:35.526 [DEBUG] [Thread-175552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:33:35.526 [DEBUG] [Thread-175552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:33:35.526 [DEBUG] [Thread-175552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:33:35.527 [DEBUG] [Thread-175552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:33:35.557 [INFO] [Thread-175552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:33:35.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:33:36.328 [DEBUG] [Thread-175552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:33:36.329 [DEBUG] [Thread-175552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:33:36.329 [DEBUG] [Thread-175552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:33:36.369 [DEBUG] [Thread-175552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:33:36.369 [DEBUG] [Thread-175552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:33:36.372 [DEBUG] [Thread-175552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:33:36.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:33:36.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:33:36.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:33:36.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:33:36.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:33:36.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:33:36.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:33:36.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:33:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:33:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.731021 -999.00  +11.90  14.45     97  +11.60 1 3 1 3 1     0    0 0.33 -1.00 ----- 14.4 14.4 298.0 18.7 13.1 -0.5 12.9 -0.3 12.6 -1.0 13.0 -0.4
2026-04-11T19:33:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:33:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:33:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.731021
2026-04-11T19:33:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:33:36.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:33:36.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:33:36.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:33:36.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:33:36.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:33:10', tmtdew=0.01334, humidity=99.8755, cloud=0.0, wind=18.2099, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:32:40.214', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:33:36.398 [DEBUG] [Thread-175552] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:33:36.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:33:36.492 [DEBUG] [Thread-175555] [transport.py] [_log()] starting thread (client mode): 0xae509b40
2026-04-11T19:33:36.492 [DEBUG] [Thread-175555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:33:36.506 [DEBUG] [Thread-175555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:33:36.507 [INFO] [Thread-175555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:33:36.514 [DEBUG] [Thread-175555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:33:36.514 [DEBUG] [Thread-175555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:33:36.514 [DEBUG] [Thread-175555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] client lang: <none>
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] server lang: <none>
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] kex follows: False
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:33:36.515 [DEBUG] [Thread-175555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:33:36.516 [DEBUG] [Thread-175555] [transport.py] [_log()] Compression: none
2026-04-11T19:33:36.516 [DEBUG] [Thread-175555] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:33:36.572 [DEBUG] [Thread-175555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:33:36.573 [DEBUG] [Thread-175555] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:33:36.573 [DEBUG] [Thread-175555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:33:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:33:36.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:33:36.629 [DEBUG] [Thread-175555] [transport.py] [_log()] userauth is OK
2026-04-11T19:33:36.629 [DEBUG] [Thread-175555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:33:36.629 [DEBUG] [Thread-175555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:33:36.629 [DEBUG] [Thread-175555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:33:36.629 [DEBUG] [Thread-175555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:33:36.648 [INFO] [Thread-175555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:33:36.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:33:36.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:33:37.480 [DEBUG] [Thread-175555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:33:37.480 [DEBUG] [Thread-175555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:33:37.528 [DEBUG] [Thread-175555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:33:37.528 [DEBUG] [Thread-175555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:33:37.537 [DEBUG] [Thread-175555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:33:37.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:33:37.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-04-11T19:33:37.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-04-11T19:33:37.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:33:37.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:33:37.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:33:37.576 [DEBUG] [Thread-175555] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:33:49.178 [DEBUG] [Thread-175557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:04.233 [DEBUG] [Thread-175558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:05.212 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:05.213 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:07.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:34:07.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:34:07.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-04-11T19:34:08.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 33, 47), 0.02158, 99.7842, 0.0, 23.2531, 12.4439, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:34:08.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:33:47
2026-04-11T19:34:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:34:09.393 [DEBUG] [Thread-175559] [transport.py] [_log()] starting thread (client mode): 0xa79523b0
2026-04-11T19:34:09.393 [DEBUG] [Thread-175559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:34:09.413 [DEBUG] [Thread-175559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:34:09.413 [INFO] [Thread-175559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] client lang: <none>
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] server lang: <none>
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] kex follows: False
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] Compression: none
2026-04-11T19:34:09.417 [DEBUG] [Thread-175559] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:34:09.435 [DEBUG] [Thread-175559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:34:09.435 [DEBUG] [Thread-175559] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:34:09.436 [DEBUG] [Thread-175559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:34:09.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:34:09.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:34:09.438 [DEBUG] [Thread-175559] [transport.py] [_log()] userauth is OK
2026-04-11T19:34:09.438 [DEBUG] [Thread-175559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:34:09.438 [DEBUG] [Thread-175559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:34:09.438 [DEBUG] [Thread-175559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:34:09.439 [DEBUG] [Thread-175559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:34:09.461 [INFO] [Thread-175559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:34:09.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:34:10.284 [DEBUG] [Thread-175559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:34:10.285 [DEBUG] [Thread-175559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:34:10.285 [DEBUG] [Thread-175559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:34:10.326 [DEBUG] [Thread-175559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:34:10.326 [DEBUG] [Thread-175559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:34:10.330 [DEBUG] [Thread-175559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:34:10.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:34:10.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:34:10.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:34:10.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:34:10.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:34:10.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:34:10.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:34:10.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:34:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:34:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.731368 -999.00  +11.90  14.90     97  +11.60 1 3 1 3 1     0    0 0.32 -1.26 ----- 14.9 14.9 286.2 20.8 13.0 -0.5 12.8 -0.2 12.6 -0.8 13.0 -0.2
2026-04-11T19:34:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:34:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:34:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.731368
2026-04-11T19:34:10.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:34:10.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:34:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:34:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:34:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:34:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:33:47', tmtdew=0.02158, humidity=99.7842, cloud=0.0, wind=23.2531, temperature=12.4439, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:33:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:34:10.356 [DEBUG] [Thread-175559] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:34:10.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:34:10.456 [DEBUG] [Thread-175562] [transport.py] [_log()] starting thread (client mode): 0xa7952080
2026-04-11T19:34:10.456 [DEBUG] [Thread-175562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:34:10.469 [DEBUG] [Thread-175562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:34:10.470 [INFO] [Thread-175562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:34:10.477 [DEBUG] [Thread-175562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] client lang: <none>
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] server lang: <none>
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] kex follows: False
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] Compression: none
2026-04-11T19:34:10.478 [DEBUG] [Thread-175562] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:34:10.536 [DEBUG] [Thread-175562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:34:10.536 [DEBUG] [Thread-175562] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:34:10.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:34:10.537 [DEBUG] [Thread-175562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:34:10.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:34:10.602 [DEBUG] [Thread-175562] [transport.py] [_log()] userauth is OK
2026-04-11T19:34:10.602 [DEBUG] [Thread-175562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:34:10.602 [DEBUG] [Thread-175562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:34:10.602 [DEBUG] [Thread-175562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:34:10.602 [DEBUG] [Thread-175562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:34:10.626 [INFO] [Thread-175562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:34:10.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:34:10.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:34:11.453 [DEBUG] [Thread-175562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:34:11.453 [DEBUG] [Thread-175562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:34:11.501 [DEBUG] [Thread-175562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:34:11.501 [DEBUG] [Thread-175562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:34:11.510 [DEBUG] [Thread-175562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:34:11.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:34:11.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-04-11T19:34:11.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-04-11T19:34:11.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:34:11.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:34:11.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:34:11.547 [DEBUG] [Thread-175562] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:34:19.272 [DEBUG] [Thread-175564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:26.224 [DEBUG] [Thread-175565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:34.321 [DEBUG] [Thread-175566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:34:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:34:41.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:34:41.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-04-11T19:34:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 34, 22), 0.063325, 99.8755, 0.0, 19.039, 12.0054, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:34:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:34:22
2026-04-11T19:34:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:34:43.356 [DEBUG] [Thread-175567] [transport.py] [_log()] starting thread (client mode): 0xae5f3ac0
2026-04-11T19:34:43.356 [DEBUG] [Thread-175567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:34:43.377 [DEBUG] [Thread-175567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:34:43.377 [INFO] [Thread-175567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:34:43.380 [DEBUG] [Thread-175567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] client lang: <none>
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] server lang: <none>
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] kex follows: False
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] Compression: none
2026-04-11T19:34:43.381 [DEBUG] [Thread-175567] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:34:43.399 [DEBUG] [Thread-175567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:34:43.399 [DEBUG] [Thread-175567] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:34:43.400 [DEBUG] [Thread-175567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:34:43.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:34:43.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:34:43.402 [DEBUG] [Thread-175567] [transport.py] [_log()] userauth is OK
2026-04-11T19:34:43.402 [DEBUG] [Thread-175567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:34:43.402 [DEBUG] [Thread-175567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:34:43.403 [DEBUG] [Thread-175567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:34:43.403 [DEBUG] [Thread-175567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:34:43.427 [INFO] [Thread-175567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:34:43.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:34:44.200 [DEBUG] [Thread-175567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:34:44.200 [DEBUG] [Thread-175567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:34:44.201 [DEBUG] [Thread-175567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:34:44.241 [DEBUG] [Thread-175567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:34:44.242 [DEBUG] [Thread-175567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:34:44.245 [DEBUG] [Thread-175567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:34:44.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:34:44.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:34:44.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:34:44.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:34:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:34:44.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:34:44.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:34:44.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:34:44.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:34:44.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.731715 -999.00  +11.90  17.59     97  +11.60 1 3 1 3 1     0    0 0.31 -1.71 ----- 17.6 17.6 298.8 18.6 13.1 -0.6 12.8 -0.9 12.5 -0.9 13.0 -0.2
2026-04-11T19:34:44.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:34:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:34:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.731715
2026-04-11T19:34:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:34:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:34:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:34:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:34:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:34:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:34:22', tmtdew=0.063325, humidity=99.8755, cloud=0.0, wind=19.039, temperature=12.0054, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:33:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:34:44.271 [DEBUG] [Thread-175567] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:34:44.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:34:44.365 [DEBUG] [Thread-175570] [transport.py] [_log()] starting thread (client mode): 0xae5f23e0
2026-04-11T19:34:44.365 [DEBUG] [Thread-175570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:34:44.380 [DEBUG] [Thread-175570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:34:44.380 [INFO] [Thread-175570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] client lang: <none>
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] server lang: <none>
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] kex follows: False
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] Compression: none
2026-04-11T19:34:44.388 [DEBUG] [Thread-175570] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:34:44.447 [DEBUG] [Thread-175570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:34:44.447 [DEBUG] [Thread-175570] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:34:44.448 [DEBUG] [Thread-175570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:34:44.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:34:44.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:34:44.504 [DEBUG] [Thread-175570] [transport.py] [_log()] userauth is OK
2026-04-11T19:34:44.505 [DEBUG] [Thread-175570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:34:44.505 [DEBUG] [Thread-175570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:34:44.505 [DEBUG] [Thread-175570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:34:44.505 [DEBUG] [Thread-175570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:34:44.523 [INFO] [Thread-175570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:34:44.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:34:44.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:34:45.358 [DEBUG] [Thread-175570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:34:45.358 [DEBUG] [Thread-175570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:34:45.407 [DEBUG] [Thread-175570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:34:45.407 [DEBUG] [Thread-175570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:34:45.416 [DEBUG] [Thread-175570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:34:45.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:34:45.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-04-11T19:34:45.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-04-11T19:34:45.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:34:45.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:34:45.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:34:45.453 [DEBUG] [Thread-175570] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:34:49.359 [DEBUG] [Thread-175572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:04.417 [DEBUG] [Thread-175573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:05.416 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:05.418 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:15.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:35:15.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:35:15.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-04-11T19:35:16.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 34, 57), 0.063335, 99.8755, 0.0, 18.0511, 11.9888, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:35:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:34:57
2026-04-11T19:35:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:35:17.269 [DEBUG] [Thread-175574] [transport.py] [_log()] starting thread (client mode): 0xae509210
2026-04-11T19:35:17.269 [DEBUG] [Thread-175574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:35:17.295 [DEBUG] [Thread-175574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:35:17.296 [INFO] [Thread-175574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] client lang: <none>
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] server lang: <none>
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] kex follows: False
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:35:17.300 [DEBUG] [Thread-175574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:35:17.301 [DEBUG] [Thread-175574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:35:17.301 [DEBUG] [Thread-175574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:35:17.301 [DEBUG] [Thread-175574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:35:17.301 [DEBUG] [Thread-175574] [transport.py] [_log()] Compression: none
2026-04-11T19:35:17.301 [DEBUG] [Thread-175574] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:35:17.317 [DEBUG] [Thread-175574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:35:17.317 [DEBUG] [Thread-175574] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:35:17.318 [DEBUG] [Thread-175574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:35:17.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:35:17.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:35:17.320 [DEBUG] [Thread-175574] [transport.py] [_log()] userauth is OK
2026-04-11T19:35:17.321 [DEBUG] [Thread-175574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:35:17.321 [DEBUG] [Thread-175574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:35:17.321 [DEBUG] [Thread-175574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:35:17.321 [DEBUG] [Thread-175574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:35:17.344 [INFO] [Thread-175574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:35:17.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:35:18.413 [DEBUG] [Thread-175574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:35:18.413 [DEBUG] [Thread-175574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:35:18.414 [DEBUG] [Thread-175574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:35:18.454 [DEBUG] [Thread-175574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:35:18.454 [DEBUG] [Thread-175574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:35:18.458 [DEBUG] [Thread-175574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:35:18.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:35:18.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:35:18.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:35:18.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:35:18.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:35:18.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:35:18.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:35:18.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:35:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:35:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.732756 -999.00  +11.90  15.34     97  +11.60 1 3 1 3 1     0    0 0.31 -1.35 ----- 15.3 15.3 296.8 17.1 13.0 -0.4 12.9 -1.0 12.6 -0.6 13.0 -0.2
2026-04-11T19:35:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:35:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:35:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.732756
2026-04-11T19:35:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:35:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:35:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:35:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:35:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:35:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:34:57', tmtdew=0.063335, humidity=99.8755, cloud=0.0, wind=18.0511, temperature=11.9888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:35:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:35:18.486 [DEBUG] [Thread-175574] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:35:18.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:35:18.580 [DEBUG] [Thread-175577] [transport.py] [_log()] starting thread (client mode): 0xae5a7580
2026-04-11T19:35:18.580 [DEBUG] [Thread-175577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:35:18.595 [DEBUG] [Thread-175577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:35:18.595 [INFO] [Thread-175577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:35:18.603 [DEBUG] [Thread-175577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:35:18.604 [DEBUG] [Thread-175577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] client lang: <none>
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] server lang: <none>
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] kex follows: False
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:35:18.605 [DEBUG] [Thread-175577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:35:18.606 [DEBUG] [Thread-175577] [transport.py] [_log()] Compression: none
2026-04-11T19:35:18.606 [DEBUG] [Thread-175577] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:35:18.663 [DEBUG] [Thread-175577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:35:18.664 [DEBUG] [Thread-175577] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:35:18.665 [DEBUG] [Thread-175577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:35:18.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:35:18.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:35:18.719 [DEBUG] [Thread-175577] [transport.py] [_log()] userauth is OK
2026-04-11T19:35:18.719 [DEBUG] [Thread-175577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:35:18.719 [DEBUG] [Thread-175577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:35:18.719 [DEBUG] [Thread-175577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:35:18.719 [DEBUG] [Thread-175577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:35:18.733 [INFO] [Thread-175577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:35:18.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:35:18.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:35:19.452 [DEBUG] [Thread-175579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:19.569 [DEBUG] [Thread-175577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:35:19.569 [DEBUG] [Thread-175577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:35:19.617 [DEBUG] [Thread-175577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:35:19.617 [DEBUG] [Thread-175577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:35:19.626 [DEBUG] [Thread-175577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:35:19.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:35:19.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:35:19.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-04-11T19:35:19.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:35:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:35:19.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:35:19.662 [DEBUG] [Thread-175577] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:35:26.309 [DEBUG] [Thread-175580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:34.517 [DEBUG] [Thread-175581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:49.556 [DEBUG] [Thread-175582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:35:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:35:49.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:35:49.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-04-11T19:35:50.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 35, 32), 0.060785, 99.8921, 0.0, 19.2506, 12.022, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:35:50.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:35:32
2026-04-11T19:35:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:35:51.551 [DEBUG] [Thread-175583] [transport.py] [_log()] starting thread (client mode): 0xae5f1240
2026-04-11T19:35:51.551 [DEBUG] [Thread-175583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:35:51.564 [DEBUG] [Thread-175583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:35:51.564 [INFO] [Thread-175583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:35:51.565 [DEBUG] [Thread-175583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:35:51.565 [DEBUG] [Thread-175583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:35:51.565 [DEBUG] [Thread-175583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:35:51.565 [DEBUG] [Thread-175583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] client lang: <none>
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] server lang: <none>
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] kex follows: False
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] Compression: none
2026-04-11T19:35:51.566 [DEBUG] [Thread-175583] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:35:51.574 [DEBUG] [Thread-175583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:35:51.575 [DEBUG] [Thread-175583] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:35:51.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:35:51.576 [DEBUG] [Thread-175583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:35:51.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:35:51.577 [DEBUG] [Thread-175583] [transport.py] [_log()] userauth is OK
2026-04-11T19:35:51.577 [DEBUG] [Thread-175583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:35:51.577 [DEBUG] [Thread-175583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:35:51.577 [DEBUG] [Thread-175583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:35:51.577 [DEBUG] [Thread-175583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:35:51.591 [INFO] [Thread-175583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:35:51.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:35:52.157 [DEBUG] [Thread-175583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:35:52.158 [DEBUG] [Thread-175583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:35:52.158 [DEBUG] [Thread-175583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:35:52.199 [DEBUG] [Thread-175583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:35:52.199 [DEBUG] [Thread-175583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:35:52.203 [DEBUG] [Thread-175583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:35:52.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:35:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:35:52.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:35:52.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:35:52.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:35:52.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:35:52.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:35:52.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:35:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:35:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.733104 -999.00  +11.90  19.30     97  +11.60 1 3 1 3 1     0    0 0.32 -1.39 ----- 19.3 19.3 295.8 21.4 13.1 -0.5 12.9 -0.8 12.6 -0.6 12.9 -0.1
2026-04-11T19:35:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:35:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:35:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.733104
2026-04-11T19:35:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:35:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:35:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:35:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:35:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:35:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:35:32', tmtdew=0.060785, humidity=99.8921, cloud=0.0, wind=19.2506, temperature=12.022, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:35:40.186', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:35:52.229 [DEBUG] [Thread-175583] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:35:52.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:35:52.323 [DEBUG] [Thread-175586] [transport.py] [_log()] starting thread (client mode): 0xae5f0040
2026-04-11T19:35:52.323 [DEBUG] [Thread-175586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:35:52.338 [DEBUG] [Thread-175586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:35:52.338 [INFO] [Thread-175586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] client lang: <none>
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] server lang: <none>
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] kex follows: False
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:35:52.346 [DEBUG] [Thread-175586] [transport.py] [_log()] Compression: none
2026-04-11T19:35:52.347 [DEBUG] [Thread-175586] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:35:52.403 [DEBUG] [Thread-175586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:35:52.404 [DEBUG] [Thread-175586] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:35:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:35:52.405 [DEBUG] [Thread-175586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:35:52.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:35:52.458 [DEBUG] [Thread-175586] [transport.py] [_log()] userauth is OK
2026-04-11T19:35:52.458 [DEBUG] [Thread-175586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:35:52.459 [DEBUG] [Thread-175586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:35:52.459 [DEBUG] [Thread-175586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:35:52.459 [DEBUG] [Thread-175586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:35:52.478 [INFO] [Thread-175586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:35:52.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:35:52.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:35:53.309 [DEBUG] [Thread-175586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:35:53.309 [DEBUG] [Thread-175586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:35:53.357 [DEBUG] [Thread-175586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:35:53.357 [DEBUG] [Thread-175586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:35:53.367 [DEBUG] [Thread-175586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:35:53.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:35: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')
2026-04-11T19:35:53.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:35:53.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:35:53.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:35:53.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:35:53.407 [DEBUG] [Thread-175586] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:36:04.593 [DEBUG] [Thread-175588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:05.621 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:05.623 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:19.646 [DEBUG] [Thread-175589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:36:23.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:36:23.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-04-11T19:36:24.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 36, 8), 0.055695, 99.9253, 0.0, 18.7567, 12.0551, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:36:24.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:36:08
2026-04-11T19:36:25.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:36:25.247 [DEBUG] [Thread-175590] [transport.py] [_log()] starting thread (client mode): 0xae5f0880
2026-04-11T19:36:25.247 [DEBUG] [Thread-175590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:36:25.265 [DEBUG] [Thread-175590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:36:25.265 [INFO] [Thread-175590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] client lang: <none>
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] server lang: <none>
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] kex follows: False
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] Compression: none
2026-04-11T19:36:25.268 [DEBUG] [Thread-175590] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:36:25.289 [DEBUG] [Thread-175590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:36:25.290 [DEBUG] [Thread-175590] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:36:25.290 [DEBUG] [Thread-175590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:36:25.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:36:25.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:36:25.292 [DEBUG] [Thread-175590] [transport.py] [_log()] userauth is OK
2026-04-11T19:36:25.292 [DEBUG] [Thread-175590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:36:25.292 [DEBUG] [Thread-175590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:36:25.292 [DEBUG] [Thread-175590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:36:25.293 [DEBUG] [Thread-175590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:36:25.316 [INFO] [Thread-175590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:36:25.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:36:25.909 [DEBUG] [Thread-175590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:36:25.909 [DEBUG] [Thread-175590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:36:25.909 [DEBUG] [Thread-175590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:36:25.949 [DEBUG] [Thread-175590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:36:25.950 [DEBUG] [Thread-175590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:36:25.951 [DEBUG] [Thread-175590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:36:25.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:36:25.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:36:25.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:36:25.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:36:25.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:36:25.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:36:25.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:36:25.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:36:25.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:36:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.733451 -999.00  +11.90  17.61     97  +11.60 1 3 1 3 1     0    0 0.30 -1.73 ----- 17.6 17.6 295.4 21.8 13.1 -0.6 12.9 -0.8 12.6 -0.7 13.0 -0.1
2026-04-11T19:36:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:36:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:36:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.733451
2026-04-11T19:36:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:36:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:36:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:36:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:36:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:36:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:36:08', tmtdew=0.055695, humidity=99.9253, cloud=0.0, wind=18.7567, temperature=12.0551, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:36:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:36:25.968 [DEBUG] [Thread-175590] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:36:26.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:36:26.063 [DEBUG] [Thread-175593] [transport.py] [_log()] starting thread (client mode): 0xa7952050
2026-04-11T19:36:26.063 [DEBUG] [Thread-175593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:36:26.078 [DEBUG] [Thread-175593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:36:26.078 [INFO] [Thread-175593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:36:26.088 [DEBUG] [Thread-175593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] client lang: <none>
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] server lang: <none>
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] kex follows: False
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:36:26.089 [DEBUG] [Thread-175593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:36:26.090 [DEBUG] [Thread-175593] [transport.py] [_log()] Compression: none
2026-04-11T19:36:26.090 [DEBUG] [Thread-175593] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:36:26.150 [DEBUG] [Thread-175593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:36:26.150 [DEBUG] [Thread-175593] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:36:26.151 [DEBUG] [Thread-175593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:36:26.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:36:26.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:36:26.206 [DEBUG] [Thread-175593] [transport.py] [_log()] userauth is OK
2026-04-11T19:36:26.206 [DEBUG] [Thread-175593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:36:26.206 [DEBUG] [Thread-175593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:36:26.206 [DEBUG] [Thread-175593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:36:26.206 [DEBUG] [Thread-175593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:36:26.226 [INFO] [Thread-175593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:36:26.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:36:26.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:36:26.395 [DEBUG] [Thread-175595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:27.064 [DEBUG] [Thread-175593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:36:27.064 [DEBUG] [Thread-175593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:36:27.111 [DEBUG] [Thread-175593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:36:27.112 [DEBUG] [Thread-175593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:36:27.120 [DEBUG] [Thread-175593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:36:27.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:36:27.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-04-11T19:36:27.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-04-11T19:36:27.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:36:27.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:36:27.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:36:27.154 [DEBUG] [Thread-175593] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:36:34.683 [DEBUG] [Thread-175596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:49.738 [DEBUG] [Thread-175597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:36:57.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:36:57.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:36:57.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-04-11T19:36:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 36, 44), 0.02157, 99.7843, 0.0, 17.9258, 12.4439, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:36:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:36:44
2026-04-11T19:36:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:36:59.057 [DEBUG] [Thread-175598] [transport.py] [_log()] starting thread (client mode): 0xae50b370
2026-04-11T19:36:59.057 [DEBUG] [Thread-175598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:36:59.078 [DEBUG] [Thread-175598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:36:59.078 [INFO] [Thread-175598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] client lang: <none>
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] server lang: <none>
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] kex follows: False
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] Compression: none
2026-04-11T19:36:59.079 [DEBUG] [Thread-175598] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:36:59.087 [DEBUG] [Thread-175598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:36:59.087 [DEBUG] [Thread-175598] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:36:59.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:36:59.088 [DEBUG] [Thread-175598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:36:59.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:36:59.089 [DEBUG] [Thread-175598] [transport.py] [_log()] userauth is OK
2026-04-11T19:36:59.089 [DEBUG] [Thread-175598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:36:59.089 [DEBUG] [Thread-175598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:36:59.089 [DEBUG] [Thread-175598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:36:59.089 [DEBUG] [Thread-175598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:36:59.106 [INFO] [Thread-175598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:36:59.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:36:59.764 [DEBUG] [Thread-175598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:36:59.765 [DEBUG] [Thread-175598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:36:59.765 [DEBUG] [Thread-175598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:36:59.805 [DEBUG] [Thread-175598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:36:59.805 [DEBUG] [Thread-175598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:36:59.807 [DEBUG] [Thread-175598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:36:59.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:36:59.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:36:59.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:36:59.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:36:59.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:36:59.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:36:59.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:36:59.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:36:59.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:36:59.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.733798 -999.00  +11.90  15.34     97  +11.50 1 3 1 3 1     0    0 0.31 -1.66 ----- 15.3 15.3 298.4 22.0 13.1 -0.5 12.9 -1.1 12.6 -1.0 12.9 -0.1
2026-04-11T19:36:59.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:36:59.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:36:59.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.733798
2026-04-11T19:36:59.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:36:59.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:36:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:36:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:36:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:36:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:36:44', tmtdew=0.02157, humidity=99.7843, cloud=0.0, wind=17.9258, temperature=12.4439, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:36:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:36:59.830 [DEBUG] [Thread-175598] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:36:59.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:36:59.923 [DEBUG] [Thread-175601] [transport.py] [_log()] starting thread (client mode): 0xae5f1780
2026-04-11T19:36:59.923 [DEBUG] [Thread-175601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:36:59.938 [DEBUG] [Thread-175601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:36:59.938 [INFO] [Thread-175601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:36:59.946 [DEBUG] [Thread-175601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:36:59.946 [DEBUG] [Thread-175601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:36:59.946 [DEBUG] [Thread-175601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:36:59.946 [DEBUG] [Thread-175601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:59.946 [DEBUG] [Thread-175601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:36:59.946 [DEBUG] [Thread-175601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] client lang: <none>
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] server lang: <none>
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] kex follows: False
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] Compression: none
2026-04-11T19:36:59.947 [DEBUG] [Thread-175601] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:37:00.010 [DEBUG] [Thread-175601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:37:00.010 [DEBUG] [Thread-175601] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:37:00.011 [DEBUG] [Thread-175601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:37:00.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:37:00.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:37:00.066 [DEBUG] [Thread-175601] [transport.py] [_log()] userauth is OK
2026-04-11T19:37:00.066 [DEBUG] [Thread-175601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:37:00.066 [DEBUG] [Thread-175601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:37:00.066 [DEBUG] [Thread-175601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:37:00.066 [DEBUG] [Thread-175601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:37:00.089 [INFO] [Thread-175601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:37:00.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:37:00.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:37:00.908 [DEBUG] [Thread-175601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:37:00.908 [DEBUG] [Thread-175601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:37:00.957 [DEBUG] [Thread-175601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:37:00.957 [DEBUG] [Thread-175601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:37:00.967 [DEBUG] [Thread-175601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:37:00.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:37: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')
2026-04-11T19:37:00.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:37:00.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:37:00.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:37:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:37:01.003 [DEBUG] [Thread-175601] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:37:04.775 [DEBUG] [Thread-175603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:37:05.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:37:05.829 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:37:19.835 [DEBUG] [Thread-175604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:37:26.484 [DEBUG] [Thread-175605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:37:31.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:37:31.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:37:31.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-04-11T19:37:32.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 37, 19), 0.0633, 99.8756, 0.0, 19.2506, 12.0386, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:37:32.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:37:19
2026-04-11T19:37:32.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:37:32.929 [DEBUG] [Thread-175606] [transport.py] [_log()] starting thread (client mode): 0xae5a6f50
2026-04-11T19:37:32.929 [DEBUG] [Thread-175606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:37:32.949 [DEBUG] [Thread-175606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:37:32.950 [INFO] [Thread-175606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:37:32.952 [DEBUG] [Thread-175606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] client lang: <none>
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] server lang: <none>
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] kex follows: False
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] Compression: none
2026-04-11T19:37:32.953 [DEBUG] [Thread-175606] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:37:32.967 [DEBUG] [Thread-175606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:37:32.967 [DEBUG] [Thread-175606] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:37:32.968 [DEBUG] [Thread-175606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:37:32.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:37:32.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:37:32.969 [DEBUG] [Thread-175606] [transport.py] [_log()] userauth is OK
2026-04-11T19:37:32.969 [DEBUG] [Thread-175606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:37:32.970 [DEBUG] [Thread-175606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:37:32.970 [DEBUG] [Thread-175606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:37:32.970 [DEBUG] [Thread-175606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:37:32.990 [INFO] [Thread-175606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:37:32.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:37:33.584 [DEBUG] [Thread-175606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:37:33.584 [DEBUG] [Thread-175606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:37:33.585 [DEBUG] [Thread-175606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:37:33.626 [DEBUG] [Thread-175606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:37:33.626 [DEBUG] [Thread-175606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:37:33.630 [DEBUG] [Thread-175606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:37:33.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:37:33.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:37:33.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:37:33.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:37:33.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:37:33.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:37:33.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:37:33.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:37:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:37:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.734145 -999.00  +11.90  15.95     97  +11.50 1 3 1 3 1     0    0 0.32 -1.22 ----- 15.9 15.9 303.0 20.4 13.1 -0.5 12.9 -1.0 12.6 -0.6 12.9 -0.2
2026-04-11T19:37:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:37:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:37:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.734145
2026-04-11T19:37:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:37:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:37:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:37:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:37:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:37:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:37:19', tmtdew=0.0633, humidity=99.8756, cloud=0.0, wind=19.2506, temperature=12.0386, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:37:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:37:33.656 [DEBUG] [Thread-175606] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:37:33.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:37:33.752 [DEBUG] [Thread-175609] [transport.py] [_log()] starting thread (client mode): 0xae5f3f10
2026-04-11T19:37:33.752 [DEBUG] [Thread-175609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:37:33.767 [DEBUG] [Thread-175609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:37:33.767 [INFO] [Thread-175609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:37:33.775 [DEBUG] [Thread-175609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:37:33.775 [DEBUG] [Thread-175609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:37:33.775 [DEBUG] [Thread-175609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:37:33.775 [DEBUG] [Thread-175609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:37:33.775 [DEBUG] [Thread-175609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:37:33.775 [DEBUG] [Thread-175609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] client lang: <none>
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] server lang: <none>
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] kex follows: False
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:37:33.776 [DEBUG] [Thread-175609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:37:33.777 [DEBUG] [Thread-175609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:37:33.777 [DEBUG] [Thread-175609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:37:33.777 [DEBUG] [Thread-175609] [transport.py] [_log()] Compression: none
2026-04-11T19:37:33.777 [DEBUG] [Thread-175609] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:37:33.834 [DEBUG] [Thread-175609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:37:33.835 [DEBUG] [Thread-175609] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:37:33.836 [DEBUG] [Thread-175609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:37:33.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:37:33.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:37:33.890 [DEBUG] [Thread-175609] [transport.py] [_log()] userauth is OK
2026-04-11T19:37:33.890 [DEBUG] [Thread-175609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:37:33.891 [DEBUG] [Thread-175609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:37:33.891 [DEBUG] [Thread-175609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:37:33.891 [DEBUG] [Thread-175609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:37:33.912 [INFO] [Thread-175609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:37:33.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:37:33.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:37:34.715 [DEBUG] [Thread-175609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:37:34.715 [DEBUG] [Thread-175609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:37:34.763 [DEBUG] [Thread-175609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:37:34.763 [DEBUG] [Thread-175609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:37:34.772 [DEBUG] [Thread-175609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:37:34.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:37:34.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-04-11T19:37:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:37:34.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:37:34.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:37:34.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:37:34.809 [DEBUG] [Thread-175609] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:37:34.871 [DEBUG] [Thread-175611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:37:49.928 [DEBUG] [Thread-175612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:04.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:38:04.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:38: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-04-11T19:38:04.965 [DEBUG] [Thread-175613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:06.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:06.035 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:06.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 37, 55), 0.065825, 99.859, 0.0, 19.3565, 11.9886, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:38:06.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:37:55
2026-04-11T19:38:06.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:38:06.665 [DEBUG] [Thread-175614] [transport.py] [_log()] starting thread (client mode): 0xae50a650
2026-04-11T19:38:06.666 [DEBUG] [Thread-175614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:38:06.682 [DEBUG] [Thread-175614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:38:06.682 [INFO] [Thread-175614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] client lang: <none>
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] server lang: <none>
2026-04-11T19:38:06.684 [DEBUG] [Thread-175614] [transport.py] [_log()] kex follows: False
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] Compression: none
2026-04-11T19:38:06.685 [DEBUG] [Thread-175614] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:38:06.697 [DEBUG] [Thread-175614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:38:06.698 [DEBUG] [Thread-175614] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:38:06.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:38:06.699 [DEBUG] [Thread-175614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:38:06.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:38:06.700 [DEBUG] [Thread-175614] [transport.py] [_log()] userauth is OK
2026-04-11T19:38:06.700 [DEBUG] [Thread-175614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:38:06.700 [DEBUG] [Thread-175614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:38:06.701 [DEBUG] [Thread-175614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:38:06.701 [DEBUG] [Thread-175614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:38:06.716 [INFO] [Thread-175614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:38:06.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:38:07.318 [DEBUG] [Thread-175614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:38:07.318 [DEBUG] [Thread-175614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:38:07.319 [DEBUG] [Thread-175614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:38:07.359 [DEBUG] [Thread-175614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:38:07.359 [DEBUG] [Thread-175614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:38:07.365 [DEBUG] [Thread-175614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:38:07.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:38:07.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:38:07.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:38:07.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:38:07.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:38:07.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:38:07.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:38:07.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:38:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:38:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.734493 -999.00  +11.90  19.21     97  +11.50 1 3 1 3 1     0    0 0.33 -0.84 ----- 19.2 19.2 298.8 21.7 13.1 -0.6 12.9 -0.9 12.6 -1.0 12.9 -0.1
2026-04-11T19:38:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:38:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:38:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.734493
2026-04-11T19:38:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:38:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:38:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:38:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:38:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:38:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:37:55', tmtdew=0.065825, humidity=99.859, cloud=0.0, wind=19.3565, temperature=11.9886, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:37:40.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:38:07.386 [DEBUG] [Thread-175614] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:38:07.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:38:07.478 [DEBUG] [Thread-175617] [transport.py] [_log()] starting thread (client mode): 0xae518670
2026-04-11T19:38:07.479 [DEBUG] [Thread-175617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:38:07.493 [DEBUG] [Thread-175617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:38:07.493 [INFO] [Thread-175617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:38:07.501 [DEBUG] [Thread-175617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:38:07.501 [DEBUG] [Thread-175617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:38:07.501 [DEBUG] [Thread-175617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:38:07.501 [DEBUG] [Thread-175617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:07.501 [DEBUG] [Thread-175617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] client lang: <none>
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] server lang: <none>
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] kex follows: False
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] Compression: none
2026-04-11T19:38:07.502 [DEBUG] [Thread-175617] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:38:07.565 [DEBUG] [Thread-175617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:38:07.565 [DEBUG] [Thread-175617] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:38:07.566 [DEBUG] [Thread-175617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:38:07.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:38:07.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:38:07.628 [DEBUG] [Thread-175617] [transport.py] [_log()] userauth is OK
2026-04-11T19:38:07.628 [DEBUG] [Thread-175617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:38:07.628 [DEBUG] [Thread-175617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:38:07.628 [DEBUG] [Thread-175617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:38:07.628 [DEBUG] [Thread-175617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:38:07.650 [INFO] [Thread-175617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:38:07.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:38:07.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:38:08.490 [DEBUG] [Thread-175617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:38:08.491 [DEBUG] [Thread-175617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:38:08.539 [DEBUG] [Thread-175617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:38:08.539 [DEBUG] [Thread-175617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:38:08.548 [DEBUG] [Thread-175617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:38:08.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:38:08.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:38:08.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:38:08.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:38:08.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:38:08.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:38:08.585 [DEBUG] [Thread-175617] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:38:20.001 [DEBUG] [Thread-175619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:26.558 [DEBUG] [Thread-175620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:35.051 [DEBUG] [Thread-175621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:38:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:38:38.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:38:38.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-04-11T19:38:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 38, 30), 0.0608, 99.8922, 0.0, 19.7093, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:38:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:38:30
2026-04-11T19:38:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:38:40.392 [DEBUG] [Thread-175622] [transport.py] [_log()] starting thread (client mode): 0xae5149a0
2026-04-11T19:38:40.392 [DEBUG] [Thread-175622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:38:40.410 [DEBUG] [Thread-175622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:38:40.411 [INFO] [Thread-175622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] client lang: <none>
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] server lang: <none>
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] kex follows: False
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] Compression: none
2026-04-11T19:38:40.414 [DEBUG] [Thread-175622] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:38:40.431 [DEBUG] [Thread-175622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:38:40.432 [DEBUG] [Thread-175622] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:38:40.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:38:40.433 [DEBUG] [Thread-175622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:38:40.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:38:40.435 [DEBUG] [Thread-175622] [transport.py] [_log()] userauth is OK
2026-04-11T19:38:40.435 [DEBUG] [Thread-175622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:38:40.435 [DEBUG] [Thread-175622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:38:40.435 [DEBUG] [Thread-175622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:38:40.435 [DEBUG] [Thread-175622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:38:40.459 [INFO] [Thread-175622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:38:40.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:38:41.086 [DEBUG] [Thread-175622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:38:41.086 [DEBUG] [Thread-175622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:38:41.086 [DEBUG] [Thread-175622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:38:41.127 [DEBUG] [Thread-175622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:38:41.127 [DEBUG] [Thread-175622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:38:41.130 [DEBUG] [Thread-175622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:38:41.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:38:41.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:38:41.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:38:41.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:38:41.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:38:41.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:38:41.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:38:41.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:38:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:38:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.734840 -999.00  +11.90  18.32     97  +11.50 1 3 1 3 1     0    0 0.34 -0.48 ----- 18.3 18.3 296.4 23.0 13.1 -0.6 12.9 -1.0 12.5 -0.5 12.9 -0.2
2026-04-11T19:38:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:38:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:38:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.734840
2026-04-11T19:38:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:38:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:38:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:38:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:38:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:38:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:38:30', tmtdew=0.0608, humidity=99.8922, cloud=0.0, wind=19.7093, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:38:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:38:41.155 [DEBUG] [Thread-175622] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:38:41.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:38:41.248 [DEBUG] [Thread-175625] [transport.py] [_log()] starting thread (client mode): 0xae517fd0
2026-04-11T19:38:41.248 [DEBUG] [Thread-175625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:38:41.263 [DEBUG] [Thread-175625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:38:41.263 [INFO] [Thread-175625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:38:41.270 [DEBUG] [Thread-175625] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] client lang: <none>
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] server lang: <none>
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] kex follows: False
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] Compression: none
2026-04-11T19:38:41.271 [DEBUG] [Thread-175625] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:38:41.330 [DEBUG] [Thread-175625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:38:41.331 [DEBUG] [Thread-175625] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:38:41.331 [DEBUG] [Thread-175625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:38:41.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:38:41.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:38:41.390 [DEBUG] [Thread-175625] [transport.py] [_log()] userauth is OK
2026-04-11T19:38:41.390 [DEBUG] [Thread-175625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:38:41.391 [DEBUG] [Thread-175625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:38:41.391 [DEBUG] [Thread-175625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:38:41.391 [DEBUG] [Thread-175625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:38:41.409 [INFO] [Thread-175625] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:38:41.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:38:41.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:38:42.210 [DEBUG] [Thread-175625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:38:42.211 [DEBUG] [Thread-175625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:38:42.259 [DEBUG] [Thread-175625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:38:42.259 [DEBUG] [Thread-175625] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:38:42.269 [DEBUG] [Thread-175625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:38:42.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:38:42.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-04-11T19:38:42.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-04-11T19:38:42.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:38:42.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:38:42.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:38:42.306 [DEBUG] [Thread-175625] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:38:50.090 [DEBUG] [Thread-175627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:05.155 [DEBUG] [Thread-175628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:06.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:06.240 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:12.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:39:12.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:39:12.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-04-11T19:39:13.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 39, 5), 0.06333, 99.8756, 0.0, 18.9155, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:39:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:39:05
2026-04-11T19:39:13.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:39:14.104 [DEBUG] [Thread-175629] [transport.py] [_log()] starting thread (client mode): 0xae516e00
2026-04-11T19:39:14.105 [DEBUG] [Thread-175629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:39:14.125 [DEBUG] [Thread-175629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:39:14.125 [INFO] [Thread-175629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:39:14.126 [DEBUG] [Thread-175629] [transport.py] [_log()] client lang: <none>
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] server lang: <none>
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] kex follows: False
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] Compression: none
2026-04-11T19:39:14.127 [DEBUG] [Thread-175629] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:39:14.137 [DEBUG] [Thread-175629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:39:14.138 [DEBUG] [Thread-175629] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:39:14.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:39:14.139 [DEBUG] [Thread-175629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:39:14.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:39:14.141 [DEBUG] [Thread-175629] [transport.py] [_log()] userauth is OK
2026-04-11T19:39:14.141 [DEBUG] [Thread-175629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:39:14.142 [DEBUG] [Thread-175629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:39:14.142 [DEBUG] [Thread-175629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:39:14.142 [DEBUG] [Thread-175629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:39:14.161 [INFO] [Thread-175629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:39:14.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:39:14.823 [DEBUG] [Thread-175629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:39:14.823 [DEBUG] [Thread-175629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:39:14.823 [DEBUG] [Thread-175629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:39:14.864 [DEBUG] [Thread-175629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:39:14.864 [DEBUG] [Thread-175629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:39:14.868 [DEBUG] [Thread-175629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:39:14.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:39:14.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:39:14.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:39:14.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:39:14.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:39:14.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:39:14.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:39:14.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:39:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:39:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.735187 -999.00  +11.90  20.15     97  +11.50 1 3 1 3 1     0    0 0.35 -0.15 ----- 20.1 20.1 293.4 25.1 13.1 -0.6 12.9 -1.1 12.5 -1.2 12.9 -0.2
2026-04-11T19:39:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:39:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:39:14.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.735187
2026-04-11T19:39:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:39:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:39:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:39:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:39:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:39:14.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:39:05', tmtdew=0.06333, humidity=99.8756, cloud=0.0, wind=18.9155, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:38:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:39:14.895 [DEBUG] [Thread-175629] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:39:14.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:39:14.986 [DEBUG] [Thread-175632] [transport.py] [_log()] starting thread (client mode): 0xb0f57100
2026-04-11T19:39:14.986 [DEBUG] [Thread-175632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:39:15.001 [DEBUG] [Thread-175632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:39:15.001 [INFO] [Thread-175632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:39:15.008 [DEBUG] [Thread-175632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] client lang: <none>
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] server lang: <none>
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] kex follows: False
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] Compression: none
2026-04-11T19:39:15.009 [DEBUG] [Thread-175632] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:39:15.065 [DEBUG] [Thread-175632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:39:15.066 [DEBUG] [Thread-175632] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:39:15.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:39:15.067 [DEBUG] [Thread-175632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:39:15.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:39:15.121 [DEBUG] [Thread-175632] [transport.py] [_log()] userauth is OK
2026-04-11T19:39:15.121 [DEBUG] [Thread-175632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:39:15.121 [DEBUG] [Thread-175632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:39:15.121 [DEBUG] [Thread-175632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:39:15.121 [DEBUG] [Thread-175632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:39:15.145 [INFO] [Thread-175632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:39:15.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:39:15.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:39:15.955 [DEBUG] [Thread-175632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:39:15.955 [DEBUG] [Thread-175632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:39:16.003 [DEBUG] [Thread-175632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:39:16.003 [DEBUG] [Thread-175632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:39:16.012 [DEBUG] [Thread-175632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:39:16.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:39:16.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:39: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-04-11T19:39:16.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:39:16.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:39:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:39:16.050 [DEBUG] [Thread-175632] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:39:20.191 [DEBUG] [Thread-175634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:26.658 [DEBUG] [Thread-175635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:35.252 [DEBUG] [Thread-175636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:39:46.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:39:46.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:39:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:39:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 39, 5), 0.06333, 99.8756, 0.0, 18.9155, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:39:47.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:39:05
2026-04-11T19:39:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:39:47.883 [DEBUG] [Thread-175637] [transport.py] [_log()] starting thread (client mode): 0xae5f1870
2026-04-11T19:39:47.883 [DEBUG] [Thread-175637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:39:47.908 [DEBUG] [Thread-175637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:39:47.908 [INFO] [Thread-175637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:39:47.910 [DEBUG] [Thread-175637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] client lang: <none>
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] server lang: <none>
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] kex follows: False
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] Compression: none
2026-04-11T19:39:47.911 [DEBUG] [Thread-175637] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:39:47.922 [DEBUG] [Thread-175637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:39:47.922 [DEBUG] [Thread-175637] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:39:47.923 [DEBUG] [Thread-175637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:39:47.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:39:47.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:39:47.925 [DEBUG] [Thread-175637] [transport.py] [_log()] userauth is OK
2026-04-11T19:39:47.925 [DEBUG] [Thread-175637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:39:47.925 [DEBUG] [Thread-175637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:39:47.925 [DEBUG] [Thread-175637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:39:47.925 [DEBUG] [Thread-175637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:39:47.943 [INFO] [Thread-175637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:39:47.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:39:48.593 [DEBUG] [Thread-175637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:39:48.593 [DEBUG] [Thread-175637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:39:48.594 [DEBUG] [Thread-175637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:39:48.634 [DEBUG] [Thread-175637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:39:48.634 [DEBUG] [Thread-175637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:39:48.638 [DEBUG] [Thread-175637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:39:48.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:39:48.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:39:48.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:39:48.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:39:48.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:39:48.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:39:48.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:39:48.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:39:48.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:39:48.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.735882 -999.00  +11.80  18.27     97  +11.50 1 3 1 3 1     0    0 0.36 0.09 ----- 18.3 18.3 302.4 22.5 13.1 -0.5 12.8 -1.1 12.5 -0.9 12.9 -0.2
2026-04-11T19:39:48.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:39:48.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:39:48.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.735882
2026-04-11T19:39:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:39:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:39:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:39:48.663 [DEBUG] [Thread-175637] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:39:48.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:39:48.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:39:48.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:39:05', tmtdew=0.06333, humidity=99.8756, cloud=0.0, wind=18.9155, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:39:40.205', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:39:48.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:39:48.759 [DEBUG] [Thread-175640] [transport.py] [_log()] starting thread (client mode): 0xae5f2e00
2026-04-11T19:39:48.759 [DEBUG] [Thread-175640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:39:48.774 [DEBUG] [Thread-175640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:39:48.774 [INFO] [Thread-175640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] client lang: <none>
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] server lang: <none>
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] kex follows: False
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:39:48.782 [DEBUG] [Thread-175640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:39:48.783 [DEBUG] [Thread-175640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:39:48.783 [DEBUG] [Thread-175640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:39:48.783 [DEBUG] [Thread-175640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:39:48.783 [DEBUG] [Thread-175640] [transport.py] [_log()] Compression: none
2026-04-11T19:39:48.783 [DEBUG] [Thread-175640] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:39:48.842 [DEBUG] [Thread-175640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:39:48.842 [DEBUG] [Thread-175640] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:39:48.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:39:48.843 [DEBUG] [Thread-175640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:39:48.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:39:48.901 [DEBUG] [Thread-175640] [transport.py] [_log()] userauth is OK
2026-04-11T19:39:48.902 [DEBUG] [Thread-175640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:39:48.902 [DEBUG] [Thread-175640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:39:48.902 [DEBUG] [Thread-175640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:39:48.902 [DEBUG] [Thread-175640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:39:48.921 [INFO] [Thread-175640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:39:48.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:39:48.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:39:49.736 [DEBUG] [Thread-175640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:39:49.737 [DEBUG] [Thread-175640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:39:49.785 [DEBUG] [Thread-175640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:39:49.785 [DEBUG] [Thread-175640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:39:49.795 [DEBUG] [Thread-175640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:39:49.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:39:49.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-04-11T19:39:49.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:39:49.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:39:49.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:39:49.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:39:49.830 [DEBUG] [Thread-175640] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:39:50.288 [DEBUG] [Thread-175642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:05.339 [DEBUG] [Thread-175643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:06.444 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:06.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:19.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:40:19.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:40:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:40:20.374 [DEBUG] [Thread-175644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:21.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 39, 41), 0.02158, 99.7843, 0.0, 20.2896, 12.4108, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:40:21.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:39:41
2026-04-11T19:40:21.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:40:21.849 [DEBUG] [Thread-175645] [transport.py] [_log()] starting thread (client mode): 0xae5a7880
2026-04-11T19:40:21.849 [DEBUG] [Thread-175645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:40:21.869 [DEBUG] [Thread-175645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:40:21.869 [INFO] [Thread-175645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:40:21.872 [DEBUG] [Thread-175645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:40:21.872 [DEBUG] [Thread-175645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:40:21.872 [DEBUG] [Thread-175645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:40:21.872 [DEBUG] [Thread-175645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] client lang: <none>
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] server lang: <none>
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] kex follows: False
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:40:21.873 [DEBUG] [Thread-175645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:40:21.874 [DEBUG] [Thread-175645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:40:21.874 [DEBUG] [Thread-175645] [transport.py] [_log()] Compression: none
2026-04-11T19:40:21.874 [DEBUG] [Thread-175645] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:40:21.886 [DEBUG] [Thread-175645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:40:21.887 [DEBUG] [Thread-175645] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:40:21.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:40:21.888 [DEBUG] [Thread-175645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:40:21.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:40:21.890 [DEBUG] [Thread-175645] [transport.py] [_log()] userauth is OK
2026-04-11T19:40:21.890 [DEBUG] [Thread-175645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:40:21.890 [DEBUG] [Thread-175645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:40:21.890 [DEBUG] [Thread-175645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:40:21.890 [DEBUG] [Thread-175645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:40:21.916 [INFO] [Thread-175645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:40:21.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:40:22.539 [DEBUG] [Thread-175645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:40:22.539 [DEBUG] [Thread-175645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:40:22.540 [DEBUG] [Thread-175645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:40:22.580 [DEBUG] [Thread-175645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:40:22.580 [DEBUG] [Thread-175645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:40:22.584 [DEBUG] [Thread-175645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:40:22.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:40:22.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:40:22.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:40:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:40:22.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:40:22.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:40:22.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:40:22.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:40:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:40:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.736228 -999.00  +11.80  14.49     97  +11.50 1 3 1 3 1     0    0 0.35 -0.22 ----- 14.5 14.5 301.8 20.9 13.0 -0.5 12.8 -1.2 12.6 -0.8 12.9 -0.2
2026-04-11T19:40:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:40:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:40:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.736228
2026-04-11T19:40:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:40:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:40:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:40:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:40:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:40:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:39:41', tmtdew=0.02158, humidity=99.7843, cloud=0.0, wind=20.2896, temperature=12.4108, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:40:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:40:22.609 [DEBUG] [Thread-175645] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:40:22.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:40:22.716 [DEBUG] [Thread-175648] [transport.py] [_log()] starting thread (client mode): 0xae5146a0
2026-04-11T19:40:22.716 [DEBUG] [Thread-175648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:40:22.736 [DEBUG] [Thread-175648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:40:22.736 [INFO] [Thread-175648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:40:22.744 [DEBUG] [Thread-175648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:40:22.745 [DEBUG] [Thread-175648] [transport.py] [_log()] client lang: <none>
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] server lang: <none>
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] kex follows: False
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] Compression: none
2026-04-11T19:40:22.746 [DEBUG] [Thread-175648] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:40:22.804 [DEBUG] [Thread-175648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:40:22.805 [DEBUG] [Thread-175648] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:40:22.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:40:22.806 [DEBUG] [Thread-175648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:40:22.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:40:22.865 [DEBUG] [Thread-175648] [transport.py] [_log()] userauth is OK
2026-04-11T19:40:22.865 [DEBUG] [Thread-175648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:40:22.866 [DEBUG] [Thread-175648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:40:22.866 [DEBUG] [Thread-175648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:40:22.866 [DEBUG] [Thread-175648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:40:22.884 [INFO] [Thread-175648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:40:22.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:40:22.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:40:23.713 [DEBUG] [Thread-175648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:40:23.713 [DEBUG] [Thread-175648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:40:23.762 [DEBUG] [Thread-175648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:40:23.762 [DEBUG] [Thread-175648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:40:23.771 [DEBUG] [Thread-175648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:40:23.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:40:23.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-04-11T19:40:23.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:40:23.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:40:23.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:40:23.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:40:23.806 [DEBUG] [Thread-175648] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:40:26.748 [DEBUG] [Thread-175650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:35.411 [DEBUG] [Thread-175651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:50.462 [DEBUG] [Thread-175652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:40:53.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:40:53.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:40:53.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-04-11T19:40:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 40, 16), 0.058285, 99.9088, 0.0, 18.9162, 11.8723, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:40:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:40:16
2026-04-11T19:40:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:40:55.805 [DEBUG] [Thread-175653] [transport.py] [_log()] starting thread (client mode): 0xae515ba0
2026-04-11T19:40:55.805 [DEBUG] [Thread-175653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:40:55.825 [DEBUG] [Thread-175653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:40:55.825 [INFO] [Thread-175653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] client lang: <none>
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] server lang: <none>
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] kex follows: False
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] Compression: none
2026-04-11T19:40:55.829 [DEBUG] [Thread-175653] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:40:55.847 [DEBUG] [Thread-175653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:40:55.847 [DEBUG] [Thread-175653] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:40:55.848 [DEBUG] [Thread-175653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:40:55.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:40:55.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:40:55.850 [DEBUG] [Thread-175653] [transport.py] [_log()] userauth is OK
2026-04-11T19:40:55.850 [DEBUG] [Thread-175653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:40:55.850 [DEBUG] [Thread-175653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:40:55.850 [DEBUG] [Thread-175653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:40:55.850 [DEBUG] [Thread-175653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:40:55.867 [INFO] [Thread-175653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:40:55.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:40:56.481 [DEBUG] [Thread-175653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:40:56.482 [DEBUG] [Thread-175653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:40:56.482 [DEBUG] [Thread-175653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:40:56.523 [DEBUG] [Thread-175653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:40:56.523 [DEBUG] [Thread-175653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:40:56.527 [DEBUG] [Thread-175653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:40:56.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:40:56.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:40:56.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:40:56.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:40:56.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:40:56.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:40:56.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:40:56.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:40:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:40:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.736576 -999.00  +11.90  19.25     97  +11.50 1 3 1 3 1     0    0 0.36 0.15 ----- 19.2 19.2 289.4 23.5 13.1 -0.5 12.8 -0.9 12.5 -0.9 12.9 -0.1
2026-04-11T19:40:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:40:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:40:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.736576
2026-04-11T19:40:56.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:40:56.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:40:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:40:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:40:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:40:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:40:16', tmtdew=0.058285, humidity=99.9088, cloud=0.0, wind=18.9162, temperature=11.8723, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:40:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:40:56.554 [DEBUG] [Thread-175653] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:40:56.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:40:56.646 [DEBUG] [Thread-175656] [transport.py] [_log()] starting thread (client mode): 0xae519ae0
2026-04-11T19:40:56.646 [DEBUG] [Thread-175656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:40:56.661 [DEBUG] [Thread-175656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:40:56.661 [INFO] [Thread-175656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:40:56.669 [DEBUG] [Thread-175656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] client lang: <none>
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] server lang: <none>
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] kex follows: False
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] Compression: none
2026-04-11T19:40:56.670 [DEBUG] [Thread-175656] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:40:56.729 [DEBUG] [Thread-175656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:40:56.729 [DEBUG] [Thread-175656] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:40:56.730 [DEBUG] [Thread-175656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:40:56.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:40:56.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:40:56.784 [DEBUG] [Thread-175656] [transport.py] [_log()] userauth is OK
2026-04-11T19:40:56.784 [DEBUG] [Thread-175656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:40:56.785 [DEBUG] [Thread-175656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:40:56.785 [DEBUG] [Thread-175656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:40:56.785 [DEBUG] [Thread-175656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:40:56.808 [INFO] [Thread-175656] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:40:56.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:40:56.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:40:57.642 [DEBUG] [Thread-175656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:40:57.643 [DEBUG] [Thread-175656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:40:57.690 [DEBUG] [Thread-175656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:40:57.690 [DEBUG] [Thread-175656] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:40:57.699 [DEBUG] [Thread-175656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:40:57.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:40:57.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:40:57.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-04-11T19:40:57.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:40:57.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:40:57.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:40:57.733 [DEBUG] [Thread-175656] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:41:05.499 [DEBUG] [Thread-175658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:41:06.650 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:41:06.651 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:41:20.551 [DEBUG] [Thread-175659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:41:26.804 [DEBUG] [Thread-175660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:41:27.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:41:27.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:41:27.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-04-11T19:41:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 40, 52), 0.02155, 99.7844, 0.0, 18.4903, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:41:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:40:52
2026-04-11T19:41:29.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:41:29.621 [DEBUG] [Thread-175661] [transport.py] [_log()] starting thread (client mode): 0xae5144f0
2026-04-11T19:41:29.621 [DEBUG] [Thread-175661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:41:29.642 [DEBUG] [Thread-175661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:41:29.642 [INFO] [Thread-175661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] client lang: <none>
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] server lang: <none>
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] kex follows: False
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] Compression: none
2026-04-11T19:41:29.644 [DEBUG] [Thread-175661] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:41:29.664 [DEBUG] [Thread-175661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:41:29.665 [DEBUG] [Thread-175661] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:41:29.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:41:29.666 [DEBUG] [Thread-175661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:41:29.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:41:29.669 [DEBUG] [Thread-175661] [transport.py] [_log()] userauth is OK
2026-04-11T19:41:29.669 [DEBUG] [Thread-175661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:41:29.669 [DEBUG] [Thread-175661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:41:29.669 [DEBUG] [Thread-175661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:41:29.669 [DEBUG] [Thread-175661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:41:29.694 [INFO] [Thread-175661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:41:29.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:41:30.329 [DEBUG] [Thread-175661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:41:30.329 [DEBUG] [Thread-175661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:41:30.330 [DEBUG] [Thread-175661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:41:30.371 [DEBUG] [Thread-175661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:41:30.371 [DEBUG] [Thread-175661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:41:30.375 [DEBUG] [Thread-175661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:41:30.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:41:30.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:41:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:41:30.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:41:30.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:41:30.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:41:30.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:41:30.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.736923 -999.00  +11.90  18.24     97  +11.50 1 3 1 3 1     0    0 0.38 0.47 ----- 18.2 18.2 300.8 21.6 13.1 -0.6 12.9 -1.2 12.5 -0.8 12.9 -0.0
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.736923
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:41:30.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:40:52', tmtdew=0.02155, humidity=99.7844, cloud=0.0, wind=18.4903, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:41:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:41:30.395 [DEBUG] [Thread-175661] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:41:30.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:41:30.477 [DEBUG] [Thread-175664] [transport.py] [_log()] starting thread (client mode): 0xae50b880
2026-04-11T19:41:30.477 [DEBUG] [Thread-175664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:41:30.492 [DEBUG] [Thread-175664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:41:30.492 [INFO] [Thread-175664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:41:30.500 [DEBUG] [Thread-175664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:41:30.500 [DEBUG] [Thread-175664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:41:30.500 [DEBUG] [Thread-175664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:41:30.500 [DEBUG] [Thread-175664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:41:30.500 [DEBUG] [Thread-175664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] client lang: <none>
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] server lang: <none>
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] kex follows: False
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] Compression: none
2026-04-11T19:41:30.501 [DEBUG] [Thread-175664] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:41:30.560 [DEBUG] [Thread-175664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:41:30.561 [DEBUG] [Thread-175664] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:41:30.562 [DEBUG] [Thread-175664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:41:30.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:41:30.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:41:30.621 [DEBUG] [Thread-175664] [transport.py] [_log()] userauth is OK
2026-04-11T19:41:30.621 [DEBUG] [Thread-175664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:41:30.621 [DEBUG] [Thread-175664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:41:30.621 [DEBUG] [Thread-175664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:41:30.622 [DEBUG] [Thread-175664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:41:30.640 [INFO] [Thread-175664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:41:30.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:41:30.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:41:31.479 [DEBUG] [Thread-175664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:41:31.479 [DEBUG] [Thread-175664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:41:31.527 [DEBUG] [Thread-175664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:41:31.527 [DEBUG] [Thread-175664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:41:31.537 [DEBUG] [Thread-175664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:41:31.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:41:31.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-04-11T19:41:31.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-04-11T19:41:31.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:41:31.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:41:31.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:41:31.576 [DEBUG] [Thread-175664] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:41:35.589 [DEBUG] [Thread-175666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:41:50.643 [DEBUG] [Thread-175667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:01.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:42:01.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:42:01.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-04-11T19:42:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 41, 28), 0.063315, 99.8756, 0.0, 19.6924, 11.9554, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:42:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:41:28
2026-04-11T19:42:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:42:03.378 [DEBUG] [Thread-175668] [transport.py] [_log()] starting thread (client mode): 0xb0f6cf10
2026-04-11T19:42:03.378 [DEBUG] [Thread-175668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:42:03.399 [DEBUG] [Thread-175668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:42:03.399 [INFO] [Thread-175668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:42:03.402 [DEBUG] [Thread-175668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:42:03.402 [DEBUG] [Thread-175668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:42:03.402 [DEBUG] [Thread-175668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:42:03.402 [DEBUG] [Thread-175668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:03.402 [DEBUG] [Thread-175668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:03.402 [DEBUG] [Thread-175668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] client lang: <none>
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] server lang: <none>
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] kex follows: False
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] Compression: none
2026-04-11T19:42:03.403 [DEBUG] [Thread-175668] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:42:03.419 [DEBUG] [Thread-175668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:42:03.419 [DEBUG] [Thread-175668] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:42:03.420 [DEBUG] [Thread-175668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:42:03.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:42:03.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:42:03.422 [DEBUG] [Thread-175668] [transport.py] [_log()] userauth is OK
2026-04-11T19:42:03.422 [DEBUG] [Thread-175668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:42:03.422 [DEBUG] [Thread-175668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:42:03.422 [DEBUG] [Thread-175668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:42:03.422 [DEBUG] [Thread-175668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:42:03.447 [INFO] [Thread-175668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:42:03.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:42:04.091 [DEBUG] [Thread-175668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:42:04.092 [DEBUG] [Thread-175668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:42:04.092 [DEBUG] [Thread-175668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:42:04.133 [DEBUG] [Thread-175668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:42:04.133 [DEBUG] [Thread-175668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:42:04.137 [DEBUG] [Thread-175668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:42:04.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:42:04.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:42:04.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:42:04.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:42:04.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:42:04.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:42:04.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:42:04.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:42:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:42:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.737270 -999.00  +11.80  18.43     97  +11.50 1 3 1 3 1     0    0 0.37 0.58 ----- 18.4 18.4 298.0 21.6 13.1 -0.6 12.8 -1.3 12.5 -1.5 -999.0 -999.0
2026-04-11T19:42:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:42:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:42:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.737270
2026-04-11T19:42:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:42:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:42:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:42:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:42:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:42:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:41:28', tmtdew=0.063315, humidity=99.8756, cloud=0.0, wind=19.6924, temperature=11.9554, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:41:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:42:04.163 [DEBUG] [Thread-175668] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:42:04.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:42:04.255 [DEBUG] [Thread-175671] [transport.py] [_log()] starting thread (client mode): 0xb0f6d0c0
2026-04-11T19:42:04.255 [DEBUG] [Thread-175671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:42:04.270 [DEBUG] [Thread-175671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:42:04.270 [INFO] [Thread-175671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:42:04.277 [DEBUG] [Thread-175671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] client lang: <none>
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] server lang: <none>
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] kex follows: False
2026-04-11T19:42:04.278 [DEBUG] [Thread-175671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:42:04.279 [DEBUG] [Thread-175671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:42:04.279 [DEBUG] [Thread-175671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:42:04.279 [DEBUG] [Thread-175671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:42:04.279 [DEBUG] [Thread-175671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:42:04.279 [DEBUG] [Thread-175671] [transport.py] [_log()] Compression: none
2026-04-11T19:42:04.279 [DEBUG] [Thread-175671] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:42:04.336 [DEBUG] [Thread-175671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:42:04.337 [DEBUG] [Thread-175671] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:42:04.337 [DEBUG] [Thread-175671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:42:04.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:42:04.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:42:04.393 [DEBUG] [Thread-175671] [transport.py] [_log()] userauth is OK
2026-04-11T19:42:04.393 [DEBUG] [Thread-175671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:42:04.393 [DEBUG] [Thread-175671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:42:04.393 [DEBUG] [Thread-175671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:42:04.393 [DEBUG] [Thread-175671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:42:04.413 [INFO] [Thread-175671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:42:04.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:42:04.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:42:05.254 [DEBUG] [Thread-175671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:42:05.254 [DEBUG] [Thread-175671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:42:05.302 [DEBUG] [Thread-175671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:42:05.302 [DEBUG] [Thread-175671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:42:05.311 [DEBUG] [Thread-175671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:42:05.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:42:05.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-04-11T19:42:05.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-04-11T19:42:05.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:42:05.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:42:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:42:05.349 [DEBUG] [Thread-175671] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:42:05.682 [DEBUG] [Thread-175673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:06.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:06.856 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:20.735 [DEBUG] [Thread-175674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:26.860 [DEBUG] [Thread-175675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:35.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:42:35.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:42:35.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-04-11T19:42:35.777 [DEBUG] [Thread-175676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:42:36.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 42, 4), 0.055745, 99.9253, 0.0, 20.2921, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:42:36.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:42:04
2026-04-11T19:42:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:42:37.180 [DEBUG] [Thread-175677] [transport.py] [_log()] starting thread (client mode): 0xae518670
2026-04-11T19:42:37.180 [DEBUG] [Thread-175677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:42:37.202 [DEBUG] [Thread-175677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:42:37.202 [INFO] [Thread-175677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:37.206 [DEBUG] [Thread-175677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] client lang: <none>
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] server lang: <none>
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] kex follows: False
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:42:37.207 [DEBUG] [Thread-175677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:42:37.208 [DEBUG] [Thread-175677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:42:37.208 [DEBUG] [Thread-175677] [transport.py] [_log()] Compression: none
2026-04-11T19:42:37.208 [DEBUG] [Thread-175677] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:42:37.230 [DEBUG] [Thread-175677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:42:37.230 [DEBUG] [Thread-175677] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:42:37.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:42:37.231 [DEBUG] [Thread-175677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:42:37.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:42:37.233 [DEBUG] [Thread-175677] [transport.py] [_log()] userauth is OK
2026-04-11T19:42:37.234 [DEBUG] [Thread-175677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:42:37.234 [DEBUG] [Thread-175677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:42:37.234 [DEBUG] [Thread-175677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:42:37.234 [DEBUG] [Thread-175677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:42:37.270 [INFO] [Thread-175677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:42:37.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:42:37.919 [DEBUG] [Thread-175677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:42:37.919 [DEBUG] [Thread-175677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:42:37.920 [DEBUG] [Thread-175677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:42:37.961 [DEBUG] [Thread-175677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:42:37.961 [DEBUG] [Thread-175677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:42:37.964 [DEBUG] [Thread-175677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:42:37.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:42:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:42:37.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:42:37.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:42:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:42:37.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:42:37.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:42:37.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:42:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:42:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.737618 -999.00  +11.80  15.94     97  +11.50 1 3 1 3 1     0    0 0.39 0.85 ----- 15.9 15.9 298.6 20.0 13.1 -0.6 12.9 -1.5 12.5 -1.0 12.9 -0.1
2026-04-11T19:42:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:42:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:42:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.737618
2026-04-11T19:42:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:42:37.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:42:37.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:42:37.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:42:37.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:42:37.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:42:04', tmtdew=0.055745, humidity=99.9253, cloud=0.0, wind=20.2921, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:42:10.195', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:42:37.988 [DEBUG] [Thread-175677] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:42:38.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:42:38.084 [DEBUG] [Thread-175680] [transport.py] [_log()] starting thread (client mode): 0xae5f22c0
2026-04-11T19:42:38.084 [DEBUG] [Thread-175680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:42:38.102 [DEBUG] [Thread-175680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:42:38.102 [INFO] [Thread-175680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:42:38.109 [DEBUG] [Thread-175680] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:42:38.109 [DEBUG] [Thread-175680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:42:38.109 [DEBUG] [Thread-175680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] client lang: <none>
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] server lang: <none>
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] kex follows: False
2026-04-11T19:42:38.110 [DEBUG] [Thread-175680] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:42:38.111 [DEBUG] [Thread-175680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:42:38.111 [DEBUG] [Thread-175680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:42:38.111 [DEBUG] [Thread-175680] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:42:38.111 [DEBUG] [Thread-175680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:42:38.111 [DEBUG] [Thread-175680] [transport.py] [_log()] Compression: none
2026-04-11T19:42:38.111 [DEBUG] [Thread-175680] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:42:38.168 [DEBUG] [Thread-175680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:42:38.168 [DEBUG] [Thread-175680] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:42:38.169 [DEBUG] [Thread-175680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:42:38.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:42:38.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:42:38.224 [DEBUG] [Thread-175680] [transport.py] [_log()] userauth is OK
2026-04-11T19:42:38.225 [DEBUG] [Thread-175680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:42:38.225 [DEBUG] [Thread-175680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:42:38.225 [DEBUG] [Thread-175680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:42:38.225 [DEBUG] [Thread-175680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:42:38.245 [INFO] [Thread-175680] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:42:38.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:42:38.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:42:39.056 [DEBUG] [Thread-175680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:42:39.056 [DEBUG] [Thread-175680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:42:39.104 [DEBUG] [Thread-175680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:42:39.104 [DEBUG] [Thread-175680] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:42:39.113 [DEBUG] [Thread-175680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:42:39.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:42:39.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:42:39.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-04-11T19:42:39.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:42:39.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:42:39.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:42:39.149 [DEBUG] [Thread-175680] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:42:50.811 [DEBUG] [Thread-175682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:05.872 [DEBUG] [Thread-175683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:07.060 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:07.061 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:09.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:43:09.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:43:09.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-04-11T19:43:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 42, 39), 0.02161, 99.7844, 0.0, 18.0317, 12.3445, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:43:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:42:39
2026-04-11T19:43:10.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:43:11.082 [DEBUG] [Thread-175684] [transport.py] [_log()] starting thread (client mode): 0xb0f55d80
2026-04-11T19:43:11.082 [DEBUG] [Thread-175684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:43:11.103 [DEBUG] [Thread-175684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:43:11.103 [INFO] [Thread-175684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] client lang: <none>
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] server lang: <none>
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] kex follows: False
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] Compression: none
2026-04-11T19:43:11.106 [DEBUG] [Thread-175684] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:43:11.123 [DEBUG] [Thread-175684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:43:11.123 [DEBUG] [Thread-175684] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:43:11.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:43:11.124 [DEBUG] [Thread-175684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:43:11.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:43:11.126 [DEBUG] [Thread-175684] [transport.py] [_log()] userauth is OK
2026-04-11T19:43:11.127 [DEBUG] [Thread-175684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:43:11.127 [DEBUG] [Thread-175684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:43:11.127 [DEBUG] [Thread-175684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:43:11.127 [DEBUG] [Thread-175684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:43:11.145 [INFO] [Thread-175684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:43:11.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:43:11.769 [DEBUG] [Thread-175684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:43:11.770 [DEBUG] [Thread-175684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:43:11.770 [DEBUG] [Thread-175684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:43:11.811 [DEBUG] [Thread-175684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:43:11.811 [DEBUG] [Thread-175684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:43:11.815 [DEBUG] [Thread-175684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:43:11.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:43:11.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:43:11.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:43:11.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:43:11.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:43:11.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:43:11.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.737965 -999.00  +11.90  15.24     97  +11.50 1 3 1 3 1     0    0 0.39 1.07 ----- 15.2 15.2 299.0 19.8 13.0 -0.5 12.9 -1.1 12.5 -0.8 12.9 -0.2
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.737965
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:43:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:42:39', tmtdew=0.02161, humidity=99.7844, cloud=0.0, wind=18.0317, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:42:40.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:43:11.836 [DEBUG] [Thread-175684] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:43:11.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:43:11.921 [DEBUG] [Thread-175687] [transport.py] [_log()] starting thread (client mode): 0xb0fb6fe0
2026-04-11T19:43:11.921 [DEBUG] [Thread-175687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:43:11.935 [DEBUG] [Thread-175687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:43:11.935 [INFO] [Thread-175687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] client lang: <none>
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] server lang: <none>
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] kex follows: False
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:43:11.943 [DEBUG] [Thread-175687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:43:11.944 [DEBUG] [Thread-175687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:43:11.944 [DEBUG] [Thread-175687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:43:11.944 [DEBUG] [Thread-175687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:43:11.944 [DEBUG] [Thread-175687] [transport.py] [_log()] Compression: none
2026-04-11T19:43:11.944 [DEBUG] [Thread-175687] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:43:12.000 [DEBUG] [Thread-175687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:43:12.000 [DEBUG] [Thread-175687] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:43:12.001 [DEBUG] [Thread-175687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:43:12.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:43:12.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:43:12.056 [DEBUG] [Thread-175687] [transport.py] [_log()] userauth is OK
2026-04-11T19:43:12.056 [DEBUG] [Thread-175687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:43:12.056 [DEBUG] [Thread-175687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:43:12.056 [DEBUG] [Thread-175687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:43:12.057 [DEBUG] [Thread-175687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:43:12.075 [INFO] [Thread-175687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:43:12.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:43:12.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:43:12.875 [DEBUG] [Thread-175687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:43:12.875 [DEBUG] [Thread-175687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:43:12.923 [DEBUG] [Thread-175687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:43:12.923 [DEBUG] [Thread-175687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:43:12.932 [DEBUG] [Thread-175687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:43:12.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:43:12.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:43:12.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:43:12.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:43:12.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:43:12.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:43:12.969 [DEBUG] [Thread-175687] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:43:20.908 [DEBUG] [Thread-175689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:26.917 [DEBUG] [Thread-175690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:35.961 [DEBUG] [Thread-175691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:43:42.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:43:42.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:43:42.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:43:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 43, 15), 0.05823, 99.9088, 0.0, 17.0104, 11.9886, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:43:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:43:15
2026-04-11T19:43:44.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:43:44.791 [DEBUG] [Thread-175692] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cf0
2026-04-11T19:43:44.791 [DEBUG] [Thread-175692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:43:44.811 [DEBUG] [Thread-175692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:43:44.811 [INFO] [Thread-175692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:43:44.814 [DEBUG] [Thread-175692] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:43:44.814 [DEBUG] [Thread-175692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] client lang: <none>
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] server lang: <none>
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] kex follows: False
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:43:44.815 [DEBUG] [Thread-175692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:43:44.816 [DEBUG] [Thread-175692] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:43:44.816 [DEBUG] [Thread-175692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:43:44.816 [DEBUG] [Thread-175692] [transport.py] [_log()] Compression: none
2026-04-11T19:43:44.816 [DEBUG] [Thread-175692] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:43:44.835 [DEBUG] [Thread-175692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:43:44.835 [DEBUG] [Thread-175692] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:43:44.836 [DEBUG] [Thread-175692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:43:44.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:43:44.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:43:44.877 [DEBUG] [Thread-175692] [transport.py] [_log()] userauth is OK
2026-04-11T19:43:44.877 [DEBUG] [Thread-175692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:43:44.877 [DEBUG] [Thread-175692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:43:44.877 [DEBUG] [Thread-175692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:43:44.877 [DEBUG] [Thread-175692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:43:44.908 [INFO] [Thread-175692] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:43:44.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:43:45.533 [DEBUG] [Thread-175692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:43:45.533 [DEBUG] [Thread-175692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:43:45.534 [DEBUG] [Thread-175692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:43:45.574 [DEBUG] [Thread-175692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:43:45.574 [DEBUG] [Thread-175692] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:43:45.577 [DEBUG] [Thread-175692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:43:45.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:43:45.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:43:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:43:45.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:43:45.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:43:45.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:43:45.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:43:45.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:43:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:43:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.738312 -999.00  +11.90  16.96     97  +11.50 1 3 1 3 1     0    0 0.40 1.72 ----- 17.0 17.0 293.8 21.6 13.1 -0.5 12.8 -0.9 12.5 -1.1 12.9 -0.2
2026-04-11T19:43:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:43:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:43:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.738312
2026-04-11T19:43:45.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:43:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:43:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:43:45.605 [DEBUG] [Thread-175692] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:43:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:43:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:43:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:43:15', tmtdew=0.05823, humidity=99.9088, cloud=0.0, wind=17.0104, temperature=11.9886, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:43:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:43:45.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:43:45.700 [DEBUG] [Thread-175695] [transport.py] [_log()] starting thread (client mode): 0xae5f2d70
2026-04-11T19:43:45.700 [DEBUG] [Thread-175695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:43:45.714 [DEBUG] [Thread-175695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:43:45.714 [INFO] [Thread-175695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] client lang: <none>
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] server lang: <none>
2026-04-11T19:43:45.723 [DEBUG] [Thread-175695] [transport.py] [_log()] kex follows: False
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] Compression: none
2026-04-11T19:43:45.724 [DEBUG] [Thread-175695] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:43:45.779 [DEBUG] [Thread-175695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:43:45.780 [DEBUG] [Thread-175695] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:43:45.780 [DEBUG] [Thread-175695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:43:45.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:43:45.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:43:45.836 [DEBUG] [Thread-175695] [transport.py] [_log()] userauth is OK
2026-04-11T19:43:45.836 [DEBUG] [Thread-175695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:43:45.836 [DEBUG] [Thread-175695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:43:45.836 [DEBUG] [Thread-175695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:43:45.836 [DEBUG] [Thread-175695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:43:45.855 [INFO] [Thread-175695] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:43:45.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:43:45.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:43:46.660 [DEBUG] [Thread-175695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:43:46.661 [DEBUG] [Thread-175695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:43:46.709 [DEBUG] [Thread-175695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:43:46.709 [DEBUG] [Thread-175695] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:43:46.719 [DEBUG] [Thread-175695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:43:46.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:43:46.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-04-11T19:43:46.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-04-11T19:43:46.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:43:46.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:43:46.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:43:46.757 [DEBUG] [Thread-175695] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:43:51.001 [DEBUG] [Thread-175697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:06.053 [DEBUG] [Thread-175698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:07.265 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:07.266 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:44:16.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:44:16.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-04-11T19:44:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 43, 50), 0.03171, 99.7181, 0.0, 19.9368, 12.3777, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:44:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:43:50
2026-04-11T19:44:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:44:18.594 [DEBUG] [Thread-175699] [transport.py] [_log()] starting thread (client mode): 0xb0fb5990
2026-04-11T19:44:18.594 [DEBUG] [Thread-175699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:44:18.616 [DEBUG] [Thread-175699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:44:18.616 [INFO] [Thread-175699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:44:18.618 [DEBUG] [Thread-175699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] client lang: <none>
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] server lang: <none>
2026-04-11T19:44:18.619 [DEBUG] [Thread-175699] [transport.py] [_log()] kex follows: False
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] Compression: none
2026-04-11T19:44:18.620 [DEBUG] [Thread-175699] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:44:18.640 [DEBUG] [Thread-175699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:44:18.640 [DEBUG] [Thread-175699] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:44:18.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:44:18.641 [DEBUG] [Thread-175699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:44:18.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:44:18.644 [DEBUG] [Thread-175699] [transport.py] [_log()] userauth is OK
2026-04-11T19:44:18.644 [DEBUG] [Thread-175699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:44:18.645 [DEBUG] [Thread-175699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:44:18.645 [DEBUG] [Thread-175699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:44:18.645 [DEBUG] [Thread-175699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:44:18.681 [INFO] [Thread-175699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:44:18.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:44:19.329 [DEBUG] [Thread-175699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:44:19.329 [DEBUG] [Thread-175699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:44:19.329 [DEBUG] [Thread-175699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:44:19.370 [DEBUG] [Thread-175699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:44:19.370 [DEBUG] [Thread-175699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:44:19.374 [DEBUG] [Thread-175699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:44:19.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:44:19.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:44:19.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:44:19.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:44:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:44:19.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:44:19.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:44:19.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:44:19.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:44:19.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.738659 -999.00  +11.80  20.20     97  +11.50 1 3 1 3 1     0    0 0.41 1.55 ----- 20.2 20.2 299.0 22.6 13.1 -0.5 12.9 -1.3 12.5 -1.2 12.9 -0.2
2026-04-11T19:44:19.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:44:19.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:44:19.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.738659
2026-04-11T19:44:19.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:44:19.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:44:19.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:44:19.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:44:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:44:19.401 [DEBUG] [Thread-175699] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:44:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:43:50', tmtdew=0.03171, humidity=99.7181, cloud=0.0, wind=19.9368, temperature=12.3777, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:43:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:44:19.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:44:19.496 [DEBUG] [Thread-175702] [transport.py] [_log()] starting thread (client mode): 0xae5f1750
2026-04-11T19:44:19.496 [DEBUG] [Thread-175702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:44:19.511 [DEBUG] [Thread-175702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:44:19.511 [INFO] [Thread-175702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] client lang: <none>
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] server lang: <none>
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] kex follows: False
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:44:19.519 [DEBUG] [Thread-175702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:44:19.520 [DEBUG] [Thread-175702] [transport.py] [_log()] Compression: none
2026-04-11T19:44:19.520 [DEBUG] [Thread-175702] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:44:19.575 [DEBUG] [Thread-175702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:44:19.575 [DEBUG] [Thread-175702] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:44:19.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:44:19.576 [DEBUG] [Thread-175702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:44:19.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:44:19.631 [DEBUG] [Thread-175702] [transport.py] [_log()] userauth is OK
2026-04-11T19:44:19.632 [DEBUG] [Thread-175702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:44:19.632 [DEBUG] [Thread-175702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:44:19.632 [DEBUG] [Thread-175702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:44:19.632 [DEBUG] [Thread-175702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:44:19.655 [INFO] [Thread-175702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:44: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-04-11T19:44:19.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:44:20.473 [DEBUG] [Thread-175702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:44:20.474 [DEBUG] [Thread-175702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:44:20.522 [DEBUG] [Thread-175702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:44:20.522 [DEBUG] [Thread-175702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:44:20.532 [DEBUG] [Thread-175702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:44:20.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:44: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-04-11T19:44: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-04-11T19:44:20.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:44:20.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:44:20.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:44:20.569 [DEBUG] [Thread-175702] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:44:21.090 [DEBUG] [Thread-175704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:26.979 [DEBUG] [Thread-175705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:36.144 [DEBUG] [Thread-175706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:50.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:44:50.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:44:50.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-04-11T19:44:51.184 [DEBUG] [Thread-175707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:44:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 44, 28), 0.06331, 99.8756, 0.0, 16.2158, 11.9554, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:44:51.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:44:28
2026-04-11T19:44:52.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:44:52.432 [DEBUG] [Thread-175708] [transport.py] [_log()] starting thread (client mode): 0xae518670
2026-04-11T19:44:52.432 [DEBUG] [Thread-175708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:44:52.451 [DEBUG] [Thread-175708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:44:52.451 [INFO] [Thread-175708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] client lang: <none>
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] server lang: <none>
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] kex follows: False
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] Compression: none
2026-04-11T19:44:52.455 [DEBUG] [Thread-175708] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:44:52.472 [DEBUG] [Thread-175708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:44:52.472 [DEBUG] [Thread-175708] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:44:52.473 [DEBUG] [Thread-175708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:44:52.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:44:52.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:44:52.517 [DEBUG] [Thread-175708] [transport.py] [_log()] userauth is OK
2026-04-11T19:44:52.517 [DEBUG] [Thread-175708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:44:52.517 [DEBUG] [Thread-175708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:44:52.517 [DEBUG] [Thread-175708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:44:52.518 [DEBUG] [Thread-175708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:44:52.537 [INFO] [Thread-175708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:44:52.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:44:53.157 [DEBUG] [Thread-175708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:44:53.158 [DEBUG] [Thread-175708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:44:53.158 [DEBUG] [Thread-175708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:44:53.199 [DEBUG] [Thread-175708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:44:53.199 [DEBUG] [Thread-175708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:44:53.201 [DEBUG] [Thread-175708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:44:53.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:44:53.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:44:53.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:44:53.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:44:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:44:53.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:44:53.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:44:53.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:44:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:44:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.739353 -999.00  +11.80  15.62     97  +11.50 1 3 1 3 1     0    0 0.39 1.17 ----- 15.6 15.6 298.2 20.3 13.1 -0.5 12.8 -1.1 12.5 -0.7 12.9 -0.1
2026-04-11T19:44:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:44:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:44:53.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.739353
2026-04-11T19:44:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:44:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:44:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:44:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:44:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:44:53.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:44:28', tmtdew=0.06331, humidity=99.8756, cloud=0.0, wind=16.2158, temperature=11.9554, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:44:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:44:53.226 [DEBUG] [Thread-175708] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:44:53.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:44:53.321 [DEBUG] [Thread-175711] [transport.py] [_log()] starting thread (client mode): 0xb0f6c400
2026-04-11T19:44:53.321 [DEBUG] [Thread-175711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:44:53.336 [DEBUG] [Thread-175711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:44:53.336 [INFO] [Thread-175711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:44:53.343 [DEBUG] [Thread-175711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] client lang: <none>
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] server lang: <none>
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] kex follows: False
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:44:53.344 [DEBUG] [Thread-175711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:44:53.345 [DEBUG] [Thread-175711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:44:53.345 [DEBUG] [Thread-175711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:44:53.345 [DEBUG] [Thread-175711] [transport.py] [_log()] Compression: none
2026-04-11T19:44:53.345 [DEBUG] [Thread-175711] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:44:53.403 [DEBUG] [Thread-175711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:44:53.403 [DEBUG] [Thread-175711] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:44:53.404 [DEBUG] [Thread-175711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:44:53.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:44:53.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:44:53.459 [DEBUG] [Thread-175711] [transport.py] [_log()] userauth is OK
2026-04-11T19:44:53.459 [DEBUG] [Thread-175711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:44:53.459 [DEBUG] [Thread-175711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:44:53.459 [DEBUG] [Thread-175711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:44:53.459 [DEBUG] [Thread-175711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:44:53.481 [INFO] [Thread-175711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:44:53.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:44:53.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:44:54.252 [DEBUG] [Thread-175711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:44:54.252 [DEBUG] [Thread-175711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:44:54.300 [DEBUG] [Thread-175711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:44:54.300 [DEBUG] [Thread-175711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:44:54.309 [DEBUG] [Thread-175711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:44:54.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:44:54.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:44:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:44:54.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:44:54.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:44:54.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:44:54.342 [DEBUG] [Thread-175711] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:45:06.222 [DEBUG] [Thread-175713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:07.472 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:07.473 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:21.270 [DEBUG] [Thread-175714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:45:24.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:45:24.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-04-11T19:45:25.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 45, 3), 0.063325, 99.8756, 0.0, 16.3393, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:45:25.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:45:03
2026-04-11T19:45:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:45:26.190 [DEBUG] [Thread-175715] [transport.py] [_log()] starting thread (client mode): 0xb0fb4ca0
2026-04-11T19:45:26.190 [DEBUG] [Thread-175715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:45:26.210 [DEBUG] [Thread-175715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:45:26.211 [INFO] [Thread-175715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:45:26.214 [DEBUG] [Thread-175715] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:45:26.214 [DEBUG] [Thread-175715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:45:26.214 [DEBUG] [Thread-175715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:45:26.214 [DEBUG] [Thread-175715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:45:26.214 [DEBUG] [Thread-175715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:45:26.214 [DEBUG] [Thread-175715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] client lang: <none>
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] server lang: <none>
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] kex follows: False
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:45:26.215 [DEBUG] [Thread-175715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:45:26.216 [DEBUG] [Thread-175715] [transport.py] [_log()] Compression: none
2026-04-11T19:45:26.216 [DEBUG] [Thread-175715] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:45:26.234 [DEBUG] [Thread-175715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:45:26.235 [DEBUG] [Thread-175715] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:45:26.236 [DEBUG] [Thread-175715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:45:26.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:45:26.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:45:26.237 [DEBUG] [Thread-175715] [transport.py] [_log()] userauth is OK
2026-04-11T19:45:26.238 [DEBUG] [Thread-175715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:45:26.238 [DEBUG] [Thread-175715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:45:26.238 [DEBUG] [Thread-175715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:45:26.238 [DEBUG] [Thread-175715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:45:26.252 [INFO] [Thread-175715] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:45:26.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:45:26.899 [DEBUG] [Thread-175715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:45:26.900 [DEBUG] [Thread-175715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:45:26.900 [DEBUG] [Thread-175715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:45:26.941 [DEBUG] [Thread-175715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:45:26.941 [DEBUG] [Thread-175715] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:45:26.944 [DEBUG] [Thread-175715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:45:26.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:45:26.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:45:26.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:45:26.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:45:26.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:45:26.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:45:26.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:45:26.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:45:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:45:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.739700 -999.00  +11.90  17.46     97  +11.50 1 3 1 3 1     0    0 0.40 1.58 ----- 17.5 17.5 296.0 21.4 13.1 -0.6 12.9 -1.0 12.5 -1.0 12.9 -0.2
2026-04-11T19:45:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:45:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:45:26.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.739700
2026-04-11T19:45:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:45:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:45:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:45:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:45:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:45:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:45:03', tmtdew=0.063325, humidity=99.8756, cloud=0.0, wind=16.3393, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:45:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:45:26.969 [DEBUG] [Thread-175715] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:45:27.033 [DEBUG] [Thread-175718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:27.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:45:27.062 [DEBUG] [Thread-175719] [transport.py] [_log()] starting thread (client mode): 0xb0fb7610
2026-04-11T19:45:27.063 [DEBUG] [Thread-175719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:45:27.077 [DEBUG] [Thread-175719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:45:27.077 [INFO] [Thread-175719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:45:27.085 [DEBUG] [Thread-175719] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:45:27.085 [DEBUG] [Thread-175719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:45:27.085 [DEBUG] [Thread-175719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:45:27.085 [DEBUG] [Thread-175719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] client lang: <none>
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] server lang: <none>
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] kex follows: False
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:45:27.086 [DEBUG] [Thread-175719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:45:27.087 [DEBUG] [Thread-175719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:45:27.087 [DEBUG] [Thread-175719] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:45:27.087 [DEBUG] [Thread-175719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:45:27.087 [DEBUG] [Thread-175719] [transport.py] [_log()] Compression: none
2026-04-11T19:45:27.087 [DEBUG] [Thread-175719] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:45:27.144 [DEBUG] [Thread-175719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:45:27.145 [DEBUG] [Thread-175719] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:45:27.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:45:27.147 [DEBUG] [Thread-175719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:45:27.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:45:27.203 [DEBUG] [Thread-175719] [transport.py] [_log()] userauth is OK
2026-04-11T19:45:27.204 [DEBUG] [Thread-175719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:45:27.204 [DEBUG] [Thread-175719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:45:27.205 [DEBUG] [Thread-175719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:45:27.205 [DEBUG] [Thread-175719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:45:27.224 [INFO] [Thread-175719] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:45:27.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:45:27.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:45:28.077 [DEBUG] [Thread-175719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:45:28.077 [DEBUG] [Thread-175719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:45:28.124 [DEBUG] [Thread-175719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:45:28.125 [DEBUG] [Thread-175719] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:45:28.133 [DEBUG] [Thread-175719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:45:28.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:45:28.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-04-11T19:45: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') -> 00000000
2026-04-11T19:45:28.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:45:28.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:45:28.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:45:28.167 [DEBUG] [Thread-175719] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:45:36.302 [DEBUG] [Thread-175721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:51.344 [DEBUG] [Thread-175722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:45:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:45:58.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:45:58.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-04-11T19:45:59.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 45, 38), 0.01648, 99.8176, 0.0, 20.0779, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:45:59.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:45:38
2026-04-11T19:45:59.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:45:59.955 [DEBUG] [Thread-175723] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b20
2026-04-11T19:45:59.956 [DEBUG] [Thread-175723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:45:59.975 [DEBUG] [Thread-175723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:45:59.975 [INFO] [Thread-175723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] client lang: <none>
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] server lang: <none>
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] kex follows: False
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] Compression: none
2026-04-11T19:45:59.978 [DEBUG] [Thread-175723] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:45:59.994 [DEBUG] [Thread-175723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:45:59.994 [DEBUG] [Thread-175723] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:45:59.994 [DEBUG] [Thread-175723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:45:59.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:45:59.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:45:59.997 [DEBUG] [Thread-175723] [transport.py] [_log()] userauth is OK
2026-04-11T19:45:59.997 [DEBUG] [Thread-175723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:45:59.997 [DEBUG] [Thread-175723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:45:59.997 [DEBUG] [Thread-175723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:45:59.997 [DEBUG] [Thread-175723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:46:00.018 [INFO] [Thread-175723] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:46:00.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:46:00.617 [DEBUG] [Thread-175723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:46:00.617 [DEBUG] [Thread-175723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:46:00.617 [DEBUG] [Thread-175723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:46:00.658 [DEBUG] [Thread-175723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:46:00.658 [DEBUG] [Thread-175723] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:46:00.662 [DEBUG] [Thread-175723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:46:00.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:46:00.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:46:00.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:46:00.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:46:00.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:46:00.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:46:00.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:46:00.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:46:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:46:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.740048 -999.00  +11.90  16.50     97  +11.50 1 3 1 3 1     0    0 0.40 1.46 ----- 16.5 16.5 299.8 20.7 13.1 -0.5 12.9 -1.0 12.5 -0.9 12.9 -0.1
2026-04-11T19:46:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:46:00.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:46:00.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.740048
2026-04-11T19:46:00.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:46:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:46:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:46:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:46:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:46:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:45:38', tmtdew=0.01648, humidity=99.8176, cloud=0.0, wind=20.0779, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:45:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:46:00.687 [DEBUG] [Thread-175723] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:46:00.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:46:00.781 [DEBUG] [Thread-175726] [transport.py] [_log()] starting thread (client mode): 0xb0fb41c0
2026-04-11T19:46:00.781 [DEBUG] [Thread-175726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:46:00.796 [DEBUG] [Thread-175726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:46:00.796 [INFO] [Thread-175726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:46:00.803 [DEBUG] [Thread-175726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] client lang: <none>
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] server lang: <none>
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] kex follows: False
2026-04-11T19:46:00.804 [DEBUG] [Thread-175726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:46:00.805 [DEBUG] [Thread-175726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:46:00.805 [DEBUG] [Thread-175726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:46:00.805 [DEBUG] [Thread-175726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:46:00.805 [DEBUG] [Thread-175726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:46:00.805 [DEBUG] [Thread-175726] [transport.py] [_log()] Compression: none
2026-04-11T19:46:00.805 [DEBUG] [Thread-175726] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:46:00.863 [DEBUG] [Thread-175726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:46:00.864 [DEBUG] [Thread-175726] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:46:00.864 [DEBUG] [Thread-175726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:46:00.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:46:00.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:46:00.923 [DEBUG] [Thread-175726] [transport.py] [_log()] userauth is OK
2026-04-11T19:46:00.924 [DEBUG] [Thread-175726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:46:00.924 [DEBUG] [Thread-175726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:46:00.924 [DEBUG] [Thread-175726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:46:00.924 [DEBUG] [Thread-175726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:46:00.942 [INFO] [Thread-175726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:46:00.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:46:00.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:46:01.770 [DEBUG] [Thread-175726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:46:01.770 [DEBUG] [Thread-175726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:46:01.818 [DEBUG] [Thread-175726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:46:01.818 [DEBUG] [Thread-175726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:46:01.828 [DEBUG] [Thread-175726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:46:01.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:46:01.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-04-11T19:46:01.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-04-11T19:46:01.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:46:01.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:46:01.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:46:01.865 [DEBUG] [Thread-175726] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:46:06.381 [DEBUG] [Thread-175728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:46:07.677 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:46:07.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:46:21.434 [DEBUG] [Thread-175729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:46:27.099 [DEBUG] [Thread-175730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:46:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:46:31.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:46:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:46:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 46, 15), 0.005715, 99.9254, 0.0, 19.3925, 11.972, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:46:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:46:15
2026-04-11T19:46:33.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:46:33.692 [DEBUG] [Thread-175731] [transport.py] [_log()] starting thread (client mode): 0xb0fb5f60
2026-04-11T19:46:33.692 [DEBUG] [Thread-175731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:46:33.711 [DEBUG] [Thread-175731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:46:33.711 [INFO] [Thread-175731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] client lang: <none>
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] server lang: <none>
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] kex follows: False
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] Compression: none
2026-04-11T19:46:33.713 [DEBUG] [Thread-175731] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:46:33.727 [DEBUG] [Thread-175731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:46:33.728 [DEBUG] [Thread-175731] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:46:33.728 [DEBUG] [Thread-175731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:46:33.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:46:33.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:46:33.730 [DEBUG] [Thread-175731] [transport.py] [_log()] userauth is OK
2026-04-11T19:46:33.730 [DEBUG] [Thread-175731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:46:33.730 [DEBUG] [Thread-175731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:46:33.731 [DEBUG] [Thread-175731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:46:33.731 [DEBUG] [Thread-175731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:46:33.766 [INFO] [Thread-175731] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:46:33.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:46:34.383 [DEBUG] [Thread-175731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:46:34.383 [DEBUG] [Thread-175731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:46:34.384 [DEBUG] [Thread-175731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:46:34.424 [DEBUG] [Thread-175731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:46:34.424 [DEBUG] [Thread-175731] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:46:34.427 [DEBUG] [Thread-175731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:46:34.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:46:34.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:46:34.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:46:34.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:46:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:46:34.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:46:34.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:46:34.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:46:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:46:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.740395 -999.00  +11.90  18.50     97  +11.50 1 3 1 3 1     0    0 0.40 1.35 ----- 18.5 18.5 297.4 20.8 13.1 -0.4 12.9 -1.1 12.5 -0.9 12.9 -0.1
2026-04-11T19:46:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:46:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:46:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.740395
2026-04-11T19:46:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:46:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:46:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:46:34.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:46:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:46:34.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:46:15', tmtdew=0.005715, humidity=99.9254, cloud=0.0, wind=19.3925, temperature=11.972, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:46:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:46:34.456 [DEBUG] [Thread-175731] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:46:34.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:46:34.547 [DEBUG] [Thread-175734] [transport.py] [_log()] starting thread (client mode): 0xb0f560b0
2026-04-11T19:46:34.547 [DEBUG] [Thread-175734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:46:34.562 [DEBUG] [Thread-175734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:46:34.562 [INFO] [Thread-175734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:46:34.569 [DEBUG] [Thread-175734] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:46:34.570 [DEBUG] [Thread-175734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] client lang: <none>
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] server lang: <none>
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] kex follows: False
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:46:34.571 [DEBUG] [Thread-175734] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:46:34.572 [DEBUG] [Thread-175734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:46:34.572 [DEBUG] [Thread-175734] [transport.py] [_log()] Compression: none
2026-04-11T19:46:34.572 [DEBUG] [Thread-175734] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:46:34.628 [DEBUG] [Thread-175734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:46:34.628 [DEBUG] [Thread-175734] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:46:34.629 [DEBUG] [Thread-175734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:46:34.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:46:34.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:46:34.689 [DEBUG] [Thread-175734] [transport.py] [_log()] userauth is OK
2026-04-11T19:46:34.689 [DEBUG] [Thread-175734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:46:34.689 [DEBUG] [Thread-175734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:46:34.690 [DEBUG] [Thread-175734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:46:34.690 [DEBUG] [Thread-175734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:46:34.712 [INFO] [Thread-175734] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:46:34.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:46:34.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:46:35.529 [DEBUG] [Thread-175734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:46:35.529 [DEBUG] [Thread-175734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:46:35.578 [DEBUG] [Thread-175734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:46:35.578 [DEBUG] [Thread-175734] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:46:35.587 [DEBUG] [Thread-175734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:46:35.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:46:35.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-04-11T19:46:35.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-04-11T19:46:35.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:46:35.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:46:35.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:46:35.624 [DEBUG] [Thread-175734] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:46:36.471 [DEBUG] [Thread-175736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:46:51.524 [DEBUG] [Thread-175737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:47:05.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:47:05.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-04-11T19:47:06.558 [DEBUG] [Thread-175738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 46, 50), 0.00123, 99.9171, 0.0, 18.455, 12.5435, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:47:06.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:46:50
2026-04-11T19:47:07.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:47:07.546 [DEBUG] [Thread-175739] [transport.py] [_log()] starting thread (client mode): 0xb0f6d0f0
2026-04-11T19:47:07.546 [DEBUG] [Thread-175739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:47:07.567 [DEBUG] [Thread-175739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:47:07.567 [INFO] [Thread-175739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:47:07.570 [DEBUG] [Thread-175739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] client lang: <none>
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] server lang: <none>
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] kex follows: False
2026-04-11T19:47:07.571 [DEBUG] [Thread-175739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:47:07.572 [DEBUG] [Thread-175739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:47:07.572 [DEBUG] [Thread-175739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:47:07.572 [DEBUG] [Thread-175739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:47:07.572 [DEBUG] [Thread-175739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:47:07.572 [DEBUG] [Thread-175739] [transport.py] [_log()] Compression: none
2026-04-11T19:47:07.572 [DEBUG] [Thread-175739] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:47:07.590 [DEBUG] [Thread-175739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:47:07.591 [DEBUG] [Thread-175739] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:47:07.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:47:07.592 [DEBUG] [Thread-175739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:47:07.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:47:07.594 [DEBUG] [Thread-175739] [transport.py] [_log()] userauth is OK
2026-04-11T19:47:07.594 [DEBUG] [Thread-175739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:47:07.594 [DEBUG] [Thread-175739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:47:07.594 [DEBUG] [Thread-175739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:47:07.594 [DEBUG] [Thread-175739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:47:07.609 [INFO] [Thread-175739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:47:07.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:47:07.877 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:07.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:08.261 [DEBUG] [Thread-175739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:47:08.261 [DEBUG] [Thread-175739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:47:08.261 [DEBUG] [Thread-175739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:47:08.303 [DEBUG] [Thread-175739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:47:08.303 [DEBUG] [Thread-175739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:47:08.306 [DEBUG] [Thread-175739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:47:08.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:47:08.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:47:08.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:47:08.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:47:08.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:47:08.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:47:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:47:08.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:47:08.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:47:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.740742 -999.00  +11.90  19.85     97  +11.50 1 3 1 3 1     0    0 0.39 1.25 ----- 19.9 19.9 299.4 21.6 13.1 -0.4 12.9 -0.9 12.6 -0.6 12.9 -0.1
2026-04-11T19:47:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:47:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:47:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.740742
2026-04-11T19:47:08.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:47:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:47:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:47:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:47:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:47:08.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:46:50', tmtdew=0.00123, humidity=99.9171, cloud=0.0, wind=18.455, temperature=12.5435, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:46:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:47:08.333 [DEBUG] [Thread-175739] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:47:08.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:47:08.430 [DEBUG] [Thread-175742] [transport.py] [_log()] starting thread (client mode): 0xb0f55360
2026-04-11T19:47:08.430 [DEBUG] [Thread-175742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:47:08.444 [DEBUG] [Thread-175742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:47:08.444 [INFO] [Thread-175742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:47:08.452 [DEBUG] [Thread-175742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:47:08.452 [DEBUG] [Thread-175742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:47:08.452 [DEBUG] [Thread-175742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] client lang: <none>
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] server lang: <none>
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] kex follows: False
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:47:08.453 [DEBUG] [Thread-175742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:47:08.454 [DEBUG] [Thread-175742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:47:08.454 [DEBUG] [Thread-175742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:47:08.454 [DEBUG] [Thread-175742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:47:08.454 [DEBUG] [Thread-175742] [transport.py] [_log()] Compression: none
2026-04-11T19:47:08.454 [DEBUG] [Thread-175742] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:47:08.512 [DEBUG] [Thread-175742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:47:08.513 [DEBUG] [Thread-175742] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:47:08.513 [DEBUG] [Thread-175742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:47:08.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:47:08.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:47:08.571 [DEBUG] [Thread-175742] [transport.py] [_log()] userauth is OK
2026-04-11T19:47:08.571 [DEBUG] [Thread-175742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:47:08.572 [DEBUG] [Thread-175742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:47:08.572 [DEBUG] [Thread-175742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:47:08.572 [DEBUG] [Thread-175742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:47:08.599 [INFO] [Thread-175742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:47:08.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:47:08.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:47:09.427 [DEBUG] [Thread-175742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:47:09.428 [DEBUG] [Thread-175742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:47:09.476 [DEBUG] [Thread-175742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:47:09.476 [DEBUG] [Thread-175742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:47:09.486 [DEBUG] [Thread-175742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:47:09.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:47:09.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-04-11T19:47: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') -> 00000000
2026-04-11T19:47:09.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:47:09.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:47:09.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:47:09.522 [DEBUG] [Thread-175742] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:47:21.592 [DEBUG] [Thread-175744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:27.160 [DEBUG] [Thread-175745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:36.644 [DEBUG] [Thread-175746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:47:39.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:47:39.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:47:39.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-04-11T19:47:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 47, 26), 0.005685, 99.9254, 0.0, 18.104, 12.0052, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:47:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:47:26
2026-04-11T19:47:41.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:47:41.358 [DEBUG] [Thread-175747] [transport.py] [_log()] starting thread (client mode): 0xb0f55bd0
2026-04-11T19:47:41.358 [DEBUG] [Thread-175747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:47:41.380 [DEBUG] [Thread-175747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:47:41.380 [INFO] [Thread-175747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] client lang: <none>
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] server lang: <none>
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] kex follows: False
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] Compression: none
2026-04-11T19:47:41.383 [DEBUG] [Thread-175747] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:47:41.401 [DEBUG] [Thread-175747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:47:41.401 [DEBUG] [Thread-175747] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:47:41.402 [DEBUG] [Thread-175747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:47:41.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:47:41.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:47:41.404 [DEBUG] [Thread-175747] [transport.py] [_log()] userauth is OK
2026-04-11T19:47:41.405 [DEBUG] [Thread-175747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:47:41.405 [DEBUG] [Thread-175747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:47:41.405 [DEBUG] [Thread-175747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:47:41.405 [DEBUG] [Thread-175747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:47:41.419 [INFO] [Thread-175747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:47:41.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:47:42.057 [DEBUG] [Thread-175747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:47:42.057 [DEBUG] [Thread-175747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:47:42.058 [DEBUG] [Thread-175747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:47:42.098 [DEBUG] [Thread-175747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:47:42.098 [DEBUG] [Thread-175747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:47:42.101 [DEBUG] [Thread-175747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:47:42.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:47:42.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:47:42.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:47:42.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:47:42.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:47:42.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:47:42.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:47:42.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:47:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:47:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.741090 -999.00  +11.90  14.06     97  +11.50 1 3 1 3 1     0    0 0.39 1.25 ----- 14.1 14.1 294.6 21.7 13.1 -0.4 12.9 -1.1 12.6 -1.0 12.9 -0.1
2026-04-11T19:47:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:47:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:47:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.741090
2026-04-11T19:47:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:47:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:47:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:47:42.128 [DEBUG] [Thread-175747] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:47:42.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:47:42.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:47:42.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:47:26', tmtdew=0.005685, humidity=99.9254, cloud=0.0, wind=18.104, temperature=12.0052, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:47:10.176', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:47:42.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:47:42.223 [DEBUG] [Thread-175750] [transport.py] [_log()] starting thread (client mode): 0xb0fb62f0
2026-04-11T19:47:42.223 [DEBUG] [Thread-175750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:47:42.245 [DEBUG] [Thread-175750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:47:42.246 [INFO] [Thread-175750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:47:42.253 [DEBUG] [Thread-175750] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:47:42.253 [DEBUG] [Thread-175750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] client lang: <none>
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] server lang: <none>
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] kex follows: False
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:47:42.254 [DEBUG] [Thread-175750] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:47:42.255 [DEBUG] [Thread-175750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:47:42.255 [DEBUG] [Thread-175750] [transport.py] [_log()] Compression: none
2026-04-11T19:47:42.255 [DEBUG] [Thread-175750] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:47:42.310 [DEBUG] [Thread-175750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:47:42.311 [DEBUG] [Thread-175750] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:47:42.311 [DEBUG] [Thread-175750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:47:42.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:47:42.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:47:42.367 [DEBUG] [Thread-175750] [transport.py] [_log()] userauth is OK
2026-04-11T19:47:42.367 [DEBUG] [Thread-175750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:47:42.368 [DEBUG] [Thread-175750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:47:42.368 [DEBUG] [Thread-175750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:47:42.368 [DEBUG] [Thread-175750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:47:42.386 [INFO] [Thread-175750] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:47:42.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:47:42.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:47:43.232 [DEBUG] [Thread-175750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:47:43.232 [DEBUG] [Thread-175750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:47:43.284 [DEBUG] [Thread-175750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:47:43.284 [DEBUG] [Thread-175750] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:47:43.296 [DEBUG] [Thread-175750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:47:43.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:47:43.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-04-11T19:47:43.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:47:43.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:47:43.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:47:43.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:47:43.332 [DEBUG] [Thread-175750] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:47:51.680 [DEBUG] [Thread-175752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:06.728 [DEBUG] [Thread-175753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:08.081 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:08.082 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:13.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:48:13.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:48:13.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-04-11T19:48:14.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 48, 1), 0.005725, 99.9254, 0.0, 17.8571, 11.9554, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:48:14.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:48:01
2026-04-11T19:48:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:48:15.139 [DEBUG] [Thread-175754] [transport.py] [_log()] starting thread (client mode): 0xb0fb7790
2026-04-11T19:48:15.139 [DEBUG] [Thread-175754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:48:15.162 [DEBUG] [Thread-175754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:48:15.162 [INFO] [Thread-175754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:48:15.165 [DEBUG] [Thread-175754] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:48:15.165 [DEBUG] [Thread-175754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] client lang: <none>
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] server lang: <none>
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] kex follows: False
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] Compression: none
2026-04-11T19:48:15.166 [DEBUG] [Thread-175754] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:48:15.184 [DEBUG] [Thread-175754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:48:15.185 [DEBUG] [Thread-175754] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:48:15.185 [DEBUG] [Thread-175754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:48:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:48:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:48:15.187 [DEBUG] [Thread-175754] [transport.py] [_log()] userauth is OK
2026-04-11T19:48:15.187 [DEBUG] [Thread-175754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:48:15.188 [DEBUG] [Thread-175754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:48:15.188 [DEBUG] [Thread-175754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:48:15.188 [DEBUG] [Thread-175754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:48:15.224 [INFO] [Thread-175754] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:48:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:48:15.882 [DEBUG] [Thread-175754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:48:15.883 [DEBUG] [Thread-175754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:48:15.883 [DEBUG] [Thread-175754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:48:15.924 [DEBUG] [Thread-175754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:48:15.924 [DEBUG] [Thread-175754] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:48:15.928 [DEBUG] [Thread-175754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:48:15.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:48:15.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:48:15.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:48:15.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:48:15.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:48:15.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:48:15.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:48:15.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:48:15.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:48:15.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.741437 -999.00  +11.90  14.39     97  +11.50 1 3 1 3 1     0    0 0.40 1.67 ----- 14.4 14.4 295.8 18.3 13.0 -0.5 12.9 -1.2 12.5 -1.0 12.9 -0.1
2026-04-11T19:48:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:48:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:48:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.741437
2026-04-11T19:48:15.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:48:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:48:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:48:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:48:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:48:15.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:48:01', tmtdew=0.005725, humidity=99.9254, cloud=0.0, wind=17.8571, temperature=11.9554, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:47:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:48:15.957 [DEBUG] [Thread-175754] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:48:16.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:48:16.049 [DEBUG] [Thread-175757] [transport.py] [_log()] starting thread (client mode): 0xb0f57df0
2026-04-11T19:48:16.049 [DEBUG] [Thread-175757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:48:16.063 [DEBUG] [Thread-175757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:48:16.064 [INFO] [Thread-175757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:48:16.071 [DEBUG] [Thread-175757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] client lang: <none>
2026-04-11T19:48:16.072 [DEBUG] [Thread-175757] [transport.py] [_log()] server lang: <none>
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] kex follows: False
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] Compression: none
2026-04-11T19:48:16.073 [DEBUG] [Thread-175757] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:48:16.135 [DEBUG] [Thread-175757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:48:16.135 [DEBUG] [Thread-175757] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:48:16.136 [DEBUG] [Thread-175757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:48:16.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:48:16.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:48:16.191 [DEBUG] [Thread-175757] [transport.py] [_log()] userauth is OK
2026-04-11T19:48:16.191 [DEBUG] [Thread-175757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:48:16.192 [DEBUG] [Thread-175757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:48:16.192 [DEBUG] [Thread-175757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:48:16.192 [DEBUG] [Thread-175757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:48:16.210 [INFO] [Thread-175757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:48:16.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:48:16.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:48:17.050 [DEBUG] [Thread-175757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:48:17.051 [DEBUG] [Thread-175757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:48:17.099 [DEBUG] [Thread-175757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:48:17.099 [DEBUG] [Thread-175757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:48:17.109 [DEBUG] [Thread-175757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:48:17.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:48:17.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-04-11T19:48:17.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-04-11T19:48:17.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:48:17.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:48:17.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:48:17.147 [DEBUG] [Thread-175757] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:48:21.765 [DEBUG] [Thread-175759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:27.227 [DEBUG] [Thread-175760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:36.816 [DEBUG] [Thread-175761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:48:47.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:48:47.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:48:47.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-04-11T19:48:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 48, 36), 0.01137, 99.8507, 0.0, 19.3723, 12.5103, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:48:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:48:36
2026-04-11T19:48:48.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:48:49.002 [DEBUG] [Thread-175762] [transport.py] [_log()] starting thread (client mode): 0xb0f55660
2026-04-11T19:48:49.002 [DEBUG] [Thread-175762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:48:49.025 [DEBUG] [Thread-175762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:48:49.025 [INFO] [Thread-175762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:48:49.026 [DEBUG] [Thread-175762] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] client lang: <none>
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] server lang: <none>
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] kex follows: False
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:48:49.027 [DEBUG] [Thread-175762] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:48:49.028 [DEBUG] [Thread-175762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:48:49.028 [DEBUG] [Thread-175762] [transport.py] [_log()] Compression: none
2026-04-11T19:48:49.028 [DEBUG] [Thread-175762] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:48:49.041 [DEBUG] [Thread-175762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:48:49.042 [DEBUG] [Thread-175762] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:48:49.043 [DEBUG] [Thread-175762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:48:49.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:48:49.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:48:49.044 [DEBUG] [Thread-175762] [transport.py] [_log()] userauth is OK
2026-04-11T19:48:49.045 [DEBUG] [Thread-175762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:48:49.045 [DEBUG] [Thread-175762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:48:49.045 [DEBUG] [Thread-175762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:48:49.045 [DEBUG] [Thread-175762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:48:49.068 [INFO] [Thread-175762] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:48:49.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:48:49.652 [DEBUG] [Thread-175762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:48:49.652 [DEBUG] [Thread-175762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:48:49.653 [DEBUG] [Thread-175762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:48:49.693 [DEBUG] [Thread-175762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:48:49.693 [DEBUG] [Thread-175762] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:48:49.696 [DEBUG] [Thread-175762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:48:49.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:48:49.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:48:49.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:48:49.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:48:49.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:48:49.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:48:49.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:48:49.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:48:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:48:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.741784 -999.00  +11.90  14.45     97  +11.60 1 3 1 3 1     0    0 0.42 1.75 ----- 14.4 14.4 294.6 17.7 13.1 -0.7 12.9 -1.1 12.5 -1.7 12.9 -0.2
2026-04-11T19:48:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:48:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:48:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.741784
2026-04-11T19:48:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:48:49.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:48:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:48:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:48:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:48:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:48:36', tmtdew=0.01137, humidity=99.8507, cloud=0.0, wind=19.3723, temperature=12.5103, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:48:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:48:49.724 [DEBUG] [Thread-175762] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:48:49.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:48:49.824 [DEBUG] [Thread-175765] [transport.py] [_log()] starting thread (client mode): 0xb0f56620
2026-04-11T19:48:49.824 [DEBUG] [Thread-175765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:48:49.838 [DEBUG] [Thread-175765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:48:49.838 [INFO] [Thread-175765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] client lang: <none>
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] server lang: <none>
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] kex follows: False
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:48:49.846 [DEBUG] [Thread-175765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:48:49.847 [DEBUG] [Thread-175765] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:48:49.847 [DEBUG] [Thread-175765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:48:49.847 [DEBUG] [Thread-175765] [transport.py] [_log()] Compression: none
2026-04-11T19:48:49.847 [DEBUG] [Thread-175765] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:48:49.902 [DEBUG] [Thread-175765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:48:49.903 [DEBUG] [Thread-175765] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:48:49.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:48:49.904 [DEBUG] [Thread-175765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:48:49.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:48:49.959 [DEBUG] [Thread-175765] [transport.py] [_log()] userauth is OK
2026-04-11T19:48:49.959 [DEBUG] [Thread-175765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:48:49.960 [DEBUG] [Thread-175765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:48:49.960 [DEBUG] [Thread-175765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:48:49.960 [DEBUG] [Thread-175765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:48:49.979 [INFO] [Thread-175765] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:48:49.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:48:49.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:48:50.803 [DEBUG] [Thread-175765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:48:50.803 [DEBUG] [Thread-175765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:48:50.851 [DEBUG] [Thread-175765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:48:50.851 [DEBUG] [Thread-175765] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:48:50.861 [DEBUG] [Thread-175765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:48:50.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:48:50.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-04-11T19:48:50.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-04-11T19:48:50.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:48:50.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:48:50.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:48:50.901 [DEBUG] [Thread-175765] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:48:51.854 [DEBUG] [Thread-175767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:06.914 [DEBUG] [Thread-175768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:08.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:08.286 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:49:20.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:49:20.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-04-11T19:49:21.947 [DEBUG] [Thread-175769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 49, 12), 0.0057, 99.9254, 0.0, 15.8278, 11.9886, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:49:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:49:12
2026-04-11T19:49:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:49:22.802 [DEBUG] [Thread-175770] [transport.py] [_log()] starting thread (client mode): 0xae5a6650
2026-04-11T19:49:22.808 [DEBUG] [Thread-175770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:49:22.824 [DEBUG] [Thread-175770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:49:22.824 [INFO] [Thread-175770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] client lang: <none>
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] server lang: <none>
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] kex follows: False
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] Compression: none
2026-04-11T19:49:22.827 [DEBUG] [Thread-175770] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:49:22.844 [DEBUG] [Thread-175770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:49:22.844 [DEBUG] [Thread-175770] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:49:22.845 [DEBUG] [Thread-175770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:49:22.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:49:22.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:49:22.889 [DEBUG] [Thread-175770] [transport.py] [_log()] userauth is OK
2026-04-11T19:49:22.889 [DEBUG] [Thread-175770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:49:22.889 [DEBUG] [Thread-175770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:49:22.889 [DEBUG] [Thread-175770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:49:22.889 [DEBUG] [Thread-175770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:49:22.925 [INFO] [Thread-175770] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:49:22.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:49:23.529 [DEBUG] [Thread-175770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:49:23.529 [DEBUG] [Thread-175770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:49:23.530 [DEBUG] [Thread-175770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:49:23.570 [DEBUG] [Thread-175770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:49:23.570 [DEBUG] [Thread-175770] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:49:23.574 [DEBUG] [Thread-175770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:49:23.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:49:23.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:49:23.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:49:23.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:49:23.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:49:23.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:49:23.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:49:23.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:49:23.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:49:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.742478 -999.00  +11.90  13.53     97  +11.60 1 3 1 3 1     0    0 0.40 1.35 ----- 13.5 13.5 297.6 19.8 13.1 -0.7 12.9 -1.1 12.6 -0.9 13.0 -0.2
2026-04-11T19:49:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:49:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:49:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.742478
2026-04-11T19:49:23.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:49:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:49:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:49:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:49:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:49:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:49:12', tmtdew=0.0057, humidity=99.9254, cloud=0.0, wind=15.8278, temperature=11.9886, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:49:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:49:23.603 [DEBUG] [Thread-175770] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:49:23.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:49:23.697 [DEBUG] [Thread-175773] [transport.py] [_log()] starting thread (client mode): 0xb0f6c250
2026-04-11T19:49:23.697 [DEBUG] [Thread-175773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:49:23.711 [DEBUG] [Thread-175773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:49:23.711 [INFO] [Thread-175773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] client lang: <none>
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] server lang: <none>
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] kex follows: False
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:49:23.719 [DEBUG] [Thread-175773] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:49:23.720 [DEBUG] [Thread-175773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:49:23.720 [DEBUG] [Thread-175773] [transport.py] [_log()] Compression: none
2026-04-11T19:49:23.720 [DEBUG] [Thread-175773] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:49:23.779 [DEBUG] [Thread-175773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:49:23.780 [DEBUG] [Thread-175773] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:49:23.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:49:23.781 [DEBUG] [Thread-175773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:49:23.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:49:23.835 [DEBUG] [Thread-175773] [transport.py] [_log()] userauth is OK
2026-04-11T19:49:23.835 [DEBUG] [Thread-175773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:49:23.835 [DEBUG] [Thread-175773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:49:23.835 [DEBUG] [Thread-175773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:49:23.836 [DEBUG] [Thread-175773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:49:23.854 [INFO] [Thread-175773] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:49:23.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:49:23.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:49:24.680 [DEBUG] [Thread-175773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:49:24.680 [DEBUG] [Thread-175773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:49:24.727 [DEBUG] [Thread-175773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:49:24.727 [DEBUG] [Thread-175773] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:49:24.736 [DEBUG] [Thread-175773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:49:24.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:49:24.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:49:24.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-04-11T19:49:24.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:49:24.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:49:24.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:49:24.768 [DEBUG] [Thread-175773] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:49:27.307 [DEBUG] [Thread-175775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:36.982 [DEBUG] [Thread-175776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:52.024 [DEBUG] [Thread-175777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:49:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:49:54.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:49:54.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-04-11T19:49:56.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 49, 47), 0.0012, 99.9171, 0.0, 17.3614, 12.5767, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:49:56.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:49:47
2026-04-11T19:49:56.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:49:56.637 [DEBUG] [Thread-175778] [transport.py] [_log()] starting thread (client mode): 0xb0f570d0
2026-04-11T19:49:56.638 [DEBUG] [Thread-175778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:49:56.657 [DEBUG] [Thread-175778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:49:56.658 [INFO] [Thread-175778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] client lang: <none>
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] server lang: <none>
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] kex follows: False
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:49:56.661 [DEBUG] [Thread-175778] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:49:56.662 [DEBUG] [Thread-175778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:49:56.662 [DEBUG] [Thread-175778] [transport.py] [_log()] Compression: none
2026-04-11T19:49:56.662 [DEBUG] [Thread-175778] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:49:56.677 [DEBUG] [Thread-175778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:49:56.678 [DEBUG] [Thread-175778] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:49:56.679 [DEBUG] [Thread-175778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:49:56.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:49:56.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:49:56.681 [DEBUG] [Thread-175778] [transport.py] [_log()] userauth is OK
2026-04-11T19:49:56.681 [DEBUG] [Thread-175778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:49:56.681 [DEBUG] [Thread-175778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:49:56.681 [DEBUG] [Thread-175778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:49:56.681 [DEBUG] [Thread-175778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:49:56.705 [INFO] [Thread-175778] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:49:56.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:49:57.385 [DEBUG] [Thread-175778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:49:57.385 [DEBUG] [Thread-175778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:49:57.386 [DEBUG] [Thread-175778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:49:57.426 [DEBUG] [Thread-175778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:49:57.427 [DEBUG] [Thread-175778] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:49:57.431 [DEBUG] [Thread-175778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:49:57.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:49:57.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:49:57.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:49:57.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:49:57.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:49:57.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:49:57.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:49:57.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:49:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:49:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.742826 -999.00  +11.90  14.77     97  +11.60 1 3 1 3 1     0    0 0.39 0.89 ----- 14.8 14.8 288.1 18.2 13.1 -0.5 12.9 -0.9 12.6 -0.7 12.9 -0.1
2026-04-11T19:49:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:49:57.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:49:57.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.742826
2026-04-11T19:49:57.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:49:57.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:49:57.459 [DEBUG] [Thread-175778] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:49:57.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:49:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:49:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:49:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:49:47', tmtdew=0.0012, humidity=99.9171, cloud=0.0, wind=17.3614, temperature=12.5767, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:49:40.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:49:57.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:49:57.555 [DEBUG] [Thread-175781] [transport.py] [_log()] starting thread (client mode): 0xae5149a0
2026-04-11T19:49:57.555 [DEBUG] [Thread-175781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:49:57.569 [DEBUG] [Thread-175781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:49:57.569 [INFO] [Thread-175781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:49:57.577 [DEBUG] [Thread-175781] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:49:57.577 [DEBUG] [Thread-175781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:49:57.577 [DEBUG] [Thread-175781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:49:57.577 [DEBUG] [Thread-175781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:57.577 [DEBUG] [Thread-175781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:49:57.577 [DEBUG] [Thread-175781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] client lang: <none>
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] server lang: <none>
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] kex follows: False
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:49:57.578 [DEBUG] [Thread-175781] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:49:57.579 [DEBUG] [Thread-175781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:49:57.579 [DEBUG] [Thread-175781] [transport.py] [_log()] Compression: none
2026-04-11T19:49:57.579 [DEBUG] [Thread-175781] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:49:57.635 [DEBUG] [Thread-175781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:49:57.636 [DEBUG] [Thread-175781] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:49:57.637 [DEBUG] [Thread-175781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:49:57.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:49:57.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:49:57.690 [DEBUG] [Thread-175781] [transport.py] [_log()] userauth is OK
2026-04-11T19:49:57.691 [DEBUG] [Thread-175781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:49:57.691 [DEBUG] [Thread-175781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:49:57.691 [DEBUG] [Thread-175781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:49:57.691 [DEBUG] [Thread-175781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:49:57.711 [INFO] [Thread-175781] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:49:57.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:49:57.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:49:58.561 [DEBUG] [Thread-175781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:49:58.561 [DEBUG] [Thread-175781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:49:58.609 [DEBUG] [Thread-175781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:49:58.609 [DEBUG] [Thread-175781] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:49:58.619 [DEBUG] [Thread-175781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:49:58.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:49: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')
2026-04-11T19:49:58.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-04-11T19:49:58.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:49:58.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:49:58.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:49:58.656 [DEBUG] [Thread-175781] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:50:07.060 [DEBUG] [Thread-175783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:50:08.490 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:50:08.491 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:50:22.108 [DEBUG] [Thread-175784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:50:27.375 [DEBUG] [Thread-175785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:50:28.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:50:28.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:50:28.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-04-11T19:50:29.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 49, 47), 0.0012, 99.9171, 0.0, 17.3614, 12.5767, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:50:29.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:49:47
2026-04-11T19:50:30.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:50:30.519 [DEBUG] [Thread-175786] [transport.py] [_log()] starting thread (client mode): 0xb0f57760
2026-04-11T19:50:30.528 [DEBUG] [Thread-175786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:50:30.539 [DEBUG] [Thread-175786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:50:30.539 [INFO] [Thread-175786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:50:30.542 [DEBUG] [Thread-175786] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] client lang: <none>
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] server lang: <none>
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] kex follows: False
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] Compression: none
2026-04-11T19:50:30.543 [DEBUG] [Thread-175786] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:50:30.559 [DEBUG] [Thread-175786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:50:30.560 [DEBUG] [Thread-175786] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:50:30.560 [DEBUG] [Thread-175786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:50:30.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:50:30.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:50:30.605 [DEBUG] [Thread-175786] [transport.py] [_log()] userauth is OK
2026-04-11T19:50:30.605 [DEBUG] [Thread-175786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:50:30.605 [DEBUG] [Thread-175786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:50:30.605 [DEBUG] [Thread-175786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:50:30.605 [DEBUG] [Thread-175786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:50:30.642 [INFO] [Thread-175786] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:50:30.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:50:31.251 [DEBUG] [Thread-175786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:50:31.251 [DEBUG] [Thread-175786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:50:31.251 [DEBUG] [Thread-175786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:50:31.292 [DEBUG] [Thread-175786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:50:31.292 [DEBUG] [Thread-175786] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:50:31.295 [DEBUG] [Thread-175786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:50:31.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:50:31.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:50:31.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:50:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:50:31.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:50:31.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:50:31.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:50:31.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:50:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:50:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.743173 -999.00  +11.90  14.51     97  +11.50 1 3 1 3 1     0    0 0.39 0.97 ----- 14.5 14.5 296.4 20.6 13.1 -0.6 12.9 -1.0 12.6 -0.9 12.9 -0.1
2026-04-11T19:50:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:50:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:50:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.743173
2026-04-11T19:50:31.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:50:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:50:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:50:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:50:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:50:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:49:47', tmtdew=0.0012, humidity=99.9171, cloud=0.0, wind=17.3614, temperature=12.5767, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:50:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:50:31.321 [DEBUG] [Thread-175786] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:50:31.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:50:31.416 [DEBUG] [Thread-175789] [transport.py] [_log()] starting thread (client mode): 0xb0fb6c50
2026-04-11T19:50:31.416 [DEBUG] [Thread-175789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:50:31.431 [DEBUG] [Thread-175789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:50:31.431 [INFO] [Thread-175789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:50:31.438 [DEBUG] [Thread-175789] [transport.py] [_log()] client lang: <none>
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] server lang: <none>
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] kex follows: False
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] Compression: none
2026-04-11T19:50:31.439 [DEBUG] [Thread-175789] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:50:31.500 [DEBUG] [Thread-175789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:50:31.500 [DEBUG] [Thread-175789] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:50:31.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:50:31.501 [DEBUG] [Thread-175789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:50:31.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:50:31.559 [DEBUG] [Thread-175789] [transport.py] [_log()] userauth is OK
2026-04-11T19:50:31.559 [DEBUG] [Thread-175789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:50:31.559 [DEBUG] [Thread-175789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:50:31.559 [DEBUG] [Thread-175789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:50:31.559 [DEBUG] [Thread-175789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:50:31.578 [INFO] [Thread-175789] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:50:31.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:50:31.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:50:32.414 [DEBUG] [Thread-175789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:50:32.414 [DEBUG] [Thread-175789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:50:32.462 [DEBUG] [Thread-175789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:50:32.462 [DEBUG] [Thread-175789] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:50:32.471 [DEBUG] [Thread-175789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:50:32.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:50:32.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:50:32.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-04-11T19:50:32.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:50:32.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:50:32.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:50:32.505 [DEBUG] [Thread-175789] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:50:37.145 [DEBUG] [Thread-175791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:50:52.196 [DEBUG] [Thread-175792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:51:02.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:51:02.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-04-11T19:51:03.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 50, 23), 0.003145, 99.9419, 0.0, 19.2506, 12.0218, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:51:03.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:50:23
2026-04-11T19:51:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:51:04.383 [DEBUG] [Thread-175793] [transport.py] [_log()] starting thread (client mode): 0xb0f6db10
2026-04-11T19:51:04.383 [DEBUG] [Thread-175793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:51:04.402 [DEBUG] [Thread-175793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:51:04.403 [INFO] [Thread-175793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] client lang: <none>
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] server lang: <none>
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] kex follows: False
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:51:04.406 [DEBUG] [Thread-175793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:51:04.407 [DEBUG] [Thread-175793] [transport.py] [_log()] Compression: none
2026-04-11T19:51:04.407 [DEBUG] [Thread-175793] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:51:04.423 [DEBUG] [Thread-175793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:51:04.424 [DEBUG] [Thread-175793] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:51:04.424 [DEBUG] [Thread-175793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:51:04.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:51:04.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:51:04.426 [DEBUG] [Thread-175793] [transport.py] [_log()] userauth is OK
2026-04-11T19:51:04.426 [DEBUG] [Thread-175793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:51:04.426 [DEBUG] [Thread-175793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:51:04.426 [DEBUG] [Thread-175793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:51:04.426 [DEBUG] [Thread-175793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:51:04.443 [INFO] [Thread-175793] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:51:04.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:51:05.100 [DEBUG] [Thread-175793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:51:05.100 [DEBUG] [Thread-175793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:51:05.100 [DEBUG] [Thread-175793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:51:05.141 [DEBUG] [Thread-175793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:51:05.141 [DEBUG] [Thread-175793] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:51:05.145 [DEBUG] [Thread-175793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:51:05.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:51:05.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:51:05.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:51:05.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:51:05.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:51:05.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:51:05.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:51:05.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:51:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:51:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.743520 -999.00  +11.90  14.38     97  +11.50 1 3 1 3 1     0    0 0.40 1.10 ----- 14.4 14.4 283.2 18.2 13.1 -0.7 12.9 -1.1 12.5 -1.1 12.9 -0.2
2026-04-11T19:51:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:51:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:51:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.743520
2026-04-11T19:51:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:51:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:51:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:51:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:51:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:51:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:50:23', tmtdew=0.003145, humidity=99.9419, cloud=0.0, wind=19.2506, temperature=12.0218, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:50:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:51:05.170 [DEBUG] [Thread-175793] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:51:05.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:51:05.272 [DEBUG] [Thread-175796] [transport.py] [_log()] starting thread (client mode): 0xb0f54490
2026-04-11T19:51:05.272 [DEBUG] [Thread-175796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:51:05.287 [DEBUG] [Thread-175796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:51:05.287 [INFO] [Thread-175796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:51:05.295 [DEBUG] [Thread-175796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:51:05.295 [DEBUG] [Thread-175796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:51:05.295 [DEBUG] [Thread-175796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] client lang: <none>
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] server lang: <none>
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] kex follows: False
2026-04-11T19:51:05.296 [DEBUG] [Thread-175796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:51:05.297 [DEBUG] [Thread-175796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:51:05.297 [DEBUG] [Thread-175796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:51:05.297 [DEBUG] [Thread-175796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:51:05.297 [DEBUG] [Thread-175796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:51:05.297 [DEBUG] [Thread-175796] [transport.py] [_log()] Compression: none
2026-04-11T19:51:05.297 [DEBUG] [Thread-175796] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:51:05.356 [DEBUG] [Thread-175796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:51:05.357 [DEBUG] [Thread-175796] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:51:05.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:51:05.359 [DEBUG] [Thread-175796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:51:05.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:51:05.415 [DEBUG] [Thread-175796] [transport.py] [_log()] userauth is OK
2026-04-11T19:51:05.415 [DEBUG] [Thread-175796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:51:05.416 [DEBUG] [Thread-175796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:51:05.416 [DEBUG] [Thread-175796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:51:05.416 [DEBUG] [Thread-175796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:51:05.438 [INFO] [Thread-175796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:51: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-04-11T19:51:05.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:51:06.244 [DEBUG] [Thread-175796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:51:06.244 [DEBUG] [Thread-175796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:51:06.292 [DEBUG] [Thread-175796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:51:06.292 [DEBUG] [Thread-175796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:51:06.301 [DEBUG] [Thread-175796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:51:06.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:51:06.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-04-11T19:51:06.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-04-11T19:51:06.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:51:06.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:51:06.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:51:06.337 [DEBUG] [Thread-175796] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:51:07.236 [DEBUG] [Thread-175798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:08.696 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:08.697 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:22.286 [DEBUG] [Thread-175799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:27.438 [DEBUG] [Thread-175800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:36.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:51:36.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:51:36.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-04-11T19:51:37.320 [DEBUG] [Thread-175801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:51:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 50, 58), 0.0557, 99.9254, 0.0, 18.3686, 11.9886, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:51:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:50:58
2026-04-11T19:51:38.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:51:38.285 [DEBUG] [Thread-175802] [transport.py] [_log()] starting thread (client mode): 0xae518c40
2026-04-11T19:51:38.285 [DEBUG] [Thread-175802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:51:38.305 [DEBUG] [Thread-175802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:51:38.305 [INFO] [Thread-175802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] client lang: <none>
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] server lang: <none>
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] kex follows: False
2026-04-11T19:51:38.308 [DEBUG] [Thread-175802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:51:38.309 [DEBUG] [Thread-175802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:51:38.309 [DEBUG] [Thread-175802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:51:38.309 [DEBUG] [Thread-175802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:51:38.309 [DEBUG] [Thread-175802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:51:38.309 [DEBUG] [Thread-175802] [transport.py] [_log()] Compression: none
2026-04-11T19:51:38.309 [DEBUG] [Thread-175802] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:51:38.325 [DEBUG] [Thread-175802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:51:38.326 [DEBUG] [Thread-175802] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:51:38.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:51:38.327 [DEBUG] [Thread-175802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:51:38.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:51:38.329 [DEBUG] [Thread-175802] [transport.py] [_log()] userauth is OK
2026-04-11T19:51:38.329 [DEBUG] [Thread-175802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:51:38.329 [DEBUG] [Thread-175802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:51:38.329 [DEBUG] [Thread-175802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:51:38.329 [DEBUG] [Thread-175802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:51:38.354 [INFO] [Thread-175802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:51:38.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:51:38.981 [DEBUG] [Thread-175802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:51:38.982 [DEBUG] [Thread-175802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:51:38.982 [DEBUG] [Thread-175802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:51:39.022 [DEBUG] [Thread-175802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:51:39.022 [DEBUG] [Thread-175802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:51:39.025 [DEBUG] [Thread-175802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:51:39.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:51:39.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:51:39.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:51:39.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:51:39.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:51:39.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:51:39.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:51:39.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:51:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:51:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.743867 -999.00  +11.90  11.81     97  +11.50 1 3 1 3 1     0    0 0.42 1.49 ----- 11.8 11.8 287.8 16.8 13.2 -0.6 12.9 -1.2 12.6 -0.9 12.9 -0.1
2026-04-11T19:51:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:51:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:51:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.743867
2026-04-11T19:51:39.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:51:39.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:51:39.051 [DEBUG] [Thread-175802] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:51:39.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:51:39.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:51:39.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:51:39.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:50:58', tmtdew=0.0557, humidity=99.9254, cloud=0.0, wind=18.3686, temperature=11.9886, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:51:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:51:39.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:51:39.145 [DEBUG] [Thread-175805] [transport.py] [_log()] starting thread (client mode): 0xb0f56f80
2026-04-11T19:51:39.145 [DEBUG] [Thread-175805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:51:39.160 [DEBUG] [Thread-175805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:51:39.160 [INFO] [Thread-175805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:51:39.167 [DEBUG] [Thread-175805] [transport.py] [_log()] client lang: <none>
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] server lang: <none>
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] kex follows: False
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] Compression: none
2026-04-11T19:51:39.168 [DEBUG] [Thread-175805] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:51:39.227 [DEBUG] [Thread-175805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:51:39.228 [DEBUG] [Thread-175805] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:51:39.228 [DEBUG] [Thread-175805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:51:39.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:51:39.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:51:39.284 [DEBUG] [Thread-175805] [transport.py] [_log()] userauth is OK
2026-04-11T19:51:39.284 [DEBUG] [Thread-175805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:51:39.285 [DEBUG] [Thread-175805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:51:39.285 [DEBUG] [Thread-175805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:51:39.285 [DEBUG] [Thread-175805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:51:39.304 [INFO] [Thread-175805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:51:39.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:51:39.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:51:40.109 [DEBUG] [Thread-175805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:51:40.109 [DEBUG] [Thread-175805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:51:40.157 [DEBUG] [Thread-175805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:51:40.157 [DEBUG] [Thread-175805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:51:40.166 [DEBUG] [Thread-175805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:51:40.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:51:40.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-04-11T19:51:40.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-04-11T19:51:40.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:51:40.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:51:40.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:51:40.202 [DEBUG] [Thread-175805] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:51:52.358 [DEBUG] [Thread-175807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:07.412 [DEBUG] [Thread-175808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:08.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:08.901 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:10.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:52:10.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:52:10.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:52:11.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 51, 34), 0.00642, 99.8839, 0.0, 17.6789, 12.3777, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:52:11.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:51:34
2026-04-11T19:52:11.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:52:12.103 [DEBUG] [Thread-175809] [transport.py] [_log()] starting thread (client mode): 0xae515120
2026-04-11T19:52:12.103 [DEBUG] [Thread-175809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:52:12.122 [DEBUG] [Thread-175809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:52:12.122 [INFO] [Thread-175809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:12.125 [DEBUG] [Thread-175809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] client lang: <none>
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] server lang: <none>
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] kex follows: False
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] Compression: none
2026-04-11T19:52:12.126 [DEBUG] [Thread-175809] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:52:12.144 [DEBUG] [Thread-175809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:52:12.145 [DEBUG] [Thread-175809] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:52:12.145 [DEBUG] [Thread-175809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:52:12.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:52:12.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:52:12.147 [DEBUG] [Thread-175809] [transport.py] [_log()] userauth is OK
2026-04-11T19:52:12.147 [DEBUG] [Thread-175809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:52:12.147 [DEBUG] [Thread-175809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:52:12.148 [DEBUG] [Thread-175809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:52:12.148 [DEBUG] [Thread-175809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:52:12.165 [INFO] [Thread-175809] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:52:12.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:52:12.797 [DEBUG] [Thread-175809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:52:12.797 [DEBUG] [Thread-175809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:52:12.797 [DEBUG] [Thread-175809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:52:12.838 [DEBUG] [Thread-175809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:52:12.838 [DEBUG] [Thread-175809] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:52:12.840 [DEBUG] [Thread-175809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:52:12.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:52:12.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:52:12.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:52:12.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:52:12.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:52:12.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:52:12.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:52:12.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:52:12.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:52:12.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.744214 -999.00  +11.90  15.63     97  +11.50 1 3 1 3 1     0    0 0.40 1.40 ----- 15.6 15.6 288.2 20.2 13.2 -0.4 12.9 -1.1 12.6 -0.7 13.0 -0.2
2026-04-11T19:52:12.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:52:12.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:52:12.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.744214
2026-04-11T19:52:12.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:52:12.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:52:12.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:52:12.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:52:12.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:52:12.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:51:34', tmtdew=0.00642, humidity=99.8839, cloud=0.0, wind=17.6789, temperature=12.3777, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:51:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:52:12.869 [DEBUG] [Thread-175809] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:52:12.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:52:12.970 [DEBUG] [Thread-175812] [transport.py] [_log()] starting thread (client mode): 0xa79507c0
2026-04-11T19:52:12.971 [DEBUG] [Thread-175812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:52:12.986 [DEBUG] [Thread-175812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:52:12.986 [INFO] [Thread-175812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:52:12.993 [DEBUG] [Thread-175812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:52:12.994 [DEBUG] [Thread-175812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] client lang: <none>
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] server lang: <none>
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] kex follows: False
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] Compression: none
2026-04-11T19:52:12.995 [DEBUG] [Thread-175812] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:52:13.050 [DEBUG] [Thread-175812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:52:13.051 [DEBUG] [Thread-175812] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:52:13.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:52:13.052 [DEBUG] [Thread-175812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:52:13.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:52:13.107 [DEBUG] [Thread-175812] [transport.py] [_log()] userauth is OK
2026-04-11T19:52:13.107 [DEBUG] [Thread-175812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:52:13.108 [DEBUG] [Thread-175812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:52:13.108 [DEBUG] [Thread-175812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:52:13.108 [DEBUG] [Thread-175812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:52:13.132 [INFO] [Thread-175812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:52:13.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:52:13.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:52:13.976 [DEBUG] [Thread-175812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:52:13.976 [DEBUG] [Thread-175812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:52:14.024 [DEBUG] [Thread-175812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:52:14.024 [DEBUG] [Thread-175812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:52:14.033 [DEBUG] [Thread-175812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:52:14.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:52:14.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:52: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-04-11T19:52:14.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:52:14.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:52:14.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:52:14.070 [DEBUG] [Thread-175812] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:52:22.451 [DEBUG] [Thread-175814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:27.495 [DEBUG] [Thread-175815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:37.505 [DEBUG] [Thread-175816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:52:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:52:44.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:52:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:52:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 52, 9), 0.05574, 99.9254, 0.0, 18.1922, 11.9888, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:52:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:52:09
2026-04-11T19:52:45.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:52:45.954 [DEBUG] [Thread-175817] [transport.py] [_log()] starting thread (client mode): 0xb0f55210
2026-04-11T19:52:45.954 [DEBUG] [Thread-175817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:52:45.973 [DEBUG] [Thread-175817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:52:45.974 [INFO] [Thread-175817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] client lang: <none>
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] server lang: <none>
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] kex follows: False
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] Compression: none
2026-04-11T19:52:45.977 [DEBUG] [Thread-175817] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:52:45.993 [DEBUG] [Thread-175817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:52:45.993 [DEBUG] [Thread-175817] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:52:45.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:52:45.994 [DEBUG] [Thread-175817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:52:45.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:52:45.996 [DEBUG] [Thread-175817] [transport.py] [_log()] userauth is OK
2026-04-11T19:52:45.996 [DEBUG] [Thread-175817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:52:45.996 [DEBUG] [Thread-175817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:52:45.996 [DEBUG] [Thread-175817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:52:45.996 [DEBUG] [Thread-175817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:52:46.020 [INFO] [Thread-175817] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:52:46.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:52:46.640 [DEBUG] [Thread-175817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:52:46.640 [DEBUG] [Thread-175817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:52:46.640 [DEBUG] [Thread-175817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:52:46.681 [DEBUG] [Thread-175817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:52:46.681 [DEBUG] [Thread-175817] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:52:46.684 [DEBUG] [Thread-175817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:52:46.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:52:46.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:52:46.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:52:46.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:52:46.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:52:46.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:52:46.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:52:46.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:52:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:52:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.744562 -999.00  +11.90  11.35     97  +11.60 1 3 1 3 1     0    0 0.39 0.94 ----- 11.3 11.3 299.0 16.9 13.2 -0.8 12.9 -0.9 12.6 -1.1 13.0 -0.2
2026-04-11T19:52:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:52:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:52:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.744562
2026-04-11T19:52:46.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:52:46.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:52:46.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:52:46.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:52:46.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:52:46.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:52:09', tmtdew=0.05574, humidity=99.9254, cloud=0.0, wind=18.1922, temperature=11.9888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:52:10.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:52:46.710 [DEBUG] [Thread-175817] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:52:46.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:52:46.800 [DEBUG] [Thread-175820] [transport.py] [_log()] starting thread (client mode): 0xae5f2e30
2026-04-11T19:52:46.800 [DEBUG] [Thread-175820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:52:46.815 [DEBUG] [Thread-175820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:52:46.815 [INFO] [Thread-175820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] client lang: <none>
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] server lang: <none>
2026-04-11T19:52:46.823 [DEBUG] [Thread-175820] [transport.py] [_log()] kex follows: False
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] Compression: none
2026-04-11T19:52:46.824 [DEBUG] [Thread-175820] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:52:46.883 [DEBUG] [Thread-175820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:52:46.883 [DEBUG] [Thread-175820] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:52:46.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:52:46.884 [DEBUG] [Thread-175820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:52:46.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:52:46.940 [DEBUG] [Thread-175820] [transport.py] [_log()] userauth is OK
2026-04-11T19:52:46.940 [DEBUG] [Thread-175820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:52:46.940 [DEBUG] [Thread-175820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:52:46.941 [DEBUG] [Thread-175820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:52:46.941 [DEBUG] [Thread-175820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:52:46.960 [INFO] [Thread-175820] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:52: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-04-11T19:52:46.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:52:47.798 [DEBUG] [Thread-175820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:52:47.798 [DEBUG] [Thread-175820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:52:47.845 [DEBUG] [Thread-175820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:52:47.845 [DEBUG] [Thread-175820] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:52:47.856 [DEBUG] [Thread-175820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:52:47.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:52:47.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-04-11T19:52:47.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-04-11T19:52:47.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:52:47.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:52:47.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:52:47.893 [DEBUG] [Thread-175820] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:52:52.540 [DEBUG] [Thread-175822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:07.581 [DEBUG] [Thread-175823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:09.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:09.106 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:53:17.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:53:17.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-04-11T19:53:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 52, 45), 0.00636, 99.8839, 0.0, 19.2312, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:53:19.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:52:45
2026-04-11T19:53:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:53:19.741 [DEBUG] [Thread-175824] [transport.py] [_log()] starting thread (client mode): 0xae5f2aa0
2026-04-11T19:53:19.741 [DEBUG] [Thread-175824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:53:19.763 [DEBUG] [Thread-175824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:53:19.764 [INFO] [Thread-175824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:53:19.766 [DEBUG] [Thread-175824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] client lang: <none>
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] server lang: <none>
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] kex follows: False
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] Compression: none
2026-04-11T19:53:19.767 [DEBUG] [Thread-175824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:53:19.781 [DEBUG] [Thread-175824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:53:19.781 [DEBUG] [Thread-175824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:53:19.782 [DEBUG] [Thread-175824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:53:19.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:53:19.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:53:19.784 [DEBUG] [Thread-175824] [transport.py] [_log()] userauth is OK
2026-04-11T19:53:19.784 [DEBUG] [Thread-175824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:53:19.784 [DEBUG] [Thread-175824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:53:19.784 [DEBUG] [Thread-175824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:53:19.784 [DEBUG] [Thread-175824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:53:19.807 [INFO] [Thread-175824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:53:19.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:53:20.454 [DEBUG] [Thread-175824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:53:20.455 [DEBUG] [Thread-175824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:53:20.455 [DEBUG] [Thread-175824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:53:20.496 [DEBUG] [Thread-175824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:53:20.496 [DEBUG] [Thread-175824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:53:20.499 [DEBUG] [Thread-175824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:53:20.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:53:20.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:53:20.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:53:20.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:53:20.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:53:20.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:53:20.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:53:20.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:53:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:53:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.744909 -999.00  +11.90  13.33     97  +11.60 1 3 1 3 1     0    0 0.37 0.21 ----- 13.3 13.3 292.4 19.3 13.2 -0.5 13.0 -0.9 12.6 -1.0 13.0 -0.2
2026-04-11T19:53:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:53:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:53:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.744909
2026-04-11T19:53:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:53:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:53:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:53:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:53:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:53:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:52:45', tmtdew=0.00636, humidity=99.8839, cloud=0.0, wind=19.2312, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:52:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:53:20.527 [DEBUG] [Thread-175824] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:53:20.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:53:20.629 [DEBUG] [Thread-175827] [transport.py] [_log()] starting thread (client mode): 0xae5f0b80
2026-04-11T19:53:20.629 [DEBUG] [Thread-175827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:53:20.645 [DEBUG] [Thread-175827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:53:20.645 [INFO] [Thread-175827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] client lang: <none>
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] server lang: <none>
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] kex follows: False
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:53:20.652 [DEBUG] [Thread-175827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:53:20.653 [DEBUG] [Thread-175827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:53:20.653 [DEBUG] [Thread-175827] [transport.py] [_log()] Compression: none
2026-04-11T19:53:20.653 [DEBUG] [Thread-175827] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:53:20.711 [DEBUG] [Thread-175827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:53:20.711 [DEBUG] [Thread-175827] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:53:20.712 [DEBUG] [Thread-175827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:53:20.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:53:20.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:53:20.767 [DEBUG] [Thread-175827] [transport.py] [_log()] userauth is OK
2026-04-11T19:53:20.768 [DEBUG] [Thread-175827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:53:20.768 [DEBUG] [Thread-175827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:53:20.768 [DEBUG] [Thread-175827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:53:20.768 [DEBUG] [Thread-175827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:53:20.787 [INFO] [Thread-175827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:53:20.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:53:20.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:53:21.617 [DEBUG] [Thread-175827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:53:21.618 [DEBUG] [Thread-175827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:53:21.666 [DEBUG] [Thread-175827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:53:21.666 [DEBUG] [Thread-175827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:53:21.675 [DEBUG] [Thread-175827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:53:21.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:53:21.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T19:53:21.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:53:21.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:53:21.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:53:21.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:53:21.712 [DEBUG] [Thread-175827] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:53:22.617 [DEBUG] [Thread-175829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:27.553 [DEBUG] [Thread-175830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:37.668 [DEBUG] [Thread-175831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:53:51.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:53:51.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-04-11T19:53:52.704 [DEBUG] [Thread-175832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:53:53.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 53, 20), 0.00574, 99.9254, 0.0, 18.1746, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:53:53.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:53:20
2026-04-11T19:53:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:53:53.593 [DEBUG] [Thread-175833] [transport.py] [_log()] starting thread (client mode): 0xae51b970
2026-04-11T19:53:53.593 [DEBUG] [Thread-175833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:53:53.612 [DEBUG] [Thread-175833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:53:53.612 [INFO] [Thread-175833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:53:53.615 [DEBUG] [Thread-175833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] client lang: <none>
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] server lang: <none>
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] kex follows: False
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] Compression: none
2026-04-11T19:53:53.616 [DEBUG] [Thread-175833] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:53:53.633 [DEBUG] [Thread-175833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:53:53.634 [DEBUG] [Thread-175833] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:53:53.634 [DEBUG] [Thread-175833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:53:53.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:53:53.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:53:53.636 [DEBUG] [Thread-175833] [transport.py] [_log()] userauth is OK
2026-04-11T19:53:53.636 [DEBUG] [Thread-175833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:53:53.636 [DEBUG] [Thread-175833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:53:53.636 [DEBUG] [Thread-175833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:53:53.637 [DEBUG] [Thread-175833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:53:53.661 [INFO] [Thread-175833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:53:53.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:53:54.328 [DEBUG] [Thread-175833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:53:54.329 [DEBUG] [Thread-175833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:53:54.329 [DEBUG] [Thread-175833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:53:54.370 [DEBUG] [Thread-175833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:53:54.370 [DEBUG] [Thread-175833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:53:54.373 [DEBUG] [Thread-175833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:53:54.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:53:54.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:53:54.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:53:54.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:53:54.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:53:54.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:53:54.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:53:54.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:53:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:53:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.745256 -999.00  +11.90  13.54     97  +11.60 1 3 1 3 1     0    0 0.34 -0.34 ----- 13.5 13.5 278.4 16.3 13.2 -0.4 13.0 -1.1 12.6 -0.8 13.0 -0.1
2026-04-11T19:53:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:53:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:53:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.745256
2026-04-11T19:53:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:53:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:53:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:53:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:53:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:53:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:53:20', tmtdew=0.00574, humidity=99.9254, cloud=0.0, wind=18.1746, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:53:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:53:54.399 [DEBUG] [Thread-175833] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:53:54.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:53:54.494 [DEBUG] [Thread-175836] [transport.py] [_log()] starting thread (client mode): 0xb0fb5720
2026-04-11T19:53:54.494 [DEBUG] [Thread-175836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:53:54.510 [DEBUG] [Thread-175836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:53:54.510 [INFO] [Thread-175836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:53:54.517 [DEBUG] [Thread-175836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:53:54.518 [DEBUG] [Thread-175836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:53:54.518 [DEBUG] [Thread-175836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:53:54.518 [DEBUG] [Thread-175836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:54.518 [DEBUG] [Thread-175836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:53:54.518 [DEBUG] [Thread-175836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] client lang: <none>
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] server lang: <none>
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] kex follows: False
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] Compression: none
2026-04-11T19:53:54.519 [DEBUG] [Thread-175836] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:53:54.575 [DEBUG] [Thread-175836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:53:54.575 [DEBUG] [Thread-175836] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:53:54.576 [DEBUG] [Thread-175836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:53:54.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:53:54.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:53:54.631 [DEBUG] [Thread-175836] [transport.py] [_log()] userauth is OK
2026-04-11T19:53:54.632 [DEBUG] [Thread-175836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:53:54.632 [DEBUG] [Thread-175836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:53:54.632 [DEBUG] [Thread-175836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:53:54.632 [DEBUG] [Thread-175836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:53:54.651 [INFO] [Thread-175836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:53:54.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:53:54.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:53:55.481 [DEBUG] [Thread-175836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:53:55.481 [DEBUG] [Thread-175836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:53:55.529 [DEBUG] [Thread-175836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:53:55.529 [DEBUG] [Thread-175836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:53:55.538 [DEBUG] [Thread-175836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:53:55.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:53:55.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-04-11T19:53:55.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-04-11T19:53:55.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:53:55.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:53:55.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:53:55.575 [DEBUG] [Thread-175836] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:54:07.741 [DEBUG] [Thread-175838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:09.311 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:09.312 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:22.799 [DEBUG] [Thread-175839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:25.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:54:25.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:54:25.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:54:26.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 53, 55), 0.060805, 99.8922, 0.0, 18.4039, 11.9223, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:54:26.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:53:55
2026-04-11T19:54:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:54:27.412 [DEBUG] [Thread-175840] [transport.py] [_log()] starting thread (client mode): 0xa7953ee0
2026-04-11T19:54:27.412 [DEBUG] [Thread-175840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:54:27.434 [DEBUG] [Thread-175840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:54:27.434 [INFO] [Thread-175840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:54:27.435 [DEBUG] [Thread-175840] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:54:27.435 [DEBUG] [Thread-175840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] client lang: <none>
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] server lang: <none>
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] kex follows: False
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] Compression: none
2026-04-11T19:54:27.436 [DEBUG] [Thread-175840] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:54:27.444 [DEBUG] [Thread-175840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:54:27.444 [DEBUG] [Thread-175840] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:54:27.445 [DEBUG] [Thread-175840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:54:27.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:54:27.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:54:27.446 [DEBUG] [Thread-175840] [transport.py] [_log()] userauth is OK
2026-04-11T19:54:27.446 [DEBUG] [Thread-175840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:54:27.446 [DEBUG] [Thread-175840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:54:27.446 [DEBUG] [Thread-175840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:54:27.446 [DEBUG] [Thread-175840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:54:27.477 [INFO] [Thread-175840] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:54:27.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:54:27.623 [DEBUG] [Thread-175842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:28.258 [DEBUG] [Thread-175840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:54:28.258 [DEBUG] [Thread-175840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:54:28.258 [DEBUG] [Thread-175840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:54:28.299 [DEBUG] [Thread-175840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:54:28.299 [DEBUG] [Thread-175840] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:54:28.303 [DEBUG] [Thread-175840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:54:28.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:54:28.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:54:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:54:28.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:54:28.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:54:28.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:54:28.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:54:28.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:54:28.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:54:28.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.745951 -999.00  +11.80  11.55     97  +11.50 1 3 1 3 1     0    0 0.34 -0.81 ----- 11.6 11.6 290.6 16.4 13.1 -0.7 12.9 -1.1 12.5 -0.8 12.9 -0.3
2026-04-11T19:54:28.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:54:28.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:54:28.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.745951
2026-04-11T19:54:28.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:54:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:54:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:54:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:54:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:54:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:53:55', tmtdew=0.060805, humidity=99.8922, cloud=0.0, wind=18.4039, temperature=11.9223, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:54:10.166', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:54:28.329 [DEBUG] [Thread-175840] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:54:28.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:54:28.422 [DEBUG] [Thread-175844] [transport.py] [_log()] starting thread (client mode): 0xae516800
2026-04-11T19:54:28.422 [DEBUG] [Thread-175844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:54:28.438 [DEBUG] [Thread-175844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:54:28.438 [INFO] [Thread-175844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] client lang: <none>
2026-04-11T19:54:28.446 [DEBUG] [Thread-175844] [transport.py] [_log()] server lang: <none>
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] kex follows: False
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] Compression: none
2026-04-11T19:54:28.447 [DEBUG] [Thread-175844] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:54:28.508 [DEBUG] [Thread-175844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:54:28.508 [DEBUG] [Thread-175844] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:54:28.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:54:28.509 [DEBUG] [Thread-175844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:54:28.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:54:28.563 [DEBUG] [Thread-175844] [transport.py] [_log()] userauth is OK
2026-04-11T19:54:28.564 [DEBUG] [Thread-175844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:54:28.564 [DEBUG] [Thread-175844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:54:28.564 [DEBUG] [Thread-175844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:54:28.564 [DEBUG] [Thread-175844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:54:28.583 [INFO] [Thread-175844] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:54:28.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:54:28.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:54:29.441 [DEBUG] [Thread-175844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:54:29.441 [DEBUG] [Thread-175844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:54:29.489 [DEBUG] [Thread-175844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:54:29.489 [DEBUG] [Thread-175844] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:54:29.499 [DEBUG] [Thread-175844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:54:29.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:54:29.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-04-11T19:54:29.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-04-11T19:54:29.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:54:29.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:54:29.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:54:29.535 [DEBUG] [Thread-175844] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:54:37.840 [DEBUG] [Thread-175846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:52.892 [DEBUG] [Thread-175847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:54:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:54:59.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:54:59.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-04-11T19:55:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 54, 31), 0.053195, 99.9419, 0.0, 17.6278, 11.9554, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:55:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:54:31
2026-04-11T19:55:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:55:01.370 [DEBUG] [Thread-175848] [transport.py] [_log()] starting thread (client mode): 0xae5153c0
2026-04-11T19:55:01.370 [DEBUG] [Thread-175848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:55:01.384 [DEBUG] [Thread-175848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:55:01.384 [INFO] [Thread-175848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] client lang: <none>
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] server lang: <none>
2026-04-11T19:55:01.387 [DEBUG] [Thread-175848] [transport.py] [_log()] kex follows: False
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] Compression: none
2026-04-11T19:55:01.388 [DEBUG] [Thread-175848] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:55:01.397 [DEBUG] [Thread-175848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:55:01.398 [DEBUG] [Thread-175848] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:55:01.398 [DEBUG] [Thread-175848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:55:01.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:55:01.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:55:01.400 [DEBUG] [Thread-175848] [transport.py] [_log()] userauth is OK
2026-04-11T19:55:01.400 [DEBUG] [Thread-175848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:55:01.400 [DEBUG] [Thread-175848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:55:01.400 [DEBUG] [Thread-175848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:55:01.400 [DEBUG] [Thread-175848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:55:01.423 [INFO] [Thread-175848] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:55:01.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:55:02.182 [DEBUG] [Thread-175848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:55:02.183 [DEBUG] [Thread-175848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:55:02.183 [DEBUG] [Thread-175848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:55:02.223 [DEBUG] [Thread-175848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:55:02.223 [DEBUG] [Thread-175848] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:55:02.227 [DEBUG] [Thread-175848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:55:02.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:55:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:55:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:55:02.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:55:02.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:55:02.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:55:02.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:55:02.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:55:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:55:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.746298 -999.00  +11.90  11.97     97  +11.50 1 3 1 3 1     0    0 0.34 -0.77 ----- 12.0 12.0 283.2 16.5 13.1 -0.6 12.9 -1.1 12.5 -1.0 12.9 -0.1
2026-04-11T19:55:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:55:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:55:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.746298
2026-04-11T19:55:02.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:55:02.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:55:02.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:55:02.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:55:02.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:55:02.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:54:31', tmtdew=0.053195, humidity=99.9419, cloud=0.0, wind=17.6278, temperature=11.9554, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:54:40.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:55:02.255 [DEBUG] [Thread-175848] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:55:02.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:55:02.348 [DEBUG] [Thread-175851] [transport.py] [_log()] starting thread (client mode): 0xb0fb54b0
2026-04-11T19:55:02.348 [DEBUG] [Thread-175851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:55:02.364 [DEBUG] [Thread-175851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:55:02.364 [INFO] [Thread-175851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:55:02.377 [DEBUG] [Thread-175851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:02.378 [DEBUG] [Thread-175851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] client lang: <none>
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] server lang: <none>
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] kex follows: False
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:55:02.379 [DEBUG] [Thread-175851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:55:02.380 [DEBUG] [Thread-175851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:55:02.380 [DEBUG] [Thread-175851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:55:02.380 [DEBUG] [Thread-175851] [transport.py] [_log()] Compression: none
2026-04-11T19:55:02.380 [DEBUG] [Thread-175851] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:55:02.434 [DEBUG] [Thread-175851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:55:02.435 [DEBUG] [Thread-175851] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:55:02.436 [DEBUG] [Thread-175851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:55:02.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:55:02.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:55:02.492 [DEBUG] [Thread-175851] [transport.py] [_log()] userauth is OK
2026-04-11T19:55:02.492 [DEBUG] [Thread-175851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:55:02.492 [DEBUG] [Thread-175851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:55:02.492 [DEBUG] [Thread-175851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:55:02.492 [DEBUG] [Thread-175851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:55:02.511 [INFO] [Thread-175851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:55:02.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:55:02.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:55:03.352 [DEBUG] [Thread-175851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:55:03.353 [DEBUG] [Thread-175851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:55:03.401 [DEBUG] [Thread-175851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:55:03.401 [DEBUG] [Thread-175851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:55:03.410 [DEBUG] [Thread-175851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:55:03.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:55: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')
2026-04-11T19:55:03.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:55:03.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:55:03.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:55:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:55:03.448 [DEBUG] [Thread-175851] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:55:07.928 [DEBUG] [Thread-175853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:55:09.516 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:55:09.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:55:22.971 [DEBUG] [Thread-175854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:55:27.712 [DEBUG] [Thread-175855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:55:33.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:55:33.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:55:33.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-04-11T19:55:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 55, 6), 0.05829, 99.9088, 0.0, 17.8571, 11.9057, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:55:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:55:06
2026-04-11T19:55:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:55:35.293 [DEBUG] [Thread-175856] [transport.py] [_log()] starting thread (client mode): 0xae516cb0
2026-04-11T19:55:35.293 [DEBUG] [Thread-175856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:55:35.314 [DEBUG] [Thread-175856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:55:35.314 [INFO] [Thread-175856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:35.315 [DEBUG] [Thread-175856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] client lang: <none>
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] server lang: <none>
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] kex follows: False
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] Compression: none
2026-04-11T19:55:35.316 [DEBUG] [Thread-175856] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:55:35.335 [DEBUG] [Thread-175856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:55:35.335 [DEBUG] [Thread-175856] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:55:35.336 [DEBUG] [Thread-175856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:55:35.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:55:35.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:55:35.338 [DEBUG] [Thread-175856] [transport.py] [_log()] userauth is OK
2026-04-11T19:55:35.339 [DEBUG] [Thread-175856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:55:35.339 [DEBUG] [Thread-175856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:55:35.339 [DEBUG] [Thread-175856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:55:35.339 [DEBUG] [Thread-175856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:55:35.362 [INFO] [Thread-175856] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:55:35.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:55:36.136 [DEBUG] [Thread-175856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:55:36.137 [DEBUG] [Thread-175856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:55:36.137 [DEBUG] [Thread-175856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:55:36.178 [DEBUG] [Thread-175856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:55:36.178 [DEBUG] [Thread-175856] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:55:36.181 [DEBUG] [Thread-175856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:55:36.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:55:36.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:55:36.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:55:36.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:55:36.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:55:36.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:55:36.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:55:36.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:55:36.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:55:36.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.746645 -999.00  +11.90  13.80     97  +11.50 1 3 1 3 1     0    0 0.35 -0.52 ----- 13.8 13.8 284.0 17.5 13.1 -0.7 12.9 -1.0 12.5 -1.3 12.9 -0.3
2026-04-11T19:55:36.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:55:36.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:55:36.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.746645
2026-04-11T19:55:36.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:55:36.210 [DEBUG] [Thread-175856] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:55:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:55:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:55:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:55:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:55:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:55:06', tmtdew=0.05829, humidity=99.9088, cloud=0.0, wind=17.8571, temperature=11.9057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:55:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:55:36.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:55:36.313 [DEBUG] [Thread-175859] [transport.py] [_log()] starting thread (client mode): 0xae5173a0
2026-04-11T19:55:36.313 [DEBUG] [Thread-175859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:55:36.328 [DEBUG] [Thread-175859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:55:36.328 [INFO] [Thread-175859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:55:36.335 [DEBUG] [Thread-175859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] client lang: <none>
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] server lang: <none>
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] kex follows: False
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] Compression: none
2026-04-11T19:55:36.336 [DEBUG] [Thread-175859] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:55:36.394 [DEBUG] [Thread-175859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:55:36.394 [DEBUG] [Thread-175859] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:55:36.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:55:36.396 [DEBUG] [Thread-175859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:55:36.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:55:36.451 [DEBUG] [Thread-175859] [transport.py] [_log()] userauth is OK
2026-04-11T19:55:36.451 [DEBUG] [Thread-175859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:55:36.451 [DEBUG] [Thread-175859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:55:36.451 [DEBUG] [Thread-175859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:55:36.451 [DEBUG] [Thread-175859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:55:36.472 [INFO] [Thread-175859] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:55:36.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:55:36.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:55:37.286 [DEBUG] [Thread-175859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:55:37.295 [DEBUG] [Thread-175859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:55:37.335 [DEBUG] [Thread-175859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:55:37.335 [DEBUG] [Thread-175859] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:55:37.344 [DEBUG] [Thread-175859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:55:37.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:55:37.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-04-11T19:55:37.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-04-11T19:55:37.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:55:37.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:55:37.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:55:37.378 [DEBUG] [Thread-175859] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:55:38.003 [DEBUG] [Thread-175861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:55:53.045 [DEBUG] [Thread-175862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:07.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:56:07.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:56:07.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-04-11T19:56:08.082 [DEBUG] [Thread-175863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 55, 42), 0.01651, 99.8176, 0.0, 16.4794, 12.4108, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:56:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:55:42
2026-04-11T19:56:09.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:56:09.360 [DEBUG] [Thread-175864] [transport.py] [_log()] starting thread (client mode): 0xb0f55f00
2026-04-11T19:56:09.360 [DEBUG] [Thread-175864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:56:09.372 [DEBUG] [Thread-175864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:56:09.372 [INFO] [Thread-175864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] client lang: <none>
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] server lang: <none>
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] kex follows: False
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] Compression: none
2026-04-11T19:56:09.374 [DEBUG] [Thread-175864] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:56:09.381 [DEBUG] [Thread-175864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:56:09.381 [DEBUG] [Thread-175864] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:56:09.381 [DEBUG] [Thread-175864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:56:09.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:56:09.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:56:09.382 [DEBUG] [Thread-175864] [transport.py] [_log()] userauth is OK
2026-04-11T19:56:09.382 [DEBUG] [Thread-175864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:56:09.382 [DEBUG] [Thread-175864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:56:09.382 [DEBUG] [Thread-175864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:56:09.382 [DEBUG] [Thread-175864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:56:09.393 [INFO] [Thread-175864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:56:09.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:56:09.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:09.723 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:10.219 [DEBUG] [Thread-175864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:56:10.220 [DEBUG] [Thread-175864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:56:10.220 [DEBUG] [Thread-175864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:56:10.261 [DEBUG] [Thread-175864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:56:10.261 [DEBUG] [Thread-175864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:56:10.265 [DEBUG] [Thread-175864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:56:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:56:10.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:56:10.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:56:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:56:10.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:56:10.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:56:10.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:56:10.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:56:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:56:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.746992 -999.00  +11.90  14.50     97  +11.60 1 3 1 3 1     0    0 0.36 -0.20 ----- 14.5 14.5 280.6 18.6 13.1 -0.8 12.9 -1.3 12.6 -0.8 12.9 -0.1
2026-04-11T19:56:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:56:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:56:10.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.746992
2026-04-11T19:56:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:56:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:56:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:56:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:56:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:56:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:55:42', tmtdew=0.01651, humidity=99.8176, cloud=0.0, wind=16.4794, temperature=12.4108, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:55:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:56:10.290 [DEBUG] [Thread-175864] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:56:10.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:56:10.398 [DEBUG] [Thread-175867] [transport.py] [_log()] starting thread (client mode): 0xb0f8cd30
2026-04-11T19:56:10.398 [DEBUG] [Thread-175867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:56:10.413 [DEBUG] [Thread-175867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:56:10.413 [INFO] [Thread-175867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:56:10.421 [DEBUG] [Thread-175867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:56:10.421 [DEBUG] [Thread-175867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:56:10.421 [DEBUG] [Thread-175867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] client lang: <none>
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] server lang: <none>
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] kex follows: False
2026-04-11T19:56:10.422 [DEBUG] [Thread-175867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:56:10.423 [DEBUG] [Thread-175867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:56:10.423 [DEBUG] [Thread-175867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:56:10.423 [DEBUG] [Thread-175867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:56:10.423 [DEBUG] [Thread-175867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:56:10.423 [DEBUG] [Thread-175867] [transport.py] [_log()] Compression: none
2026-04-11T19:56:10.423 [DEBUG] [Thread-175867] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:56:10.479 [DEBUG] [Thread-175867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:56:10.479 [DEBUG] [Thread-175867] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:56:10.480 [DEBUG] [Thread-175867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:56:10.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:56:10.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:56:10.535 [DEBUG] [Thread-175867] [transport.py] [_log()] userauth is OK
2026-04-11T19:56:10.536 [DEBUG] [Thread-175867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:56:10.536 [DEBUG] [Thread-175867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:56:10.536 [DEBUG] [Thread-175867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:56:10.536 [DEBUG] [Thread-175867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:56:10.558 [INFO] [Thread-175867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:56:10.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:56:10.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:56:11.374 [DEBUG] [Thread-175867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:56:11.375 [DEBUG] [Thread-175867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:56:11.423 [DEBUG] [Thread-175867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:56:11.423 [DEBUG] [Thread-175867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:56:11.432 [DEBUG] [Thread-175867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:56:11.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:56:11.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-04-11T19:56:11.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-04-11T19:56:11.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:56:11.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:56:11.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:56:11.469 [DEBUG] [Thread-175867] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:56:23.122 [DEBUG] [Thread-175869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:27.815 [DEBUG] [Thread-175870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:38.183 [DEBUG] [Thread-175871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:56:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:56:41.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:56:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:56:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 56, 17), 0.060745, 99.8922, 0.0, 14.5577, 12.0052, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:56:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:56:17
2026-04-11T19:56:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:56:43.327 [DEBUG] [Thread-175872] [transport.py] [_log()] starting thread (client mode): 0xb0f8f5b0
2026-04-11T19:56:43.328 [DEBUG] [Thread-175872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:56:43.348 [DEBUG] [Thread-175872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:56:43.349 [INFO] [Thread-175872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:56:43.352 [DEBUG] [Thread-175872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] client lang: <none>
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] server lang: <none>
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] kex follows: False
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] Compression: none
2026-04-11T19:56:43.353 [DEBUG] [Thread-175872] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:56:43.372 [DEBUG] [Thread-175872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:56:43.373 [DEBUG] [Thread-175872] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:56:43.374 [DEBUG] [Thread-175872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:56:43.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:56:43.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:56:43.376 [DEBUG] [Thread-175872] [transport.py] [_log()] userauth is OK
2026-04-11T19:56:43.377 [DEBUG] [Thread-175872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:56:43.377 [DEBUG] [Thread-175872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:56:43.377 [DEBUG] [Thread-175872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:56:43.377 [DEBUG] [Thread-175872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:56:43.418 [INFO] [Thread-175872] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:56:43.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:56:44.171 [DEBUG] [Thread-175872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:56:44.171 [DEBUG] [Thread-175872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:56:44.171 [DEBUG] [Thread-175872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:56:44.213 [DEBUG] [Thread-175872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:56:44.213 [DEBUG] [Thread-175872] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:56:44.217 [DEBUG] [Thread-175872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:56:44.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:56:44.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:56:44.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:56:44.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:56:44.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:56:44.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:56:44.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:56:44.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:56:44.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:56:44.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.747339 -999.00  +11.90  12.14     97  +11.60 1 3 1 3 1     0    0 0.36 0.02 ----- 12.1 12.1 290.2 15.7 13.1 -0.7 13.0 -1.1 12.5 -1.2 13.0 -0.2
2026-04-11T19:56:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:56:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:56:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.747339
2026-04-11T19:56:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:56:44.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:56:44.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:56:44.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:56:44.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:56:44.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:56:17', tmtdew=0.060745, humidity=99.8922, cloud=0.0, wind=14.5577, temperature=12.0052, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:56:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:56:44.250 [DEBUG] [Thread-175872] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:56:44.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:56:44.344 [DEBUG] [Thread-175875] [transport.py] [_log()] starting thread (client mode): 0xb0f8d120
2026-04-11T19:56:44.344 [DEBUG] [Thread-175875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:56:44.359 [DEBUG] [Thread-175875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:56:44.359 [INFO] [Thread-175875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:56:44.366 [DEBUG] [Thread-175875] [transport.py] [_log()] client lang: <none>
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] server lang: <none>
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] kex follows: False
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] Compression: none
2026-04-11T19:56:44.367 [DEBUG] [Thread-175875] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:56:44.423 [DEBUG] [Thread-175875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:56:44.424 [DEBUG] [Thread-175875] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:56:44.424 [DEBUG] [Thread-175875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:56:44.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:56:44.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:56:44.480 [DEBUG] [Thread-175875] [transport.py] [_log()] userauth is OK
2026-04-11T19:56:44.480 [DEBUG] [Thread-175875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:56:44.481 [DEBUG] [Thread-175875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:56:44.481 [DEBUG] [Thread-175875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:56:44.481 [DEBUG] [Thread-175875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:56:44.500 [INFO] [Thread-175875] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:56:44.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:56:44.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:56:45.342 [DEBUG] [Thread-175875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:56:45.342 [DEBUG] [Thread-175875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:56:45.390 [DEBUG] [Thread-175875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:56:45.390 [DEBUG] [Thread-175875] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:56:45.400 [DEBUG] [Thread-175875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:56:45.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:56:45.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-04-11T19:56:45.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-04-11T19:56:45.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:56:45.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:56:45.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:56:45.436 [DEBUG] [Thread-175875] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:56:53.220 [DEBUG] [Thread-175877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:08.271 [DEBUG] [Thread-175878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:09.928 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:09.930 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:57:15.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:57:15.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-04-11T19:57:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 56, 52), 0.0114, 99.8507, 0.0, 18.4198, 12.4772, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:57:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:56:52
2026-04-11T19:57:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:57:17.345 [DEBUG] [Thread-175879] [transport.py] [_log()] starting thread (client mode): 0xb0f8df30
2026-04-11T19:57:17.346 [DEBUG] [Thread-175879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:57:17.365 [DEBUG] [Thread-175879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:57:17.365 [INFO] [Thread-175879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:57:17.369 [DEBUG] [Thread-175879] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:57:17.374 [DEBUG] [Thread-175879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] client lang: <none>
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] server lang: <none>
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] kex follows: False
2026-04-11T19:57:17.375 [DEBUG] [Thread-175879] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:57:17.376 [DEBUG] [Thread-175879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:57:17.376 [DEBUG] [Thread-175879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:57:17.376 [DEBUG] [Thread-175879] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:57:17.376 [DEBUG] [Thread-175879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:57:17.376 [DEBUG] [Thread-175879] [transport.py] [_log()] Compression: none
2026-04-11T19:57:17.376 [DEBUG] [Thread-175879] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:57:17.394 [DEBUG] [Thread-175879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:57:17.394 [DEBUG] [Thread-175879] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:57:17.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:57:17.395 [DEBUG] [Thread-175879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:57:17.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:57:17.397 [DEBUG] [Thread-175879] [transport.py] [_log()] userauth is OK
2026-04-11T19:57:17.398 [DEBUG] [Thread-175879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:57:17.398 [DEBUG] [Thread-175879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:57:17.398 [DEBUG] [Thread-175879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:57:17.398 [DEBUG] [Thread-175879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:57:17.421 [INFO] [Thread-175879] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:57:17.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:57:18.219 [DEBUG] [Thread-175879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:57:18.219 [DEBUG] [Thread-175879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:57:18.219 [DEBUG] [Thread-175879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:57:18.260 [DEBUG] [Thread-175879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:57:18.260 [DEBUG] [Thread-175879] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:57:18.263 [DEBUG] [Thread-175879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:57:18.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:57:18.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:57:18.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:57:18.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:57:18.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:57:18.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:57:18.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:57:18.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:57:18.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:57:18.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.747687 -999.00  +12.00  12.91     97  +11.70 1 3 1 3 1     0    0 0.35 -0.14 ----- 12.9 12.9 286.2 14.1 13.2 -0.6 12.9 -0.8 12.5 -0.6 12.9 -0.1
2026-04-11T19:57:18.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:57:18.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:57:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.747687
2026-04-11T19:57:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:57:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:57:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:57:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:57:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:57:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:56:52', tmtdew=0.0114, humidity=99.8507, cloud=0.0, wind=18.4198, temperature=12.4772, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:56:40.157', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:57:18.289 [DEBUG] [Thread-175879] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:57:18.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:57:18.383 [DEBUG] [Thread-175882] [transport.py] [_log()] starting thread (client mode): 0xb0f8e2c0
2026-04-11T19:57:18.383 [DEBUG] [Thread-175882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:57:18.397 [DEBUG] [Thread-175882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:57:18.397 [INFO] [Thread-175882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:18.406 [DEBUG] [Thread-175882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] client lang: <none>
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] server lang: <none>
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] kex follows: False
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] Compression: none
2026-04-11T19:57:18.407 [DEBUG] [Thread-175882] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:57:18.468 [DEBUG] [Thread-175882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:57:18.468 [DEBUG] [Thread-175882] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:57:18.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:57:18.469 [DEBUG] [Thread-175882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:57:18.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:57:18.523 [DEBUG] [Thread-175882] [transport.py] [_log()] userauth is OK
2026-04-11T19:57:18.523 [DEBUG] [Thread-175882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:57:18.523 [DEBUG] [Thread-175882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:57:18.523 [DEBUG] [Thread-175882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:57:18.523 [DEBUG] [Thread-175882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:57:18.539 [INFO] [Thread-175882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:57:18.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:57:18.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:57:19.347 [DEBUG] [Thread-175882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:57:19.347 [DEBUG] [Thread-175882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:57:19.395 [DEBUG] [Thread-175882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:57:19.395 [DEBUG] [Thread-175882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:57:19.404 [DEBUG] [Thread-175882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:57:19.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:57:19.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-04-11T19:57:19.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-04-11T19:57:19.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:57:19.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:57:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:57:19.441 [DEBUG] [Thread-175882] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:57:23.309 [DEBUG] [Thread-175884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:27.894 [DEBUG] [Thread-175885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:38.361 [DEBUG] [Thread-175886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:49.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:57:49.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:57:49.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T19:57:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 57, 28), 0.055715, 99.9254, 0.0, 17.663, 11.972, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:57:50.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:57:28
2026-04-11T19:57:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:57:51.352 [DEBUG] [Thread-175887] [transport.py] [_log()] starting thread (client mode): 0xa79504c0
2026-04-11T19:57:51.352 [DEBUG] [Thread-175887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:57:51.372 [DEBUG] [Thread-175887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:57:51.372 [INFO] [Thread-175887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:57:51.375 [DEBUG] [Thread-175887] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:57:51.375 [DEBUG] [Thread-175887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:57:51.375 [DEBUG] [Thread-175887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:57:51.375 [DEBUG] [Thread-175887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:51.375 [DEBUG] [Thread-175887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:51.375 [DEBUG] [Thread-175887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] client lang: <none>
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] server lang: <none>
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] kex follows: False
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] Compression: none
2026-04-11T19:57:51.376 [DEBUG] [Thread-175887] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:57:51.396 [DEBUG] [Thread-175887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:57:51.396 [DEBUG] [Thread-175887] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:57:51.397 [DEBUG] [Thread-175887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:57:51.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:57:51.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:57:51.399 [DEBUG] [Thread-175887] [transport.py] [_log()] userauth is OK
2026-04-11T19:57:51.399 [DEBUG] [Thread-175887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:57:51.399 [DEBUG] [Thread-175887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:57:51.400 [DEBUG] [Thread-175887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:57:51.400 [DEBUG] [Thread-175887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:57:51.434 [INFO] [Thread-175887] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:57:51.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:57:52.207 [DEBUG] [Thread-175887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:57:52.208 [DEBUG] [Thread-175887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:57:52.208 [DEBUG] [Thread-175887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:57:52.248 [DEBUG] [Thread-175887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:57:52.248 [DEBUG] [Thread-175887] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:57:52.252 [DEBUG] [Thread-175887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:57:52.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:57:52.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:57:52.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:57:52.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:57:52.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:57:52.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:57:52.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:57:52.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:57:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:57:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.748034 -999.00  +11.90  12.62     97  +11.50 1 3 1 3 1     0    0 0.33 -0.64 ----- 12.6 12.6 290.4 19.3 13.2 -0.6 13.0 -1.2 12.5 -1.4 13.0 -0.3
2026-04-11T19:57:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:57:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:57:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.748034
2026-04-11T19:57:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:57:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:57:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:57:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:57:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:57:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:57:28', tmtdew=0.055715, humidity=99.9254, cloud=0.0, wind=17.663, temperature=11.972, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:57:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:57:52.279 [DEBUG] [Thread-175887] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:57: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-04-11T19:57:52.374 [DEBUG] [Thread-175890] [transport.py] [_log()] starting thread (client mode): 0xa7951de0
2026-04-11T19:57:52.374 [DEBUG] [Thread-175890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:57:52.389 [DEBUG] [Thread-175890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:57:52.389 [INFO] [Thread-175890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] client lang: <none>
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] server lang: <none>
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] kex follows: False
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] Compression: none
2026-04-11T19:57:52.396 [DEBUG] [Thread-175890] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:57:52.454 [DEBUG] [Thread-175890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:57:52.454 [DEBUG] [Thread-175890] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:57:52.454 [DEBUG] [Thread-175890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:57:52.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:57:52.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:57:52.511 [DEBUG] [Thread-175890] [transport.py] [_log()] userauth is OK
2026-04-11T19:57:52.511 [DEBUG] [Thread-175890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:57:52.511 [DEBUG] [Thread-175890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:57:52.511 [DEBUG] [Thread-175890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:57:52.511 [DEBUG] [Thread-175890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:57:52.525 [INFO] [Thread-175890] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:57:52.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:57:52.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:57:53.334 [DEBUG] [Thread-175890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:57:53.334 [DEBUG] [Thread-175890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:57:53.382 [DEBUG] [Thread-175890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:57:53.383 [DEBUG] [Thread-175890] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:57:53.392 [DEBUG] [Thread-175890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:57:53.394 [DEBUG] [Thread-175892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:57:53.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:57:53.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-04-11T19:57:53.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-04-11T19:57:53.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:57:53.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:57:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:57:53.427 [DEBUG] [Thread-175890] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:58:08.447 [DEBUG] [Thread-175893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:10.133 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:10.134 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:23.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:58:23.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:58:23.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-04-11T19:58:23.486 [DEBUG] [Thread-175894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:24.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 58, 4), 0.05574, 99.9254, 0.0, 15.9343, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:58:24.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:58:04
2026-04-11T19:58:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:58:25.253 [DEBUG] [Thread-175895] [transport.py] [_log()] starting thread (client mode): 0xa79500a0
2026-04-11T19:58:25.253 [DEBUG] [Thread-175895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:58:25.273 [DEBUG] [Thread-175895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:58:25.273 [INFO] [Thread-175895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:58:25.276 [DEBUG] [Thread-175895] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] client lang: <none>
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] server lang: <none>
2026-04-11T19:58:25.277 [DEBUG] [Thread-175895] [transport.py] [_log()] kex follows: False
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] Compression: none
2026-04-11T19:58:25.278 [DEBUG] [Thread-175895] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:58:25.298 [DEBUG] [Thread-175895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:58:25.299 [DEBUG] [Thread-175895] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:58:25.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:58:25.300 [DEBUG] [Thread-175895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:58:25.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:58:25.302 [DEBUG] [Thread-175895] [transport.py] [_log()] userauth is OK
2026-04-11T19:58:25.302 [DEBUG] [Thread-175895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:58:25.302 [DEBUG] [Thread-175895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:58:25.302 [DEBUG] [Thread-175895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:58:25.303 [DEBUG] [Thread-175895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:58:25.335 [INFO] [Thread-175895] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:58:25.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:58:26.098 [DEBUG] [Thread-175895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:58:26.098 [DEBUG] [Thread-175895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:58:26.099 [DEBUG] [Thread-175895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:58:26.138 [DEBUG] [Thread-175895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:58:26.139 [DEBUG] [Thread-175895] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:58:26.142 [DEBUG] [Thread-175895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:58:26.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:58:26.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:58:26.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:58:26.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:58:26.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:58:26.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:58:26.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:58:26.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:58:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:58:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.748381 -999.00  +11.90  14.52     97  +11.50 1 3 1 3 1     0    0 0.35 -0.35 ----- 14.5 14.5 285.4 16.7 13.1 -0.6 12.9 -0.9 12.6 -0.7 13.0 -0.2
2026-04-11T19:58:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:58:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:58:26.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.748381
2026-04-11T19:58:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:58:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:58:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:58:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:58:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:58:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:58:04', tmtdew=0.05574, humidity=99.9254, cloud=0.0, wind=15.9343, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:57:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:58:26.167 [DEBUG] [Thread-175895] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:58:26.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:58:26.261 [DEBUG] [Thread-175898] [transport.py] [_log()] starting thread (client mode): 0xa7952440
2026-04-11T19:58:26.261 [DEBUG] [Thread-175898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:58:26.275 [DEBUG] [Thread-175898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:58:26.276 [INFO] [Thread-175898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] client lang: <none>
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] server lang: <none>
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] kex follows: False
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:58:26.283 [DEBUG] [Thread-175898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:58:26.284 [DEBUG] [Thread-175898] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:58:26.284 [DEBUG] [Thread-175898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:58:26.284 [DEBUG] [Thread-175898] [transport.py] [_log()] Compression: none
2026-04-11T19:58:26.284 [DEBUG] [Thread-175898] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:58:26.344 [DEBUG] [Thread-175898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:58:26.345 [DEBUG] [Thread-175898] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:58:26.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:58:26.346 [DEBUG] [Thread-175898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:58:26.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:58:26.399 [DEBUG] [Thread-175898] [transport.py] [_log()] userauth is OK
2026-04-11T19:58:26.400 [DEBUG] [Thread-175898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:58:26.400 [DEBUG] [Thread-175898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:58:26.400 [DEBUG] [Thread-175898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:58:26.400 [DEBUG] [Thread-175898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:58:26.419 [INFO] [Thread-175898] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:58:26.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:58:26.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:58:27.239 [DEBUG] [Thread-175898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:58:27.239 [DEBUG] [Thread-175898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:58:27.287 [DEBUG] [Thread-175898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:58:27.288 [DEBUG] [Thread-175898] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:58:27.297 [DEBUG] [Thread-175898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:58:27.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:58:27.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-04-11T19:58:27.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-04-11T19:58:27.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:58:27.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:58:27.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:58:27.332 [DEBUG] [Thread-175898] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:58:27.980 [DEBUG] [Thread-175900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:38.526 [DEBUG] [Thread-175901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:53.576 [DEBUG] [Thread-175902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:58:57.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:58:57.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:58:57.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-04-11T19:58:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 58, 39), 0.00636, 99.8839, 0.0, 16.5499, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:58:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:58:39
2026-04-11T19:58:58.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:58:59.142 [DEBUG] [Thread-175903] [transport.py] [_log()] starting thread (client mode): 0xb0f8dd50
2026-04-11T19:58:59.143 [DEBUG] [Thread-175903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:58:59.162 [DEBUG] [Thread-175903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:58:59.162 [INFO] [Thread-175903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:58:59.163 [DEBUG] [Thread-175903] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] client lang: <none>
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] server lang: <none>
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] kex follows: False
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] Compression: none
2026-04-11T19:58:59.164 [DEBUG] [Thread-175903] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:58:59.172 [DEBUG] [Thread-175903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:58:59.172 [DEBUG] [Thread-175903] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:58:59.173 [DEBUG] [Thread-175903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:58:59.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:58:59.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:58:59.174 [DEBUG] [Thread-175903] [transport.py] [_log()] userauth is OK
2026-04-11T19:58:59.174 [DEBUG] [Thread-175903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:58:59.174 [DEBUG] [Thread-175903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:58:59.174 [DEBUG] [Thread-175903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:58:59.174 [DEBUG] [Thread-175903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:58:59.192 [INFO] [Thread-175903] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:58:59.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:58:59.952 [DEBUG] [Thread-175903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:58:59.952 [DEBUG] [Thread-175903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:58:59.953 [DEBUG] [Thread-175903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:58:59.993 [DEBUG] [Thread-175903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:58:59.993 [DEBUG] [Thread-175903] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:58:59.996 [DEBUG] [Thread-175903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:59:00.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:59:00.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:59:00.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:59:00.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:59:00.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:59:00.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:59:00.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:59:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:59:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:59:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.748728 -999.00  +11.90  13.11     97  +11.50 1 3 1 3 1     0    0 0.36 -0.03 ----- 13.1 13.1 280.9 18.2 13.1 -0.6 12.9 -1.1 12.5 -1.0 12.9 -0.2
2026-04-11T19:59:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:59:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:59:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.748728
2026-04-11T19:59:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:59:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:59:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:59:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:59:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:59:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:58:39', tmtdew=0.00636, humidity=99.8839, cloud=0.0, wind=16.5499, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:58:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:59:00.023 [DEBUG] [Thread-175903] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:59:00.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:59:00.117 [DEBUG] [Thread-175906] [transport.py] [_log()] starting thread (client mode): 0xae5f1900
2026-04-11T19:59:00.117 [DEBUG] [Thread-175906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:59:00.132 [DEBUG] [Thread-175906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:59:00.132 [INFO] [Thread-175906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:59:00.139 [DEBUG] [Thread-175906] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] client lang: <none>
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] server lang: <none>
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] kex follows: False
2026-04-11T19:59:00.140 [DEBUG] [Thread-175906] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:59:00.141 [DEBUG] [Thread-175906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:59:00.141 [DEBUG] [Thread-175906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:59:00.141 [DEBUG] [Thread-175906] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:59:00.141 [DEBUG] [Thread-175906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:59:00.141 [DEBUG] [Thread-175906] [transport.py] [_log()] Compression: none
2026-04-11T19:59:00.141 [DEBUG] [Thread-175906] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:59:00.199 [DEBUG] [Thread-175906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:59:00.200 [DEBUG] [Thread-175906] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:59:00.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:59:00.201 [DEBUG] [Thread-175906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:59:00.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:59:00.256 [DEBUG] [Thread-175906] [transport.py] [_log()] userauth is OK
2026-04-11T19:59:00.256 [DEBUG] [Thread-175906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:59:00.256 [DEBUG] [Thread-175906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:59:00.256 [DEBUG] [Thread-175906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:59:00.256 [DEBUG] [Thread-175906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:59:00.276 [INFO] [Thread-175906] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:59:00.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:59:00.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:59:01.144 [DEBUG] [Thread-175906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:59:01.145 [DEBUG] [Thread-175906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:59:01.194 [DEBUG] [Thread-175906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:59:01.194 [DEBUG] [Thread-175906] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:59:01.204 [DEBUG] [Thread-175906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:59:01.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:59:01.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-04-11T19:59:01.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-04-11T19:59:01.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:59:01.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:59:01.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:59:01.241 [DEBUG] [Thread-175906] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:59:08.612 [DEBUG] [Thread-175908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:59:10.338 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:59:10.339 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:59:23.663 [DEBUG] [Thread-175909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:59:28.070 [DEBUG] [Thread-175910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:59:31.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T19:59:31.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T19:59:31.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-04-11T19:59:32.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 59, 14), 0.05067, 99.9585, 0.0, 13.2869, 11.9554, 2, 2, 2, 2, 0, 0),)
2026-04-11T19:59:32.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:59:14
2026-04-11T19:59:32.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T19:59:33.054 [DEBUG] [Thread-175911] [transport.py] [_log()] starting thread (client mode): 0xb0f8e4d0
2026-04-11T19:59:33.054 [DEBUG] [Thread-175911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:59:33.068 [DEBUG] [Thread-175911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T19:59:33.068 [INFO] [Thread-175911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] client lang: <none>
2026-04-11T19:59:33.070 [DEBUG] [Thread-175911] [transport.py] [_log()] server lang: <none>
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] kex follows: False
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] Compression: none
2026-04-11T19:59:33.071 [DEBUG] [Thread-175911] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:59:33.082 [DEBUG] [Thread-175911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:59:33.082 [DEBUG] [Thread-175911] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:59:33.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T19:59:33.083 [DEBUG] [Thread-175911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T19:59:33.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:59:33.085 [DEBUG] [Thread-175911] [transport.py] [_log()] userauth is OK
2026-04-11T19:59:33.085 [DEBUG] [Thread-175911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:59:33.086 [DEBUG] [Thread-175911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:59:33.086 [DEBUG] [Thread-175911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T19:59:33.086 [DEBUG] [Thread-175911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:59:33.106 [INFO] [Thread-175911] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:59:33.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:59:33.913 [DEBUG] [Thread-175911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:59:33.913 [DEBUG] [Thread-175911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:59:33.913 [DEBUG] [Thread-175911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T19:59:33.954 [DEBUG] [Thread-175911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:59:33.954 [DEBUG] [Thread-175911] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:59:33.958 [DEBUG] [Thread-175911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:59:33.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:59:33.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T19:59:33.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T19:59:33.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T19:59:33.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:59:33.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T19:59:33.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:59:33.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:59:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T19:59:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.749423 -999.00  +11.80  11.43     97  +11.50 1 3 1 3 1     0    0 0.38 0.29 ----- 11.4 11.4 284.0 17.9 13.1 -0.5 13.0 -0.8 12.6 -1.0 13.0 -0.2
2026-04-11T19:59:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T19:59:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T19:59:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.749423
2026-04-11T19:59:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T19:59:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T19:59:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T19:59:33.985 [DEBUG] [Thread-175911] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:59:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T19:59:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T19:59:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:59:14', tmtdew=0.05067, humidity=99.9585, cloud=0.0, wind=13.2869, temperature=11.9554, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:59:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T19:59:34.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T19:59:34.081 [DEBUG] [Thread-175914] [transport.py] [_log()] starting thread (client mode): 0xa7950ca0
2026-04-11T19:59:34.081 [DEBUG] [Thread-175914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T19:59:34.096 [DEBUG] [Thread-175914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T19:59:34.097 [INFO] [Thread-175914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T19:59:34.104 [DEBUG] [Thread-175914] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] client lang: <none>
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] server lang: <none>
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] kex follows: False
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] Compression: none
2026-04-11T19:59:34.105 [DEBUG] [Thread-175914] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T19:59:34.164 [DEBUG] [Thread-175914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T19:59:34.165 [DEBUG] [Thread-175914] [transport.py] [_log()] Switch to new keys ...
2026-04-11T19:59:34.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T19:59:34.166 [DEBUG] [Thread-175914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T19:59:34.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T19:59:34.224 [DEBUG] [Thread-175914] [transport.py] [_log()] userauth is OK
2026-04-11T19:59:34.224 [DEBUG] [Thread-175914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T19:59:34.224 [DEBUG] [Thread-175914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T19:59:34.224 [DEBUG] [Thread-175914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T19:59:34.224 [DEBUG] [Thread-175914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T19:59:34.243 [INFO] [Thread-175914] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T19:59:34.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T19:59:34.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T19:59:35.066 [DEBUG] [Thread-175914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T19:59:35.067 [DEBUG] [Thread-175914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T19:59:35.114 [DEBUG] [Thread-175914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T19:59:35.114 [DEBUG] [Thread-175914] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T19:59:35.124 [DEBUG] [Thread-175914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T19:59:35.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T19:59:35.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-04-11T19:59:35.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T19:59:35.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T19:59:35.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T19:59:35.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T19:59:35.161 [DEBUG] [Thread-175914] [transport.py] [_log()] EOF in transport thread
2026-04-11T19:59:38.699 [DEBUG] [Thread-175916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T19:59:53.749 [DEBUG] [Thread-175917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:00:05.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:00:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:00:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 19, 59, 50), 0.00636, 99.8839, 0.0, 14.9976, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:00:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 19:59:50
2026-04-11T20:00:06.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:00:07.001 [DEBUG] [Thread-175918] [transport.py] [_log()] starting thread (client mode): 0xae518af0
2026-04-11T20:00:07.001 [DEBUG] [Thread-175918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:00:07.022 [DEBUG] [Thread-175918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:00:07.022 [INFO] [Thread-175918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] client lang: <none>
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] server lang: <none>
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] kex follows: False
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] Compression: none
2026-04-11T20:00:07.025 [DEBUG] [Thread-175918] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:00:07.041 [DEBUG] [Thread-175918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:00:07.042 [DEBUG] [Thread-175918] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:00:07.043 [DEBUG] [Thread-175918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:00:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:00:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:00:07.044 [DEBUG] [Thread-175918] [transport.py] [_log()] userauth is OK
2026-04-11T20:00:07.044 [DEBUG] [Thread-175918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:00:07.045 [DEBUG] [Thread-175918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:00:07.045 [DEBUG] [Thread-175918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:00:07.045 [DEBUG] [Thread-175918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:00:07.069 [INFO] [Thread-175918] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:00:07.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:00:08.078 [DEBUG] [Thread-175918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:00:08.078 [DEBUG] [Thread-175918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:00:08.078 [DEBUG] [Thread-175918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:00:08.119 [DEBUG] [Thread-175918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:00:08.120 [DEBUG] [Thread-175918] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:00:08.122 [DEBUG] [Thread-175918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:00:08.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:00:08.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:00:08.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:00:08.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:00:08.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:00:08.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:00:08.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:00:08.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:00:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:00:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.749770 -999.00  +11.90  14.26     97  +11.50 1 3 1 3 1     0    0 0.39 0.70 ----- 14.3 14.3 274.0 15.6 13.1 -0.7 12.9 -0.8 12.5 -0.4 12.9 -0.1
2026-04-11T20:00:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:00:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:00:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.749770
2026-04-11T20:00:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:00:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:00:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:00:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:00:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:00:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T19:59:50', tmtdew=0.00636, humidity=99.8839, cloud=0.0, wind=14.9976, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T17:59:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:00:08.182 [DEBUG] [Thread-175918] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:00:08.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:00:08.276 [DEBUG] [Thread-175921] [transport.py] [_log()] starting thread (client mode): 0xa7951090
2026-04-11T20:00:08.276 [DEBUG] [Thread-175921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:00:08.293 [DEBUG] [Thread-175921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:00:08.293 [INFO] [Thread-175921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:00:08.300 [DEBUG] [Thread-175921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] client lang: <none>
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] server lang: <none>
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] kex follows: False
2026-04-11T20:00:08.301 [DEBUG] [Thread-175921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:00:08.302 [DEBUG] [Thread-175921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:00:08.302 [DEBUG] [Thread-175921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:00:08.302 [DEBUG] [Thread-175921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:00:08.302 [DEBUG] [Thread-175921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:00:08.302 [DEBUG] [Thread-175921] [transport.py] [_log()] Compression: none
2026-04-11T20:00:08.302 [DEBUG] [Thread-175921] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:00:08.359 [DEBUG] [Thread-175921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:00:08.360 [DEBUG] [Thread-175921] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:00:08.360 [DEBUG] [Thread-175921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:00:08.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:00:08.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:00:08.415 [DEBUG] [Thread-175921] [transport.py] [_log()] userauth is OK
2026-04-11T20:00:08.416 [DEBUG] [Thread-175921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:00:08.416 [DEBUG] [Thread-175921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:00:08.416 [DEBUG] [Thread-175921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:00:08.416 [DEBUG] [Thread-175921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:00:08.435 [INFO] [Thread-175921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:00:08.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:00:08.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:00:08.785 [DEBUG] [Thread-175923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:09.273 [DEBUG] [Thread-175921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:00:09.274 [DEBUG] [Thread-175921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:00:09.322 [DEBUG] [Thread-175921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:00:09.322 [DEBUG] [Thread-175921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:00:09.332 [DEBUG] [Thread-175921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:00:09.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:00:09.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-04-11T20:00: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') -> 00000000
2026-04-11T20:00:09.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:00:09.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:00:09.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:00:09.368 [DEBUG] [Thread-175921] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:00:10.542 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:10.542 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:23.848 [DEBUG] [Thread-175924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:28.166 [DEBUG] [Thread-175925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:38.886 [DEBUG] [Thread-175926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:00:39.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:00:39.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:00:39.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:00:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 0, 26), 0.055725, 99.9254, 0.0, 15.6337, 12.0054, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:00:40.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:00:26
2026-04-11T20:00:41.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:00:41.203 [DEBUG] [Thread-175927] [transport.py] [_log()] starting thread (client mode): 0xae5f3bb0
2026-04-11T20:00:41.203 [DEBUG] [Thread-175927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:00:41.224 [DEBUG] [Thread-175927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:00:41.224 [INFO] [Thread-175927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:00:41.227 [DEBUG] [Thread-175927] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:00:41.227 [DEBUG] [Thread-175927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] client lang: <none>
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] server lang: <none>
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] kex follows: False
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] Compression: none
2026-04-11T20:00:41.228 [DEBUG] [Thread-175927] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:00:41.238 [DEBUG] [Thread-175927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:00:41.238 [DEBUG] [Thread-175927] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:00:41.239 [DEBUG] [Thread-175927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:00:41.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:00:41.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:00:41.242 [DEBUG] [Thread-175927] [transport.py] [_log()] userauth is OK
2026-04-11T20:00:41.242 [DEBUG] [Thread-175927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:00:41.242 [DEBUG] [Thread-175927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:00:41.242 [DEBUG] [Thread-175927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:00:41.242 [DEBUG] [Thread-175927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:00:41.276 [INFO] [Thread-175927] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:00:41.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:00:42.080 [DEBUG] [Thread-175927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:00:42.080 [DEBUG] [Thread-175927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:00:42.080 [DEBUG] [Thread-175927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:00:42.122 [DEBUG] [Thread-175927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:00:42.122 [DEBUG] [Thread-175927] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:00:42.126 [DEBUG] [Thread-175927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:00:42.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:00:42.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:00:42.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:00:42.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:00:42.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:00:42.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:00:42.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:00:42.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:00:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:00:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.750117 -999.00  +11.90  11.52     97  +11.60 1 3 1 3 1     0    0 0.39 0.91 ----- 11.5 11.5 283.6 15.6 13.1 -0.7 12.9 -0.9 12.5 -0.3 12.9 -0.1
2026-04-11T20:00:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:00:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:00:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.750117
2026-04-11T20:00:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:00:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:00:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:00:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:00:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:00:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:00:26', tmtdew=0.055725, humidity=99.9254, cloud=0.0, wind=15.6337, temperature=12.0054, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:00:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:00:42.160 [DEBUG] [Thread-175927] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:00:42.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:00:42.254 [DEBUG] [Thread-175930] [transport.py] [_log()] starting thread (client mode): 0xae5f0940
2026-04-11T20:00:42.254 [DEBUG] [Thread-175930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:00:42.268 [DEBUG] [Thread-175930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:00:42.268 [INFO] [Thread-175930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:00:42.276 [DEBUG] [Thread-175930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:00:42.277 [DEBUG] [Thread-175930] [transport.py] [_log()] client lang: <none>
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] server lang: <none>
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] kex follows: False
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] Compression: none
2026-04-11T20:00:42.278 [DEBUG] [Thread-175930] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:00:42.336 [DEBUG] [Thread-175930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:00:42.336 [DEBUG] [Thread-175930] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:00:42.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:00:42.337 [DEBUG] [Thread-175930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:00:42.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:00:42.392 [DEBUG] [Thread-175930] [transport.py] [_log()] userauth is OK
2026-04-11T20:00:42.392 [DEBUG] [Thread-175930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:00:42.392 [DEBUG] [Thread-175930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:00:42.392 [DEBUG] [Thread-175930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:00:42.392 [DEBUG] [Thread-175930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:00:42.409 [INFO] [Thread-175930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:00:42.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:00:42.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:00:43.262 [DEBUG] [Thread-175930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:00:43.262 [DEBUG] [Thread-175930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:00:43.310 [DEBUG] [Thread-175930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:00:43.310 [DEBUG] [Thread-175930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:00:43.319 [DEBUG] [Thread-175930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:00:43.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:00:43.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:00:43.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-04-11T20:00:43.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:00:43.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:00:43.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:00:43.356 [DEBUG] [Thread-175930] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:00:53.924 [DEBUG] [Thread-175932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:08.975 [DEBUG] [Thread-175933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:10.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:10.747 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:01:13.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:01:13.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-04-11T20:01:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 1, 1), 0.053235, 99.9419, 0.0, 16.2688, 11.9557, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:01:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:01:01
2026-04-11T20:01:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:01:15.189 [DEBUG] [Thread-175934] [transport.py] [_log()] starting thread (client mode): 0xae519f30
2026-04-11T20:01:15.189 [DEBUG] [Thread-175934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:01:15.210 [DEBUG] [Thread-175934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:01:15.211 [INFO] [Thread-175934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] client lang: <none>
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] server lang: <none>
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] kex follows: False
2026-04-11T20:01:15.214 [DEBUG] [Thread-175934] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:01:15.215 [DEBUG] [Thread-175934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:01:15.215 [DEBUG] [Thread-175934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:01:15.215 [DEBUG] [Thread-175934] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:01:15.215 [DEBUG] [Thread-175934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:01:15.215 [DEBUG] [Thread-175934] [transport.py] [_log()] Compression: none
2026-04-11T20:01:15.215 [DEBUG] [Thread-175934] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:01:15.232 [DEBUG] [Thread-175934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:01:15.232 [DEBUG] [Thread-175934] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:01:15.233 [DEBUG] [Thread-175934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:01:15.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:01:15.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:01:15.235 [DEBUG] [Thread-175934] [transport.py] [_log()] userauth is OK
2026-04-11T20:01:15.235 [DEBUG] [Thread-175934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:01:15.235 [DEBUG] [Thread-175934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:01:15.236 [DEBUG] [Thread-175934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:01:15.236 [DEBUG] [Thread-175934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:01:15.259 [INFO] [Thread-175934] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:01:15.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:01:16.049 [DEBUG] [Thread-175934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:01:16.050 [DEBUG] [Thread-175934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:01:16.050 [DEBUG] [Thread-175934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:01:16.091 [DEBUG] [Thread-175934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:01:16.091 [DEBUG] [Thread-175934] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:01:16.093 [DEBUG] [Thread-175934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:01:16.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:01:16.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:01:16.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:01:16.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:01:16.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:01:16.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:01:16.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:01:16.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:01:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:01:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.750464 -999.00  +11.90   9.36     97  +11.60 1 3 1 3 1     0    0 0.40 1.16 ----- 9.4 9.4 280.0 15.0 13.2 -0.5 13.0 -0.8 12.5 -0.4 13.0 -0.3
2026-04-11T20:01:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:01:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:01:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.750464
2026-04-11T20:01:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:01:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:01:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:01:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:01:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:01:16.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:01:01', tmtdew=0.053235, humidity=99.9419, cloud=0.0, wind=16.2688, temperature=11.9557, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:00:40.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:01:16.119 [DEBUG] [Thread-175934] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:01:16.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:01:16.216 [DEBUG] [Thread-175937] [transport.py] [_log()] starting thread (client mode): 0xae51a470
2026-04-11T20:01:16.216 [DEBUG] [Thread-175937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:01:16.231 [DEBUG] [Thread-175937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:01:16.231 [INFO] [Thread-175937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:01:16.240 [DEBUG] [Thread-175937] [transport.py] [_log()] client lang: <none>
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] server lang: <none>
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] kex follows: False
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] Compression: none
2026-04-11T20:01:16.241 [DEBUG] [Thread-175937] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:01:16.299 [DEBUG] [Thread-175937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:01:16.300 [DEBUG] [Thread-175937] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:01:16.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:01:16.301 [DEBUG] [Thread-175937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:01:16.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:01:16.355 [DEBUG] [Thread-175937] [transport.py] [_log()] userauth is OK
2026-04-11T20:01:16.355 [DEBUG] [Thread-175937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:01:16.356 [DEBUG] [Thread-175937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:01:16.356 [DEBUG] [Thread-175937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:01:16.356 [DEBUG] [Thread-175937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:01:16.379 [INFO] [Thread-175937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:01:16.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:01:16.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:01:17.252 [DEBUG] [Thread-175937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:01:17.252 [DEBUG] [Thread-175937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:01:17.300 [DEBUG] [Thread-175937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:01:17.300 [DEBUG] [Thread-175937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:01:17.310 [DEBUG] [Thread-175937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:01:17.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:01:17.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-04-11T20:01:17.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-04-11T20:01:17.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:01:17.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:01:17.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:01:17.348 [DEBUG] [Thread-175937] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:01:24.011 [DEBUG] [Thread-175939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:28.243 [DEBUG] [Thread-175940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:39.071 [DEBUG] [Thread-175941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:01:47.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:01:47.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:01:47.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-04-11T20:01:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 1, 36), 0.00644, 99.8839, 0.0, 16.4441, 12.3445, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:01:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:01:36
2026-04-11T20:01:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:01:49.202 [DEBUG] [Thread-175942] [transport.py] [_log()] starting thread (client mode): 0xae5a7820
2026-04-11T20:01:49.202 [DEBUG] [Thread-175942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:01:49.223 [DEBUG] [Thread-175942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:01:49.223 [INFO] [Thread-175942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] client lang: <none>
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] server lang: <none>
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] kex follows: False
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:01:49.225 [DEBUG] [Thread-175942] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:01:49.226 [DEBUG] [Thread-175942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:01:49.226 [DEBUG] [Thread-175942] [transport.py] [_log()] Compression: none
2026-04-11T20:01:49.226 [DEBUG] [Thread-175942] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:01:49.247 [DEBUG] [Thread-175942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:01:49.248 [DEBUG] [Thread-175942] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:01:49.248 [DEBUG] [Thread-175942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:01:49.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:01:49.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:01:49.250 [DEBUG] [Thread-175942] [transport.py] [_log()] userauth is OK
2026-04-11T20:01:49.251 [DEBUG] [Thread-175942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:01:49.251 [DEBUG] [Thread-175942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:01:49.251 [DEBUG] [Thread-175942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:01:49.251 [DEBUG] [Thread-175942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:01:49.274 [INFO] [Thread-175942] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:01:49.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:01:50.052 [DEBUG] [Thread-175942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:01:50.052 [DEBUG] [Thread-175942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:01:50.053 [DEBUG] [Thread-175942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:01:50.093 [DEBUG] [Thread-175942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:01:50.094 [DEBUG] [Thread-175942] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:01:50.097 [DEBUG] [Thread-175942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:01:50.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:01:50.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:01:50.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:01:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:01:50.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:01:50.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:01:50.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:01:50.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:01:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:01:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.750811 -999.00  +11.90  11.66     97  +11.50 1 3 1 3 1     0    0 0.39 1.13 ----- 11.7 11.7 279.6 17.5 13.2 -0.7 12.9 -1.1 12.5 -0.9 12.9 -0.1
2026-04-11T20:01:50.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:01:50.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:01:50.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.750811
2026-04-11T20:01:50.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:01:50.127 [DEBUG] [Thread-175942] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:01:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:01:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:01:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:01:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:01:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:01:36', tmtdew=0.00644, humidity=99.8839, cloud=0.0, wind=16.4441, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:01:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:01:50.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:01:50.223 [DEBUG] [Thread-175945] [transport.py] [_log()] starting thread (client mode): 0xae509570
2026-04-11T20:01:50.223 [DEBUG] [Thread-175945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:01:50.238 [DEBUG] [Thread-175945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:01:50.239 [INFO] [Thread-175945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:01:50.246 [DEBUG] [Thread-175945] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:01:50.247 [DEBUG] [Thread-175945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] client lang: <none>
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] server lang: <none>
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] kex follows: False
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] Compression: none
2026-04-11T20:01:50.248 [DEBUG] [Thread-175945] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:01:50.302 [DEBUG] [Thread-175945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:01:50.302 [DEBUG] [Thread-175945] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:01:50.302 [DEBUG] [Thread-175945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:01:50.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:01:50.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:01:50.360 [DEBUG] [Thread-175945] [transport.py] [_log()] userauth is OK
2026-04-11T20:01:50.360 [DEBUG] [Thread-175945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:01:50.360 [DEBUG] [Thread-175945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:01:50.360 [DEBUG] [Thread-175945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:01:50.360 [DEBUG] [Thread-175945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:01:50.379 [INFO] [Thread-175945] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:01: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-04-11T20:01:50.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:01:51.279 [DEBUG] [Thread-175945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:01:51.279 [DEBUG] [Thread-175945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:01:51.327 [DEBUG] [Thread-175945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:01:51.327 [DEBUG] [Thread-175945] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:01:51.337 [DEBUG] [Thread-175945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:01:51.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:01:51.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-04-11T20:01:51.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-04-11T20:01:51.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:01:51.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:01:51.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:01:51.374 [DEBUG] [Thread-175945] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:01:54.110 [DEBUG] [Thread-175947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:09.159 [DEBUG] [Thread-175948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:10.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:10.952 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:21.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:02:21.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:02:21.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:02:22.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 2, 12), 0.050655, 99.9585, 0.0, 13.3927, 11.972, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:02:22.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:02:12
2026-04-11T20:02:23.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:02:23.386 [DEBUG] [Thread-175949] [transport.py] [_log()] starting thread (client mode): 0xae509d20
2026-04-11T20:02:23.386 [DEBUG] [Thread-175949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:02:23.405 [DEBUG] [Thread-175949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:02:23.406 [INFO] [Thread-175949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:02:23.408 [DEBUG] [Thread-175949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] client lang: <none>
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] server lang: <none>
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] kex follows: False
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] Compression: none
2026-04-11T20:02:23.409 [DEBUG] [Thread-175949] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:02:23.426 [DEBUG] [Thread-175949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:02:23.426 [DEBUG] [Thread-175949] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:02:23.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:02:23.427 [DEBUG] [Thread-175949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:02:23.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:02:23.430 [DEBUG] [Thread-175949] [transport.py] [_log()] userauth is OK
2026-04-11T20:02:23.430 [DEBUG] [Thread-175949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:02:23.430 [DEBUG] [Thread-175949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:02:23.430 [DEBUG] [Thread-175949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:02:23.430 [DEBUG] [Thread-175949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:02:23.448 [INFO] [Thread-175949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:02:23.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:02:24.200 [DEBUG] [Thread-175951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:24.278 [DEBUG] [Thread-175949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:02:24.279 [DEBUG] [Thread-175949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:02:24.279 [DEBUG] [Thread-175949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:02:24.319 [DEBUG] [Thread-175949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:02:24.319 [DEBUG] [Thread-175949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:02:24.323 [DEBUG] [Thread-175949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:02:24.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:02:24.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:02:24.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:02:24.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:02:24.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:02:24.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:02:24.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:02:24.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:02:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:02:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.751159 -999.00  +11.90  13.18     97  +11.50 1 3 1 3 1     0    0 0.40 1.25 ----- 13.2 13.2 273.0 19.4 -999.0 -999.0 13.0 -1.3 12.5 -1.2 12.9 -0.3
2026-04-11T20:02:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:02:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:02:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.751159
2026-04-11T20:02:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:02:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:02:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:02:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:02:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:02:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:02:12', tmtdew=0.050655, humidity=99.9585, cloud=0.0, wind=13.3927, temperature=11.972, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:01:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:02:24.353 [DEBUG] [Thread-175949] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:02:24.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:02:24.446 [DEBUG] [Thread-175953] [transport.py] [_log()] starting thread (client mode): 0xb0f8e9e0
2026-04-11T20:02:24.446 [DEBUG] [Thread-175953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:02:24.463 [DEBUG] [Thread-175953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:02:24.463 [INFO] [Thread-175953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:02:24.471 [DEBUG] [Thread-175953] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:02:24.471 [DEBUG] [Thread-175953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:02:24.471 [DEBUG] [Thread-175953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:02:24.471 [DEBUG] [Thread-175953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] client lang: <none>
2026-04-11T20:02:24.472 [DEBUG] [Thread-175953] [transport.py] [_log()] server lang: <none>
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] kex follows: False
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:02:24.473 [DEBUG] [Thread-175953] [transport.py] [_log()] Compression: none
2026-04-11T20:02:24.474 [DEBUG] [Thread-175953] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:02:24.532 [DEBUG] [Thread-175953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:02:24.532 [DEBUG] [Thread-175953] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:02:24.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:02:24.534 [DEBUG] [Thread-175953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:02:24.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:02:24.591 [DEBUG] [Thread-175953] [transport.py] [_log()] userauth is OK
2026-04-11T20:02:24.592 [DEBUG] [Thread-175953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:02:24.592 [DEBUG] [Thread-175953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:02:24.592 [DEBUG] [Thread-175953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:02:24.592 [DEBUG] [Thread-175953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:02:24.615 [INFO] [Thread-175953] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:02:24.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:02:24.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:02:25.451 [DEBUG] [Thread-175953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:02:25.451 [DEBUG] [Thread-175953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:02:25.499 [DEBUG] [Thread-175953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:02:25.499 [DEBUG] [Thread-175953] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:02:25.508 [DEBUG] [Thread-175953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:02:25.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:02:25.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:02:25.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:02:25.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:02:25.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:02:25.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:02:25.547 [DEBUG] [Thread-175953] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:02:28.310 [DEBUG] [Thread-175955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:39.236 [DEBUG] [Thread-175956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:54.298 [DEBUG] [Thread-175957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:02:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:02:55.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:02:55.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:02:56.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 2, 48), 0.00131, 99.9171, 0.0, 16.8674, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:02:56.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:02:48
2026-04-11T20:02:57.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:02:57.407 [DEBUG] [Thread-175958] [transport.py] [_log()] starting thread (client mode): 0xa79526b0
2026-04-11T20:02:57.407 [DEBUG] [Thread-175958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:02:57.427 [DEBUG] [Thread-175958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:02:57.428 [INFO] [Thread-175958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:02:57.430 [DEBUG] [Thread-175958] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] client lang: <none>
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] server lang: <none>
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] kex follows: False
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:02:57.431 [DEBUG] [Thread-175958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:02:57.432 [DEBUG] [Thread-175958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:02:57.432 [DEBUG] [Thread-175958] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:02:57.432 [DEBUG] [Thread-175958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:02:57.432 [DEBUG] [Thread-175958] [transport.py] [_log()] Compression: none
2026-04-11T20:02:57.432 [DEBUG] [Thread-175958] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:02:57.450 [DEBUG] [Thread-175958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:02:57.450 [DEBUG] [Thread-175958] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:02:57.450 [DEBUG] [Thread-175958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:02:57.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:02:57.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:02:57.493 [DEBUG] [Thread-175958] [transport.py] [_log()] userauth is OK
2026-04-11T20:02:57.493 [DEBUG] [Thread-175958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:02:57.493 [DEBUG] [Thread-175958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:02:57.493 [DEBUG] [Thread-175958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:02:57.493 [DEBUG] [Thread-175958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:02:57.531 [INFO] [Thread-175958] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:02:57.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:02:58.325 [DEBUG] [Thread-175958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:02:58.325 [DEBUG] [Thread-175958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:02:58.326 [DEBUG] [Thread-175958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:02:58.366 [DEBUG] [Thread-175958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:02:58.366 [DEBUG] [Thread-175958] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:02:58.370 [DEBUG] [Thread-175958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:02:58.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:02:58.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:02:58.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:02:58.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:02:58.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:02:58.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:02:58.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:02:58.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:02:58.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:02:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.751506 -999.00  +11.90  13.81     97  +11.50 1 3 1 3 1     0    0 0.40 1.20 ----- 13.8 13.8 268.5 16.4 13.2 -0.6 12.9 -1.1 12.5 -0.6 12.9 -0.2
2026-04-11T20:02:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:02:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:02:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.751506
2026-04-11T20:02:58.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:02:58.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:02:58.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:02:58.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:02:58.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:02:58.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:02:48', tmtdew=0.00131, humidity=99.9171, cloud=0.0, wind=16.8674, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:02:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:02:58.399 [DEBUG] [Thread-175958] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:02:58.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:02:58.495 [DEBUG] [Thread-175961] [transport.py] [_log()] starting thread (client mode): 0xae515cc0
2026-04-11T20:02:58.495 [DEBUG] [Thread-175961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:02:58.510 [DEBUG] [Thread-175961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:02:58.510 [INFO] [Thread-175961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] client lang: <none>
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] server lang: <none>
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] kex follows: False
2026-04-11T20:02:58.518 [DEBUG] [Thread-175961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:02:58.519 [DEBUG] [Thread-175961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:02:58.519 [DEBUG] [Thread-175961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:02:58.519 [DEBUG] [Thread-175961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:02:58.519 [DEBUG] [Thread-175961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:02:58.519 [DEBUG] [Thread-175961] [transport.py] [_log()] Compression: none
2026-04-11T20:02:58.519 [DEBUG] [Thread-175961] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:02:58.576 [DEBUG] [Thread-175961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:02:58.577 [DEBUG] [Thread-175961] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:02:58.577 [DEBUG] [Thread-175961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:02:58.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:02:58.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:02:58.635 [DEBUG] [Thread-175961] [transport.py] [_log()] userauth is OK
2026-04-11T20:02:58.636 [DEBUG] [Thread-175961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:02:58.636 [DEBUG] [Thread-175961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:02:58.636 [DEBUG] [Thread-175961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:02:58.636 [DEBUG] [Thread-175961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:02:58.654 [INFO] [Thread-175961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:02:58.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:02:58.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:02:59.472 [DEBUG] [Thread-175961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:02:59.473 [DEBUG] [Thread-175961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:02:59.520 [DEBUG] [Thread-175961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:02:59.520 [DEBUG] [Thread-175961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:02:59.529 [DEBUG] [Thread-175961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:02:59.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:02:59.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:02:59.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-04-11T20:02:59.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:02:59.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:02:59.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:02:59.561 [DEBUG] [Thread-175961] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:03:09.334 [DEBUG] [Thread-175963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:03:11.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:03:11.158 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:03:24.386 [DEBUG] [Thread-175964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:03:28.395 [DEBUG] [Thread-175965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:03:29.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:03:29.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:03:29.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-04-11T20:03:30.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 3, 23), 0.05064, 99.9585, 0.0, 14.8928, 12.0386, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:03:30.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:03:23
2026-04-11T20:03:31.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:03:31.421 [DEBUG] [Thread-175966] [transport.py] [_log()] starting thread (client mode): 0xae50ab90
2026-04-11T20:03:31.421 [DEBUG] [Thread-175966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:03:31.442 [DEBUG] [Thread-175966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:03:31.442 [INFO] [Thread-175966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] client lang: <none>
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] server lang: <none>
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] kex follows: False
2026-04-11T20:03:31.443 [DEBUG] [Thread-175966] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:03:31.444 [DEBUG] [Thread-175966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:03:31.444 [DEBUG] [Thread-175966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:03:31.444 [DEBUG] [Thread-175966] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:03:31.444 [DEBUG] [Thread-175966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:03:31.444 [DEBUG] [Thread-175966] [transport.py] [_log()] Compression: none
2026-04-11T20:03:31.444 [DEBUG] [Thread-175966] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:03:31.455 [DEBUG] [Thread-175966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:03:31.456 [DEBUG] [Thread-175966] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:03:31.457 [DEBUG] [Thread-175966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:03:31.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:03:31.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:03:31.459 [DEBUG] [Thread-175966] [transport.py] [_log()] userauth is OK
2026-04-11T20:03:31.459 [DEBUG] [Thread-175966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:03:31.459 [DEBUG] [Thread-175966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:03:31.460 [DEBUG] [Thread-175966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:03:31.460 [DEBUG] [Thread-175966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:03:31.484 [INFO] [Thread-175966] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:03:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:03:32.301 [DEBUG] [Thread-175966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:03:32.301 [DEBUG] [Thread-175966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:03:32.302 [DEBUG] [Thread-175966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:03:32.343 [DEBUG] [Thread-175966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:03:32.343 [DEBUG] [Thread-175966] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:03:32.346 [DEBUG] [Thread-175966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:03:32.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:03:32.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:03:32.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:03:32.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:03:32.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:03:32.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:03:32.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:03:32.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:03:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:03:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.751853 -999.00  +11.90  12.24     97  +11.50 1 3 1 3 1     0    0 0.40 1.03 ----- 12.2 12.2 283.6 14.6 13.2 -0.8 13.0 -1.2 12.5 -1.0 12.9 -0.1
2026-04-11T20:03:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:03:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:03:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.751853
2026-04-11T20:03:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:03:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:03:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:03:32.370 [DEBUG] [Thread-175966] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:03:32.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:03:32.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:03:32.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:03:23', tmtdew=0.05064, humidity=99.9585, cloud=0.0, wind=14.8928, temperature=12.0386, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:02:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:03:32.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:03:32.466 [DEBUG] [Thread-175969] [transport.py] [_log()] starting thread (client mode): 0xae509570
2026-04-11T20:03:32.466 [DEBUG] [Thread-175969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:03:32.481 [DEBUG] [Thread-175969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:03:32.481 [INFO] [Thread-175969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:03:32.488 [DEBUG] [Thread-175969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] client lang: <none>
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] server lang: <none>
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] kex follows: False
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] Compression: none
2026-04-11T20:03:32.489 [DEBUG] [Thread-175969] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:03:32.549 [DEBUG] [Thread-175969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:03:32.549 [DEBUG] [Thread-175969] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:03:32.550 [DEBUG] [Thread-175969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:03:32.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:03:32.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:03:32.608 [DEBUG] [Thread-175969] [transport.py] [_log()] userauth is OK
2026-04-11T20:03:32.608 [DEBUG] [Thread-175969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:03:32.608 [DEBUG] [Thread-175969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:03:32.608 [DEBUG] [Thread-175969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:03:32.608 [DEBUG] [Thread-175969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:03:32.628 [INFO] [Thread-175969] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:03:32.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:03:32.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:03:33.444 [DEBUG] [Thread-175969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:03:33.444 [DEBUG] [Thread-175969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:03:33.493 [DEBUG] [Thread-175969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:03:33.493 [DEBUG] [Thread-175969] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:03:33.502 [DEBUG] [Thread-175969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:03:33.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:03:33.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-04-11T20:03: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') -> 00000000
2026-04-11T20:03:33.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:03:33.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:03:33.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:03:33.538 [DEBUG] [Thread-175969] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:03:39.426 [DEBUG] [Thread-175971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:03:54.476 [DEBUG] [Thread-175972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:04:03.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:04:03.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-04-11T20:04:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 3, 23), 0.05064, 99.9585, 0.0, 14.8928, 12.0386, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:04:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:03:23
2026-04-11T20:04:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:04:05.577 [DEBUG] [Thread-175973] [transport.py] [_log()] starting thread (client mode): 0xae5a4160
2026-04-11T20:04:05.577 [DEBUG] [Thread-175973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:04:05.598 [DEBUG] [Thread-175973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:04:05.599 [INFO] [Thread-175973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] client lang: <none>
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] server lang: <none>
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] kex follows: False
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:04:05.602 [DEBUG] [Thread-175973] [transport.py] [_log()] Compression: none
2026-04-11T20:04:05.603 [DEBUG] [Thread-175973] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:04:05.618 [DEBUG] [Thread-175973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:04:05.618 [DEBUG] [Thread-175973] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:04:05.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:04:05.619 [DEBUG] [Thread-175973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:04:05.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:04:05.621 [DEBUG] [Thread-175973] [transport.py] [_log()] userauth is OK
2026-04-11T20:04:05.621 [DEBUG] [Thread-175973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:04:05.622 [DEBUG] [Thread-175973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:04:05.622 [DEBUG] [Thread-175973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:04:05.622 [DEBUG] [Thread-175973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:04:05.645 [INFO] [Thread-175973] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:04:05.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:04:06.459 [DEBUG] [Thread-175973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:04:06.460 [DEBUG] [Thread-175973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:04:06.460 [DEBUG] [Thread-175973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:04:06.501 [DEBUG] [Thread-175973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:04:06.501 [DEBUG] [Thread-175973] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:04:06.505 [DEBUG] [Thread-175973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:04:06.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:04:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:04:06.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:04:06.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:04:06.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:04:06.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:04:06.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:04:06.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:04:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:04:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.752200 -999.00  +11.90   9.88     97  +11.50 1 3 1 3 1     0    0 0.39 0.85 ----- 9.9 9.9 287.0 15.1 13.2 -1.0 13.0 -1.0 12.5 -0.5 12.9 -0.1
2026-04-11T20:04:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:04:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:04:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.752200
2026-04-11T20:04:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:04:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:04:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:04:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:04:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:04:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:03:23', tmtdew=0.05064, humidity=99.9585, cloud=0.0, wind=14.8928, temperature=12.0386, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:03:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:04:06.528 [DEBUG] [Thread-175973] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:04:06.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:04:06.625 [DEBUG] [Thread-175976] [transport.py] [_log()] starting thread (client mode): 0xae5a5720
2026-04-11T20:04:06.625 [DEBUG] [Thread-175976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:04:06.640 [DEBUG] [Thread-175976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:04:06.640 [INFO] [Thread-175976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:04:06.647 [DEBUG] [Thread-175976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] client lang: <none>
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] server lang: <none>
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] kex follows: False
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] Compression: none
2026-04-11T20:04:06.648 [DEBUG] [Thread-175976] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:04:06.710 [DEBUG] [Thread-175976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:04:06.711 [DEBUG] [Thread-175976] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:04:06.711 [DEBUG] [Thread-175976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:04:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:04:06.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:04:06.767 [DEBUG] [Thread-175976] [transport.py] [_log()] userauth is OK
2026-04-11T20:04:06.767 [DEBUG] [Thread-175976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:04:06.768 [DEBUG] [Thread-175976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:04:06.768 [DEBUG] [Thread-175976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:04:06.768 [DEBUG] [Thread-175976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:04:06.786 [INFO] [Thread-175976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:04:06.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:04:06.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:04:07.590 [DEBUG] [Thread-175976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:04:07.590 [DEBUG] [Thread-175976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:04:07.639 [DEBUG] [Thread-175976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:04:07.639 [DEBUG] [Thread-175976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:04:07.647 [DEBUG] [Thread-175976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:04:07.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:04:07.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-04-11T20:04:07.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-04-11T20:04:07.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:04:07.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:04:07.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:04:07.681 [DEBUG] [Thread-175976] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:04:09.507 [DEBUG] [Thread-175978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:11.360 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:11.361 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:24.557 [DEBUG] [Thread-175979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:28.470 [DEBUG] [Thread-175980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:04:37.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:04:37.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-04-11T20:04:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 3, 59), 0.05067, 99.9585, 0.0, 15.8278, 12.0054, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:04:39.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:03:59
2026-04-11T20:04:39.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:04:39.592 [DEBUG] [Thread-175981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:04:39.699 [DEBUG] [Thread-175982] [transport.py] [_log()] starting thread (client mode): 0xa7950070
2026-04-11T20:04:39.699 [DEBUG] [Thread-175982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:04:39.720 [DEBUG] [Thread-175982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:04:39.720 [INFO] [Thread-175982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:39.723 [DEBUG] [Thread-175982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] client lang: <none>
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] server lang: <none>
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] kex follows: False
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] Compression: none
2026-04-11T20:04:39.724 [DEBUG] [Thread-175982] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:04:39.738 [DEBUG] [Thread-175982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:04:39.739 [DEBUG] [Thread-175982] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:04:39.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:04:39.740 [DEBUG] [Thread-175982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:04:39.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:04:39.742 [DEBUG] [Thread-175982] [transport.py] [_log()] userauth is OK
2026-04-11T20:04:39.742 [DEBUG] [Thread-175982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:04:39.743 [DEBUG] [Thread-175982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:04:39.743 [DEBUG] [Thread-175982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:04:39.743 [DEBUG] [Thread-175982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:04:39.767 [INFO] [Thread-175982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:04:39.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:04:40.553 [DEBUG] [Thread-175982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:04:40.553 [DEBUG] [Thread-175982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:04:40.554 [DEBUG] [Thread-175982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:04:40.594 [DEBUG] [Thread-175982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:04:40.594 [DEBUG] [Thread-175982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:04:40.598 [DEBUG] [Thread-175982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:04:40.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:04:40.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:04:40.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:04:40.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:04:40.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:04:40.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:04:40.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:04:40.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:04:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:04:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.752895 -999.00  +12.00  12.74     97  +11.70 1 3 1 3 1     0    0 0.36 -0.05 ----- 12.7 12.7 284.6 16.2 13.2 -0.5 12.9 -0.9 12.6 -0.3 13.0 -0.1
2026-04-11T20:04:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:04:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:04:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.752895
2026-04-11T20:04:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:04:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:04:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:04:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:04:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:04:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:03:59', tmtdew=0.05067, humidity=99.9585, cloud=0.0, wind=15.8278, temperature=12.0054, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:04:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:04:40.625 [DEBUG] [Thread-175982] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:04:40.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:04:40.720 [DEBUG] [Thread-175985] [transport.py] [_log()] starting thread (client mode): 0xae5f2d70
2026-04-11T20:04:40.720 [DEBUG] [Thread-175985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:04:40.735 [DEBUG] [Thread-175985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:04:40.736 [INFO] [Thread-175985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:04:40.743 [DEBUG] [Thread-175985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:04:40.744 [DEBUG] [Thread-175985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] client lang: <none>
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] server lang: <none>
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] kex follows: False
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] Compression: none
2026-04-11T20:04:40.745 [DEBUG] [Thread-175985] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:04:40.803 [DEBUG] [Thread-175985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:04:40.804 [DEBUG] [Thread-175985] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:04:40.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:04:40.805 [DEBUG] [Thread-175985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:04:40.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:04:40.859 [DEBUG] [Thread-175985] [transport.py] [_log()] userauth is OK
2026-04-11T20:04:40.860 [DEBUG] [Thread-175985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:04:40.860 [DEBUG] [Thread-175985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:04:40.860 [DEBUG] [Thread-175985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:04:40.860 [DEBUG] [Thread-175985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:04:40.879 [INFO] [Thread-175985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:04:40.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:04:40.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:04:41.742 [DEBUG] [Thread-175985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:04:41.742 [DEBUG] [Thread-175985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:04:41.790 [DEBUG] [Thread-175985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:04:41.791 [DEBUG] [Thread-175985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:04:41.800 [DEBUG] [Thread-175985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:04:41.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:04:41.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:04:41.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:04:41.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:04:41.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:04:41.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:04:41.841 [DEBUG] [Thread-175985] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:04:54.625 [DEBUG] [Thread-175987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:09.676 [DEBUG] [Thread-175988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:11.566 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:11.568 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:11.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:05:11.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:05:11.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:05:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 4, 35), 0.00644, 99.8839, 0.0, 15.809, 12.3445, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:05:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:04:35
2026-04-11T20:05:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:05:13.807 [DEBUG] [Thread-175989] [transport.py] [_log()] starting thread (client mode): 0xae518760
2026-04-11T20:05:13.807 [DEBUG] [Thread-175989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:05:13.827 [DEBUG] [Thread-175989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:05:13.828 [INFO] [Thread-175989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:05:13.829 [DEBUG] [Thread-175989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:05:13.829 [DEBUG] [Thread-175989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] client lang: <none>
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] server lang: <none>
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] kex follows: False
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] Compression: none
2026-04-11T20:05:13.830 [DEBUG] [Thread-175989] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:05:13.848 [DEBUG] [Thread-175989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:05:13.849 [DEBUG] [Thread-175989] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:05:13.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:05:13.850 [DEBUG] [Thread-175989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:05:13.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:05:13.852 [DEBUG] [Thread-175989] [transport.py] [_log()] userauth is OK
2026-04-11T20:05:13.852 [DEBUG] [Thread-175989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:05:13.852 [DEBUG] [Thread-175989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:05:13.852 [DEBUG] [Thread-175989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:05:13.852 [DEBUG] [Thread-175989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:05:13.875 [INFO] [Thread-175989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:05:13.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:05:15.115 [DEBUG] [Thread-175989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:05:15.115 [DEBUG] [Thread-175989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:05:15.115 [DEBUG] [Thread-175989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:05:15.156 [DEBUG] [Thread-175989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:05:15.156 [DEBUG] [Thread-175989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:05:15.158 [DEBUG] [Thread-175989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:05:15.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:05:15.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:05:15.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:05:15.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:05:15.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:05:15.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:05:15.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:05:15.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:05:15.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:05:15.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.753242 -999.00  +11.90  11.83     97  +11.60 1 3 1 3 1     0    0 0.36 0.05 ----- 11.8 11.8 285.2 17.0 13.2 -0.7 13.0 -0.6 12.6 -0.9 13.0 -0.3
2026-04-11T20:05:15.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:05:15.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:05:15.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.753242
2026-04-11T20:05:15.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:05:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:05:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:05:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:05:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:05:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:04:35', tmtdew=0.00644, humidity=99.8839, cloud=0.0, wind=15.809, temperature=12.3445, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:04:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:05:15.185 [DEBUG] [Thread-175989] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:05:15.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:05:15.270 [DEBUG] [Thread-175992] [transport.py] [_log()] starting thread (client mode): 0xb0f6d0f0
2026-04-11T20:05:15.270 [DEBUG] [Thread-175992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:05:15.285 [DEBUG] [Thread-175992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:05:15.285 [INFO] [Thread-175992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:05:15.293 [DEBUG] [Thread-175992] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:05:15.293 [DEBUG] [Thread-175992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:05:15.293 [DEBUG] [Thread-175992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:05:15.293 [DEBUG] [Thread-175992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] client lang: <none>
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] server lang: <none>
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] kex follows: False
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] Compression: none
2026-04-11T20:05:15.294 [DEBUG] [Thread-175992] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:05:15.351 [DEBUG] [Thread-175992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:05:15.352 [DEBUG] [Thread-175992] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:05:15.353 [DEBUG] [Thread-175992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:05:15.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:05:15.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:05:15.407 [DEBUG] [Thread-175992] [transport.py] [_log()] userauth is OK
2026-04-11T20:05:15.407 [DEBUG] [Thread-175992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:05:15.409 [DEBUG] [Thread-175992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:05:15.409 [DEBUG] [Thread-175992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:05:15.409 [DEBUG] [Thread-175992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:05:15.427 [INFO] [Thread-175992] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:05:15.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:05:15.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:05:16.249 [DEBUG] [Thread-175992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:05:16.249 [DEBUG] [Thread-175992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:05:16.297 [DEBUG] [Thread-175992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:05:16.297 [DEBUG] [Thread-175992] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:05:16.306 [DEBUG] [Thread-175992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:05:16.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:05:16.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:05:16.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:05:16.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:05:16.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:05:16.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:05:16.344 [DEBUG] [Thread-175992] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:05:24.715 [DEBUG] [Thread-175994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:28.545 [DEBUG] [Thread-175995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:39.768 [DEBUG] [Thread-175996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:05:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:05:46.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:05:46.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-04-11T20:05:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 5, 10), 0.058265, 99.9088, 0.0, 12.74, 11.9888, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:05:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:05:10
2026-04-11T20:05:48.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:05:48.363 [DEBUG] [Thread-175997] [transport.py] [_log()] starting thread (client mode): 0xae516d40
2026-04-11T20:05:48.363 [DEBUG] [Thread-175997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:05:48.383 [DEBUG] [Thread-175997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:05:48.383 [INFO] [Thread-175997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] client lang: <none>
2026-04-11T20:05:48.387 [DEBUG] [Thread-175997] [transport.py] [_log()] server lang: <none>
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] kex follows: False
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] Compression: none
2026-04-11T20:05:48.388 [DEBUG] [Thread-175997] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:05:48.406 [DEBUG] [Thread-175997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:05:48.407 [DEBUG] [Thread-175997] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:05:48.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:05:48.409 [DEBUG] [Thread-175997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:05:48.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:05:48.449 [DEBUG] [Thread-175997] [transport.py] [_log()] userauth is OK
2026-04-11T20:05:48.449 [DEBUG] [Thread-175997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:05:48.449 [DEBUG] [Thread-175997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:05:48.449 [DEBUG] [Thread-175997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:05:48.449 [DEBUG] [Thread-175997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:05:48.480 [INFO] [Thread-175997] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:05:48.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:05:49.265 [DEBUG] [Thread-175997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:05:49.266 [DEBUG] [Thread-175997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:05:49.266 [DEBUG] [Thread-175997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:05:49.307 [DEBUG] [Thread-175997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:05:49.307 [DEBUG] [Thread-175997] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:05:49.310 [DEBUG] [Thread-175997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:05:49.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:05:49.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:05:49.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:05:49.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:05:49.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:05:49.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:05:49.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:05:49.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:05:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:05:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.753589 -999.00  +11.90  13.37     97  +11.60 1 3 1 3 1     0    0 0.36 -0.15 ----- 13.4 13.4 274.6 16.7 13.2 -0.7 12.9 -0.6 12.6 -0.6 13.0 -0.1
2026-04-11T20:05:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:05:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:05:49.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.753589
2026-04-11T20:05:49.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:05:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:05:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:05:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:05:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:05:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:05:10', tmtdew=0.058265, humidity=99.9088, cloud=0.0, wind=12.74, temperature=11.9888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:05:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:05:49.337 [DEBUG] [Thread-175997] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:05:49.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:05:49.431 [DEBUG] [Thread-176000] [transport.py] [_log()] starting thread (client mode): 0xb0f8f880
2026-04-11T20:05:49.431 [DEBUG] [Thread-176000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:05:49.446 [DEBUG] [Thread-176000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:05:49.447 [INFO] [Thread-176000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:05:49.454 [DEBUG] [Thread-176000] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:05:49.455 [DEBUG] [Thread-176000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] client lang: <none>
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] server lang: <none>
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] kex follows: False
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] Compression: none
2026-04-11T20:05:49.456 [DEBUG] [Thread-176000] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:05:49.511 [DEBUG] [Thread-176000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:05:49.512 [DEBUG] [Thread-176000] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:05:49.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:05:49.513 [DEBUG] [Thread-176000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:05:49.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:05:49.567 [DEBUG] [Thread-176000] [transport.py] [_log()] userauth is OK
2026-04-11T20:05:49.567 [DEBUG] [Thread-176000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:05:49.568 [DEBUG] [Thread-176000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:05:49.568 [DEBUG] [Thread-176000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:05:49.568 [DEBUG] [Thread-176000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:05:49.586 [INFO] [Thread-176000] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:05:49.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:05:49.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:05:50.416 [DEBUG] [Thread-176000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:05:50.416 [DEBUG] [Thread-176000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:05:50.464 [DEBUG] [Thread-176000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:05:50.464 [DEBUG] [Thread-176000] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:05:50.473 [DEBUG] [Thread-176000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:05:50.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:05:50.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-04-11T20:05:50.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-04-11T20:05:50.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:05:50.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:05:50.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:05:50.510 [DEBUG] [Thread-176000] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:05:54.805 [DEBUG] [Thread-176002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:09.854 [DEBUG] [Thread-176003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:11.784 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:11.785 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:20.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:06:20.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:06:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:06:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 5, 46), 0.01148, 99.8507, 0.0, 13.9039, 12.3777, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:06:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:05:46
2026-04-11T20:06:22.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:06:22.333 [DEBUG] [Thread-176004] [transport.py] [_log()] starting thread (client mode): 0xae5f0100
2026-04-11T20:06:22.333 [DEBUG] [Thread-176004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:06:22.353 [DEBUG] [Thread-176004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:06:22.353 [INFO] [Thread-176004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] client lang: <none>
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] server lang: <none>
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] kex follows: False
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:06:22.356 [DEBUG] [Thread-176004] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:06:22.357 [DEBUG] [Thread-176004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:06:22.357 [DEBUG] [Thread-176004] [transport.py] [_log()] Compression: none
2026-04-11T20:06:22.357 [DEBUG] [Thread-176004] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:06:22.372 [DEBUG] [Thread-176004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:06:22.372 [DEBUG] [Thread-176004] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:06:22.372 [DEBUG] [Thread-176004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:06:22.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:06:22.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:06:22.373 [DEBUG] [Thread-176004] [transport.py] [_log()] userauth is OK
2026-04-11T20:06:22.373 [DEBUG] [Thread-176004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:06:22.373 [DEBUG] [Thread-176004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:06:22.373 [DEBUG] [Thread-176004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:06:22.373 [DEBUG] [Thread-176004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:06:22.391 [INFO] [Thread-176004] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:06:22.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:06:23.142 [DEBUG] [Thread-176004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:06:23.142 [DEBUG] [Thread-176004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:06:23.143 [DEBUG] [Thread-176004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:06:23.183 [DEBUG] [Thread-176004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:06:23.183 [DEBUG] [Thread-176004] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:06:23.187 [DEBUG] [Thread-176004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:06:23.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:06:23.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:06:23.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:06:23.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:06:23.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:06:23.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:06:23.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:06:23.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:06:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:06:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.753936 -999.00  +11.90  11.25     97  +11.50 1 3 1 3 1     0    0 0.35 -0.54 ----- 11.2 11.2 284.0 18.5 13.2 -1.5 13.0 -0.7 12.6 -0.8 13.0 -0.2
2026-04-11T20:06:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:06:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:06:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.753936
2026-04-11T20:06:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:06:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:06:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:06:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:06:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:06:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:05:46', tmtdew=0.01148, humidity=99.8507, cloud=0.0, wind=13.9039, temperature=12.3777, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:05:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:06:23.214 [DEBUG] [Thread-176004] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:06:23.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:06:23.310 [DEBUG] [Thread-176007] [transport.py] [_log()] starting thread (client mode): 0xa7951a80
2026-04-11T20:06:23.310 [DEBUG] [Thread-176007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:06:23.325 [DEBUG] [Thread-176007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:06:23.326 [INFO] [Thread-176007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:06:23.333 [DEBUG] [Thread-176007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:06:23.333 [DEBUG] [Thread-176007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:06:23.333 [DEBUG] [Thread-176007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] client lang: <none>
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] server lang: <none>
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] kex follows: False
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] Compression: none
2026-04-11T20:06:23.334 [DEBUG] [Thread-176007] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:06:23.391 [DEBUG] [Thread-176007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:06:23.392 [DEBUG] [Thread-176007] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:06:23.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:06:23.393 [DEBUG] [Thread-176007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:06:23.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:06:23.447 [DEBUG] [Thread-176007] [transport.py] [_log()] userauth is OK
2026-04-11T20:06:23.448 [DEBUG] [Thread-176007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:06:23.448 [DEBUG] [Thread-176007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:06:23.448 [DEBUG] [Thread-176007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:06:23.448 [DEBUG] [Thread-176007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:06:23.468 [INFO] [Thread-176007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:06:23.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:06:23.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:06:24.296 [DEBUG] [Thread-176007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:06:24.296 [DEBUG] [Thread-176007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:06:24.344 [DEBUG] [Thread-176007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:06:24.344 [DEBUG] [Thread-176007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:06:24.354 [DEBUG] [Thread-176007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:06:24.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:06:24.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:06:24.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-04-11T20:06:24.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:06:24.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:06:24.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:06:24.390 [DEBUG] [Thread-176007] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:06:24.889 [DEBUG] [Thread-176009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:28.604 [DEBUG] [Thread-176010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:39.953 [DEBUG] [Thread-176011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:54.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:06:54.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:06:54.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-04-11T20:06:54.991 [DEBUG] [Thread-176012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:06:55.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 6, 22), 0.000655, 99.9585, 0.0, 15.1574, 11.972, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:06:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:06:22
2026-04-11T20:06:56.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:06:56.338 [DEBUG] [Thread-176013] [transport.py] [_log()] starting thread (client mode): 0xb0f8ed70
2026-04-11T20:06:56.338 [DEBUG] [Thread-176013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:06:56.358 [DEBUG] [Thread-176013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:06:56.358 [INFO] [Thread-176013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:06:56.360 [DEBUG] [Thread-176013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:06:56.360 [DEBUG] [Thread-176013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:06:56.360 [DEBUG] [Thread-176013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] client lang: <none>
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] server lang: <none>
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] kex follows: False
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:06:56.361 [DEBUG] [Thread-176013] [transport.py] [_log()] Compression: none
2026-04-11T20:06:56.362 [DEBUG] [Thread-176013] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:06:56.374 [DEBUG] [Thread-176013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:06:56.375 [DEBUG] [Thread-176013] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:06:56.376 [DEBUG] [Thread-176013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:06:56.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:06:56.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:06:56.378 [DEBUG] [Thread-176013] [transport.py] [_log()] userauth is OK
2026-04-11T20:06:56.378 [DEBUG] [Thread-176013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:06:56.379 [DEBUG] [Thread-176013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:06:56.379 [DEBUG] [Thread-176013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:06:56.379 [DEBUG] [Thread-176013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:06:56.403 [INFO] [Thread-176013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:06:56.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:06:57.223 [DEBUG] [Thread-176013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:06:57.223 [DEBUG] [Thread-176013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:06:57.224 [DEBUG] [Thread-176013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:06:57.264 [DEBUG] [Thread-176013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:06:57.264 [DEBUG] [Thread-176013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:06:57.268 [DEBUG] [Thread-176013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:06:57.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:06:57.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:06:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:06:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:06:57.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:06:57.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:06:57.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:06:57.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:06:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:06:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.754284 -999.00  +11.90  13.67     97  +11.50 1 3 1 3 1     0    0 0.34 -0.69 ----- 13.7 13.7 287.4 19.0 13.2 -1.5 13.0 -0.6 12.6 -1.0 12.9 -0.3
2026-04-11T20:06:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:06:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:06:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.754284
2026-04-11T20:06:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:06:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:06:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:06:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:06:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:06:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:06:22', tmtdew=0.000655, humidity=99.9585, cloud=0.0, wind=15.1574, temperature=11.972, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:06:10.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:06:57.294 [DEBUG] [Thread-176013] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:06:57.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:06:57.384 [DEBUG] [Thread-176016] [transport.py] [_log()] starting thread (client mode): 0xb0f540d0
2026-04-11T20:06:57.384 [DEBUG] [Thread-176016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:06:57.399 [DEBUG] [Thread-176016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:06:57.399 [INFO] [Thread-176016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] client lang: <none>
2026-04-11T20:06:57.407 [DEBUG] [Thread-176016] [transport.py] [_log()] server lang: <none>
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] kex follows: False
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] Compression: none
2026-04-11T20:06:57.408 [DEBUG] [Thread-176016] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:06:57.467 [DEBUG] [Thread-176016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:06:57.468 [DEBUG] [Thread-176016] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:06:57.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:06:57.469 [DEBUG] [Thread-176016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:06:57.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:06:57.523 [DEBUG] [Thread-176016] [transport.py] [_log()] userauth is OK
2026-04-11T20:06:57.524 [DEBUG] [Thread-176016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:06:57.524 [DEBUG] [Thread-176016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:06:57.524 [DEBUG] [Thread-176016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:06:57.524 [DEBUG] [Thread-176016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:06:57.542 [INFO] [Thread-176016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:06:57.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:06:57.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:06:58.383 [DEBUG] [Thread-176016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:06:58.383 [DEBUG] [Thread-176016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:06:58.431 [DEBUG] [Thread-176016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:06:58.432 [DEBUG] [Thread-176016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:06:58.441 [DEBUG] [Thread-176016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:06:58.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:06:58.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-04-11T20:06:58.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-04-11T20:06:58.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:06:58.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:06:58.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:06:58.478 [DEBUG] [Thread-176016] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:07:10.027 [DEBUG] [Thread-176018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:07:11.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:07:11.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:07:25.077 [DEBUG] [Thread-176019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:07:28.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:07:28.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:07:28.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-04-11T20:07:28.683 [DEBUG] [Thread-176020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 6, 57), 0.050655, 99.9585, 0.0, 15.2986, 11.972, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:07:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:06:57
2026-04-11T20:07:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:07:30.295 [DEBUG] [Thread-176021] [transport.py] [_log()] starting thread (client mode): 0xb0f55450
2026-04-11T20:07:30.296 [DEBUG] [Thread-176021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:07:30.316 [DEBUG] [Thread-176021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:07:30.316 [INFO] [Thread-176021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] client lang: <none>
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] server lang: <none>
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] kex follows: False
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:07:30.319 [DEBUG] [Thread-176021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:07:30.320 [DEBUG] [Thread-176021] [transport.py] [_log()] Compression: none
2026-04-11T20:07:30.320 [DEBUG] [Thread-176021] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:07:30.337 [DEBUG] [Thread-176021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:07:30.338 [DEBUG] [Thread-176021] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:07:30.339 [DEBUG] [Thread-176021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:07:30.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:07:30.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:07:30.380 [DEBUG] [Thread-176021] [transport.py] [_log()] userauth is OK
2026-04-11T20:07:30.381 [DEBUG] [Thread-176021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:07:30.381 [DEBUG] [Thread-176021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:07:30.382 [DEBUG] [Thread-176021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:07:30.382 [DEBUG] [Thread-176021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:07:30.414 [INFO] [Thread-176021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:07:30.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:07:31.270 [DEBUG] [Thread-176021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:07:31.270 [DEBUG] [Thread-176021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:07:31.270 [DEBUG] [Thread-176021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:07:31.311 [DEBUG] [Thread-176021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:07:31.311 [DEBUG] [Thread-176021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:07:31.315 [DEBUG] [Thread-176021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:07:31.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:07:31.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:07:31.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:07:31.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:07:31.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:07:31.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:07:31.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:07:31.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:07:31.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:07:31.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.754631 -999.00  +11.80  12.69     97  +11.50 1 3 1 3 1     0    0 0.34 -0.94 ----- 12.7 12.7 281.8 16.5 13.1 -1.0 12.9 -0.7 12.5 -1.2 12.9 -0.3
2026-04-11T20:07:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:07:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:07:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.754631
2026-04-11T20:07:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:07:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:07:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:07:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:07:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:07:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:06:57', tmtdew=0.050655, humidity=99.9585, cloud=0.0, wind=15.2986, temperature=11.972, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:06:40.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:07:31.344 [DEBUG] [Thread-176021] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:07:31.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:07:31.439 [DEBUG] [Thread-176024] [transport.py] [_log()] starting thread (client mode): 0xae5a4a00
2026-04-11T20:07:31.439 [DEBUG] [Thread-176024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:07:31.454 [DEBUG] [Thread-176024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:07:31.454 [INFO] [Thread-176024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:07:31.461 [DEBUG] [Thread-176024] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] client lang: <none>
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] server lang: <none>
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] kex follows: False
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] Compression: none
2026-04-11T20:07:31.462 [DEBUG] [Thread-176024] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:07:31.519 [DEBUG] [Thread-176024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:07:31.520 [DEBUG] [Thread-176024] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:07:31.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:07:31.521 [DEBUG] [Thread-176024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:07:31.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:07:31.575 [DEBUG] [Thread-176024] [transport.py] [_log()] userauth is OK
2026-04-11T20:07:31.576 [DEBUG] [Thread-176024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:07:31.576 [DEBUG] [Thread-176024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:07:31.576 [DEBUG] [Thread-176024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:07:31.577 [DEBUG] [Thread-176024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:07:31.599 [INFO] [Thread-176024] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:07:31.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:07:31.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:07:32.412 [DEBUG] [Thread-176024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:07:32.412 [DEBUG] [Thread-176024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:07:32.460 [DEBUG] [Thread-176024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:07:32.460 [DEBUG] [Thread-176024] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:07:32.469 [DEBUG] [Thread-176024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:07:32.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:07:32.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-04-11T20:07: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') -> 00000000
2026-04-11T20:07:32.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:07:32.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:07:32.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:07:32.503 [DEBUG] [Thread-176024] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:07:40.114 [DEBUG] [Thread-176026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:07:55.168 [DEBUG] [Thread-176027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:08:02.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:08:02.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-04-11T20:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 7, 33), 0.055625, 99.9254, 0.0, 15.916, 12.0881, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:08:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:07:33
2026-04-11T20:08:04.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:08:04.310 [DEBUG] [Thread-176028] [transport.py] [_log()] starting thread (client mode): 0xb0fb7220
2026-04-11T20:08:04.310 [DEBUG] [Thread-176028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:08:04.330 [DEBUG] [Thread-176028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:08:04.330 [INFO] [Thread-176028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] client lang: <none>
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] server lang: <none>
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] kex follows: False
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] Compression: none
2026-04-11T20:08:04.334 [DEBUG] [Thread-176028] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:08:04.351 [DEBUG] [Thread-176028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:08:04.352 [DEBUG] [Thread-176028] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:08:04.352 [DEBUG] [Thread-176028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:08:04.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:08:04.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:08:04.354 [DEBUG] [Thread-176028] [transport.py] [_log()] userauth is OK
2026-04-11T20:08:04.355 [DEBUG] [Thread-176028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:08:04.355 [DEBUG] [Thread-176028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:08:04.355 [DEBUG] [Thread-176028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:08:04.355 [DEBUG] [Thread-176028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:08:04.379 [INFO] [Thread-176028] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:08:04.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:08:05.208 [DEBUG] [Thread-176028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:08:05.208 [DEBUG] [Thread-176028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:08:05.208 [DEBUG] [Thread-176028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:08:05.249 [DEBUG] [Thread-176028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:08:05.249 [DEBUG] [Thread-176028] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:08:05.252 [DEBUG] [Thread-176028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:08:05.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:08:05.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:08:05.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:08:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:08:05.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:08:05.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:08:05.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:08:05.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:08:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:08:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.754978 -999.00  +11.90  15.78     97  +11.50 1 3 1 3 1     0    0 0.34 -0.68 ----- 15.8 15.8 270.8 17.3 13.1 -1.0 12.9 -0.6 12.6 -0.7 13.0 -0.3
2026-04-11T20:08:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:08:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:08:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.754978
2026-04-11T20:08:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:08:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:08:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:08:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:08:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:08:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:07:33', tmtdew=0.055625, humidity=99.9254, cloud=0.0, wind=15.916, temperature=12.0881, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:07:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:08:05.278 [DEBUG] [Thread-176028] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:08:05.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:08:05.371 [DEBUG] [Thread-176031] [transport.py] [_log()] starting thread (client mode): 0xb0fb5450
2026-04-11T20:08:05.371 [DEBUG] [Thread-176031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:08:05.385 [DEBUG] [Thread-176031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:08:05.385 [INFO] [Thread-176031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:08:05.393 [DEBUG] [Thread-176031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:08:05.393 [DEBUG] [Thread-176031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:08:05.393 [DEBUG] [Thread-176031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:08:05.393 [DEBUG] [Thread-176031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:05.393 [DEBUG] [Thread-176031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] client lang: <none>
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] server lang: <none>
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] kex follows: False
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] Compression: none
2026-04-11T20:08:05.394 [DEBUG] [Thread-176031] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:08:05.451 [DEBUG] [Thread-176031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:08:05.451 [DEBUG] [Thread-176031] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:08:05.452 [DEBUG] [Thread-176031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:08:05.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:08:05.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:08:05.507 [DEBUG] [Thread-176031] [transport.py] [_log()] userauth is OK
2026-04-11T20:08:05.507 [DEBUG] [Thread-176031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:08:05.508 [DEBUG] [Thread-176031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:08:05.508 [DEBUG] [Thread-176031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:08:05.508 [DEBUG] [Thread-176031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:08:05.527 [INFO] [Thread-176031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:08:05.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:08:05.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:08:06.340 [DEBUG] [Thread-176031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:08:06.340 [DEBUG] [Thread-176031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:08:06.387 [DEBUG] [Thread-176031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:08:06.388 [DEBUG] [Thread-176031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:08:06.397 [DEBUG] [Thread-176031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:08:06.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:08:06.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:08:06.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:08:06.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:08:06.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:08:06.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:08:06.432 [DEBUG] [Thread-176031] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:08:10.202 [DEBUG] [Thread-176033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:12.202 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:12.203 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:25.253 [DEBUG] [Thread-176034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:28.741 [DEBUG] [Thread-176035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:36.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:08:36.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:08:36.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-04-11T20:08:37.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 8, 8), 0.05321, 99.9419, 0.0, 15.7748, 11.9388, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:08:37.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:08:08
2026-04-11T20:08:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:08:38.317 [DEBUG] [Thread-176036] [transport.py] [_log()] starting thread (client mode): 0xb0fb6c50
2026-04-11T20:08:38.318 [DEBUG] [Thread-176036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:08:38.337 [DEBUG] [Thread-176036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:08:38.337 [INFO] [Thread-176036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:08:38.341 [DEBUG] [Thread-176036] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:08:38.341 [DEBUG] [Thread-176036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:08:38.341 [DEBUG] [Thread-176036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:08:38.341 [DEBUG] [Thread-176036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:38.341 [DEBUG] [Thread-176036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:38.341 [DEBUG] [Thread-176036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] client lang: <none>
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] server lang: <none>
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] kex follows: False
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] Compression: none
2026-04-11T20:08:38.342 [DEBUG] [Thread-176036] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:08:38.358 [DEBUG] [Thread-176036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:08:38.359 [DEBUG] [Thread-176036] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:08:38.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:08:38.360 [DEBUG] [Thread-176036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:08:38.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:08:38.362 [DEBUG] [Thread-176036] [transport.py] [_log()] userauth is OK
2026-04-11T20:08:38.362 [DEBUG] [Thread-176036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:08:38.362 [DEBUG] [Thread-176036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:08:38.362 [DEBUG] [Thread-176036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:08:38.363 [DEBUG] [Thread-176036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:08:38.385 [INFO] [Thread-176036] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:08:38.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:08:39.172 [DEBUG] [Thread-176036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:08:39.172 [DEBUG] [Thread-176036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:08:39.172 [DEBUG] [Thread-176036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:08:39.213 [DEBUG] [Thread-176036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:08:39.213 [DEBUG] [Thread-176036] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:08:39.217 [DEBUG] [Thread-176036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:08:39.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:08:39.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:08:39.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:08:39.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:08:39.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:08:39.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:08:39.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:08:39.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:08:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:08:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.755325 -999.00  +11.90  14.55     97  +11.60 1 3 1 3 1     0    0 0.35 -0.41 ----- 14.6 14.6 281.2 16.8 13.1 -0.8 12.9 -0.9 12.5 -0.8 12.9 -0.5
2026-04-11T20:08:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:08:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:08:39.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.755325
2026-04-11T20:08:39.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:08:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:08:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:08:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:08:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:08:39.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:08:08', tmtdew=0.05321, humidity=99.9419, cloud=0.0, wind=15.7748, temperature=11.9388, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:07:40.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:08:39.243 [DEBUG] [Thread-176036] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:08:39.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:08:39.338 [DEBUG] [Thread-176039] [transport.py] [_log()] starting thread (client mode): 0xb0fb62f0
2026-04-11T20:08:39.338 [DEBUG] [Thread-176039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:08:39.352 [DEBUG] [Thread-176039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:08:39.352 [INFO] [Thread-176039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:08:39.359 [DEBUG] [Thread-176039] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:08:39.359 [DEBUG] [Thread-176039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:08:39.359 [DEBUG] [Thread-176039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] client lang: <none>
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] server lang: <none>
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] kex follows: False
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] Compression: none
2026-04-11T20:08:39.360 [DEBUG] [Thread-176039] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:08:39.419 [DEBUG] [Thread-176039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:08:39.420 [DEBUG] [Thread-176039] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:08:39.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:08:39.421 [DEBUG] [Thread-176039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:08:39.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:08:39.482 [DEBUG] [Thread-176039] [transport.py] [_log()] userauth is OK
2026-04-11T20:08:39.483 [DEBUG] [Thread-176039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:08:39.483 [DEBUG] [Thread-176039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:08:39.483 [DEBUG] [Thread-176039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:08:39.483 [DEBUG] [Thread-176039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:08:39.504 [INFO] [Thread-176039] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:08:39.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:08:39.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:08:40.292 [DEBUG] [Thread-176041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:08:40.317 [DEBUG] [Thread-176039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:08:40.318 [DEBUG] [Thread-176039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:08:40.368 [DEBUG] [Thread-176039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:08:40.368 [DEBUG] [Thread-176039] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:08:40.380 [DEBUG] [Thread-176039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:08:40.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:08:40.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:08:40.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:08:40.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:08:40.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:08:40.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:08:40.427 [DEBUG] [Thread-176039] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:08:55.343 [DEBUG] [Thread-176042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:10.377 [DEBUG] [Thread-176043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:09:10.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:09:10.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-04-11T20:09:11.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 8, 43), 0.00636, 99.8839, 0.0, 16.0207, 12.444, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:09:11.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:08:43
2026-04-11T20:09:12.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:09:12.249 [DEBUG] [Thread-176044] [transport.py] [_log()] starting thread (client mode): 0xb0f55780
2026-04-11T20:09:12.249 [DEBUG] [Thread-176044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:09:12.271 [DEBUG] [Thread-176044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:09:12.271 [INFO] [Thread-176044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:12.275 [DEBUG] [Thread-176044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] client lang: <none>
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] server lang: <none>
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] kex follows: False
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:09:12.276 [DEBUG] [Thread-176044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:09:12.277 [DEBUG] [Thread-176044] [transport.py] [_log()] Compression: none
2026-04-11T20:09:12.277 [DEBUG] [Thread-176044] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:09:12.295 [DEBUG] [Thread-176044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:09:12.296 [DEBUG] [Thread-176044] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:09:12.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:09:12.297 [DEBUG] [Thread-176044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:09:12.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:09:12.299 [DEBUG] [Thread-176044] [transport.py] [_log()] userauth is OK
2026-04-11T20:09:12.299 [DEBUG] [Thread-176044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:09:12.299 [DEBUG] [Thread-176044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:09:12.300 [DEBUG] [Thread-176044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:09:12.300 [DEBUG] [Thread-176044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:09:12.322 [INFO] [Thread-176044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:09:12.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:09:12.405 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:12.406 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:13.096 [DEBUG] [Thread-176044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:09:13.097 [DEBUG] [Thread-176044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:09:13.097 [DEBUG] [Thread-176044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:09:13.138 [DEBUG] [Thread-176044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:09:13.138 [DEBUG] [Thread-176044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:09:13.142 [DEBUG] [Thread-176044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:09:13.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:09:13.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:09:13.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:09:13.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:09:13.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:09:13.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:09:13.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:09:13.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:09:13.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:09:13.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.755673 -999.00  +11.90  12.51     97  +11.50 1 3 1 3 1     0    0 0.36 -0.13 ----- 12.5 12.5 279.8 18.1 13.1 -0.8 12.9 -1.0 12.6 -1.2 12.9 -0.7
2026-04-11T20:09:13.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:09:13.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:09:13.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.755673
2026-04-11T20:09:13.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:09:13.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:09:13.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:09:13.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:09:13.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:09:13.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:08:43', tmtdew=0.00636, humidity=99.8839, cloud=0.0, wind=16.0207, temperature=12.444, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:08:10.147', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:09:13.169 [DEBUG] [Thread-176044] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:09:13.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:09:13.275 [DEBUG] [Thread-176047] [transport.py] [_log()] starting thread (client mode): 0xae509570
2026-04-11T20:09:13.275 [DEBUG] [Thread-176047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:09:13.290 [DEBUG] [Thread-176047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:09:13.290 [INFO] [Thread-176047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:09:13.298 [DEBUG] [Thread-176047] [transport.py] [_log()] client lang: <none>
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] server lang: <none>
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] kex follows: False
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] Compression: none
2026-04-11T20:09:13.299 [DEBUG] [Thread-176047] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:09:13.355 [DEBUG] [Thread-176047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:09:13.356 [DEBUG] [Thread-176047] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:09:13.356 [DEBUG] [Thread-176047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:09:13.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:09:13.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:09:13.410 [DEBUG] [Thread-176047] [transport.py] [_log()] userauth is OK
2026-04-11T20:09:13.410 [DEBUG] [Thread-176047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:09:13.410 [DEBUG] [Thread-176047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:09:13.411 [DEBUG] [Thread-176047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:09:13.411 [DEBUG] [Thread-176047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:09:13.424 [INFO] [Thread-176047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:09:13.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:09:13.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:09:14.240 [DEBUG] [Thread-176047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:09:14.241 [DEBUG] [Thread-176047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:09:14.288 [DEBUG] [Thread-176047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:09:14.288 [DEBUG] [Thread-176047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:09:14.297 [DEBUG] [Thread-176047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:09:14.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:09:14.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:09:14.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-04-11T20:09:14.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:09:14.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:09:14.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:09:14.334 [DEBUG] [Thread-176047] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:09:25.411 [DEBUG] [Thread-176049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:28.802 [DEBUG] [Thread-176050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:40.462 [DEBUG] [Thread-176051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:09:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:09:44.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:09:44.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-04-11T20:09:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 9, 19), 0.04817, 99.9751, 0.0, 12.9341, 11.9723, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:09:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:09:19
2026-04-11T20:09:45.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:09:46.162 [DEBUG] [Thread-176052] [transport.py] [_log()] starting thread (client mode): 0xae5a73a0
2026-04-11T20:09:46.162 [DEBUG] [Thread-176052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:09:46.182 [DEBUG] [Thread-176052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:09:46.182 [INFO] [Thread-176052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:09:46.185 [DEBUG] [Thread-176052] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] client lang: <none>
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] server lang: <none>
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] kex follows: False
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] Compression: none
2026-04-11T20:09:46.186 [DEBUG] [Thread-176052] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:09:46.201 [DEBUG] [Thread-176052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:09:46.201 [DEBUG] [Thread-176052] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:09:46.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:09:46.202 [DEBUG] [Thread-176052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:09:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:09:46.204 [DEBUG] [Thread-176052] [transport.py] [_log()] userauth is OK
2026-04-11T20:09:46.204 [DEBUG] [Thread-176052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:09:46.204 [DEBUG] [Thread-176052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:09:46.204 [DEBUG] [Thread-176052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:09:46.204 [DEBUG] [Thread-176052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:09:46.222 [INFO] [Thread-176052] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:09:46.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:09:46.959 [DEBUG] [Thread-176052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:09:46.959 [DEBUG] [Thread-176052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:09:46.960 [DEBUG] [Thread-176052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:09:47.001 [DEBUG] [Thread-176052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:09:47.001 [DEBUG] [Thread-176052] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:09:47.004 [DEBUG] [Thread-176052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:09:47.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:09:47.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:09:47.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:09:47.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:09:47.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:09:47.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:09:47.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.756367 -999.00  +11.90   8.52     97  +11.50 1 3 1 3 1     0    0 0.38 0.45 ----- 8.5 8.5 283.4 13.2 13.1 -0.6 12.9 -0.7 12.5 -0.8 12.9 -0.5
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.756367
2026-04-11T20:09:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:09:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:09:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:09:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:09:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:09:47.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:09:19', tmtdew=0.04817, humidity=99.9751, cloud=0.0, wind=12.9341, temperature=11.9723, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:09:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:09:47.036 [DEBUG] [Thread-176052] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:09:47.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:09:47.117 [DEBUG] [Thread-176055] [transport.py] [_log()] starting thread (client mode): 0xb0f54340
2026-04-11T20:09:47.117 [DEBUG] [Thread-176055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:09:47.132 [DEBUG] [Thread-176055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:09:47.132 [INFO] [Thread-176055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:09:47.139 [DEBUG] [Thread-176055] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] client lang: <none>
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] server lang: <none>
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] kex follows: False
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] Compression: none
2026-04-11T20:09:47.140 [DEBUG] [Thread-176055] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:09:47.199 [DEBUG] [Thread-176055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:09:47.200 [DEBUG] [Thread-176055] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:09:47.201 [DEBUG] [Thread-176055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:09:47.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:09:47.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:09:47.256 [DEBUG] [Thread-176055] [transport.py] [_log()] userauth is OK
2026-04-11T20:09:47.256 [DEBUG] [Thread-176055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:09:47.256 [DEBUG] [Thread-176055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:09:47.256 [DEBUG] [Thread-176055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:09:47.256 [DEBUG] [Thread-176055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:09:47.275 [INFO] [Thread-176055] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:09:47.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:09:47.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:09:48.120 [DEBUG] [Thread-176055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:09:48.120 [DEBUG] [Thread-176055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:09:48.168 [DEBUG] [Thread-176055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:09:48.168 [DEBUG] [Thread-176055] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:09:48.177 [DEBUG] [Thread-176055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:09:48.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:09:48.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:09:48.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:09:48.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:09:48.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:09:48.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:09:48.210 [DEBUG] [Thread-176055] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:09:55.499 [DEBUG] [Thread-176057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:10.560 [DEBUG] [Thread-176058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:12.610 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:12.611 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:10:18.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:10:18.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-04-11T20:10:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 9, 54), 0.01645, 99.8184, 0.0, 14.292, 12.3119, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:10:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:09:54
2026-04-11T20:10:19.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:10:20.038 [DEBUG] [Thread-176059] [transport.py] [_log()] starting thread (client mode): 0xae516500
2026-04-11T20:10:20.038 [DEBUG] [Thread-176059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:10:20.057 [DEBUG] [Thread-176059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:10:20.057 [INFO] [Thread-176059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:10:20.060 [DEBUG] [Thread-176059] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] client lang: <none>
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] server lang: <none>
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] kex follows: False
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] Compression: none
2026-04-11T20:10:20.061 [DEBUG] [Thread-176059] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:10:20.078 [DEBUG] [Thread-176059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:10:20.078 [DEBUG] [Thread-176059] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:10:20.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:10:20.079 [DEBUG] [Thread-176059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:10:20.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:10:20.081 [DEBUG] [Thread-176059] [transport.py] [_log()] userauth is OK
2026-04-11T20:10:20.081 [DEBUG] [Thread-176059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:10:20.081 [DEBUG] [Thread-176059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:10:20.082 [DEBUG] [Thread-176059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:10:20.082 [DEBUG] [Thread-176059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:10:20.105 [INFO] [Thread-176059] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:10:20.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:10:21.171 [DEBUG] [Thread-176059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:10:21.171 [DEBUG] [Thread-176059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:10:21.171 [DEBUG] [Thread-176059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:10:21.213 [DEBUG] [Thread-176059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:10:21.213 [DEBUG] [Thread-176059] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:10:21.216 [DEBUG] [Thread-176059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:10:21.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:10:21.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:10:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:10:21.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:10:21.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:10:21.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:10:21.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:10:21.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:10:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:10:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.757061 -999.00  +11.90   9.90     97  +11.60 1 3 1 3 1     0    0 0.35 -0.55 ----- 9.9 9.9 282.2 14.1 13.2 -0.5 12.9 -0.4 12.6 -0.9 13.0 -0.7
2026-04-11T20:10:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:10:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:10:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.757061
2026-04-11T20:10:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:10:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:10:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:10:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:10:21.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:10:21.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:09:54', tmtdew=0.01645, humidity=99.8184, cloud=0.0, wind=14.292, temperature=12.3119, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:10:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:10:21.247 [DEBUG] [Thread-176059] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:10:21.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:10:21.340 [DEBUG] [Thread-176062] [transport.py] [_log()] starting thread (client mode): 0xae515d80
2026-04-11T20:10:21.340 [DEBUG] [Thread-176062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:10:21.354 [DEBUG] [Thread-176062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:10:21.355 [INFO] [Thread-176062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:10:21.362 [DEBUG] [Thread-176062] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:10:21.362 [DEBUG] [Thread-176062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] client lang: <none>
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] server lang: <none>
2026-04-11T20:10:21.363 [DEBUG] [Thread-176062] [transport.py] [_log()] kex follows: False
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] Compression: none
2026-04-11T20:10:21.364 [DEBUG] [Thread-176062] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:10:21.420 [DEBUG] [Thread-176062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:10:21.421 [DEBUG] [Thread-176062] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:10:21.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:10:21.422 [DEBUG] [Thread-176062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:10:21.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:10:21.479 [DEBUG] [Thread-176062] [transport.py] [_log()] userauth is OK
2026-04-11T20:10:21.479 [DEBUG] [Thread-176062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:10:21.479 [DEBUG] [Thread-176062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:10:21.480 [DEBUG] [Thread-176062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:10:21.480 [DEBUG] [Thread-176062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:10:21.502 [INFO] [Thread-176062] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:10:21.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:10:21.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:10:22.336 [DEBUG] [Thread-176062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:10:22.337 [DEBUG] [Thread-176062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:10:22.384 [DEBUG] [Thread-176062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:10:22.384 [DEBUG] [Thread-176062] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:10:22.393 [DEBUG] [Thread-176062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:10:22.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:10:22.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:10:22.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-04-11T20:10:22.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:10:22.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:10:22.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:10:22.430 [DEBUG] [Thread-176062] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:10:25.602 [DEBUG] [Thread-176064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:28.868 [DEBUG] [Thread-176065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:40.651 [DEBUG] [Thread-176066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:52.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:10:52.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:10:52.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-04-11T20:10:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 10, 30), 0.053165, 99.9424, 0.0, 9.79344, 12.0225, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:10:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:10:30
2026-04-11T20:10:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:10:54.278 [DEBUG] [Thread-176067] [transport.py] [_log()] starting thread (client mode): 0xb0fb4250
2026-04-11T20:10:54.278 [DEBUG] [Thread-176067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:10:54.295 [DEBUG] [Thread-176067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:10:54.295 [INFO] [Thread-176067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] client lang: <none>
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] server lang: <none>
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] kex follows: False
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:10:54.298 [DEBUG] [Thread-176067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:10:54.299 [DEBUG] [Thread-176067] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:10:54.299 [DEBUG] [Thread-176067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:10:54.299 [DEBUG] [Thread-176067] [transport.py] [_log()] Compression: none
2026-04-11T20:10:54.299 [DEBUG] [Thread-176067] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:10:54.313 [DEBUG] [Thread-176067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:10:54.314 [DEBUG] [Thread-176067] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:10:54.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:10:54.314 [DEBUG] [Thread-176067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:10:54.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:10:54.315 [DEBUG] [Thread-176067] [transport.py] [_log()] userauth is OK
2026-04-11T20:10:54.315 [DEBUG] [Thread-176067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:10:54.316 [DEBUG] [Thread-176067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:10:54.316 [DEBUG] [Thread-176067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:10:54.316 [DEBUG] [Thread-176067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:10:54.328 [INFO] [Thread-176067] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:10:54.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:10:54.907 [DEBUG] [Thread-176067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:10:54.907 [DEBUG] [Thread-176067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:10:54.907 [DEBUG] [Thread-176067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:10:54.948 [DEBUG] [Thread-176067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:10:54.948 [DEBUG] [Thread-176067] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:10:54.951 [DEBUG] [Thread-176067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:10:54.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:10:54.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:10:54.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:10:54.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:10:54.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:10:54.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:10:54.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:10:54.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:10:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:10:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.757409 -999.00  +11.90  13.06     97  +11.60 1 3 1 3 1     0    0 0.34 -0.84 ----- 13.1 13.1 270.2 16.4 13.2 -0.7 12.9 -0.6 12.6 -0.8 13.0 -0.6
2026-04-11T20:10:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:10:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:10:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.757409
2026-04-11T20:10:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:10:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:10:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:10:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:10:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:10:54.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:10:30', tmtdew=0.053165, humidity=99.9424, cloud=0.0, wind=9.79344, temperature=12.0225, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:10:40.138', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:10:54.975 [DEBUG] [Thread-176067] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:10:55.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:10:55.067 [DEBUG] [Thread-176070] [transport.py] [_log()] starting thread (client mode): 0xb0fb5a80
2026-04-11T20:10:55.067 [DEBUG] [Thread-176070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:10:55.081 [DEBUG] [Thread-176070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:10:55.082 [INFO] [Thread-176070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:10:55.089 [DEBUG] [Thread-176070] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:10:55.089 [DEBUG] [Thread-176070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:10:55.089 [DEBUG] [Thread-176070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] client lang: <none>
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] server lang: <none>
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] kex follows: False
2026-04-11T20:10:55.090 [DEBUG] [Thread-176070] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:10:55.091 [DEBUG] [Thread-176070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:10:55.091 [DEBUG] [Thread-176070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:10:55.091 [DEBUG] [Thread-176070] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:10:55.091 [DEBUG] [Thread-176070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:10:55.091 [DEBUG] [Thread-176070] [transport.py] [_log()] Compression: none
2026-04-11T20:10:55.091 [DEBUG] [Thread-176070] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:10:55.147 [DEBUG] [Thread-176070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:10:55.147 [DEBUG] [Thread-176070] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:10:55.148 [DEBUG] [Thread-176070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:10:55.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:10:55.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:10:55.203 [DEBUG] [Thread-176070] [transport.py] [_log()] userauth is OK
2026-04-11T20:10:55.204 [DEBUG] [Thread-176070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:10:55.204 [DEBUG] [Thread-176070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:10:55.205 [DEBUG] [Thread-176070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:10:55.205 [DEBUG] [Thread-176070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:10:55.229 [INFO] [Thread-176070] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:10:55.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:10:55.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:10:55.691 [DEBUG] [Thread-176072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:10:56.038 [DEBUG] [Thread-176070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:10:56.038 [DEBUG] [Thread-176070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:10:56.086 [DEBUG] [Thread-176070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:10:56.086 [DEBUG] [Thread-176070] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:10:56.096 [DEBUG] [Thread-176070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:10:56.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:10:56.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:10:56.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:10:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:10:56.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:10:56.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:10:56.133 [DEBUG] [Thread-176070] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:11:10.742 [DEBUG] [Thread-176073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:12.818 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:12.819 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:25.778 [DEBUG] [Thread-176074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:11:26.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:11:26.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-04-11T20:11:27.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 11, 5), 0.050635, 99.9589, 0.0, 11.4692, 12.0391, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:11:27.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:11:05
2026-04-11T20:11:27.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:11:28.027 [DEBUG] [Thread-176075] [transport.py] [_log()] starting thread (client mode): 0xae509d20
2026-04-11T20:11:28.027 [DEBUG] [Thread-176075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:11:28.048 [DEBUG] [Thread-176075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:11:28.048 [INFO] [Thread-176075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:11:28.050 [DEBUG] [Thread-176075] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] client lang: <none>
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] server lang: <none>
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] kex follows: False
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] Compression: none
2026-04-11T20:11:28.051 [DEBUG] [Thread-176075] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:11:28.065 [DEBUG] [Thread-176075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:11:28.065 [DEBUG] [Thread-176075] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:11:28.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:11:28.066 [DEBUG] [Thread-176075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:11:28.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:11:28.069 [DEBUG] [Thread-176075] [transport.py] [_log()] userauth is OK
2026-04-11T20:11:28.069 [DEBUG] [Thread-176075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:11:28.069 [DEBUG] [Thread-176075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:11:28.069 [DEBUG] [Thread-176075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:11:28.069 [DEBUG] [Thread-176075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:11:28.090 [INFO] [Thread-176075] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:11:28.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:11:28.695 [DEBUG] [Thread-176075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:11:28.696 [DEBUG] [Thread-176075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:11:28.697 [DEBUG] [Thread-176075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:11:28.736 [DEBUG] [Thread-176075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:11:28.736 [DEBUG] [Thread-176075] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:11:28.739 [DEBUG] [Thread-176075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:11:28.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:11:28.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:11:28.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:11:28.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:11:28.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:11:28.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:11:28.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:11:28.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:11:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:11:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.757756 -999.00  +11.90  13.29     97  +11.50 1 3 1 3 1     0    0 0.34 -0.64 ----- 13.3 13.3 273.2 15.4 13.2 -0.6 13.0 -0.6 12.6 -0.9 13.0 -0.5
2026-04-11T20:11:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:11:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:11:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.757756
2026-04-11T20:11:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:11:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:11:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:11:28.770 [DEBUG] [Thread-176075] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:11:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:11:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:11:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:11:05', tmtdew=0.050635, humidity=99.9589, cloud=0.0, wind=11.4692, temperature=12.0391, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:11:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:11:28.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:11:28.864 [DEBUG] [Thread-176078] [transport.py] [_log()] starting thread (client mode): 0xb0fb41f0
2026-04-11T20:11:28.864 [DEBUG] [Thread-176078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:11:28.878 [DEBUG] [Thread-176078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:11:28.878 [INFO] [Thread-176078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:11:28.885 [DEBUG] [Thread-176078] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:11:28.885 [DEBUG] [Thread-176078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:11:28.885 [DEBUG] [Thread-176078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:11:28.885 [DEBUG] [Thread-176078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:11:28.885 [DEBUG] [Thread-176078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:11:28.885 [DEBUG] [Thread-176078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] client lang: <none>
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] server lang: <none>
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] kex follows: False
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] Compression: none
2026-04-11T20:11:28.886 [DEBUG] [Thread-176078] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:11:28.918 [DEBUG] [Thread-176080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:28.947 [DEBUG] [Thread-176078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:11:28.947 [DEBUG] [Thread-176078] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:11:28.948 [DEBUG] [Thread-176078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:11:28.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:11:28.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:11:29.003 [DEBUG] [Thread-176078] [transport.py] [_log()] userauth is OK
2026-04-11T20:11:29.003 [DEBUG] [Thread-176078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:11:29.004 [DEBUG] [Thread-176078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:11:29.004 [DEBUG] [Thread-176078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:11:29.004 [DEBUG] [Thread-176078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:11:29.022 [INFO] [Thread-176078] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:11:29.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:11:29.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:11:29.846 [DEBUG] [Thread-176078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:11:29.846 [DEBUG] [Thread-176078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:11:29.894 [DEBUG] [Thread-176078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:11:29.894 [DEBUG] [Thread-176078] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:11:29.904 [DEBUG] [Thread-176078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:11:29.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:11:29.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-04-11T20:11:29.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-04-11T20:11:29.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:11:29.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:11:29.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:11:29.940 [DEBUG] [Thread-176078] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:11:40.816 [DEBUG] [Thread-176081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:55.871 [DEBUG] [Thread-176082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:11:59.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:11:59.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:11: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-04-11T20:12:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 11, 40), -0.01398, 100.017, 0.0, 13.9392, 12.4776, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:12:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:11:40
2026-04-11T20:12:01.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:12:01.845 [DEBUG] [Thread-176083] [transport.py] [_log()] starting thread (client mode): 0xae514c10
2026-04-11T20:12:01.845 [DEBUG] [Thread-176083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:12:01.861 [DEBUG] [Thread-176083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:12:01.861 [INFO] [Thread-176083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] client lang: <none>
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] server lang: <none>
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] kex follows: False
2026-04-11T20:12:01.863 [DEBUG] [Thread-176083] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:12:01.864 [DEBUG] [Thread-176083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:12:01.864 [DEBUG] [Thread-176083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:12:01.864 [DEBUG] [Thread-176083] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:12:01.864 [DEBUG] [Thread-176083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:12:01.864 [DEBUG] [Thread-176083] [transport.py] [_log()] Compression: none
2026-04-11T20:12:01.864 [DEBUG] [Thread-176083] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:12:01.880 [DEBUG] [Thread-176083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:12:01.880 [DEBUG] [Thread-176083] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:12:01.881 [DEBUG] [Thread-176083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:12:01.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:12:01.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:12:01.883 [DEBUG] [Thread-176083] [transport.py] [_log()] userauth is OK
2026-04-11T20:12:01.883 [DEBUG] [Thread-176083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:12:01.883 [DEBUG] [Thread-176083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:12:01.883 [DEBUG] [Thread-176083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:12:01.883 [DEBUG] [Thread-176083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:12:01.908 [INFO] [Thread-176083] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:12:01.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:12:02.527 [DEBUG] [Thread-176083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:12:02.527 [DEBUG] [Thread-176083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:12:02.527 [DEBUG] [Thread-176083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:12:02.568 [DEBUG] [Thread-176083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:12:02.568 [DEBUG] [Thread-176083] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:12:02.571 [DEBUG] [Thread-176083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:12:02.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:12:02.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:12:02.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:12:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:12:02.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:12:02.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:12:02.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:12:02.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:12:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:12:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.758103 -999.00  +11.90  11.16     97  +11.60 1 3 1 3 1     0    0 0.34 -0.56 ----- 11.2 11.2 274.1 11.7 13.1 -0.7 12.9 -0.5 12.7 -0.4 13.0 -0.6
2026-04-11T20:12:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:12:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:12:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.758103
2026-04-11T20:12:02.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:12:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:12:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:12:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:12:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:12:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:11:40', tmtdew=-0.01398, humidity=100.017, cloud=0.0, wind=13.9392, temperature=12.4776, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:11:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:12:02.595 [DEBUG] [Thread-176083] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:12:02.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:12:02.687 [DEBUG] [Thread-176086] [transport.py] [_log()] starting thread (client mode): 0xa7950b20
2026-04-11T20:12:02.687 [DEBUG] [Thread-176086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:12:02.702 [DEBUG] [Thread-176086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:12:02.702 [INFO] [Thread-176086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:02.710 [DEBUG] [Thread-176086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] client lang: <none>
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] server lang: <none>
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] kex follows: False
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:12:02.711 [DEBUG] [Thread-176086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:12:02.712 [DEBUG] [Thread-176086] [transport.py] [_log()] Compression: none
2026-04-11T20:12:02.712 [DEBUG] [Thread-176086] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:12:02.767 [DEBUG] [Thread-176086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:12:02.768 [DEBUG] [Thread-176086] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:12:02.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:12:02.769 [DEBUG] [Thread-176086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:12:02.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:12:02.823 [DEBUG] [Thread-176086] [transport.py] [_log()] userauth is OK
2026-04-11T20:12:02.823 [DEBUG] [Thread-176086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:12:02.824 [DEBUG] [Thread-176086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:12:02.824 [DEBUG] [Thread-176086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:12:02.824 [DEBUG] [Thread-176086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:12:02.843 [INFO] [Thread-176086] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:12:02.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:12:02.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:12:03.673 [DEBUG] [Thread-176086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:12:03.673 [DEBUG] [Thread-176086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:12:03.722 [DEBUG] [Thread-176086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:12:03.722 [DEBUG] [Thread-176086] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:12:03.736 [DEBUG] [Thread-176086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:12:03.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:12:03.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:12:03.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:12:03.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:12:03.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:12:03.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:12:03.773 [DEBUG] [Thread-176086] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:12:10.908 [DEBUG] [Thread-176088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:12:13.023 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:12:13.024 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:12:25.961 [DEBUG] [Thread-176089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:12:28.976 [DEBUG] [Thread-176090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:12:33.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:12:33.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:12:33.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:12:35.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 12, 16), -0.004455, 99.992, 0.0, 14.152, 11.9888, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:12:35.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:12:16
2026-04-11T20:12:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:12:35.610 [DEBUG] [Thread-176091] [transport.py] [_log()] starting thread (client mode): 0xb0f56b30
2026-04-11T20:12:35.610 [DEBUG] [Thread-176091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:12:35.622 [DEBUG] [Thread-176091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:12:35.622 [INFO] [Thread-176091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] client lang: <none>
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] server lang: <none>
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] kex follows: False
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] Compression: none
2026-04-11T20:12:35.623 [DEBUG] [Thread-176091] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:12:35.631 [DEBUG] [Thread-176091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:12:35.631 [DEBUG] [Thread-176091] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:12:35.632 [DEBUG] [Thread-176091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:12:35.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:12:35.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:12:35.633 [DEBUG] [Thread-176091] [transport.py] [_log()] userauth is OK
2026-04-11T20:12:35.633 [DEBUG] [Thread-176091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:12:35.633 [DEBUG] [Thread-176091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:12:35.633 [DEBUG] [Thread-176091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:12:35.633 [DEBUG] [Thread-176091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:12:35.647 [INFO] [Thread-176091] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:12:35.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:12:36.263 [DEBUG] [Thread-176091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:12:36.264 [DEBUG] [Thread-176091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:12:36.264 [DEBUG] [Thread-176091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:12:36.305 [DEBUG] [Thread-176091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:12:36.305 [DEBUG] [Thread-176091] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:12:36.307 [DEBUG] [Thread-176091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:12:36.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:12:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:12:36.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:12:36.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:12:36.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:12:36.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:12:36.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:12:36.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:12:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:12:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.758450 -999.00  +11.90  11.39     97  +11.60 1 3 1 3 1     0    0 0.32 -0.95 ----- 11.4 11.4 286.2 13.8 13.1 -0.6 13.0 -0.7 12.6 -1.0 13.0 -0.6
2026-04-11T20:12:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:12:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:12:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.758450
2026-04-11T20:12:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:12:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:12:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:12:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:12:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:12:36.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:12:16', tmtdew=-0.004455, humidity=99.992, cloud=0.0, wind=14.152, temperature=11.9888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:12:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:12:36.326 [DEBUG] [Thread-176091] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:12: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-04-11T20:12:36.422 [DEBUG] [Thread-176094] [transport.py] [_log()] starting thread (client mode): 0xae5176a0
2026-04-11T20:12:36.422 [DEBUG] [Thread-176094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:12:36.437 [DEBUG] [Thread-176094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:12:36.437 [INFO] [Thread-176094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:12:36.445 [DEBUG] [Thread-176094] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:12:36.445 [DEBUG] [Thread-176094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:12:36.445 [DEBUG] [Thread-176094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:12:36.445 [DEBUG] [Thread-176094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:36.445 [DEBUG] [Thread-176094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:12:36.445 [DEBUG] [Thread-176094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] client lang: <none>
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] server lang: <none>
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] kex follows: False
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:12:36.446 [DEBUG] [Thread-176094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:12:36.447 [DEBUG] [Thread-176094] [transport.py] [_log()] Compression: none
2026-04-11T20:12:36.447 [DEBUG] [Thread-176094] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:12:36.502 [DEBUG] [Thread-176094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:12:36.502 [DEBUG] [Thread-176094] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:12:36.503 [DEBUG] [Thread-176094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:12:36.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:12:36.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:12:36.558 [DEBUG] [Thread-176094] [transport.py] [_log()] userauth is OK
2026-04-11T20:12:36.559 [DEBUG] [Thread-176094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:12:36.559 [DEBUG] [Thread-176094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:12:36.559 [DEBUG] [Thread-176094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:12:36.559 [DEBUG] [Thread-176094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:12:36.578 [INFO] [Thread-176094] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:12:36.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:12:36.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:12:37.367 [DEBUG] [Thread-176094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:12:37.367 [DEBUG] [Thread-176094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:12:37.414 [DEBUG] [Thread-176094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:12:37.415 [DEBUG] [Thread-176094] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:12:37.423 [DEBUG] [Thread-176094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:12:37.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:12:37.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-04-11T20:12:37.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-04-11T20:12:37.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:12:37.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:12:37.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:12:37.458 [DEBUG] [Thread-176094] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:12:40.992 [DEBUG] [Thread-176096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:12:56.047 [DEBUG] [Thread-176097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:07.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:13:07.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:13:07.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-04-11T20:13:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 12, 52), -0.0038, 99.9506, 0.0, 14.2567, 12.4443, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:13:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:12:52
2026-04-11T20:13:09.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:13:09.462 [DEBUG] [Thread-176098] [transport.py] [_log()] starting thread (client mode): 0xae516e30
2026-04-11T20:13:09.462 [DEBUG] [Thread-176098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:13:09.477 [DEBUG] [Thread-176098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:13:09.477 [INFO] [Thread-176098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] client lang: <none>
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] server lang: <none>
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] kex follows: False
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] Compression: none
2026-04-11T20:13:09.479 [DEBUG] [Thread-176098] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:13:09.490 [DEBUG] [Thread-176098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:13:09.491 [DEBUG] [Thread-176098] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:13:09.491 [DEBUG] [Thread-176098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:13:09.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:13:09.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:13:09.493 [DEBUG] [Thread-176098] [transport.py] [_log()] userauth is OK
2026-04-11T20:13:09.493 [DEBUG] [Thread-176098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:13:09.493 [DEBUG] [Thread-176098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:13:09.493 [DEBUG] [Thread-176098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:13:09.493 [DEBUG] [Thread-176098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:13:09.507 [INFO] [Thread-176098] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:13:09.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:13:10.139 [DEBUG] [Thread-176098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:13:10.139 [DEBUG] [Thread-176098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:13:10.139 [DEBUG] [Thread-176098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:13:10.180 [DEBUG] [Thread-176098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:13:10.180 [DEBUG] [Thread-176098] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:13:10.183 [DEBUG] [Thread-176098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:13:10.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:13:10.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:13:10.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:13:10.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:13:10.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:13:10.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:13:10.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:13:10.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:13:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:13:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.758797 -999.00  +11.90   9.76     97  +11.50 1 3 1 3 1     0    0 0.32 -1.09 ----- 9.8 9.8 285.6 16.6 13.2 -0.7 12.9 -0.9 12.6 -1.5 12.9 -0.8
2026-04-11T20:13:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:13:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:13:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.758797
2026-04-11T20:13:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:13:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:13:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:13:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:13:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:13:10.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:12:52', tmtdew=-0.0038, humidity=99.9506, cloud=0.0, wind=14.2567, temperature=12.4443, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:12:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:13:10.210 [DEBUG] [Thread-176098] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:13:10.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:13:10.303 [DEBUG] [Thread-176101] [transport.py] [_log()] starting thread (client mode): 0xae518070
2026-04-11T20:13:10.303 [DEBUG] [Thread-176101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:13:10.318 [DEBUG] [Thread-176101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:13:10.319 [INFO] [Thread-176101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:13:10.326 [DEBUG] [Thread-176101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:13:10.326 [DEBUG] [Thread-176101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:13:10.326 [DEBUG] [Thread-176101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] client lang: <none>
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] server lang: <none>
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] kex follows: False
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] Compression: none
2026-04-11T20:13:10.327 [DEBUG] [Thread-176101] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:13:10.387 [DEBUG] [Thread-176101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:13:10.388 [DEBUG] [Thread-176101] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:13:10.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:13:10.389 [DEBUG] [Thread-176101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:13:10.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:13:10.443 [DEBUG] [Thread-176101] [transport.py] [_log()] userauth is OK
2026-04-11T20:13:10.443 [DEBUG] [Thread-176101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:13:10.443 [DEBUG] [Thread-176101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:13:10.443 [DEBUG] [Thread-176101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:13:10.444 [DEBUG] [Thread-176101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:13:10.468 [INFO] [Thread-176101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:13:10.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:13:10.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:13:11.083 [DEBUG] [Thread-176103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:11.287 [DEBUG] [Thread-176101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:13:11.288 [DEBUG] [Thread-176101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:13:11.336 [DEBUG] [Thread-176101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:13:11.336 [DEBUG] [Thread-176101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:13:11.346 [DEBUG] [Thread-176101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:13:11.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:13:11.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:13:11.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:13:11.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:13:11.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:13:11.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:13:11.383 [DEBUG] [Thread-176101] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:13:13.229 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:13.231 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:26.134 [DEBUG] [Thread-176104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:29.050 [DEBUG] [Thread-176105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:41.171 [DEBUG] [Thread-176106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:13:41.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:13:41.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:13:41.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-04-11T20:13:42.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 13, 27), 0.045555, 99.9919, 0.0, 11.029, 12.0387, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:13:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:13:27
2026-04-11T20:13:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:13:43.283 [DEBUG] [Thread-176107] [transport.py] [_log()] starting thread (client mode): 0xae509210
2026-04-11T20:13:43.283 [DEBUG] [Thread-176107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:13:43.297 [DEBUG] [Thread-176107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:13:43.297 [INFO] [Thread-176107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] client lang: <none>
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] server lang: <none>
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] kex follows: False
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:13:43.300 [DEBUG] [Thread-176107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:13:43.301 [DEBUG] [Thread-176107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:13:43.301 [DEBUG] [Thread-176107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:13:43.301 [DEBUG] [Thread-176107] [transport.py] [_log()] Compression: none
2026-04-11T20:13:43.301 [DEBUG] [Thread-176107] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:13:43.319 [DEBUG] [Thread-176107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:13:43.320 [DEBUG] [Thread-176107] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:13:43.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:13:43.322 [DEBUG] [Thread-176107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:13:43.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:13:43.324 [DEBUG] [Thread-176107] [transport.py] [_log()] userauth is OK
2026-04-11T20:13:43.324 [DEBUG] [Thread-176107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:13:43.324 [DEBUG] [Thread-176107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:13:43.324 [DEBUG] [Thread-176107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:13:43.324 [DEBUG] [Thread-176107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:13:43.348 [INFO] [Thread-176107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:13:43.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:13:43.954 [DEBUG] [Thread-176107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:13:43.954 [DEBUG] [Thread-176107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:13:43.954 [DEBUG] [Thread-176107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:13:43.995 [DEBUG] [Thread-176107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:13:43.995 [DEBUG] [Thread-176107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:13:43.998 [DEBUG] [Thread-176107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:13:44.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:13:44.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:13:44.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:13:44.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:13:44.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:13:44.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:13:44.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:13:44.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:13:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:13:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.759145 -999.00  +11.90   9.59     97  +11.50 1 3 1 3 1     0    0 0.34 -0.70 ----- 9.6 9.6 287.6 12.1 13.1 -0.6 13.0 -0.7 12.6 -1.2 13.0 -0.4
2026-04-11T20:13:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:13:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:13:44.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.759145
2026-04-11T20:13:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:13:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:13:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:13:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:13:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:13:44.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:13:27', tmtdew=0.045555, humidity=99.9919, cloud=0.0, wind=11.029, temperature=12.0387, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:13:10.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:13:44.026 [DEBUG] [Thread-176107] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:13:44.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:13:44.118 [DEBUG] [Thread-176110] [transport.py] [_log()] starting thread (client mode): 0xae517640
2026-04-11T20:13:44.118 [DEBUG] [Thread-176110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:13:44.134 [DEBUG] [Thread-176110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:13:44.134 [INFO] [Thread-176110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:13:44.141 [DEBUG] [Thread-176110] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:13:44.141 [DEBUG] [Thread-176110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] client lang: <none>
2026-04-11T20:13:44.142 [DEBUG] [Thread-176110] [transport.py] [_log()] server lang: <none>
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] kex follows: False
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] Compression: none
2026-04-11T20:13:44.143 [DEBUG] [Thread-176110] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:13:44.199 [DEBUG] [Thread-176110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:13:44.199 [DEBUG] [Thread-176110] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:13:44.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:13:44.200 [DEBUG] [Thread-176110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:13:44.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:13:44.255 [DEBUG] [Thread-176110] [transport.py] [_log()] userauth is OK
2026-04-11T20:13:44.255 [DEBUG] [Thread-176110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:13:44.255 [DEBUG] [Thread-176110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:13:44.255 [DEBUG] [Thread-176110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:13:44.256 [DEBUG] [Thread-176110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:13:44.273 [INFO] [Thread-176110] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:13:44.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:13:44.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:13:45.088 [DEBUG] [Thread-176110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:13:45.088 [DEBUG] [Thread-176110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:13:45.137 [DEBUG] [Thread-176110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:13:45.137 [DEBUG] [Thread-176110] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:13:45.146 [DEBUG] [Thread-176110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:13:45.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:13:45.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-04-11T20:13:45.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-04-11T20:13:45.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:13:45.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:13:45.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:13:45.181 [DEBUG] [Thread-176110] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:13:56.209 [DEBUG] [Thread-176112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:11.261 [DEBUG] [Thread-176113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:13.436 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:13.437 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:15.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:14:15.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:14:15.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-04-11T20:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 14, 3), 0.05315, 99.9422, 0.0, 12.8282, 12.0221, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:14:16.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:14:03
2026-04-11T20:14:16.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:14:17.071 [DEBUG] [Thread-176114] [transport.py] [_log()] starting thread (client mode): 0xa79517e0
2026-04-11T20:14:17.072 [DEBUG] [Thread-176114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:14:17.091 [DEBUG] [Thread-176114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:14:17.091 [INFO] [Thread-176114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:14:17.094 [DEBUG] [Thread-176114] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] client lang: <none>
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] server lang: <none>
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] kex follows: False
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:14:17.095 [DEBUG] [Thread-176114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:14:17.096 [DEBUG] [Thread-176114] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:14:17.096 [DEBUG] [Thread-176114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:14:17.096 [DEBUG] [Thread-176114] [transport.py] [_log()] Compression: none
2026-04-11T20:14:17.096 [DEBUG] [Thread-176114] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:14:17.108 [DEBUG] [Thread-176114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:14:17.109 [DEBUG] [Thread-176114] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:14:17.110 [DEBUG] [Thread-176114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:14:17.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:14:17.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:14:17.111 [DEBUG] [Thread-176114] [transport.py] [_log()] userauth is OK
2026-04-11T20:14:17.112 [DEBUG] [Thread-176114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:14:17.112 [DEBUG] [Thread-176114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:14:17.112 [DEBUG] [Thread-176114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:14:17.112 [DEBUG] [Thread-176114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:14:17.132 [INFO] [Thread-176114] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:14:17.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:14:17.797 [DEBUG] [Thread-176114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:14:17.797 [DEBUG] [Thread-176114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:14:17.797 [DEBUG] [Thread-176114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:14:17.837 [DEBUG] [Thread-176114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:14:17.837 [DEBUG] [Thread-176114] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:14:17.839 [DEBUG] [Thread-176114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:14:17.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:14:17.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:14:17.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:14:17.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:14:17.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:14:17.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:14:17.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:14:17.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:14:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:14:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.759839 -999.00  +11.90  11.45     97  +11.60 1 3 1 3 1     0    0 0.33 -0.81 ----- 11.4 11.4 268.8 14.0 13.2 -0.5 12.9 -0.6 12.7 -0.6 13.0 -0.1
2026-04-11T20:14:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:14:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:14:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.759839
2026-04-11T20:14:17.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:14:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:14:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:14:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:14:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:14:17.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:14:03', tmtdew=0.05315, humidity=99.9422, cloud=0.0, wind=12.8282, temperature=12.0221, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:14:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:14:17.863 [DEBUG] [Thread-176114] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:14:17.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:14:17.961 [DEBUG] [Thread-176117] [transport.py] [_log()] starting thread (client mode): 0xae515960
2026-04-11T20:14:17.961 [DEBUG] [Thread-176117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:14:17.976 [DEBUG] [Thread-176117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:14:17.976 [INFO] [Thread-176117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:14:17.983 [DEBUG] [Thread-176117] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:17.984 [DEBUG] [Thread-176117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] client lang: <none>
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] server lang: <none>
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] kex follows: False
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:14:17.985 [DEBUG] [Thread-176117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:14:17.986 [DEBUG] [Thread-176117] [transport.py] [_log()] Compression: none
2026-04-11T20:14:17.986 [DEBUG] [Thread-176117] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:14:18.043 [DEBUG] [Thread-176117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:14:18.043 [DEBUG] [Thread-176117] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:14:18.044 [DEBUG] [Thread-176117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:14:18.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:14:18.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:14:18.098 [DEBUG] [Thread-176117] [transport.py] [_log()] userauth is OK
2026-04-11T20:14:18.099 [DEBUG] [Thread-176117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:14:18.099 [DEBUG] [Thread-176117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:14:18.099 [DEBUG] [Thread-176117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:14:18.099 [DEBUG] [Thread-176117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:14:18.117 [INFO] [Thread-176117] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:14:18.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:14:18.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:14:18.958 [DEBUG] [Thread-176117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:14:18.958 [DEBUG] [Thread-176117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:14:19.005 [DEBUG] [Thread-176117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:14:19.006 [DEBUG] [Thread-176117] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:14:19.014 [DEBUG] [Thread-176117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:14:19.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:14:19.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:14:19.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-04-11T20:14:19.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:14:19.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:14:19.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:14:19.046 [DEBUG] [Thread-176117] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:14:26.302 [DEBUG] [Thread-176119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:29.108 [DEBUG] [Thread-176120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:41.364 [DEBUG] [Thread-176121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:14:49.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:14:49.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:14:49.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-04-11T20:14:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 14, 38), -0.00385, 99.9506, 0.0, 14.3273, 12.5106, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:14:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:14:38
2026-04-11T20:14:50.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:14:50.861 [DEBUG] [Thread-176122] [transport.py] [_log()] starting thread (client mode): 0xae5f3ac0
2026-04-11T20:14:50.861 [DEBUG] [Thread-176122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:14:50.882 [DEBUG] [Thread-176122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:14:50.882 [INFO] [Thread-176122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:14:50.885 [DEBUG] [Thread-176122] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:14:50.885 [DEBUG] [Thread-176122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] client lang: <none>
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] server lang: <none>
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] kex follows: False
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:14:50.886 [DEBUG] [Thread-176122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:14:50.887 [DEBUG] [Thread-176122] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:14:50.887 [DEBUG] [Thread-176122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:14:50.887 [DEBUG] [Thread-176122] [transport.py] [_log()] Compression: none
2026-04-11T20:14:50.887 [DEBUG] [Thread-176122] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:14:50.906 [DEBUG] [Thread-176122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:14:50.906 [DEBUG] [Thread-176122] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:14:50.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:14:50.907 [DEBUG] [Thread-176122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:14:50.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:14:50.909 [DEBUG] [Thread-176122] [transport.py] [_log()] userauth is OK
2026-04-11T20:14:50.909 [DEBUG] [Thread-176122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:14:50.910 [DEBUG] [Thread-176122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:14:50.910 [DEBUG] [Thread-176122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:14:50.910 [DEBUG] [Thread-176122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:14:50.926 [INFO] [Thread-176122] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:14:50.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:14:51.562 [DEBUG] [Thread-176122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:14:51.563 [DEBUG] [Thread-176122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:14:51.563 [DEBUG] [Thread-176122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:14:51.604 [DEBUG] [Thread-176122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:14:51.604 [DEBUG] [Thread-176122] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:14:51.607 [DEBUG] [Thread-176122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:14:51.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:14:51.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:14:51.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:14:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:14:51.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:14:51.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:14:51.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:14:51.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:14:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:14:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.760186 -999.00  +12.00   8.77     97  +11.70 1 3 1 3 1     0    0 0.32 -0.99 ----- 8.8 8.8 277.6 10.8 13.2 -0.6 13.0 -0.7 12.6 -0.6 13.0 -0.2
2026-04-11T20:14:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:14:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:14:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.760186
2026-04-11T20:14:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:14:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:14:51.633 [DEBUG] [Thread-176122] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:14:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:14:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:14:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:14:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:14:38', tmtdew=-0.00385, humidity=99.9506, cloud=0.0, wind=14.3273, temperature=12.5106, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:14:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:14:51.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:14:51.728 [DEBUG] [Thread-176125] [transport.py] [_log()] starting thread (client mode): 0xae515960
2026-04-11T20:14:51.728 [DEBUG] [Thread-176125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:14:51.743 [DEBUG] [Thread-176125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:14:51.743 [INFO] [Thread-176125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:14:51.750 [DEBUG] [Thread-176125] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] client lang: <none>
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] server lang: <none>
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] kex follows: False
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] Compression: none
2026-04-11T20:14:51.751 [DEBUG] [Thread-176125] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:14:51.812 [DEBUG] [Thread-176125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:14:51.812 [DEBUG] [Thread-176125] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:14:51.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:14:51.813 [DEBUG] [Thread-176125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:14:51.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:14:51.871 [DEBUG] [Thread-176125] [transport.py] [_log()] userauth is OK
2026-04-11T20:14:51.871 [DEBUG] [Thread-176125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:14:51.872 [DEBUG] [Thread-176125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:14:51.872 [DEBUG] [Thread-176125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:14:51.872 [DEBUG] [Thread-176125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:14:51.892 [INFO] [Thread-176125] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:14:51.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:14:51.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:14:52.695 [DEBUG] [Thread-176125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:14:52.695 [DEBUG] [Thread-176125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:14:52.743 [DEBUG] [Thread-176125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:14:52.744 [DEBUG] [Thread-176125] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:14:52.752 [DEBUG] [Thread-176125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:14:52.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:14:52.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-04-11T20:14: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') -> 00000000
2026-04-11T20:14:52.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:14:52.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:14:52.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:14:52.789 [DEBUG] [Thread-176125] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:14:56.398 [DEBUG] [Thread-176127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:11.455 [DEBUG] [Thread-176128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:13.639 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:13.641 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:22.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:15:22.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:15:22.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-04-11T20:15:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 15, 14), 0.04811, 99.9752, 0.0, 12.105, 12.0221, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:15:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:15:14
2026-04-11T20:15:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:15:24.649 [DEBUG] [Thread-176129] [transport.py] [_log()] starting thread (client mode): 0xb0f570d0
2026-04-11T20:15:24.649 [DEBUG] [Thread-176129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:15:24.669 [DEBUG] [Thread-176129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:15:24.669 [INFO] [Thread-176129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] client lang: <none>
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] server lang: <none>
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] kex follows: False
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] Compression: none
2026-04-11T20:15:24.672 [DEBUG] [Thread-176129] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:15:24.691 [DEBUG] [Thread-176129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:15:24.692 [DEBUG] [Thread-176129] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:15:24.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:15:24.693 [DEBUG] [Thread-176129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:15:24.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:15:24.695 [DEBUG] [Thread-176129] [transport.py] [_log()] userauth is OK
2026-04-11T20:15:24.695 [DEBUG] [Thread-176129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:15:24.695 [DEBUG] [Thread-176129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:15:24.695 [DEBUG] [Thread-176129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:15:24.695 [DEBUG] [Thread-176129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:15:24.719 [INFO] [Thread-176129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:15:24.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:15:25.333 [DEBUG] [Thread-176129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:15:25.334 [DEBUG] [Thread-176129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:15:25.334 [DEBUG] [Thread-176129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:15:25.375 [DEBUG] [Thread-176129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:15:25.376 [DEBUG] [Thread-176129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:15:25.379 [DEBUG] [Thread-176129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:15:25.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:15:25.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:15:25.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:15:25.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:15:25.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:15:25.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:15:25.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:15:25.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:15:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:15:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.760533 -999.00  +12.00   7.96     97  +11.70 1 3 1 3 1     0    0 0.32 -1.30 ----- 8.0 8.0 278.4 10.9 13.2 -0.7 13.0 -0.6 12.6 -0.5 13.0 -0.4
2026-04-11T20:15:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:15:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:15:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.760533
2026-04-11T20:15:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:15:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:15:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:15:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:15:25.408 [DEBUG] [Thread-176129] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:15:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:15:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:15:14', tmtdew=0.04811, humidity=99.9752, cloud=0.0, wind=12.105, temperature=12.0221, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:15:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:15:25.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:15:25.501 [DEBUG] [Thread-176132] [transport.py] [_log()] starting thread (client mode): 0xae5f1870
2026-04-11T20:15:25.501 [DEBUG] [Thread-176132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:15:25.515 [DEBUG] [Thread-176132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:15:25.515 [INFO] [Thread-176132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:15:25.523 [DEBUG] [Thread-176132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:15:25.523 [DEBUG] [Thread-176132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:15:25.523 [DEBUG] [Thread-176132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:15:25.523 [DEBUG] [Thread-176132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:25.523 [DEBUG] [Thread-176132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] client lang: <none>
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] server lang: <none>
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] kex follows: False
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:15:25.524 [DEBUG] [Thread-176132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:15:25.525 [DEBUG] [Thread-176132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:15:25.525 [DEBUG] [Thread-176132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:15:25.525 [DEBUG] [Thread-176132] [transport.py] [_log()] Compression: none
2026-04-11T20:15:25.525 [DEBUG] [Thread-176132] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:15:25.584 [DEBUG] [Thread-176132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:15:25.584 [DEBUG] [Thread-176132] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:15:25.585 [DEBUG] [Thread-176132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:15:25.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:15:25.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:15:25.643 [DEBUG] [Thread-176132] [transport.py] [_log()] userauth is OK
2026-04-11T20:15:25.643 [DEBUG] [Thread-176132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:15:25.643 [DEBUG] [Thread-176132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:15:25.644 [DEBUG] [Thread-176132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:15:25.644 [DEBUG] [Thread-176132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:15:25.662 [INFO] [Thread-176132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:15:25.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:15:25.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:15:26.480 [DEBUG] [Thread-176132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:15:26.480 [DEBUG] [Thread-176132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:15:26.491 [DEBUG] [Thread-176134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:26.529 [DEBUG] [Thread-176132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:15:26.529 [DEBUG] [Thread-176132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:15:26.538 [DEBUG] [Thread-176132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:15:26.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:15:26.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:15:26.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:15:26.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:15:26.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:15:26.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:15:26.574 [DEBUG] [Thread-176132] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:15:29.165 [DEBUG] [Thread-176135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:41.544 [DEBUG] [Thread-176136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:56.579 [DEBUG] [Thread-176137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:15:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:15:56.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:15:56.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-04-11T20:15:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 15, 49), 0.00646, 99.8842, 0.0, 11.646, 12.2784, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:15:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:15:49
2026-04-11T20:15:58.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:15:58.465 [DEBUG] [Thread-176138] [transport.py] [_log()] starting thread (client mode): 0xae5178e0
2026-04-11T20:15:58.465 [DEBUG] [Thread-176138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:15:58.485 [DEBUG] [Thread-176138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:15:58.486 [INFO] [Thread-176138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:15:58.488 [DEBUG] [Thread-176138] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] client lang: <none>
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] server lang: <none>
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] kex follows: False
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:15:58.489 [DEBUG] [Thread-176138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:15:58.490 [DEBUG] [Thread-176138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:15:58.490 [DEBUG] [Thread-176138] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:15:58.490 [DEBUG] [Thread-176138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:15:58.490 [DEBUG] [Thread-176138] [transport.py] [_log()] Compression: none
2026-04-11T20:15:58.490 [DEBUG] [Thread-176138] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:15:58.509 [DEBUG] [Thread-176138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:15:58.510 [DEBUG] [Thread-176138] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:15:58.510 [DEBUG] [Thread-176138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:15:58.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:15:58.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:15:58.512 [DEBUG] [Thread-176138] [transport.py] [_log()] userauth is OK
2026-04-11T20:15:58.513 [DEBUG] [Thread-176138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:15:58.513 [DEBUG] [Thread-176138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:15:58.513 [DEBUG] [Thread-176138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:15:58.513 [DEBUG] [Thread-176138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:15:58.547 [INFO] [Thread-176138] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:15:58.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:15:59.185 [DEBUG] [Thread-176138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:15:59.185 [DEBUG] [Thread-176138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:15:59.185 [DEBUG] [Thread-176138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:15:59.226 [DEBUG] [Thread-176138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:15:59.226 [DEBUG] [Thread-176138] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:15:59.230 [DEBUG] [Thread-176138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:15:59.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:15:59.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:15:59.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:15:59.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:15:59.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:15:59.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:15:59.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:15:59.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:15:59.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:15:59.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.760880 -999.00  +12.00   9.86     97  +11.70 1 3 1 3 1     0    0 0.32 -1.39 ----- 9.9 9.9 284.0 12.4 13.2 -0.6 13.0 -0.6 12.6 -0.4 13.1 -0.1
2026-04-11T20:15:59.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:15:59.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:15:59.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.760880
2026-04-11T20:15:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:15:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:15:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:15:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:15:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:15:59.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:15:49', tmtdew=0.00646, humidity=99.8842, cloud=0.0, wind=11.646, temperature=12.2784, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:15:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:15:59.257 [DEBUG] [Thread-176138] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:15:59.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:15:59.353 [DEBUG] [Thread-176141] [transport.py] [_log()] starting thread (client mode): 0xae51b610
2026-04-11T20:15:59.353 [DEBUG] [Thread-176141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:15:59.367 [DEBUG] [Thread-176141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:15:59.367 [INFO] [Thread-176141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:15:59.375 [DEBUG] [Thread-176141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] client lang: <none>
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] server lang: <none>
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] kex follows: False
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] Compression: none
2026-04-11T20:15:59.376 [DEBUG] [Thread-176141] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:15:59.435 [DEBUG] [Thread-176141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:15:59.435 [DEBUG] [Thread-176141] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:15:59.436 [DEBUG] [Thread-176141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:15:59.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:15:59.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:15:59.491 [DEBUG] [Thread-176141] [transport.py] [_log()] userauth is OK
2026-04-11T20:15:59.491 [DEBUG] [Thread-176141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:15:59.491 [DEBUG] [Thread-176141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:15:59.491 [DEBUG] [Thread-176141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:15:59.491 [DEBUG] [Thread-176141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:15:59.512 [INFO] [Thread-176141] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:15:59.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:15:59.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:16:00.339 [DEBUG] [Thread-176141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:16:00.339 [DEBUG] [Thread-176141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:16:00.387 [DEBUG] [Thread-176141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:16:00.387 [DEBUG] [Thread-176141] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:16:00.396 [DEBUG] [Thread-176141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:16:00.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:16:00.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-04-11T20:16:00.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:16:00.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:16:00.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:16:00.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:16:00.427 [DEBUG] [Thread-176141] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:16:11.615 [DEBUG] [Thread-176143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:16:13.844 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:16:13.845 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:16:26.676 [DEBUG] [Thread-176144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:16:29.223 [DEBUG] [Thread-176145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:16:30.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:16:30.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:16:30.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-04-11T20:16:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 15, 49), 0.00646, 99.8842, 0.0, 11.646, 12.2784, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:16:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:15:49
2026-04-11T20:16:32.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:16:32.284 [DEBUG] [Thread-176146] [transport.py] [_log()] starting thread (client mode): 0xae5f31c0
2026-04-11T20:16:32.284 [DEBUG] [Thread-176146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:16:32.304 [DEBUG] [Thread-176146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:16:32.304 [INFO] [Thread-176146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] client lang: <none>
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] server lang: <none>
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] kex follows: False
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] Compression: none
2026-04-11T20:16:32.307 [DEBUG] [Thread-176146] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:16:32.323 [DEBUG] [Thread-176146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:16:32.324 [DEBUG] [Thread-176146] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:16:32.324 [DEBUG] [Thread-176146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:16:32.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:16:32.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:16:32.326 [DEBUG] [Thread-176146] [transport.py] [_log()] userauth is OK
2026-04-11T20:16:32.326 [DEBUG] [Thread-176146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:16:32.326 [DEBUG] [Thread-176146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:16:32.326 [DEBUG] [Thread-176146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:16:32.326 [DEBUG] [Thread-176146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:16:32.350 [INFO] [Thread-176146] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:16:32.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:16:32.953 [DEBUG] [Thread-176146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:16:32.953 [DEBUG] [Thread-176146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:16:32.953 [DEBUG] [Thread-176146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:16:32.994 [DEBUG] [Thread-176146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:16:32.994 [DEBUG] [Thread-176146] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:16:32.998 [DEBUG] [Thread-176146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:16:33.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:16:33.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:16:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:16:33.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:16:33.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:16:33.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:16:33.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:16:33.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:16:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:16:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.761228 -999.00  +12.00   9.14     97  +11.70 1 3 1 3 1     0    0 0.32 -1.44 ----- 9.1 9.1 275.4 11.8 13.2 -0.7 13.0 -0.7 12.7 -0.8 13.1 -0.1
2026-04-11T20:16:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:16:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:16:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.761228
2026-04-11T20:16:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:16:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:16:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:16:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:16:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:16:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:15:49', tmtdew=0.00646, humidity=99.8842, cloud=0.0, wind=11.646, temperature=12.2784, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:16:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:16:33.025 [DEBUG] [Thread-176146] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:16:33.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:16:33.122 [DEBUG] [Thread-176149] [transport.py] [_log()] starting thread (client mode): 0xae515b70
2026-04-11T20:16:33.122 [DEBUG] [Thread-176149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:16:33.141 [DEBUG] [Thread-176149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:16:33.141 [INFO] [Thread-176149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:16:33.148 [DEBUG] [Thread-176149] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] client lang: <none>
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] server lang: <none>
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] kex follows: False
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] Compression: none
2026-04-11T20:16:33.149 [DEBUG] [Thread-176149] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:16:33.204 [DEBUG] [Thread-176149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:16:33.204 [DEBUG] [Thread-176149] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:16:33.204 [DEBUG] [Thread-176149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:16:33.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:16:33.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:16:33.262 [DEBUG] [Thread-176149] [transport.py] [_log()] userauth is OK
2026-04-11T20:16:33.262 [DEBUG] [Thread-176149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:16:33.262 [DEBUG] [Thread-176149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:16:33.262 [DEBUG] [Thread-176149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:16:33.262 [DEBUG] [Thread-176149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:16:33.276 [INFO] [Thread-176149] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:16:33.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:16:33.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:16:34.085 [DEBUG] [Thread-176149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:16:34.085 [DEBUG] [Thread-176149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:16:34.133 [DEBUG] [Thread-176149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:16:34.133 [DEBUG] [Thread-176149] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:16:34.143 [DEBUG] [Thread-176149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:16:34.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:16:34.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-04-11T20:16:34.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-04-11T20:16:34.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:16:34.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:16:34.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:16:34.179 [DEBUG] [Thread-176149] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:16:41.712 [DEBUG] [Thread-176151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:16:56.763 [DEBUG] [Thread-176152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:17:04.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:17:04.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-04-11T20:17:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 16, 25), -0.00186, 99.9752, 0.0, 12.9694, 11.9889, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:17:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:16:25
2026-04-11T20:17:05.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:17:06.026 [DEBUG] [Thread-176153] [transport.py] [_log()] starting thread (client mode): 0xae5f13f0
2026-04-11T20:17:06.026 [DEBUG] [Thread-176153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:17:06.045 [DEBUG] [Thread-176153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:17:06.045 [INFO] [Thread-176153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:17:06.046 [DEBUG] [Thread-176153] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] client lang: <none>
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] server lang: <none>
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] kex follows: False
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] Compression: none
2026-04-11T20:17:06.047 [DEBUG] [Thread-176153] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:17:06.055 [DEBUG] [Thread-176153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:17:06.055 [DEBUG] [Thread-176153] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:17:06.056 [DEBUG] [Thread-176153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:17:06.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:17:06.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:17:06.057 [DEBUG] [Thread-176153] [transport.py] [_log()] userauth is OK
2026-04-11T20:17:06.057 [DEBUG] [Thread-176153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:17:06.057 [DEBUG] [Thread-176153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:17:06.058 [DEBUG] [Thread-176153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:17:06.058 [DEBUG] [Thread-176153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:17:06.080 [INFO] [Thread-176153] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:17:06.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:17:06.698 [DEBUG] [Thread-176153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:17:06.699 [DEBUG] [Thread-176153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:17:06.699 [DEBUG] [Thread-176153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:17:06.740 [DEBUG] [Thread-176153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:17:06.740 [DEBUG] [Thread-176153] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:17:06.744 [DEBUG] [Thread-176153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:17:06.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:17:06.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:17:06.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:17:06.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:17:06.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:17:06.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:17:06.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:17:06.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:17:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:17:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.761575 -999.00  +12.00   9.66     97  +11.60 1 3 1 3 1     0    0 0.32 -1.21 ----- 9.7 9.7 283.6 15.2 13.2 -1.1 13.0 -0.7 12.6 -0.4 13.1 -0.1
2026-04-11T20:17:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:17:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:17:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.761575
2026-04-11T20:17:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:17:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:17:06.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:17:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:17:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:17:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:16:25', tmtdew=-0.00186, humidity=99.9752, cloud=0.0, wind=12.9694, temperature=11.9889, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:16:40.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:17:06.769 [DEBUG] [Thread-176153] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:17:06.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:17:06.862 [DEBUG] [Thread-176156] [transport.py] [_log()] starting thread (client mode): 0xae518310
2026-04-11T20:17:06.862 [DEBUG] [Thread-176156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:17:06.877 [DEBUG] [Thread-176156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:17:06.877 [INFO] [Thread-176156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:17:06.885 [DEBUG] [Thread-176156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] client lang: <none>
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] server lang: <none>
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] kex follows: False
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] Compression: none
2026-04-11T20:17:06.886 [DEBUG] [Thread-176156] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:17:06.944 [DEBUG] [Thread-176156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:17:06.944 [DEBUG] [Thread-176156] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:17:06.945 [DEBUG] [Thread-176156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:17:06.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:17:06.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:17:07.002 [DEBUG] [Thread-176156] [transport.py] [_log()] userauth is OK
2026-04-11T20:17:07.002 [DEBUG] [Thread-176156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:17:07.002 [DEBUG] [Thread-176156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:17:07.003 [DEBUG] [Thread-176156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:17:07.003 [DEBUG] [Thread-176156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:17:07.021 [INFO] [Thread-176156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:17:07.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:17:07.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:17:07.884 [DEBUG] [Thread-176156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:17:07.884 [DEBUG] [Thread-176156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:17:07.931 [DEBUG] [Thread-176156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:17:07.931 [DEBUG] [Thread-176156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:17:07.940 [DEBUG] [Thread-176156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:17:07.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:17:07.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-04-11T20:17:07.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-04-11T20:17:07.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:17:07.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:17:07.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:17:07.973 [DEBUG] [Thread-176156] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:17:11.799 [DEBUG] [Thread-176158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:14.048 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:14.049 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:26.853 [DEBUG] [Thread-176159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:29.288 [DEBUG] [Thread-176160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:37.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:17:37.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:17:38.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-04-11T20:17:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 17), -0.00694, 100.008, 0.0, 12.6166, 11.9721, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:17:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:17:00
2026-04-11T20:17:39.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:17:39.867 [DEBUG] [Thread-176161] [transport.py] [_log()] starting thread (client mode): 0xb0f54550
2026-04-11T20:17:39.867 [DEBUG] [Thread-176161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:17:39.877 [DEBUG] [Thread-176161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:17:39.877 [INFO] [Thread-176161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:17:39.881 [DEBUG] [Thread-176161] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:17:39.881 [DEBUG] [Thread-176161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:17:39.881 [DEBUG] [Thread-176161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:17:39.881 [DEBUG] [Thread-176161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:39.881 [DEBUG] [Thread-176161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:39.881 [DEBUG] [Thread-176161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] client lang: <none>
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] server lang: <none>
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] kex follows: False
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:17:39.882 [DEBUG] [Thread-176161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:17:39.883 [DEBUG] [Thread-176161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:17:39.883 [DEBUG] [Thread-176161] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:17:39.884 [DEBUG] [Thread-176161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:17:39.884 [DEBUG] [Thread-176161] [transport.py] [_log()] Compression: none
2026-04-11T20:17:39.884 [DEBUG] [Thread-176161] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:17:39.903 [DEBUG] [Thread-176161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:17:39.904 [DEBUG] [Thread-176161] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:17:39.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:17:39.905 [DEBUG] [Thread-176161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:17:39.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:17:39.907 [DEBUG] [Thread-176161] [transport.py] [_log()] userauth is OK
2026-04-11T20:17:39.907 [DEBUG] [Thread-176161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:17:39.907 [DEBUG] [Thread-176161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:17:39.908 [DEBUG] [Thread-176161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:17:39.908 [DEBUG] [Thread-176161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:17:39.943 [INFO] [Thread-176161] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:17:39.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:17:40.622 [DEBUG] [Thread-176161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:17:40.622 [DEBUG] [Thread-176161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:17:40.622 [DEBUG] [Thread-176161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:17:40.664 [DEBUG] [Thread-176161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:17:40.664 [DEBUG] [Thread-176161] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:17:40.666 [DEBUG] [Thread-176161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:17:40.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:17:40.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:17:40.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:17:40.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:17:40.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:17:40.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:17:40.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:17:40.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:17:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:17:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.761922 -999.00  +11.90  12.02     97  +11.60 1 3 1 3 1     0    0 0.32 -0.96 ----- 12.0 12.0 277.6 17.1 13.2 -1.0 13.0 -0.7 12.6 -1.3 13.0 -0.3
2026-04-11T20:17:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:17:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:17:40.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.761922
2026-04-11T20:17:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:17:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:17:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:17:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:17:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:17:40.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:17:00', tmtdew=-0.00694, humidity=100.008, cloud=0.0, wind=12.6166, temperature=11.9721, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:17:10.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:17:40.686 [DEBUG] [Thread-176161] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:17:40.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:17:40.776 [DEBUG] [Thread-176164] [transport.py] [_log()] starting thread (client mode): 0xb0f557b0
2026-04-11T20:17:40.776 [DEBUG] [Thread-176164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:17:40.791 [DEBUG] [Thread-176164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:17:40.791 [INFO] [Thread-176164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:17:40.798 [DEBUG] [Thread-176164] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] client lang: <none>
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] server lang: <none>
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] kex follows: False
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] Compression: none
2026-04-11T20:17:40.799 [DEBUG] [Thread-176164] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:17:40.860 [DEBUG] [Thread-176164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:17:40.861 [DEBUG] [Thread-176164] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:17:40.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:17:40.862 [DEBUG] [Thread-176164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:17:40.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:17:40.919 [DEBUG] [Thread-176164] [transport.py] [_log()] userauth is OK
2026-04-11T20:17:40.919 [DEBUG] [Thread-176164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:17:40.920 [DEBUG] [Thread-176164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:17:40.920 [DEBUG] [Thread-176164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:17:40.920 [DEBUG] [Thread-176164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:17:40.939 [INFO] [Thread-176164] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:17:40.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:17:40.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:17:41.799 [DEBUG] [Thread-176164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:17:41.799 [DEBUG] [Thread-176164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:17:41.848 [DEBUG] [Thread-176164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:17:41.848 [DEBUG] [Thread-176164] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:17:41.860 [DEBUG] [Thread-176164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:17:41.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:17:41.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-04-11T20:17:41.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-04-11T20:17:41.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:17:41.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:17:41.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:17:41.891 [DEBUG] [Thread-176166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:17:41.897 [DEBUG] [Thread-176164] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:17:56.942 [DEBUG] [Thread-176167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:11.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:18:11.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:18:11.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-04-11T20:18:11.982 [DEBUG] [Thread-176168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 17, 36), 0.00125, 99.9181, 0.0, 15.9149, 12.3452, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:18:13.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:17:36
2026-04-11T20:18:13.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:18:13.761 [DEBUG] [Thread-176169] [transport.py] [_log()] starting thread (client mode): 0xae5f1b40
2026-04-11T20:18:13.761 [DEBUG] [Thread-176169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:18:13.781 [DEBUG] [Thread-176169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:18:13.781 [INFO] [Thread-176169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:18:13.784 [DEBUG] [Thread-176169] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] client lang: <none>
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] server lang: <none>
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] kex follows: False
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] Compression: none
2026-04-11T20:18:13.785 [DEBUG] [Thread-176169] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:18:13.805 [DEBUG] [Thread-176169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:18:13.805 [DEBUG] [Thread-176169] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:18:13.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:18:13.806 [DEBUG] [Thread-176169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:18:13.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:18:13.808 [DEBUG] [Thread-176169] [transport.py] [_log()] userauth is OK
2026-04-11T20:18:13.808 [DEBUG] [Thread-176169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:18:13.809 [DEBUG] [Thread-176169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:18:13.809 [DEBUG] [Thread-176169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:18:13.809 [DEBUG] [Thread-176169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:18:13.843 [INFO] [Thread-176169] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:18:13.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:18:14.248 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:14.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:14.496 [DEBUG] [Thread-176169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:18:14.496 [DEBUG] [Thread-176169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:18:14.497 [DEBUG] [Thread-176169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:18:14.537 [DEBUG] [Thread-176169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:18:14.537 [DEBUG] [Thread-176169] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:18:14.541 [DEBUG] [Thread-176169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:18:14.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:18:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:18:14.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:18:14.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:18:14.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:18:14.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:18:14.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:18:14.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:18:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:18:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.762270 -999.00  +12.00   8.68     97  +11.60 1 3 1 3 1     0    0 0.32 -0.95 ----- 8.7 8.7 282.4 13.1 13.2 -1.3 13.0 -0.7 12.6 -0.9 13.1 -0.1
2026-04-11T20:18:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:18:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:18:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.762270
2026-04-11T20:18:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:18:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:18:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:18:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:18:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:18:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:17:36', tmtdew=0.00125, humidity=99.9181, cloud=0.0, wind=15.9149, temperature=12.3452, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:17:40.128', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:18:14.567 [DEBUG] [Thread-176169] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:18:14.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:18:14.666 [DEBUG] [Thread-176172] [transport.py] [_log()] starting thread (client mode): 0xb0f8e1d0
2026-04-11T20:18:14.666 [DEBUG] [Thread-176172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:18:14.680 [DEBUG] [Thread-176172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:18:14.680 [INFO] [Thread-176172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:18:14.688 [DEBUG] [Thread-176172] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:18:14.689 [DEBUG] [Thread-176172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:18:14.689 [DEBUG] [Thread-176172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:18:14.689 [DEBUG] [Thread-176172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:14.689 [DEBUG] [Thread-176172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:14.689 [DEBUG] [Thread-176172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] client lang: <none>
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] server lang: <none>
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] kex follows: False
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] Compression: none
2026-04-11T20:18:14.690 [DEBUG] [Thread-176172] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:18:14.746 [DEBUG] [Thread-176172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:18:14.747 [DEBUG] [Thread-176172] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:18:14.756 [DEBUG] [Thread-176172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:18:14.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:18:14.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:18:14.802 [DEBUG] [Thread-176172] [transport.py] [_log()] userauth is OK
2026-04-11T20:18:14.803 [DEBUG] [Thread-176172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:18:14.803 [DEBUG] [Thread-176172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:18:14.803 [DEBUG] [Thread-176172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:18:14.803 [DEBUG] [Thread-176172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:18:14.821 [INFO] [Thread-176172] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:18:14.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:18:14.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:18:15.667 [DEBUG] [Thread-176172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:18:15.667 [DEBUG] [Thread-176172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:18:15.715 [DEBUG] [Thread-176172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:18:15.715 [DEBUG] [Thread-176172] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:18:15.726 [DEBUG] [Thread-176172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:18:15.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:18:15.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:18:15.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-04-11T20:18:15.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:18:15.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:18:15.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:18:15.765 [DEBUG] [Thread-176172] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:18:27.022 [DEBUG] [Thread-176174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:29.344 [DEBUG] [Thread-176175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:42.072 [DEBUG] [Thread-176176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:18:45.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:18:45.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:18:45.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-04-11T20:18:47.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 18, 12), 0.04805, 99.9756, 0.0, 12.299, 12.0223, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:18:47.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:18:12
2026-04-11T20:18:47.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:18:47.577 [DEBUG] [Thread-176177] [transport.py] [_log()] starting thread (client mode): 0xb0f8c370
2026-04-11T20:18:47.578 [DEBUG] [Thread-176177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:18:47.601 [DEBUG] [Thread-176177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:18:47.601 [INFO] [Thread-176177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:18:47.604 [DEBUG] [Thread-176177] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:18:47.604 [DEBUG] [Thread-176177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:18:47.604 [DEBUG] [Thread-176177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] client lang: <none>
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] server lang: <none>
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] kex follows: False
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] Compression: none
2026-04-11T20:18:47.605 [DEBUG] [Thread-176177] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:18:47.621 [DEBUG] [Thread-176177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:18:47.622 [DEBUG] [Thread-176177] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:18:47.622 [DEBUG] [Thread-176177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:18:47.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:18:47.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:18:47.625 [DEBUG] [Thread-176177] [transport.py] [_log()] userauth is OK
2026-04-11T20:18:47.625 [DEBUG] [Thread-176177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:18:47.625 [DEBUG] [Thread-176177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:18:47.625 [DEBUG] [Thread-176177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:18:47.625 [DEBUG] [Thread-176177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:18:47.660 [INFO] [Thread-176177] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:18:47.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:18:48.311 [DEBUG] [Thread-176177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:18:48.311 [DEBUG] [Thread-176177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:18:48.312 [DEBUG] [Thread-176177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:18:48.352 [DEBUG] [Thread-176177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:18:48.352 [DEBUG] [Thread-176177] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:18:48.355 [DEBUG] [Thread-176177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:18:48.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:18:48.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:18:48.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:18:48.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:18:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:18:48.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:18:48.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:18:48.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:18:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:18:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.762617 -999.00  +11.90  11.29     97  +11.60 1 3 1 3 1     0    0 0.32 -0.93 ----- 11.3 11.3 287.8 15.3 13.2 -1.2 13.0 -0.8 12.6 -1.4 13.1 -0.2
2026-04-11T20:18:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:18:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:18:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.762617
2026-04-11T20:18:48.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:18:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:18:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:18:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:18:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:18:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:18:12', tmtdew=0.04805, humidity=99.9756, cloud=0.0, wind=12.299, temperature=12.0223, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:18:10.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:18:48.386 [DEBUG] [Thread-176177] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:18:48.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:18:48.478 [DEBUG] [Thread-176180] [transport.py] [_log()] starting thread (client mode): 0xb0f8e8f0
2026-04-11T20:18:48.478 [DEBUG] [Thread-176180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:18:48.492 [DEBUG] [Thread-176180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:18:48.493 [INFO] [Thread-176180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:18:48.500 [DEBUG] [Thread-176180] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:18:48.501 [DEBUG] [Thread-176180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] client lang: <none>
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] server lang: <none>
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] kex follows: False
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] Compression: none
2026-04-11T20:18:48.502 [DEBUG] [Thread-176180] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:18:48.559 [DEBUG] [Thread-176180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:18:48.559 [DEBUG] [Thread-176180] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:18:48.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:18:48.560 [DEBUG] [Thread-176180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:18:48.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:18:48.615 [DEBUG] [Thread-176180] [transport.py] [_log()] userauth is OK
2026-04-11T20:18:48.615 [DEBUG] [Thread-176180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:18:48.615 [DEBUG] [Thread-176180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:18:48.615 [DEBUG] [Thread-176180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:18:48.615 [DEBUG] [Thread-176180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:18:48.634 [INFO] [Thread-176180] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:18:48.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:18:48.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:18:49.472 [DEBUG] [Thread-176180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:18:49.473 [DEBUG] [Thread-176180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:18:49.521 [DEBUG] [Thread-176180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:18:49.522 [DEBUG] [Thread-176180] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:18:49.531 [DEBUG] [Thread-176180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:18:49.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:18:49.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-04-11T20:18:49.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-04-11T20:18:49.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:18:49.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:18:49.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:18:49.568 [DEBUG] [Thread-176180] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:18:57.110 [DEBUG] [Thread-176182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:12.159 [DEBUG] [Thread-176183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:14.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:14.457 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:19.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:19:19.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:19:19.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-04-11T20:19:20.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 18, 47), 0.01128, 99.8524, 0.0, 16.0913, 12.3124, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:19:20.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:18:47
2026-04-11T20:19:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:19:21.521 [DEBUG] [Thread-176184] [transport.py] [_log()] starting thread (client mode): 0xb0f8c130
2026-04-11T20:19:21.521 [DEBUG] [Thread-176184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:19:21.540 [DEBUG] [Thread-176184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:19:21.540 [INFO] [Thread-176184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:19:21.543 [DEBUG] [Thread-176184] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] client lang: <none>
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] server lang: <none>
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] kex follows: False
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:19:21.544 [DEBUG] [Thread-176184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:19:21.545 [DEBUG] [Thread-176184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:19:21.545 [DEBUG] [Thread-176184] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:19:21.545 [DEBUG] [Thread-176184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:19:21.545 [DEBUG] [Thread-176184] [transport.py] [_log()] Compression: none
2026-04-11T20:19:21.545 [DEBUG] [Thread-176184] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:19:21.561 [DEBUG] [Thread-176184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:19:21.562 [DEBUG] [Thread-176184] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:19:21.562 [DEBUG] [Thread-176184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:19:21.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:19:21.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:19:21.565 [DEBUG] [Thread-176184] [transport.py] [_log()] userauth is OK
2026-04-11T20:19:21.565 [DEBUG] [Thread-176184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:19:21.565 [DEBUG] [Thread-176184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:19:21.565 [DEBUG] [Thread-176184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:19:21.565 [DEBUG] [Thread-176184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:19:21.590 [INFO] [Thread-176184] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:19:21.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:19:22.223 [DEBUG] [Thread-176184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:19:22.223 [DEBUG] [Thread-176184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:19:22.224 [DEBUG] [Thread-176184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:19:22.264 [DEBUG] [Thread-176184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:19:22.264 [DEBUG] [Thread-176184] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:19:22.268 [DEBUG] [Thread-176184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:19:22.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:19:22.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:19:22.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:19:22.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:19:22.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:19:22.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:19:22.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:19:22.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:19:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:19:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.763311 -999.00  +11.90  12.63     97  +11.60 1 3 1 3 1     0    0 0.31 -1.25 ----- 12.6 12.6 283.4 14.6 13.2 -1.1 13.1 -0.8 12.6 -0.7 13.0 -0.3
2026-04-11T20:19:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:19:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:19:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.763311
2026-04-11T20:19:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:19:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:19:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:19:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:19:22.295 [DEBUG] [Thread-176184] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:19:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:19:22.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:18:47', tmtdew=0.01128, humidity=99.8524, cloud=0.0, wind=16.0913, temperature=12.3124, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:19:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:19:22.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:19:22.388 [DEBUG] [Thread-176187] [transport.py] [_log()] starting thread (client mode): 0xb0f8fe50
2026-04-11T20:19:22.388 [DEBUG] [Thread-176187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:19:22.403 [DEBUG] [Thread-176187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:19:22.403 [INFO] [Thread-176187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:19:22.411 [DEBUG] [Thread-176187] [transport.py] [_log()] client lang: <none>
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] server lang: <none>
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] kex follows: False
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] Compression: none
2026-04-11T20:19:22.412 [DEBUG] [Thread-176187] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:19:22.470 [DEBUG] [Thread-176187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:19:22.471 [DEBUG] [Thread-176187] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:19:22.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:19:22.472 [DEBUG] [Thread-176187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:19:22.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:19:22.527 [DEBUG] [Thread-176187] [transport.py] [_log()] userauth is OK
2026-04-11T20:19:22.528 [DEBUG] [Thread-176187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:19:22.528 [DEBUG] [Thread-176187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:19:22.528 [DEBUG] [Thread-176187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:19:22.528 [DEBUG] [Thread-176187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:19:22.547 [INFO] [Thread-176187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:19:22.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:19:22.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:19:23.377 [DEBUG] [Thread-176187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:19:23.378 [DEBUG] [Thread-176187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:19:23.426 [DEBUG] [Thread-176187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:19:23.426 [DEBUG] [Thread-176187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:19:23.435 [DEBUG] [Thread-176187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:19:23.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:19: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')
2026-04-11T20:19:23.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-04-11T20:19:23.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:19:23.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:19:23.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:19:23.473 [DEBUG] [Thread-176187] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:19:27.195 [DEBUG] [Thread-176189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:29.413 [DEBUG] [Thread-176190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:42.259 [DEBUG] [Thread-176191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:19:53.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:19:53.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:19:53.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-04-11T20:19:54.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 19, 22), 0.04549, 99.9925, 0.0, 12.8282, 12.0059, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:19:54.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:19:22
2026-04-11T20:19:55.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:19:55.316 [DEBUG] [Thread-176192] [transport.py] [_log()] starting thread (client mode): 0xae5f0e50
2026-04-11T20:19:55.316 [DEBUG] [Thread-176192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:19:55.337 [DEBUG] [Thread-176192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:19:55.337 [INFO] [Thread-176192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:19:55.340 [DEBUG] [Thread-176192] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] client lang: <none>
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] server lang: <none>
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] kex follows: False
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:19:55.341 [DEBUG] [Thread-176192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:19:55.342 [DEBUG] [Thread-176192] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:19:55.342 [DEBUG] [Thread-176192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:19:55.342 [DEBUG] [Thread-176192] [transport.py] [_log()] Compression: none
2026-04-11T20:19:55.342 [DEBUG] [Thread-176192] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:19:55.359 [DEBUG] [Thread-176192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:19:55.359 [DEBUG] [Thread-176192] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:19:55.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:19:55.360 [DEBUG] [Thread-176192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:19:55.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:19:55.362 [DEBUG] [Thread-176192] [transport.py] [_log()] userauth is OK
2026-04-11T20:19:55.363 [DEBUG] [Thread-176192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:19:55.363 [DEBUG] [Thread-176192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:19:55.363 [DEBUG] [Thread-176192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:19:55.363 [DEBUG] [Thread-176192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:19:55.389 [INFO] [Thread-176192] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:19:55.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:19:56.024 [DEBUG] [Thread-176192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:19:56.024 [DEBUG] [Thread-176192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:19:56.025 [DEBUG] [Thread-176192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:19:56.066 [DEBUG] [Thread-176192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:19:56.066 [DEBUG] [Thread-176192] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:19:56.069 [DEBUG] [Thread-176192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:19:56.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:19:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:19:56.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:19:56.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:19:56.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:19:56.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:19:56.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:19:56.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:19:56.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:19:56.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.763658 -999.00  +12.00  13.29     97  +11.60 1 3 1 3 1     0    0 0.31 -1.64 ----- 13.3 13.3 275.0 16.2 13.2 -1.2 13.0 -0.8 12.6 -1.1 13.1 -0.2
2026-04-11T20:19:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:19:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:19:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.763658
2026-04-11T20:19:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:19:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:19:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:19:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:19:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:19:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:19:22', tmtdew=0.04549, humidity=99.9925, cloud=0.0, wind=12.8282, temperature=12.0059, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:19:40.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:19:56.095 [DEBUG] [Thread-176192] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:19:56.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:19:56.186 [DEBUG] [Thread-176195] [transport.py] [_log()] starting thread (client mode): 0xae5f0940
2026-04-11T20:19:56.186 [DEBUG] [Thread-176195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:19:56.202 [DEBUG] [Thread-176195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:19:56.202 [INFO] [Thread-176195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:19:56.209 [DEBUG] [Thread-176195] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:19:56.209 [DEBUG] [Thread-176195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:19:56.209 [DEBUG] [Thread-176195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:19:56.209 [DEBUG] [Thread-176195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:56.209 [DEBUG] [Thread-176195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] client lang: <none>
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] server lang: <none>
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] kex follows: False
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] Compression: none
2026-04-11T20:19:56.210 [DEBUG] [Thread-176195] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:19:56.266 [DEBUG] [Thread-176195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:19:56.267 [DEBUG] [Thread-176195] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:19:56.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:19:56.267 [DEBUG] [Thread-176195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:19:56.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:19:56.322 [DEBUG] [Thread-176195] [transport.py] [_log()] userauth is OK
2026-04-11T20:19:56.322 [DEBUG] [Thread-176195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:19:56.322 [DEBUG] [Thread-176195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:19:56.322 [DEBUG] [Thread-176195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:19:56.322 [DEBUG] [Thread-176195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:19:56.342 [INFO] [Thread-176195] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:19:56.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:19:56.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:19:57.157 [DEBUG] [Thread-176195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:19:57.157 [DEBUG] [Thread-176195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:19:57.205 [DEBUG] [Thread-176195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:19:57.205 [DEBUG] [Thread-176195] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:19:57.214 [DEBUG] [Thread-176195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:19:57.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:19:57.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-04-11T20:19:57.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-04-11T20:19:57.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:19:57.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:19:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:19:57.251 [DEBUG] [Thread-176195] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:19:57.300 [DEBUG] [Thread-176197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:12.354 [DEBUG] [Thread-176198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:14.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:14.663 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:20:27.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:20:27.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-04-11T20:20:27.393 [DEBUG] [Thread-176199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 19, 58), 0.00312, 99.9426, 0.0, 14.116, 11.9727, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:20:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:19:58
2026-04-11T20:20:28.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:20:29.109 [DEBUG] [Thread-176200] [transport.py] [_log()] starting thread (client mode): 0xae518a00
2026-04-11T20:20:29.109 [DEBUG] [Thread-176200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:20:29.129 [DEBUG] [Thread-176200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:20:29.130 [INFO] [Thread-176200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] client lang: <none>
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] server lang: <none>
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] kex follows: False
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:20:29.133 [DEBUG] [Thread-176200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:20:29.134 [DEBUG] [Thread-176200] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:20:29.134 [DEBUG] [Thread-176200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:20:29.134 [DEBUG] [Thread-176200] [transport.py] [_log()] Compression: none
2026-04-11T20:20:29.134 [DEBUG] [Thread-176200] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:20:29.151 [DEBUG] [Thread-176200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:20:29.151 [DEBUG] [Thread-176200] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:20:29.152 [DEBUG] [Thread-176200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:20:29.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:20:29.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:20:29.154 [DEBUG] [Thread-176200] [transport.py] [_log()] userauth is OK
2026-04-11T20:20:29.154 [DEBUG] [Thread-176200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:20:29.154 [DEBUG] [Thread-176200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:20:29.154 [DEBUG] [Thread-176200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:20:29.154 [DEBUG] [Thread-176200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:20:29.179 [INFO] [Thread-176200] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:20:29.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:20:29.467 [DEBUG] [Thread-176202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:29.836 [DEBUG] [Thread-176200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:20:29.836 [DEBUG] [Thread-176200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:20:29.836 [DEBUG] [Thread-176200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:20:29.877 [DEBUG] [Thread-176200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:20:29.877 [DEBUG] [Thread-176200] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:20:29.881 [DEBUG] [Thread-176200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:20:29.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:20:29.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:20:29.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:20:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:20:29.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:20:29.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:20:29.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:20:29.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:20:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:20:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.764006 -999.00  +12.00  11.77     97  +11.60 1 3 1 3 1     0    0 0.31 -1.41 ----- 11.8 11.8 267.6 13.8 13.2 -1.1 13.0 -0.6 12.7 -0.6 13.1 -0.1
2026-04-11T20:20:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:20:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:20:29.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.764006
2026-04-11T20:20:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:20:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:20:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:20:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:20:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:20:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:19:58', tmtdew=0.00312, humidity=99.9426, cloud=0.0, wind=14.116, temperature=11.9727, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:20:10.118', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:20:29.911 [DEBUG] [Thread-176200] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:20:29.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:20:30.001 [DEBUG] [Thread-176204] [transport.py] [_log()] starting thread (client mode): 0xae518310
2026-04-11T20:20:30.001 [DEBUG] [Thread-176204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:20:30.016 [DEBUG] [Thread-176204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:20:30.016 [INFO] [Thread-176204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:20:30.024 [DEBUG] [Thread-176204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] client lang: <none>
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] server lang: <none>
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] kex follows: False
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:20:30.025 [DEBUG] [Thread-176204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:20:30.026 [DEBUG] [Thread-176204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:20:30.026 [DEBUG] [Thread-176204] [transport.py] [_log()] Compression: none
2026-04-11T20:20:30.026 [DEBUG] [Thread-176204] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:20:30.085 [DEBUG] [Thread-176204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:20:30.085 [DEBUG] [Thread-176204] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:20:30.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:20:30.087 [DEBUG] [Thread-176204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:20:30.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:20:30.143 [DEBUG] [Thread-176204] [transport.py] [_log()] userauth is OK
2026-04-11T20:20:30.143 [DEBUG] [Thread-176204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:20:30.144 [DEBUG] [Thread-176204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:20:30.144 [DEBUG] [Thread-176204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:20:30.144 [DEBUG] [Thread-176204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:20:30.162 [INFO] [Thread-176204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:20:30.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:20:30.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:20:30.999 [DEBUG] [Thread-176204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:20:30.999 [DEBUG] [Thread-176204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:20:31.047 [DEBUG] [Thread-176204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:20:31.047 [DEBUG] [Thread-176204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:20:31.057 [DEBUG] [Thread-176204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:20:31.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:20:31.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-04-11T20:20:31.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-04-11T20:20:31.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:20:31.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:20:31.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:20:31.094 [DEBUG] [Thread-176204] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:20:42.430 [DEBUG] [Thread-176206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:20:57.480 [DEBUG] [Thread-176207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:21:01.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:21:01.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:21:02.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 20, 34), -0.00397, 99.9515, 0.0, 14.1509, 12.478, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:21:02.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:20:34
2026-04-11T20:21:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:21:02.906 [DEBUG] [Thread-176208] [transport.py] [_log()] starting thread (client mode): 0xae5f2380
2026-04-11T20:21:02.906 [DEBUG] [Thread-176208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:21:02.921 [DEBUG] [Thread-176208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:21:02.921 [INFO] [Thread-176208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:02.924 [DEBUG] [Thread-176208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] client lang: <none>
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] server lang: <none>
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] kex follows: False
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] Compression: none
2026-04-11T20:21:02.925 [DEBUG] [Thread-176208] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:21:02.942 [DEBUG] [Thread-176208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:21:02.943 [DEBUG] [Thread-176208] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:21:02.943 [DEBUG] [Thread-176208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:21:02.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:21:02.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:21:02.945 [DEBUG] [Thread-176208] [transport.py] [_log()] userauth is OK
2026-04-11T20:21:02.945 [DEBUG] [Thread-176208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:21:02.945 [DEBUG] [Thread-176208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:21:02.946 [DEBUG] [Thread-176208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:21:02.946 [DEBUG] [Thread-176208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:21:02.971 [INFO] [Thread-176208] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:21:02.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:21:03.607 [DEBUG] [Thread-176208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:21:03.607 [DEBUG] [Thread-176208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:21:03.608 [DEBUG] [Thread-176208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:21:03.648 [DEBUG] [Thread-176208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:21:03.648 [DEBUG] [Thread-176208] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:21:03.651 [DEBUG] [Thread-176208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:21:03.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:21:03.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:21:03.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:21:03.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:21:03.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:21:03.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:21:03.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:21:03.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:21:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:21:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.764353 -999.00  +12.00  11.07     97  +11.60 1 3 1 3 1     0    0 0.32 -1.02 ----- 11.1 11.1 279.8 14.8 13.2 -1.1 13.1 -0.7 12.6 -0.5 13.1 -0.1
2026-04-11T20:21:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:21:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:21:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.764353
2026-04-11T20:21:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:21:03.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:21:03.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:21:03.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:21:03.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:21:03.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:20:34', tmtdew=-0.00397, humidity=99.9515, cloud=0.0, wind=14.1509, temperature=12.478, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:20:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:21:03.673 [DEBUG] [Thread-176208] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:21:03.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:21:03.763 [DEBUG] [Thread-176211] [transport.py] [_log()] starting thread (client mode): 0xae5f35b0
2026-04-11T20:21:03.763 [DEBUG] [Thread-176211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:21:03.777 [DEBUG] [Thread-176211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:21:03.777 [INFO] [Thread-176211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] client lang: <none>
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] server lang: <none>
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] kex follows: False
2026-04-11T20:21:03.785 [DEBUG] [Thread-176211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:21:03.786 [DEBUG] [Thread-176211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:21:03.786 [DEBUG] [Thread-176211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:21:03.786 [DEBUG] [Thread-176211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:21:03.786 [DEBUG] [Thread-176211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:21:03.786 [DEBUG] [Thread-176211] [transport.py] [_log()] Compression: none
2026-04-11T20:21:03.786 [DEBUG] [Thread-176211] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:21:03.842 [DEBUG] [Thread-176211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:21:03.843 [DEBUG] [Thread-176211] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:21:03.844 [DEBUG] [Thread-176211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:21:03.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:21:03.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:21:03.900 [DEBUG] [Thread-176211] [transport.py] [_log()] userauth is OK
2026-04-11T20:21:03.900 [DEBUG] [Thread-176211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:21:03.900 [DEBUG] [Thread-176211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:21:03.901 [DEBUG] [Thread-176211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:21:03.901 [DEBUG] [Thread-176211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:21:03.925 [INFO] [Thread-176211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:21:03.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:21:03.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:21:04.736 [DEBUG] [Thread-176211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:21:04.737 [DEBUG] [Thread-176211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:21:04.785 [DEBUG] [Thread-176211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:21:04.785 [DEBUG] [Thread-176211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:21:04.794 [DEBUG] [Thread-176211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:21:04.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:21:04.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-04-11T20:21:04.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-04-11T20:21:04.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:21:04.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:21:04.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:21:04.836 [DEBUG] [Thread-176211] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:21:12.517 [DEBUG] [Thread-176213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:14.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:14.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:27.581 [DEBUG] [Thread-176214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:29.551 [DEBUG] [Thread-176215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:34.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:21:34.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:21:34.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-04-11T20:21:36.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 21, 9), -0.001965, 99.9756, 0.0, 11.7522, 12.0389, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:21:36.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:21:09
2026-04-11T20:21:36.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:21:36.727 [DEBUG] [Thread-176216] [transport.py] [_log()] starting thread (client mode): 0xa7953730
2026-04-11T20:21:36.727 [DEBUG] [Thread-176216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:21:36.747 [DEBUG] [Thread-176216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:21:36.747 [INFO] [Thread-176216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] client lang: <none>
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] server lang: <none>
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] kex follows: False
2026-04-11T20:21:36.750 [DEBUG] [Thread-176216] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:21:36.751 [DEBUG] [Thread-176216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:21:36.751 [DEBUG] [Thread-176216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:21:36.751 [DEBUG] [Thread-176216] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:21:36.751 [DEBUG] [Thread-176216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:21:36.751 [DEBUG] [Thread-176216] [transport.py] [_log()] Compression: none
2026-04-11T20:21:36.751 [DEBUG] [Thread-176216] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:21:36.770 [DEBUG] [Thread-176216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:21:36.771 [DEBUG] [Thread-176216] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:21:36.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:21:36.772 [DEBUG] [Thread-176216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:21:36.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:21:36.812 [DEBUG] [Thread-176216] [transport.py] [_log()] userauth is OK
2026-04-11T20:21:36.812 [DEBUG] [Thread-176216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:21:36.813 [DEBUG] [Thread-176216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:21:36.813 [DEBUG] [Thread-176216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:21:36.813 [DEBUG] [Thread-176216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:21:36.832 [INFO] [Thread-176216] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:21:36.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:21:37.433 [DEBUG] [Thread-176216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:21:37.433 [DEBUG] [Thread-176216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:21:37.434 [DEBUG] [Thread-176216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:21:37.474 [DEBUG] [Thread-176216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:21:37.474 [DEBUG] [Thread-176216] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:21:37.478 [DEBUG] [Thread-176216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:21:37.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:21:37.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:21:37.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:21:37.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:21:37.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:21:37.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:21:37.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:21:37.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:21:37.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:21:37.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.764700 -999.00  +12.00  11.12     97  +11.70 1 3 1 3 1     0    0 0.32 -1.11 ----- 11.1 11.1 268.6 13.7 13.2 -1.1 -999.0 -999.0 12.7 -1.0 13.1 -0.1
2026-04-11T20:21:37.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:21:37.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:21:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.764700
2026-04-11T20:21:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:21:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:21:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:21:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:21:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:21:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:21:09', tmtdew=-0.001965, humidity=99.9756, cloud=0.0, wind=11.7522, temperature=12.0389, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:21:10.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:21:37.506 [DEBUG] [Thread-176216] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:21: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-04-11T20:21:37.600 [DEBUG] [Thread-176219] [transport.py] [_log()] starting thread (client mode): 0xa7950280
2026-04-11T20:21:37.600 [DEBUG] [Thread-176219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:21:37.616 [DEBUG] [Thread-176219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:21:37.616 [INFO] [Thread-176219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:21:37.623 [DEBUG] [Thread-176219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] client lang: <none>
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] server lang: <none>
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] kex follows: False
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:21:37.624 [DEBUG] [Thread-176219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:21:37.625 [DEBUG] [Thread-176219] [transport.py] [_log()] Compression: none
2026-04-11T20:21:37.625 [DEBUG] [Thread-176219] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:21:37.682 [DEBUG] [Thread-176219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:21:37.683 [DEBUG] [Thread-176219] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:21:37.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:21:37.685 [DEBUG] [Thread-176219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:21:37.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:21:37.738 [DEBUG] [Thread-176219] [transport.py] [_log()] userauth is OK
2026-04-11T20:21:37.738 [DEBUG] [Thread-176219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:21:37.738 [DEBUG] [Thread-176219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:21:37.739 [DEBUG] [Thread-176219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:21:37.739 [DEBUG] [Thread-176219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:21:37.759 [INFO] [Thread-176219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:21:37.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:21:37.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:21:38.599 [DEBUG] [Thread-176219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:21:38.600 [DEBUG] [Thread-176219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:21:38.647 [DEBUG] [Thread-176219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:21:38.647 [DEBUG] [Thread-176219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:21:38.656 [DEBUG] [Thread-176219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:21:38.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:21:38.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:21:38.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:21:38.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:21:38.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:21:38.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:21:38.694 [DEBUG] [Thread-176219] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:21:42.618 [DEBUG] [Thread-176221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:21:57.674 [DEBUG] [Thread-176222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:22:08.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:22:08.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-04-11T20:22:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 21, 45), -0.0039, 99.9513, 0.0, 13.0925, 12.4447, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:22:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:21:45
2026-04-11T20:22:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:22:10.494 [DEBUG] [Thread-176223] [transport.py] [_log()] starting thread (client mode): 0xae5f18d0
2026-04-11T20:22:10.494 [DEBUG] [Thread-176223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:22:10.514 [DEBUG] [Thread-176223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:22:10.514 [INFO] [Thread-176223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:22:10.517 [DEBUG] [Thread-176223] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] client lang: <none>
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] server lang: <none>
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] kex follows: False
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] Compression: none
2026-04-11T20:22:10.518 [DEBUG] [Thread-176223] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:22:10.534 [DEBUG] [Thread-176223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:22:10.535 [DEBUG] [Thread-176223] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:22:10.535 [DEBUG] [Thread-176223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:22:10.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:22:10.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:22:10.537 [DEBUG] [Thread-176223] [transport.py] [_log()] userauth is OK
2026-04-11T20:22:10.538 [DEBUG] [Thread-176223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:22:10.538 [DEBUG] [Thread-176223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:22:10.538 [DEBUG] [Thread-176223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:22:10.538 [DEBUG] [Thread-176223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:22:10.562 [INFO] [Thread-176223] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:22:10.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:22:11.172 [DEBUG] [Thread-176223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:22:11.173 [DEBUG] [Thread-176223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:22:11.173 [DEBUG] [Thread-176223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:22:11.214 [DEBUG] [Thread-176223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:22:11.214 [DEBUG] [Thread-176223] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:22:11.217 [DEBUG] [Thread-176223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:22:11.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:22:11.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:22:11.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:22:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:22:11.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:22:11.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:22:11.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:22:11.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:22:11.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:22:11.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.765047 -999.00  +12.00  10.14     97  +11.70 1 3 1 3 1     0    0 0.32 -1.20 ----- 10.1 10.1 283.2 11.7 13.2 -0.9 12.9 -0.5 12.7 -0.5 13.1 -0.1
2026-04-11T20:22:11.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:22:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:22:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.765047
2026-04-11T20:22:11.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:22:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:22:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:22:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:22:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:22:11.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:21:45', tmtdew=-0.0039, humidity=99.9513, cloud=0.0, wind=13.0925, temperature=12.4447, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:21:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:22:11.244 [DEBUG] [Thread-176223] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:22:11.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:22:11.337 [DEBUG] [Thread-176226] [transport.py] [_log()] starting thread (client mode): 0xae5f0670
2026-04-11T20:22:11.337 [DEBUG] [Thread-176226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:22:11.352 [DEBUG] [Thread-176226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:22:11.352 [INFO] [Thread-176226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:22:11.360 [DEBUG] [Thread-176226] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:22:11.360 [DEBUG] [Thread-176226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] client lang: <none>
2026-04-11T20:22:11.361 [DEBUG] [Thread-176226] [transport.py] [_log()] server lang: <none>
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] kex follows: False
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] Compression: none
2026-04-11T20:22:11.362 [DEBUG] [Thread-176226] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:22:11.423 [DEBUG] [Thread-176226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:22:11.423 [DEBUG] [Thread-176226] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:22:11.424 [DEBUG] [Thread-176226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:22:11.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:22:11.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:22:11.479 [DEBUG] [Thread-176226] [transport.py] [_log()] userauth is OK
2026-04-11T20:22:11.479 [DEBUG] [Thread-176226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:22:11.479 [DEBUG] [Thread-176226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:22:11.479 [DEBUG] [Thread-176226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:22:11.480 [DEBUG] [Thread-176226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:22:11.499 [INFO] [Thread-176226] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:22:11.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:22:11.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:22:12.332 [DEBUG] [Thread-176226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:22:12.333 [DEBUG] [Thread-176226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:22:12.381 [DEBUG] [Thread-176226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:22:12.381 [DEBUG] [Thread-176226] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:22:12.390 [DEBUG] [Thread-176226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:22:12.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:22:12.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-04-11T20:22:12.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-04-11T20:22:12.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:22:12.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:22:12.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:22:12.427 [DEBUG] [Thread-176226] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:22:12.710 [DEBUG] [Thread-176228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:15.072 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:15.073 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:27.751 [DEBUG] [Thread-176229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:29.629 [DEBUG] [Thread-176230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:42.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:22:42.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:22:42.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-04-11T20:22:42.791 [DEBUG] [Thread-176231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:22:43.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 22, 20), 0.00313, 99.9424, 0.0, 10.6585, 12.0057, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:22:43.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:22:20
2026-04-11T20:22:44.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:22:44.261 [DEBUG] [Thread-176232] [transport.py] [_log()] starting thread (client mode): 0xae5191e0
2026-04-11T20:22:44.261 [DEBUG] [Thread-176232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:22:44.281 [DEBUG] [Thread-176232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:22:44.281 [INFO] [Thread-176232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:22:44.284 [DEBUG] [Thread-176232] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:22:44.284 [DEBUG] [Thread-176232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:22:44.284 [DEBUG] [Thread-176232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:22:44.284 [DEBUG] [Thread-176232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:44.284 [DEBUG] [Thread-176232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] client lang: <none>
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] server lang: <none>
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] kex follows: False
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:22:44.285 [DEBUG] [Thread-176232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:22:44.286 [DEBUG] [Thread-176232] [transport.py] [_log()] Compression: none
2026-04-11T20:22:44.286 [DEBUG] [Thread-176232] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:22:44.303 [DEBUG] [Thread-176232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:22:44.304 [DEBUG] [Thread-176232] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:22:44.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:22:44.305 [DEBUG] [Thread-176232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:22:44.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:22:44.307 [DEBUG] [Thread-176232] [transport.py] [_log()] userauth is OK
2026-04-11T20:22:44.307 [DEBUG] [Thread-176232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:22:44.307 [DEBUG] [Thread-176232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:22:44.307 [DEBUG] [Thread-176232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:22:44.307 [DEBUG] [Thread-176232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:22:44.332 [INFO] [Thread-176232] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:22:44.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:22:44.965 [DEBUG] [Thread-176232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:22:44.965 [DEBUG] [Thread-176232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:22:44.966 [DEBUG] [Thread-176232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:22:45.006 [DEBUG] [Thread-176232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:22:45.006 [DEBUG] [Thread-176232] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:22:45.010 [DEBUG] [Thread-176232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:22:45.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:22:45.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:22:45.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:22:45.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:22:45.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:22:45.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:22:45.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:22:45.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:22:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:22:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.765394 -999.00  +12.10  11.29     97  +11.70 1 3 1 3 1     0    0 0.32 -1.06 ----- 11.3 11.3 272.4 12.7 13.2 -0.9 13.1 -0.7 12.7 -0.9 13.1 -0.1
2026-04-11T20:22:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:22:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:22:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.765394
2026-04-11T20:22:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:22:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:22:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:22:45.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:22:45.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:22:45.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:22:20', tmtdew=0.00313, humidity=99.9424, cloud=0.0, wind=10.6585, temperature=12.0057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:22:10.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:22:45.038 [DEBUG] [Thread-176232] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:22:45.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:22:45.133 [DEBUG] [Thread-176235] [transport.py] [_log()] starting thread (client mode): 0xae5f0340
2026-04-11T20:22:45.134 [DEBUG] [Thread-176235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:22:45.148 [DEBUG] [Thread-176235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:22:45.148 [INFO] [Thread-176235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] client lang: <none>
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] server lang: <none>
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] kex follows: False
2026-04-11T20:22:45.156 [DEBUG] [Thread-176235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:22:45.157 [DEBUG] [Thread-176235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:22:45.157 [DEBUG] [Thread-176235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:22:45.157 [DEBUG] [Thread-176235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:22:45.157 [DEBUG] [Thread-176235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:22:45.157 [DEBUG] [Thread-176235] [transport.py] [_log()] Compression: none
2026-04-11T20:22:45.157 [DEBUG] [Thread-176235] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:22:45.214 [DEBUG] [Thread-176235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:22:45.215 [DEBUG] [Thread-176235] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:22:45.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:22:45.216 [DEBUG] [Thread-176235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:22:45.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:22:45.270 [DEBUG] [Thread-176235] [transport.py] [_log()] userauth is OK
2026-04-11T20:22:45.271 [DEBUG] [Thread-176235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:22:45.271 [DEBUG] [Thread-176235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:22:45.271 [DEBUG] [Thread-176235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:22:45.271 [DEBUG] [Thread-176235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:22:45.291 [INFO] [Thread-176235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:22:45.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:22:45.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:22:46.116 [DEBUG] [Thread-176235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:22:46.116 [DEBUG] [Thread-176235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:22:46.164 [DEBUG] [Thread-176235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:22:46.164 [DEBUG] [Thread-176235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:22:46.174 [DEBUG] [Thread-176235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:22:46.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:22:46.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-04-11T20:22:46.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:22:46.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:22:46.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:22:46.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:22:46.210 [DEBUG] [Thread-176235] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:22:57.829 [DEBUG] [Thread-176237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:12.881 [DEBUG] [Thread-176238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:15.277 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:15.278 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:16.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:23:16.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:23:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:23:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 22, 56), -0.001965, 99.9755, 0.0, 11.6104, 12.1054, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:23:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:22:56
2026-04-11T20:23:17.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:23:18.028 [DEBUG] [Thread-176239] [transport.py] [_log()] starting thread (client mode): 0xae519750
2026-04-11T20:23:18.028 [DEBUG] [Thread-176239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:23:18.046 [DEBUG] [Thread-176239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:23:18.046 [INFO] [Thread-176239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:23:18.049 [DEBUG] [Thread-176239] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] client lang: <none>
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] server lang: <none>
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] kex follows: False
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] Compression: none
2026-04-11T20:23:18.050 [DEBUG] [Thread-176239] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:23:18.067 [DEBUG] [Thread-176239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:23:18.067 [DEBUG] [Thread-176239] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:23:18.067 [DEBUG] [Thread-176239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:23:18.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:23:18.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:23:18.070 [DEBUG] [Thread-176239] [transport.py] [_log()] userauth is OK
2026-04-11T20:23:18.070 [DEBUG] [Thread-176239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:23:18.070 [DEBUG] [Thread-176239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:23:18.070 [DEBUG] [Thread-176239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:23:18.070 [DEBUG] [Thread-176239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:23:18.094 [INFO] [Thread-176239] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:23:18.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:23:18.701 [DEBUG] [Thread-176239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:23:18.701 [DEBUG] [Thread-176239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:23:18.702 [DEBUG] [Thread-176239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:23:18.742 [DEBUG] [Thread-176239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:23:18.742 [DEBUG] [Thread-176239] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:23:18.745 [DEBUG] [Thread-176239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:23:18.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:23:18.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:23:18.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:23:18.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:23:18.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:23:18.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:23:18.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:23:18.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:23:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:23:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.765742 -999.00  +12.10   5.85     97  +11.80 1 3 1 3 1     0    0 0.32 -1.17 ----- 5.8 5.8 280.1 10.9 13.2 -0.9 13.0 -0.4 12.8 -0.6 13.1 -0.0
2026-04-11T20:23:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:23:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:23:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.765742
2026-04-11T20:23:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:23:18.770 [DEBUG] [Thread-176239] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:23:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:23:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:23:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:23:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:23:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:22:56', tmtdew=-0.001965, humidity=99.9755, cloud=0.0, wind=11.6104, temperature=12.1054, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:22:40.109', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:23:18.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:23:18.866 [DEBUG] [Thread-176242] [transport.py] [_log()] starting thread (client mode): 0xae517040
2026-04-11T20:23:18.866 [DEBUG] [Thread-176242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:23:18.881 [DEBUG] [Thread-176242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:23:18.881 [INFO] [Thread-176242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:23:18.888 [DEBUG] [Thread-176242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] client lang: <none>
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] server lang: <none>
2026-04-11T20:23:18.889 [DEBUG] [Thread-176242] [transport.py] [_log()] kex follows: False
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] Compression: none
2026-04-11T20:23:18.890 [DEBUG] [Thread-176242] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:23:18.946 [DEBUG] [Thread-176242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:23:18.946 [DEBUG] [Thread-176242] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:23:18.947 [DEBUG] [Thread-176242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:23:18.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:23:18.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:23:19.002 [DEBUG] [Thread-176242] [transport.py] [_log()] userauth is OK
2026-04-11T20:23:19.002 [DEBUG] [Thread-176242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:23:19.002 [DEBUG] [Thread-176242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:23:19.002 [DEBUG] [Thread-176242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:23:19.002 [DEBUG] [Thread-176242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:23:19.025 [INFO] [Thread-176242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:23:19.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:23:19.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:23:19.855 [DEBUG] [Thread-176242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:23:19.855 [DEBUG] [Thread-176242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:23:19.903 [DEBUG] [Thread-176242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:23:19.903 [DEBUG] [Thread-176242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:23:19.911 [DEBUG] [Thread-176242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:23:19.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:23:19.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-04-11T20:23:19.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-04-11T20:23:19.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:23:19.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:23:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:23:19.944 [DEBUG] [Thread-176242] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:23:27.914 [DEBUG] [Thread-176244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:29.716 [DEBUG] [Thread-176245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:42.970 [DEBUG] [Thread-176246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:23:49.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:23:49.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:23:49.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-04-11T20:23:51.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 23, 31), -0.00699, 100.009, 0.0, 10.5696, 12.0888, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:23:51.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:23:31
2026-04-11T20:23:51.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:23:51.770 [DEBUG] [Thread-176247] [transport.py] [_log()] starting thread (client mode): 0xae5f23e0
2026-04-11T20:23:51.770 [DEBUG] [Thread-176247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:23:51.790 [DEBUG] [Thread-176247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:23:51.790 [INFO] [Thread-176247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:51.792 [DEBUG] [Thread-176247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] client lang: <none>
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] server lang: <none>
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] kex follows: False
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] Compression: none
2026-04-11T20:23:51.793 [DEBUG] [Thread-176247] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:23:51.805 [DEBUG] [Thread-176247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:23:51.806 [DEBUG] [Thread-176247] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:23:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:23:51.807 [DEBUG] [Thread-176247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:23:51.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:23:51.809 [DEBUG] [Thread-176247] [transport.py] [_log()] userauth is OK
2026-04-11T20:23:51.809 [DEBUG] [Thread-176247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:23:51.809 [DEBUG] [Thread-176247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:23:51.809 [DEBUG] [Thread-176247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:23:51.809 [DEBUG] [Thread-176247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:23:51.829 [INFO] [Thread-176247] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:23:51.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:23:52.462 [DEBUG] [Thread-176247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:23:52.462 [DEBUG] [Thread-176247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:23:52.462 [DEBUG] [Thread-176247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:23:52.503 [DEBUG] [Thread-176247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:23:52.503 [DEBUG] [Thread-176247] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:23:52.506 [DEBUG] [Thread-176247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:23:52.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:23:52.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:23:52.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:23:52.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:23:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:23:52.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:23:52.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:23:52.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:23:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:23:52.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.766089 -999.00  +12.10   8.19     97  +11.80 1 3 1 3 1     0    0 0.31 -1.69 ----- 8.2 8.2 276.4 9.8 13.3 -0.8 13.1 -0.6 12.7 -0.7 13.1 -0.1
2026-04-11T20:23:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:23:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:23:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.766089
2026-04-11T20:23:52.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:23:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:23:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:23:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:23:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:23:52.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:23:31', tmtdew=-0.00699, humidity=100.009, cloud=0.0, wind=10.5696, temperature=12.0888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:23:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:23:52.533 [DEBUG] [Thread-176247] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:23:52.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:23:52.635 [DEBUG] [Thread-176250] [transport.py] [_log()] starting thread (client mode): 0xae5f0850
2026-04-11T20:23:52.635 [DEBUG] [Thread-176250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:23:52.650 [DEBUG] [Thread-176250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:23:52.650 [INFO] [Thread-176250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] client lang: <none>
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] server lang: <none>
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] kex follows: False
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] Compression: none
2026-04-11T20:23:52.658 [DEBUG] [Thread-176250] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:23:52.720 [DEBUG] [Thread-176250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:23:52.721 [DEBUG] [Thread-176250] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:23:52.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:23:52.722 [DEBUG] [Thread-176250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:23:52.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:23:52.782 [DEBUG] [Thread-176250] [transport.py] [_log()] userauth is OK
2026-04-11T20:23:52.782 [DEBUG] [Thread-176250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:23:52.782 [DEBUG] [Thread-176250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:23:52.783 [DEBUG] [Thread-176250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:23:52.783 [DEBUG] [Thread-176250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:23:52.806 [INFO] [Thread-176250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:23:52.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:23:52.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:23:53.636 [DEBUG] [Thread-176250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:23:53.636 [DEBUG] [Thread-176250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:23:53.684 [DEBUG] [Thread-176250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:23:53.685 [DEBUG] [Thread-176250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:23:53.694 [DEBUG] [Thread-176250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:23:53.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:23:53.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-04-11T20:23: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-04-11T20:23:53.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:23:53.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:23:53.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:23:53.731 [DEBUG] [Thread-176250] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:23:58.005 [DEBUG] [Thread-176252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:13.055 [DEBUG] [Thread-176253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:15.482 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:15.483 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:23.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:24:23.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:24:23.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-04-11T20:24:25.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 24, 6), 0.000585, 99.9588, 0.0, 11.381, 12.1053, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:24:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:24:06
2026-04-11T20:24:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:24:25.565 [DEBUG] [Thread-176254] [transport.py] [_log()] starting thread (client mode): 0xae5f0a00
2026-04-11T20:24:25.565 [DEBUG] [Thread-176254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:24:25.584 [DEBUG] [Thread-176254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:24:25.585 [INFO] [Thread-176254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:24:25.588 [DEBUG] [Thread-176254] [transport.py] [_log()] client lang: <none>
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] server lang: <none>
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] kex follows: False
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] Compression: none
2026-04-11T20:24:25.589 [DEBUG] [Thread-176254] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:24:25.605 [DEBUG] [Thread-176254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:24:25.606 [DEBUG] [Thread-176254] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:24:25.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:24:25.608 [DEBUG] [Thread-176254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:24:25.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:24:25.610 [DEBUG] [Thread-176254] [transport.py] [_log()] userauth is OK
2026-04-11T20:24:25.610 [DEBUG] [Thread-176254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:24:25.610 [DEBUG] [Thread-176254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:24:25.610 [DEBUG] [Thread-176254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:24:25.610 [DEBUG] [Thread-176254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:24:25.636 [INFO] [Thread-176254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:24:25.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:24:26.279 [DEBUG] [Thread-176254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:24:26.279 [DEBUG] [Thread-176254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:24:26.280 [DEBUG] [Thread-176254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:24:26.321 [DEBUG] [Thread-176254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:24:26.322 [DEBUG] [Thread-176254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:24:26.325 [DEBUG] [Thread-176254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:24:26.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:24:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:24:26.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:24:26.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:24:26.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:24:26.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:24:26.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:24:26.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:24:26.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:24:26.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.766783 -999.00  +12.10  12.02     97  +11.80 1 3 1 3 1     0    0 0.30 -1.70 ----- 12.0 12.0 264.6 13.0 13.3 -1.1 13.1 -0.7 12.8 -0.5 13.2 -0.2
2026-04-11T20:24:26.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:24:26.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:24:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.766783
2026-04-11T20:24:26.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:24:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:24:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:24:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:24:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:24:26.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:24:06', tmtdew=0.000585, humidity=99.9588, cloud=0.0, wind=11.381, temperature=12.1053, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:24:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:24:26.353 [DEBUG] [Thread-176254] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:24:26.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:24:26.446 [DEBUG] [Thread-176257] [transport.py] [_log()] starting thread (client mode): 0xae5191e0
2026-04-11T20:24:26.446 [DEBUG] [Thread-176257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:24:26.461 [DEBUG] [Thread-176257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:24:26.461 [INFO] [Thread-176257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] client lang: <none>
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] server lang: <none>
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] kex follows: False
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:24:26.469 [DEBUG] [Thread-176257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:24:26.470 [DEBUG] [Thread-176257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:24:26.470 [DEBUG] [Thread-176257] [transport.py] [_log()] Compression: none
2026-04-11T20:24:26.470 [DEBUG] [Thread-176257] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:24:26.531 [DEBUG] [Thread-176257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:24:26.532 [DEBUG] [Thread-176257] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:24:26.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:24:26.533 [DEBUG] [Thread-176257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:24:26.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:24:26.591 [DEBUG] [Thread-176257] [transport.py] [_log()] userauth is OK
2026-04-11T20:24:26.591 [DEBUG] [Thread-176257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:24:26.591 [DEBUG] [Thread-176257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:24:26.591 [DEBUG] [Thread-176257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:24:26.591 [DEBUG] [Thread-176257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:24:26.614 [INFO] [Thread-176257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:24:26.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:24:26.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:24:27.425 [DEBUG] [Thread-176257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:24:27.426 [DEBUG] [Thread-176257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:24:27.474 [DEBUG] [Thread-176257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:24:27.474 [DEBUG] [Thread-176257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:24:27.484 [DEBUG] [Thread-176257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:24:27.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:24:27.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-04-11T20:24:27.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:24:27.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:24:27.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:24:27.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:24:27.521 [DEBUG] [Thread-176257] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:24:28.092 [DEBUG] [Thread-176259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:29.797 [DEBUG] [Thread-176260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:43.148 [DEBUG] [Thread-176261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:24:57.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:24:57.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-04-11T20:24:58.188 [DEBUG] [Thread-176262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:24:58.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 24, 42), -0.00882, 99.9839, 0.0, 16.938, 12.378, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:24:58.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:24:42
2026-04-11T20:24:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:24:59.348 [DEBUG] [Thread-176263] [transport.py] [_log()] starting thread (client mode): 0xb0f8d060
2026-04-11T20:24:59.348 [DEBUG] [Thread-176263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:24:59.370 [DEBUG] [Thread-176263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:24:59.370 [INFO] [Thread-176263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:24:59.374 [DEBUG] [Thread-176263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] client lang: <none>
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] server lang: <none>
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] kex follows: False
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] Compression: none
2026-04-11T20:24:59.375 [DEBUG] [Thread-176263] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:24:59.394 [DEBUG] [Thread-176263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:24:59.395 [DEBUG] [Thread-176263] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:24:59.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:24:59.397 [DEBUG] [Thread-176263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:24:59.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:24:59.399 [DEBUG] [Thread-176263] [transport.py] [_log()] userauth is OK
2026-04-11T20:24:59.399 [DEBUG] [Thread-176263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:24:59.400 [DEBUG] [Thread-176263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:24:59.408 [DEBUG] [Thread-176263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:24:59.409 [DEBUG] [Thread-176263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:24:59.434 [INFO] [Thread-176263] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:24:59.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:25:00.051 [DEBUG] [Thread-176263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:25:00.051 [DEBUG] [Thread-176263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:25:00.052 [DEBUG] [Thread-176263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:25:00.093 [DEBUG] [Thread-176263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:25:00.093 [DEBUG] [Thread-176263] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:25:00.096 [DEBUG] [Thread-176263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:25:00.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:25:00.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:25:00.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:25:00.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:25:00.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:25:00.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:25:00.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:25:00.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:25:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:25:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.767130 -999.00  +12.10  10.95     97  +11.70 1 3 1 3 1     0    0 0.31 -1.36 ----- 10.9 10.9 271.8 15.2 13.3 -1.0 13.1 -0.5 12.8 -0.4 13.2 -0.2
2026-04-11T20:25:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:25:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:25:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.767130
2026-04-11T20:25:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:25:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:25:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:25:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:25:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:25:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:24:42', tmtdew=-0.00882, humidity=99.9839, cloud=0.0, wind=16.938, temperature=12.378, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:24:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:25:00.121 [DEBUG] [Thread-176263] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:25:00.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:25:00.213 [DEBUG] [Thread-176266] [transport.py] [_log()] starting thread (client mode): 0xae50ab90
2026-04-11T20:25:00.213 [DEBUG] [Thread-176266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:25:00.230 [DEBUG] [Thread-176266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:25:00.230 [INFO] [Thread-176266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:25:00.237 [DEBUG] [Thread-176266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] client lang: <none>
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] server lang: <none>
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] kex follows: False
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] Compression: none
2026-04-11T20:25:00.238 [DEBUG] [Thread-176266] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:25:00.293 [DEBUG] [Thread-176266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:25:00.293 [DEBUG] [Thread-176266] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:25:00.294 [DEBUG] [Thread-176266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:25:00.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:25:00.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:25:00.351 [DEBUG] [Thread-176266] [transport.py] [_log()] userauth is OK
2026-04-11T20:25:00.351 [DEBUG] [Thread-176266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:25:00.351 [DEBUG] [Thread-176266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:25:00.351 [DEBUG] [Thread-176266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:25:00.351 [DEBUG] [Thread-176266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:25:00.371 [INFO] [Thread-176266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:25:00.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:25:00.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:25:01.188 [DEBUG] [Thread-176266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:25:01.188 [DEBUG] [Thread-176266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:25:01.236 [DEBUG] [Thread-176266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:25:01.236 [DEBUG] [Thread-176266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:25:01.245 [DEBUG] [Thread-176266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:25:01.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:25:01.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:25:01.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:25:01.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:25:01.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:25:01.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:25:01.282 [DEBUG] [Thread-176266] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:25:13.228 [DEBUG] [Thread-176268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:25:15.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:25:15.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:25:28.279 [DEBUG] [Thread-176269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:25:29.875 [DEBUG] [Thread-176270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:25:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:25:31.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:25:31.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-04-11T20:25:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 25, 17), 0.04809, 99.9754, 0.0, 15.0869, 12.0222, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:25:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:25:17
2026-04-11T20:25:33.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:25:33.222 [DEBUG] [Thread-176271] [transport.py] [_log()] starting thread (client mode): 0xa79519c0
2026-04-11T20:25:33.222 [DEBUG] [Thread-176271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:25:33.241 [DEBUG] [Thread-176271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:25:33.241 [INFO] [Thread-176271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] client lang: <none>
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] server lang: <none>
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] kex follows: False
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:25:33.244 [DEBUG] [Thread-176271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:25:33.245 [DEBUG] [Thread-176271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:25:33.245 [DEBUG] [Thread-176271] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:25:33.245 [DEBUG] [Thread-176271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:25:33.245 [DEBUG] [Thread-176271] [transport.py] [_log()] Compression: none
2026-04-11T20:25:33.245 [DEBUG] [Thread-176271] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:25:33.260 [DEBUG] [Thread-176271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:25:33.260 [DEBUG] [Thread-176271] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:25:33.261 [DEBUG] [Thread-176271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:25:33.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:25:33.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:25:33.262 [DEBUG] [Thread-176271] [transport.py] [_log()] userauth is OK
2026-04-11T20:25:33.262 [DEBUG] [Thread-176271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:25:33.262 [DEBUG] [Thread-176271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:25:33.262 [DEBUG] [Thread-176271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:25:33.262 [DEBUG] [Thread-176271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:25:33.271 [INFO] [Thread-176271] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:25:33.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:25:33.888 [DEBUG] [Thread-176271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:25:33.888 [DEBUG] [Thread-176271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:25:33.888 [DEBUG] [Thread-176271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:25:33.929 [DEBUG] [Thread-176271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:25:33.929 [DEBUG] [Thread-176271] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:25:33.933 [DEBUG] [Thread-176271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:25:33.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:25:33.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:25:33.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:25:33.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:25:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:25:33.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:25:33.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:25:33.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:25:33.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:25:33.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.767478 -999.00  +12.10  12.00     97  +11.70 1 3 1 3 1     0    0 0.33 -0.95 ----- 12.0 12.0 272.4 16.0 13.3 -1.0 13.2 -1.0 12.8 -0.4 13.2 -0.3
2026-04-11T20:25:33.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:25:33.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:25:33.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.767478
2026-04-11T20:25:33.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:25:33.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:25:33.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:25:33.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:25:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:25:33.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:25:17', tmtdew=0.04809, humidity=99.9754, cloud=0.0, wind=15.0869, temperature=12.0222, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:25:10.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:25:33.960 [DEBUG] [Thread-176271] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:25:34.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:25:34.064 [DEBUG] [Thread-176274] [transport.py] [_log()] starting thread (client mode): 0xae5141c0
2026-04-11T20:25:34.064 [DEBUG] [Thread-176274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:25:34.079 [DEBUG] [Thread-176274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:25:34.079 [INFO] [Thread-176274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:25:34.088 [DEBUG] [Thread-176274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:25:34.088 [DEBUG] [Thread-176274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:25:34.088 [DEBUG] [Thread-176274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] client lang: <none>
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] server lang: <none>
2026-04-11T20:25:34.089 [DEBUG] [Thread-176274] [transport.py] [_log()] kex follows: False
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] Compression: none
2026-04-11T20:25:34.090 [DEBUG] [Thread-176274] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:25:34.148 [DEBUG] [Thread-176274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:25:34.149 [DEBUG] [Thread-176274] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:25:34.150 [DEBUG] [Thread-176274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:25:34.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:25:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:25:34.207 [DEBUG] [Thread-176274] [transport.py] [_log()] userauth is OK
2026-04-11T20:25:34.208 [DEBUG] [Thread-176274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:25:34.208 [DEBUG] [Thread-176274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:25:34.209 [DEBUG] [Thread-176274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:25:34.209 [DEBUG] [Thread-176274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:25:34.233 [INFO] [Thread-176274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:25:34.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:25:34.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:25:35.052 [DEBUG] [Thread-176274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:25:35.052 [DEBUG] [Thread-176274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:25:35.100 [DEBUG] [Thread-176274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:25:35.101 [DEBUG] [Thread-176274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:25:35.110 [DEBUG] [Thread-176274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:25:35.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:25:35.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-04-11T20:25:35.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:25:35.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:25:35.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:25:35.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:25:35.147 [DEBUG] [Thread-176274] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:25:43.316 [DEBUG] [Thread-176276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:25:58.369 [DEBUG] [Thread-176277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:26:05.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:26:05.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-04-11T20:26:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 25, 53), -0.01414, 100.018, 0.0, 15.9149, 12.5443, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:26:06.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:25:53
2026-04-11T20:26:06.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:26:06.987 [DEBUG] [Thread-176278] [transport.py] [_log()] starting thread (client mode): 0xae51a230
2026-04-11T20:26:06.987 [DEBUG] [Thread-176278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:26:07.006 [DEBUG] [Thread-176278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:26:07.006 [INFO] [Thread-176278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] client lang: <none>
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] server lang: <none>
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] kex follows: False
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:26:07.009 [DEBUG] [Thread-176278] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:26:07.010 [DEBUG] [Thread-176278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:26:07.010 [DEBUG] [Thread-176278] [transport.py] [_log()] Compression: none
2026-04-11T20:26:07.010 [DEBUG] [Thread-176278] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:26:07.026 [DEBUG] [Thread-176278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:26:07.026 [DEBUG] [Thread-176278] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:26:07.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:26:07.027 [DEBUG] [Thread-176278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:26:07.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:26:07.029 [DEBUG] [Thread-176278] [transport.py] [_log()] userauth is OK
2026-04-11T20:26:07.029 [DEBUG] [Thread-176278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:26:07.030 [DEBUG] [Thread-176278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:26:07.030 [DEBUG] [Thread-176278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:26:07.030 [DEBUG] [Thread-176278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:26:07.055 [INFO] [Thread-176278] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:26:07.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:26:07.706 [DEBUG] [Thread-176278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:26:07.706 [DEBUG] [Thread-176278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:26:07.707 [DEBUG] [Thread-176278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:26:07.748 [DEBUG] [Thread-176278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:26:07.748 [DEBUG] [Thread-176278] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:26:07.751 [DEBUG] [Thread-176278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:26:07.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:26:07.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:26:07.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:26:07.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:26:07.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:26:07.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:26:07.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:26:07.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:26:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:26:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.767825 -999.00  +12.00  10.68     97  +11.70 1 3 1 3 1     0    0 0.33 -0.99 ----- 10.7 10.7 270.4 13.9 13.2 -1.1 13.1 -1.1 12.8 -1.1 13.1 -0.8
2026-04-11T20:26:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:26:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:26:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.767825
2026-04-11T20:26:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:26:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:26:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:26:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:26:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:26:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:25:53', tmtdew=-0.01414, humidity=100.018, cloud=0.0, wind=15.9149, temperature=12.5443, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:25:40.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:26:07.774 [DEBUG] [Thread-176278] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:26:07.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:26:07.871 [DEBUG] [Thread-176281] [transport.py] [_log()] starting thread (client mode): 0xae51a680
2026-04-11T20:26:07.871 [DEBUG] [Thread-176281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:26:07.886 [DEBUG] [Thread-176281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:26:07.886 [INFO] [Thread-176281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] client lang: <none>
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] server lang: <none>
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] kex follows: False
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] Compression: none
2026-04-11T20:26:07.893 [DEBUG] [Thread-176281] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:26:07.950 [DEBUG] [Thread-176281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:26:07.951 [DEBUG] [Thread-176281] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:26:07.951 [DEBUG] [Thread-176281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:26:07.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:26:07.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:26:08.007 [DEBUG] [Thread-176281] [transport.py] [_log()] userauth is OK
2026-04-11T20:26:08.007 [DEBUG] [Thread-176281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:26:08.007 [DEBUG] [Thread-176281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:26:08.007 [DEBUG] [Thread-176281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:26:08.007 [DEBUG] [Thread-176281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:26:08.026 [INFO] [Thread-176281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:26:08.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:26:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:26:08.863 [DEBUG] [Thread-176281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:26:08.863 [DEBUG] [Thread-176281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:26:08.911 [DEBUG] [Thread-176281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:26:08.911 [DEBUG] [Thread-176281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:26:08.921 [DEBUG] [Thread-176281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:26:08.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:26:08.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-04-11T20:26:08.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:26:08.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:26:08.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:26:08.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:26:08.957 [DEBUG] [Thread-176281] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:26:13.403 [DEBUG] [Thread-176283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:15.889 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:15.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:28.464 [DEBUG] [Thread-176284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:29.951 [DEBUG] [Thread-176285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:26:38.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:26:38.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-04-11T20:26:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 26, 28), 0.045445, 99.9926, 0.0, 12.3167, 12.0892, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:26:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:26:28
2026-04-11T20:26:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:26:40.800 [DEBUG] [Thread-176286] [transport.py] [_log()] starting thread (client mode): 0xae519f00
2026-04-11T20:26:40.800 [DEBUG] [Thread-176286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:26:40.820 [DEBUG] [Thread-176286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:26:40.820 [INFO] [Thread-176286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:26:40.823 [DEBUG] [Thread-176286] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] client lang: <none>
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] server lang: <none>
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] kex follows: False
2026-04-11T20:26:40.824 [DEBUG] [Thread-176286] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:26:40.825 [DEBUG] [Thread-176286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:26:40.825 [DEBUG] [Thread-176286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:26:40.825 [DEBUG] [Thread-176286] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:26:40.825 [DEBUG] [Thread-176286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:26:40.825 [DEBUG] [Thread-176286] [transport.py] [_log()] Compression: none
2026-04-11T20:26:40.825 [DEBUG] [Thread-176286] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:26:40.844 [DEBUG] [Thread-176286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:26:40.845 [DEBUG] [Thread-176286] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:26:40.845 [DEBUG] [Thread-176286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:26:40.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:26:40.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:26:40.847 [DEBUG] [Thread-176286] [transport.py] [_log()] userauth is OK
2026-04-11T20:26:40.847 [DEBUG] [Thread-176286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:26:40.848 [DEBUG] [Thread-176286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:26:40.848 [DEBUG] [Thread-176286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:26:40.848 [DEBUG] [Thread-176286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:26:40.872 [INFO] [Thread-176286] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:26:40.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:26:41.498 [DEBUG] [Thread-176286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:26:41.498 [DEBUG] [Thread-176286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:26:41.499 [DEBUG] [Thread-176286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:26:41.539 [DEBUG] [Thread-176286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:26:41.539 [DEBUG] [Thread-176286] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:26:41.543 [DEBUG] [Thread-176286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:26:41.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:26:41.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:26:41.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:26:41.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:26:41.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:26:41.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:26:41.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:26:41.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:26:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:26:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.768172 -999.00  +12.10   9.24     97  +11.70 1 3 1 3 1     0    0 0.32 -1.11 ----- 9.2 9.2 283.4 12.5 13.3 -1.1 13.1 -0.9 12.8 -0.4 13.2 -0.4
2026-04-11T20:26:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:26:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:26:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.768172
2026-04-11T20:26:41.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:26:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:26:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:26:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:26:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:26:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:26:28', tmtdew=0.045445, humidity=99.9926, cloud=0.0, wind=12.3167, temperature=12.0892, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:26:10.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:26:41.570 [DEBUG] [Thread-176286] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:26:41.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:26:41.667 [DEBUG] [Thread-176289] [transport.py] [_log()] starting thread (client mode): 0xb0f55cf0
2026-04-11T20:26:41.667 [DEBUG] [Thread-176289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:26:41.681 [DEBUG] [Thread-176289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:26:41.681 [INFO] [Thread-176289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] client lang: <none>
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] server lang: <none>
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] kex follows: False
2026-04-11T20:26:41.688 [DEBUG] [Thread-176289] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:26:41.689 [DEBUG] [Thread-176289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:26:41.689 [DEBUG] [Thread-176289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:26:41.689 [DEBUG] [Thread-176289] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:26:41.689 [DEBUG] [Thread-176289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:26:41.689 [DEBUG] [Thread-176289] [transport.py] [_log()] Compression: none
2026-04-11T20:26:41.689 [DEBUG] [Thread-176289] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:26:41.749 [DEBUG] [Thread-176289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:26:41.749 [DEBUG] [Thread-176289] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:26:41.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:26:41.750 [DEBUG] [Thread-176289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:26:41.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:26:41.807 [DEBUG] [Thread-176289] [transport.py] [_log()] userauth is OK
2026-04-11T20:26:41.808 [DEBUG] [Thread-176289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:26:41.808 [DEBUG] [Thread-176289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:26:41.808 [DEBUG] [Thread-176289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:26:41.808 [DEBUG] [Thread-176289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:26:41.827 [INFO] [Thread-176289] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:26:41.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:26:41.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:26:42.636 [DEBUG] [Thread-176289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:26:42.636 [DEBUG] [Thread-176289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:26:42.684 [DEBUG] [Thread-176289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:26:42.684 [DEBUG] [Thread-176289] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:26:42.694 [DEBUG] [Thread-176289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:26:42.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:26:42.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-04-11T20:26:42.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-04-11T20:26:42.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:26:42.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:26:42.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:26:42.731 [DEBUG] [Thread-176289] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:26:43.505 [DEBUG] [Thread-176291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:26:58.556 [DEBUG] [Thread-176292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:27:12.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:27:12.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-04-11T20:27:13.591 [DEBUG] [Thread-176293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 27, 4), 0.04036, 100.026, 0.0, 11.8933, 12.1223, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:27:14.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:27:04
2026-04-11T20:27:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:27:14.550 [DEBUG] [Thread-176294] [transport.py] [_log()] starting thread (client mode): 0xae51b310
2026-04-11T20:27:14.551 [DEBUG] [Thread-176294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:27:14.571 [DEBUG] [Thread-176294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:27:14.571 [INFO] [Thread-176294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:27:14.574 [DEBUG] [Thread-176294] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] client lang: <none>
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] server lang: <none>
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] kex follows: False
2026-04-11T20:27:14.575 [DEBUG] [Thread-176294] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:27:14.576 [DEBUG] [Thread-176294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:27:14.576 [DEBUG] [Thread-176294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:27:14.576 [DEBUG] [Thread-176294] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:27:14.576 [DEBUG] [Thread-176294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:27:14.576 [DEBUG] [Thread-176294] [transport.py] [_log()] Compression: none
2026-04-11T20:27:14.576 [DEBUG] [Thread-176294] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:27:14.595 [DEBUG] [Thread-176294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:27:14.596 [DEBUG] [Thread-176294] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:27:14.596 [DEBUG] [Thread-176294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:27:14.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:27:14.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:27:14.599 [DEBUG] [Thread-176294] [transport.py] [_log()] userauth is OK
2026-04-11T20:27:14.599 [DEBUG] [Thread-176294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:27:14.599 [DEBUG] [Thread-176294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:27:14.599 [DEBUG] [Thread-176294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:27:14.599 [DEBUG] [Thread-176294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:27:14.622 [INFO] [Thread-176294] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:27:14.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:27:15.212 [DEBUG] [Thread-176294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:27:15.213 [DEBUG] [Thread-176294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:27:15.213 [DEBUG] [Thread-176294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:27:15.253 [DEBUG] [Thread-176294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:27:15.254 [DEBUG] [Thread-176294] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:27:15.257 [DEBUG] [Thread-176294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:27:15.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:27:15.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:27:15.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:27:15.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:27:15.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:27:15.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:27:15.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:27:15.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:27:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:27:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.768519 -999.00  +12.00  13.74     97  +11.70 1 3 1 3 1     0    0 0.32 -1.27 ----- 13.7 13.7 271.8 14.8 13.3 -1.1 13.2 -1.0 12.8 -0.4 13.1 -0.9
2026-04-11T20:27:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:27:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:27:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.768519
2026-04-11T20:27:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:27:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:27:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:27:15.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:27:15.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:27:15.284 [DEBUG] [Thread-176294] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:27:15.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:27:04', tmtdew=0.04036, humidity=100.026, cloud=0.0, wind=11.8933, temperature=12.1223, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:26:40.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:27:15.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:27:16.095 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:16.096 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:28.631 [DEBUG] [Thread-176297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:30.029 [DEBUG] [Thread-176298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:43.679 [DEBUG] [Thread-176299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:27:58.718 [DEBUG] [Thread-176300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:13.758 [DEBUG] [Thread-176301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:16.301 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:16.302 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:28.797 [DEBUG] [Thread-176302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:30.097 [DEBUG] [Thread-176303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:43.834 [DEBUG] [Thread-176304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:28:58.871 [DEBUG] [Thread-176305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:13.913 [DEBUG] [Thread-176306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:16.503 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:16.505 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:28.950 [DEBUG] [Thread-176307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:29.855 [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-04-11T20:29:30.175 [DEBUG] [Thread-176308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:43.985 [DEBUG] [Thread-176309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:59.023 [DEBUG] [Thread-176310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:29:59.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:29:59.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:29:59.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-04-11T20:30:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 29, 25), 0.040425, 100.025, 0.0, 13.4456, 12.0555, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:30:01.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:29:25
2026-04-11T20:30:01.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:30:01.712 [DEBUG] [Thread-176311] [transport.py] [_log()] starting thread (client mode): 0xb0fb5480
2026-04-11T20:30:01.712 [DEBUG] [Thread-176311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:30:01.732 [DEBUG] [Thread-176311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:30:01.732 [INFO] [Thread-176311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] client lang: <none>
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] server lang: <none>
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] kex follows: False
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] Compression: none
2026-04-11T20:30:01.736 [DEBUG] [Thread-176311] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:30:01.753 [DEBUG] [Thread-176311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:30:01.753 [DEBUG] [Thread-176311] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:30:01.753 [DEBUG] [Thread-176311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:30:01.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:30:01.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:30:01.754 [DEBUG] [Thread-176311] [transport.py] [_log()] userauth is OK
2026-04-11T20:30:01.754 [DEBUG] [Thread-176311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:30:01.754 [DEBUG] [Thread-176311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:30:01.754 [DEBUG] [Thread-176311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:30:01.754 [DEBUG] [Thread-176311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:30:01.771 [INFO] [Thread-176311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:30:01.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:30:02.407 [DEBUG] [Thread-176311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:30:02.407 [DEBUG] [Thread-176311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:30:02.408 [DEBUG] [Thread-176311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:30:02.448 [DEBUG] [Thread-176311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:30:02.448 [DEBUG] [Thread-176311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:30:02.451 [DEBUG] [Thread-176311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:30:02.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:30:02.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:30:02.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:30:02.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:30:02.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:30:02.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:30:02.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:30:02.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:30:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:30:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.770603 -999.00  +12.00  13.82     97  +11.60 1 3 1 3 1     0    0 0.33 -0.61 ----- 13.8 13.8 275.0 18.2 13.3 -1.1 13.1 -0.9 12.7 -0.9 13.1 -0.7
2026-04-11T20:30:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:30:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:30:02.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.770603
2026-04-11T20:30:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:30:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:30:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:30:02.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:30:02.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:30:02.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:29:25', tmtdew=0.040425, humidity=100.025, cloud=0.0, wind=13.4456, temperature=12.0555, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:29:40.099', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:30:02.518 [DEBUG] [Thread-176311] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:30:02.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:30:02.612 [DEBUG] [Thread-176314] [transport.py] [_log()] starting thread (client mode): 0xae514400
2026-04-11T20:30:02.612 [DEBUG] [Thread-176314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:30:02.628 [DEBUG] [Thread-176314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:30:02.628 [INFO] [Thread-176314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:30:02.638 [DEBUG] [Thread-176314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:30:02.638 [DEBUG] [Thread-176314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:30:02.639 [DEBUG] [Thread-176314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] client lang: <none>
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] server lang: <none>
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] kex follows: False
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] Compression: none
2026-04-11T20:30:02.640 [DEBUG] [Thread-176314] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:30:02.700 [DEBUG] [Thread-176314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:30:02.700 [DEBUG] [Thread-176314] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:30:02.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:30:02.702 [DEBUG] [Thread-176314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:30:02.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:30:02.756 [DEBUG] [Thread-176314] [transport.py] [_log()] userauth is OK
2026-04-11T20:30:02.756 [DEBUG] [Thread-176314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:30:02.756 [DEBUG] [Thread-176314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:30:02.757 [DEBUG] [Thread-176314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:30:02.757 [DEBUG] [Thread-176314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:30:02.776 [INFO] [Thread-176314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:30:02.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:30:02.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:30:03.611 [DEBUG] [Thread-176314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:30:03.619 [DEBUG] [Thread-176314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:30:03.660 [DEBUG] [Thread-176314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:30:03.660 [DEBUG] [Thread-176314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:30:03.669 [DEBUG] [Thread-176314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:30:03.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:30:03.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-04-11T20:30:03.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-04-11T20:30:03.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:30:03.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:30:03.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:30:03.706 [DEBUG] [Thread-176314] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:30:14.061 [DEBUG] [Thread-176316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:30:16.705 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:30:16.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:30:29.118 [DEBUG] [Thread-176317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:30:30.253 [DEBUG] [Thread-176318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:30:33.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:30:33.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:30:33.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-04-11T20:30:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 30, 1), 0.04804, 99.9756, 0.0, 15.916, 12.0389, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:30:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:30:01
2026-04-11T20:30:35.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:30:35.562 [DEBUG] [Thread-176319] [transport.py] [_log()] starting thread (client mode): 0xa7953130
2026-04-11T20:30:35.562 [DEBUG] [Thread-176319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:30:35.581 [DEBUG] [Thread-176319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:30:35.582 [INFO] [Thread-176319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:30:35.584 [DEBUG] [Thread-176319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] client lang: <none>
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] server lang: <none>
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] kex follows: False
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] Compression: none
2026-04-11T20:30:35.585 [DEBUG] [Thread-176319] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:30:35.603 [DEBUG] [Thread-176319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:30:35.603 [DEBUG] [Thread-176319] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:30:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:30:35.605 [DEBUG] [Thread-176319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:30:35.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:30:35.607 [DEBUG] [Thread-176319] [transport.py] [_log()] userauth is OK
2026-04-11T20:30:35.607 [DEBUG] [Thread-176319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:30:35.607 [DEBUG] [Thread-176319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:30:35.607 [DEBUG] [Thread-176319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:30:35.608 [DEBUG] [Thread-176319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:30:35.631 [INFO] [Thread-176319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:30:35.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:30:36.276 [DEBUG] [Thread-176319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:30:36.276 [DEBUG] [Thread-176319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:30:36.276 [DEBUG] [Thread-176319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:30:36.317 [DEBUG] [Thread-176319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:30:36.317 [DEBUG] [Thread-176319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:30:36.320 [DEBUG] [Thread-176319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:30:36.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:30:36.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:30:36.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:30:36.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:30:36.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:30:36.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:30:36.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:30:36.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:30:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:30:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.770949 -999.00  +11.90  15.06     97  +11.60 1 3 1 3 1     0    0 0.32 -0.74 ----- 15.1 15.1 269.8 20.0 13.2 -1.4 13.1 -1.0 12.6 -1.1 13.1 -0.6
2026-04-11T20:30:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:30:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:30:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.770949
2026-04-11T20:30:36.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:30:36.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:30:36.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:30:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:30:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:30:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:30:01', tmtdew=0.04804, humidity=99.9756, cloud=0.0, wind=15.916, temperature=12.0389, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:30:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:30:36.347 [DEBUG] [Thread-176319] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:30:36.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:30:36.440 [DEBUG] [Thread-176322] [transport.py] [_log()] starting thread (client mode): 0xae5194e0
2026-04-11T20:30:36.440 [DEBUG] [Thread-176322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:30:36.455 [DEBUG] [Thread-176322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:30:36.455 [INFO] [Thread-176322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:30:36.462 [DEBUG] [Thread-176322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:30:36.462 [DEBUG] [Thread-176322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] client lang: <none>
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] server lang: <none>
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] kex follows: False
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:30:36.463 [DEBUG] [Thread-176322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:30:36.464 [DEBUG] [Thread-176322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:30:36.464 [DEBUG] [Thread-176322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:30:36.464 [DEBUG] [Thread-176322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:30:36.464 [DEBUG] [Thread-176322] [transport.py] [_log()] Compression: none
2026-04-11T20:30:36.464 [DEBUG] [Thread-176322] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:30:36.519 [DEBUG] [Thread-176322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:30:36.520 [DEBUG] [Thread-176322] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:30:36.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:30:36.521 [DEBUG] [Thread-176322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:30:36.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:30:36.576 [DEBUG] [Thread-176322] [transport.py] [_log()] userauth is OK
2026-04-11T20:30:36.576 [DEBUG] [Thread-176322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:30:36.576 [DEBUG] [Thread-176322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:30:36.576 [DEBUG] [Thread-176322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:30:36.577 [DEBUG] [Thread-176322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:30:36.595 [INFO] [Thread-176322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:30:36.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:30:36.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:30:37.410 [DEBUG] [Thread-176322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:30:37.410 [DEBUG] [Thread-176322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:30:37.458 [DEBUG] [Thread-176322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:30:37.458 [DEBUG] [Thread-176322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:30:37.468 [DEBUG] [Thread-176322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:30:37.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:30:37.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:30:37.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-04-11T20:30:37.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:30:37.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:30:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:30:37.505 [DEBUG] [Thread-176322] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:30:44.155 [DEBUG] [Thread-176324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:30:59.214 [DEBUG] [Thread-176325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:31:07.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:31:07.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:31:08.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 30, 36), -0.009, 99.9843, 0.0, 15.1387, 12.5109, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:31:08.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:30:36
2026-04-11T20:31:09.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:31:09.341 [DEBUG] [Thread-176326] [transport.py] [_log()] starting thread (client mode): 0xa7950280
2026-04-11T20:31:09.341 [DEBUG] [Thread-176326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:31:09.357 [DEBUG] [Thread-176326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:31:09.357 [INFO] [Thread-176326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] client lang: <none>
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] server lang: <none>
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] kex follows: False
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:31:09.360 [DEBUG] [Thread-176326] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:31:09.361 [DEBUG] [Thread-176326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:31:09.361 [DEBUG] [Thread-176326] [transport.py] [_log()] Compression: none
2026-04-11T20:31:09.361 [DEBUG] [Thread-176326] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:31:09.376 [DEBUG] [Thread-176326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:31:09.377 [DEBUG] [Thread-176326] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:31:09.377 [DEBUG] [Thread-176326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:31:09.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:31:09.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:31:09.379 [DEBUG] [Thread-176326] [transport.py] [_log()] userauth is OK
2026-04-11T20:31:09.379 [DEBUG] [Thread-176326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:31:09.379 [DEBUG] [Thread-176326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:31:09.379 [DEBUG] [Thread-176326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:31:09.379 [DEBUG] [Thread-176326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:31:09.399 [INFO] [Thread-176326] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:31:09.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:31:10.026 [DEBUG] [Thread-176326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:31:10.027 [DEBUG] [Thread-176326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:31:10.027 [DEBUG] [Thread-176326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:31:10.068 [DEBUG] [Thread-176326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:31:10.068 [DEBUG] [Thread-176326] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:31:10.071 [DEBUG] [Thread-176326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:31:10.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:31:10.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:31:10.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:31:10.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:31:10.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:31:10.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:31:10.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:31:10.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:31:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:31:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.771297 -999.00  +12.00   8.17     97  +11.60 1 3 1 3 1     0    0 0.33 -0.66 ----- 8.2 8.2 273.2 11.6 13.2 -1.1 13.1 -0.8 12.7 -0.2 13.1 -0.4
2026-04-11T20:31:10.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:31:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:31:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.771297
2026-04-11T20:31:10.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:31:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:31:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:31:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:31:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:31:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:30:36', tmtdew=-0.009, humidity=99.9843, cloud=0.0, wind=15.1387, temperature=12.5109, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:30:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:31:10.098 [DEBUG] [Thread-176326] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:31:10.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:31:10.188 [DEBUG] [Thread-176329] [transport.py] [_log()] starting thread (client mode): 0xb0f56620
2026-04-11T20:31:10.188 [DEBUG] [Thread-176329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:31:10.203 [DEBUG] [Thread-176329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:31:10.203 [INFO] [Thread-176329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] client lang: <none>
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] server lang: <none>
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] kex follows: False
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] Compression: none
2026-04-11T20:31:10.211 [DEBUG] [Thread-176329] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:31:10.267 [DEBUG] [Thread-176329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:31:10.268 [DEBUG] [Thread-176329] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:31:10.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:31:10.269 [DEBUG] [Thread-176329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:31:10.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:31:10.324 [DEBUG] [Thread-176329] [transport.py] [_log()] userauth is OK
2026-04-11T20:31:10.324 [DEBUG] [Thread-176329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:31:10.324 [DEBUG] [Thread-176329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:31:10.324 [DEBUG] [Thread-176329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:31:10.324 [DEBUG] [Thread-176329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:31:10.343 [INFO] [Thread-176329] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:31:10.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:31:10.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:31:11.165 [DEBUG] [Thread-176329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:31:11.165 [DEBUG] [Thread-176329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:31:11.213 [DEBUG] [Thread-176329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:31:11.213 [DEBUG] [Thread-176329] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:31:11.222 [DEBUG] [Thread-176329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:31:11.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:31:11.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:31:11.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-04-11T20:31:11.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:31:11.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:31:11.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:31:11.260 [DEBUG] [Thread-176329] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:31:14.250 [DEBUG] [Thread-176331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:16.910 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:16.911 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:29.301 [DEBUG] [Thread-176332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:30.325 [DEBUG] [Thread-176333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:31:41.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:31:41.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:31:42.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 31, 11), -0.00196, 99.9755, 0.0, 16.2688, 12.0554, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:31:42.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:31:11
2026-04-11T20:31:42.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:31:43.113 [DEBUG] [Thread-176334] [transport.py] [_log()] starting thread (client mode): 0xb0f56890
2026-04-11T20:31:43.113 [DEBUG] [Thread-176334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:31:43.133 [DEBUG] [Thread-176334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:31:43.133 [INFO] [Thread-176334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:31:43.136 [DEBUG] [Thread-176334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:31:43.136 [DEBUG] [Thread-176334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:31:43.136 [DEBUG] [Thread-176334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:31:43.136 [DEBUG] [Thread-176334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] client lang: <none>
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] server lang: <none>
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] kex follows: False
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] Compression: none
2026-04-11T20:31:43.137 [DEBUG] [Thread-176334] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:31:43.154 [DEBUG] [Thread-176334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:31:43.154 [DEBUG] [Thread-176334] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:31:43.155 [DEBUG] [Thread-176334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:31:43.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:31:43.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:31:43.157 [DEBUG] [Thread-176334] [transport.py] [_log()] userauth is OK
2026-04-11T20:31:43.157 [DEBUG] [Thread-176334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:31:43.157 [DEBUG] [Thread-176334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:31:43.157 [DEBUG] [Thread-176334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:31:43.157 [DEBUG] [Thread-176334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:31:43.174 [INFO] [Thread-176334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:31:43.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:31:43.781 [DEBUG] [Thread-176334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:31:43.781 [DEBUG] [Thread-176334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:31:43.781 [DEBUG] [Thread-176334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:31:43.822 [DEBUG] [Thread-176334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:31:43.822 [DEBUG] [Thread-176334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:31:43.825 [DEBUG] [Thread-176334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:31:43.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:31:43.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:31:43.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:31:43.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:31:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:31:43.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:31:43.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:31:43.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:31:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:31:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.771644 -999.00  +12.10  13.08     97  +11.70 1 3 1 3 1     0    0 0.32 -0.86 ----- 13.1 13.1 262.8 15.4 13.3 -1.3 13.1 -0.7 12.7 -0.2 13.1 -0.6
2026-04-11T20:31:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:31:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:31:43.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.771644
2026-04-11T20:31:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:31:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:31:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:31:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:31:43.850 [DEBUG] [Thread-176334] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:31:43.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:31:43.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:31:11', tmtdew=-0.00196, humidity=99.9755, cloud=0.0, wind=16.2688, temperature=12.0554, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:31:10.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:31:43.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:31:43.952 [DEBUG] [Thread-176337] [transport.py] [_log()] starting thread (client mode): 0xb0f571f0
2026-04-11T20:31:43.952 [DEBUG] [Thread-176337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:31:43.967 [DEBUG] [Thread-176337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:31:43.967 [INFO] [Thread-176337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:31:43.974 [DEBUG] [Thread-176337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] client lang: <none>
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] server lang: <none>
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] kex follows: False
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:31:43.975 [DEBUG] [Thread-176337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:31:43.976 [DEBUG] [Thread-176337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:31:43.976 [DEBUG] [Thread-176337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:31:43.976 [DEBUG] [Thread-176337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:31:43.976 [DEBUG] [Thread-176337] [transport.py] [_log()] Compression: none
2026-04-11T20:31:43.976 [DEBUG] [Thread-176337] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:31:44.031 [DEBUG] [Thread-176337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:31:44.031 [DEBUG] [Thread-176337] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:31:44.032 [DEBUG] [Thread-176337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:31:44.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:31:44.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:31:44.087 [DEBUG] [Thread-176337] [transport.py] [_log()] userauth is OK
2026-04-11T20:31:44.087 [DEBUG] [Thread-176337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:31:44.087 [DEBUG] [Thread-176337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:31:44.087 [DEBUG] [Thread-176337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:31:44.088 [DEBUG] [Thread-176337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:31:44.106 [INFO] [Thread-176337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:31:44.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:31:44.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:31:44.335 [DEBUG] [Thread-176339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:31:44.960 [DEBUG] [Thread-176337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:31:44.960 [DEBUG] [Thread-176337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:31:45.009 [DEBUG] [Thread-176337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:31:45.009 [DEBUG] [Thread-176337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:31:45.018 [DEBUG] [Thread-176337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:31:45.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:31:45.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-04-11T20:31:45.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:31:45.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:31:45.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:31:45.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:31:45.053 [DEBUG] [Thread-176337] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:31:59.383 [DEBUG] [Thread-176340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:14.420 [DEBUG] [Thread-176341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:15.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:32:15.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:32:15.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-04-11T20:32:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 31, 47), -0.00389, 99.951, 0.0, 18.702, 12.4776, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:32:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:31:47
2026-04-11T20:32:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:32:16.923 [DEBUG] [Thread-176342] [transport.py] [_log()] starting thread (client mode): 0xae5172b0
2026-04-11T20:32:16.923 [DEBUG] [Thread-176342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:32:16.943 [DEBUG] [Thread-176342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:32:16.943 [INFO] [Thread-176342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:32:16.946 [DEBUG] [Thread-176342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:32:16.946 [DEBUG] [Thread-176342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:32:16.946 [DEBUG] [Thread-176342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] client lang: <none>
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] server lang: <none>
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] kex follows: False
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:32:16.947 [DEBUG] [Thread-176342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:32:16.948 [DEBUG] [Thread-176342] [transport.py] [_log()] Compression: none
2026-04-11T20:32:16.948 [DEBUG] [Thread-176342] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:32:16.964 [DEBUG] [Thread-176342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:32:16.964 [DEBUG] [Thread-176342] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:32:16.965 [DEBUG] [Thread-176342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:32:16.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:32:16.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:32:17.009 [DEBUG] [Thread-176342] [transport.py] [_log()] userauth is OK
2026-04-11T20:32:17.009 [DEBUG] [Thread-176342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:32:17.009 [DEBUG] [Thread-176342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:32:17.009 [DEBUG] [Thread-176342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:32:17.009 [DEBUG] [Thread-176342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:32:17.042 [INFO] [Thread-176342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:32:17.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:32:17.117 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:17.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:17.707 [DEBUG] [Thread-176342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:32:17.708 [DEBUG] [Thread-176342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:32:17.708 [DEBUG] [Thread-176342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:32:17.749 [DEBUG] [Thread-176342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:32:17.749 [DEBUG] [Thread-176342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:32:17.752 [DEBUG] [Thread-176342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:32:17.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:32:17.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:32:17.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:32:17.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:32:17.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:32:17.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:32:17.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:32:17.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:32:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.771991 -999.00  +12.00  15.32     97  +11.70 1 3 1 3 1     0    0 0.33 -0.61 ----- 15.3 15.3 271.0 19.9 13.2 -1.2 13.1 -0.9 12.7 -0.4 13.1 -0.8
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.771991
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:32:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:32:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:32:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:32:17.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:31:47', tmtdew=-0.00389, humidity=99.951, cloud=0.0, wind=18.702, temperature=12.4776, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:31:40.022', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:32:17.775 [DEBUG] [Thread-176342] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:32:17.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:32:17.862 [DEBUG] [Thread-176345] [transport.py] [_log()] starting thread (client mode): 0xa79513f0
2026-04-11T20:32:17.862 [DEBUG] [Thread-176345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:32:17.876 [DEBUG] [Thread-176345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:32:17.877 [INFO] [Thread-176345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:32:17.887 [DEBUG] [Thread-176345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] client lang: <none>
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] server lang: <none>
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] kex follows: False
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] Compression: none
2026-04-11T20:32:17.888 [DEBUG] [Thread-176345] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:32:17.943 [DEBUG] [Thread-176345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:32:17.943 [DEBUG] [Thread-176345] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:32:17.944 [DEBUG] [Thread-176345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:32:17.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:32:17.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:32:17.999 [DEBUG] [Thread-176345] [transport.py] [_log()] userauth is OK
2026-04-11T20:32:18.000 [DEBUG] [Thread-176345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:32:18.000 [DEBUG] [Thread-176345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:32:18.000 [DEBUG] [Thread-176345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:32:18.000 [DEBUG] [Thread-176345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:32:18.032 [INFO] [Thread-176345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:32:18.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:32:18.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:32:18.850 [DEBUG] [Thread-176345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:32:18.850 [DEBUG] [Thread-176345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:32:18.901 [DEBUG] [Thread-176345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:32:18.901 [DEBUG] [Thread-176345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:32:18.910 [DEBUG] [Thread-176345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:32:18.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:32:18.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-04-11T20:32:18.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:32:18.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:32:18.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:32:18.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:32:18.953 [DEBUG] [Thread-176345] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:32:29.458 [DEBUG] [Thread-176347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:30.398 [DEBUG] [Thread-176348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:44.508 [DEBUG] [Thread-176349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:32:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:32:48.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:32:48.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:32:50.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 32, 22), 0.04551, 99.992, 0.0, 14.5224, 12.1219, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:32:50.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:32:22
2026-04-11T20:32:50.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:32:50.792 [DEBUG] [Thread-176350] [transport.py] [_log()] starting thread (client mode): 0xae509b40
2026-04-11T20:32:50.792 [DEBUG] [Thread-176350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:32:50.813 [DEBUG] [Thread-176350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:32:50.813 [INFO] [Thread-176350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] client lang: <none>
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] server lang: <none>
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] kex follows: False
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] Compression: none
2026-04-11T20:32:50.816 [DEBUG] [Thread-176350] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:32:50.824 [DEBUG] [Thread-176350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:32:50.825 [DEBUG] [Thread-176350] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:32:50.825 [DEBUG] [Thread-176350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:32:50.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:32:50.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:32:50.826 [DEBUG] [Thread-176350] [transport.py] [_log()] userauth is OK
2026-04-11T20:32:50.826 [DEBUG] [Thread-176350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:32:50.826 [DEBUG] [Thread-176350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:32:50.827 [DEBUG] [Thread-176350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:32:50.827 [DEBUG] [Thread-176350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:32:50.843 [INFO] [Thread-176350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:32:50.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:32:51.648 [DEBUG] [Thread-176350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:32:51.649 [DEBUG] [Thread-176350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:32:51.649 [DEBUG] [Thread-176350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:32:51.690 [DEBUG] [Thread-176350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:32:51.690 [DEBUG] [Thread-176350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:32:51.694 [DEBUG] [Thread-176350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:32:51.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:32:51.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:32:51.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:32:51.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:32:51.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:32:51.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:32:51.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:32:51.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:32:51.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:32:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.772339 -999.00  +12.00  14.24     97  +11.60 1 3 1 3 1     0    0 0.35 -0.09 ----- 14.2 14.2 270.8 20.4 13.2 -1.2 13.1 -1.0 12.7 -0.5 13.1 -0.5
2026-04-11T20:32:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:32:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:32:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.772339
2026-04-11T20:32:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:32:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:32:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:32:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:32:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:32:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:32:22', tmtdew=0.04551, humidity=99.992, cloud=0.0, wind=14.5224, temperature=12.1219, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:32:10.090', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:32:51.723 [DEBUG] [Thread-176350] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:32:51.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:32:51.816 [DEBUG] [Thread-176353] [transport.py] [_log()] starting thread (client mode): 0xae509d20
2026-04-11T20:32:51.816 [DEBUG] [Thread-176353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:32:51.832 [DEBUG] [Thread-176353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:32:51.833 [INFO] [Thread-176353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:32:51.840 [DEBUG] [Thread-176353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] client lang: <none>
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] server lang: <none>
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] kex follows: False
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] Compression: none
2026-04-11T20:32:51.841 [DEBUG] [Thread-176353] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:32:51.900 [DEBUG] [Thread-176353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:32:51.901 [DEBUG] [Thread-176353] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:32:51.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:32:51.902 [DEBUG] [Thread-176353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:32:51.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:32:51.956 [DEBUG] [Thread-176353] [transport.py] [_log()] userauth is OK
2026-04-11T20:32:51.956 [DEBUG] [Thread-176353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:32:51.956 [DEBUG] [Thread-176353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:32:51.956 [DEBUG] [Thread-176353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:32:51.956 [DEBUG] [Thread-176353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:32:51.976 [INFO] [Thread-176353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:32:51.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:32:51.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:32:52.821 [DEBUG] [Thread-176353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:32:52.821 [DEBUG] [Thread-176353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:32:52.869 [DEBUG] [Thread-176353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:32:52.869 [DEBUG] [Thread-176353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:32:52.878 [DEBUG] [Thread-176353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:32:52.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:32:52.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-04-11T20:32:52.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-04-11T20:32:52.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:32:52.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:32:52.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:32:52.914 [DEBUG] [Thread-176353] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:32:59.542 [DEBUG] [Thread-176355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:14.583 [DEBUG] [Thread-176356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:17.322 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:17.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:33:22.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:33:22.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-04-11T20:33:24.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 32, 58), 0.048065, 99.9754, 0.0, 15.5279, 12.0888, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:33:24.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:32:58
2026-04-11T20:33:24.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:33:24.754 [DEBUG] [Thread-176357] [transport.py] [_log()] starting thread (client mode): 0xb0fb7bb0
2026-04-11T20:33:24.754 [DEBUG] [Thread-176357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:33:24.769 [DEBUG] [Thread-176357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:33:24.769 [INFO] [Thread-176357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:33:24.772 [DEBUG] [Thread-176357] [transport.py] [_log()] client lang: <none>
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] server lang: <none>
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] kex follows: False
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] Compression: none
2026-04-11T20:33:24.773 [DEBUG] [Thread-176357] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:33:24.789 [DEBUG] [Thread-176357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:33:24.790 [DEBUG] [Thread-176357] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:33:24.790 [DEBUG] [Thread-176357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:33:24.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:33:24.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:33:24.792 [DEBUG] [Thread-176357] [transport.py] [_log()] userauth is OK
2026-04-11T20:33:24.792 [DEBUG] [Thread-176357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:33:24.792 [DEBUG] [Thread-176357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:33:24.792 [DEBUG] [Thread-176357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:33:24.792 [DEBUG] [Thread-176357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:33:24.816 [INFO] [Thread-176357] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:33:24.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:33:25.619 [DEBUG] [Thread-176357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:33:25.620 [DEBUG] [Thread-176357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:33:25.620 [DEBUG] [Thread-176357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:33:25.661 [DEBUG] [Thread-176357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:33:25.661 [DEBUG] [Thread-176357] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:33:25.664 [DEBUG] [Thread-176357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:33:25.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:33:25.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:33:25.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:33:25.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:33:25.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:33:25.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:33:25.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:33:25.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:33:25.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:33:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.772686 -999.00  +12.00  13.95     97  +11.70 1 3 1 3 1     0    0 0.37 0.34 ----- 13.9 13.9 272.0 17.5 13.2 -1.1 13.1 -0.9 12.7 -1.0 13.1 -0.6
2026-04-11T20:33:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:33:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:33:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.772686
2026-04-11T20:33:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:33:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:33:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:33:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:33:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:33:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:32:58', tmtdew=0.048065, humidity=99.9754, cloud=0.0, wind=15.5279, temperature=12.0888, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:32:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:33:25.691 [DEBUG] [Thread-176357] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:33:25.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:33:25.786 [DEBUG] [Thread-176360] [transport.py] [_log()] starting thread (client mode): 0xb0f57d30
2026-04-11T20:33:25.786 [DEBUG] [Thread-176360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:33:25.802 [DEBUG] [Thread-176360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:33:25.802 [INFO] [Thread-176360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:33:25.809 [DEBUG] [Thread-176360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:33:25.809 [DEBUG] [Thread-176360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:33:25.809 [DEBUG] [Thread-176360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] client lang: <none>
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] server lang: <none>
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] kex follows: False
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] Compression: none
2026-04-11T20:33:25.810 [DEBUG] [Thread-176360] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:33:25.868 [DEBUG] [Thread-176360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:33:25.868 [DEBUG] [Thread-176360] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:33:25.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:33:25.870 [DEBUG] [Thread-176360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:33:25.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:33:25.924 [DEBUG] [Thread-176360] [transport.py] [_log()] userauth is OK
2026-04-11T20:33:25.924 [DEBUG] [Thread-176360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:33:25.924 [DEBUG] [Thread-176360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:33:25.925 [DEBUG] [Thread-176360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:33:25.925 [DEBUG] [Thread-176360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:33:25.944 [INFO] [Thread-176360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:33:25.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:33:25.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:33:26.755 [DEBUG] [Thread-176360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:33:26.755 [DEBUG] [Thread-176360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:33:26.803 [DEBUG] [Thread-176360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:33:26.804 [DEBUG] [Thread-176360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:33:26.813 [DEBUG] [Thread-176360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:33:26.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:33:26.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:33:26.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:33:26.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:33:26.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:33:26.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:33:26.849 [DEBUG] [Thread-176360] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:33:29.623 [DEBUG] [Thread-176362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:30.484 [DEBUG] [Thread-176363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:44.685 [DEBUG] [Thread-176364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:33:56.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:33:56.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:33:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 33, 34), -0.00887, 99.9839, 0.0, 14.8212, 12.4443, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:33:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:33:34
2026-04-11T20:33:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:33:58.695 [DEBUG] [Thread-176365] [transport.py] [_log()] starting thread (client mode): 0xae509300
2026-04-11T20:33:58.695 [DEBUG] [Thread-176365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:33:58.715 [DEBUG] [Thread-176365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:33:58.715 [INFO] [Thread-176365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:33:58.718 [DEBUG] [Thread-176365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] client lang: <none>
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] server lang: <none>
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] kex follows: False
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:33:58.719 [DEBUG] [Thread-176365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:33:58.720 [DEBUG] [Thread-176365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:33:58.720 [DEBUG] [Thread-176365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:33:58.720 [DEBUG] [Thread-176365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:33:58.720 [DEBUG] [Thread-176365] [transport.py] [_log()] Compression: none
2026-04-11T20:33:58.720 [DEBUG] [Thread-176365] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:33:58.739 [DEBUG] [Thread-176365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:33:58.740 [DEBUG] [Thread-176365] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:33:58.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:33:58.741 [DEBUG] [Thread-176365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:33:58.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:33:58.743 [DEBUG] [Thread-176365] [transport.py] [_log()] userauth is OK
2026-04-11T20:33:58.743 [DEBUG] [Thread-176365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:33:58.744 [DEBUG] [Thread-176365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:33:58.744 [DEBUG] [Thread-176365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:33:58.744 [DEBUG] [Thread-176365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:33:58.766 [INFO] [Thread-176365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:33:58.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:33:59.502 [DEBUG] [Thread-176365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:33:59.502 [DEBUG] [Thread-176365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:33:59.502 [DEBUG] [Thread-176365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:33:59.543 [DEBUG] [Thread-176365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:33:59.543 [DEBUG] [Thread-176365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:33:59.547 [DEBUG] [Thread-176365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:33:59.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:33:59.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:33:59.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:33:59.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:33:59.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:33:59.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:33:59.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.773380 -999.00  +12.00  12.45     97  +11.60 1 3 1 3 1     0    0 0.37 0.82 ----- 12.4 12.4 276.2 19.1 13.2 -1.1 13.1 -1.0 12.6 -0.7 13.1 -0.6
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.773380
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:33:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:33:34', tmtdew=-0.00887, humidity=99.9839, cloud=0.0, wind=14.8212, temperature=12.4443, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:33:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:33:59.573 [DEBUG] [Thread-176365] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:33:59.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:33:59.655 [DEBUG] [Thread-176368] [transport.py] [_log()] starting thread (client mode): 0xae50ada0
2026-04-11T20:33:59.655 [DEBUG] [Thread-176368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:33:59.670 [DEBUG] [Thread-176368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:33:59.670 [INFO] [Thread-176368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] client lang: <none>
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] server lang: <none>
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] kex follows: False
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:33:59.678 [DEBUG] [Thread-176368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:33:59.679 [DEBUG] [Thread-176368] [transport.py] [_log()] Compression: none
2026-04-11T20:33:59.679 [DEBUG] [Thread-176368] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:33:59.716 [DEBUG] [Thread-176370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:33:59.734 [DEBUG] [Thread-176368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:33:59.734 [DEBUG] [Thread-176368] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:33:59.734 [DEBUG] [Thread-176368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:33:59.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:33:59.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:33:59.791 [DEBUG] [Thread-176368] [transport.py] [_log()] userauth is OK
2026-04-11T20:33:59.791 [DEBUG] [Thread-176368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:33:59.791 [DEBUG] [Thread-176368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:33:59.791 [DEBUG] [Thread-176368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:33:59.791 [DEBUG] [Thread-176368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:33:59.805 [INFO] [Thread-176368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:33:59.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:33:59.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:34:00.628 [DEBUG] [Thread-176368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:34:00.628 [DEBUG] [Thread-176368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:34:00.676 [DEBUG] [Thread-176368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:34:00.676 [DEBUG] [Thread-176368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:34:00.686 [DEBUG] [Thread-176368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:34:00.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:34:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:34:00.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-04-11T20:34:00.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:34:00.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:34:00.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:34:00.722 [DEBUG] [Thread-176368] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:34:14.758 [DEBUG] [Thread-176371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:34:17.526 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:34:17.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:34:29.796 [DEBUG] [Thread-176372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:34:30.566 [DEBUG] [Thread-176373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:34:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:34:30.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:34:30.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-04-11T20:34:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 34, 9), 0.04299, 100.009, 0.0, 16.2871, 12.0719, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:34:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:34:09
2026-04-11T20:34:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:34:32.557 [DEBUG] [Thread-176374] [transport.py] [_log()] starting thread (client mode): 0xae518550
2026-04-11T20:34:32.557 [DEBUG] [Thread-176374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:34:32.577 [DEBUG] [Thread-176374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:34:32.577 [INFO] [Thread-176374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] client lang: <none>
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] server lang: <none>
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] kex follows: False
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:34:32.580 [DEBUG] [Thread-176374] [transport.py] [_log()] Compression: none
2026-04-11T20:34:32.581 [DEBUG] [Thread-176374] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:34:32.599 [DEBUG] [Thread-176374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:34:32.599 [DEBUG] [Thread-176374] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:34:32.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:34:32.600 [DEBUG] [Thread-176374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:34:32.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:34:32.602 [DEBUG] [Thread-176374] [transport.py] [_log()] userauth is OK
2026-04-11T20:34:32.602 [DEBUG] [Thread-176374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:34:32.602 [DEBUG] [Thread-176374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:34:32.602 [DEBUG] [Thread-176374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:34:32.602 [DEBUG] [Thread-176374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:34:32.626 [INFO] [Thread-176374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:34:32.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:34:33.413 [DEBUG] [Thread-176374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:34:33.413 [DEBUG] [Thread-176374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:34:33.413 [DEBUG] [Thread-176374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:34:33.453 [DEBUG] [Thread-176374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:34:33.454 [DEBUG] [Thread-176374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:34:33.456 [DEBUG] [Thread-176374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:34:33.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:34:33.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:34:33.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:34:33.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:34:33.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:34:33.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:34:33.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:34:33.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:34:33.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:34:33.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.773727 -999.00  +12.00   8.58     97  +11.60 1 3 1 3 1     0    0 0.38 0.90 ----- 8.6 8.6 285.2 13.6 13.3 -0.9 13.1 -0.9 12.7 -0.5 13.1 -0.5
2026-04-11T20:34:33.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:34:33.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:34:33.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.773727
2026-04-11T20:34:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:34:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:34:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:34:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:34:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:34:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:34:09', tmtdew=0.04299, humidity=100.009, cloud=0.0, wind=16.2871, temperature=12.0719, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:34:10.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:34:33.482 [DEBUG] [Thread-176374] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:34:33.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:34:33.575 [DEBUG] [Thread-176377] [transport.py] [_log()] starting thread (client mode): 0xae51a740
2026-04-11T20:34:33.575 [DEBUG] [Thread-176377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:34:33.590 [DEBUG] [Thread-176377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:34:33.590 [INFO] [Thread-176377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:34:33.601 [DEBUG] [Thread-176377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] client lang: <none>
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] server lang: <none>
2026-04-11T20:34:33.602 [DEBUG] [Thread-176377] [transport.py] [_log()] kex follows: False
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] Compression: none
2026-04-11T20:34:33.603 [DEBUG] [Thread-176377] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:34:33.660 [DEBUG] [Thread-176377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:34:33.661 [DEBUG] [Thread-176377] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:34:33.661 [DEBUG] [Thread-176377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:34:33.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:34:33.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:34:33.717 [DEBUG] [Thread-176377] [transport.py] [_log()] userauth is OK
2026-04-11T20:34:33.717 [DEBUG] [Thread-176377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:34:33.717 [DEBUG] [Thread-176377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:34:33.717 [DEBUG] [Thread-176377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:34:33.717 [DEBUG] [Thread-176377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:34:33.743 [INFO] [Thread-176377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:34:33.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:34:33.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:34:34.584 [DEBUG] [Thread-176377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:34:34.584 [DEBUG] [Thread-176377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:34:34.632 [DEBUG] [Thread-176377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:34:34.632 [DEBUG] [Thread-176377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:34:34.645 [DEBUG] [Thread-176377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:34:34.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:34:34.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:34:34.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-04-11T20:34:34.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:34:34.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:34:34.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:34:34.682 [DEBUG] [Thread-176377] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:34:44.834 [DEBUG] [Thread-176379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:34:59.888 [DEBUG] [Thread-176380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:35:04.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:35:04.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:35:04.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-04-11T20:35:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 34, 44), -0.00895, 99.9838, 0.0, 18.455, 12.5437, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:35:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:34:44
2026-04-11T20:35:06.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:35:06.514 [DEBUG] [Thread-176381] [transport.py] [_log()] starting thread (client mode): 0xb0fb53f0
2026-04-11T20:35:06.514 [DEBUG] [Thread-176381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:35:06.529 [DEBUG] [Thread-176381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:35:06.530 [INFO] [Thread-176381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] client lang: <none>
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] server lang: <none>
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] kex follows: False
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] Compression: none
2026-04-11T20:35:06.533 [DEBUG] [Thread-176381] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:35:06.551 [DEBUG] [Thread-176381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:35:06.551 [DEBUG] [Thread-176381] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:35:06.552 [DEBUG] [Thread-176381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:35:06.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:35:06.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:35:06.554 [DEBUG] [Thread-176381] [transport.py] [_log()] userauth is OK
2026-04-11T20:35:06.554 [DEBUG] [Thread-176381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:35:06.554 [DEBUG] [Thread-176381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:35:06.554 [DEBUG] [Thread-176381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:35:06.555 [DEBUG] [Thread-176381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:35:06.568 [INFO] [Thread-176381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:35:06.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:35:07.629 [DEBUG] [Thread-176381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:35:07.630 [DEBUG] [Thread-176381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:35:07.630 [DEBUG] [Thread-176381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:35:07.671 [DEBUG] [Thread-176381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:35:07.671 [DEBUG] [Thread-176381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:35:07.674 [DEBUG] [Thread-176381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:35:07.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:35:07.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:35:07.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:35:07.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:35:07.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:35:07.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:35:07.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:35:07.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:35:07.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:35:07.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.774075 -999.00  +12.00   9.23     97  +11.70 1 3 1 3 1     0    0 0.38 0.66 ----- 9.2 9.2 293.4 13.8 13.2 -0.9 13.1 -0.8 12.7 -0.3 13.1 -0.5
2026-04-11T20:35:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:35:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:35:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.774075
2026-04-11T20:35:07.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:35:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:35:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:35:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:35:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:35:07.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:34:44', tmtdew=-0.00895, humidity=99.9838, cloud=0.0, wind=18.455, temperature=12.5437, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:34:40.080', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:35:07.715 [DEBUG] [Thread-176381] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:35:07.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:35:14.926 [DEBUG] [Thread-176384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:35:17.732 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:35:17.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:35:29.993 [DEBUG] [Thread-176385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:35:30.623 [DEBUG] [Thread-176386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:35:45.030 [DEBUG] [Thread-176387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:00.065 [DEBUG] [Thread-176388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:15.098 [DEBUG] [Thread-176389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:17.935 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:17.937 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:30.134 [DEBUG] [Thread-176390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:30.708 [DEBUG] [Thread-176391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:36:45.173 [DEBUG] [Thread-176392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:00.209 [DEBUG] [Thread-176393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:15.249 [DEBUG] [Thread-176394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:18.137 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:18.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:20.895 [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-04-11T20:37:30.289 [DEBUG] [Thread-176395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:30.766 [DEBUG] [Thread-176396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:45.326 [DEBUG] [Thread-176397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:37:50.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:37:50.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:37:50.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:37:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 37, 42), -0.00896, 99.9843, 0.0, 14.7859, 12.4777, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:37:52.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:37:42
2026-04-11T20:37:52.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:37:52.754 [DEBUG] [Thread-176398] [transport.py] [_log()] starting thread (client mode): 0xb0fb62f0
2026-04-11T20:37:52.755 [DEBUG] [Thread-176398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:37:52.774 [DEBUG] [Thread-176398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:37:52.775 [INFO] [Thread-176398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] client lang: <none>
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] server lang: <none>
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] kex follows: False
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:37:52.778 [DEBUG] [Thread-176398] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:37:52.779 [DEBUG] [Thread-176398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:37:52.779 [DEBUG] [Thread-176398] [transport.py] [_log()] Compression: none
2026-04-11T20:37:52.779 [DEBUG] [Thread-176398] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:37:52.797 [DEBUG] [Thread-176398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:37:52.797 [DEBUG] [Thread-176398] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:37:52.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:37:52.798 [DEBUG] [Thread-176398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:37:52.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:37:52.800 [DEBUG] [Thread-176398] [transport.py] [_log()] userauth is OK
2026-04-11T20:37:52.800 [DEBUG] [Thread-176398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:37:52.801 [DEBUG] [Thread-176398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:37:52.801 [DEBUG] [Thread-176398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:37:52.801 [DEBUG] [Thread-176398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:37:52.823 [INFO] [Thread-176398] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:37:52.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:37:53.588 [DEBUG] [Thread-176398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:37:53.588 [DEBUG] [Thread-176398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:37:53.588 [DEBUG] [Thread-176398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:37:53.629 [DEBUG] [Thread-176398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:37:53.629 [DEBUG] [Thread-176398] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:37:53.632 [DEBUG] [Thread-176398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:37:53.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:37:53.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:37:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:37:53.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:37:53.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:37:53.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:37:53.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:37:53.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:37:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:37:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.775811 -999.00  +12.00  11.25     97  +11.70 1 3 1 3 1     0    0 0.34 0.04 ----- 11.2 11.2 273.6 12.9 13.2 -1.4 13.1 -0.8 12.7 -0.6 13.1 -0.6
2026-04-11T20:37:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:37:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:37:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.775811
2026-04-11T20:37:53.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:37:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:37:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:37:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:37:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:37:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:37:42', tmtdew=-0.00896, humidity=99.9843, cloud=0.0, wind=14.7859, temperature=12.4777, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:37:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:37:53.658 [DEBUG] [Thread-176398] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:37:53.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:37:53.750 [DEBUG] [Thread-176401] [transport.py] [_log()] starting thread (client mode): 0xb0f56e90
2026-04-11T20:37:53.750 [DEBUG] [Thread-176401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:37:53.765 [DEBUG] [Thread-176401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:37:53.765 [INFO] [Thread-176401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] client lang: <none>
2026-04-11T20:37:53.772 [DEBUG] [Thread-176401] [transport.py] [_log()] server lang: <none>
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] kex follows: False
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] Compression: none
2026-04-11T20:37:53.773 [DEBUG] [Thread-176401] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:37:53.832 [DEBUG] [Thread-176401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:37:53.832 [DEBUG] [Thread-176401] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:37:53.833 [DEBUG] [Thread-176401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:37:53.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:37:53.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:37:53.888 [DEBUG] [Thread-176401] [transport.py] [_log()] userauth is OK
2026-04-11T20:37:53.888 [DEBUG] [Thread-176401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:37:53.888 [DEBUG] [Thread-176401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:37:53.888 [DEBUG] [Thread-176401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:37:53.888 [DEBUG] [Thread-176401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:37:53.906 [INFO] [Thread-176401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:37: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-04-11T20:37:53.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:37:54.765 [DEBUG] [Thread-176401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:37:54.765 [DEBUG] [Thread-176401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:37:54.813 [DEBUG] [Thread-176401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:37:54.813 [DEBUG] [Thread-176401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:37:54.823 [DEBUG] [Thread-176401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:37:54.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:37:54.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-04-11T20:37:54.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:37:54.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:37:54.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:37:54.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:37:54.860 [DEBUG] [Thread-176401] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:38:00.362 [DEBUG] [Thread-176403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:15.404 [DEBUG] [Thread-176404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:18.343 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:18.344 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:38:24.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:38:24.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-04-11T20:38:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 38, 19), 0.05314, 99.9423, 0.0, 12.8812, 12.0057, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:38:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:38:19
2026-04-11T20:38:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:38:26.741 [DEBUG] [Thread-176405] [transport.py] [_log()] starting thread (client mode): 0xb0fb7220
2026-04-11T20:38:26.741 [DEBUG] [Thread-176405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:38:26.761 [DEBUG] [Thread-176405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:38:26.761 [INFO] [Thread-176405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:38:26.764 [DEBUG] [Thread-176405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] client lang: <none>
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] server lang: <none>
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] kex follows: False
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] Compression: none
2026-04-11T20:38:26.765 [DEBUG] [Thread-176405] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:38:26.783 [DEBUG] [Thread-176405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:38:26.783 [DEBUG] [Thread-176405] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:38:26.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:38:26.784 [DEBUG] [Thread-176405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:38:26.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:38:26.787 [DEBUG] [Thread-176405] [transport.py] [_log()] userauth is OK
2026-04-11T20:38:26.787 [DEBUG] [Thread-176405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:38:26.787 [DEBUG] [Thread-176405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:38:26.787 [DEBUG] [Thread-176405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:38:26.787 [DEBUG] [Thread-176405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:38:26.812 [INFO] [Thread-176405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:38:26.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:38:27.582 [DEBUG] [Thread-176405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:38:27.582 [DEBUG] [Thread-176405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:38:27.582 [DEBUG] [Thread-176405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:38:27.624 [DEBUG] [Thread-176405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:38:27.624 [DEBUG] [Thread-176405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:38:27.626 [DEBUG] [Thread-176405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:38:27.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:38:27.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:38:27.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:38:27.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:38:27.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:38:27.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:38:27.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:38:27.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:38:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:38:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.776158 -999.00  +12.00  12.42     97  +11.70 1 3 1 3 1     0    0 0.35 0.06 ----- 12.4 12.4 267.6 13.1 13.3 -1.1 13.1 -0.9 12.7 -0.2 13.1 -0.7
2026-04-11T20:38:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:38:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:38:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.776158
2026-04-11T20:38:27.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:38:27.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:38:27.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:38:27.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:38:27.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:38:27.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:38:19', tmtdew=0.05314, humidity=99.9423, cloud=0.0, wind=12.8812, temperature=12.0057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:37:40.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:38:27.652 [DEBUG] [Thread-176405] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:38:27.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:38:27.753 [DEBUG] [Thread-176408] [transport.py] [_log()] starting thread (client mode): 0xae518a30
2026-04-11T20:38:27.753 [DEBUG] [Thread-176408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:38:27.767 [DEBUG] [Thread-176408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:38:27.767 [INFO] [Thread-176408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:38:27.774 [DEBUG] [Thread-176408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:38:27.774 [DEBUG] [Thread-176408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] client lang: <none>
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] server lang: <none>
2026-04-11T20:38:27.775 [DEBUG] [Thread-176408] [transport.py] [_log()] kex follows: False
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] Compression: none
2026-04-11T20:38:27.776 [DEBUG] [Thread-176408] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:38:27.836 [DEBUG] [Thread-176408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:38:27.837 [DEBUG] [Thread-176408] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:38:27.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:38:27.838 [DEBUG] [Thread-176408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:38:27.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:38:27.892 [DEBUG] [Thread-176408] [transport.py] [_log()] userauth is OK
2026-04-11T20:38:27.892 [DEBUG] [Thread-176408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:38:27.892 [DEBUG] [Thread-176408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:38:27.892 [DEBUG] [Thread-176408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:38:27.892 [DEBUG] [Thread-176408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:38:27.919 [INFO] [Thread-176408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:38:27.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:38:27.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:38:28.740 [DEBUG] [Thread-176408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:38:28.741 [DEBUG] [Thread-176408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:38:28.788 [DEBUG] [Thread-176408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:38:28.789 [DEBUG] [Thread-176408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:38:28.798 [DEBUG] [Thread-176408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:38:28.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:38:28.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-04-11T20:38:28.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:38:28.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:38:28.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:38:28.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:38:28.837 [DEBUG] [Thread-176408] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:38:30.443 [DEBUG] [Thread-176410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:30.832 [DEBUG] [Thread-176411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:45.498 [DEBUG] [Thread-176412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:38:58.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:38:58.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:38:58.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-04-11T20:39:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 38, 19), 0.05314, 99.9423, 0.0, 12.8812, 12.0057, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:39:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:38:19
2026-04-11T20:39:00.537 [DEBUG] [Thread-176413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:39:00.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:39:00.826 [DEBUG] [Thread-176414] [transport.py] [_log()] starting thread (client mode): 0xb0fb5c60
2026-04-11T20:39:00.826 [DEBUG] [Thread-176414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:39:00.846 [DEBUG] [Thread-176414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:39:00.846 [INFO] [Thread-176414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] client lang: <none>
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] server lang: <none>
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] kex follows: False
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:39:00.849 [DEBUG] [Thread-176414] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:39:00.850 [DEBUG] [Thread-176414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:39:00.850 [DEBUG] [Thread-176414] [transport.py] [_log()] Compression: none
2026-04-11T20:39:00.850 [DEBUG] [Thread-176414] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:39:00.865 [DEBUG] [Thread-176414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:39:00.865 [DEBUG] [Thread-176414] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:39:00.866 [DEBUG] [Thread-176414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:39:00.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:39:00.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:39:00.869 [DEBUG] [Thread-176414] [transport.py] [_log()] userauth is OK
2026-04-11T20:39:00.869 [DEBUG] [Thread-176414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:39:00.869 [DEBUG] [Thread-176414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:39:00.869 [DEBUG] [Thread-176414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:39:00.869 [DEBUG] [Thread-176414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:39:00.884 [INFO] [Thread-176414] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:39:00.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:39:01.684 [DEBUG] [Thread-176414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:39:01.684 [DEBUG] [Thread-176414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:39:01.684 [DEBUG] [Thread-176414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:39:01.725 [DEBUG] [Thread-176414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:39:01.725 [DEBUG] [Thread-176414] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:39:01.728 [DEBUG] [Thread-176414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:39:01.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:39:01.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:39:01.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:39:01.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:39:01.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:39:01.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:39:01.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.776852 -999.00  +12.00  13.28     97  +11.70 1 3 1 3 1     0    0 0.35 -0.01 ----- 13.3 13.3 278.0 21.0 13.3 -1.1 13.1 -0.6 12.7 -1.1 13.1 -0.8
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.776852
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:39:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:38:19', tmtdew=0.05314, humidity=99.9423, cloud=0.0, wind=12.8812, temperature=12.0057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:38:40.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:39:01.745 [DEBUG] [Thread-176414] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:39:01.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:39:15.575 [DEBUG] [Thread-176417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:39:18.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:39:18.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:39:30.625 [DEBUG] [Thread-176418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:39:30.908 [DEBUG] [Thread-176419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:39:45.663 [DEBUG] [Thread-176420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:00.698 [DEBUG] [Thread-176421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:15.737 [DEBUG] [Thread-176422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:18.750 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:18.752 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:30.772 [DEBUG] [Thread-176423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:30.965 [DEBUG] [Thread-176424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:40:45.809 [DEBUG] [Thread-176425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:00.848 [DEBUG] [Thread-176426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:14.367 [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-04-11T20:41:15.886 [DEBUG] [Thread-176427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:18.956 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:18.957 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:30.922 [DEBUG] [Thread-176428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:31.049 [DEBUG] [Thread-176429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:41:44.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:41:44.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-04-11T20:41:45.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 41, 16), -0.007065, 100.009, 0.0, 14.0285, 12.0721, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:41:45.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:41:16
2026-04-11T20:41:45.957 [DEBUG] [Thread-176430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:41:46.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:41:46.224 [DEBUG] [Thread-176431] [transport.py] [_log()] starting thread (client mode): 0xae517a30
2026-04-11T20:41:46.224 [DEBUG] [Thread-176431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:41:46.245 [DEBUG] [Thread-176431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:41:46.245 [INFO] [Thread-176431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:41:46.248 [DEBUG] [Thread-176431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:41:46.248 [DEBUG] [Thread-176431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:41:46.248 [DEBUG] [Thread-176431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] client lang: <none>
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] server lang: <none>
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] kex follows: False
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:41:46.249 [DEBUG] [Thread-176431] [transport.py] [_log()] Compression: none
2026-04-11T20:41:46.250 [DEBUG] [Thread-176431] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:41:46.267 [DEBUG] [Thread-176431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:41:46.267 [DEBUG] [Thread-176431] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:41:46.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:41:46.268 [DEBUG] [Thread-176431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:41:46.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:41:46.270 [DEBUG] [Thread-176431] [transport.py] [_log()] userauth is OK
2026-04-11T20:41:46.271 [DEBUG] [Thread-176431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:41:46.271 [DEBUG] [Thread-176431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:41:46.271 [DEBUG] [Thread-176431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:41:46.271 [DEBUG] [Thread-176431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:41:46.294 [INFO] [Thread-176431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:41:46.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:41:47.089 [DEBUG] [Thread-176431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:41:47.089 [DEBUG] [Thread-176431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:41:47.089 [DEBUG] [Thread-176431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:41:47.130 [DEBUG] [Thread-176431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:41:47.130 [DEBUG] [Thread-176431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:41:47.133 [DEBUG] [Thread-176431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:41:47.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:41:47.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:41:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:41:47.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:41:47.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:41:47.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:41:47.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:41:47.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:41:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:41:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.778588 -999.00  +12.10   8.94     97  +11.70 1 3 1 3 1     0    0 0.32 -0.67 ----- 8.9 8.9 266.2 11.3 13.3 -1.3 13.1 -0.2 12.8 -0.2 13.1 -0.5
2026-04-11T20:41:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:41:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:41:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.778588
2026-04-11T20:41:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:41:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:41:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:41:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:41:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:41:47.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:41:16', tmtdew=-0.007065, humidity=100.009, cloud=0.0, wind=14.0285, temperature=12.0721, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:41:10.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:41:47.163 [DEBUG] [Thread-176431] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:41:47.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:41:47.267 [DEBUG] [Thread-176434] [transport.py] [_log()] starting thread (client mode): 0xae51b7c0
2026-04-11T20:41:47.267 [DEBUG] [Thread-176434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:41:47.282 [DEBUG] [Thread-176434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:41:47.282 [INFO] [Thread-176434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] client lang: <none>
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] server lang: <none>
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] kex follows: False
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:41:47.290 [DEBUG] [Thread-176434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:41:47.291 [DEBUG] [Thread-176434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:41:47.291 [DEBUG] [Thread-176434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:41:47.291 [DEBUG] [Thread-176434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:41:47.291 [DEBUG] [Thread-176434] [transport.py] [_log()] Compression: none
2026-04-11T20:41:47.291 [DEBUG] [Thread-176434] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:41:47.349 [DEBUG] [Thread-176434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:41:47.349 [DEBUG] [Thread-176434] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:41:47.350 [DEBUG] [Thread-176434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:41:47.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:41:47.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:41:47.408 [DEBUG] [Thread-176434] [transport.py] [_log()] userauth is OK
2026-04-11T20:41:47.409 [DEBUG] [Thread-176434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:41:47.409 [DEBUG] [Thread-176434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:41:47.409 [DEBUG] [Thread-176434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:41:47.409 [DEBUG] [Thread-176434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:41:47.427 [INFO] [Thread-176434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:41:47.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:41:47.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:41:48.249 [DEBUG] [Thread-176434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:41:48.249 [DEBUG] [Thread-176434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:41:48.297 [DEBUG] [Thread-176434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:41:48.297 [DEBUG] [Thread-176434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:41:48.306 [DEBUG] [Thread-176434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:41:48.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:41:48.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:41:48.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:41:48.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:41:48.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:41:48.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:41:48.350 [DEBUG] [Thread-176434] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:42:00.994 [DEBUG] [Thread-176436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:16.056 [DEBUG] [Thread-176437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:42:18.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:42:18.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-04-11T20:42:19.164 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:19.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 41, 52), -0.0141, 100.018, 0.0, 13.0572, 12.5111, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:42:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:41:52
2026-04-11T20:42:20.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:42:20.226 [DEBUG] [Thread-176438] [transport.py] [_log()] starting thread (client mode): 0xb0f56320
2026-04-11T20:42:20.226 [DEBUG] [Thread-176438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:42:20.244 [DEBUG] [Thread-176438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:42:20.244 [INFO] [Thread-176438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:42:20.247 [DEBUG] [Thread-176438] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:42:20.247 [DEBUG] [Thread-176438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:42:20.247 [DEBUG] [Thread-176438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] client lang: <none>
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] server lang: <none>
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] kex follows: False
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:42:20.248 [DEBUG] [Thread-176438] [transport.py] [_log()] Compression: none
2026-04-11T20:42:20.249 [DEBUG] [Thread-176438] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:42:20.266 [DEBUG] [Thread-176438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:42:20.266 [DEBUG] [Thread-176438] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:42:20.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:42:20.267 [DEBUG] [Thread-176438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:42:20.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:42:20.269 [DEBUG] [Thread-176438] [transport.py] [_log()] userauth is OK
2026-04-11T20:42:20.269 [DEBUG] [Thread-176438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:42:20.270 [DEBUG] [Thread-176438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:42:20.270 [DEBUG] [Thread-176438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:42:20.270 [DEBUG] [Thread-176438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:42:20.286 [INFO] [Thread-176438] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:42:20.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:42:21.123 [DEBUG] [Thread-176438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:42:21.123 [DEBUG] [Thread-176438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:42:21.124 [DEBUG] [Thread-176438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:42:21.165 [DEBUG] [Thread-176438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:42:21.165 [DEBUG] [Thread-176438] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:42:21.169 [DEBUG] [Thread-176438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:42:21.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:42:21.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:42:21.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:42:21.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:42:21.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:42:21.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:42:21.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:42:21.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:42:21.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:42:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.778936 -999.00  +12.10  11.05     97  +11.70 1 3 1 3 1     0    0 0.34 -0.27 ----- 11.1 11.1 266.2 14.0 13.2 -1.0 13.1 -0.2 12.8 -0.1 13.1 -0.4
2026-04-11T20:42:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:42:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:42:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.778936
2026-04-11T20:42:21.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:42:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:42:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:42:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:42:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:42:21.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:41:52', tmtdew=-0.0141, humidity=100.018, cloud=0.0, wind=13.0572, temperature=12.5111, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:41:40.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:42:21.194 [DEBUG] [Thread-176438] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:42:21.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:42:21.290 [DEBUG] [Thread-176441] [transport.py] [_log()] starting thread (client mode): 0xb0f560b0
2026-04-11T20:42:21.290 [DEBUG] [Thread-176441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:42:21.305 [DEBUG] [Thread-176441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:42:21.305 [INFO] [Thread-176441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] client lang: <none>
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] server lang: <none>
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] kex follows: False
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:42:21.313 [DEBUG] [Thread-176441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:42:21.314 [DEBUG] [Thread-176441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:42:21.314 [DEBUG] [Thread-176441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:42:21.314 [DEBUG] [Thread-176441] [transport.py] [_log()] Compression: none
2026-04-11T20:42:21.314 [DEBUG] [Thread-176441] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:42:21.372 [DEBUG] [Thread-176441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:42:21.373 [DEBUG] [Thread-176441] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:42:21.374 [DEBUG] [Thread-176441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:42:21.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:42:21.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:42:21.432 [DEBUG] [Thread-176441] [transport.py] [_log()] userauth is OK
2026-04-11T20:42:21.432 [DEBUG] [Thread-176441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:42:21.432 [DEBUG] [Thread-176441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:42:21.432 [DEBUG] [Thread-176441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:42:21.433 [DEBUG] [Thread-176441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:42:21.452 [INFO] [Thread-176441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:42:21.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:42:21.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:42:22.291 [DEBUG] [Thread-176441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:42:22.291 [DEBUG] [Thread-176441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:42:22.339 [DEBUG] [Thread-176441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:42:22.339 [DEBUG] [Thread-176441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:42:22.348 [DEBUG] [Thread-176441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:42:22.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:42:22.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-04-11T20:42:22.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-04-11T20:42:22.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:42:22.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:42:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:42:22.386 [DEBUG] [Thread-176441] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:42:31.090 [DEBUG] [Thread-176443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:31.128 [DEBUG] [Thread-176444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:46.132 [DEBUG] [Thread-176445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:42:52.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:42:52.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:42:52.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:42:53.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 42, 27), 0.040345, 100.026, 0.0, 12.6342, 12.0889, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:42:53.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:42:27
2026-04-11T20:42:54.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:42:54.225 [DEBUG] [Thread-176446] [transport.py] [_log()] starting thread (client mode): 0xae517af0
2026-04-11T20:42:54.225 [DEBUG] [Thread-176446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:42:54.246 [DEBUG] [Thread-176446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:42:54.246 [INFO] [Thread-176446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:42:54.250 [DEBUG] [Thread-176446] [transport.py] [_log()] client lang: <none>
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] server lang: <none>
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] kex follows: False
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] Compression: none
2026-04-11T20:42:54.251 [DEBUG] [Thread-176446] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:42:54.270 [DEBUG] [Thread-176446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:42:54.271 [DEBUG] [Thread-176446] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:42:54.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:42:54.272 [DEBUG] [Thread-176446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:42:54.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:42:54.274 [DEBUG] [Thread-176446] [transport.py] [_log()] userauth is OK
2026-04-11T20:42:54.275 [DEBUG] [Thread-176446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:42:54.275 [DEBUG] [Thread-176446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:42:54.275 [DEBUG] [Thread-176446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:42:54.275 [DEBUG] [Thread-176446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:42:54.310 [INFO] [Thread-176446] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:42:54.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:42:55.138 [DEBUG] [Thread-176446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:42:55.138 [DEBUG] [Thread-176446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:42:55.139 [DEBUG] [Thread-176446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:42:55.179 [DEBUG] [Thread-176446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:42:55.179 [DEBUG] [Thread-176446] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:42:55.183 [DEBUG] [Thread-176446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:42:55.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:42:55.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:42:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:42:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:42:55.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:42:55.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:42:55.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:42:55.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:42:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:42:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.779283 -999.00  +12.10   9.07     97  +11.70 1 3 1 3 1     0    0 0.34 -0.23 ----- 9.1 9.1 274.8 16.1 13.3 -1.2 13.2 -0.2 12.8 -0.1 13.1 -0.6
2026-04-11T20:42:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:42:55.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:42:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.779283
2026-04-11T20:42:55.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:42:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:42:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:42:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:42:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:42:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:42:27', tmtdew=0.040345, humidity=100.026, cloud=0.0, wind=12.6342, temperature=12.0889, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:42:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:42:55.211 [DEBUG] [Thread-176446] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:42:55.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:42:55.304 [DEBUG] [Thread-176449] [transport.py] [_log()] starting thread (client mode): 0xb0fb4e80
2026-04-11T20:42:55.304 [DEBUG] [Thread-176449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:42:55.321 [DEBUG] [Thread-176449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:42:55.321 [INFO] [Thread-176449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:42:55.329 [DEBUG] [Thread-176449] [transport.py] [_log()] client lang: <none>
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] server lang: <none>
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] kex follows: False
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] Compression: none
2026-04-11T20:42:55.330 [DEBUG] [Thread-176449] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:42:55.388 [DEBUG] [Thread-176449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:42:55.388 [DEBUG] [Thread-176449] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:42:55.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:42:55.389 [DEBUG] [Thread-176449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:42:55.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:42:55.444 [DEBUG] [Thread-176449] [transport.py] [_log()] userauth is OK
2026-04-11T20:42:55.445 [DEBUG] [Thread-176449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:42:55.445 [DEBUG] [Thread-176449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:42:55.445 [DEBUG] [Thread-176449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:42:55.445 [DEBUG] [Thread-176449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:42:55.465 [INFO] [Thread-176449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:42:55.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:42:55.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:42:56.358 [DEBUG] [Thread-176449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:42:56.358 [DEBUG] [Thread-176449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:42:56.405 [DEBUG] [Thread-176449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:42:56.405 [DEBUG] [Thread-176449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:42:56.413 [DEBUG] [Thread-176449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:42:56.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:42:56.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-04-11T20:42:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:42:56.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:42:56.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:42:56.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:42:56.446 [DEBUG] [Thread-176449] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:43:01.171 [DEBUG] [Thread-176451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:43:16.226 [DEBUG] [Thread-176452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:43:19.370 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:43:19.371 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:43:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:43:26.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:43:26.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-04-11T20:43:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 43, 2), 0.04291, 100.009, 0.0, 12.4754, 12.0557, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:43:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:43:02
2026-04-11T20:43:28.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:43:28.250 [DEBUG] [Thread-176453] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b80
2026-04-11T20:43:28.250 [DEBUG] [Thread-176453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:43:28.269 [DEBUG] [Thread-176453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:43:28.270 [INFO] [Thread-176453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] client lang: <none>
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] server lang: <none>
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] kex follows: False
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] Compression: none
2026-04-11T20:43:28.273 [DEBUG] [Thread-176453] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:43:28.290 [DEBUG] [Thread-176453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:43:28.290 [DEBUG] [Thread-176453] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:43:28.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:43:28.291 [DEBUG] [Thread-176453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:43:28.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:43:28.293 [DEBUG] [Thread-176453] [transport.py] [_log()] userauth is OK
2026-04-11T20:43:28.294 [DEBUG] [Thread-176453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:43:28.294 [DEBUG] [Thread-176453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:43:28.294 [DEBUG] [Thread-176453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:43:28.294 [DEBUG] [Thread-176453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:43:28.329 [INFO] [Thread-176453] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:43:28.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:43:29.117 [DEBUG] [Thread-176453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:43:29.118 [DEBUG] [Thread-176453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:43:29.118 [DEBUG] [Thread-176453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:43:29.159 [DEBUG] [Thread-176453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:43:29.159 [DEBUG] [Thread-176453] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:43:29.163 [DEBUG] [Thread-176453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:43:29.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:43:29.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:43:29.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:43:29.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:43:29.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:43:29.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:43:29.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:43:29.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:43:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:43:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.779630 -999.00  +12.00   9.35     97  +11.70 1 3 1 3 1     0    0 0.32 -0.50 ----- 9.3 9.3 268.8 15.4 13.3 -1.2 13.1 -0.3 12.8 -0.2 13.1 -0.5
2026-04-11T20:43:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:43:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:43:29.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.779630
2026-04-11T20:43:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:43:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:43:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:43:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:43:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:43:29.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:43:02', tmtdew=0.04291, humidity=100.009, cloud=0.0, wind=12.4754, temperature=12.0557, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:42:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:43:29.192 [DEBUG] [Thread-176453] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:43:29.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:43:29.285 [DEBUG] [Thread-176456] [transport.py] [_log()] starting thread (client mode): 0xa79504c0
2026-04-11T20:43:29.285 [DEBUG] [Thread-176456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:43:29.304 [DEBUG] [Thread-176456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:43:29.304 [INFO] [Thread-176456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:43:29.312 [DEBUG] [Thread-176456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] client lang: <none>
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] server lang: <none>
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] kex follows: False
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] Compression: none
2026-04-11T20:43:29.313 [DEBUG] [Thread-176456] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:43:29.378 [DEBUG] [Thread-176456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:43:29.378 [DEBUG] [Thread-176456] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:43:29.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:43:29.380 [DEBUG] [Thread-176456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:43:29.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:43:29.437 [DEBUG] [Thread-176456] [transport.py] [_log()] userauth is OK
2026-04-11T20:43:29.437 [DEBUG] [Thread-176456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:43:29.437 [DEBUG] [Thread-176456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:43:29.438 [DEBUG] [Thread-176456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:43:29.438 [DEBUG] [Thread-176456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:43:29.456 [INFO] [Thread-176456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:43:29.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:43:29.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:43:30.283 [DEBUG] [Thread-176456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:43:30.283 [DEBUG] [Thread-176456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:43:30.331 [DEBUG] [Thread-176456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:43:30.331 [DEBUG] [Thread-176456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:43:30.341 [DEBUG] [Thread-176456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:43:30.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:43:30.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:43:30.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:43:30.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:43:30.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:43:30.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:43:30.377 [DEBUG] [Thread-176456] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:43:31.186 [DEBUG] [Thread-176458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:43:31.263 [DEBUG] [Thread-176459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:43:46.323 [DEBUG] [Thread-176460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:00.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:44:00.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:44:00.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-04-11T20:44:01.362 [DEBUG] [Thread-176461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 43, 38), -0.01419, 100.018, 0.0, 13.5158, 12.5776, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:44:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:43:38
2026-04-11T20:44:02.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:44:02.209 [DEBUG] [Thread-176462] [transport.py] [_log()] starting thread (client mode): 0xb0fb4370
2026-04-11T20:44:02.209 [DEBUG] [Thread-176462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:44:02.230 [DEBUG] [Thread-176462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:44:02.230 [INFO] [Thread-176462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] client lang: <none>
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] server lang: <none>
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] kex follows: False
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] Compression: none
2026-04-11T20:44:02.233 [DEBUG] [Thread-176462] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:44:02.249 [DEBUG] [Thread-176462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:44:02.249 [DEBUG] [Thread-176462] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:44:02.250 [DEBUG] [Thread-176462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:44:02.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:44:02.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:44:02.250 [DEBUG] [Thread-176462] [transport.py] [_log()] userauth is OK
2026-04-11T20:44:02.250 [DEBUG] [Thread-176462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:44:02.250 [DEBUG] [Thread-176462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:44:02.250 [DEBUG] [Thread-176462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:44:02.250 [DEBUG] [Thread-176462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:44:02.260 [INFO] [Thread-176462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:44:02.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:44:03.045 [DEBUG] [Thread-176462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:44:03.045 [DEBUG] [Thread-176462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:44:03.046 [DEBUG] [Thread-176462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:44:03.086 [DEBUG] [Thread-176462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:44:03.086 [DEBUG] [Thread-176462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:44:03.090 [DEBUG] [Thread-176462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:44:03.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:44:03.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:44:03.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:44:03.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:44:03.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:44:03.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:44:03.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:44:03.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:44:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:44:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.780324 -999.00  +12.00   9.79     97  +11.70 1 3 1 3 1     0    0 0.33 -0.15 ----- 9.8 9.8 260.6 12.7 13.3 -1.2 13.1 -0.2 12.8 -0.2 13.1 -0.3
2026-04-11T20:44:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:44:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:44:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.780324
2026-04-11T20:44:03.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:44:03.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:44:03.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:44:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:44:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:44:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:43:38', tmtdew=-0.01419, humidity=100.018, cloud=0.0, wind=13.5158, temperature=12.5776, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:43:39.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:44:03.118 [DEBUG] [Thread-176462] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:44:03.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:44:16.399 [DEBUG] [Thread-176465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:19.574 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:19.575 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:31.253 [DEBUG] [Thread-176466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:31.452 [DEBUG] [Thread-176467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:44:46.484 [DEBUG] [Thread-176468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:01.517 [DEBUG] [Thread-176469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:16.551 [DEBUG] [Thread-176470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:19.779 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:19.781 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:31.311 [DEBUG] [Thread-176471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:31.589 [DEBUG] [Thread-176472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:45:46.630 [DEBUG] [Thread-176473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:01.668 [DEBUG] [Thread-176474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:16.707 [DEBUG] [Thread-176475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:17.471 [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-04-11T20:46:19.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:19.990 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:31.389 [DEBUG] [Thread-176476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:31.745 [DEBUG] [Thread-176477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:46.779 [DEBUG] [Thread-176478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:46:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:46:47.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:46:47.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-04-11T20:46:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 46, 35), -0.00893, 99.9843, 0.0, 13.3042, 12.4446, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:46:48.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:46:35
2026-04-11T20:46:49.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:46:49.274 [DEBUG] [Thread-176479] [transport.py] [_log()] starting thread (client mode): 0xa7950f40
2026-04-11T20:46:49.274 [DEBUG] [Thread-176479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:46:49.296 [DEBUG] [Thread-176479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:46:49.297 [INFO] [Thread-176479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:46:49.300 [DEBUG] [Thread-176479] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:46:49.300 [DEBUG] [Thread-176479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:46:49.300 [DEBUG] [Thread-176479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] client lang: <none>
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] server lang: <none>
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] kex follows: False
2026-04-11T20:46:49.301 [DEBUG] [Thread-176479] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:46:49.302 [DEBUG] [Thread-176479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:46:49.302 [DEBUG] [Thread-176479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:46:49.303 [DEBUG] [Thread-176479] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:46:49.303 [DEBUG] [Thread-176479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:46:49.303 [DEBUG] [Thread-176479] [transport.py] [_log()] Compression: none
2026-04-11T20:46:49.303 [DEBUG] [Thread-176479] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:46:49.318 [DEBUG] [Thread-176479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:46:49.319 [DEBUG] [Thread-176479] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:46:49.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:46:49.321 [DEBUG] [Thread-176479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:46:49.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:46:49.323 [DEBUG] [Thread-176479] [transport.py] [_log()] userauth is OK
2026-04-11T20:46:49.323 [DEBUG] [Thread-176479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:46:49.323 [DEBUG] [Thread-176479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:46:49.324 [DEBUG] [Thread-176479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:46:49.324 [DEBUG] [Thread-176479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:46:49.348 [INFO] [Thread-176479] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:46:49.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:46:50.140 [DEBUG] [Thread-176479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:46:50.141 [DEBUG] [Thread-176479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:46:50.141 [DEBUG] [Thread-176479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:46:50.182 [DEBUG] [Thread-176479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:46:50.182 [DEBUG] [Thread-176479] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:46:50.185 [DEBUG] [Thread-176479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:46:50.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:46:50.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:46:50.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:46:50.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:46:50.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:46:50.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:46:50.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:46:50.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:46:50.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:46:50.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.782060 -999.00  +12.00   6.85     97  +11.70 1 3 1 3 1     0    0 0.31 -1.17 ----- 6.8 6.8 284.8 12.5 13.3 -1.2 13.1 -0.2 12.8 -0.4 13.1 -0.1
2026-04-11T20:46:50.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:46:50.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:46:50.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.782060
2026-04-11T20:46:50.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:46:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:46:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:46:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:46:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:46:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:46:35', tmtdew=-0.00893, humidity=99.9843, cloud=0.0, wind=13.3042, temperature=12.4446, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:46:09.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:46:50.212 [DEBUG] [Thread-176479] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:46:50.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:46:50.306 [DEBUG] [Thread-176482] [transport.py] [_log()] starting thread (client mode): 0xae5f3790
2026-04-11T20:46:50.306 [DEBUG] [Thread-176482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:46:50.321 [DEBUG] [Thread-176482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:46:50.321 [INFO] [Thread-176482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] client lang: <none>
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] server lang: <none>
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] kex follows: False
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:46:50.329 [DEBUG] [Thread-176482] [transport.py] [_log()] Compression: none
2026-04-11T20:46:50.330 [DEBUG] [Thread-176482] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:46:50.388 [DEBUG] [Thread-176482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:46:50.388 [DEBUG] [Thread-176482] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:46:50.389 [DEBUG] [Thread-176482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:46:50.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:46:50.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:46:50.444 [DEBUG] [Thread-176482] [transport.py] [_log()] userauth is OK
2026-04-11T20:46:50.444 [DEBUG] [Thread-176482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:46:50.444 [DEBUG] [Thread-176482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:46:50.444 [DEBUG] [Thread-176482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:46:50.444 [DEBUG] [Thread-176482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:46:50.462 [INFO] [Thread-176482] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:46:50.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:46:50.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:46:51.303 [DEBUG] [Thread-176482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:46:51.304 [DEBUG] [Thread-176482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:46:51.355 [DEBUG] [Thread-176482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:46:51.355 [DEBUG] [Thread-176482] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:46:51.368 [DEBUG] [Thread-176482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:46:51.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:46:51.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-04-11T20:46:51.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:46:51.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:46:51.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:46:51.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:46:51.417 [DEBUG] [Thread-176482] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:47:01.815 [DEBUG] [Thread-176484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:16.868 [DEBUG] [Thread-176485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:20.197 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:20.199 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:21.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:47:21.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:47:21.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-04-11T20:47:22.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 47, 11), -0.01204, 100.042, 0.0, 11.8757, 11.9728, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:47:22.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:47:11
2026-04-11T20:47:23.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:47:23.261 [DEBUG] [Thread-176486] [transport.py] [_log()] starting thread (client mode): 0xb0f56920
2026-04-11T20:47:23.261 [DEBUG] [Thread-176486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:47:23.282 [DEBUG] [Thread-176486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:47:23.282 [INFO] [Thread-176486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] client lang: <none>
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] server lang: <none>
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] kex follows: False
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] Compression: none
2026-04-11T20:47:23.286 [DEBUG] [Thread-176486] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:47:23.304 [DEBUG] [Thread-176486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:47:23.304 [DEBUG] [Thread-176486] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:47:23.305 [DEBUG] [Thread-176486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:47:23.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:47:23.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:47:23.307 [DEBUG] [Thread-176486] [transport.py] [_log()] userauth is OK
2026-04-11T20:47:23.307 [DEBUG] [Thread-176486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:47:23.307 [DEBUG] [Thread-176486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:47:23.307 [DEBUG] [Thread-176486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:47:23.307 [DEBUG] [Thread-176486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:47:23.343 [INFO] [Thread-176486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:47:23.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:47:24.084 [DEBUG] [Thread-176486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:47:24.084 [DEBUG] [Thread-176486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:47:24.084 [DEBUG] [Thread-176486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:47:24.125 [DEBUG] [Thread-176486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:47:24.125 [DEBUG] [Thread-176486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:47:24.129 [DEBUG] [Thread-176486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:47:24.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:47:24.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:47:24.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:47:24.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:47:24.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:47:24.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:47:24.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:47:24.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:47:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:47:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.782408 -999.00  +12.10  10.52     97  +11.70 1 3 1 3 1     0    0 0.32 -0.90 ----- 10.5 10.5 275.5 13.2 13.3 -1.0 13.2 -0.1 12.8 -0.8 13.2 -0.3
2026-04-11T20:47:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:47:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:47:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.782408
2026-04-11T20:47:24.150 [DEBUG] [Thread-176486] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:47:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:47:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:47:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:47:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:47:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:47:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:47:11', tmtdew=-0.01204, humidity=100.042, cloud=0.0, wind=11.8757, temperature=11.9728, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:46:40.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:47:24.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:47:24.253 [DEBUG] [Thread-176489] [transport.py] [_log()] starting thread (client mode): 0xa7953f40
2026-04-11T20:47:24.253 [DEBUG] [Thread-176489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:47:24.267 [DEBUG] [Thread-176489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:47:24.267 [INFO] [Thread-176489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:47:24.275 [DEBUG] [Thread-176489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] client lang: <none>
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] server lang: <none>
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] kex follows: False
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] Compression: none
2026-04-11T20:47:24.276 [DEBUG] [Thread-176489] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:47:24.332 [DEBUG] [Thread-176489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:47:24.333 [DEBUG] [Thread-176489] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:47:24.334 [DEBUG] [Thread-176489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:47:24.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:47:24.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:47:24.392 [DEBUG] [Thread-176489] [transport.py] [_log()] userauth is OK
2026-04-11T20:47:24.392 [DEBUG] [Thread-176489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:47:24.392 [DEBUG] [Thread-176489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:47:24.393 [DEBUG] [Thread-176489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:47:24.393 [DEBUG] [Thread-176489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:47:24.411 [INFO] [Thread-176489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:47:24.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:47:24.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:47:25.237 [DEBUG] [Thread-176489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:47:25.237 [DEBUG] [Thread-176489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:47:25.285 [DEBUG] [Thread-176489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:47:25.285 [DEBUG] [Thread-176489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:47:25.294 [DEBUG] [Thread-176489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:47:25.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:47: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')
2026-04-11T20:47:25.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-04-11T20:47:25.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:47:25.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:47:25.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:47:25.330 [DEBUG] [Thread-176489] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:47:31.440 [DEBUG] [Thread-176491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:31.910 [DEBUG] [Thread-176492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:46.966 [DEBUG] [Thread-176493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:47:55.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:47:55.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:47:55.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-04-11T20:47:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 47, 46), -0.00901, 99.9849, 0.0, 14.9976, 12.4118, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:47:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:47:46
2026-04-11T20:47:57.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:47:57.233 [DEBUG] [Thread-176494] [transport.py] [_log()] starting thread (client mode): 0xb0fb6680
2026-04-11T20:47:57.234 [DEBUG] [Thread-176494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:47:57.253 [DEBUG] [Thread-176494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:47:57.254 [INFO] [Thread-176494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] client lang: <none>
2026-04-11T20:47:57.257 [DEBUG] [Thread-176494] [transport.py] [_log()] server lang: <none>
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] kex follows: False
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] Compression: none
2026-04-11T20:47:57.258 [DEBUG] [Thread-176494] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:47:57.277 [DEBUG] [Thread-176494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:47:57.277 [DEBUG] [Thread-176494] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:47:57.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:47:57.278 [DEBUG] [Thread-176494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:47:57.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:47:57.280 [DEBUG] [Thread-176494] [transport.py] [_log()] userauth is OK
2026-04-11T20:47:57.281 [DEBUG] [Thread-176494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:47:57.281 [DEBUG] [Thread-176494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:47:57.281 [DEBUG] [Thread-176494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:47:57.281 [DEBUG] [Thread-176494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:47:57.299 [INFO] [Thread-176494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:47:57.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:47:58.061 [DEBUG] [Thread-176494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:47:58.061 [DEBUG] [Thread-176494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:47:58.061 [DEBUG] [Thread-176494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:47:58.102 [DEBUG] [Thread-176494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:47:58.103 [DEBUG] [Thread-176494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:47:58.105 [DEBUG] [Thread-176494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:47:58.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:47:58.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:47:58.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:47:58.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:47:58.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:47:58.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:47:58.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:47:58.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:47:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:47:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.782755 -999.00  +12.00   9.81     97  +11.70 1 3 1 3 1     0    0 0.32 -0.67 ----- 9.8 9.8 274.0 13.4 13.3 -1.1 13.2 -0.2 12.8 -0.2 13.2 -0.8
2026-04-11T20:47:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:47:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:47:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.782755
2026-04-11T20:47:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:47:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:47:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:47:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:47:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:47:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:47:46', tmtdew=-0.00901, humidity=99.9849, cloud=0.0, wind=14.9976, temperature=12.4118, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:47:10.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:47:58.131 [DEBUG] [Thread-176494] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:47:58.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:47:58.225 [DEBUG] [Thread-176497] [transport.py] [_log()] starting thread (client mode): 0xae518070
2026-04-11T20:47:58.225 [DEBUG] [Thread-176497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:47:58.240 [DEBUG] [Thread-176497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:47:58.240 [INFO] [Thread-176497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:47:58.247 [DEBUG] [Thread-176497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] client lang: <none>
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] server lang: <none>
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] kex follows: False
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] Compression: none
2026-04-11T20:47:58.248 [DEBUG] [Thread-176497] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:47:58.308 [DEBUG] [Thread-176497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:47:58.309 [DEBUG] [Thread-176497] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:47:58.309 [DEBUG] [Thread-176497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:47:58.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:47:58.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:47:58.364 [DEBUG] [Thread-176497] [transport.py] [_log()] userauth is OK
2026-04-11T20:47:58.364 [DEBUG] [Thread-176497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:47:58.364 [DEBUG] [Thread-176497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:47:58.364 [DEBUG] [Thread-176497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:47:58.364 [DEBUG] [Thread-176497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:47:58.383 [INFO] [Thread-176497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:47:58.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:47:58.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:47:59.215 [DEBUG] [Thread-176497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:47:59.215 [DEBUG] [Thread-176497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:47:59.263 [DEBUG] [Thread-176497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:47:59.263 [DEBUG] [Thread-176497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:47:59.273 [DEBUG] [Thread-176497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:47:59.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:47:59.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:47:59.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:47:59.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:47:59.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:47:59.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:47:59.311 [DEBUG] [Thread-176497] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:48:02.002 [DEBUG] [Thread-176499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:48:17.043 [DEBUG] [Thread-176500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:48:20.412 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:48:20.413 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:48:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:48:29.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:48:29.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-04-11T20:48:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 48, 22), 0.04038, 100.026, 0.0, 11.858, 12.0392, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:48:30.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:48:22
2026-04-11T20:48:30.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:48:31.108 [DEBUG] [Thread-176501] [transport.py] [_log()] starting thread (client mode): 0xae5f0730
2026-04-11T20:48:31.108 [DEBUG] [Thread-176501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:48:31.128 [DEBUG] [Thread-176501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:48:31.128 [INFO] [Thread-176501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:48:31.129 [DEBUG] [Thread-176501] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] client lang: <none>
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] server lang: <none>
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] kex follows: False
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:48:31.130 [DEBUG] [Thread-176501] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:48:31.131 [DEBUG] [Thread-176501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:48:31.131 [DEBUG] [Thread-176501] [transport.py] [_log()] Compression: none
2026-04-11T20:48:31.131 [DEBUG] [Thread-176501] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:48:31.149 [DEBUG] [Thread-176501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:48:31.149 [DEBUG] [Thread-176501] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:48:31.150 [DEBUG] [Thread-176501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:48:31.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:48:31.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:48:31.152 [DEBUG] [Thread-176501] [transport.py] [_log()] userauth is OK
2026-04-11T20:48:31.152 [DEBUG] [Thread-176501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:48:31.152 [DEBUG] [Thread-176501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:48:31.152 [DEBUG] [Thread-176501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:48:31.152 [DEBUG] [Thread-176501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:48:31.171 [INFO] [Thread-176501] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:48:31.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:48:31.496 [DEBUG] [Thread-176503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:48:31.968 [DEBUG] [Thread-176501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:48:31.969 [DEBUG] [Thread-176501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:48:31.969 [DEBUG] [Thread-176501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:48:32.010 [DEBUG] [Thread-176501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:48:32.010 [DEBUG] [Thread-176501] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:48:32.013 [DEBUG] [Thread-176501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:48:32.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:48:32.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:48:32.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:48:32.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:48:32.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:48:32.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:48:32.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:48:32.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:48:32.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:48:32.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.783449 -999.00  +12.00   9.37     97  +11.70 1 3 1 3 1     0    0 0.30 -1.17 ----- 9.4 9.4 270.2 13.1 13.3 -1.1 13.2 -0.2 12.7 -0.8 13.2 -0.9
2026-04-11T20:48:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:48:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:48:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.783449
2026-04-11T20:48:32.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:48:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:48:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:48:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:48:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:48:32.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:48:22', tmtdew=0.04038, humidity=100.026, cloud=0.0, wind=11.858, temperature=12.0392, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:48:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:48:32.042 [DEBUG] [Thread-176501] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:48:32.082 [DEBUG] [Thread-176505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:48:32.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:48:32.136 [DEBUG] [Thread-176506] [transport.py] [_log()] starting thread (client mode): 0xae5f3b50
2026-04-11T20:48:32.136 [DEBUG] [Thread-176506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:48:32.150 [DEBUG] [Thread-176506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:48:32.150 [INFO] [Thread-176506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:48:32.158 [DEBUG] [Thread-176506] [transport.py] [_log()] client lang: <none>
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] server lang: <none>
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] kex follows: False
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] Compression: none
2026-04-11T20:48:32.159 [DEBUG] [Thread-176506] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:48:32.221 [DEBUG] [Thread-176506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:48:32.222 [DEBUG] [Thread-176506] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:48:32.222 [DEBUG] [Thread-176506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:48:32.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:48:32.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:48:32.290 [DEBUG] [Thread-176506] [transport.py] [_log()] userauth is OK
2026-04-11T20:48:32.290 [DEBUG] [Thread-176506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:48:32.290 [DEBUG] [Thread-176506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:48:32.290 [DEBUG] [Thread-176506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:48:32.290 [DEBUG] [Thread-176506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:48:32.312 [INFO] [Thread-176506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:48:32.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:48:32.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:48:33.143 [DEBUG] [Thread-176506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:48:33.144 [DEBUG] [Thread-176506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:48:33.190 [DEBUG] [Thread-176506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:48:33.191 [DEBUG] [Thread-176506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:48:33.199 [DEBUG] [Thread-176506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:48:33.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:48:33.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:48:33.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-04-11T20:48:33.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:48:33.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:48:33.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:48:33.231 [DEBUG] [Thread-176506] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:48:47.125 [DEBUG] [Thread-176508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:02.164 [DEBUG] [Thread-176509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:03.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:49:03.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:49:03.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-04-11T20:49:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 48, 22), 0.04038, 100.026, 0.0, 11.858, 12.0392, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:49:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:48:22
2026-04-11T20:49:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:49:05.028 [DEBUG] [Thread-176510] [transport.py] [_log()] starting thread (client mode): 0xae516800
2026-04-11T20:49:05.028 [DEBUG] [Thread-176510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:49:05.049 [DEBUG] [Thread-176510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:49:05.049 [INFO] [Thread-176510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:49:05.052 [DEBUG] [Thread-176510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:49:05.052 [DEBUG] [Thread-176510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:49:05.052 [DEBUG] [Thread-176510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] client lang: <none>
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] server lang: <none>
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] kex follows: False
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:49:05.053 [DEBUG] [Thread-176510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:49:05.054 [DEBUG] [Thread-176510] [transport.py] [_log()] Compression: none
2026-04-11T20:49:05.054 [DEBUG] [Thread-176510] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:49:05.071 [DEBUG] [Thread-176510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:49:05.072 [DEBUG] [Thread-176510] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:49:05.072 [DEBUG] [Thread-176510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:49:05.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:49:05.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:49:05.075 [DEBUG] [Thread-176510] [transport.py] [_log()] userauth is OK
2026-04-11T20:49:05.075 [DEBUG] [Thread-176510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:49:05.075 [DEBUG] [Thread-176510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:49:05.075 [DEBUG] [Thread-176510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:49:05.075 [DEBUG] [Thread-176510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:49:05.100 [INFO] [Thread-176510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:49:05.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:49:05.874 [DEBUG] [Thread-176510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:49:05.874 [DEBUG] [Thread-176510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:49:05.875 [DEBUG] [Thread-176510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:49:05.915 [DEBUG] [Thread-176510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:49:05.915 [DEBUG] [Thread-176510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:49:05.919 [DEBUG] [Thread-176510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:49:05.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:49:05.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:49:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:49:05.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:49:05.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:49:05.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:49:05.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:49:05.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:49:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:49:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.783797 -999.00  +12.00   9.13     97  +11.70 1 3 1 3 1     0    0 0.29 -1.52 ----- 9.1 9.1 252.0 12.1 13.3 -1.5 13.1 -0.4 12.8 -0.5 13.1 -0.8
2026-04-11T20:49:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:49:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:49:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.783797
2026-04-11T20:49:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:48:22', tmtdew=0.04038, humidity=100.026, cloud=0.0, wind=11.858, temperature=12.0392, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:48:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:49:05.945 [DEBUG] [Thread-176510] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:49:06.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:49:06.037 [DEBUG] [Thread-176513] [transport.py] [_log()] starting thread (client mode): 0xb0f56050
2026-04-11T20:49:06.037 [DEBUG] [Thread-176513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:49:06.054 [DEBUG] [Thread-176513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:49:06.054 [INFO] [Thread-176513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] client lang: <none>
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] server lang: <none>
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] kex follows: False
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] Compression: none
2026-04-11T20:49:06.062 [DEBUG] [Thread-176513] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:49:06.120 [DEBUG] [Thread-176513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:49:06.121 [DEBUG] [Thread-176513] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:49:06.122 [DEBUG] [Thread-176513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:49:06.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:49:06.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:49:06.181 [DEBUG] [Thread-176513] [transport.py] [_log()] userauth is OK
2026-04-11T20:49:06.182 [DEBUG] [Thread-176513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:49:06.182 [DEBUG] [Thread-176513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:49:06.183 [DEBUG] [Thread-176513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:49:06.183 [DEBUG] [Thread-176513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:49:06.205 [INFO] [Thread-176513] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:49:06.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:49:06.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:49:07.090 [DEBUG] [Thread-176513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:49:07.091 [DEBUG] [Thread-176513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:49:07.138 [DEBUG] [Thread-176513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:49:07.138 [DEBUG] [Thread-176513] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:49:07.148 [DEBUG] [Thread-176513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:49:07.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:49:07.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-04-11T20:49:07.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:49:07.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:49:07.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:49:07.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:49:07.192 [DEBUG] [Thread-176513] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:49:17.205 [DEBUG] [Thread-176515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:20.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:20.618 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:31.588 [DEBUG] [Thread-176516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:32.256 [DEBUG] [Thread-176517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:49:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:49:37.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:49:37.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-04-11T20:49:38.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 48, 57), -0.01215, 100.042, 0.0, 14.54, 12.0392, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:49:38.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:48:57
2026-04-11T20:49:38.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:49:39.048 [DEBUG] [Thread-176518] [transport.py] [_log()] starting thread (client mode): 0xae517820
2026-04-11T20:49:39.048 [DEBUG] [Thread-176518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:49:39.064 [DEBUG] [Thread-176518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:49:39.064 [INFO] [Thread-176518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] client lang: <none>
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] server lang: <none>
2026-04-11T20:49:39.067 [DEBUG] [Thread-176518] [transport.py] [_log()] kex follows: False
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] Compression: none
2026-04-11T20:49:39.068 [DEBUG] [Thread-176518] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:49:39.086 [DEBUG] [Thread-176518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:49:39.087 [DEBUG] [Thread-176518] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:49:39.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:49:39.089 [DEBUG] [Thread-176518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:49:39.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:49:39.091 [DEBUG] [Thread-176518] [transport.py] [_log()] userauth is OK
2026-04-11T20:49:39.092 [DEBUG] [Thread-176518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:49:39.092 [DEBUG] [Thread-176518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:49:39.092 [DEBUG] [Thread-176518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:49:39.092 [DEBUG] [Thread-176518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:49:39.110 [INFO] [Thread-176518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:49:39.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:49:39.897 [DEBUG] [Thread-176518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:49:39.898 [DEBUG] [Thread-176518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:49:39.898 [DEBUG] [Thread-176518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:49:39.939 [DEBUG] [Thread-176518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:49:39.939 [DEBUG] [Thread-176518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:49:39.943 [DEBUG] [Thread-176518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:49:39.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:49:39.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:49:39.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:49:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:49:39.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:49:39.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:49:39.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:49:39.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:49:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:49:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.784144 -999.00  +12.00   9.53     97  +11.70 1 3 1 3 1     0    0 0.29 -2.00 ----- 9.5 9.5 256.8 12.6 13.3 -1.4 13.2 -0.2 12.8 -0.6 13.1 -0.9
2026-04-11T20:49:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:49:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:49:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.784144
2026-04-11T20:49:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:48:57', tmtdew=-0.01215, humidity=100.042, cloud=0.0, wind=14.54, temperature=12.0392, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:49:10.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:49:39.969 [DEBUG] [Thread-176518] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:49:40.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:49:40.074 [DEBUG] [Thread-176521] [transport.py] [_log()] starting thread (client mode): 0xae5f00d0
2026-04-11T20:49:40.074 [DEBUG] [Thread-176521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:49:40.089 [DEBUG] [Thread-176521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:49:40.089 [INFO] [Thread-176521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:49:40.096 [DEBUG] [Thread-176521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:49:40.096 [DEBUG] [Thread-176521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:49:40.096 [DEBUG] [Thread-176521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:49:40.096 [DEBUG] [Thread-176521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] client lang: <none>
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] server lang: <none>
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] kex follows: False
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] Compression: none
2026-04-11T20:49:40.097 [DEBUG] [Thread-176521] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:49:40.155 [DEBUG] [Thread-176521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:49:40.156 [DEBUG] [Thread-176521] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:49:40.156 [DEBUG] [Thread-176521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:49:40.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:49:40.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:49:40.217 [DEBUG] [Thread-176521] [transport.py] [_log()] userauth is OK
2026-04-11T20:49:40.217 [DEBUG] [Thread-176521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:49:40.217 [DEBUG] [Thread-176521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:49:40.217 [DEBUG] [Thread-176521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:49:40.218 [DEBUG] [Thread-176521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:49:40.237 [INFO] [Thread-176521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:49:40.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:49:40.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:49:41.057 [DEBUG] [Thread-176521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:49:41.057 [DEBUG] [Thread-176521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:49:41.105 [DEBUG] [Thread-176521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:49:41.105 [DEBUG] [Thread-176521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:49:41.119 [DEBUG] [Thread-176521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:49:41.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:49:41.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-04-11T20:49:41.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:49:41.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:49:41.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:49:41.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:49:41.159 [DEBUG] [Thread-176521] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:49:47.294 [DEBUG] [Thread-176523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:02.348 [DEBUG] [Thread-176524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:11.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:50:11.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:50:11.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-04-11T20:50:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 49, 33), -0.007, 100.009, 0.0, 12.9524, 11.9728, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:50:12.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:49:33
2026-04-11T20:50:13.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:50:13.167 [DEBUG] [Thread-176525] [transport.py] [_log()] starting thread (client mode): 0xb0f8e6e0
2026-04-11T20:50:13.167 [DEBUG] [Thread-176525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:50:13.188 [DEBUG] [Thread-176525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:50:13.188 [INFO] [Thread-176525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] client lang: <none>
2026-04-11T20:50:13.191 [DEBUG] [Thread-176525] [transport.py] [_log()] server lang: <none>
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] kex follows: False
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] Compression: none
2026-04-11T20:50:13.192 [DEBUG] [Thread-176525] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:50:13.213 [DEBUG] [Thread-176525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:50:13.214 [DEBUG] [Thread-176525] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:50:13.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:50:13.215 [DEBUG] [Thread-176525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:50:13.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:50:13.217 [DEBUG] [Thread-176525] [transport.py] [_log()] userauth is OK
2026-04-11T20:50:13.217 [DEBUG] [Thread-176525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:50:13.217 [DEBUG] [Thread-176525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:50:13.217 [DEBUG] [Thread-176525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:50:13.217 [DEBUG] [Thread-176525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:50:13.243 [INFO] [Thread-176525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:50:13.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:50:14.308 [DEBUG] [Thread-176525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:50:14.308 [DEBUG] [Thread-176525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:50:14.309 [DEBUG] [Thread-176525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:50:14.349 [DEBUG] [Thread-176525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:50:14.349 [DEBUG] [Thread-176525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:50:14.353 [DEBUG] [Thread-176525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:50:14.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:50:14.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:50:14.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:50:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:50:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:50:14.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:50:14.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:50:14.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:50:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:50:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.784491 -999.00  +12.00   9.59     97  +11.60 1 3 1 3 1     0    0 0.27 -2.36 ----- 9.6 9.6 269.4 10.9 13.3 -1.3 13.2 -0.1 12.8 -0.7 13.2 -0.8
2026-04-11T20:50:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:50:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:50:14.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.784491
2026-04-11T20:50:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:50:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:50:14.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:50:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:50:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:50:14.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:49:33', tmtdew=-0.007, humidity=100.009, cloud=0.0, wind=12.9524, temperature=11.9728, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:49:40.022', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:50:14.382 [DEBUG] [Thread-176525] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:50:14.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:50:14.475 [DEBUG] [Thread-176528] [transport.py] [_log()] starting thread (client mode): 0xb0fb7dc0
2026-04-11T20:50:14.476 [DEBUG] [Thread-176528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:50:14.490 [DEBUG] [Thread-176528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:50:14.490 [INFO] [Thread-176528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:50:14.498 [DEBUG] [Thread-176528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:50:14.498 [DEBUG] [Thread-176528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:50:14.498 [DEBUG] [Thread-176528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:50:14.498 [DEBUG] [Thread-176528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:14.498 [DEBUG] [Thread-176528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:14.498 [DEBUG] [Thread-176528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] client lang: <none>
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] server lang: <none>
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] kex follows: False
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:50:14.499 [DEBUG] [Thread-176528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:50:14.500 [DEBUG] [Thread-176528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:50:14.500 [DEBUG] [Thread-176528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:50:14.500 [DEBUG] [Thread-176528] [transport.py] [_log()] Compression: none
2026-04-11T20:50:14.500 [DEBUG] [Thread-176528] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:50:14.556 [DEBUG] [Thread-176528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:50:14.556 [DEBUG] [Thread-176528] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:50:14.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:50:14.557 [DEBUG] [Thread-176528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:50:14.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:50:14.612 [DEBUG] [Thread-176528] [transport.py] [_log()] userauth is OK
2026-04-11T20:50:14.612 [DEBUG] [Thread-176528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:50:14.612 [DEBUG] [Thread-176528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:50:14.613 [DEBUG] [Thread-176528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:50:14.613 [DEBUG] [Thread-176528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:50:14.636 [INFO] [Thread-176528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:50:14.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:50:14.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:50:15.460 [DEBUG] [Thread-176528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:50:15.461 [DEBUG] [Thread-176528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:50:15.508 [DEBUG] [Thread-176528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:50:15.508 [DEBUG] [Thread-176528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:50:15.517 [DEBUG] [Thread-176528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:50:15.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:50:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:50:15.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-04-11T20:50:15.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:50:15.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:50:15.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:50:15.563 [DEBUG] [Thread-176528] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:50:17.387 [DEBUG] [Thread-176530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:20.820 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:20.822 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:31.664 [DEBUG] [Thread-176531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:32.440 [DEBUG] [Thread-176532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:50:45.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:50:45.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-04-11T20:50:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 50, 8), -0.007035, 100.009, 0.0, 12.8819, 12.0059, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:50:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:50:08
2026-04-11T20:50:47.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:50:47.464 [DEBUG] [Thread-176533] [transport.py] [_log()] starting thread (client mode): 0xb0fce830
2026-04-11T20:50:47.464 [DEBUG] [Thread-176533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:50:47.474 [DEBUG] [Thread-176534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:50:47.486 [DEBUG] [Thread-176533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:50:47.487 [INFO] [Thread-176533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:50:47.490 [DEBUG] [Thread-176533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:50:47.490 [DEBUG] [Thread-176533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:50:47.490 [DEBUG] [Thread-176533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:50:47.490 [DEBUG] [Thread-176533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:47.490 [DEBUG] [Thread-176533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:47.490 [DEBUG] [Thread-176533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] client lang: <none>
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] server lang: <none>
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] kex follows: False
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:50:47.491 [DEBUG] [Thread-176533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:50:47.492 [DEBUG] [Thread-176533] [transport.py] [_log()] Compression: none
2026-04-11T20:50:47.492 [DEBUG] [Thread-176533] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:50:47.512 [DEBUG] [Thread-176533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:50:47.512 [DEBUG] [Thread-176533] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:50:47.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:50:47.513 [DEBUG] [Thread-176533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:50:47.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:50:47.516 [DEBUG] [Thread-176533] [transport.py] [_log()] userauth is OK
2026-04-11T20:50:47.516 [DEBUG] [Thread-176533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:50:47.516 [DEBUG] [Thread-176533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:50:47.516 [DEBUG] [Thread-176533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:50:47.516 [DEBUG] [Thread-176533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:50:47.551 [INFO] [Thread-176533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:50:47.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:50:48.346 [DEBUG] [Thread-176533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:50:48.347 [DEBUG] [Thread-176533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:50:48.347 [DEBUG] [Thread-176533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:50:48.388 [DEBUG] [Thread-176533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:50:48.388 [DEBUG] [Thread-176533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:50:48.390 [DEBUG] [Thread-176533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:50:48.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:50:48.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:50:48.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:50:48.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:50:48.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:50:48.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:50:48.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:50:48.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:50:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:50:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.784838 -999.00  +12.00   9.14     97  +11.70 1 3 1 3 1     0    0 0.27 -2.20 ----- 9.1 9.1 275.0 11.6 13.3 -1.2 13.1 -0.2 12.8 -0.4 13.1 -0.8
2026-04-11T20:50:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:50:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:50:48.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.784838
2026-04-11T20:50:48.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:50:48.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:50:48.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:50:48.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:50:48.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:50:48.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:50:08', tmtdew=-0.007035, humidity=100.009, cloud=0.0, wind=12.8819, temperature=12.0059, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:50:10.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:50:48.416 [DEBUG] [Thread-176533] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:50:48.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:50:48.517 [DEBUG] [Thread-176537] [transport.py] [_log()] starting thread (client mode): 0xb0fcdc30
2026-04-11T20:50:48.517 [DEBUG] [Thread-176537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:50:48.532 [DEBUG] [Thread-176537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:50:48.532 [INFO] [Thread-176537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:50:48.540 [DEBUG] [Thread-176537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] client lang: <none>
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] server lang: <none>
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] kex follows: False
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] Compression: none
2026-04-11T20:50:48.541 [DEBUG] [Thread-176537] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:50:48.600 [DEBUG] [Thread-176537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:50:48.601 [DEBUG] [Thread-176537] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:50:48.602 [DEBUG] [Thread-176537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:50:48.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:50:48.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:50:48.660 [DEBUG] [Thread-176537] [transport.py] [_log()] userauth is OK
2026-04-11T20:50:48.660 [DEBUG] [Thread-176537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:50:48.660 [DEBUG] [Thread-176537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:50:48.660 [DEBUG] [Thread-176537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:50:48.660 [DEBUG] [Thread-176537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:50:48.680 [INFO] [Thread-176537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:50:48.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:50:48.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:50:49.525 [DEBUG] [Thread-176537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:50:49.525 [DEBUG] [Thread-176537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:50:49.573 [DEBUG] [Thread-176537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:50:49.573 [DEBUG] [Thread-176537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:50:49.583 [DEBUG] [Thread-176537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:50:49.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:50:49.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-04-11T20:50:49.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:50:49.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:50:49.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:50:49.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:50:49.620 [DEBUG] [Thread-176537] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:51:02.506 [DEBUG] [Thread-176539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:17.557 [DEBUG] [Thread-176540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:19.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:51:19.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:51:19.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-04-11T20:51:20.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 50, 44), -0.0091, 99.9855, 0.0, 11.646, 12.4122, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:51:20.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:50:44
2026-04-11T20:51:21.030 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:21.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:21.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:51:21.588 [DEBUG] [Thread-176541] [transport.py] [_log()] starting thread (client mode): 0xb0fb5870
2026-04-11T20:51:21.588 [DEBUG] [Thread-176541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:51:21.609 [DEBUG] [Thread-176541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:51:21.609 [INFO] [Thread-176541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:51:21.612 [DEBUG] [Thread-176541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:51:21.612 [DEBUG] [Thread-176541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:51:21.612 [DEBUG] [Thread-176541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:51:21.612 [DEBUG] [Thread-176541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] client lang: <none>
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] server lang: <none>
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] kex follows: False
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:51:21.613 [DEBUG] [Thread-176541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:51:21.614 [DEBUG] [Thread-176541] [transport.py] [_log()] Compression: none
2026-04-11T20:51:21.614 [DEBUG] [Thread-176541] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:51:21.626 [DEBUG] [Thread-176541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:51:21.627 [DEBUG] [Thread-176541] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:51:21.628 [DEBUG] [Thread-176541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:51:21.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:51:21.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:51:21.630 [DEBUG] [Thread-176541] [transport.py] [_log()] userauth is OK
2026-04-11T20:51:21.630 [DEBUG] [Thread-176541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:51:21.630 [DEBUG] [Thread-176541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:51:21.631 [DEBUG] [Thread-176541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:51:21.631 [DEBUG] [Thread-176541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:51:21.654 [INFO] [Thread-176541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:51:21.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:51:22.421 [DEBUG] [Thread-176541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:51:22.421 [DEBUG] [Thread-176541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:51:22.422 [DEBUG] [Thread-176541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:51:22.462 [DEBUG] [Thread-176541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:51:22.462 [DEBUG] [Thread-176541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:51:22.466 [DEBUG] [Thread-176541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:51:22.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:51:22.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:51:22.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:51:22.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:51:22.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:51:22.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:51:22.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:51:22.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:51:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:51:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.785185 -999.00  +12.00   8.91     97  +11.70 1 3 1 3 1     0    0 0.28 -2.05 ----- 8.9 8.9 268.2 13.1 13.4 -1.4 13.2 -0.3 12.8 -0.4 13.1 -0.7
2026-04-11T20:51:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:51:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:51:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.785185
2026-04-11T20:51:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:51:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:51:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:51:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:51:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:51:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:50:44', tmtdew=-0.0091, humidity=99.9855, cloud=0.0, wind=11.646, temperature=12.4122, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:50:39.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:51:22.496 [DEBUG] [Thread-176541] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:51:22.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:51:22.592 [DEBUG] [Thread-176544] [transport.py] [_log()] starting thread (client mode): 0xb0fced10
2026-04-11T20:51:22.592 [DEBUG] [Thread-176544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:51:22.608 [DEBUG] [Thread-176544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:51:22.608 [INFO] [Thread-176544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:51:22.615 [DEBUG] [Thread-176544] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] client lang: <none>
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] server lang: <none>
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] kex follows: False
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] Compression: none
2026-04-11T20:51:22.616 [DEBUG] [Thread-176544] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:51:22.676 [DEBUG] [Thread-176544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:51:22.677 [DEBUG] [Thread-176544] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:51:22.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:51:22.678 [DEBUG] [Thread-176544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:51:22.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:51:22.732 [DEBUG] [Thread-176544] [transport.py] [_log()] userauth is OK
2026-04-11T20:51:22.732 [DEBUG] [Thread-176544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:51:22.732 [DEBUG] [Thread-176544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:51:22.733 [DEBUG] [Thread-176544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:51:22.733 [DEBUG] [Thread-176544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:51:22.752 [INFO] [Thread-176544] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:51:22.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:51:22.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:51:23.568 [DEBUG] [Thread-176544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:51:23.569 [DEBUG] [Thread-176544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:51:23.616 [DEBUG] [Thread-176544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:51:23.617 [DEBUG] [Thread-176544] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:51:23.625 [DEBUG] [Thread-176544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:51:23.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:51:23.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-04-11T20:51:23.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-04-11T20:51:23.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:51:23.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:51:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:51:23.665 [DEBUG] [Thread-176544] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:51:31.748 [DEBUG] [Thread-176546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:32.593 [DEBUG] [Thread-176547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:47.641 [DEBUG] [Thread-176548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:51:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:51:53.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:51:53.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-04-11T20:51:54.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 51, 20), 0.042925, 100.009, 0.0, 10.9408, 12.0061, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:51:54.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:51:20
2026-04-11T20:51:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:51:55.556 [DEBUG] [Thread-176549] [transport.py] [_log()] starting thread (client mode): 0xae509f00
2026-04-11T20:51:55.556 [DEBUG] [Thread-176549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:51:55.576 [DEBUG] [Thread-176549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:51:55.577 [INFO] [Thread-176549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:51:55.579 [DEBUG] [Thread-176549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] client lang: <none>
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] server lang: <none>
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] kex follows: False
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:51:55.580 [DEBUG] [Thread-176549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:51:55.581 [DEBUG] [Thread-176549] [transport.py] [_log()] Compression: none
2026-04-11T20:51:55.581 [DEBUG] [Thread-176549] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:51:55.597 [DEBUG] [Thread-176549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:51:55.598 [DEBUG] [Thread-176549] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:51:55.598 [DEBUG] [Thread-176549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:51:55.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:51:55.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:51:55.600 [DEBUG] [Thread-176549] [transport.py] [_log()] userauth is OK
2026-04-11T20:51:55.601 [DEBUG] [Thread-176549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:51:55.601 [DEBUG] [Thread-176549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:51:55.601 [DEBUG] [Thread-176549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:51:55.601 [DEBUG] [Thread-176549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:51:55.625 [INFO] [Thread-176549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:51:55.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:51:56.383 [DEBUG] [Thread-176549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:51:56.384 [DEBUG] [Thread-176549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:51:56.384 [DEBUG] [Thread-176549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:51:56.424 [DEBUG] [Thread-176549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:51:56.424 [DEBUG] [Thread-176549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:51:56.428 [DEBUG] [Thread-176549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:51:56.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:51:56.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:51:56.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:51:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:51:56.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:51:56.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:51:56.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:51:56.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:51:56.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:51:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.785533 -999.00  +12.00   6.83     97  +11.70 1 3 1 3 1     0    0 0.27 -2.24 ----- 6.8 6.8 277.2 9.2 13.3 -1.3 13.2 -0.2 12.8 -0.6 13.2 -0.6
2026-04-11T20:51:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:51:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:51:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.785533
2026-04-11T20:51:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:51:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:51:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:51:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:51:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:51:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:51:20', tmtdew=0.042925, humidity=100.009, cloud=0.0, wind=10.9408, temperature=12.0061, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:51:10.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:51:56.457 [DEBUG] [Thread-176549] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:51:56.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:51:56.550 [DEBUG] [Thread-176552] [transport.py] [_log()] starting thread (client mode): 0xae518070
2026-04-11T20:51:56.550 [DEBUG] [Thread-176552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:51:56.565 [DEBUG] [Thread-176552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:51:56.566 [INFO] [Thread-176552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:51:56.573 [DEBUG] [Thread-176552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:51:56.573 [DEBUG] [Thread-176552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:51:56.573 [DEBUG] [Thread-176552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:51:56.573 [DEBUG] [Thread-176552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] client lang: <none>
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] server lang: <none>
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] kex follows: False
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] Compression: none
2026-04-11T20:51:56.574 [DEBUG] [Thread-176552] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:51:56.632 [DEBUG] [Thread-176552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:51:56.632 [DEBUG] [Thread-176552] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:51:56.633 [DEBUG] [Thread-176552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:51:56.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:51:56.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:51:56.688 [DEBUG] [Thread-176552] [transport.py] [_log()] userauth is OK
2026-04-11T20:51:56.688 [DEBUG] [Thread-176552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:51:56.688 [DEBUG] [Thread-176552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:51:56.688 [DEBUG] [Thread-176552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:51:56.688 [DEBUG] [Thread-176552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:51:56.707 [INFO] [Thread-176552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:51: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-04-11T20:51:56.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:51:57.515 [DEBUG] [Thread-176552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:51:57.515 [DEBUG] [Thread-176552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:51:57.563 [DEBUG] [Thread-176552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:51:57.563 [DEBUG] [Thread-176552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:51:57.572 [DEBUG] [Thread-176552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:51:57.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:51:57.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:51: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') -> 00000000
2026-04-11T20:51:57.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:51:57.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:51:57.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:51:57.609 [DEBUG] [Thread-176552] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:52:02.678 [DEBUG] [Thread-176554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:52:17.736 [DEBUG] [Thread-176555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:52:21.238 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:52:21.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:52:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:52:27.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:52:27.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-04-11T20:52:28.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 51, 55), 0.048015, 99.976, 0.0, 11.8051, 12.006, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:52:28.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:51:55
2026-04-11T20:52:29.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:52:29.477 [DEBUG] [Thread-176556] [transport.py] [_log()] starting thread (client mode): 0xae519c90
2026-04-11T20:52:29.477 [DEBUG] [Thread-176556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:52:29.498 [DEBUG] [Thread-176556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:52:29.498 [INFO] [Thread-176556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] client lang: <none>
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] server lang: <none>
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] kex follows: False
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] Compression: none
2026-04-11T20:52:29.502 [DEBUG] [Thread-176556] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:52:29.519 [DEBUG] [Thread-176556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:52:29.520 [DEBUG] [Thread-176556] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:52:29.520 [DEBUG] [Thread-176556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:52:29.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:52:29.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:52:29.522 [DEBUG] [Thread-176556] [transport.py] [_log()] userauth is OK
2026-04-11T20:52:29.522 [DEBUG] [Thread-176556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:52:29.522 [DEBUG] [Thread-176556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:52:29.522 [DEBUG] [Thread-176556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:52:29.522 [DEBUG] [Thread-176556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:52:29.557 [INFO] [Thread-176556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:52:29.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:52:30.332 [DEBUG] [Thread-176556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:52:30.332 [DEBUG] [Thread-176556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:52:30.333 [DEBUG] [Thread-176556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:52:30.373 [DEBUG] [Thread-176556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:52:30.373 [DEBUG] [Thread-176556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:52:30.377 [DEBUG] [Thread-176556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:52:30.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:52:30.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:52:30.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:52:30.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:52:30.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:52:30.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:52:30.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:52:30.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:52:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:52:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.785880 -999.00  +12.10   6.71     97  +11.70 1 3 1 3 1     0    0 0.26 -2.40 ----- 6.7 6.7 257.8 8.7 13.4 -1.1 13.1 -0.2 12.8 -0.2 13.2 -0.6
2026-04-11T20:52:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:52:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:52:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.785880
2026-04-11T20:52:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:52:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:52:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:52:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:52:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:52:30.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:51:55', tmtdew=0.048015, humidity=99.976, cloud=0.0, wind=11.8051, temperature=12.006, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:51:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:52:30.405 [DEBUG] [Thread-176556] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:52:30.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:52:30.497 [DEBUG] [Thread-176559] [transport.py] [_log()] starting thread (client mode): 0xae50b7f0
2026-04-11T20:52:30.497 [DEBUG] [Thread-176559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:52:30.512 [DEBUG] [Thread-176559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:52:30.512 [INFO] [Thread-176559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:52:30.519 [DEBUG] [Thread-176559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:52:30.519 [DEBUG] [Thread-176559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:52:30.519 [DEBUG] [Thread-176559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:52:30.519 [DEBUG] [Thread-176559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] client lang: <none>
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] server lang: <none>
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] kex follows: False
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] Compression: none
2026-04-11T20:52:30.520 [DEBUG] [Thread-176559] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:52:30.580 [DEBUG] [Thread-176559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:52:30.580 [DEBUG] [Thread-176559] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:52:30.581 [DEBUG] [Thread-176559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:52:30.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:52:30.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:52:30.636 [DEBUG] [Thread-176559] [transport.py] [_log()] userauth is OK
2026-04-11T20:52:30.636 [DEBUG] [Thread-176559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:52:30.637 [DEBUG] [Thread-176559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:52:30.637 [DEBUG] [Thread-176559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:52:30.637 [DEBUG] [Thread-176559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:52:30.661 [INFO] [Thread-176559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:52:30.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:52:30.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:52:31.489 [DEBUG] [Thread-176559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:52:31.489 [DEBUG] [Thread-176559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:52:31.537 [DEBUG] [Thread-176559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:52:31.537 [DEBUG] [Thread-176559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:52:31.546 [DEBUG] [Thread-176559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:52:31.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:52:31.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-04-11T20:52:31.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:52:31.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:52:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:52:31.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:52:31.579 [DEBUG] [Thread-176559] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:52:31.844 [DEBUG] [Thread-176561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:52:32.769 [DEBUG] [Thread-176562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:52:47.819 [DEBUG] [Thread-176563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:53:01.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:53:01.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-04-11T20:53:02.857 [DEBUG] [Thread-176564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:02.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 52, 31), 0.045525, 99.9924, 0.0, 11.4876, 11.9893, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:53:02.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:52:31
2026-04-11T20:53:03.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:53:03.473 [DEBUG] [Thread-176565] [transport.py] [_log()] starting thread (client mode): 0xae509b40
2026-04-11T20:53:03.473 [DEBUG] [Thread-176565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:53:03.493 [DEBUG] [Thread-176565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:53:03.493 [INFO] [Thread-176565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:53:03.496 [DEBUG] [Thread-176565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] client lang: <none>
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] server lang: <none>
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] kex follows: False
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:53:03.497 [DEBUG] [Thread-176565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:53:03.498 [DEBUG] [Thread-176565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:53:03.498 [DEBUG] [Thread-176565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:53:03.498 [DEBUG] [Thread-176565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:53:03.498 [DEBUG] [Thread-176565] [transport.py] [_log()] Compression: none
2026-04-11T20:53:03.498 [DEBUG] [Thread-176565] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:53:03.516 [DEBUG] [Thread-176565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:53:03.516 [DEBUG] [Thread-176565] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:53:03.517 [DEBUG] [Thread-176565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:53:03.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:53:03.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:53:03.519 [DEBUG] [Thread-176565] [transport.py] [_log()] userauth is OK
2026-04-11T20:53:03.519 [DEBUG] [Thread-176565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:53:03.519 [DEBUG] [Thread-176565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:53:03.519 [DEBUG] [Thread-176565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:53:03.519 [DEBUG] [Thread-176565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:53:03.542 [INFO] [Thread-176565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:53:03.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:53:04.304 [DEBUG] [Thread-176565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:53:04.304 [DEBUG] [Thread-176565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:53:04.304 [DEBUG] [Thread-176565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:53:04.344 [DEBUG] [Thread-176565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:53:04.344 [DEBUG] [Thread-176565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:53:04.346 [DEBUG] [Thread-176565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:53:04.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:53:04.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:53:04.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:53:04.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:53:04.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:53:04.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:53:04.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.786227 -999.00  +12.00   7.53     97  +11.70 1 3 1 3 1     0    0 0.27 -2.28 ----- 7.5 7.5 281.3 11.5 13.3 -1.4 13.2 -0.2 12.8 -0.9 13.1 -0.5
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.786227
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:53:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:53:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:53:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:52:31', tmtdew=0.045525, humidity=99.9924, cloud=0.0, wind=11.4876, temperature=11.9893, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:52:10.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:53:04.365 [DEBUG] [Thread-176565] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:53:04.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:53:04.448 [DEBUG] [Thread-176568] [transport.py] [_log()] starting thread (client mode): 0xae50ada0
2026-04-11T20:53:04.448 [DEBUG] [Thread-176568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:53:04.463 [DEBUG] [Thread-176568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:53:04.463 [INFO] [Thread-176568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] client lang: <none>
2026-04-11T20:53:04.471 [DEBUG] [Thread-176568] [transport.py] [_log()] server lang: <none>
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] kex follows: False
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] Compression: none
2026-04-11T20:53:04.472 [DEBUG] [Thread-176568] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:53:04.526 [DEBUG] [Thread-176568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:53:04.527 [DEBUG] [Thread-176568] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:53:04.527 [DEBUG] [Thread-176568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:53:04.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:53:04.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:53:04.583 [DEBUG] [Thread-176568] [transport.py] [_log()] userauth is OK
2026-04-11T20:53:04.583 [DEBUG] [Thread-176568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:53:04.583 [DEBUG] [Thread-176568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:53:04.584 [DEBUG] [Thread-176568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:53:04.584 [DEBUG] [Thread-176568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:53:04.602 [INFO] [Thread-176568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:53:04.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:53:04.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:53:05.421 [DEBUG] [Thread-176568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:53:05.421 [DEBUG] [Thread-176568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:53:05.471 [DEBUG] [Thread-176568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:53:05.471 [DEBUG] [Thread-176568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:53:05.481 [DEBUG] [Thread-176568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:53:05.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:53:05.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-04-11T20:53:05.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-04-11T20:53:05.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:53:05.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:53:05.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:53:05.518 [DEBUG] [Thread-176568] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:53:17.890 [DEBUG] [Thread-176570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:21.444 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:21.445 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:31.922 [DEBUG] [Thread-176571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:32.945 [DEBUG] [Thread-176572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:53:35.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:53:35.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:53:35.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-04-11T20:53:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 53, 6), 0.04046, 100.026, 0.0, 12.2638, 12.0059, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:53:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:53:06
2026-04-11T20:53:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:53:37.303 [DEBUG] [Thread-176573] [transport.py] [_log()] starting thread (client mode): 0xb0f8c190
2026-04-11T20:53:37.303 [DEBUG] [Thread-176573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:53:37.323 [DEBUG] [Thread-176573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:53:37.323 [INFO] [Thread-176573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:53:37.327 [DEBUG] [Thread-176573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] client lang: <none>
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] server lang: <none>
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] kex follows: False
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] Compression: none
2026-04-11T20:53:37.328 [DEBUG] [Thread-176573] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:53:37.347 [DEBUG] [Thread-176573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:53:37.348 [DEBUG] [Thread-176573] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:53:37.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:53:37.349 [DEBUG] [Thread-176573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:53:37.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:53:37.393 [DEBUG] [Thread-176573] [transport.py] [_log()] userauth is OK
2026-04-11T20:53:37.393 [DEBUG] [Thread-176573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:53:37.393 [DEBUG] [Thread-176573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:53:37.393 [DEBUG] [Thread-176573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:53:37.394 [DEBUG] [Thread-176573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:53:37.420 [INFO] [Thread-176573] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:53:37.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:53:38.222 [DEBUG] [Thread-176573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:53:38.223 [DEBUG] [Thread-176573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:53:38.223 [DEBUG] [Thread-176573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:53:38.264 [DEBUG] [Thread-176573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:53:38.264 [DEBUG] [Thread-176573] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:53:38.268 [DEBUG] [Thread-176573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:53:38.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:53:38.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:53:38.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:53:38.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:53:38.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:53:38.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:53:38.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:53:38.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:53:38.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:53:38.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.786921 -999.00  +12.10   7.12     97  +11.70 1 3 1 3 1     0    0 0.27 -1.98 ----- 7.1 7.1 299.4 9.7 13.4 -1.1 13.2 -0.2 12.9 -0.5 13.2 -0.5
2026-04-11T20:53:38.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:53:38.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:53:38.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.786921
2026-04-11T20:53:38.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:53:38.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:53:38.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:53:38.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:53:38.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:53:38.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:53:06', tmtdew=0.04046, humidity=100.026, cloud=0.0, wind=12.2638, temperature=12.0059, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:53:09.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:53:38.295 [DEBUG] [Thread-176573] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:53:38.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:53:38.388 [DEBUG] [Thread-176576] [transport.py] [_log()] starting thread (client mode): 0xb0f8f6d0
2026-04-11T20:53:38.388 [DEBUG] [Thread-176576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:53:38.405 [DEBUG] [Thread-176576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:53:38.405 [INFO] [Thread-176576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:53:38.413 [DEBUG] [Thread-176576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:53:38.413 [DEBUG] [Thread-176576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:53:38.414 [DEBUG] [Thread-176576] [transport.py] [_log()] client lang: <none>
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] server lang: <none>
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] kex follows: False
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:53:38.415 [DEBUG] [Thread-176576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:53:38.416 [DEBUG] [Thread-176576] [transport.py] [_log()] Compression: none
2026-04-11T20:53:38.416 [DEBUG] [Thread-176576] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:53:38.473 [DEBUG] [Thread-176576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:53:38.473 [DEBUG] [Thread-176576] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:53:38.474 [DEBUG] [Thread-176576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:53:38.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:53:38.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:53:38.532 [DEBUG] [Thread-176576] [transport.py] [_log()] userauth is OK
2026-04-11T20:53:38.532 [DEBUG] [Thread-176576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:53:38.532 [DEBUG] [Thread-176576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:53:38.532 [DEBUG] [Thread-176576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:53:38.532 [DEBUG] [Thread-176576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:53:38.551 [INFO] [Thread-176576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:53:38.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:53:38.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:53:39.374 [DEBUG] [Thread-176576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:53:39.374 [DEBUG] [Thread-176576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:53:39.422 [DEBUG] [Thread-176576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:53:39.423 [DEBUG] [Thread-176576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:53:39.431 [DEBUG] [Thread-176576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:53:39.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:53:39.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-04-11T20:53:39.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-04-11T20:53:39.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:53:39.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:53:39.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:53:39.471 [DEBUG] [Thread-176576] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:53:47.982 [DEBUG] [Thread-176578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:03.032 [DEBUG] [Thread-176579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:09.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:54:09.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:54:09.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:54:10.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 53, 42), -0.01911, 100.051, 0.0, 13.3747, 12.4449, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:54:10.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:53:42
2026-04-11T20:54:11.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:54:11.298 [DEBUG] [Thread-176580] [transport.py] [_log()] starting thread (client mode): 0xb0fcce80
2026-04-11T20:54:11.298 [DEBUG] [Thread-176580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:54:11.318 [DEBUG] [Thread-176580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:54:11.318 [INFO] [Thread-176580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:54:11.321 [DEBUG] [Thread-176580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] client lang: <none>
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] server lang: <none>
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] kex follows: False
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:54:11.322 [DEBUG] [Thread-176580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:54:11.323 [DEBUG] [Thread-176580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:54:11.323 [DEBUG] [Thread-176580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:54:11.323 [DEBUG] [Thread-176580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:54:11.323 [DEBUG] [Thread-176580] [transport.py] [_log()] Compression: none
2026-04-11T20:54:11.323 [DEBUG] [Thread-176580] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:54:11.341 [DEBUG] [Thread-176580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:54:11.342 [DEBUG] [Thread-176580] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:54:11.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:54:11.344 [DEBUG] [Thread-176580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:54:11.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:54:11.346 [DEBUG] [Thread-176580] [transport.py] [_log()] userauth is OK
2026-04-11T20:54:11.346 [DEBUG] [Thread-176580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:54:11.346 [DEBUG] [Thread-176580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:54:11.347 [DEBUG] [Thread-176580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:54:11.347 [DEBUG] [Thread-176580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:54:11.369 [INFO] [Thread-176580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:54:11.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:54:12.136 [DEBUG] [Thread-176580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:54:12.136 [DEBUG] [Thread-176580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:54:12.136 [DEBUG] [Thread-176580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:54:12.177 [DEBUG] [Thread-176580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:54:12.177 [DEBUG] [Thread-176580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:54:12.180 [DEBUG] [Thread-176580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:54:12.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:54:12.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:54:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:54:12.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:54:12.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:54:12.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:54:12.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:54:12.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:54:12.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:54:12.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.787269 -999.00  +12.10   9.35     97  +11.70 1 3 1 3 1     0    0 0.29 -1.39 ----- 9.3 9.3 293.6 12.2 13.4 -1.1 13.2 -0.3 12.8 -0.3 13.2 -0.5
2026-04-11T20:54:12.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:54:12.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:54:12.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.787269
2026-04-11T20:54:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:54:12.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:54:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:54:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:54:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:54:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:53:42', tmtdew=-0.01911, humidity=100.051, cloud=0.0, wind=13.3747, temperature=12.4449, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:53:40.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:54:12.206 [DEBUG] [Thread-176580] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:54:12.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:54:12.303 [DEBUG] [Thread-176583] [transport.py] [_log()] starting thread (client mode): 0xb0fccb20
2026-04-11T20:54:12.303 [DEBUG] [Thread-176583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:54:12.319 [DEBUG] [Thread-176583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:54:12.319 [INFO] [Thread-176583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:54:12.326 [DEBUG] [Thread-176583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] client lang: <none>
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] server lang: <none>
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] kex follows: False
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:54:12.327 [DEBUG] [Thread-176583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:54:12.328 [DEBUG] [Thread-176583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:54:12.328 [DEBUG] [Thread-176583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:54:12.328 [DEBUG] [Thread-176583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:54:12.328 [DEBUG] [Thread-176583] [transport.py] [_log()] Compression: none
2026-04-11T20:54:12.328 [DEBUG] [Thread-176583] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:54:12.384 [DEBUG] [Thread-176583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:54:12.384 [DEBUG] [Thread-176583] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:54:12.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:54:12.385 [DEBUG] [Thread-176583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:54:12.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:54:12.439 [DEBUG] [Thread-176583] [transport.py] [_log()] userauth is OK
2026-04-11T20:54:12.440 [DEBUG] [Thread-176583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:54:12.440 [DEBUG] [Thread-176583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:54:12.440 [DEBUG] [Thread-176583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:54:12.440 [DEBUG] [Thread-176583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:54:12.463 [INFO] [Thread-176583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:54:12.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:54:12.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:54:13.316 [DEBUG] [Thread-176583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:54:13.316 [DEBUG] [Thread-176583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:54:13.364 [DEBUG] [Thread-176583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:54:13.364 [DEBUG] [Thread-176583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:54:13.373 [DEBUG] [Thread-176583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:54:13.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:54:13.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-04-11T20:54:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:54:13.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:54:13.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:54:13.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:54:13.410 [DEBUG] [Thread-176583] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:54:18.069 [DEBUG] [Thread-176585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:21.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:21.650 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:31.999 [DEBUG] [Thread-176586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:33.119 [DEBUG] [Thread-176587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:54:43.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:54:43.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:54:43.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-04-11T20:54:44.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 54, 17), -0.004465, 99.9922, 0.0, 12.4225, 12.0058, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:54:44.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:54:17
2026-04-11T20:54:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:54:45.272 [DEBUG] [Thread-176588] [transport.py] [_log()] starting thread (client mode): 0xae5198d0
2026-04-11T20:54:45.272 [DEBUG] [Thread-176588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:54:45.293 [DEBUG] [Thread-176588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:54:45.293 [INFO] [Thread-176588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] client lang: <none>
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] server lang: <none>
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] kex follows: False
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:54:45.296 [DEBUG] [Thread-176588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:54:45.297 [DEBUG] [Thread-176588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:54:45.297 [DEBUG] [Thread-176588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:54:45.297 [DEBUG] [Thread-176588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:54:45.297 [DEBUG] [Thread-176588] [transport.py] [_log()] Compression: none
2026-04-11T20:54:45.297 [DEBUG] [Thread-176588] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:54:45.313 [DEBUG] [Thread-176588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:54:45.313 [DEBUG] [Thread-176588] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:54:45.313 [DEBUG] [Thread-176588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:54:45.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:54:45.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:54:45.314 [DEBUG] [Thread-176588] [transport.py] [_log()] userauth is OK
2026-04-11T20:54:45.314 [DEBUG] [Thread-176588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:54:45.314 [DEBUG] [Thread-176588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:54:45.314 [DEBUG] [Thread-176588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:54:45.314 [DEBUG] [Thread-176588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:54:45.324 [INFO] [Thread-176588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:54:45.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:54:46.126 [DEBUG] [Thread-176588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:54:46.126 [DEBUG] [Thread-176588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:54:46.127 [DEBUG] [Thread-176588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:54:46.167 [DEBUG] [Thread-176588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:54:46.167 [DEBUG] [Thread-176588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:54:46.170 [DEBUG] [Thread-176588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:54:46.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:54:46.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:54:46.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:54:46.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:54:46.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:54:46.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:54:46.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:54:46.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:54:46.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:54:46.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.787615 -999.00  +12.00  12.15     97  +11.70 1 3 1 3 1     0    0 0.31 -1.12 ----- 12.2 12.2 296.2 13.0 13.4 -1.2 13.2 -0.2 12.9 -0.4 13.2 -0.5
2026-04-11T20:54:46.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:54:46.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:54:46.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.787615
2026-04-11T20:54:46.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:54:46.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:54:46.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:54:46.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:54:46.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:54:46.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:54:17', tmtdew=-0.004465, humidity=99.9922, cloud=0.0, wind=12.4225, temperature=12.0058, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:54:09.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:54:46.199 [DEBUG] [Thread-176588] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:54:46.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:54:46.293 [DEBUG] [Thread-176591] [transport.py] [_log()] starting thread (client mode): 0xae519c60
2026-04-11T20:54:46.293 [DEBUG] [Thread-176591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:54:46.307 [DEBUG] [Thread-176591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:54:46.307 [INFO] [Thread-176591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] client lang: <none>
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] server lang: <none>
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] kex follows: False
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:54:46.315 [DEBUG] [Thread-176591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:54:46.316 [DEBUG] [Thread-176591] [transport.py] [_log()] Compression: none
2026-04-11T20:54:46.316 [DEBUG] [Thread-176591] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:54:46.372 [DEBUG] [Thread-176591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:54:46.372 [DEBUG] [Thread-176591] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:54:46.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:54:46.373 [DEBUG] [Thread-176591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:54:46.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:54:46.428 [DEBUG] [Thread-176591] [transport.py] [_log()] userauth is OK
2026-04-11T20:54:46.428 [DEBUG] [Thread-176591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:54:46.428 [DEBUG] [Thread-176591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:54:46.429 [DEBUG] [Thread-176591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:54:46.429 [DEBUG] [Thread-176591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:54:46.447 [INFO] [Thread-176591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:54:46.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:54:46.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:54:47.298 [DEBUG] [Thread-176591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:54:47.299 [DEBUG] [Thread-176591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:54:47.346 [DEBUG] [Thread-176591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:54:47.346 [DEBUG] [Thread-176591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:54:47.356 [DEBUG] [Thread-176591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:54:47.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:54:47.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-04-11T20:54:47.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-04-11T20:54:47.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:54:47.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:54:47.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:54:47.392 [DEBUG] [Thread-176591] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:54:48.154 [DEBUG] [Thread-176593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:03.202 [DEBUG] [Thread-176594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:55:17.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:55:17.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-04-11T20:55:18.235 [DEBUG] [Thread-176595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 54, 52), -0.01392, 100.017, 0.0, 13.7628, 12.3783, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:55:18.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:54:52
2026-04-11T20:55:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:55:19.205 [DEBUG] [Thread-176596] [transport.py] [_log()] starting thread (client mode): 0xae50bf40
2026-04-11T20:55:19.205 [DEBUG] [Thread-176596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:55:19.225 [DEBUG] [Thread-176596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:55:19.225 [INFO] [Thread-176596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:55:19.228 [DEBUG] [Thread-176596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:55:19.228 [DEBUG] [Thread-176596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:55:19.228 [DEBUG] [Thread-176596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:55:19.228 [DEBUG] [Thread-176596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] client lang: <none>
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] server lang: <none>
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] kex follows: False
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:55:19.229 [DEBUG] [Thread-176596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:55:19.230 [DEBUG] [Thread-176596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:55:19.230 [DEBUG] [Thread-176596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:55:19.230 [DEBUG] [Thread-176596] [transport.py] [_log()] Compression: none
2026-04-11T20:55:19.230 [DEBUG] [Thread-176596] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:55:19.249 [DEBUG] [Thread-176596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:55:19.250 [DEBUG] [Thread-176596] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:55:19.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:55:19.252 [DEBUG] [Thread-176596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:55:19.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:55:19.254 [DEBUG] [Thread-176596] [transport.py] [_log()] userauth is OK
2026-04-11T20:55:19.254 [DEBUG] [Thread-176596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:55:19.254 [DEBUG] [Thread-176596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:55:19.255 [DEBUG] [Thread-176596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:55:19.255 [DEBUG] [Thread-176596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:55:19.275 [INFO] [Thread-176596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:55:19.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:55:20.576 [DEBUG] [Thread-176596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:55:20.576 [DEBUG] [Thread-176596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:55:20.576 [DEBUG] [Thread-176596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:55:20.617 [DEBUG] [Thread-176596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:55:20.617 [DEBUG] [Thread-176596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:55:20.620 [DEBUG] [Thread-176596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:55:20.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:55:20.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:55:20.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:55:20.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:55:20.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:55:20.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:55:20.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:55:20.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:55:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:55:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.787963 -999.00  +12.00   9.70     97  +11.60 1 3 1 3 1     0    0 0.31 -1.03 ----- 9.7 9.7 282.2 13.0 13.4 -1.5 13.2 -0.4 12.8 -0.8 13.2 -0.6
2026-04-11T20:55:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:55:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:55:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.787963
2026-04-11T20:55:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:55:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:55:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:55:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:55:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:55:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:54:52', tmtdew=-0.01392, humidity=100.017, cloud=0.0, wind=13.7628, temperature=12.3783, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:54:40.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:55:20.651 [DEBUG] [Thread-176596] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:55:20.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:55:20.744 [DEBUG] [Thread-176599] [transport.py] [_log()] starting thread (client mode): 0xae508850
2026-04-11T20:55:20.745 [DEBUG] [Thread-176599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:55:20.759 [DEBUG] [Thread-176599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:55:20.759 [INFO] [Thread-176599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:55:20.766 [DEBUG] [Thread-176599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] client lang: <none>
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] server lang: <none>
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] kex follows: False
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] Compression: none
2026-04-11T20:55:20.767 [DEBUG] [Thread-176599] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:55:20.823 [DEBUG] [Thread-176599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:55:20.824 [DEBUG] [Thread-176599] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:55:20.824 [DEBUG] [Thread-176599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:55:20.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:55:20.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:55:20.880 [DEBUG] [Thread-176599] [transport.py] [_log()] userauth is OK
2026-04-11T20:55:20.880 [DEBUG] [Thread-176599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:55:20.880 [DEBUG] [Thread-176599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:55:20.880 [DEBUG] [Thread-176599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:55:20.880 [DEBUG] [Thread-176599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:55:20.903 [INFO] [Thread-176599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:55:20.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:55:20.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:55:21.714 [DEBUG] [Thread-176599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:55:21.715 [DEBUG] [Thread-176599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:55:21.767 [DEBUG] [Thread-176599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:55:21.767 [DEBUG] [Thread-176599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:55:21.782 [DEBUG] [Thread-176599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:55:21.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:55:21.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-04-11T20:55:21.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-04-11T20:55:21.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:55:21.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:55:21.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:55:21.836 [DEBUG] [Thread-176599] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:55:21.858 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:21.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:32.075 [DEBUG] [Thread-176601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:33.270 [DEBUG] [Thread-176602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:48.312 [DEBUG] [Thread-176603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:55:51.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:55:51.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:55:51.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:55:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 55, 27), 0.0405, 100.025, 0.0, 12.4931, 12.0057, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:55:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:55:27
2026-04-11T20:55:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:55:53.694 [DEBUG] [Thread-176604] [transport.py] [_log()] starting thread (client mode): 0xae519f00
2026-04-11T20:55:53.694 [DEBUG] [Thread-176604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:55:53.715 [DEBUG] [Thread-176604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:55:53.715 [INFO] [Thread-176604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:55:53.718 [DEBUG] [Thread-176604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] client lang: <none>
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] server lang: <none>
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] kex follows: False
2026-04-11T20:55:53.719 [DEBUG] [Thread-176604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:55:53.720 [DEBUG] [Thread-176604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:55:53.720 [DEBUG] [Thread-176604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:55:53.720 [DEBUG] [Thread-176604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:55:53.720 [DEBUG] [Thread-176604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:55:53.720 [DEBUG] [Thread-176604] [transport.py] [_log()] Compression: none
2026-04-11T20:55:53.720 [DEBUG] [Thread-176604] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:55:53.738 [DEBUG] [Thread-176604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:55:53.739 [DEBUG] [Thread-176604] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:55:53.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:55:53.741 [DEBUG] [Thread-176604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:55:53.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:55:53.742 [DEBUG] [Thread-176604] [transport.py] [_log()] userauth is OK
2026-04-11T20:55:53.743 [DEBUG] [Thread-176604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:55:53.743 [DEBUG] [Thread-176604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:55:53.743 [DEBUG] [Thread-176604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:55:53.743 [DEBUG] [Thread-176604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:55:53.757 [INFO] [Thread-176604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:55:53.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:55:54.532 [DEBUG] [Thread-176604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:55:54.532 [DEBUG] [Thread-176604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:55:54.532 [DEBUG] [Thread-176604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:55:54.573 [DEBUG] [Thread-176604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:55:54.573 [DEBUG] [Thread-176604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:55:54.576 [DEBUG] [Thread-176604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:55:54.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:55:54.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:55:54.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:55:54.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:55:54.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:55:54.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:55:54.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:55:54.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:55:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:55:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.788310 -999.00  +12.00   8.07     97  +11.70 1 3 1 3 1     0    0 0.31 -0.79 ----- 8.1 8.1 296.4 11.1 13.3 -1.3 13.2 -0.5 12.8 -0.4 13.2 -0.6
2026-04-11T20:55:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:55:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:55:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.788310
2026-04-11T20:55:54.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:55:54.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:55:54.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:55:54.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:55:54.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:55:54.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:55:27', tmtdew=0.0405, humidity=100.025, cloud=0.0, wind=12.4931, temperature=12.0057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:55:09.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:55:54.601 [DEBUG] [Thread-176604] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:55:54.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:55:54.694 [DEBUG] [Thread-176607] [transport.py] [_log()] starting thread (client mode): 0xb0f8e0e0
2026-04-11T20:55:54.694 [DEBUG] [Thread-176607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:55:54.709 [DEBUG] [Thread-176607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:55:54.709 [INFO] [Thread-176607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:54.717 [DEBUG] [Thread-176607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] client lang: <none>
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] server lang: <none>
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] kex follows: False
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:55:54.718 [DEBUG] [Thread-176607] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:55:54.719 [DEBUG] [Thread-176607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:55:54.719 [DEBUG] [Thread-176607] [transport.py] [_log()] Compression: none
2026-04-11T20:55:54.719 [DEBUG] [Thread-176607] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:55:54.776 [DEBUG] [Thread-176607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:55:54.777 [DEBUG] [Thread-176607] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:55:54.778 [DEBUG] [Thread-176607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:55:54.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:55:54.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:55:54.836 [DEBUG] [Thread-176607] [transport.py] [_log()] userauth is OK
2026-04-11T20:55:54.836 [DEBUG] [Thread-176607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:55:54.836 [DEBUG] [Thread-176607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:55:54.837 [DEBUG] [Thread-176607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:55:54.837 [DEBUG] [Thread-176607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:55:54.859 [INFO] [Thread-176607] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:55:54.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:55:54.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:55:55.691 [DEBUG] [Thread-176607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:55:55.691 [DEBUG] [Thread-176607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:55:55.739 [DEBUG] [Thread-176607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:55:55.739 [DEBUG] [Thread-176607] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:55:55.748 [DEBUG] [Thread-176607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:55:55.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:55:55.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-04-11T20:55:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:55:55.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:55:55.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:55:55.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:55:55.785 [DEBUG] [Thread-176607] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:56:03.350 [DEBUG] [Thread-176609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:18.392 [DEBUG] [Thread-176610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:22.062 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:22.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:25.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:56:25.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:56:25.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-04-11T20:56:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 56, 3), 0.048075, 99.9756, 0.0, 12.7048, 12.0057, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:56:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:56:03
2026-04-11T20:56:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:56:27.610 [DEBUG] [Thread-176611] [transport.py] [_log()] starting thread (client mode): 0xa7951ae0
2026-04-11T20:56:27.610 [DEBUG] [Thread-176611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:56:27.629 [DEBUG] [Thread-176611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:56:27.629 [INFO] [Thread-176611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:56:27.630 [DEBUG] [Thread-176611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:56:27.630 [DEBUG] [Thread-176611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] client lang: <none>
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] server lang: <none>
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] kex follows: False
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] Compression: none
2026-04-11T20:56:27.631 [DEBUG] [Thread-176611] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:56:27.642 [DEBUG] [Thread-176611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:56:27.643 [DEBUG] [Thread-176611] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:56:27.643 [DEBUG] [Thread-176611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:56:27.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:56:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:56:27.644 [DEBUG] [Thread-176611] [transport.py] [_log()] userauth is OK
2026-04-11T20:56:27.645 [DEBUG] [Thread-176611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:56:27.645 [DEBUG] [Thread-176611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:56:27.645 [DEBUG] [Thread-176611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:56:27.645 [DEBUG] [Thread-176611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:56:27.663 [INFO] [Thread-176611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:56:27.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:56:28.439 [DEBUG] [Thread-176611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:56:28.439 [DEBUG] [Thread-176611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:56:28.439 [DEBUG] [Thread-176611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:56:28.480 [DEBUG] [Thread-176611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:56:28.481 [DEBUG] [Thread-176611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:56:28.484 [DEBUG] [Thread-176611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:56:28.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:56:28.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:56:28.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:56:28.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:56:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:56:28.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:56:28.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:56:28.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:56:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:56:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.788658 -999.00  +12.00  12.42     97  +11.70 1 3 1 3 1     0    0 0.31 -0.91 ----- 12.4 12.4 286.0 14.2 13.4 -1.5 13.2 -0.4 12.8 -0.9 13.2 -0.6
2026-04-11T20:56:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:56:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:56:28.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.788658
2026-04-11T20:56:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:56:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:56:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:56:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:56:28.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:56:28.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:56:03', tmtdew=0.048075, humidity=99.9756, cloud=0.0, wind=12.7048, temperature=12.0057, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:55:40.051', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:56:28.510 [DEBUG] [Thread-176611] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:56:28.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:56:28.602 [DEBUG] [Thread-176614] [transport.py] [_log()] starting thread (client mode): 0xa7951c00
2026-04-11T20:56:28.602 [DEBUG] [Thread-176614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:56:28.622 [DEBUG] [Thread-176614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:56:28.622 [INFO] [Thread-176614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:56:28.630 [DEBUG] [Thread-176614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:56:28.630 [DEBUG] [Thread-176614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] client lang: <none>
2026-04-11T20:56:28.631 [DEBUG] [Thread-176614] [transport.py] [_log()] server lang: <none>
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] kex follows: False
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] Compression: none
2026-04-11T20:56:28.632 [DEBUG] [Thread-176614] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:56:28.687 [DEBUG] [Thread-176614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:56:28.688 [DEBUG] [Thread-176614] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:56:28.688 [DEBUG] [Thread-176614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:56:28.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:56:28.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:56:28.744 [DEBUG] [Thread-176614] [transport.py] [_log()] userauth is OK
2026-04-11T20:56:28.744 [DEBUG] [Thread-176614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:56:28.744 [DEBUG] [Thread-176614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:56:28.744 [DEBUG] [Thread-176614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:56:28.744 [DEBUG] [Thread-176614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:56:28.768 [INFO] [Thread-176614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:56:28.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:56:28.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:56:29.608 [DEBUG] [Thread-176614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:56:29.608 [DEBUG] [Thread-176614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:56:29.659 [DEBUG] [Thread-176614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:56:29.659 [DEBUG] [Thread-176614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:56:29.670 [DEBUG] [Thread-176614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:56:29.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:56:29.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:56:29.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:56:29.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:56:29.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:56:29.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:56:29.709 [DEBUG] [Thread-176614] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:56:32.129 [DEBUG] [Thread-176616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:33.433 [DEBUG] [Thread-176617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:48.480 [DEBUG] [Thread-176618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:56:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:56:59.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:56:59.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-04-11T20:57:01.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 56, 38), -0.00367, 99.9509, 0.0, 14.2214, 12.2455, 2, 2, 0, 2, 0, 0),)
2026-04-11T20:57:01.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:56:38
2026-04-11T20:57:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:57:01.585 [DEBUG] [Thread-176619] [transport.py] [_log()] starting thread (client mode): 0xb0f8f760
2026-04-11T20:57:01.585 [DEBUG] [Thread-176619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:57:01.605 [DEBUG] [Thread-176619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:57:01.606 [INFO] [Thread-176619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:57:01.609 [DEBUG] [Thread-176619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] client lang: <none>
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] server lang: <none>
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] kex follows: False
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] Compression: none
2026-04-11T20:57:01.610 [DEBUG] [Thread-176619] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:57:01.621 [DEBUG] [Thread-176619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:57:01.621 [DEBUG] [Thread-176619] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:57:01.622 [DEBUG] [Thread-176619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:57:01.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:57:01.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:57:01.624 [DEBUG] [Thread-176619] [transport.py] [_log()] userauth is OK
2026-04-11T20:57:01.625 [DEBUG] [Thread-176619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:57:01.625 [DEBUG] [Thread-176619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:57:01.625 [DEBUG] [Thread-176619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:57:01.625 [DEBUG] [Thread-176619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:57:01.643 [INFO] [Thread-176619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:57:01.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:57:02.393 [DEBUG] [Thread-176619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:57:02.393 [DEBUG] [Thread-176619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:57:02.394 [DEBUG] [Thread-176619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:57:02.434 [DEBUG] [Thread-176619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:57:02.434 [DEBUG] [Thread-176619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:57:02.438 [DEBUG] [Thread-176619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:57:02.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:57:02.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:57:02.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:57:02.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:57:02.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:57:02.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:57:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:57:02.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:57:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:57:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.789005 -999.00  +12.00   9.68     97  +11.60 1 3 1 3 1     0    0 0.30 -1.06 ----- 9.7 9.7 296.2 14.2 13.4 -1.4 13.2 -0.4 12.8 -0.6 13.2 -0.6
2026-04-11T20:57:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:57:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:57:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.789005
2026-04-11T20:57:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:57:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:57:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:57:02.465 [DEBUG] [Thread-176619] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:57:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:57:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:57:02.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:56:38', tmtdew=-0.00367, humidity=99.9509, cloud=0.0, wind=14.2214, temperature=12.2455, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:56:10.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:57:02.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:57:02.559 [DEBUG] [Thread-176622] [transport.py] [_log()] starting thread (client mode): 0xb0fcd870
2026-04-11T20:57:02.559 [DEBUG] [Thread-176622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:57:02.574 [DEBUG] [Thread-176622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:57:02.574 [INFO] [Thread-176622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] client lang: <none>
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] server lang: <none>
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] kex follows: False
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:57:02.582 [DEBUG] [Thread-176622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:57:02.583 [DEBUG] [Thread-176622] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:57:02.583 [DEBUG] [Thread-176622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:57:02.583 [DEBUG] [Thread-176622] [transport.py] [_log()] Compression: none
2026-04-11T20:57:02.583 [DEBUG] [Thread-176622] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:57:02.644 [DEBUG] [Thread-176622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:57:02.644 [DEBUG] [Thread-176622] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:57:02.645 [DEBUG] [Thread-176622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:57:02.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:57:02.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:57:02.705 [DEBUG] [Thread-176622] [transport.py] [_log()] userauth is OK
2026-04-11T20:57:02.705 [DEBUG] [Thread-176622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:57:02.705 [DEBUG] [Thread-176622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:57:02.705 [DEBUG] [Thread-176622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:57:02.706 [DEBUG] [Thread-176622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:57:02.728 [INFO] [Thread-176622] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:57:02.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:57:02.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:57:03.516 [DEBUG] [Thread-176624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:57:03.607 [DEBUG] [Thread-176622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:57:03.607 [DEBUG] [Thread-176622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:57:03.655 [DEBUG] [Thread-176622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:57:03.655 [DEBUG] [Thread-176622] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:57:03.666 [DEBUG] [Thread-176622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:57:03.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:57:03.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:57: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-04-11T20:57:03.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:57:03.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:57:03.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:57:03.703 [DEBUG] [Thread-176622] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:57:18.579 [DEBUG] [Thread-176625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:57:22.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:57:22.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:57:32.199 [DEBUG] [Thread-176626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:57:33.618 [DEBUG] [Thread-176627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:57:33.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:57:33.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:57:33.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-04-11T20:57:34.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 57, 14), 0.043, 100.009, 0.0, 12.1226, 11.9893, 2, 2, 0, 2, 0, 0),)
2026-04-11T20:57:34.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:57:14
2026-04-11T20:57:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:57:35.515 [DEBUG] [Thread-176628] [transport.py] [_log()] starting thread (client mode): 0xae51bf10
2026-04-11T20:57:35.515 [DEBUG] [Thread-176628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:57:35.535 [DEBUG] [Thread-176628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:57:35.535 [INFO] [Thread-176628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:57:35.538 [DEBUG] [Thread-176628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] client lang: <none>
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] server lang: <none>
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] kex follows: False
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:57:35.539 [DEBUG] [Thread-176628] [transport.py] [_log()] Compression: none
2026-04-11T20:57:35.540 [DEBUG] [Thread-176628] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:57:35.559 [DEBUG] [Thread-176628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:57:35.560 [DEBUG] [Thread-176628] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:57:35.560 [DEBUG] [Thread-176628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:57:35.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:57:35.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:57:35.605 [DEBUG] [Thread-176628] [transport.py] [_log()] userauth is OK
2026-04-11T20:57:35.605 [DEBUG] [Thread-176628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:57:35.605 [DEBUG] [Thread-176628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:57:35.605 [DEBUG] [Thread-176628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:57:35.605 [DEBUG] [Thread-176628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:57:35.626 [INFO] [Thread-176628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:57:35.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:57:36.440 [DEBUG] [Thread-176628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:57:36.441 [DEBUG] [Thread-176628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:57:36.441 [DEBUG] [Thread-176628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:57:36.481 [DEBUG] [Thread-176628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:57:36.482 [DEBUG] [Thread-176628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:57:36.484 [DEBUG] [Thread-176628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:57:36.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:57:36.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:57:36.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:57:36.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:57:36.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:57:36.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:57:36.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.789352 -999.00  +12.00  11.30     97  +11.60 1 3 1 3 1     0    0 0.32 -0.57 ----- 11.3 11.3 296.4 13.7 13.4 -1.2 13.1 -0.4 12.8 -0.2 13.2 -0.6
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.789352
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:57:36.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:57:14', tmtdew=0.043, humidity=100.009, cloud=0.0, wind=12.1226, temperature=11.9893, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:56:40.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:57:36.504 [DEBUG] [Thread-176628] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:57:36.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:57:36.592 [DEBUG] [Thread-176631] [transport.py] [_log()] starting thread (client mode): 0xae508850
2026-04-11T20:57:36.593 [DEBUG] [Thread-176631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:57:36.608 [DEBUG] [Thread-176631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:57:36.608 [INFO] [Thread-176631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] client lang: <none>
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] server lang: <none>
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] kex follows: False
2026-04-11T20:57:36.615 [DEBUG] [Thread-176631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:57:36.616 [DEBUG] [Thread-176631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:57:36.616 [DEBUG] [Thread-176631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:57:36.616 [DEBUG] [Thread-176631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:57:36.616 [DEBUG] [Thread-176631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:57:36.616 [DEBUG] [Thread-176631] [transport.py] [_log()] Compression: none
2026-04-11T20:57:36.616 [DEBUG] [Thread-176631] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:57:36.675 [DEBUG] [Thread-176631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:57:36.675 [DEBUG] [Thread-176631] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:57:36.676 [DEBUG] [Thread-176631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:57:36.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:57:36.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:57:36.732 [DEBUG] [Thread-176631] [transport.py] [_log()] userauth is OK
2026-04-11T20:57:36.732 [DEBUG] [Thread-176631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:57:36.732 [DEBUG] [Thread-176631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:57:36.733 [DEBUG] [Thread-176631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:57:36.733 [DEBUG] [Thread-176631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:57:36.752 [INFO] [Thread-176631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:57:36.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:57:36.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:57:37.583 [DEBUG] [Thread-176631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:57:37.584 [DEBUG] [Thread-176631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:57:37.632 [DEBUG] [Thread-176631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:57:37.633 [DEBUG] [Thread-176631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:57:37.641 [DEBUG] [Thread-176631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:57:37.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:57:37.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-04-11T20:57:37.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T20:57:37.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:57:37.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:57:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:57:37.678 [DEBUG] [Thread-176631] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:57:48.656 [DEBUG] [Thread-176633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:03.716 [DEBUG] [Thread-176634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:58:07.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:58:07.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-04-11T20:58:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 57, 49), -0.00895, 99.9848, 0.0, 15.1034, 12.3786, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:58:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:57:49
2026-04-11T20:58:09.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:58:09.491 [DEBUG] [Thread-176635] [transport.py] [_log()] starting thread (client mode): 0xae5f2290
2026-04-11T20:58:09.492 [DEBUG] [Thread-176635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:58:09.512 [DEBUG] [Thread-176635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:58:09.512 [INFO] [Thread-176635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:58:09.516 [DEBUG] [Thread-176635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] client lang: <none>
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] server lang: <none>
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] kex follows: False
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] Compression: none
2026-04-11T20:58:09.517 [DEBUG] [Thread-176635] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:58:09.534 [DEBUG] [Thread-176635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:58:09.535 [DEBUG] [Thread-176635] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:58:09.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:58:09.536 [DEBUG] [Thread-176635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:58:09.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:58:09.538 [DEBUG] [Thread-176635] [transport.py] [_log()] userauth is OK
2026-04-11T20:58:09.538 [DEBUG] [Thread-176635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:58:09.538 [DEBUG] [Thread-176635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:58:09.538 [DEBUG] [Thread-176635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:58:09.539 [DEBUG] [Thread-176635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:58:09.562 [INFO] [Thread-176635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:58:09.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:58:10.333 [DEBUG] [Thread-176635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:58:10.334 [DEBUG] [Thread-176635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:58:10.334 [DEBUG] [Thread-176635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:58:10.374 [DEBUG] [Thread-176635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:58:10.374 [DEBUG] [Thread-176635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:58:10.377 [DEBUG] [Thread-176635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:58:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:58:10.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:58:10.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:58:10.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:58:10.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:58:10.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:58:10.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:58:10.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:58:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:58:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.789699 -999.00  +12.00  10.38     97  +11.60 1 3 1 3 1     0    0 0.33 -0.13 ----- 10.4 10.4 297.0 13.6 13.4 -1.1 13.2 -0.4 12.8 -0.8 13.2 -0.5
2026-04-11T20:58:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:58:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:58:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.789699
2026-04-11T20:58:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:58:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:58:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:58:10.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:58:10.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:58:10.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:57:49', tmtdew=-0.00895, humidity=99.9848, cloud=0.0, wind=15.1034, temperature=12.3786, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:57:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:58:10.400 [DEBUG] [Thread-176635] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:58:10.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:58:10.492 [DEBUG] [Thread-176638] [transport.py] [_log()] starting thread (client mode): 0xae519420
2026-04-11T20:58:10.492 [DEBUG] [Thread-176638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:58:10.506 [DEBUG] [Thread-176638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:58:10.506 [INFO] [Thread-176638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:58:10.514 [DEBUG] [Thread-176638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:58:10.514 [DEBUG] [Thread-176638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:58:10.514 [DEBUG] [Thread-176638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] client lang: <none>
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] server lang: <none>
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] kex follows: False
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] Compression: none
2026-04-11T20:58:10.515 [DEBUG] [Thread-176638] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:58:10.572 [DEBUG] [Thread-176638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:58:10.573 [DEBUG] [Thread-176638] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:58:10.573 [DEBUG] [Thread-176638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:58:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:58:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:58:10.629 [DEBUG] [Thread-176638] [transport.py] [_log()] userauth is OK
2026-04-11T20:58:10.630 [DEBUG] [Thread-176638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:58:10.630 [DEBUG] [Thread-176638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:58:10.630 [DEBUG] [Thread-176638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:58:10.630 [DEBUG] [Thread-176638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:58:10.651 [INFO] [Thread-176638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:58:10.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:58:10.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:58:11.464 [DEBUG] [Thread-176638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:58:11.464 [DEBUG] [Thread-176638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:58:11.512 [DEBUG] [Thread-176638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:58:11.512 [DEBUG] [Thread-176638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:58:11.522 [DEBUG] [Thread-176638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:58:11.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:58:11.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-04-11T20:58:11.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-04-11T20:58:11.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:58:11.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:58:11.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:58:11.559 [DEBUG] [Thread-176638] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:58:18.755 [DEBUG] [Thread-176640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:22.473 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:22.475 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:32.274 [DEBUG] [Thread-176641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:33.809 [DEBUG] [Thread-176642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:58:41.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:58:41.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:58:41.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T20:58:42.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 58, 24), 0.045565, 99.9922, 0.0, 14.6106, 11.9226, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:58:42.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:58:24
2026-04-11T20:58:43.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:58:43.385 [DEBUG] [Thread-176643] [transport.py] [_log()] starting thread (client mode): 0xae5f2380
2026-04-11T20:58:43.385 [DEBUG] [Thread-176643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:58:43.406 [DEBUG] [Thread-176643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:58:43.406 [INFO] [Thread-176643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:58:43.409 [DEBUG] [Thread-176643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:58:43.409 [DEBUG] [Thread-176643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:58:43.409 [DEBUG] [Thread-176643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:58:43.409 [DEBUG] [Thread-176643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] client lang: <none>
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] server lang: <none>
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] kex follows: False
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] Compression: none
2026-04-11T20:58:43.410 [DEBUG] [Thread-176643] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:58:43.430 [DEBUG] [Thread-176643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:58:43.431 [DEBUG] [Thread-176643] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:58:43.431 [DEBUG] [Thread-176643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:58:43.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:58:43.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:58:43.433 [DEBUG] [Thread-176643] [transport.py] [_log()] userauth is OK
2026-04-11T20:58:43.434 [DEBUG] [Thread-176643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:58:43.434 [DEBUG] [Thread-176643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:58:43.434 [DEBUG] [Thread-176643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:58:43.434 [DEBUG] [Thread-176643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:58:43.459 [INFO] [Thread-176643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:58:43.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:58:44.261 [DEBUG] [Thread-176643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:58:44.262 [DEBUG] [Thread-176643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:58:44.262 [DEBUG] [Thread-176643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:58:44.303 [DEBUG] [Thread-176643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:58:44.303 [DEBUG] [Thread-176643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:58:44.307 [DEBUG] [Thread-176643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:58:44.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:58:44.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:58:44.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:58:44.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:58:44.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:58:44.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:58:44.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:58:44.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:58:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:58:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.790047 -999.00  +12.00  10.36     97  +11.70 1 3 1 3 1     0    0 0.33 -0.10 ----- 10.4 10.4 301.2 11.8 13.4 -1.2 13.2 -0.4 12.8 -0.3 13.2 -0.6
2026-04-11T20:58:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:58:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:58:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.790047
2026-04-11T20:58:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:58:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:58:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:58:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:58:44.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:58:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:58:24', tmtdew=0.045565, humidity=99.9922, cloud=0.0, wind=14.6106, temperature=11.9226, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:57:40.061', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:58:44.333 [DEBUG] [Thread-176643] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:58:44.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:58:44.438 [DEBUG] [Thread-176646] [transport.py] [_log()] starting thread (client mode): 0xae50b640
2026-04-11T20:58:44.439 [DEBUG] [Thread-176646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:58:44.457 [DEBUG] [Thread-176646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:58:44.458 [INFO] [Thread-176646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] client lang: <none>
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] server lang: <none>
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] kex follows: False
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:58:44.466 [DEBUG] [Thread-176646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:58:44.467 [DEBUG] [Thread-176646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:58:44.467 [DEBUG] [Thread-176646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:58:44.467 [DEBUG] [Thread-176646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:58:44.467 [DEBUG] [Thread-176646] [transport.py] [_log()] Compression: none
2026-04-11T20:58:44.467 [DEBUG] [Thread-176646] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:58:44.523 [DEBUG] [Thread-176646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:58:44.524 [DEBUG] [Thread-176646] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:58:44.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:58:44.525 [DEBUG] [Thread-176646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:58:44.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:58:44.580 [DEBUG] [Thread-176646] [transport.py] [_log()] userauth is OK
2026-04-11T20:58:44.580 [DEBUG] [Thread-176646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:58:44.580 [DEBUG] [Thread-176646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:58:44.580 [DEBUG] [Thread-176646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:58:44.580 [DEBUG] [Thread-176646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:58:44.599 [INFO] [Thread-176646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:58:44.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:58:44.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:58:45.423 [DEBUG] [Thread-176646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:58:45.423 [DEBUG] [Thread-176646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:58:45.471 [DEBUG] [Thread-176646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:58:45.471 [DEBUG] [Thread-176646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:58:45.480 [DEBUG] [Thread-176646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:58:45.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:58:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:58:45.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-04-11T20:58:45.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:58:45.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:58:45.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:58:45.517 [DEBUG] [Thread-176646] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:58:48.848 [DEBUG] [Thread-176648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:03.905 [DEBUG] [Thread-176649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:15.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:59:15.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:59:15.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-04-11T20:59:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 58, 24), 0.045565, 99.9922, 0.0, 14.6106, 11.9226, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:59:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:58:24
2026-04-11T20:59:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:59:17.387 [DEBUG] [Thread-176650] [transport.py] [_log()] starting thread (client mode): 0xb0fcdff0
2026-04-11T20:59:17.387 [DEBUG] [Thread-176650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:59:17.412 [DEBUG] [Thread-176650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:59:17.412 [INFO] [Thread-176650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:59:17.416 [DEBUG] [Thread-176650] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:59:17.417 [DEBUG] [Thread-176650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:59:17.418 [DEBUG] [Thread-176650] [transport.py] [_log()] client lang: <none>
2026-04-11T20:59:17.418 [DEBUG] [Thread-176650] [transport.py] [_log()] server lang: <none>
2026-04-11T20:59:17.418 [DEBUG] [Thread-176650] [transport.py] [_log()] kex follows: False
2026-04-11T20:59:17.418 [DEBUG] [Thread-176650] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:59:17.418 [DEBUG] [Thread-176650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:59:17.418 [DEBUG] [Thread-176650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:59:17.419 [DEBUG] [Thread-176650] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:59:17.419 [DEBUG] [Thread-176650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:59:17.419 [DEBUG] [Thread-176650] [transport.py] [_log()] Compression: none
2026-04-11T20:59:17.419 [DEBUG] [Thread-176650] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:59:17.439 [DEBUG] [Thread-176650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:59:17.439 [DEBUG] [Thread-176650] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:59:17.440 [DEBUG] [Thread-176650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:59:17.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:59:17.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:59:17.442 [DEBUG] [Thread-176650] [transport.py] [_log()] userauth is OK
2026-04-11T20:59:17.442 [DEBUG] [Thread-176650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:59:17.442 [DEBUG] [Thread-176650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:59:17.442 [DEBUG] [Thread-176650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:59:17.442 [DEBUG] [Thread-176650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:59:17.466 [INFO] [Thread-176650] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:59:17.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:59:18.233 [DEBUG] [Thread-176650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:59:18.233 [DEBUG] [Thread-176650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:59:18.234 [DEBUG] [Thread-176650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:59:18.274 [DEBUG] [Thread-176650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:59:18.274 [DEBUG] [Thread-176650] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:59:18.277 [DEBUG] [Thread-176650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:59:18.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:59:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:59:18.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:59:18.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:59:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:59:18.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:59:18.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:59:18.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:59:18.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:59:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.790741 -999.00  +12.00  12.09     97  +11.60 1 3 1 3 1     0    0 0.32 -0.35 ----- 12.1 12.1 285.6 15.9 13.3 -1.6 13.2 -0.4 12.7 -1.1 13.2 -0.6
2026-04-11T20:59:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:59:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:59:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.790741
2026-04-11T20:59:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:59:18.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:59:18.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:59:18.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:59:18.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:59:18.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:58:24', tmtdew=0.045565, humidity=99.9922, cloud=0.0, wind=14.6106, temperature=11.9226, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:58:40.022', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:59:18.304 [DEBUG] [Thread-176650] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:59:18.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:59:18.406 [DEBUG] [Thread-176653] [transport.py] [_log()] starting thread (client mode): 0xae5172e0
2026-04-11T20:59:18.406 [DEBUG] [Thread-176653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:59:18.420 [DEBUG] [Thread-176653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:59:18.420 [INFO] [Thread-176653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:59:18.428 [DEBUG] [Thread-176653] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:59:18.428 [DEBUG] [Thread-176653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:59:18.428 [DEBUG] [Thread-176653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:59:18.428 [DEBUG] [Thread-176653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:18.428 [DEBUG] [Thread-176653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] client lang: <none>
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] server lang: <none>
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] kex follows: False
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] Compression: none
2026-04-11T20:59:18.429 [DEBUG] [Thread-176653] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:59:18.486 [DEBUG] [Thread-176653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:59:18.486 [DEBUG] [Thread-176653] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:59:18.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:59:18.488 [DEBUG] [Thread-176653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:59:18.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:59:18.545 [DEBUG] [Thread-176653] [transport.py] [_log()] userauth is OK
2026-04-11T20:59:18.545 [DEBUG] [Thread-176653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:59:18.546 [DEBUG] [Thread-176653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:59:18.546 [DEBUG] [Thread-176653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:59:18.546 [DEBUG] [Thread-176653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:59:18.570 [INFO] [Thread-176653] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:59:18.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:59:18.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:59:18.944 [DEBUG] [Thread-176655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:19.401 [DEBUG] [Thread-176653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:59:19.401 [DEBUG] [Thread-176653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:59:19.449 [DEBUG] [Thread-176653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:59:19.450 [DEBUG] [Thread-176653] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:59:19.459 [DEBUG] [Thread-176653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:59:19.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:59:19.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T20:59:19.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-04-11T20:59:19.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:59:19.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:59:19.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:59:19.497 [DEBUG] [Thread-176653] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:59:22.681 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:22.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:32.348 [DEBUG] [Thread-176656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:34.000 [DEBUG] [Thread-176657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:49.039 [DEBUG] [Thread-176658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T20:59:49.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T20:59:49.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T20:59:49.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-04-11T20:59:50.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 20, 59, 35), -0.0089, 99.9851, 0.0, 16.1618, 12.2793, 2, 2, 2, 2, 0, 0),)
2026-04-11T20:59:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 20:59:35
2026-04-11T20:59:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T20:59:51.300 [DEBUG] [Thread-176659] [transport.py] [_log()] starting thread (client mode): 0xb0fcd180
2026-04-11T20:59:51.300 [DEBUG] [Thread-176659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:59:51.321 [DEBUG] [Thread-176659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T20:59:51.321 [INFO] [Thread-176659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] client lang: <none>
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] server lang: <none>
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] kex follows: False
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:59:51.323 [DEBUG] [Thread-176659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:59:51.324 [DEBUG] [Thread-176659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:59:51.324 [DEBUG] [Thread-176659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:59:51.324 [DEBUG] [Thread-176659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:59:51.324 [DEBUG] [Thread-176659] [transport.py] [_log()] Compression: none
2026-04-11T20:59:51.324 [DEBUG] [Thread-176659] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:59:51.332 [DEBUG] [Thread-176659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:59:51.333 [DEBUG] [Thread-176659] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:59:51.333 [DEBUG] [Thread-176659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T20:59:51.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T20:59:51.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:59:51.335 [DEBUG] [Thread-176659] [transport.py] [_log()] userauth is OK
2026-04-11T20:59:51.335 [DEBUG] [Thread-176659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:59:51.335 [DEBUG] [Thread-176659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:59:51.335 [DEBUG] [Thread-176659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T20:59:51.335 [DEBUG] [Thread-176659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:59:51.353 [INFO] [Thread-176659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:59:51.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:59:51.941 [DEBUG] [Thread-176659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:59:51.941 [DEBUG] [Thread-176659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:59:51.941 [DEBUG] [Thread-176659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T20:59:51.982 [DEBUG] [Thread-176659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:59:51.982 [DEBUG] [Thread-176659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:59:51.986 [DEBUG] [Thread-176659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:59:51.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:59:52.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T20:59:52.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T20:59:52.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T20:59:52.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:59:52.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T20:59:52.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:59:52.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:59:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T20:59:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.791435 -999.00  +11.90  13.92     97  +11.50 1 3 1 3 1     0    0 0.36 0.31 ----- 13.9 13.9 283.6 15.3 13.2 -1.7 13.2 -0.4 12.7 -0.8 13.2 -0.5
2026-04-11T20:59:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T20:59:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T20:59:52.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.791435
2026-04-11T20:59:52.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T20:59:52.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T20:59:52.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T20:59:52.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T20:59:52.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T20:59:52.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T20:59:35', tmtdew=-0.0089, humidity=99.9851, cloud=0.0, wind=16.1618, temperature=12.2793, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T18:59:39.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T20:59:52.015 [DEBUG] [Thread-176659] [transport.py] [_log()] EOF in transport thread
2026-04-11T20:59:52.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T20:59:52.108 [DEBUG] [Thread-176662] [transport.py] [_log()] starting thread (client mode): 0xa7952950
2026-04-11T20:59:52.108 [DEBUG] [Thread-176662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T20:59:52.127 [DEBUG] [Thread-176662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T20:59:52.127 [INFO] [Thread-176662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T20:59:52.134 [DEBUG] [Thread-176662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] client lang: <none>
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] server lang: <none>
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] kex follows: False
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T20:59:52.135 [DEBUG] [Thread-176662] [transport.py] [_log()] Compression: none
2026-04-11T20:59:52.136 [DEBUG] [Thread-176662] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T20:59:52.196 [DEBUG] [Thread-176662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T20:59:52.196 [DEBUG] [Thread-176662] [transport.py] [_log()] Switch to new keys ...
2026-04-11T20:59:52.197 [DEBUG] [Thread-176662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T20:59:52.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T20:59:52.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T20:59:52.255 [DEBUG] [Thread-176662] [transport.py] [_log()] userauth is OK
2026-04-11T20:59:52.255 [DEBUG] [Thread-176662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T20:59:52.255 [DEBUG] [Thread-176662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T20:59:52.255 [DEBUG] [Thread-176662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T20:59:52.255 [DEBUG] [Thread-176662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T20:59:52.272 [INFO] [Thread-176662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T20:59:52.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T20:59:52.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T20:59:53.099 [DEBUG] [Thread-176662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T20:59:53.100 [DEBUG] [Thread-176662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T20:59:53.147 [DEBUG] [Thread-176662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T20:59:53.148 [DEBUG] [Thread-176662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T20:59:53.156 [DEBUG] [Thread-176662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T20:59:53.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T20:59: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')
2026-04-11T20:59:53.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-04-11T20:59:53.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T20:59:53.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T20:59:53.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T20:59:53.190 [DEBUG] [Thread-176662] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:00:04.076 [DEBUG] [Thread-176664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:19.139 [DEBUG] [Thread-176665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:22.887 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:22.888 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:00:23.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:00:23.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:00:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 0, 11), 0.045535, 99.9925, 0.0, 14.4695, 11.8562, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:00:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:00:11
2026-04-11T21:00:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:00:25.034 [DEBUG] [Thread-176666] [transport.py] [_log()] starting thread (client mode): 0xb0fccdf0
2026-04-11T21:00:25.034 [DEBUG] [Thread-176666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:00:25.055 [DEBUG] [Thread-176666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:00:25.055 [INFO] [Thread-176666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:00:25.058 [DEBUG] [Thread-176666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] client lang: <none>
2026-04-11T21:00:25.059 [DEBUG] [Thread-176666] [transport.py] [_log()] server lang: <none>
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] kex follows: False
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] Compression: none
2026-04-11T21:00:25.060 [DEBUG] [Thread-176666] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:00:25.078 [DEBUG] [Thread-176666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:00:25.079 [DEBUG] [Thread-176666] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:00:25.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:00:25.080 [DEBUG] [Thread-176666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:00:25.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:00:25.082 [DEBUG] [Thread-176666] [transport.py] [_log()] userauth is OK
2026-04-11T21:00:25.082 [DEBUG] [Thread-176666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:00:25.082 [DEBUG] [Thread-176666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:00:25.083 [DEBUG] [Thread-176666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:00:25.083 [DEBUG] [Thread-176666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:00:25.102 [INFO] [Thread-176666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:00:25.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:00:25.655 [DEBUG] [Thread-176666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:00:25.655 [DEBUG] [Thread-176666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:00:25.656 [DEBUG] [Thread-176666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:00:25.696 [DEBUG] [Thread-176666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:00:25.696 [DEBUG] [Thread-176666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:00:25.700 [DEBUG] [Thread-176666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:00:25.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:00:25.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:00:25.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:00:25.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:00:25.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:00:25.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:00:25.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:00:25.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:00:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:00:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.791782 -999.00  +11.90  12.00     97  +11.50 1 3 1 3 1     0    0 0.36 0.49 ----- 12.0 12.0 288.8 15.3 13.2 -1.6 13.1 -0.4 12.7 -0.6 13.1 -0.7
2026-04-11T21:00:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:00:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:00:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.791782
2026-04-11T21:00:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:00:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:00:25.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:00:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:00:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:00:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:00:11', tmtdew=0.045535, humidity=99.9925, cloud=0.0, wind=14.4695, temperature=11.8562, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:00:09.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:00:25.732 [DEBUG] [Thread-176666] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:00:25.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:00:25.826 [DEBUG] [Thread-176669] [transport.py] [_log()] starting thread (client mode): 0xae519ed0
2026-04-11T21:00:25.826 [DEBUG] [Thread-176669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:00:25.840 [DEBUG] [Thread-176669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:00:25.841 [INFO] [Thread-176669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:00:25.848 [DEBUG] [Thread-176669] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] client lang: <none>
2026-04-11T21:00:25.849 [DEBUG] [Thread-176669] [transport.py] [_log()] server lang: <none>
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] kex follows: False
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] Compression: none
2026-04-11T21:00:25.850 [DEBUG] [Thread-176669] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:00:25.909 [DEBUG] [Thread-176669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:00:25.910 [DEBUG] [Thread-176669] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:00:25.910 [DEBUG] [Thread-176669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:00:25.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:00:25.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:00:25.968 [DEBUG] [Thread-176669] [transport.py] [_log()] userauth is OK
2026-04-11T21:00:25.969 [DEBUG] [Thread-176669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:00:25.969 [DEBUG] [Thread-176669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:00:25.969 [DEBUG] [Thread-176669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:00:25.969 [DEBUG] [Thread-176669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:00:25.987 [INFO] [Thread-176669] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:00:25.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:00:25.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:00:26.826 [DEBUG] [Thread-176669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:00:26.826 [DEBUG] [Thread-176669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:00:26.876 [DEBUG] [Thread-176669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:00:26.876 [DEBUG] [Thread-176669] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:00:26.888 [DEBUG] [Thread-176669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:00:26.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:00:26.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')
2026-04-11T21:00:26.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-04-11T21:00:26.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:00:26.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:00:26.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:00:26.925 [DEBUG] [Thread-176669] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:00:32.405 [DEBUG] [Thread-176671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:34.177 [DEBUG] [Thread-176672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:49.233 [DEBUG] [Thread-176673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:00:56.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:00:56.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:00:56.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:00:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 0, 46), 0.00117, 99.9193, 0.0, 14.3626, 12.2133, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:00:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:00:46
2026-04-11T21:00:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:00:58.797 [DEBUG] [Thread-176674] [transport.py] [_log()] starting thread (client mode): 0xae514d30
2026-04-11T21:00:58.797 [DEBUG] [Thread-176674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:00:58.807 [DEBUG] [Thread-176674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:00:58.808 [INFO] [Thread-176674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] client lang: <none>
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] server lang: <none>
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] kex follows: False
2026-04-11T21:00:58.811 [DEBUG] [Thread-176674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:00:58.812 [DEBUG] [Thread-176674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:00:58.812 [DEBUG] [Thread-176674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:00:58.812 [DEBUG] [Thread-176674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:00:58.812 [DEBUG] [Thread-176674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:00:58.812 [DEBUG] [Thread-176674] [transport.py] [_log()] Compression: none
2026-04-11T21:00:58.812 [DEBUG] [Thread-176674] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:00:58.833 [DEBUG] [Thread-176674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:00:58.834 [DEBUG] [Thread-176674] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:00:58.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:00:58.835 [DEBUG] [Thread-176674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:00:58.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:00:58.837 [DEBUG] [Thread-176674] [transport.py] [_log()] userauth is OK
2026-04-11T21:00:58.837 [DEBUG] [Thread-176674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:00:58.838 [DEBUG] [Thread-176674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:00:58.838 [DEBUG] [Thread-176674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:00:58.838 [DEBUG] [Thread-176674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:00:58.858 [INFO] [Thread-176674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:00:58.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:00:59.457 [DEBUG] [Thread-176674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:00:59.457 [DEBUG] [Thread-176674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:00:59.458 [DEBUG] [Thread-176674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:00:59.498 [DEBUG] [Thread-176674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:00:59.499 [DEBUG] [Thread-176674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:00:59.501 [DEBUG] [Thread-176674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:00:59.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:00:59.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:00:59.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:00:59.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:00:59.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:00:59.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:00:59.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:00:59.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:00:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:00:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.792130 -999.00  +11.90  11.73     97  +11.50 1 3 1 3 1     0    0 0.37 0.76 ----- 11.7 11.7 295.4 17.5 13.2 -1.4 13.1 -0.5 12.7 -0.4 13.1 -0.6
2026-04-11T21:00:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:00:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:00:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.792130
2026-04-11T21:00:59.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:00:59.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:00:59.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:00:59.522 [DEBUG] [Thread-176674] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:00:59.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:00:59.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:00:59.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:00:46', tmtdew=0.00117, humidity=99.9193, cloud=0.0, wind=14.3626, temperature=12.2133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:00:40.032', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:00:59.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:00:59.610 [DEBUG] [Thread-176677] [transport.py] [_log()] starting thread (client mode): 0xb0f570a0
2026-04-11T21:00:59.610 [DEBUG] [Thread-176677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:00:59.625 [DEBUG] [Thread-176677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:00:59.625 [INFO] [Thread-176677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] client lang: <none>
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] server lang: <none>
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] kex follows: False
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] Compression: none
2026-04-11T21:00:59.632 [DEBUG] [Thread-176677] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:00:59.688 [DEBUG] [Thread-176677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:00:59.688 [DEBUG] [Thread-176677] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:00:59.688 [DEBUG] [Thread-176677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:00:59.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:00:59.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:00:59.746 [DEBUG] [Thread-176677] [transport.py] [_log()] userauth is OK
2026-04-11T21:00:59.746 [DEBUG] [Thread-176677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:00:59.746 [DEBUG] [Thread-176677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:00:59.746 [DEBUG] [Thread-176677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:00:59.746 [DEBUG] [Thread-176677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:00:59.759 [INFO] [Thread-176677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:00:59.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:00:59.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:01:00.569 [DEBUG] [Thread-176677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:01:00.569 [DEBUG] [Thread-176677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:01:00.617 [DEBUG] [Thread-176677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:01:00.617 [DEBUG] [Thread-176677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:01:00.627 [DEBUG] [Thread-176677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:01:00.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:01:00.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-04-11T21:01:00.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-04-11T21:01:00.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:01:00.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:01:00.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:01:00.664 [DEBUG] [Thread-176677] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:01:04.271 [DEBUG] [Thread-176679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:01:19.326 [DEBUG] [Thread-176680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:01:23.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:01:23.094 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:01:30.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:01:30.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:01:30.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-04-11T21:01:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 1, 22), -0.0096, 100.026, 0.0, 15.3868, 11.9061, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:01:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:01:22
2026-04-11T21:01:32.461 [DEBUG] [Thread-176681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:01:32.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:01:32.611 [DEBUG] [Thread-176682] [transport.py] [_log()] starting thread (client mode): 0xb0fcf8b0
2026-04-11T21:01:32.611 [DEBUG] [Thread-176682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:01:32.631 [DEBUG] [Thread-176682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:01:32.631 [INFO] [Thread-176682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] client lang: <none>
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] server lang: <none>
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] kex follows: False
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:01:32.634 [DEBUG] [Thread-176682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:01:32.635 [DEBUG] [Thread-176682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:01:32.635 [DEBUG] [Thread-176682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:01:32.635 [DEBUG] [Thread-176682] [transport.py] [_log()] Compression: none
2026-04-11T21:01:32.635 [DEBUG] [Thread-176682] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:01:32.649 [DEBUG] [Thread-176682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:01:32.650 [DEBUG] [Thread-176682] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:01:32.650 [DEBUG] [Thread-176682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:01:32.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:01:32.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:01:32.692 [DEBUG] [Thread-176682] [transport.py] [_log()] userauth is OK
2026-04-11T21:01:32.692 [DEBUG] [Thread-176682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:01:32.692 [DEBUG] [Thread-176682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:01:32.692 [DEBUG] [Thread-176682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:01:32.692 [DEBUG] [Thread-176682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:01:32.713 [INFO] [Thread-176682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:01:32.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:01:33.313 [DEBUG] [Thread-176682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:01:33.313 [DEBUG] [Thread-176682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:01:33.313 [DEBUG] [Thread-176682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:01:33.353 [DEBUG] [Thread-176682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:01:33.354 [DEBUG] [Thread-176682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:01:33.355 [DEBUG] [Thread-176682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:01:33.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:01:33.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:01:33.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:01:33.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:01:33.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:01:33.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:01:33.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:01:33.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:01:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:01:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.792477 -999.00  +11.90  12.75     97  +11.60 1 3 1 3 1     0    0 0.37 1.11 ----- 12.8 12.8 277.0 14.7 13.2 -1.4 13.1 -0.4 12.6 -1.0 13.1 -0.5
2026-04-11T21:01:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:01:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:01:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.792477
2026-04-11T21:01:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:01:33.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:01:33.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:01:33.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:01:33.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:01:33.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:01:22', tmtdew=-0.0096, humidity=100.026, cloud=0.0, wind=15.3868, temperature=11.9061, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:01:10.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:01:33.380 [DEBUG] [Thread-176682] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:01:33.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:01:33.485 [DEBUG] [Thread-176685] [transport.py] [_log()] starting thread (client mode): 0xb0f56b30
2026-04-11T21:01:33.485 [DEBUG] [Thread-176685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:01:33.502 [DEBUG] [Thread-176685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:01:33.502 [INFO] [Thread-176685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] client lang: <none>
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] server lang: <none>
2026-04-11T21:01:33.509 [DEBUG] [Thread-176685] [transport.py] [_log()] kex follows: False
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] Compression: none
2026-04-11T21:01:33.510 [DEBUG] [Thread-176685] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:01:33.566 [DEBUG] [Thread-176685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:01:33.566 [DEBUG] [Thread-176685] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:01:33.567 [DEBUG] [Thread-176685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:01:33.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:01:33.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:01:33.623 [DEBUG] [Thread-176685] [transport.py] [_log()] userauth is OK
2026-04-11T21:01:33.623 [DEBUG] [Thread-176685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:01:33.624 [DEBUG] [Thread-176685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:01:33.624 [DEBUG] [Thread-176685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:01:33.624 [DEBUG] [Thread-176685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:01:33.642 [INFO] [Thread-176685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:01:33.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:01:33.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:01:34.363 [DEBUG] [Thread-176687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:01:34.483 [DEBUG] [Thread-176685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:01:34.484 [DEBUG] [Thread-176685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:01:34.531 [DEBUG] [Thread-176685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:01:34.531 [DEBUG] [Thread-176685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:01:34.539 [DEBUG] [Thread-176685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:01:34.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:01:34.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-04-11T21:01:34.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-04-11T21:01:34.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:01:34.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:01:34.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:01:34.573 [DEBUG] [Thread-176685] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:01:49.409 [DEBUG] [Thread-176688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:04.447 [DEBUG] [Thread-176689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:02:04.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:02:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:02:05.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 1, 57), 0.05313, 99.9428, 0.0, 15.952, 11.8231, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:02:05.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:01:57
2026-04-11T21:02:06.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:02:06.358 [DEBUG] [Thread-176690] [transport.py] [_log()] starting thread (client mode): 0xae5f31c0
2026-04-11T21:02:06.358 [DEBUG] [Thread-176690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:02:06.376 [DEBUG] [Thread-176690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:02:06.376 [INFO] [Thread-176690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] client lang: <none>
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] server lang: <none>
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] kex follows: False
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:02:06.380 [DEBUG] [Thread-176690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:02:06.381 [DEBUG] [Thread-176690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:02:06.381 [DEBUG] [Thread-176690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:02:06.381 [DEBUG] [Thread-176690] [transport.py] [_log()] Compression: none
2026-04-11T21:02:06.381 [DEBUG] [Thread-176690] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:02:06.396 [DEBUG] [Thread-176690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:02:06.397 [DEBUG] [Thread-176690] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:02:06.397 [DEBUG] [Thread-176690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:02:06.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:02:06.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:02:06.398 [DEBUG] [Thread-176690] [transport.py] [_log()] userauth is OK
2026-04-11T21:02:06.398 [DEBUG] [Thread-176690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:02:06.398 [DEBUG] [Thread-176690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:02:06.398 [DEBUG] [Thread-176690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:02:06.398 [DEBUG] [Thread-176690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:02:06.407 [INFO] [Thread-176690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:02:06.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:02:06.977 [DEBUG] [Thread-176690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:02:06.977 [DEBUG] [Thread-176690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:02:06.978 [DEBUG] [Thread-176690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:02:07.018 [DEBUG] [Thread-176690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:02:07.018 [DEBUG] [Thread-176690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:02:07.022 [DEBUG] [Thread-176690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:02:07.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:02:07.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:02:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:02:07.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:02:07.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:02:07.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:02:07.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:02:07.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:02:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:02:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.792824 -999.00  +11.90  12.07     97  +11.50 1 3 1 3 1     0    0 0.38 1.33 ----- 12.1 12.1 294.6 18.6 13.2 -1.1 13.1 -0.5 12.7 -0.6 13.1 -0.6
2026-04-11T21:02:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:02:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:02:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.792824
2026-04-11T21:02:07.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:02:07.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:02:07.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:02:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:02:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:02:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:01:57', tmtdew=0.05313, humidity=99.9428, cloud=0.0, wind=15.952, temperature=11.8231, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:01:39.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:02:07.052 [DEBUG] [Thread-176690] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:02:07.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:02:07.147 [DEBUG] [Thread-176693] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cc0
2026-04-11T21:02:07.147 [DEBUG] [Thread-176693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:02:07.163 [DEBUG] [Thread-176693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:02:07.163 [INFO] [Thread-176693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] client lang: <none>
2026-04-11T21:02:07.174 [DEBUG] [Thread-176693] [transport.py] [_log()] server lang: <none>
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] kex follows: False
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] Compression: none
2026-04-11T21:02:07.175 [DEBUG] [Thread-176693] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:02:07.233 [DEBUG] [Thread-176693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:02:07.233 [DEBUG] [Thread-176693] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:02:07.234 [DEBUG] [Thread-176693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:02:07.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:02:07.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:02:07.297 [DEBUG] [Thread-176693] [transport.py] [_log()] userauth is OK
2026-04-11T21:02:07.297 [DEBUG] [Thread-176693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:02:07.297 [DEBUG] [Thread-176693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:02:07.297 [DEBUG] [Thread-176693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:02:07.297 [DEBUG] [Thread-176693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:02:07.317 [INFO] [Thread-176693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:02:07.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:02:07.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:02:08.125 [DEBUG] [Thread-176693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:02:08.125 [DEBUG] [Thread-176693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:02:08.174 [DEBUG] [Thread-176693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:02:08.174 [DEBUG] [Thread-176693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:02:08.183 [DEBUG] [Thread-176693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:02:08.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:02:08.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-04-11T21:02:08.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-04-11T21:02:08.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:02:08.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:02:08.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:02:08.218 [DEBUG] [Thread-176693] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:02:19.485 [DEBUG] [Thread-176695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:23.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:23.296 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:32.536 [DEBUG] [Thread-176696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:34.534 [DEBUG] [Thread-176697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:02:38.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:02:38.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:02:38.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-04-11T21:02:39.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 1, 57), 0.05313, 99.9428, 0.0, 15.952, 11.8231, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:02:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:01:57
2026-04-11T21:02:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:02:40.104 [DEBUG] [Thread-176698] [transport.py] [_log()] starting thread (client mode): 0xae515540
2026-04-11T21:02:40.104 [DEBUG] [Thread-176698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:02:40.114 [DEBUG] [Thread-176698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:02:40.114 [INFO] [Thread-176698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] client lang: <none>
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] server lang: <none>
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] kex follows: False
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] Compression: none
2026-04-11T21:02:40.115 [DEBUG] [Thread-176698] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:02:40.126 [DEBUG] [Thread-176698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:02:40.126 [DEBUG] [Thread-176698] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:02:40.126 [DEBUG] [Thread-176698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:02:40.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:02:40.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:02:40.127 [DEBUG] [Thread-176698] [transport.py] [_log()] userauth is OK
2026-04-11T21:02:40.127 [DEBUG] [Thread-176698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:02:40.128 [DEBUG] [Thread-176698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:02:40.128 [DEBUG] [Thread-176698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:02:40.128 [DEBUG] [Thread-176698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:02:40.140 [INFO] [Thread-176698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:02:40.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:02:40.723 [DEBUG] [Thread-176698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:02:40.723 [DEBUG] [Thread-176698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:02:40.723 [DEBUG] [Thread-176698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:02:40.764 [DEBUG] [Thread-176698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:02:40.764 [DEBUG] [Thread-176698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:02:40.766 [DEBUG] [Thread-176698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:02:40.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:02:40.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:02:40.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:02:40.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:02:40.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:02:40.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:02:40.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:02:40.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:02:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:02:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.793171 -999.00  +11.90  10.05     97  +11.50 1 3 1 3 1     0    0 0.40 1.73 ----- 10.1 10.1 288.4 13.9 13.2 -1.6 13.1 -0.4 12.7 -0.5 13.1 -0.5
2026-04-11T21:02:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:02:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:02:40.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.793171
2026-04-11T21:02:40.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:02:40.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:02:40.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:02:40.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:02:40.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:02:40.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:01:57', tmtdew=0.05313, humidity=99.9428, cloud=0.0, wind=15.952, temperature=11.8231, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:02:09.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:02:40.790 [DEBUG] [Thread-176698] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:02:40.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:02:40.883 [DEBUG] [Thread-176701] [transport.py] [_log()] starting thread (client mode): 0xae5f2740
2026-04-11T21:02:40.883 [DEBUG] [Thread-176701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:02:40.897 [DEBUG] [Thread-176701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:02:40.897 [INFO] [Thread-176701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:02:40.914 [DEBUG] [Thread-176701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:02:40.915 [DEBUG] [Thread-176701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:02:40.915 [DEBUG] [Thread-176701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:02:40.915 [DEBUG] [Thread-176701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:40.915 [DEBUG] [Thread-176701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] client lang: <none>
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] server lang: <none>
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] kex follows: False
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] Compression: none
2026-04-11T21:02:40.916 [DEBUG] [Thread-176701] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:02:40.962 [DEBUG] [Thread-176701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:02:40.963 [DEBUG] [Thread-176701] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:02:40.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:02:40.964 [DEBUG] [Thread-176701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:02:40.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:02:41.018 [DEBUG] [Thread-176701] [transport.py] [_log()] userauth is OK
2026-04-11T21:02:41.019 [DEBUG] [Thread-176701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:02:41.019 [DEBUG] [Thread-176701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:02:41.019 [DEBUG] [Thread-176701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:02:41.019 [DEBUG] [Thread-176701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:02:41.038 [INFO] [Thread-176701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:02:41.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:02:41.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:02:41.856 [DEBUG] [Thread-176701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:02:41.856 [DEBUG] [Thread-176701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:02:41.904 [DEBUG] [Thread-176701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:02:41.904 [DEBUG] [Thread-176701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:02:41.913 [DEBUG] [Thread-176701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:02:41.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:02:41.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:02:41.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-04-11T21:02:41.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:02:41.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:02:41.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:02:41.950 [DEBUG] [Thread-176701] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:02:49.572 [DEBUG] [Thread-176703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:04.621 [DEBUG] [Thread-176704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:03:11.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:03:11.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-04-11T21:03:13.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 2, 33), 0.04296, 100.009, 0.0, 16.8163, 11.906, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:03:13.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:02:33
2026-04-11T21:03:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:03:13.839 [DEBUG] [Thread-176705] [transport.py] [_log()] starting thread (client mode): 0xae50a4a0
2026-04-11T21:03:13.840 [DEBUG] [Thread-176705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:03:13.856 [DEBUG] [Thread-176705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:03:13.856 [INFO] [Thread-176705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] client lang: <none>
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] server lang: <none>
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] kex follows: False
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] Compression: none
2026-04-11T21:03:13.858 [DEBUG] [Thread-176705] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:03:13.875 [DEBUG] [Thread-176705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:03:13.875 [DEBUG] [Thread-176705] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:03:13.876 [DEBUG] [Thread-176705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:03:13.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:03:13.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:03:13.878 [DEBUG] [Thread-176705] [transport.py] [_log()] userauth is OK
2026-04-11T21:03:13.878 [DEBUG] [Thread-176705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:03:13.878 [DEBUG] [Thread-176705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:03:13.878 [DEBUG] [Thread-176705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:03:13.879 [DEBUG] [Thread-176705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:03:13.904 [INFO] [Thread-176705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:03:13.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:03:14.510 [DEBUG] [Thread-176705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:03:14.510 [DEBUG] [Thread-176705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:03:14.511 [DEBUG] [Thread-176705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:03:14.552 [DEBUG] [Thread-176705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:03:14.552 [DEBUG] [Thread-176705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:03:14.555 [DEBUG] [Thread-176705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:03:14.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:03:14.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:03:14.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:03:14.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:03:14.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:03:14.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:03:14.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:03:14.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:03:14.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:03:14.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.793518 -999.00  +11.90  15.10     97  +11.50 1 3 1 3 1     0    0 0.42 2.45 ----- 15.1 15.1 287.8 18.1 13.2 -1.5 13.1 -0.4 12.7 -0.6 13.1 -0.5
2026-04-11T21:03:14.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:03:14.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:03:14.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.793518
2026-04-11T21:03:14.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:03:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:03:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:03:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:03:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:03:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:02:33', tmtdew=0.04296, humidity=100.009, cloud=0.0, wind=16.8163, temperature=11.906, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:02:39.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:03:14.577 [DEBUG] [Thread-176705] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:03:14.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:03:14.670 [DEBUG] [Thread-176708] [transport.py] [_log()] starting thread (client mode): 0xb0f57100
2026-04-11T21:03:14.670 [DEBUG] [Thread-176708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:03:14.685 [DEBUG] [Thread-176708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:03:14.685 [INFO] [Thread-176708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:03:14.692 [DEBUG] [Thread-176708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] client lang: <none>
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] server lang: <none>
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] kex follows: False
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] Compression: none
2026-04-11T21:03:14.693 [DEBUG] [Thread-176708] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:03:14.752 [DEBUG] [Thread-176708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:03:14.752 [DEBUG] [Thread-176708] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:03:14.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:03:14.754 [DEBUG] [Thread-176708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:03:14.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:03:14.808 [DEBUG] [Thread-176708] [transport.py] [_log()] userauth is OK
2026-04-11T21:03:14.808 [DEBUG] [Thread-176708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:03:14.808 [DEBUG] [Thread-176708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:03:14.808 [DEBUG] [Thread-176708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:03:14.808 [DEBUG] [Thread-176708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:03:14.828 [INFO] [Thread-176708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:03:14.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:03:14.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:03:15.702 [DEBUG] [Thread-176708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:03:15.702 [DEBUG] [Thread-176708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:03:15.750 [DEBUG] [Thread-176708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:03:15.750 [DEBUG] [Thread-176708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:03:15.759 [DEBUG] [Thread-176708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:03:15.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:03:15.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-04-11T21:03:15.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-04-11T21:03:15.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:03:15.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:03:15.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:03:15.794 [DEBUG] [Thread-176708] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:03:19.661 [DEBUG] [Thread-176710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:23.501 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:23.502 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:32.622 [DEBUG] [Thread-176711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:34.720 [DEBUG] [Thread-176712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:03:45.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:03:45.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-04-11T21:03:47.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 3, 8), 0.04046, 100.026, 0.0, 16.146, 11.9059, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:03:47.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:03:08
2026-04-11T21:03:47.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:03:47.908 [DEBUG] [Thread-176713] [transport.py] [_log()] starting thread (client mode): 0xb0f56650
2026-04-11T21:03:47.908 [DEBUG] [Thread-176713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:03:47.928 [DEBUG] [Thread-176713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:03:47.928 [INFO] [Thread-176713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] client lang: <none>
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] server lang: <none>
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] kex follows: False
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:03:47.930 [DEBUG] [Thread-176713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:03:47.931 [DEBUG] [Thread-176713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:03:47.931 [DEBUG] [Thread-176713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:03:47.931 [DEBUG] [Thread-176713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:03:47.931 [DEBUG] [Thread-176713] [transport.py] [_log()] Compression: none
2026-04-11T21:03:47.931 [DEBUG] [Thread-176713] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:03:47.942 [DEBUG] [Thread-176713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:03:47.942 [DEBUG] [Thread-176713] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:03:47.943 [DEBUG] [Thread-176713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:03:47.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:03:47.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:03:47.944 [DEBUG] [Thread-176713] [transport.py] [_log()] userauth is OK
2026-04-11T21:03:47.944 [DEBUG] [Thread-176713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:03:47.944 [DEBUG] [Thread-176713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:03:47.944 [DEBUG] [Thread-176713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:03:47.945 [DEBUG] [Thread-176713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:03:47.962 [INFO] [Thread-176713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:03:47.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:03:48.575 [DEBUG] [Thread-176713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:03:48.575 [DEBUG] [Thread-176713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:03:48.576 [DEBUG] [Thread-176713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:03:48.616 [DEBUG] [Thread-176713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:03:48.617 [DEBUG] [Thread-176713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:03:48.620 [DEBUG] [Thread-176713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:03:48.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:03:48.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:03:48.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:03:48.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:03:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:03:48.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:03:48.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:03:48.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:03:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:03:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.794213 -999.00  +11.90  11.04     97  +11.50 1 3 1 3 1     0    0 0.47 3.65 ----- 11.0 11.0 303.4 15.9 13.3 -1.1 13.0 -0.4 12.7 -0.4 13.0 -0.5
2026-04-11T21:03:48.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:03:48.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:03:48.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.794213
2026-04-11T21:03:48.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:03:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:03:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:03:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:03:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:03:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:03:08', tmtdew=0.04046, humidity=100.026, cloud=0.0, wind=16.146, temperature=11.9059, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:03:40.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:03:48.646 [DEBUG] [Thread-176713] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:03:48.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:03:48.739 [DEBUG] [Thread-176716] [transport.py] [_log()] starting thread (client mode): 0xae5178e0
2026-04-11T21:03:48.739 [DEBUG] [Thread-176716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:03:48.754 [DEBUG] [Thread-176716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:03:48.754 [INFO] [Thread-176716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] client lang: <none>
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] server lang: <none>
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] kex follows: False
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:03:48.762 [DEBUG] [Thread-176716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:03:48.763 [DEBUG] [Thread-176716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:03:48.763 [DEBUG] [Thread-176716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:03:48.763 [DEBUG] [Thread-176716] [transport.py] [_log()] Compression: none
2026-04-11T21:03:48.763 [DEBUG] [Thread-176716] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:03:48.820 [DEBUG] [Thread-176716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:03:48.821 [DEBUG] [Thread-176716] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:03:48.821 [DEBUG] [Thread-176716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:03:48.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:03:48.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:03:48.877 [DEBUG] [Thread-176716] [transport.py] [_log()] userauth is OK
2026-04-11T21:03:48.877 [DEBUG] [Thread-176716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:03:48.877 [DEBUG] [Thread-176716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:03:48.878 [DEBUG] [Thread-176716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:03:48.878 [DEBUG] [Thread-176716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:03:48.897 [INFO] [Thread-176716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:03:48.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:03:48.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:03:49.717 [DEBUG] [Thread-176716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:03:49.718 [DEBUG] [Thread-176716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:03:49.756 [DEBUG] [Thread-176718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:03:49.766 [DEBUG] [Thread-176716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:03:49.766 [DEBUG] [Thread-176716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:03:49.775 [DEBUG] [Thread-176716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:03:49.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:03:49.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-04-11T21:03:49.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:03:49.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:03:49.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:03:49.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:03:49.810 [DEBUG] [Thread-176716] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:04:04.805 [DEBUG] [Thread-176719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:19.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:04:19.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:04:19.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-04-11T21:04:19.844 [DEBUG] [Thread-176720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 3, 44), -0.02416, 100.084, 0.0, 14.3978, 12.4449, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:04:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:03:44
2026-04-11T21:04:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:04:21.761 [DEBUG] [Thread-176721] [transport.py] [_log()] starting thread (client mode): 0xae515d80
2026-04-11T21:04:21.761 [DEBUG] [Thread-176721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:04:21.777 [DEBUG] [Thread-176721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:04:21.777 [INFO] [Thread-176721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] client lang: <none>
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] server lang: <none>
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] kex follows: False
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] Compression: none
2026-04-11T21:04:21.780 [DEBUG] [Thread-176721] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:04:21.798 [DEBUG] [Thread-176721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:04:21.799 [DEBUG] [Thread-176721] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:04:21.800 [DEBUG] [Thread-176721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:04:21.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:04:21.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:04:21.801 [DEBUG] [Thread-176721] [transport.py] [_log()] userauth is OK
2026-04-11T21:04:21.802 [DEBUG] [Thread-176721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:04:21.802 [DEBUG] [Thread-176721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:04:21.802 [DEBUG] [Thread-176721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:04:21.802 [DEBUG] [Thread-176721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:04:21.817 [INFO] [Thread-176721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:04:21.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:04:22.461 [DEBUG] [Thread-176721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:04:22.461 [DEBUG] [Thread-176721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:04:22.462 [DEBUG] [Thread-176721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:04:22.502 [DEBUG] [Thread-176721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:04:22.502 [DEBUG] [Thread-176721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:04:22.506 [DEBUG] [Thread-176721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:04:22.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:04:22.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:04:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:04:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:04:22.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:04:22.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:04:22.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:04:22.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:04:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:04:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.794561 -999.00  +11.90  13.54     97  +11.50 1 3 1 3 1     0    0 0.48 4.16 ----- 13.5 13.5 299.6 18.1 13.2 -1.2 13.0 -0.5 12.7 -0.4 13.0 -0.4
2026-04-11T21:04:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:04:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:04:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.794561
2026-04-11T21:04:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:04:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:04:22.533 [DEBUG] [Thread-176721] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:04:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:04:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:04:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:04:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:03:44', tmtdew=-0.02416, humidity=100.084, cloud=0.0, wind=14.3978, temperature=12.4449, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:04:10.070', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:04:22.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:04:22.622 [DEBUG] [Thread-176724] [transport.py] [_log()] starting thread (client mode): 0xae50a710
2026-04-11T21:04:22.622 [DEBUG] [Thread-176724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:04:22.636 [DEBUG] [Thread-176724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:04:22.636 [INFO] [Thread-176724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:04:22.644 [DEBUG] [Thread-176724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:04:22.644 [DEBUG] [Thread-176724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] client lang: <none>
2026-04-11T21:04:22.645 [DEBUG] [Thread-176724] [transport.py] [_log()] server lang: <none>
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] kex follows: False
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] Compression: none
2026-04-11T21:04:22.646 [DEBUG] [Thread-176724] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:04:22.702 [DEBUG] [Thread-176724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:04:22.703 [DEBUG] [Thread-176724] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:04:22.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:04:22.704 [DEBUG] [Thread-176724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:04:22.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:04:22.758 [DEBUG] [Thread-176724] [transport.py] [_log()] userauth is OK
2026-04-11T21:04:22.758 [DEBUG] [Thread-176724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:04:22.758 [DEBUG] [Thread-176724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:04:22.759 [DEBUG] [Thread-176724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:04:22.759 [DEBUG] [Thread-176724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:04:22.777 [INFO] [Thread-176724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:04:22.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:04:22.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:04:23.602 [DEBUG] [Thread-176724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:04:23.602 [DEBUG] [Thread-176724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:04:23.653 [DEBUG] [Thread-176724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:04:23.653 [DEBUG] [Thread-176724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:04:23.662 [DEBUG] [Thread-176724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:04:23.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:04:23.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-04-11T21:04:23.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-04-11T21:04:23.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:04:23.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:04:23.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:04:23.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:23.708 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:23.712 [DEBUG] [Thread-176724] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:04:32.683 [DEBUG] [Thread-176726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:34.878 [DEBUG] [Thread-176727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:49.933 [DEBUG] [Thread-176728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:04:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:04:53.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:04:53.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-04-11T21:04:54.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 4, 20), -0.00465, 99.9923, 0.0, 13.7455, 12.1048, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:04:54.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:04:20
2026-04-11T21:04:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:04:55.517 [DEBUG] [Thread-176729] [transport.py] [_log()] starting thread (client mode): 0xb0f55e10
2026-04-11T21:04:55.517 [DEBUG] [Thread-176729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:04:55.537 [DEBUG] [Thread-176729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:04:55.537 [INFO] [Thread-176729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:04:55.540 [DEBUG] [Thread-176729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] client lang: <none>
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] server lang: <none>
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] kex follows: False
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:04:55.541 [DEBUG] [Thread-176729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:04:55.542 [DEBUG] [Thread-176729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:04:55.542 [DEBUG] [Thread-176729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:04:55.542 [DEBUG] [Thread-176729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:04:55.542 [DEBUG] [Thread-176729] [transport.py] [_log()] Compression: none
2026-04-11T21:04:55.542 [DEBUG] [Thread-176729] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:04:55.559 [DEBUG] [Thread-176729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:04:55.560 [DEBUG] [Thread-176729] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:04:55.560 [DEBUG] [Thread-176729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:04:55.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:04:55.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:04:55.563 [DEBUG] [Thread-176729] [transport.py] [_log()] userauth is OK
2026-04-11T21:04:55.563 [DEBUG] [Thread-176729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:04:55.563 [DEBUG] [Thread-176729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:04:55.563 [DEBUG] [Thread-176729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:04:55.563 [DEBUG] [Thread-176729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:04:55.586 [INFO] [Thread-176729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:04:55.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:04:56.203 [DEBUG] [Thread-176729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:04:56.204 [DEBUG] [Thread-176729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:04:56.204 [DEBUG] [Thread-176729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:04:56.245 [DEBUG] [Thread-176729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:04:56.245 [DEBUG] [Thread-176729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:04:56.249 [DEBUG] [Thread-176729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:04:56.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:04:56.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:04:56.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:04:56.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:04:56.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:04:56.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:04:56.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:04:56.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:04:56.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:04:56.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.794907 -999.00  +11.80   8.77     97  +11.50 1 3 1 3 1     0    0 0.46 3.76 ----- 8.8 8.8 289.0 16.2 13.2 -1.1 13.1 -0.5 12.7 -0.4 13.1 -0.5
2026-04-11T21:04:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:04:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:04:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.794907
2026-04-11T21:04:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:04:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:04:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:04:56.277 [DEBUG] [Thread-176729] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:04:56.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:04:56.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:04:56.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:04:20', tmtdew=-0.00465, humidity=99.9923, cloud=0.0, wind=13.7455, temperature=12.1048, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:04:39.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:04:56.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:04:56.371 [DEBUG] [Thread-176732] [transport.py] [_log()] starting thread (client mode): 0xb0fb5e70
2026-04-11T21:04:56.371 [DEBUG] [Thread-176732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:04:56.385 [DEBUG] [Thread-176732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:04:56.385 [INFO] [Thread-176732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:04:56.393 [DEBUG] [Thread-176732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:04:56.393 [DEBUG] [Thread-176732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:04:56.393 [DEBUG] [Thread-176732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] client lang: <none>
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] server lang: <none>
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] kex follows: False
2026-04-11T21:04:56.394 [DEBUG] [Thread-176732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:04:56.395 [DEBUG] [Thread-176732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:04:56.395 [DEBUG] [Thread-176732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:04:56.395 [DEBUG] [Thread-176732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:04:56.395 [DEBUG] [Thread-176732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:04:56.395 [DEBUG] [Thread-176732] [transport.py] [_log()] Compression: none
2026-04-11T21:04:56.395 [DEBUG] [Thread-176732] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:04:56.450 [DEBUG] [Thread-176732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:04:56.451 [DEBUG] [Thread-176732] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:04:56.452 [DEBUG] [Thread-176732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:04:56.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:04:56.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:04:56.506 [DEBUG] [Thread-176732] [transport.py] [_log()] userauth is OK
2026-04-11T21:04:56.506 [DEBUG] [Thread-176732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:04:56.507 [DEBUG] [Thread-176732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:04:56.507 [DEBUG] [Thread-176732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:04:56.507 [DEBUG] [Thread-176732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:04:56.521 [INFO] [Thread-176732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:04:56.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:04:56.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:04:57.342 [DEBUG] [Thread-176732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:04:57.343 [DEBUG] [Thread-176732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:04:57.392 [DEBUG] [Thread-176732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:04:57.392 [DEBUG] [Thread-176732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:04:57.402 [DEBUG] [Thread-176732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:04:57.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:04:57.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:04:57.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-04-11T21:04:57.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:04:57.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:04:57.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:04:57.439 [DEBUG] [Thread-176732] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:05:04.972 [DEBUG] [Thread-176734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:05:20.028 [DEBUG] [Thread-176735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:05:23.911 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:05:23.912 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:05:27.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:05:27.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:05:27.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-04-11T21:05:28.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 4, 55), 0.043055, 100.009, 0.0, 15.3338, 11.906, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:05:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:04:55
2026-04-11T21:05:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:05:29.323 [DEBUG] [Thread-176736] [transport.py] [_log()] starting thread (client mode): 0xb0f559f0
2026-04-11T21:05:29.323 [DEBUG] [Thread-176736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:05:29.342 [DEBUG] [Thread-176736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:05:29.342 [INFO] [Thread-176736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:05:29.345 [DEBUG] [Thread-176736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] client lang: <none>
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] server lang: <none>
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] kex follows: False
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:05:29.346 [DEBUG] [Thread-176736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:05:29.347 [DEBUG] [Thread-176736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:05:29.347 [DEBUG] [Thread-176736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:05:29.347 [DEBUG] [Thread-176736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:05:29.347 [DEBUG] [Thread-176736] [transport.py] [_log()] Compression: none
2026-04-11T21:05:29.347 [DEBUG] [Thread-176736] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:05:29.357 [DEBUG] [Thread-176736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:05:29.358 [DEBUG] [Thread-176736] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:05:29.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:05:29.359 [DEBUG] [Thread-176736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:05:29.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:05:29.361 [DEBUG] [Thread-176736] [transport.py] [_log()] userauth is OK
2026-04-11T21:05:29.362 [DEBUG] [Thread-176736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:05:29.362 [DEBUG] [Thread-176736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:05:29.362 [DEBUG] [Thread-176736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:05:29.362 [DEBUG] [Thread-176736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:05:29.387 [INFO] [Thread-176736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:05:29.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:05:30.029 [DEBUG] [Thread-176736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:05:30.029 [DEBUG] [Thread-176736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:05:30.030 [DEBUG] [Thread-176736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:05:30.070 [DEBUG] [Thread-176736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:05:30.070 [DEBUG] [Thread-176736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:05:30.073 [DEBUG] [Thread-176736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:05:30.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:05:30.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:05:30.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:05:30.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:05:30.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:05:30.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:05:30.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:05:30.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.795254 -999.00  +11.90  12.46     97  +11.50 1 3 1 3 1     0    0 0.48 4.33 ----- 12.5 12.5 283.6 15.5 13.2 -1.2 13.1 -0.3 12.7 -0.9 13.1 -0.5
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.795254
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:05:30.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:04:55', tmtdew=0.043055, humidity=100.009, cloud=0.0, wind=15.3338, temperature=11.906, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:05:09.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:05:30.093 [DEBUG] [Thread-176736] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:05:30.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:05:30.175 [DEBUG] [Thread-176739] [transport.py] [_log()] starting thread (client mode): 0xb0f54ca0
2026-04-11T21:05:30.176 [DEBUG] [Thread-176739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:05:30.192 [DEBUG] [Thread-176739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:05:30.192 [INFO] [Thread-176739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:05:30.200 [DEBUG] [Thread-176739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:05:30.200 [DEBUG] [Thread-176739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:05:30.201 [DEBUG] [Thread-176739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:05:30.201 [DEBUG] [Thread-176739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:05:30.201 [DEBUG] [Thread-176739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:05:30.201 [DEBUG] [Thread-176739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:05:30.201 [DEBUG] [Thread-176739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] client lang: <none>
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] server lang: <none>
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] kex follows: False
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] Compression: none
2026-04-11T21:05:30.202 [DEBUG] [Thread-176739] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:05:30.260 [DEBUG] [Thread-176739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:05:30.261 [DEBUG] [Thread-176739] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:05:30.261 [DEBUG] [Thread-176739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:05:30.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:05:30.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:05:30.316 [DEBUG] [Thread-176739] [transport.py] [_log()] userauth is OK
2026-04-11T21:05:30.316 [DEBUG] [Thread-176739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:05:30.317 [DEBUG] [Thread-176739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:05:30.317 [DEBUG] [Thread-176739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:05:30.317 [DEBUG] [Thread-176739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:05:30.336 [INFO] [Thread-176739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:05:30.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:05:30.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:05:31.178 [DEBUG] [Thread-176739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:05:31.178 [DEBUG] [Thread-176739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:05:31.227 [DEBUG] [Thread-176739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:05:31.227 [DEBUG] [Thread-176739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:05:31.236 [DEBUG] [Thread-176739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:05:31.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:05:31.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-04-11T21:05:31.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:05:31.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:05:31.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:05:31.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:05:31.273 [DEBUG] [Thread-176739] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:05:32.755 [DEBUG] [Thread-176741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:05:35.066 [DEBUG] [Thread-176742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:05:50.116 [DEBUG] [Thread-176743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:06:01.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:06:01.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-04-11T21:06:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 5, 30), 0.04307, 100.009, 0.0, 15.7043, 11.906, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:06:02.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:05:30
2026-04-11T21:06:02.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:06:03.100 [DEBUG] [Thread-176744] [transport.py] [_log()] starting thread (client mode): 0xae516a40
2026-04-11T21:06:03.100 [DEBUG] [Thread-176744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:06:03.115 [DEBUG] [Thread-176744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:06:03.115 [INFO] [Thread-176744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] client lang: <none>
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] server lang: <none>
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] kex follows: False
2026-04-11T21:06:03.118 [DEBUG] [Thread-176744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:06:03.119 [DEBUG] [Thread-176744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:06:03.119 [DEBUG] [Thread-176744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:06:03.119 [DEBUG] [Thread-176744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:06:03.119 [DEBUG] [Thread-176744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:06:03.119 [DEBUG] [Thread-176744] [transport.py] [_log()] Compression: none
2026-04-11T21:06:03.119 [DEBUG] [Thread-176744] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:06:03.136 [DEBUG] [Thread-176744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:06:03.137 [DEBUG] [Thread-176744] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:06:03.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:06:03.138 [DEBUG] [Thread-176744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:06:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:06:03.140 [DEBUG] [Thread-176744] [transport.py] [_log()] userauth is OK
2026-04-11T21:06:03.141 [DEBUG] [Thread-176744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:06:03.141 [DEBUG] [Thread-176744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:06:03.141 [DEBUG] [Thread-176744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:06:03.141 [DEBUG] [Thread-176744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:06:03.167 [INFO] [Thread-176744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:06:03.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:06:03.775 [DEBUG] [Thread-176744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:06:03.775 [DEBUG] [Thread-176744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:06:03.775 [DEBUG] [Thread-176744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:06:03.816 [DEBUG] [Thread-176744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:06:03.816 [DEBUG] [Thread-176744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:06:03.820 [DEBUG] [Thread-176744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:06:03.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:06:03.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:06:03.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:06:03.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:06:03.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:06:03.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:06:03.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:06:03.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:06:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:06:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.795602 -999.00  +11.90  12.30     97  +11.60 1 3 1 3 1     0    0 0.48 4.53 ----- 12.3 12.3 296.2 15.2 13.2 -1.2 13.1 -0.4 12.6 -0.4 13.1 -0.5
2026-04-11T21:06:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:06:03.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:06:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.795602
2026-04-11T21:06:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:06:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:06:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:06:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:06:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:06:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:05:30', tmtdew=0.04307, humidity=100.009, cloud=0.0, wind=15.7043, temperature=11.906, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:05:40.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:06:03.847 [DEBUG] [Thread-176744] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:06:03.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:06:03.940 [DEBUG] [Thread-176747] [transport.py] [_log()] starting thread (client mode): 0xae516bc0
2026-04-11T21:06:03.941 [DEBUG] [Thread-176747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:06:03.955 [DEBUG] [Thread-176747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:06:03.955 [INFO] [Thread-176747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:06:03.963 [DEBUG] [Thread-176747] [transport.py] [_log()] client lang: <none>
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] server lang: <none>
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] kex follows: False
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] Compression: none
2026-04-11T21:06:03.964 [DEBUG] [Thread-176747] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:06:04.021 [DEBUG] [Thread-176747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:06:04.022 [DEBUG] [Thread-176747] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:06:04.022 [DEBUG] [Thread-176747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:06:04.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:06:04.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:06:04.077 [DEBUG] [Thread-176747] [transport.py] [_log()] userauth is OK
2026-04-11T21:06:04.077 [DEBUG] [Thread-176747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:06:04.077 [DEBUG] [Thread-176747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:06:04.078 [DEBUG] [Thread-176747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:06:04.078 [DEBUG] [Thread-176747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:06:04.096 [INFO] [Thread-176747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:06:04.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:06:04.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:06:04.909 [DEBUG] [Thread-176747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:06:04.910 [DEBUG] [Thread-176747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:06:04.960 [DEBUG] [Thread-176747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:06:04.960 [DEBUG] [Thread-176747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:06:04.972 [DEBUG] [Thread-176747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:06:04.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:06:04.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:06:04.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-04-11T21:06:05.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:06:05.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:06:05.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:06:05.009 [DEBUG] [Thread-176747] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:06:05.150 [DEBUG] [Thread-176749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:20.202 [DEBUG] [Thread-176750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:24.117 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:24.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:32.822 [DEBUG] [Thread-176751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:35.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:06:35.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:06:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:06:35.238 [DEBUG] [Thread-176752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:06:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 6, 6), 0.043025, 100.009, 0.0, 15.2986, 11.9062, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:06:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:06:06
2026-04-11T21:06:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:06:36.826 [DEBUG] [Thread-176753] [transport.py] [_log()] starting thread (client mode): 0xae509bd0
2026-04-11T21:06:36.826 [DEBUG] [Thread-176753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:06:36.846 [DEBUG] [Thread-176753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:06:36.846 [INFO] [Thread-176753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:06:36.849 [DEBUG] [Thread-176753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] client lang: <none>
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] server lang: <none>
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] kex follows: False
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:06:36.850 [DEBUG] [Thread-176753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:06:36.851 [DEBUG] [Thread-176753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:06:36.851 [DEBUG] [Thread-176753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:06:36.851 [DEBUG] [Thread-176753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:06:36.851 [DEBUG] [Thread-176753] [transport.py] [_log()] Compression: none
2026-04-11T21:06:36.851 [DEBUG] [Thread-176753] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:06:36.871 [DEBUG] [Thread-176753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:06:36.871 [DEBUG] [Thread-176753] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:06:36.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:06:36.872 [DEBUG] [Thread-176753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:06:36.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:06:36.875 [DEBUG] [Thread-176753] [transport.py] [_log()] userauth is OK
2026-04-11T21:06:36.875 [DEBUG] [Thread-176753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:06:36.875 [DEBUG] [Thread-176753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:06:36.875 [DEBUG] [Thread-176753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:06:36.875 [DEBUG] [Thread-176753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:06:36.899 [INFO] [Thread-176753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:06:36.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:06:37.545 [DEBUG] [Thread-176753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:06:37.546 [DEBUG] [Thread-176753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:06:37.546 [DEBUG] [Thread-176753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:06:37.587 [DEBUG] [Thread-176753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:06:37.587 [DEBUG] [Thread-176753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:06:37.591 [DEBUG] [Thread-176753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:06:37.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:06:37.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:06:37.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:06:37.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:06:37.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:06:37.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:06:37.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:06:37.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:06:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:06:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.795949 -999.00  +11.90   9.51     97  +11.60 1 3 1 3 1     0    0 0.46 3.83 ----- 9.5 9.5 272.3 15.2 13.2 -0.8 13.0 -0.3 12.6 -0.3 13.1 -0.4
2026-04-11T21:06:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:06:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:06:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.795949
2026-04-11T21:06:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:06:37.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:06:37.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:06:37.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:06:37.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:06:37.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:06:06', tmtdew=0.043025, humidity=100.009, cloud=0.0, wind=15.2986, temperature=11.9062, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:06:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:06:37.617 [DEBUG] [Thread-176753] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:06:37.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:06:37.711 [DEBUG] [Thread-176756] [transport.py] [_log()] starting thread (client mode): 0xae51b4c0
2026-04-11T21:06:37.711 [DEBUG] [Thread-176756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:06:37.725 [DEBUG] [Thread-176756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:06:37.725 [INFO] [Thread-176756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:06:37.732 [DEBUG] [Thread-176756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] client lang: <none>
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] server lang: <none>
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] kex follows: False
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:06:37.733 [DEBUG] [Thread-176756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:06:37.734 [DEBUG] [Thread-176756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:06:37.734 [DEBUG] [Thread-176756] [transport.py] [_log()] Compression: none
2026-04-11T21:06:37.734 [DEBUG] [Thread-176756] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:06:37.789 [DEBUG] [Thread-176756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:06:37.790 [DEBUG] [Thread-176756] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:06:37.790 [DEBUG] [Thread-176756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:06:37.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:06:37.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:06:37.845 [DEBUG] [Thread-176756] [transport.py] [_log()] userauth is OK
2026-04-11T21:06:37.846 [DEBUG] [Thread-176756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:06:37.846 [DEBUG] [Thread-176756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:06:37.846 [DEBUG] [Thread-176756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:06:37.846 [DEBUG] [Thread-176756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:06:37.868 [INFO] [Thread-176756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:06:37.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:06:37.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:06:38.720 [DEBUG] [Thread-176756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:06:38.720 [DEBUG] [Thread-176756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:06:38.768 [DEBUG] [Thread-176756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:06:38.768 [DEBUG] [Thread-176756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:06:38.777 [DEBUG] [Thread-176756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:06:38.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:06:38.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:06:38.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-04-11T21:06:38.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:06:38.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:06:38.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:06:38.815 [DEBUG] [Thread-176756] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:06:50.279 [DEBUG] [Thread-176758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:05.331 [DEBUG] [Thread-176759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:07:08.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:07:08.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-04-11T21:07:10.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 6, 41), 0.00128, 99.9186, 0.0, 16.8674, 12.2128, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:07:10.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:06:41
2026-04-11T21:07:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:07:10.671 [DEBUG] [Thread-176760] [transport.py] [_log()] starting thread (client mode): 0xae517f70
2026-04-11T21:07:10.671 [DEBUG] [Thread-176760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:07:10.692 [DEBUG] [Thread-176760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:07:10.692 [INFO] [Thread-176760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] client lang: <none>
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] server lang: <none>
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] kex follows: False
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] Compression: none
2026-04-11T21:07:10.694 [DEBUG] [Thread-176760] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:07:10.707 [DEBUG] [Thread-176760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:07:10.707 [DEBUG] [Thread-176760] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:07:10.707 [DEBUG] [Thread-176760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:07:10.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:07:10.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:07:10.709 [DEBUG] [Thread-176760] [transport.py] [_log()] userauth is OK
2026-04-11T21:07:10.710 [DEBUG] [Thread-176760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:07:10.710 [DEBUG] [Thread-176760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:07:10.710 [DEBUG] [Thread-176760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:07:10.710 [DEBUG] [Thread-176760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:07:10.735 [INFO] [Thread-176760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:07:10.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:07:11.346 [DEBUG] [Thread-176760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:07:11.346 [DEBUG] [Thread-176760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:07:11.347 [DEBUG] [Thread-176760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:07:11.387 [DEBUG] [Thread-176760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:07:11.387 [DEBUG] [Thread-176760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:07:11.390 [DEBUG] [Thread-176760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:07:11.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:07:11.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:07:11.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:07:11.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:07:11.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:07:11.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:07:11.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:07:11.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:07:11.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:07:11.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.796296 -999.00  +12.00  10.16     97  +11.60 1 3 1 3 1     0    0 0.46 3.64 ----- 10.2 10.2 297.4 12.3 13.2 -0.8 13.1 -0.3 12.6 -0.6 13.1 -0.5
2026-04-11T21:07:11.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:07:11.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:07:11.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.796296
2026-04-11T21:07:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:07:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:07:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:07:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:07:11.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:07:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:06:41', tmtdew=0.00128, humidity=99.9186, cloud=0.0, wind=16.8674, temperature=12.2128, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:06:39.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:07:11.412 [DEBUG] [Thread-176760] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:07:11.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:07:11.506 [DEBUG] [Thread-176763] [transport.py] [_log()] starting thread (client mode): 0xb0fb5780
2026-04-11T21:07:11.506 [DEBUG] [Thread-176763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:07:11.521 [DEBUG] [Thread-176763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:07:11.521 [INFO] [Thread-176763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:07:11.529 [DEBUG] [Thread-176763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:07:11.529 [DEBUG] [Thread-176763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:07:11.529 [DEBUG] [Thread-176763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] client lang: <none>
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] server lang: <none>
2026-04-11T21:07:11.530 [DEBUG] [Thread-176763] [transport.py] [_log()] kex follows: False
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] Compression: none
2026-04-11T21:07:11.531 [DEBUG] [Thread-176763] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:07:11.587 [DEBUG] [Thread-176763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:07:11.587 [DEBUG] [Thread-176763] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:07:11.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:07:11.589 [DEBUG] [Thread-176763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:07:11.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:07:11.643 [DEBUG] [Thread-176763] [transport.py] [_log()] userauth is OK
2026-04-11T21:07:11.643 [DEBUG] [Thread-176763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:07:11.643 [DEBUG] [Thread-176763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:07:11.643 [DEBUG] [Thread-176763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:07:11.643 [DEBUG] [Thread-176763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:07:11.667 [INFO] [Thread-176763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:07:11.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:07:11.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:07:12.466 [DEBUG] [Thread-176763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:07:12.466 [DEBUG] [Thread-176763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:07:12.513 [DEBUG] [Thread-176763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:07:12.514 [DEBUG] [Thread-176763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:07:12.523 [DEBUG] [Thread-176763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:07:12.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:07:12.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-04-11T21:07:12.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-04-11T21:07:12.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:07:12.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:07:12.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:07:12.557 [DEBUG] [Thread-176763] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:07:20.369 [DEBUG] [Thread-176765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:24.321 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:24.322 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:32.881 [DEBUG] [Thread-176766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:35.420 [DEBUG] [Thread-176767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:07:42.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:07:42.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:07:42.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-04-11T21:07:43.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 7, 17), -0.004425, 99.9925, 0.0, 16.4099, 11.873, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:07:43.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:07:17
2026-04-11T21:07:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:07:44.429 [DEBUG] [Thread-176768] [transport.py] [_log()] starting thread (client mode): 0xa7953130
2026-04-11T21:07:44.429 [DEBUG] [Thread-176768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:07:44.449 [DEBUG] [Thread-176768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:07:44.449 [INFO] [Thread-176768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:07:44.452 [DEBUG] [Thread-176768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:07:44.452 [DEBUG] [Thread-176768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:07:44.452 [DEBUG] [Thread-176768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] client lang: <none>
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] server lang: <none>
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] kex follows: False
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:07:44.453 [DEBUG] [Thread-176768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:07:44.454 [DEBUG] [Thread-176768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:07:44.454 [DEBUG] [Thread-176768] [transport.py] [_log()] Compression: none
2026-04-11T21:07:44.454 [DEBUG] [Thread-176768] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:07:44.473 [DEBUG] [Thread-176768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:07:44.474 [DEBUG] [Thread-176768] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:07:44.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:07:44.475 [DEBUG] [Thread-176768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:07:44.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:07:44.477 [DEBUG] [Thread-176768] [transport.py] [_log()] userauth is OK
2026-04-11T21:07:44.478 [DEBUG] [Thread-176768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:07:44.478 [DEBUG] [Thread-176768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:07:44.478 [DEBUG] [Thread-176768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:07:44.478 [DEBUG] [Thread-176768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:07:44.501 [INFO] [Thread-176768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:07:44.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:07:45.153 [DEBUG] [Thread-176768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:07:45.153 [DEBUG] [Thread-176768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:07:45.154 [DEBUG] [Thread-176768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:07:45.194 [DEBUG] [Thread-176768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:07:45.194 [DEBUG] [Thread-176768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:07:45.198 [DEBUG] [Thread-176768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:07:45.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:07:45.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:07:45.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:07:45.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:07:45.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:07:45.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:07:45.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:07:45.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:07:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:07:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.796644 -999.00  +12.00  13.58     97  +11.60 1 3 1 3 1     0    0 0.46 3.81 ----- 13.6 13.6 280.8 15.2 13.2 -0.9 13.1 -0.3 12.7 -0.4 13.1 -0.3
2026-04-11T21:07:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:07:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:07:45.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.796644
2026-04-11T21:07:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:07:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:07:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:07:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:07:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:07:45.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:07:17', tmtdew=-0.004425, humidity=99.9925, cloud=0.0, wind=16.4099, temperature=11.873, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:07:10.042', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:07:45.225 [DEBUG] [Thread-176768] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:07:45.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:07:45.318 [DEBUG] [Thread-176771] [transport.py] [_log()] starting thread (client mode): 0xae515630
2026-04-11T21:07:45.318 [DEBUG] [Thread-176771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:07:45.333 [DEBUG] [Thread-176771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:07:45.333 [INFO] [Thread-176771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:07:45.340 [DEBUG] [Thread-176771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] client lang: <none>
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] server lang: <none>
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] kex follows: False
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] Compression: none
2026-04-11T21:07:45.341 [DEBUG] [Thread-176771] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:07:45.399 [DEBUG] [Thread-176771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:07:45.400 [DEBUG] [Thread-176771] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:07:45.401 [DEBUG] [Thread-176771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:07:45.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:07:45.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:07:45.456 [DEBUG] [Thread-176771] [transport.py] [_log()] userauth is OK
2026-04-11T21:07:45.456 [DEBUG] [Thread-176771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:07:45.456 [DEBUG] [Thread-176771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:07:45.457 [DEBUG] [Thread-176771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:07:45.457 [DEBUG] [Thread-176771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:07:45.475 [INFO] [Thread-176771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:07:45.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:07:45.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:07:46.276 [DEBUG] [Thread-176771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:07:46.276 [DEBUG] [Thread-176771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:07:46.324 [DEBUG] [Thread-176771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:07:46.324 [DEBUG] [Thread-176771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:07:46.333 [DEBUG] [Thread-176771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:07:46.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:07:46.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-04-11T21:07:46.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:07:46.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:07:46.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:07:46.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:07:46.373 [DEBUG] [Thread-176771] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:07:50.458 [DEBUG] [Thread-176773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:05.518 [DEBUG] [Thread-176774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:16.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:08:16.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:08:16.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-04-11T21:08:17.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 7, 52), -0.01391, 100.018, 0.0, 16.0207, 12.3122, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:08:17.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:07:52
2026-04-11T21:08:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:08:18.205 [DEBUG] [Thread-176775] [transport.py] [_log()] starting thread (client mode): 0xb0f55ed0
2026-04-11T21:08:18.205 [DEBUG] [Thread-176775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:08:18.225 [DEBUG] [Thread-176775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:08:18.225 [INFO] [Thread-176775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:08:18.228 [DEBUG] [Thread-176775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] client lang: <none>
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] server lang: <none>
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] kex follows: False
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] Compression: none
2026-04-11T21:08:18.229 [DEBUG] [Thread-176775] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:08:18.244 [DEBUG] [Thread-176775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:08:18.244 [DEBUG] [Thread-176775] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:08:18.244 [DEBUG] [Thread-176775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:08:18.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:08:18.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:08:18.246 [DEBUG] [Thread-176775] [transport.py] [_log()] userauth is OK
2026-04-11T21:08:18.246 [DEBUG] [Thread-176775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:08:18.246 [DEBUG] [Thread-176775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:08:18.246 [DEBUG] [Thread-176775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:08:18.246 [DEBUG] [Thread-176775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:08:18.259 [INFO] [Thread-176775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:08:18.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:08:18.926 [DEBUG] [Thread-176775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:08:18.927 [DEBUG] [Thread-176775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:08:18.927 [DEBUG] [Thread-176775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:08:18.967 [DEBUG] [Thread-176775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:08:18.967 [DEBUG] [Thread-176775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:08:18.970 [DEBUG] [Thread-176775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:08:18.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:08:18.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:08:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:08:18.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:08:18.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:08:18.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:08:18.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:08:18.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:08:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:08:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.797338 -999.00  +11.90   9.52     97  +11.60 1 3 1 3 1     0    0 0.43 2.55 ----- 9.5 9.5 290.6 12.4 13.2 -1.2 13.0 -0.3 12.7 -0.7 13.1 -0.5
2026-04-11T21:08:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:08:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:08:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.797338
2026-04-11T21:08:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:08:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:08:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:08:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:08:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:08:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:07:52', tmtdew=-0.01391, humidity=100.018, cloud=0.0, wind=16.0207, temperature=12.3122, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:08:10.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:08:18.998 [DEBUG] [Thread-176775] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:08:19.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:08:20.554 [DEBUG] [Thread-176778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:24.523 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:24.524 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:32.937 [DEBUG] [Thread-176779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:35.604 [DEBUG] [Thread-176780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:08:50.644 [DEBUG] [Thread-176781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:05.680 [DEBUG] [Thread-176782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:20.715 [DEBUG] [Thread-176783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:24.726 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:24.727 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:33.017 [DEBUG] [Thread-176784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:35.751 [DEBUG] [Thread-176785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:09:50.790 [DEBUG] [Thread-176786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:05.823 [DEBUG] [Thread-176787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:20.856 [DEBUG] [Thread-176788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:24.929 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:24.931 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:31.551 [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-04-11T21:10:33.073 [DEBUG] [Thread-176789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:35.896 [DEBUG] [Thread-176790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:10:50.933 [DEBUG] [Thread-176791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:01.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:11:01.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:11:01.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-04-11T21:11:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 10, 49), -0.0089, 99.9855, 0.0, 16.9027, 12.2132, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:11:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:10:49
2026-04-11T21:11:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:11:03.400 [DEBUG] [Thread-176792] [transport.py] [_log()] starting thread (client mode): 0xa7952200
2026-04-11T21:11:03.400 [DEBUG] [Thread-176792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:11:03.412 [DEBUG] [Thread-176792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:11:03.412 [INFO] [Thread-176792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:11:03.415 [DEBUG] [Thread-176792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] client lang: <none>
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] server lang: <none>
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] kex follows: False
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] Compression: none
2026-04-11T21:11:03.416 [DEBUG] [Thread-176792] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:11:03.434 [DEBUG] [Thread-176792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:11:03.435 [DEBUG] [Thread-176792] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:11:03.435 [DEBUG] [Thread-176792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:11:03.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:11:03.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:11:03.438 [DEBUG] [Thread-176792] [transport.py] [_log()] userauth is OK
2026-04-11T21:11:03.438 [DEBUG] [Thread-176792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:11:03.438 [DEBUG] [Thread-176792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:11:03.438 [DEBUG] [Thread-176792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:11:03.438 [DEBUG] [Thread-176792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:11:03.460 [INFO] [Thread-176792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:11:03.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:11:04.065 [DEBUG] [Thread-176792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:11:04.065 [DEBUG] [Thread-176792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:11:04.066 [DEBUG] [Thread-176792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:11:04.106 [DEBUG] [Thread-176792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:11:04.106 [DEBUG] [Thread-176792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:11:04.109 [DEBUG] [Thread-176792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:11:04.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:11:04.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:11:04.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:11:04.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:11:04.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:11:04.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:11:04.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:11:04.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:11:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:11:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.799074 -999.00  +11.80  14.59     97  +11.40 1 3 1 3 1     0    0 0.40 1.59 ----- 14.6 14.6 287.2 17.5 13.2 -1.3 13.0 -0.4 12.5 -0.8 12.9 -0.7
2026-04-11T21:11:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:11:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:11:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.799074
2026-04-11T21:11:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:11:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:11:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:11:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:11:04.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:11:04.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:10:49', tmtdew=-0.0089, humidity=99.9855, cloud=0.0, wind=16.9027, temperature=12.2132, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:10:39.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:11:04.137 [DEBUG] [Thread-176792] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:11:04.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:11:04.240 [DEBUG] [Thread-176795] [transport.py] [_log()] starting thread (client mode): 0xae5160b0
2026-04-11T21:11:04.240 [DEBUG] [Thread-176795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:11:04.255 [DEBUG] [Thread-176795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:11:04.255 [INFO] [Thread-176795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] client lang: <none>
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] server lang: <none>
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] kex follows: False
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:11:04.263 [DEBUG] [Thread-176795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:11:04.264 [DEBUG] [Thread-176795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:11:04.264 [DEBUG] [Thread-176795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:11:04.264 [DEBUG] [Thread-176795] [transport.py] [_log()] Compression: none
2026-04-11T21:11:04.264 [DEBUG] [Thread-176795] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:11:04.324 [DEBUG] [Thread-176795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:11:04.325 [DEBUG] [Thread-176795] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:11:04.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:11:04.326 [DEBUG] [Thread-176795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:11:04.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:11:04.380 [DEBUG] [Thread-176795] [transport.py] [_log()] userauth is OK
2026-04-11T21:11:04.381 [DEBUG] [Thread-176795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:11:04.381 [DEBUG] [Thread-176795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:11:04.381 [DEBUG] [Thread-176795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:11:04.381 [DEBUG] [Thread-176795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:11:04.400 [INFO] [Thread-176795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:11:04.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:11:04.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:11:05.223 [DEBUG] [Thread-176795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:11:05.223 [DEBUG] [Thread-176795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:11:05.271 [DEBUG] [Thread-176795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:11:05.271 [DEBUG] [Thread-176795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:11:05.280 [DEBUG] [Thread-176795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:11:05.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:11:05.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-04-11T21:11:05.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-04-11T21:11:05.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:11:05.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:11:05.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:11:05.317 [DEBUG] [Thread-176795] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:11:05.969 [DEBUG] [Thread-176797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:21.032 [DEBUG] [Thread-176798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:25.133 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:25.134 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:33.131 [DEBUG] [Thread-176799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:11:35.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:11:35.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-04-11T21:11:36.069 [DEBUG] [Thread-176800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:11:36.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 11, 24), -0.01459, 100.059, 0.0, 15.2986, 11.8563, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:11:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:11:24
2026-04-11T21:11:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:11:37.059 [DEBUG] [Thread-176801] [transport.py] [_log()] starting thread (client mode): 0xa7953340
2026-04-11T21:11:37.059 [DEBUG] [Thread-176801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:11:37.079 [DEBUG] [Thread-176801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:11:37.079 [INFO] [Thread-176801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:11:37.082 [DEBUG] [Thread-176801] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:11:37.082 [DEBUG] [Thread-176801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] client lang: <none>
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] server lang: <none>
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] kex follows: False
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:11:37.083 [DEBUG] [Thread-176801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:11:37.084 [DEBUG] [Thread-176801] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:11:37.084 [DEBUG] [Thread-176801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:11:37.084 [DEBUG] [Thread-176801] [transport.py] [_log()] Compression: none
2026-04-11T21:11:37.084 [DEBUG] [Thread-176801] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:11:37.102 [DEBUG] [Thread-176801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:11:37.103 [DEBUG] [Thread-176801] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:11:37.104 [DEBUG] [Thread-176801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:11:37.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:11:37.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:11:37.144 [DEBUG] [Thread-176801] [transport.py] [_log()] userauth is OK
2026-04-11T21:11:37.145 [DEBUG] [Thread-176801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:11:37.145 [DEBUG] [Thread-176801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:11:37.145 [DEBUG] [Thread-176801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:11:37.145 [DEBUG] [Thread-176801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:11:37.165 [INFO] [Thread-176801] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:11:37.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:11:37.796 [DEBUG] [Thread-176801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:11:37.796 [DEBUG] [Thread-176801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:11:37.796 [DEBUG] [Thread-176801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:11:37.837 [DEBUG] [Thread-176801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:11:37.837 [DEBUG] [Thread-176801] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:11:37.840 [DEBUG] [Thread-176801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:11:37.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:11:37.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:11:37.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:11:37.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:11:37.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:11:37.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:11:37.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:11:37.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:11:37.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:11:37.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.799421 -999.00  +11.80  15.14     97  +11.40 1 3 1 3 1     0    0 0.41 1.69 ----- 15.1 15.1 276.4 19.4 13.1 -1.6 13.0 -0.5 12.5 -0.8 12.9 -0.6
2026-04-11T21:11:37.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:11:37.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:11:37.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.799421
2026-04-11T21:11:37.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:11:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:11:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:11:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:11:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:11:37.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:11:24', tmtdew=-0.01459, humidity=100.059, cloud=0.0, wind=15.2986, temperature=11.8563, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:11:09.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:11:37.865 [DEBUG] [Thread-176801] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:11:37.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:11:37.961 [DEBUG] [Thread-176804] [transport.py] [_log()] starting thread (client mode): 0xb0fb50f0
2026-04-11T21:11:37.961 [DEBUG] [Thread-176804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:11:37.975 [DEBUG] [Thread-176804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:11:37.975 [INFO] [Thread-176804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:11:37.982 [DEBUG] [Thread-176804] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:11:37.982 [DEBUG] [Thread-176804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:11:37.982 [DEBUG] [Thread-176804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] client lang: <none>
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] server lang: <none>
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] kex follows: False
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] Compression: none
2026-04-11T21:11:37.983 [DEBUG] [Thread-176804] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:11:38.046 [DEBUG] [Thread-176804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:11:38.046 [DEBUG] [Thread-176804] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:11:38.047 [DEBUG] [Thread-176804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:11:38.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:11:38.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:11:38.105 [DEBUG] [Thread-176804] [transport.py] [_log()] userauth is OK
2026-04-11T21:11:38.105 [DEBUG] [Thread-176804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:11:38.105 [DEBUG] [Thread-176804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:11:38.106 [DEBUG] [Thread-176804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:11:38.106 [DEBUG] [Thread-176804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:11:38.124 [INFO] [Thread-176804] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:11:38.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:11:38.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:11:38.966 [DEBUG] [Thread-176804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:11:38.966 [DEBUG] [Thread-176804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:11:39.015 [DEBUG] [Thread-176804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:11:39.015 [DEBUG] [Thread-176804] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:11:39.024 [DEBUG] [Thread-176804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:11:39.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:11:39.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-04-11T21:11: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-04-11T21:11:39.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:11:39.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:11:39.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:11:39.061 [DEBUG] [Thread-176804] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:11:51.105 [DEBUG] [Thread-176806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:06.159 [DEBUG] [Thread-176807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:09.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:12:09.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:12:09.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-04-11T21:12:10.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 12), 0.047995, 99.9764, 0.0, 13.1458, 11.9065, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:12:10.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:12:00
2026-04-11T21:12:10.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:12:10.847 [DEBUG] [Thread-176808] [transport.py] [_log()] starting thread (client mode): 0xb0f8dea0
2026-04-11T21:12:10.848 [DEBUG] [Thread-176808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:12:10.868 [DEBUG] [Thread-176808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:12:10.868 [INFO] [Thread-176808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] client lang: <none>
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] server lang: <none>
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] kex follows: False
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] Compression: none
2026-04-11T21:12:10.871 [DEBUG] [Thread-176808] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:12:10.889 [DEBUG] [Thread-176808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:12:10.890 [DEBUG] [Thread-176808] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:12:10.890 [DEBUG] [Thread-176808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:12:10.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:12:10.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:12:10.891 [DEBUG] [Thread-176808] [transport.py] [_log()] userauth is OK
2026-04-11T21:12:10.891 [DEBUG] [Thread-176808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:12:10.891 [DEBUG] [Thread-176808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:12:10.891 [DEBUG] [Thread-176808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:12:10.891 [DEBUG] [Thread-176808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:12:10.909 [INFO] [Thread-176808] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:12:10.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:12:11.537 [DEBUG] [Thread-176808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:12:11.537 [DEBUG] [Thread-176808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:12:11.538 [DEBUG] [Thread-176808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:12:11.578 [DEBUG] [Thread-176808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:12:11.578 [DEBUG] [Thread-176808] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:12:11.581 [DEBUG] [Thread-176808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:12:11.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:12:11.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:12:11.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:12:11.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:12:11.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:12:11.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:12:11.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:12:11.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:12:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:12:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.799768 -999.00  +11.80  13.74     97  +11.40 1 3 1 3 1     0    0 0.42 2.07 ----- 13.7 13.7 282.7 18.5 13.1 -1.3 12.9 -0.5 12.5 -0.4 12.9 -0.7
2026-04-11T21:12:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:12:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:12:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.799768
2026-04-11T21:12:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:12:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:12:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:12:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:12:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:12:11.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:12:00', tmtdew=0.047995, humidity=99.9764, cloud=0.0, wind=13.1458, temperature=11.9065, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:11:39.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:12:11.605 [DEBUG] [Thread-176808] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:12:11.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:12:11.704 [DEBUG] [Thread-176811] [transport.py] [_log()] starting thread (client mode): 0xb0f8ffa0
2026-04-11T21:12:11.705 [DEBUG] [Thread-176811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:12:11.719 [DEBUG] [Thread-176811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:12:11.719 [INFO] [Thread-176811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:12:11.727 [DEBUG] [Thread-176811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:12:11.728 [DEBUG] [Thread-176811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:12:11.728 [DEBUG] [Thread-176811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:12:11.728 [DEBUG] [Thread-176811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] client lang: <none>
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] server lang: <none>
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] kex follows: False
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] Compression: none
2026-04-11T21:12:11.729 [DEBUG] [Thread-176811] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:12:11.789 [DEBUG] [Thread-176811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:12:11.790 [DEBUG] [Thread-176811] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:12:11.790 [DEBUG] [Thread-176811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:12:11.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:12:11.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:12:11.850 [DEBUG] [Thread-176811] [transport.py] [_log()] userauth is OK
2026-04-11T21:12:11.850 [DEBUG] [Thread-176811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:12:11.851 [DEBUG] [Thread-176811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:12:11.851 [DEBUG] [Thread-176811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:12:11.851 [DEBUG] [Thread-176811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:12:11.874 [INFO] [Thread-176811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:12:11.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:12:11.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:12:12.688 [DEBUG] [Thread-176811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:12:12.688 [DEBUG] [Thread-176811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:12:12.737 [DEBUG] [Thread-176811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:12:12.737 [DEBUG] [Thread-176811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:12:12.746 [DEBUG] [Thread-176811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:12:12.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:12:12.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-04-11T21:12:12.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:12:12.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:12:12.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:12:12.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:12:12.781 [DEBUG] [Thread-176811] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:12:21.191 [DEBUG] [Thread-176813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:25.337 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:25.338 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:33.200 [DEBUG] [Thread-176814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:36.249 [DEBUG] [Thread-176815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:12:42.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:12:42.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:12:42.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-04-11T21:12:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 12, 36), -0.00899, 99.9859, 0.0, 14.045, 12.2466, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:12:44.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:12:36
2026-04-11T21:12:44.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:12:44.606 [DEBUG] [Thread-176816] [transport.py] [_log()] starting thread (client mode): 0xb0f55510
2026-04-11T21:12:44.606 [DEBUG] [Thread-176816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:12:44.625 [DEBUG] [Thread-176816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:12:44.625 [INFO] [Thread-176816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:12:44.628 [DEBUG] [Thread-176816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] client lang: <none>
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] server lang: <none>
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] kex follows: False
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] Compression: none
2026-04-11T21:12:44.629 [DEBUG] [Thread-176816] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:12:44.648 [DEBUG] [Thread-176816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:12:44.649 [DEBUG] [Thread-176816] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:12:44.649 [DEBUG] [Thread-176816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:12:44.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:12:44.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:12:44.651 [DEBUG] [Thread-176816] [transport.py] [_log()] userauth is OK
2026-04-11T21:12:44.652 [DEBUG] [Thread-176816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:12:44.652 [DEBUG] [Thread-176816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:12:44.652 [DEBUG] [Thread-176816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:12:44.652 [DEBUG] [Thread-176816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:12:44.674 [INFO] [Thread-176816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:12:44.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:12:45.316 [DEBUG] [Thread-176816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:12:45.316 [DEBUG] [Thread-176816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:12:45.316 [DEBUG] [Thread-176816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:12:45.357 [DEBUG] [Thread-176816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:12:45.357 [DEBUG] [Thread-176816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:12:45.361 [DEBUG] [Thread-176816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:12:45.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:12:45.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:12:45.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:12:45.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:12:45.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:12:45.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:12:45.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:12:45.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:12:45.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:12:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.800115 -999.00  +11.80  10.53     97  +11.50 1 3 1 3 1     0    0 0.42 2.25 ----- 10.5 10.5 287.4 13.1 13.1 -1.2 13.0 -0.3 12.5 -0.2 12.9 -0.4
2026-04-11T21:12:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:12:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:12:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.800115
2026-04-11T21:12:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:12:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:12:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:12:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:12:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:12:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:12:36', tmtdew=-0.00899, humidity=99.9859, cloud=0.0, wind=14.045, temperature=12.2466, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:12:09.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:12:45.388 [DEBUG] [Thread-176816] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:12:45.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:12:45.484 [DEBUG] [Thread-176819] [transport.py] [_log()] starting thread (client mode): 0xa7951f00
2026-04-11T21:12:45.484 [DEBUG] [Thread-176819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:12:45.500 [DEBUG] [Thread-176819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:12:45.500 [INFO] [Thread-176819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] client lang: <none>
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] server lang: <none>
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] kex follows: False
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:12:45.509 [DEBUG] [Thread-176819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:12:45.510 [DEBUG] [Thread-176819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:12:45.510 [DEBUG] [Thread-176819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:12:45.510 [DEBUG] [Thread-176819] [transport.py] [_log()] Compression: none
2026-04-11T21:12:45.510 [DEBUG] [Thread-176819] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:12:45.571 [DEBUG] [Thread-176819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:12:45.572 [DEBUG] [Thread-176819] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:12:45.573 [DEBUG] [Thread-176819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:12:45.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:12:45.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:12:45.630 [DEBUG] [Thread-176819] [transport.py] [_log()] userauth is OK
2026-04-11T21:12:45.630 [DEBUG] [Thread-176819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:12:45.630 [DEBUG] [Thread-176819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:12:45.631 [DEBUG] [Thread-176819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:12:45.631 [DEBUG] [Thread-176819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:12:45.655 [INFO] [Thread-176819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:12:45.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:12:45.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:12:46.491 [DEBUG] [Thread-176819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:12:46.492 [DEBUG] [Thread-176819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:12:46.539 [DEBUG] [Thread-176819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:12:46.539 [DEBUG] [Thread-176819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:12:46.552 [DEBUG] [Thread-176819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:12:46.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:12:46.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-04-11T21:12:46.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-04-11T21:12:46.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:12:46.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:12:46.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:12:46.589 [DEBUG] [Thread-176819] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:12:51.289 [DEBUG] [Thread-176821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:06.343 [DEBUG] [Thread-176822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:16.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:13:16.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:13:16.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:13:17.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 12, 36), -0.00899, 99.9859, 0.0, 14.045, 12.2466, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:13:17.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:12:36
2026-04-11T21:13:18.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:13:18.459 [DEBUG] [Thread-176823] [transport.py] [_log()] starting thread (client mode): 0xae51b4c0
2026-04-11T21:13:18.459 [DEBUG] [Thread-176823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:13:18.480 [DEBUG] [Thread-176823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:13:18.480 [INFO] [Thread-176823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:13:18.483 [DEBUG] [Thread-176823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] client lang: <none>
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] server lang: <none>
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] kex follows: False
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] Compression: none
2026-04-11T21:13:18.484 [DEBUG] [Thread-176823] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:13:18.503 [DEBUG] [Thread-176823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:13:18.504 [DEBUG] [Thread-176823] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:13:18.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:13:18.504 [DEBUG] [Thread-176823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:13:18.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:13:18.507 [DEBUG] [Thread-176823] [transport.py] [_log()] userauth is OK
2026-04-11T21:13:18.507 [DEBUG] [Thread-176823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:13:18.507 [DEBUG] [Thread-176823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:13:18.507 [DEBUG] [Thread-176823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:13:18.507 [DEBUG] [Thread-176823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:13:18.529 [INFO] [Thread-176823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:13:18.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:13:19.174 [DEBUG] [Thread-176823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:13:19.174 [DEBUG] [Thread-176823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:13:19.175 [DEBUG] [Thread-176823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:13:19.215 [DEBUG] [Thread-176823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:13:19.215 [DEBUG] [Thread-176823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:13:19.218 [DEBUG] [Thread-176823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:13:19.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:13:19.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:13:19.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:13:19.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:13:19.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:13:19.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:13:19.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:13:19.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:13:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:13:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.800810 -999.00  +11.80  12.73     97  +11.50 1 3 1 3 1     0    0 0.42 2.12 ----- 12.7 12.7 290.6 14.5 13.1 -1.2 13.0 -0.4 12.5 -0.8 13.0 -0.6
2026-04-11T21:13:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:13:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:13:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.800810
2026-04-11T21:13:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:13:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:13:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:13:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:13:19.246 [DEBUG] [Thread-176823] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:13:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:13:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:12:36', tmtdew=-0.00899, humidity=99.9859, cloud=0.0, wind=14.045, temperature=12.2466, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:13:09.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:13:19.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:13:19.341 [DEBUG] [Thread-176826] [transport.py] [_log()] starting thread (client mode): 0xae5161a0
2026-04-11T21:13:19.341 [DEBUG] [Thread-176826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:13:19.357 [DEBUG] [Thread-176826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:13:19.357 [INFO] [Thread-176826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:13:19.364 [DEBUG] [Thread-176826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] client lang: <none>
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] server lang: <none>
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] kex follows: False
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] Compression: none
2026-04-11T21:13:19.365 [DEBUG] [Thread-176826] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:13:19.423 [DEBUG] [Thread-176826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:13:19.424 [DEBUG] [Thread-176826] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:13:19.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:13:19.425 [DEBUG] [Thread-176826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:13:19.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:13:19.479 [DEBUG] [Thread-176826] [transport.py] [_log()] userauth is OK
2026-04-11T21:13:19.480 [DEBUG] [Thread-176826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:13:19.480 [DEBUG] [Thread-176826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:13:19.480 [DEBUG] [Thread-176826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:13:19.480 [DEBUG] [Thread-176826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:13:19.499 [INFO] [Thread-176826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:13:19.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:13:19.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:13:20.313 [DEBUG] [Thread-176826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:13:20.313 [DEBUG] [Thread-176826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:13:20.361 [DEBUG] [Thread-176826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:13:20.361 [DEBUG] [Thread-176826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:13:20.370 [DEBUG] [Thread-176826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:13:20.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:13:20.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:13:20.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:13:20.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:13:20.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:13:20.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:13:20.406 [DEBUG] [Thread-176826] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:13:21.382 [DEBUG] [Thread-176828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:25.544 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:25.545 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:33.251 [DEBUG] [Thread-176829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:36.431 [DEBUG] [Thread-176830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:50.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:13:50.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:13:50.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-04-11T21:13:51.471 [DEBUG] [Thread-176831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:13:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 13, 11), 0.047985, 99.9765, 0.0, 14.6282, 11.89, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:13:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:13:11
2026-04-11T21:13:52.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:13:52.272 [DEBUG] [Thread-176832] [transport.py] [_log()] starting thread (client mode): 0xae514af0
2026-04-11T21:13:52.272 [DEBUG] [Thread-176832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:13:52.292 [DEBUG] [Thread-176832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:13:52.292 [INFO] [Thread-176832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] client lang: <none>
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] server lang: <none>
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] kex follows: False
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:13:52.295 [DEBUG] [Thread-176832] [transport.py] [_log()] Compression: none
2026-04-11T21:13:52.296 [DEBUG] [Thread-176832] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:13:52.312 [DEBUG] [Thread-176832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:13:52.313 [DEBUG] [Thread-176832] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:13:52.313 [DEBUG] [Thread-176832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:13:52.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:13:52.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:13:52.315 [DEBUG] [Thread-176832] [transport.py] [_log()] userauth is OK
2026-04-11T21:13:52.315 [DEBUG] [Thread-176832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:13:52.315 [DEBUG] [Thread-176832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:13:52.316 [DEBUG] [Thread-176832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:13:52.316 [DEBUG] [Thread-176832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:13:52.340 [INFO] [Thread-176832] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:13:52.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:13:52.981 [DEBUG] [Thread-176832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:13:52.981 [DEBUG] [Thread-176832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:13:52.981 [DEBUG] [Thread-176832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:13:53.022 [DEBUG] [Thread-176832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:13:53.022 [DEBUG] [Thread-176832] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:13:53.026 [DEBUG] [Thread-176832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:13:53.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:13:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:13:53.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:13:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:13:53.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:13:53.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:13:53.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:13:53.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:13:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:13:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.801157 -999.00  +11.80  14.23     97  +11.40 1 3 1 3 1     0    0 0.42 2.16 ----- 14.2 14.2 285.2 19.1 13.0 -1.4 12.9 -0.4 12.6 -0.4 12.9 -0.6
2026-04-11T21:13:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:13:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:13:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.801157
2026-04-11T21:13:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:13:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:13:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:13:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:13:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:13:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:13:11', tmtdew=0.047985, humidity=99.9765, cloud=0.0, wind=14.6282, temperature=11.89, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:13:39.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:13:53.055 [DEBUG] [Thread-176832] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:13:53.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:13:53.150 [DEBUG] [Thread-176835] [transport.py] [_log()] starting thread (client mode): 0xb0fb4910
2026-04-11T21:13:53.150 [DEBUG] [Thread-176835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:13:53.165 [DEBUG] [Thread-176835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:13:53.165 [INFO] [Thread-176835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:13:53.173 [DEBUG] [Thread-176835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:13:53.173 [DEBUG] [Thread-176835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:13:53.173 [DEBUG] [Thread-176835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] client lang: <none>
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] server lang: <none>
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] kex follows: False
2026-04-11T21:13:53.174 [DEBUG] [Thread-176835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:13:53.175 [DEBUG] [Thread-176835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:13:53.175 [DEBUG] [Thread-176835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:13:53.175 [DEBUG] [Thread-176835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:13:53.175 [DEBUG] [Thread-176835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:13:53.175 [DEBUG] [Thread-176835] [transport.py] [_log()] Compression: none
2026-04-11T21:13:53.175 [DEBUG] [Thread-176835] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:13:53.232 [DEBUG] [Thread-176835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:13:53.232 [DEBUG] [Thread-176835] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:13:53.233 [DEBUG] [Thread-176835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:13:53.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:13:53.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:13:53.287 [DEBUG] [Thread-176835] [transport.py] [_log()] userauth is OK
2026-04-11T21:13:53.287 [DEBUG] [Thread-176835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:13:53.288 [DEBUG] [Thread-176835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:13:53.288 [DEBUG] [Thread-176835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:13:53.288 [DEBUG] [Thread-176835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:13:53.308 [INFO] [Thread-176835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:13:53.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:13:53.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:13:54.186 [DEBUG] [Thread-176835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:13:54.186 [DEBUG] [Thread-176835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:13:54.234 [DEBUG] [Thread-176835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:13:54.234 [DEBUG] [Thread-176835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:13:54.244 [DEBUG] [Thread-176835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:13:54.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:13:54.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-04-11T21:13:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:13:54.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:13:54.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:13:54.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:13:54.278 [DEBUG] [Thread-176835] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:14:06.506 [DEBUG] [Thread-176837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:21.546 [DEBUG] [Thread-176838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:14:24.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:14:24.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-04-11T21:14:25.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 13, 46), -0.01916, 100.053, 0.0, 16.1266, 12.28, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:14:25.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:13:46
2026-04-11T21:14:25.756 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:25.757 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:14:26.196 [DEBUG] [Thread-176839] [transport.py] [_log()] starting thread (client mode): 0xb0f8ed70
2026-04-11T21:14:26.196 [DEBUG] [Thread-176839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:14:26.211 [DEBUG] [Thread-176839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:14:26.211 [INFO] [Thread-176839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:14:26.213 [DEBUG] [Thread-176839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:14:26.213 [DEBUG] [Thread-176839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] client lang: <none>
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] server lang: <none>
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] kex follows: False
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] Compression: none
2026-04-11T21:14:26.214 [DEBUG] [Thread-176839] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:14:26.226 [DEBUG] [Thread-176839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:14:26.226 [DEBUG] [Thread-176839] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:14:26.227 [DEBUG] [Thread-176839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:14:26.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:14:26.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:14:26.228 [DEBUG] [Thread-176839] [transport.py] [_log()] userauth is OK
2026-04-11T21:14:26.229 [DEBUG] [Thread-176839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:14:26.229 [DEBUG] [Thread-176839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:14:26.229 [DEBUG] [Thread-176839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:14:26.229 [DEBUG] [Thread-176839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:14:26.254 [INFO] [Thread-176839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:14:26.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:14:26.882 [DEBUG] [Thread-176839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:14:26.882 [DEBUG] [Thread-176839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:14:26.883 [DEBUG] [Thread-176839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:14:26.923 [DEBUG] [Thread-176839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:14:26.923 [DEBUG] [Thread-176839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:14:26.926 [DEBUG] [Thread-176839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:14:26.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:14:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:14:26.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:14:26.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:14:26.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:14:26.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:14:26.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:14:26.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:14:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:14:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.801504 -999.00  +11.80  15.16     97  +11.40 1 3 1 3 1     0    0 0.42 2.15 ----- 15.2 15.2 283.4 17.2 13.1 -1.3 12.9 -0.3 12.4 -0.9 12.9 -0.7
2026-04-11T21:14:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:14:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:14:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.801504
2026-04-11T21:14:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:14:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:14:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:14:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:14:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:14:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:13:46', tmtdew=-0.01916, humidity=100.053, cloud=0.0, wind=16.1266, temperature=12.28, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:14:09.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:14:26.951 [DEBUG] [Thread-176839] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:14:27.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:14:27.046 [DEBUG] [Thread-176842] [transport.py] [_log()] starting thread (client mode): 0xae51b460
2026-04-11T21:14:27.046 [DEBUG] [Thread-176842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:14:27.064 [DEBUG] [Thread-176842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:14:27.064 [INFO] [Thread-176842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:14:27.072 [DEBUG] [Thread-176842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] client lang: <none>
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] server lang: <none>
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] kex follows: False
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:14:27.073 [DEBUG] [Thread-176842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:14:27.074 [DEBUG] [Thread-176842] [transport.py] [_log()] Compression: none
2026-04-11T21:14:27.074 [DEBUG] [Thread-176842] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:14:27.135 [DEBUG] [Thread-176842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:14:27.135 [DEBUG] [Thread-176842] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:14:27.136 [DEBUG] [Thread-176842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:14:27.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:14:27.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:14:27.197 [DEBUG] [Thread-176842] [transport.py] [_log()] userauth is OK
2026-04-11T21:14:27.197 [DEBUG] [Thread-176842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:14:27.197 [DEBUG] [Thread-176842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:14:27.197 [DEBUG] [Thread-176842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:14:27.197 [DEBUG] [Thread-176842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:14:27.216 [INFO] [Thread-176842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:14:27.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:14:27.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:14:28.061 [DEBUG] [Thread-176842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:14:28.061 [DEBUG] [Thread-176842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:14:28.109 [DEBUG] [Thread-176842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:14:28.109 [DEBUG] [Thread-176842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:14:28.118 [DEBUG] [Thread-176842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:14:28.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:14:28.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-04-11T21:14:28.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-04-11T21:14:28.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:14:28.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:14:28.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:14:28.153 [DEBUG] [Thread-176842] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:14:33.319 [DEBUG] [Thread-176844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:36.578 [DEBUG] [Thread-176845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:51.631 [DEBUG] [Thread-176846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:14:58.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:14:58.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:14:58.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-04-11T21:14:59.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 14, 22), 0.043, 100.009, 0.0, 15.8101, 11.8232, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:14:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:14:22
2026-04-11T21:14:59.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:15:00.116 [DEBUG] [Thread-176847] [transport.py] [_log()] starting thread (client mode): 0xa7951120
2026-04-11T21:15:00.116 [DEBUG] [Thread-176847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:15:00.136 [DEBUG] [Thread-176847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:15:00.136 [INFO] [Thread-176847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:15:00.139 [DEBUG] [Thread-176847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] client lang: <none>
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] server lang: <none>
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] kex follows: False
2026-04-11T21:15:00.140 [DEBUG] [Thread-176847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:15:00.141 [DEBUG] [Thread-176847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:15:00.141 [DEBUG] [Thread-176847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:15:00.141 [DEBUG] [Thread-176847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:15:00.141 [DEBUG] [Thread-176847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:15:00.141 [DEBUG] [Thread-176847] [transport.py] [_log()] Compression: none
2026-04-11T21:15:00.141 [DEBUG] [Thread-176847] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:15:00.159 [DEBUG] [Thread-176847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:15:00.160 [DEBUG] [Thread-176847] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:15:00.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:15:00.161 [DEBUG] [Thread-176847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:15:00.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:15:00.163 [DEBUG] [Thread-176847] [transport.py] [_log()] userauth is OK
2026-04-11T21:15:00.164 [DEBUG] [Thread-176847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:15:00.164 [DEBUG] [Thread-176847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:15:00.164 [DEBUG] [Thread-176847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:15:00.164 [DEBUG] [Thread-176847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:15:00.182 [INFO] [Thread-176847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:15:00.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:15:00.836 [DEBUG] [Thread-176847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:15:00.837 [DEBUG] [Thread-176847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:15:00.837 [DEBUG] [Thread-176847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:15:00.878 [DEBUG] [Thread-176847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:15:00.878 [DEBUG] [Thread-176847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:15:00.881 [DEBUG] [Thread-176847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:15:00.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:15:00.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:15:00.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:15:00.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:15:00.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:15:00.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:15:00.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:15:00.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:15:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:15:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.801852 -999.00  +11.70  15.24     97  +11.30 1 3 1 3 1     0    0 0.42 2.23 ----- 15.2 15.2 276.0 18.2 13.0 -1.4 12.8 -0.7 12.4 -1.0 12.8 -0.7
2026-04-11T21:15:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:15:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:15:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.801852
2026-04-11T21:15:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:15:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:15:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:15:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:15:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:15:00.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:14:22', tmtdew=0.043, humidity=100.009, cloud=0.0, wind=15.8101, temperature=11.8232, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:14:40.013', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:15:00.909 [DEBUG] [Thread-176847] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:15:01.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:15:01.011 [DEBUG] [Thread-176850] [transport.py] [_log()] starting thread (client mode): 0xb0f8f370
2026-04-11T21:15:01.011 [DEBUG] [Thread-176850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:15:01.026 [DEBUG] [Thread-176850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:15:01.026 [INFO] [Thread-176850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:15:01.035 [DEBUG] [Thread-176850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:15:01.035 [DEBUG] [Thread-176850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:15:01.035 [DEBUG] [Thread-176850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:15:01.035 [DEBUG] [Thread-176850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] client lang: <none>
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] server lang: <none>
2026-04-11T21:15:01.036 [DEBUG] [Thread-176850] [transport.py] [_log()] kex follows: False
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] Compression: none
2026-04-11T21:15:01.037 [DEBUG] [Thread-176850] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:15:01.096 [DEBUG] [Thread-176850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:15:01.097 [DEBUG] [Thread-176850] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:15:01.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:15:01.098 [DEBUG] [Thread-176850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:15:01.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:15:01.153 [DEBUG] [Thread-176850] [transport.py] [_log()] userauth is OK
2026-04-11T21:15:01.153 [DEBUG] [Thread-176850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:15:01.154 [DEBUG] [Thread-176850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:15:01.154 [DEBUG] [Thread-176850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:15:01.154 [DEBUG] [Thread-176850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:15:01.174 [INFO] [Thread-176850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:15:01.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:15:01.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:15:02.000 [DEBUG] [Thread-176850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:15:02.000 [DEBUG] [Thread-176850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:15:02.048 [DEBUG] [Thread-176850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:15:02.048 [DEBUG] [Thread-176850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:15:02.056 [DEBUG] [Thread-176850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:15:02.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:15:02.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-04-11T21:15:02.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-04-11T21:15:02.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:15:02.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:15:02.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:15:02.088 [DEBUG] [Thread-176850] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:15:06.668 [DEBUG] [Thread-176852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:15:21.720 [DEBUG] [Thread-176853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:15:25.960 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:15:25.961 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:15:32.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:15:32.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:15:32.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-04-11T21:15:33.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 14, 57), 0.037905, 100.043, 0.0, 17.5572, 11.873, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:15:33.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:14:57
2026-04-11T21:15:33.373 [DEBUG] [Thread-176854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:15:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:15:33.907 [DEBUG] [Thread-176855] [transport.py] [_log()] starting thread (client mode): 0xae5f13f0
2026-04-11T21:15:33.907 [DEBUG] [Thread-176855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:15:33.926 [DEBUG] [Thread-176855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:15:33.926 [INFO] [Thread-176855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] client lang: <none>
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] server lang: <none>
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] kex follows: False
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] Compression: none
2026-04-11T21:15:33.929 [DEBUG] [Thread-176855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:15:33.938 [DEBUG] [Thread-176855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:15:33.939 [DEBUG] [Thread-176855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:15:33.939 [DEBUG] [Thread-176855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:15:33.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:15:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:15:33.941 [DEBUG] [Thread-176855] [transport.py] [_log()] userauth is OK
2026-04-11T21:15:33.941 [DEBUG] [Thread-176855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:15:33.941 [DEBUG] [Thread-176855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:15:33.941 [DEBUG] [Thread-176855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:15:33.941 [DEBUG] [Thread-176855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:15:33.977 [INFO] [Thread-176855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:15:33.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:15:34.627 [DEBUG] [Thread-176855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:15:34.627 [DEBUG] [Thread-176855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:15:34.627 [DEBUG] [Thread-176855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:15:34.668 [DEBUG] [Thread-176855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:15:34.668 [DEBUG] [Thread-176855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:15:34.672 [DEBUG] [Thread-176855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:15:34.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:15:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:15:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:15:34.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:15:34.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:15:34.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:15:34.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:15:34.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:15:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:15:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.802199 -999.00  +11.70  11.73     97  +11.40 1 3 1 3 1     0    0 0.43 2.44 ----- 11.7 11.7 285.3 19.5 13.1 -1.1 12.9 -0.4 12.4 -0.4 12.8 -0.5
2026-04-11T21:15:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:15:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:15:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.802199
2026-04-11T21:15:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:15:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:15:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:15:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:15:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:15:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:14:57', tmtdew=0.037905, humidity=100.043, cloud=0.0, wind=17.5572, temperature=11.873, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:15:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:15:34.699 [DEBUG] [Thread-176855] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:15:34.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:15:34.792 [DEBUG] [Thread-176858] [transport.py] [_log()] starting thread (client mode): 0xae5f01c0
2026-04-11T21:15:34.792 [DEBUG] [Thread-176858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:15:34.806 [DEBUG] [Thread-176858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:15:34.806 [INFO] [Thread-176858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:15:34.814 [DEBUG] [Thread-176858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:15:34.814 [DEBUG] [Thread-176858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:15:34.814 [DEBUG] [Thread-176858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:15:34.814 [DEBUG] [Thread-176858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:34.814 [DEBUG] [Thread-176858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:15:34.814 [DEBUG] [Thread-176858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] client lang: <none>
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] server lang: <none>
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] kex follows: False
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] Compression: none
2026-04-11T21:15:34.815 [DEBUG] [Thread-176858] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:15:34.873 [DEBUG] [Thread-176858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:15:34.874 [DEBUG] [Thread-176858] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:15:34.874 [DEBUG] [Thread-176858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:15:34.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:15:34.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:15:34.930 [DEBUG] [Thread-176858] [transport.py] [_log()] userauth is OK
2026-04-11T21:15:34.930 [DEBUG] [Thread-176858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:15:34.930 [DEBUG] [Thread-176858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:15:34.930 [DEBUG] [Thread-176858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:15:34.930 [DEBUG] [Thread-176858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:15:34.949 [INFO] [Thread-176858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:15:34.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:15:34.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:15:35.769 [DEBUG] [Thread-176858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:15:35.769 [DEBUG] [Thread-176858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:15:35.817 [DEBUG] [Thread-176858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:15:35.817 [DEBUG] [Thread-176858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:15:35.827 [DEBUG] [Thread-176858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:15:35.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:15:35.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-04-11T21:15:35.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-04-11T21:15:35.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:15:35.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:15:35.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:15:35.865 [DEBUG] [Thread-176858] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:15:36.757 [DEBUG] [Thread-176860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:15:51.810 [DEBUG] [Thread-176861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:05.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:16:05.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:16:05.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:16:06.847 [DEBUG] [Thread-176862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:07.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 15, 33), 0.050605, 99.9594, 0.0, 17.6278, 11.8231, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:16:07.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:15:33
2026-04-11T21:16:07.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:16:07.659 [DEBUG] [Thread-176863] [transport.py] [_log()] starting thread (client mode): 0xae5f0e20
2026-04-11T21:16:07.660 [DEBUG] [Thread-176863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:16:07.679 [DEBUG] [Thread-176863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:16:07.679 [INFO] [Thread-176863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:16:07.682 [DEBUG] [Thread-176863] [transport.py] [_log()] client lang: <none>
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] server lang: <none>
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] kex follows: False
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] Compression: none
2026-04-11T21:16:07.683 [DEBUG] [Thread-176863] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:16:07.704 [DEBUG] [Thread-176863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:16:07.705 [DEBUG] [Thread-176863] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:16:07.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:16:07.706 [DEBUG] [Thread-176863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:16:07.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:16:07.708 [DEBUG] [Thread-176863] [transport.py] [_log()] userauth is OK
2026-04-11T21:16:07.708 [DEBUG] [Thread-176863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:16:07.708 [DEBUG] [Thread-176863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:16:07.708 [DEBUG] [Thread-176863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:16:07.708 [DEBUG] [Thread-176863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:16:07.728 [INFO] [Thread-176863] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:16:07.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:16:08.370 [DEBUG] [Thread-176863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:16:08.370 [DEBUG] [Thread-176863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:16:08.371 [DEBUG] [Thread-176863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:16:08.411 [DEBUG] [Thread-176863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:16:08.411 [DEBUG] [Thread-176863] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:16:08.415 [DEBUG] [Thread-176863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:16:08.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:16:08.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:16:08.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:16:08.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:16:08.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:16:08.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:16:08.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:16:08.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:16:08.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:16:08.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.802546 -999.00  +11.80  11.30     97  +11.40 1 3 1 3 1     0    0 0.44 2.65 ----- 11.3 11.3 289.0 16.0 13.0 -1.2 12.8 -0.4 12.4 -0.6 12.8 -0.7
2026-04-11T21:16:08.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:16:08.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:16:08.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.802546
2026-04-11T21:16:08.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:16:08.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:16:08.436 [DEBUG] [Thread-176863] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:16:08.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:16:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:16:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:16:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:15:33', tmtdew=0.050605, humidity=99.9594, cloud=0.0, wind=17.6278, temperature=11.8231, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:15:39.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:16:08.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:16:08.534 [DEBUG] [Thread-176866] [transport.py] [_log()] starting thread (client mode): 0xb0f56410
2026-04-11T21:16:08.534 [DEBUG] [Thread-176866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:16:08.549 [DEBUG] [Thread-176866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:16:08.549 [INFO] [Thread-176866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] client lang: <none>
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] server lang: <none>
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] kex follows: False
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:16:08.557 [DEBUG] [Thread-176866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:16:08.558 [DEBUG] [Thread-176866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:16:08.558 [DEBUG] [Thread-176866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:16:08.558 [DEBUG] [Thread-176866] [transport.py] [_log()] Compression: none
2026-04-11T21:16:08.558 [DEBUG] [Thread-176866] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:16:08.619 [DEBUG] [Thread-176866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:16:08.619 [DEBUG] [Thread-176866] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:16:08.620 [DEBUG] [Thread-176866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:16:08.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:16:08.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:16:08.678 [DEBUG] [Thread-176866] [transport.py] [_log()] userauth is OK
2026-04-11T21:16:08.678 [DEBUG] [Thread-176866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:16:08.679 [DEBUG] [Thread-176866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:16:08.679 [DEBUG] [Thread-176866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:16:08.688 [DEBUG] [Thread-176866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:16:08.707 [INFO] [Thread-176866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:16:08.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:16:08.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:16:09.512 [DEBUG] [Thread-176866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:16:09.512 [DEBUG] [Thread-176866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:16:09.560 [DEBUG] [Thread-176866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:16:09.560 [DEBUG] [Thread-176866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:16:09.570 [DEBUG] [Thread-176866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:16:09.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:16:09.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:16:09.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:16:09.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:16:09.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:16:09.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:16:09.606 [DEBUG] [Thread-176866] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:16:21.884 [DEBUG] [Thread-176868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:26.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:26.166 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:33.454 [DEBUG] [Thread-176869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:36.936 [DEBUG] [Thread-176870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:16:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:16:39.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:16:39.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-04-11T21:16:40.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 16, 8), 0.04556, 99.9926, 0.0, 18.0158, 11.8231, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:16:40.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:16:08
2026-04-11T21:16:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:16:41.447 [DEBUG] [Thread-176871] [transport.py] [_log()] starting thread (client mode): 0xa7953ee0
2026-04-11T21:16:41.447 [DEBUG] [Thread-176871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:16:41.458 [DEBUG] [Thread-176871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:16:41.458 [INFO] [Thread-176871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] client lang: <none>
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] server lang: <none>
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] kex follows: False
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:16:41.461 [DEBUG] [Thread-176871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:16:41.462 [DEBUG] [Thread-176871] [transport.py] [_log()] Compression: none
2026-04-11T21:16:41.462 [DEBUG] [Thread-176871] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:16:41.471 [DEBUG] [Thread-176871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:16:41.472 [DEBUG] [Thread-176871] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:16:41.472 [DEBUG] [Thread-176871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:16:41.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:16:41.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:16:41.474 [DEBUG] [Thread-176871] [transport.py] [_log()] userauth is OK
2026-04-11T21:16:41.474 [DEBUG] [Thread-176871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:16:41.474 [DEBUG] [Thread-176871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:16:41.474 [DEBUG] [Thread-176871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:16:41.474 [DEBUG] [Thread-176871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:16:41.499 [INFO] [Thread-176871] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:16:41.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:16:42.133 [DEBUG] [Thread-176871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:16:42.133 [DEBUG] [Thread-176871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:16:42.134 [DEBUG] [Thread-176871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:16:42.174 [DEBUG] [Thread-176871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:16:42.174 [DEBUG] [Thread-176871] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:16:42.178 [DEBUG] [Thread-176871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:16:42.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:16:42.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:16:42.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:16:42.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:16:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:16:42.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:16:42.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:16:42.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:16:42.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:16:42.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.802893 -999.00  +11.80  12.99     97  +11.40 1 3 1 3 1     0    0 0.45 2.88 ----- 13.0 13.0 291.9 18.9 13.0 -1.1 12.8 -0.3 12.4 -0.5 12.8 -0.5
2026-04-11T21:16:42.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:16:42.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:16:42.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.802893
2026-04-11T21:16:42.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:16:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:16:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:16:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:16:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:16:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:16:08', tmtdew=0.04556, humidity=99.9926, cloud=0.0, wind=18.0158, temperature=11.8231, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:16:09.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:16:42.204 [DEBUG] [Thread-176871] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:16:42.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:16:42.307 [DEBUG] [Thread-176874] [transport.py] [_log()] starting thread (client mode): 0xae508550
2026-04-11T21:16:42.307 [DEBUG] [Thread-176874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:16:42.323 [DEBUG] [Thread-176874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:16:42.323 [INFO] [Thread-176874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] client lang: <none>
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] server lang: <none>
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] kex follows: False
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:16:42.331 [DEBUG] [Thread-176874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:16:42.332 [DEBUG] [Thread-176874] [transport.py] [_log()] Compression: none
2026-04-11T21:16:42.332 [DEBUG] [Thread-176874] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:16:42.389 [DEBUG] [Thread-176874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:16:42.389 [DEBUG] [Thread-176874] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:16:42.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:16:42.390 [DEBUG] [Thread-176874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:16:42.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:16:42.446 [DEBUG] [Thread-176874] [transport.py] [_log()] userauth is OK
2026-04-11T21:16:42.447 [DEBUG] [Thread-176874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:16:42.447 [DEBUG] [Thread-176874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:16:42.447 [DEBUG] [Thread-176874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:16:42.447 [DEBUG] [Thread-176874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:16:42.470 [INFO] [Thread-176874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:16:42.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:16:42.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:16:43.243 [DEBUG] [Thread-176874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:16:43.244 [DEBUG] [Thread-176874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:16:43.292 [DEBUG] [Thread-176874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:16:43.292 [DEBUG] [Thread-176874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:16:43.301 [DEBUG] [Thread-176874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:16:43.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:16:43.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-04-11T21:16:43.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-04-11T21:16:43.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:16:43.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:16:43.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:16:43.339 [DEBUG] [Thread-176874] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:16:51.973 [DEBUG] [Thread-176876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:07.015 [DEBUG] [Thread-176877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:13.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:17:13.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:17:13.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-04-11T21:17:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 16, 44), -0.01387, 100.018, 0.0, 20.2543, 12.246, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:17:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:16:44
2026-04-11T21:17:15.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:17:15.166 [DEBUG] [Thread-176878] [transport.py] [_log()] starting thread (client mode): 0xb0f8fe50
2026-04-11T21:17:15.166 [DEBUG] [Thread-176878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:17:15.187 [DEBUG] [Thread-176878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:17:15.187 [INFO] [Thread-176878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] client lang: <none>
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] server lang: <none>
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] kex follows: False
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] Compression: none
2026-04-11T21:17:15.190 [DEBUG] [Thread-176878] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:17:15.207 [DEBUG] [Thread-176878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:17:15.208 [DEBUG] [Thread-176878] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:17:15.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:17:15.209 [DEBUG] [Thread-176878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:17:15.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:17:15.211 [DEBUG] [Thread-176878] [transport.py] [_log()] userauth is OK
2026-04-11T21:17:15.211 [DEBUG] [Thread-176878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:17:15.211 [DEBUG] [Thread-176878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:17:15.211 [DEBUG] [Thread-176878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:17:15.211 [DEBUG] [Thread-176878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:17:15.229 [INFO] [Thread-176878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:17:15.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:17:15.874 [DEBUG] [Thread-176878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:17:15.875 [DEBUG] [Thread-176878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:17:15.875 [DEBUG] [Thread-176878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:17:15.916 [DEBUG] [Thread-176878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:17:15.917 [DEBUG] [Thread-176878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:17:15.920 [DEBUG] [Thread-176878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:17:15.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:17:15.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:17:15.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:17:15.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:17:15.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:17:15.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:17:15.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:17:15.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:17:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:17:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.803240 -999.00  +11.80  12.45     97  +11.40 1 3 1 3 1     0    0 0.46 3.13 ----- 12.4 12.4 289.2 13.7 13.0 -1.0 12.9 -0.4 12.4 -0.8 12.9 -0.6
2026-04-11T21:17:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:17:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:17:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.803240
2026-04-11T21:17:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:17:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:17:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:17:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:17:15.946 [DEBUG] [Thread-176878] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:17:15.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:17:15.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:16:44', tmtdew=-0.01387, humidity=100.018, cloud=0.0, wind=20.2543, temperature=12.246, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:16:39.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:17:16.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:17:16.040 [DEBUG] [Thread-176881] [transport.py] [_log()] starting thread (client mode): 0xb0f8d9f0
2026-04-11T21:17:16.040 [DEBUG] [Thread-176881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:17:16.056 [DEBUG] [Thread-176881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:17:16.056 [INFO] [Thread-176881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:16.063 [DEBUG] [Thread-176881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] client lang: <none>
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] server lang: <none>
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] kex follows: False
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] Compression: none
2026-04-11T21:17:16.064 [DEBUG] [Thread-176881] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:17:16.123 [DEBUG] [Thread-176881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:17:16.123 [DEBUG] [Thread-176881] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:17:16.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:17:16.125 [DEBUG] [Thread-176881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:17:16.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:17:16.178 [DEBUG] [Thread-176881] [transport.py] [_log()] userauth is OK
2026-04-11T21:17:16.179 [DEBUG] [Thread-176881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:17:16.179 [DEBUG] [Thread-176881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:17:16.179 [DEBUG] [Thread-176881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:17:16.179 [DEBUG] [Thread-176881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:17:16.198 [INFO] [Thread-176881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:17:16.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:17:16.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:17:17.027 [DEBUG] [Thread-176881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:17:17.028 [DEBUG] [Thread-176881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:17:17.076 [DEBUG] [Thread-176881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:17:17.076 [DEBUG] [Thread-176881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:17:17.085 [DEBUG] [Thread-176881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:17:17.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:17:17.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-04-11T21:17:17.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-04-11T21:17:17.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:17:17.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:17:17.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:17:17.122 [DEBUG] [Thread-176881] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:17:22.052 [DEBUG] [Thread-176883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:26.370 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:26.372 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:33.532 [DEBUG] [Thread-176884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:37.104 [DEBUG] [Thread-176885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:17:47.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:17:47.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:17:47.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-04-11T21:17:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 17, 19), -0.004385, 99.9924, 0.0, 15.0516, 11.7398, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:17:48.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:17:19
2026-04-11T21:17:48.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:17:48.976 [DEBUG] [Thread-176886] [transport.py] [_log()] starting thread (client mode): 0xb0fce470
2026-04-11T21:17:48.976 [DEBUG] [Thread-176886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:17:48.988 [DEBUG] [Thread-176886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:17:48.988 [INFO] [Thread-176886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] client lang: <none>
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] server lang: <none>
2026-04-11T21:17:48.991 [DEBUG] [Thread-176886] [transport.py] [_log()] kex follows: False
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] Compression: none
2026-04-11T21:17:48.992 [DEBUG] [Thread-176886] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:17:49.011 [DEBUG] [Thread-176886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:17:49.011 [DEBUG] [Thread-176886] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:17:49.012 [DEBUG] [Thread-176886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:17:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:17:49.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:17:49.013 [DEBUG] [Thread-176886] [transport.py] [_log()] userauth is OK
2026-04-11T21:17:49.014 [DEBUG] [Thread-176886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:17:49.014 [DEBUG] [Thread-176886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:17:49.014 [DEBUG] [Thread-176886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:17:49.014 [DEBUG] [Thread-176886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:17:49.039 [INFO] [Thread-176886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:17:49.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:17:49.675 [DEBUG] [Thread-176886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:17:49.675 [DEBUG] [Thread-176886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:17:49.675 [DEBUG] [Thread-176886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:17:49.716 [DEBUG] [Thread-176886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:17:49.716 [DEBUG] [Thread-176886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:17:49.720 [DEBUG] [Thread-176886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:17:49.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:17:49.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:17:49.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:17:49.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:17:49.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:17:49.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:17:49.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:17:49.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:17:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:17:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.803588 -999.00  +11.80  12.17     97  +11.50 1 3 1 3 1     0    0 0.46 3.22 ----- 12.2 12.2 284.8 13.0 13.1 -1.0 12.8 -0.3 12.5 -0.3 12.9 -0.6
2026-04-11T21:17:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:17:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:17:49.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.803588
2026-04-11T21:17:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:17:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:17:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:17:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:17:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:17:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:17:19', tmtdew=-0.004385, humidity=99.9924, cloud=0.0, wind=15.0516, temperature=11.7398, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:17:10.003', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:17:49.748 [DEBUG] [Thread-176886] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:17:49.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:17:49.839 [DEBUG] [Thread-176889] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-11T21:17:49.839 [DEBUG] [Thread-176889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:17:49.856 [DEBUG] [Thread-176889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:17:49.856 [INFO] [Thread-176889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:17:49.863 [DEBUG] [Thread-176889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:17:49.863 [DEBUG] [Thread-176889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:17:49.863 [DEBUG] [Thread-176889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:17:49.863 [DEBUG] [Thread-176889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] client lang: <none>
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] server lang: <none>
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] kex follows: False
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] Compression: none
2026-04-11T21:17:49.864 [DEBUG] [Thread-176889] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:17:49.924 [DEBUG] [Thread-176889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:17:49.925 [DEBUG] [Thread-176889] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:17:49.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:17:49.926 [DEBUG] [Thread-176889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:17:49.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:17:49.987 [DEBUG] [Thread-176889] [transport.py] [_log()] userauth is OK
2026-04-11T21:17:49.988 [DEBUG] [Thread-176889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:17:49.988 [DEBUG] [Thread-176889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:17:49.988 [DEBUG] [Thread-176889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:17:49.988 [DEBUG] [Thread-176889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:17:50.008 [INFO] [Thread-176889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:17:50.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:17:50.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:17:50.854 [DEBUG] [Thread-176889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:17:50.855 [DEBUG] [Thread-176889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:17:50.903 [DEBUG] [Thread-176889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:17:50.903 [DEBUG] [Thread-176889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:17:50.912 [DEBUG] [Thread-176889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:17:50.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:17:50.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-04-11T21:17:50.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:17:50.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:17:50.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:17:50.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:17:50.949 [DEBUG] [Thread-176889] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:17:52.145 [DEBUG] [Thread-176891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:07.197 [DEBUG] [Thread-176892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:20.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:18:20.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:18:20.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:18:22.240 [DEBUG] [Thread-176893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:22.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 17, 54), 0.00633, 99.8859, 0.0, 15.2093, 12.1136, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:18:22.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:17:54
2026-04-11T21:18:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:18:22.821 [DEBUG] [Thread-176894] [transport.py] [_log()] starting thread (client mode): 0xb0fcc5b0
2026-04-11T21:18:22.821 [DEBUG] [Thread-176894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:18:22.841 [DEBUG] [Thread-176894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:18:22.841 [INFO] [Thread-176894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:18:22.844 [DEBUG] [Thread-176894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:18:22.844 [DEBUG] [Thread-176894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:18:22.844 [DEBUG] [Thread-176894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:18:22.844 [DEBUG] [Thread-176894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:22.844 [DEBUG] [Thread-176894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] client lang: <none>
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] server lang: <none>
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] kex follows: False
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:18:22.845 [DEBUG] [Thread-176894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:18:22.846 [DEBUG] [Thread-176894] [transport.py] [_log()] Compression: none
2026-04-11T21:18:22.846 [DEBUG] [Thread-176894] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:18:22.866 [DEBUG] [Thread-176894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:18:22.866 [DEBUG] [Thread-176894] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:18:22.867 [DEBUG] [Thread-176894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:18:22.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:18:22.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:18:22.869 [DEBUG] [Thread-176894] [transport.py] [_log()] userauth is OK
2026-04-11T21:18:22.869 [DEBUG] [Thread-176894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:18:22.869 [DEBUG] [Thread-176894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:18:22.869 [DEBUG] [Thread-176894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:18:22.869 [DEBUG] [Thread-176894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:18:22.885 [INFO] [Thread-176894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:18:22.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:18:23.488 [DEBUG] [Thread-176894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:18:23.488 [DEBUG] [Thread-176894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:18:23.489 [DEBUG] [Thread-176894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:18:23.529 [DEBUG] [Thread-176894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:18:23.529 [DEBUG] [Thread-176894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:18:23.533 [DEBUG] [Thread-176894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:18:23.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:18:23.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:18:23.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:18:23.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:18:23.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:18:23.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:18:23.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:18:23.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:18:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:18:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.804282 -999.00  +11.80   9.22     97  +11.50 1 3 1 3 1     0    0 0.44 2.58 ----- 9.2 9.2 290.2 11.3 13.1 -1.0 12.9 -0.3 12.5 -0.1 12.9 -0.7
2026-04-11T21:18:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:18:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:18:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.804282
2026-04-11T21:18:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:18:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:18:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:18:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:18:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:18:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:17:54', tmtdew=0.00633, humidity=99.8859, cloud=0.0, wind=15.2093, temperature=12.1136, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:18:09.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:18:23.563 [DEBUG] [Thread-176894] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:18:23.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:18:23.658 [DEBUG] [Thread-176897] [transport.py] [_log()] starting thread (client mode): 0xb0fcf010
2026-04-11T21:18:23.659 [DEBUG] [Thread-176897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:18:23.673 [DEBUG] [Thread-176897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:18:23.673 [INFO] [Thread-176897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:18:23.681 [DEBUG] [Thread-176897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:18:23.681 [DEBUG] [Thread-176897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] client lang: <none>
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] server lang: <none>
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] kex follows: False
2026-04-11T21:18:23.682 [DEBUG] [Thread-176897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:18:23.683 [DEBUG] [Thread-176897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:18:23.683 [DEBUG] [Thread-176897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:18:23.683 [DEBUG] [Thread-176897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:18:23.683 [DEBUG] [Thread-176897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:18:23.683 [DEBUG] [Thread-176897] [transport.py] [_log()] Compression: none
2026-04-11T21:18:23.683 [DEBUG] [Thread-176897] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:18:23.741 [DEBUG] [Thread-176897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:18:23.742 [DEBUG] [Thread-176897] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:18:23.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:18:23.743 [DEBUG] [Thread-176897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:18:23.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:18:23.800 [DEBUG] [Thread-176897] [transport.py] [_log()] userauth is OK
2026-04-11T21:18:23.801 [DEBUG] [Thread-176897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:18:23.801 [DEBUG] [Thread-176897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:18:23.801 [DEBUG] [Thread-176897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:18:23.801 [DEBUG] [Thread-176897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:18:23.823 [INFO] [Thread-176897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:18:23.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:18:23.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:18:24.642 [DEBUG] [Thread-176897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:18:24.642 [DEBUG] [Thread-176897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:18:24.692 [DEBUG] [Thread-176897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:18:24.693 [DEBUG] [Thread-176897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:18:24.702 [DEBUG] [Thread-176897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:18:24.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:18:24.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-04-11T21:18:24.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-04-11T21:18:24.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:18:24.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:18:24.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:18:24.739 [DEBUG] [Thread-176897] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:18:26.572 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:26.574 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:33.610 [DEBUG] [Thread-176899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:37.276 [DEBUG] [Thread-176900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:52.337 [DEBUG] [Thread-176901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:18:54.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:18:54.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:18:54.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-04-11T21:18:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 18, 30), -0.00446, 99.9927, 0.0, 13.5875, 11.7731, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:18:56.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:18:30
2026-04-11T21:18:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:18:56.535 [DEBUG] [Thread-176902] [transport.py] [_log()] starting thread (client mode): 0xb0f8d420
2026-04-11T21:18:56.535 [DEBUG] [Thread-176902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:18:56.555 [DEBUG] [Thread-176902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:18:56.555 [INFO] [Thread-176902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:18:56.558 [DEBUG] [Thread-176902] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:18:56.558 [DEBUG] [Thread-176902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] client lang: <none>
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] server lang: <none>
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] kex follows: False
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:18:56.559 [DEBUG] [Thread-176902] [transport.py] [_log()] Compression: none
2026-04-11T21:18:56.560 [DEBUG] [Thread-176902] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:18:56.578 [DEBUG] [Thread-176902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:18:56.578 [DEBUG] [Thread-176902] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:18:56.579 [DEBUG] [Thread-176902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:18:56.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:18:56.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:18:56.621 [DEBUG] [Thread-176902] [transport.py] [_log()] userauth is OK
2026-04-11T21:18:56.621 [DEBUG] [Thread-176902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:18:56.621 [DEBUG] [Thread-176902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:18:56.621 [DEBUG] [Thread-176902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:18:56.621 [DEBUG] [Thread-176902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:18:56.658 [INFO] [Thread-176902] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:18:56.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:18:57.326 [DEBUG] [Thread-176902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:18:57.326 [DEBUG] [Thread-176902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:18:57.327 [DEBUG] [Thread-176902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:18:57.368 [DEBUG] [Thread-176902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:18:57.368 [DEBUG] [Thread-176902] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:18:57.370 [DEBUG] [Thread-176902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:18:57.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:18:57.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:18:57.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:18:57.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:18:57.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:18:57.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:18:57.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:18:57.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.804629 -999.00  +11.90   9.21     97  +11.50 1 3 1 3 1     0    0 0.43 2.39 ----- 9.2 9.2 306.2 12.6 13.2 -0.9 12.9 -0.2 12.6 -0.4 12.9 -0.5
2026-04-11T21:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.804629
2026-04-11T21:18:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:18:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:18:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:18:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:18:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:18:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:18:30', tmtdew=-0.00446, humidity=99.9927, cloud=0.0, wind=13.5875, temperature=11.7731, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:18:39.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:18:57.393 [DEBUG] [Thread-176902] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:18: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-04-11T21:18:57.487 [DEBUG] [Thread-176905] [transport.py] [_log()] starting thread (client mode): 0xb0f8f5b0
2026-04-11T21:18:57.487 [DEBUG] [Thread-176905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:18:57.501 [DEBUG] [Thread-176905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:18:57.501 [INFO] [Thread-176905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] client lang: <none>
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] server lang: <none>
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] kex follows: False
2026-04-11T21:18:57.509 [DEBUG] [Thread-176905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:18:57.510 [DEBUG] [Thread-176905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:18:57.510 [DEBUG] [Thread-176905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:18:57.510 [DEBUG] [Thread-176905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:18:57.510 [DEBUG] [Thread-176905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:18:57.510 [DEBUG] [Thread-176905] [transport.py] [_log()] Compression: none
2026-04-11T21:18:57.510 [DEBUG] [Thread-176905] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:18:57.568 [DEBUG] [Thread-176905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:18:57.568 [DEBUG] [Thread-176905] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:18:57.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:18:57.570 [DEBUG] [Thread-176905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:18:57.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:18:57.624 [DEBUG] [Thread-176905] [transport.py] [_log()] userauth is OK
2026-04-11T21:18:57.625 [DEBUG] [Thread-176905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:18:57.625 [DEBUG] [Thread-176905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:18:57.625 [DEBUG] [Thread-176905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:18:57.625 [DEBUG] [Thread-176905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:18:57.644 [INFO] [Thread-176905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:18:57.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:18:57.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:18:58.454 [DEBUG] [Thread-176905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:18:58.454 [DEBUG] [Thread-176905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:18:58.502 [DEBUG] [Thread-176905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:18:58.502 [DEBUG] [Thread-176905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:18:58.510 [DEBUG] [Thread-176905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:18:58.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:18:58.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:18:58.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-04-11T21:18:58.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:18:58.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:18:58.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:18:58.544 [DEBUG] [Thread-176905] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:19:07.373 [DEBUG] [Thread-176907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:19:22.426 [DEBUG] [Thread-176908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:19:26.778 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:19:26.779 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:19:28.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:19:28.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:19:28.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-04-11T21:19:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 19, 5), -0.00446, 99.9929, 0.0, 13.9579, 11.7401, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:19:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:19:05
2026-04-11T21:19:30.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:19:30.328 [DEBUG] [Thread-176909] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa90
2026-04-11T21:19:30.328 [DEBUG] [Thread-176909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:19:30.350 [DEBUG] [Thread-176909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:19:30.351 [INFO] [Thread-176909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:19:30.354 [DEBUG] [Thread-176909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:19:30.354 [DEBUG] [Thread-176909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:19:30.354 [DEBUG] [Thread-176909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:19:30.354 [DEBUG] [Thread-176909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:19:30.354 [DEBUG] [Thread-176909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] client lang: <none>
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] server lang: <none>
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] kex follows: False
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:19:30.355 [DEBUG] [Thread-176909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:19:30.356 [DEBUG] [Thread-176909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:19:30.356 [DEBUG] [Thread-176909] [transport.py] [_log()] Compression: none
2026-04-11T21:19:30.356 [DEBUG] [Thread-176909] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:19:30.376 [DEBUG] [Thread-176909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:19:30.376 [DEBUG] [Thread-176909] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:19:30.377 [DEBUG] [Thread-176909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:19:30.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:19:30.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:19:30.379 [DEBUG] [Thread-176909] [transport.py] [_log()] userauth is OK
2026-04-11T21:19:30.379 [DEBUG] [Thread-176909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:19:30.380 [DEBUG] [Thread-176909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:19:30.380 [DEBUG] [Thread-176909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:19:30.380 [DEBUG] [Thread-176909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:19:30.398 [INFO] [Thread-176909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:19:30.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:19:31.060 [DEBUG] [Thread-176909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:19:31.060 [DEBUG] [Thread-176909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:19:31.060 [DEBUG] [Thread-176909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:19:31.101 [DEBUG] [Thread-176909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:19:31.101 [DEBUG] [Thread-176909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:19:31.104 [DEBUG] [Thread-176909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:19:31.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:19:31.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:19:31.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:19:31.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:19:31.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:19:31.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:19:31.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:19:31.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:19:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:19:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.804976 -999.00  +11.90  10.34     97  +11.50 1 3 1 3 1     0    0 0.46 2.61 ----- 10.3 10.3 298.2 13.1 13.2 -1.1 12.9 -0.2 12.6 -0.2 13.0 -0.4
2026-04-11T21:19:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:19:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:19:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.804976
2026-04-11T21:19:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:19:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:19:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:19:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:19:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:19:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:19:05', tmtdew=-0.00446, humidity=99.9929, cloud=0.0, wind=13.9579, temperature=11.7401, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:19:09.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:19:31.131 [DEBUG] [Thread-176909] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:19:31.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:19:31.224 [DEBUG] [Thread-176912] [transport.py] [_log()] starting thread (client mode): 0xae5f0400
2026-04-11T21:19:31.224 [DEBUG] [Thread-176912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:19:31.238 [DEBUG] [Thread-176912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:19:31.238 [INFO] [Thread-176912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:19:31.246 [DEBUG] [Thread-176912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] client lang: <none>
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] server lang: <none>
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] kex follows: False
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] Compression: none
2026-04-11T21:19:31.247 [DEBUG] [Thread-176912] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:19:31.305 [DEBUG] [Thread-176912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:19:31.305 [DEBUG] [Thread-176912] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:19:31.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:19:31.306 [DEBUG] [Thread-176912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:19:31.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:19:31.361 [DEBUG] [Thread-176912] [transport.py] [_log()] userauth is OK
2026-04-11T21:19:31.361 [DEBUG] [Thread-176912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:19:31.361 [DEBUG] [Thread-176912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:19:31.361 [DEBUG] [Thread-176912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:19:31.361 [DEBUG] [Thread-176912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:19:31.380 [INFO] [Thread-176912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:19:31.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:19:31.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:19:32.202 [DEBUG] [Thread-176912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:19:32.202 [DEBUG] [Thread-176912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:19:32.249 [DEBUG] [Thread-176912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:19:32.250 [DEBUG] [Thread-176912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:19:32.259 [DEBUG] [Thread-176912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:19:32.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:19:32.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-04-11T21:19:32.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:19:32.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:19:32.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:19:32.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:19:32.294 [DEBUG] [Thread-176912] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:19:33.673 [DEBUG] [Thread-176914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:19:37.462 [DEBUG] [Thread-176915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:19:52.520 [DEBUG] [Thread-176916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:20:02.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:20:02.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-04-11T21:20:03.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 19, 41), -0.02418, 100.085, 0.0, 15.0329, 12.3129, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:20:03.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:19:41
2026-04-11T21:20:04.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:20:04.245 [DEBUG] [Thread-176917] [transport.py] [_log()] starting thread (client mode): 0xb0f8cf70
2026-04-11T21:20:04.246 [DEBUG] [Thread-176917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:20:04.267 [DEBUG] [Thread-176917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:20:04.267 [INFO] [Thread-176917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] client lang: <none>
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] server lang: <none>
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] kex follows: False
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] Compression: none
2026-04-11T21:20:04.269 [DEBUG] [Thread-176917] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:20:04.278 [DEBUG] [Thread-176917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:20:04.279 [DEBUG] [Thread-176917] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:20:04.279 [DEBUG] [Thread-176917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:20:04.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:20:04.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:20:04.281 [DEBUG] [Thread-176917] [transport.py] [_log()] userauth is OK
2026-04-11T21:20:04.281 [DEBUG] [Thread-176917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:20:04.281 [DEBUG] [Thread-176917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:20:04.281 [DEBUG] [Thread-176917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:20:04.281 [DEBUG] [Thread-176917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:20:04.307 [INFO] [Thread-176917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:20:04.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:20:04.971 [DEBUG] [Thread-176917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:20:04.971 [DEBUG] [Thread-176917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:20:04.971 [DEBUG] [Thread-176917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:20:05.012 [DEBUG] [Thread-176917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:20:05.012 [DEBUG] [Thread-176917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:20:05.016 [DEBUG] [Thread-176917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:20:05.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:20:05.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:20:05.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:20:05.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:20:05.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:20:05.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:20:05.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:20:05.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:20:05.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:20:05.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.805324 -999.00  +11.90  11.10     97  +11.50 1 3 1 3 1     0    0 0.44 2.44 ----- 11.1 11.1 276.6 13.1 13.2 -1.3 13.0 -0.2 12.6 -0.2 13.0 -0.6
2026-04-11T21:20:05.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:20:05.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:20:05.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.805324
2026-04-11T21:20:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:20:05.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:20:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:20:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:20:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:20:05.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:19:41', tmtdew=-0.02418, humidity=100.085, cloud=0.0, wind=15.0329, temperature=12.3129, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:19:39.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:20:05.058 [DEBUG] [Thread-176917] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:20:05.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:20:05.152 [DEBUG] [Thread-176920] [transport.py] [_log()] starting thread (client mode): 0xae509f00
2026-04-11T21:20:05.152 [DEBUG] [Thread-176920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:20:05.167 [DEBUG] [Thread-176920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:20:05.167 [INFO] [Thread-176920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:20:05.175 [DEBUG] [Thread-176920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:20:05.175 [DEBUG] [Thread-176920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:20:05.176 [DEBUG] [Thread-176920] [transport.py] [_log()] client lang: <none>
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] server lang: <none>
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] kex follows: False
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] Compression: none
2026-04-11T21:20:05.177 [DEBUG] [Thread-176920] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:20:05.234 [DEBUG] [Thread-176920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:20:05.235 [DEBUG] [Thread-176920] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:20:05.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:20:05.236 [DEBUG] [Thread-176920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:20:05.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:20:05.293 [DEBUG] [Thread-176920] [transport.py] [_log()] userauth is OK
2026-04-11T21:20:05.293 [DEBUG] [Thread-176920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:20:05.294 [DEBUG] [Thread-176920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:20:05.294 [DEBUG] [Thread-176920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:20:05.294 [DEBUG] [Thread-176920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:20:05.319 [INFO] [Thread-176920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:20:05.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:20:05.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:20:06.215 [DEBUG] [Thread-176920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:20:06.215 [DEBUG] [Thread-176920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:20:06.263 [DEBUG] [Thread-176920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:20:06.263 [DEBUG] [Thread-176920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:20:06.272 [DEBUG] [Thread-176920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:20:06.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:20:06.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-04-11T21:20:06.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-04-11T21:20:06.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:20:06.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:20:06.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:20:06.309 [DEBUG] [Thread-176920] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:20:07.556 [DEBUG] [Thread-176922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:22.607 [DEBUG] [Thread-176923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:26.984 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:26.985 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:33.724 [DEBUG] [Thread-176924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:36.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:20:36.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:20:36.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-04-11T21:20:37.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 20, 16), 0.050465, 99.9603, 0.0, 15.034, 11.8236, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:20:37.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:20:16
2026-04-11T21:20:37.643 [DEBUG] [Thread-176925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:20:37.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:20:38.137 [DEBUG] [Thread-176926] [transport.py] [_log()] starting thread (client mode): 0xae5f0e50
2026-04-11T21:20:38.137 [DEBUG] [Thread-176926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:20:38.157 [DEBUG] [Thread-176926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:20:38.157 [INFO] [Thread-176926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] client lang: <none>
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] server lang: <none>
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] kex follows: False
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:20:38.159 [DEBUG] [Thread-176926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:20:38.160 [DEBUG] [Thread-176926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:20:38.160 [DEBUG] [Thread-176926] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:20:38.160 [DEBUG] [Thread-176926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:20:38.160 [DEBUG] [Thread-176926] [transport.py] [_log()] Compression: none
2026-04-11T21:20:38.160 [DEBUG] [Thread-176926] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:20:38.171 [DEBUG] [Thread-176926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:20:38.172 [DEBUG] [Thread-176926] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:20:38.172 [DEBUG] [Thread-176926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:20:38.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:20:38.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:20:38.175 [DEBUG] [Thread-176926] [transport.py] [_log()] userauth is OK
2026-04-11T21:20:38.175 [DEBUG] [Thread-176926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:20:38.175 [DEBUG] [Thread-176926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:20:38.175 [DEBUG] [Thread-176926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:20:38.175 [DEBUG] [Thread-176926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:20:38.193 [INFO] [Thread-176926] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:20:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:20:38.830 [DEBUG] [Thread-176926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:20:38.830 [DEBUG] [Thread-176926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:20:38.831 [DEBUG] [Thread-176926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:20:38.871 [DEBUG] [Thread-176926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:20:38.871 [DEBUG] [Thread-176926] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:20:38.874 [DEBUG] [Thread-176926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:20:38.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:20:38.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:20:38.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:20:38.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:20:38.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:20:38.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:20:38.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:20:38.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:20:38.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:20:38.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.805671 -999.00  +11.90  12.01     97  +11.50 1 3 1 3 1     0    0 0.44 2.35 ----- 12.0 12.0 290.6 13.0 13.2 -1.2 13.0 -0.3 12.5 -0.7 13.0 -0.5
2026-04-11T21:20:38.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:20:38.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:20:38.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.805671
2026-04-11T21:20:38.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:20:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:20:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:20:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:20:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:20:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:20:16', tmtdew=0.050465, humidity=99.9603, cloud=0.0, wind=15.034, temperature=11.8236, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:20:09.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:20:38.900 [DEBUG] [Thread-176926] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:20:38.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:20:38.993 [DEBUG] [Thread-176929] [transport.py] [_log()] starting thread (client mode): 0xb0f8ccd0
2026-04-11T21:20:38.993 [DEBUG] [Thread-176929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:20:39.008 [DEBUG] [Thread-176929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:20:39.008 [INFO] [Thread-176929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:20:39.015 [DEBUG] [Thread-176929] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:20:39.015 [DEBUG] [Thread-176929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] client lang: <none>
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] server lang: <none>
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] kex follows: False
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] Compression: none
2026-04-11T21:20:39.016 [DEBUG] [Thread-176929] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:20:39.073 [DEBUG] [Thread-176929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:20:39.074 [DEBUG] [Thread-176929] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:20:39.074 [DEBUG] [Thread-176929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:20:39.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:20:39.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:20:39.130 [DEBUG] [Thread-176929] [transport.py] [_log()] userauth is OK
2026-04-11T21:20:39.131 [DEBUG] [Thread-176929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:20:39.131 [DEBUG] [Thread-176929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:20:39.131 [DEBUG] [Thread-176929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:20:39.131 [DEBUG] [Thread-176929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:20:39.154 [INFO] [Thread-176929] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:20:39.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:20:39.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:20:39.997 [DEBUG] [Thread-176929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:20:39.997 [DEBUG] [Thread-176929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:20:40.045 [DEBUG] [Thread-176929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:20:40.045 [DEBUG] [Thread-176929] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:20:40.054 [DEBUG] [Thread-176929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:20:40.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:20:40.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-04-11T21:20:40.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-04-11T21:20:40.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:20:40.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:20:40.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:20:40.091 [DEBUG] [Thread-176929] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:20:52.675 [DEBUG] [Thread-176931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:07.721 [DEBUG] [Thread-176932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:10.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:21:10.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:21:10.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-04-11T21:21:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 20, 51), -0.0041, 99.9539, 0.0, 12.8102, 12.2142, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:21:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:20:51
2026-04-11T21:21:11.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:21:11.925 [DEBUG] [Thread-176933] [transport.py] [_log()] starting thread (client mode): 0xb0fccf70
2026-04-11T21:21:11.925 [DEBUG] [Thread-176933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:21:11.945 [DEBUG] [Thread-176933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:21:11.945 [INFO] [Thread-176933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] client lang: <none>
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] server lang: <none>
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] kex follows: False
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] Compression: none
2026-04-11T21:21:11.948 [DEBUG] [Thread-176933] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:21:11.967 [DEBUG] [Thread-176933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:21:11.968 [DEBUG] [Thread-176933] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:21:11.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:21:11.969 [DEBUG] [Thread-176933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:21:11.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:21:11.971 [DEBUG] [Thread-176933] [transport.py] [_log()] userauth is OK
2026-04-11T21:21:11.971 [DEBUG] [Thread-176933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:21:11.971 [DEBUG] [Thread-176933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:21:11.971 [DEBUG] [Thread-176933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:21:11.971 [DEBUG] [Thread-176933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:21:11.996 [INFO] [Thread-176933] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:21:11.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:21:12.596 [DEBUG] [Thread-176933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:21:12.597 [DEBUG] [Thread-176933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:21:12.597 [DEBUG] [Thread-176933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:21:12.638 [DEBUG] [Thread-176933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:21:12.639 [DEBUG] [Thread-176933] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:21:12.642 [DEBUG] [Thread-176933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:21:12.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:21:12.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:21:12.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:21:12.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:21:12.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:21:12.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:21:12.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:21:12.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:21:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:21:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.806018 -999.00  +11.80  12.28     97  +11.40 1 3 1 3 1     0    0 0.43 1.96 ----- 12.3 12.3 295.8 16.6 13.2 -1.1 13.0 -0.3 12.6 -0.5 13.0 -0.6
2026-04-11T21:21:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:21:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:21:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.806018
2026-04-11T21:21:12.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:21:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:21:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:21:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:21:12.669 [DEBUG] [Thread-176933] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:21:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:21:12.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:20:51', tmtdew=-0.0041, humidity=99.9539, cloud=0.0, wind=12.8102, temperature=12.2142, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:20:39.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:21:12.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:21:12.763 [DEBUG] [Thread-176936] [transport.py] [_log()] starting thread (client mode): 0xae518f70
2026-04-11T21:21:12.763 [DEBUG] [Thread-176936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:21:12.777 [DEBUG] [Thread-176936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:21:12.778 [INFO] [Thread-176936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] client lang: <none>
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] server lang: <none>
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] kex follows: False
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:21:12.785 [DEBUG] [Thread-176936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:21:12.786 [DEBUG] [Thread-176936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:21:12.786 [DEBUG] [Thread-176936] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:21:12.786 [DEBUG] [Thread-176936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:21:12.786 [DEBUG] [Thread-176936] [transport.py] [_log()] Compression: none
2026-04-11T21:21:12.786 [DEBUG] [Thread-176936] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:21:12.842 [DEBUG] [Thread-176936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:21:12.842 [DEBUG] [Thread-176936] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:21:12.843 [DEBUG] [Thread-176936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:21:12.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:21:12.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:21:12.898 [DEBUG] [Thread-176936] [transport.py] [_log()] userauth is OK
2026-04-11T21:21:12.899 [DEBUG] [Thread-176936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:21:12.899 [DEBUG] [Thread-176936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:21:12.899 [DEBUG] [Thread-176936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:21:12.899 [DEBUG] [Thread-176936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:21:12.917 [INFO] [Thread-176936] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:21:12.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:21:12.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:21:13.771 [DEBUG] [Thread-176936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:21:13.772 [DEBUG] [Thread-176936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:21:13.819 [DEBUG] [Thread-176936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:21:13.819 [DEBUG] [Thread-176936] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:21:13.828 [DEBUG] [Thread-176936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:21:13.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:21:13.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:21:13.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:21:13.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:21:13.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:21:13.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:21:13.864 [DEBUG] [Thread-176936] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:21:22.756 [DEBUG] [Thread-176938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:27.189 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:27.190 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:33.781 [DEBUG] [Thread-176939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:37.817 [DEBUG] [Thread-176940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:21:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:21:43.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:21:43.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:21:45.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 21, 27), -0.00711, 100.01, 0.0, 13.6933, 11.7737, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:21:45.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:21:27
2026-04-11T21:21:45.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:21:45.706 [DEBUG] [Thread-176941] [transport.py] [_log()] starting thread (client mode): 0xae5f1240
2026-04-11T21:21:45.707 [DEBUG] [Thread-176941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:21:45.719 [DEBUG] [Thread-176941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:21:45.719 [INFO] [Thread-176941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:45.720 [DEBUG] [Thread-176941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] client lang: <none>
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] server lang: <none>
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] kex follows: False
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] Compression: none
2026-04-11T21:21:45.721 [DEBUG] [Thread-176941] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:21:45.733 [DEBUG] [Thread-176941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:21:45.734 [DEBUG] [Thread-176941] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:21:45.734 [DEBUG] [Thread-176941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:21:45.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:21:45.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:21:45.735 [DEBUG] [Thread-176941] [transport.py] [_log()] userauth is OK
2026-04-11T21:21:45.736 [DEBUG] [Thread-176941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:21:45.736 [DEBUG] [Thread-176941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:21:45.736 [DEBUG] [Thread-176941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:21:45.736 [DEBUG] [Thread-176941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:21:45.755 [INFO] [Thread-176941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:21:45.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:21:46.366 [DEBUG] [Thread-176941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:21:46.367 [DEBUG] [Thread-176941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:21:46.367 [DEBUG] [Thread-176941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:21:46.408 [DEBUG] [Thread-176941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:21:46.408 [DEBUG] [Thread-176941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:21:46.412 [DEBUG] [Thread-176941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:21:46.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:21:46.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:21:46.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:21:46.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:21:46.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:21:46.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:21:46.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:21:46.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:21:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:21:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.806365 -999.00  +11.80  12.97     97  +11.40 1 3 1 3 1     0    0 0.42 1.70 ----- 13.0 13.0 294.2 16.1 13.2 -1.1 13.0 -0.4 12.6 -0.3 13.0 -0.8
2026-04-11T21:21:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:21:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:21:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.806365
2026-04-11T21:21:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:21:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:21:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:21:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:21:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:21:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:21:27', tmtdew=-0.00711, humidity=100.01, cloud=0.0, wind=13.6933, temperature=11.7737, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:21:09.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:21:46.438 [DEBUG] [Thread-176941] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:21:46.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:21:46.544 [DEBUG] [Thread-176944] [transport.py] [_log()] starting thread (client mode): 0xb0fcf280
2026-04-11T21:21:46.544 [DEBUG] [Thread-176944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:21:46.559 [DEBUG] [Thread-176944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:21:46.559 [INFO] [Thread-176944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:21:46.567 [DEBUG] [Thread-176944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:21:46.567 [DEBUG] [Thread-176944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:21:46.567 [DEBUG] [Thread-176944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:21:46.567 [DEBUG] [Thread-176944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] client lang: <none>
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] server lang: <none>
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] kex follows: False
2026-04-11T21:21:46.568 [DEBUG] [Thread-176944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:21:46.569 [DEBUG] [Thread-176944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:21:46.569 [DEBUG] [Thread-176944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:21:46.569 [DEBUG] [Thread-176944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:21:46.569 [DEBUG] [Thread-176944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:21:46.569 [DEBUG] [Thread-176944] [transport.py] [_log()] Compression: none
2026-04-11T21:21:46.569 [DEBUG] [Thread-176944] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:21:46.627 [DEBUG] [Thread-176944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:21:46.628 [DEBUG] [Thread-176944] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:21:46.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:21:46.629 [DEBUG] [Thread-176944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:21:46.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:21:46.686 [DEBUG] [Thread-176944] [transport.py] [_log()] userauth is OK
2026-04-11T21:21:46.687 [DEBUG] [Thread-176944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:21:46.687 [DEBUG] [Thread-176944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:21:46.687 [DEBUG] [Thread-176944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:21:46.687 [DEBUG] [Thread-176944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:21:46.711 [INFO] [Thread-176944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:21:46.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:21:46.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:21:47.548 [DEBUG] [Thread-176944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:21:47.548 [DEBUG] [Thread-176944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:21:47.596 [DEBUG] [Thread-176944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:21:47.596 [DEBUG] [Thread-176944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:21:47.605 [DEBUG] [Thread-176944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:21:47.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:21:47.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:21:47.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:21:47.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:21:47.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:21:47.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:21:47.641 [DEBUG] [Thread-176944] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:21:52.854 [DEBUG] [Thread-176946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:07.909 [DEBUG] [Thread-176947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:22:17.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:22:17.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:22:18.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 22, 2), -0.009645, 100.027, 0.0, 14.8223, 11.7903, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:22:18.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:22:02
2026-04-11T21:22:19.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:22:19.510 [DEBUG] [Thread-176948] [transport.py] [_log()] starting thread (client mode): 0xb0f55ea0
2026-04-11T21:22:19.511 [DEBUG] [Thread-176948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:22:19.531 [DEBUG] [Thread-176948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:22:19.531 [INFO] [Thread-176948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] client lang: <none>
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] server lang: <none>
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] kex follows: False
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] Compression: none
2026-04-11T21:22:19.533 [DEBUG] [Thread-176948] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:22:19.545 [DEBUG] [Thread-176948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:22:19.546 [DEBUG] [Thread-176948] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:22:19.546 [DEBUG] [Thread-176948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:22:19.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:22:19.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:22:19.548 [DEBUG] [Thread-176948] [transport.py] [_log()] userauth is OK
2026-04-11T21:22:19.548 [DEBUG] [Thread-176948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:22:19.548 [DEBUG] [Thread-176948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:22:19.548 [DEBUG] [Thread-176948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:22:19.548 [DEBUG] [Thread-176948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:22:19.583 [INFO] [Thread-176948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:22:19.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:22:20.267 [DEBUG] [Thread-176948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:22:20.267 [DEBUG] [Thread-176948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:22:20.268 [DEBUG] [Thread-176948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:22:20.309 [DEBUG] [Thread-176948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:22:20.309 [DEBUG] [Thread-176948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:22:20.311 [DEBUG] [Thread-176948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:22:20.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:22:20.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:22:20.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:22:20.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:22:20.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:22:20.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:22:20.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:22:20.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:22:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:22:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.806712 -999.00  +11.80  10.59     97  +11.40 1 3 1 3 1     0    0 0.42 1.69 ----- 10.6 10.6 286.7 15.0 13.2 -1.2 13.0 -0.1 12.7 -0.4 13.0 -0.6
2026-04-11T21:22:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:22:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:22:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.806712
2026-04-11T21:22:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:22:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:22:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:22:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:22:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:22:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:22:02', tmtdew=-0.009645, humidity=100.027, cloud=0.0, wind=14.8223, temperature=11.7903, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:21:39.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:22:20.334 [DEBUG] [Thread-176948] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:22:20.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:22:20.422 [DEBUG] [Thread-176951] [transport.py] [_log()] starting thread (client mode): 0xa79510c0
2026-04-11T21:22:20.422 [DEBUG] [Thread-176951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:22:20.437 [DEBUG] [Thread-176951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:22:20.437 [INFO] [Thread-176951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:20.445 [DEBUG] [Thread-176951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] client lang: <none>
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] server lang: <none>
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] kex follows: False
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:22:20.446 [DEBUG] [Thread-176951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:22:20.447 [DEBUG] [Thread-176951] [transport.py] [_log()] Compression: none
2026-04-11T21:22:20.447 [DEBUG] [Thread-176951] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:22:20.504 [DEBUG] [Thread-176951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:22:20.505 [DEBUG] [Thread-176951] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:22:20.506 [DEBUG] [Thread-176951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:22:20.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:22:20.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:22:20.563 [DEBUG] [Thread-176951] [transport.py] [_log()] userauth is OK
2026-04-11T21:22:20.563 [DEBUG] [Thread-176951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:22:20.564 [DEBUG] [Thread-176951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:22:20.564 [DEBUG] [Thread-176951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:22:20.564 [DEBUG] [Thread-176951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:22:20.583 [INFO] [Thread-176951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:22:20.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:22:20.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:22:21.459 [DEBUG] [Thread-176951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:22:21.460 [DEBUG] [Thread-176951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:22:21.507 [DEBUG] [Thread-176951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:22:21.507 [DEBUG] [Thread-176951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:22:21.516 [DEBUG] [Thread-176951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:22:21.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:22:21.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-04-11T21:22:21.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-04-11T21:22:21.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:22:21.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:22:21.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:22:21.553 [DEBUG] [Thread-176951] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:22:22.947 [DEBUG] [Thread-176953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:27.390 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:27.392 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:33.867 [DEBUG] [Thread-176954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:38.002 [DEBUG] [Thread-176955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:22:51.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:22:51.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:22:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 22, 38), -0.03993, 100.186, 0.0, 13.8334, 12.6785, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:22:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:22:38
2026-04-11T21:22:53.041 [DEBUG] [Thread-176956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:22:53.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:22:53.432 [DEBUG] [Thread-176957] [transport.py] [_log()] starting thread (client mode): 0xa7952cb0
2026-04-11T21:22:53.432 [DEBUG] [Thread-176957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:22:53.451 [DEBUG] [Thread-176957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:22:53.451 [INFO] [Thread-176957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:22:53.454 [DEBUG] [Thread-176957] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] client lang: <none>
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] server lang: <none>
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] kex follows: False
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:22:53.455 [DEBUG] [Thread-176957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:22:53.456 [DEBUG] [Thread-176957] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:22:53.456 [DEBUG] [Thread-176957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:22:53.456 [DEBUG] [Thread-176957] [transport.py] [_log()] Compression: none
2026-04-11T21:22:53.456 [DEBUG] [Thread-176957] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:22:53.472 [DEBUG] [Thread-176957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:22:53.472 [DEBUG] [Thread-176957] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:22:53.473 [DEBUG] [Thread-176957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:22:53.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:22:53.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:22:53.475 [DEBUG] [Thread-176957] [transport.py] [_log()] userauth is OK
2026-04-11T21:22:53.475 [DEBUG] [Thread-176957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:22:53.475 [DEBUG] [Thread-176957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:22:53.475 [DEBUG] [Thread-176957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:22:53.475 [DEBUG] [Thread-176957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:22:53.499 [INFO] [Thread-176957] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:22:53.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:22:54.142 [DEBUG] [Thread-176957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:22:54.142 [DEBUG] [Thread-176957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:22:54.143 [DEBUG] [Thread-176957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:22:54.184 [DEBUG] [Thread-176957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:22:54.184 [DEBUG] [Thread-176957] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:22:54.187 [DEBUG] [Thread-176957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:22:54.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:22:54.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:22:54.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:22:54.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:22:54.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:22:54.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:22:54.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:22:54.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:22:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:22:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.807060 -999.00  +11.80  11.37     97  +11.40 1 3 1 3 1     0    0 0.43 1.68 ----- 11.4 11.4 296.5 18.0 13.2 -1.0 13.0 -0.4 12.6 -0.3 13.0 -0.7
2026-04-11T21:22:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:22:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:22:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.807060
2026-04-11T21:22:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:22:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:22:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:22:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:22:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:22:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:22:38', tmtdew=-0.03993, humidity=100.186, cloud=0.0, wind=13.8334, temperature=12.6785, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:22:09.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:22:54.210 [DEBUG] [Thread-176957] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:22:54.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:22:54.293 [DEBUG] [Thread-176960] [transport.py] [_log()] starting thread (client mode): 0xae518c10
2026-04-11T21:22:54.293 [DEBUG] [Thread-176960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:22:54.310 [DEBUG] [Thread-176960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:22:54.310 [INFO] [Thread-176960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:22:54.317 [DEBUG] [Thread-176960] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:22:54.317 [DEBUG] [Thread-176960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] client lang: <none>
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] server lang: <none>
2026-04-11T21:22:54.318 [DEBUG] [Thread-176960] [transport.py] [_log()] kex follows: False
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] Compression: none
2026-04-11T21:22:54.319 [DEBUG] [Thread-176960] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:22:54.375 [DEBUG] [Thread-176960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:22:54.376 [DEBUG] [Thread-176960] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:22:54.376 [DEBUG] [Thread-176960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:22:54.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:22:54.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:22:54.431 [DEBUG] [Thread-176960] [transport.py] [_log()] userauth is OK
2026-04-11T21:22:54.431 [DEBUG] [Thread-176960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:22:54.431 [DEBUG] [Thread-176960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:22:54.431 [DEBUG] [Thread-176960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:22:54.431 [DEBUG] [Thread-176960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:22:54.453 [INFO] [Thread-176960] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:22:54.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:22:54.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:22:55.280 [DEBUG] [Thread-176960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:22:55.280 [DEBUG] [Thread-176960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:22:55.328 [DEBUG] [Thread-176960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:22:55.329 [DEBUG] [Thread-176960] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:22:55.338 [DEBUG] [Thread-176960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:22:55.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:22:55.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-04-11T21:22:55.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-04-11T21:22:55.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:22:55.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:22:55.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:22:55.372 [DEBUG] [Thread-176960] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:23:08.074 [DEBUG] [Thread-176962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:23.121 [DEBUG] [Thread-176963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:23:25.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:23:25.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:23:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 23, 13), -0.00206, 99.977, 0.0, 13.5875, 11.7571, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:23:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:23:13
2026-04-11T21:23:26.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:23:27.158 [DEBUG] [Thread-176964] [transport.py] [_log()] starting thread (client mode): 0xb0f8c220
2026-04-11T21:23:27.158 [DEBUG] [Thread-176964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:23:27.180 [DEBUG] [Thread-176964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:23:27.180 [INFO] [Thread-176964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:23:27.183 [DEBUG] [Thread-176964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:23:27.183 [DEBUG] [Thread-176964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:23:27.183 [DEBUG] [Thread-176964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:23:27.183 [DEBUG] [Thread-176964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:23:27.183 [DEBUG] [Thread-176964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] client lang: <none>
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] server lang: <none>
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] kex follows: False
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:23:27.184 [DEBUG] [Thread-176964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:23:27.185 [DEBUG] [Thread-176964] [transport.py] [_log()] Compression: none
2026-04-11T21:23:27.185 [DEBUG] [Thread-176964] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:23:27.203 [DEBUG] [Thread-176964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:23:27.204 [DEBUG] [Thread-176964] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:23:27.204 [DEBUG] [Thread-176964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:23:27.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:23:27.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:23:27.206 [DEBUG] [Thread-176964] [transport.py] [_log()] userauth is OK
2026-04-11T21:23:27.207 [DEBUG] [Thread-176964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:23:27.207 [DEBUG] [Thread-176964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:23:27.207 [DEBUG] [Thread-176964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:23:27.207 [DEBUG] [Thread-176964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:23:27.242 [INFO] [Thread-176964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:23:27.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:23:27.594 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:27.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:27.882 [DEBUG] [Thread-176964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:23:27.882 [DEBUG] [Thread-176964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:23:27.883 [DEBUG] [Thread-176964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:23:27.924 [DEBUG] [Thread-176964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:23:27.924 [DEBUG] [Thread-176964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:23:27.927 [DEBUG] [Thread-176964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:23:27.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:23:27.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:23:27.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:23:27.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:23:27.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:23:27.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:23:27.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:23:27.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:23:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:23:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.807754 -999.00  +11.80   9.60     97  +11.40 1 3 1 3 1     0    0 0.42 1.54 ----- 9.6 9.6 290.4 13.0 13.2 -1.1 13.0 -0.3 12.6 -0.4 13.0 -0.7
2026-04-11T21:23:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:23:27.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:23:27.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.807754
2026-04-11T21:23:27.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:23:27.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:23:27.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:23:27.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:23:27.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:23:27.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:23:13', tmtdew=-0.00206, humidity=99.977, cloud=0.0, wind=13.5875, temperature=11.7571, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:23:09.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:23:27.951 [DEBUG] [Thread-176964] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:23:28.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:23:28.048 [DEBUG] [Thread-176967] [transport.py] [_log()] starting thread (client mode): 0xb0fcd510
2026-04-11T21:23:28.048 [DEBUG] [Thread-176967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:23:28.063 [DEBUG] [Thread-176967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:23:28.063 [INFO] [Thread-176967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:23:28.070 [DEBUG] [Thread-176967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:23:28.070 [DEBUG] [Thread-176967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] client lang: <none>
2026-04-11T21:23:28.071 [DEBUG] [Thread-176967] [transport.py] [_log()] server lang: <none>
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] kex follows: False
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] Compression: none
2026-04-11T21:23:28.072 [DEBUG] [Thread-176967] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:23:28.127 [DEBUG] [Thread-176967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:23:28.128 [DEBUG] [Thread-176967] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:23:28.128 [DEBUG] [Thread-176967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:23:28.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:23:28.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:23:28.183 [DEBUG] [Thread-176967] [transport.py] [_log()] userauth is OK
2026-04-11T21:23:28.184 [DEBUG] [Thread-176967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:23:28.184 [DEBUG] [Thread-176967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:23:28.184 [DEBUG] [Thread-176967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:23:28.184 [DEBUG] [Thread-176967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:23:28.206 [INFO] [Thread-176967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:23:28.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:23:28.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:23:29.028 [DEBUG] [Thread-176967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:23:29.028 [DEBUG] [Thread-176967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:23:29.076 [DEBUG] [Thread-176967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:23:29.076 [DEBUG] [Thread-176967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:23:29.086 [DEBUG] [Thread-176967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:23:29.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:23:29.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:23:29.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-04-11T21:23:29.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:23:29.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:23:29.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:23:29.123 [DEBUG] [Thread-176967] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:23:33.926 [DEBUG] [Thread-176969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:38.155 [DEBUG] [Thread-176970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:53.206 [DEBUG] [Thread-176971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:23:59.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:23:59.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:23:59.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-04-11T21:24:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 23, 48), -0.00923, 99.9873, 0.0, 13.5864, 12.2806, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:24:00.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:23:48
2026-04-11T21:24:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:24:00.944 [DEBUG] [Thread-176972] [transport.py] [_log()] starting thread (client mode): 0xae5f0730
2026-04-11T21:24:00.944 [DEBUG] [Thread-176972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:24:00.965 [DEBUG] [Thread-176972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:24:00.966 [INFO] [Thread-176972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] client lang: <none>
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] server lang: <none>
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] kex follows: False
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] Compression: none
2026-04-11T21:24:00.969 [DEBUG] [Thread-176972] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:24:00.986 [DEBUG] [Thread-176972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:24:00.987 [DEBUG] [Thread-176972] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:24:00.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:24:00.988 [DEBUG] [Thread-176972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:24:00.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:24:00.989 [DEBUG] [Thread-176972] [transport.py] [_log()] userauth is OK
2026-04-11T21:24:00.990 [DEBUG] [Thread-176972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:24:00.990 [DEBUG] [Thread-176972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:24:00.990 [DEBUG] [Thread-176972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:24:00.990 [DEBUG] [Thread-176972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:24:01.011 [INFO] [Thread-176972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:24:01.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:24:01.653 [DEBUG] [Thread-176972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:24:01.653 [DEBUG] [Thread-176972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:24:01.654 [DEBUG] [Thread-176972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:24:01.694 [DEBUG] [Thread-176972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:24:01.694 [DEBUG] [Thread-176972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:24:01.697 [DEBUG] [Thread-176972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:24:01.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:24:01.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:24:01.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:24:01.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:24:01.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:24:01.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:24:01.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:24:01.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:24:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:24:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.808101 -999.00  +11.80  11.44     97  +11.40 1 3 1 3 1     0    0 0.42 1.58 ----- 11.4 11.4 278.2 19.2 13.2 -1.0 13.0 -0.4 12.7 -0.6 13.0 -0.7
2026-04-11T21:24:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:24:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:24:01.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.808101
2026-04-11T21:24:01.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:24:01.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:24:01.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:24:01.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:24:01.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:24:01.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:23:48', tmtdew=-0.00923, humidity=99.9873, cloud=0.0, wind=13.5864, temperature=12.2806, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:23:39.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:24:01.723 [DEBUG] [Thread-176972] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:24:01.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:24:01.820 [DEBUG] [Thread-176975] [transport.py] [_log()] starting thread (client mode): 0xb0f8ea10
2026-04-11T21:24:01.820 [DEBUG] [Thread-176975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:24:01.840 [DEBUG] [Thread-176975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:24:01.840 [INFO] [Thread-176975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] client lang: <none>
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] server lang: <none>
2026-04-11T21:24:01.848 [DEBUG] [Thread-176975] [transport.py] [_log()] kex follows: False
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] Compression: none
2026-04-11T21:24:01.849 [DEBUG] [Thread-176975] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:24:01.913 [DEBUG] [Thread-176975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:24:01.913 [DEBUG] [Thread-176975] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:24:01.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:24:01.915 [DEBUG] [Thread-176975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:24:01.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:24:01.976 [DEBUG] [Thread-176975] [transport.py] [_log()] userauth is OK
2026-04-11T21:24:01.976 [DEBUG] [Thread-176975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:24:01.977 [DEBUG] [Thread-176975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:24:01.977 [DEBUG] [Thread-176975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:24:01.977 [DEBUG] [Thread-176975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:24:01.995 [INFO] [Thread-176975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:24:01.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:24:01.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:24:02.838 [DEBUG] [Thread-176975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:24:02.838 [DEBUG] [Thread-176975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:24:02.886 [DEBUG] [Thread-176975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:24:02.886 [DEBUG] [Thread-176975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:24:02.896 [DEBUG] [Thread-176975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:24:02.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:24:02.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-04-11T21:24:02.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-04-11T21:24:02.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:24:02.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:24:02.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:24:02.933 [DEBUG] [Thread-176975] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:24:08.244 [DEBUG] [Thread-176977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:24:23.299 [DEBUG] [Thread-176978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:24:27.800 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:24:27.801 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:24:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:24:32.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:24:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:24:33.984 [DEBUG] [Thread-176979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:24:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 24, 24), -0.01216, 100.043, 0.0, 13.9579, 11.7737, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:24:34.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:24:24
2026-04-11T21:24:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:24:34.767 [DEBUG] [Thread-176980] [transport.py] [_log()] starting thread (client mode): 0xa7951f30
2026-04-11T21:24:34.768 [DEBUG] [Thread-176980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:24:34.788 [DEBUG] [Thread-176980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:24:34.788 [INFO] [Thread-176980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:24:34.791 [DEBUG] [Thread-176980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:24:34.791 [DEBUG] [Thread-176980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:24:34.791 [DEBUG] [Thread-176980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:24:34.791 [DEBUG] [Thread-176980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:34.791 [DEBUG] [Thread-176980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:34.791 [DEBUG] [Thread-176980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] client lang: <none>
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] server lang: <none>
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] kex follows: False
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:24:34.792 [DEBUG] [Thread-176980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:24:34.793 [DEBUG] [Thread-176980] [transport.py] [_log()] Compression: none
2026-04-11T21:24:34.793 [DEBUG] [Thread-176980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:24:34.814 [DEBUG] [Thread-176980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:24:34.814 [DEBUG] [Thread-176980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:24:34.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:24:34.816 [DEBUG] [Thread-176980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:24:34.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:24:34.818 [DEBUG] [Thread-176980] [transport.py] [_log()] userauth is OK
2026-04-11T21:24:34.819 [DEBUG] [Thread-176980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:24:34.819 [DEBUG] [Thread-176980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:24:34.819 [DEBUG] [Thread-176980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:24:34.819 [DEBUG] [Thread-176980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:24:34.840 [INFO] [Thread-176980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:24:34.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:24:35.429 [DEBUG] [Thread-176980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:24:35.429 [DEBUG] [Thread-176980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:24:35.429 [DEBUG] [Thread-176980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:24:35.470 [DEBUG] [Thread-176980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:24:35.471 [DEBUG] [Thread-176980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:24:35.474 [DEBUG] [Thread-176980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:24:35.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:24:35.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:24:35.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:24:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:24:35.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:24:35.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:24:35.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:24:35.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:24:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:24:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.808449 -999.00  +11.80  11.12     97  +11.50 1 3 1 3 1     0    0 0.42 1.53 ----- 11.1 11.1 299.0 13.1 13.2 -1.2 13.0 -0.3 12.6 -0.5 13.0 -0.6
2026-04-11T21:24:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:24:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:24:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.808449
2026-04-11T21:24:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:24:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:24:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:24:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:24:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:24:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:24:24', tmtdew=-0.01216, humidity=100.043, cloud=0.0, wind=13.9579, temperature=11.7737, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:24:09.994', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:24:35.502 [DEBUG] [Thread-176980] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:24:35.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:24:35.596 [DEBUG] [Thread-176983] [transport.py] [_log()] starting thread (client mode): 0xae5f13f0
2026-04-11T21:24:35.596 [DEBUG] [Thread-176983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:24:35.615 [DEBUG] [Thread-176983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:24:35.615 [INFO] [Thread-176983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:24:35.623 [DEBUG] [Thread-176983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:24:35.623 [DEBUG] [Thread-176983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:24:35.623 [DEBUG] [Thread-176983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:24:35.623 [DEBUG] [Thread-176983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:35.623 [DEBUG] [Thread-176983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:24:35.623 [DEBUG] [Thread-176983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] client lang: <none>
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] server lang: <none>
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] kex follows: False
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:24:35.624 [DEBUG] [Thread-176983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:24:35.625 [DEBUG] [Thread-176983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:24:35.625 [DEBUG] [Thread-176983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:24:35.625 [DEBUG] [Thread-176983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:24:35.625 [DEBUG] [Thread-176983] [transport.py] [_log()] Compression: none
2026-04-11T21:24:35.625 [DEBUG] [Thread-176983] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:24:35.682 [DEBUG] [Thread-176983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:24:35.682 [DEBUG] [Thread-176983] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:24:35.683 [DEBUG] [Thread-176983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:24:35.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:24:35.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:24:35.741 [DEBUG] [Thread-176983] [transport.py] [_log()] userauth is OK
2026-04-11T21:24:35.742 [DEBUG] [Thread-176983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:24:35.742 [DEBUG] [Thread-176983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:24:35.742 [DEBUG] [Thread-176983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:24:35.742 [DEBUG] [Thread-176983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:24:35.761 [INFO] [Thread-176983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:24:35.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:24:36.548 [DEBUG] [Thread-176983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:24:36.548 [DEBUG] [Thread-176983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:24:36.596 [DEBUG] [Thread-176983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:24:36.597 [DEBUG] [Thread-176983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:24:36.606 [DEBUG] [Thread-176983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:24:36.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:24:36.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-04-11T21:24:36.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-04-11T21:24:36.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:24:36.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:24:36.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:24:36.642 [DEBUG] [Thread-176983] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:24:38.335 [DEBUG] [Thread-176985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:24:53.389 [DEBUG] [Thread-176986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:06.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:25:06.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:25:06.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-04-11T21:25:07.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 24, 59), -0.002085, 99.9775, 0.0, 13.5698, 11.7077, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:25:07.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:24:59
2026-04-11T21:25:08.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:25:08.424 [DEBUG] [Thread-176987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:08.497 [DEBUG] [Thread-176988] [transport.py] [_log()] starting thread (client mode): 0xb0fb4250
2026-04-11T21:25:08.497 [DEBUG] [Thread-176988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:25:08.517 [DEBUG] [Thread-176988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:25:08.517 [INFO] [Thread-176988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:25:08.520 [DEBUG] [Thread-176988] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] client lang: <none>
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] server lang: <none>
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] kex follows: False
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] Compression: none
2026-04-11T21:25:08.521 [DEBUG] [Thread-176988] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:25:08.530 [DEBUG] [Thread-176988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:25:08.530 [DEBUG] [Thread-176988] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:25:08.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:25:08.531 [DEBUG] [Thread-176988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:25:08.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:25:08.533 [DEBUG] [Thread-176988] [transport.py] [_log()] userauth is OK
2026-04-11T21:25:08.533 [DEBUG] [Thread-176988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:25:08.533 [DEBUG] [Thread-176988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:25:08.534 [DEBUG] [Thread-176988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:25:08.534 [DEBUG] [Thread-176988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:25:08.551 [INFO] [Thread-176988] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:25:08.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:25:09.616 [DEBUG] [Thread-176988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:25:09.617 [DEBUG] [Thread-176988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:25:09.617 [DEBUG] [Thread-176988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:25:09.657 [DEBUG] [Thread-176988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:25:09.657 [DEBUG] [Thread-176988] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:25:09.661 [DEBUG] [Thread-176988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:25:09.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:25:09.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:25:09.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:25:09.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:25:09.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:25:09.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:25:09.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:25:09.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:25:09.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:25:09.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.808796 -999.00  +11.90  10.79     97  +11.50 1 3 1 3 1     0    0 0.41 1.13 ----- 10.8 10.8 299.4 12.4 13.2 -1.2 13.1 -0.3 12.6 -0.3 13.0 -0.6
2026-04-11T21:25:09.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:25:09.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:25:09.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.808796
2026-04-11T21:25:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:25:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:25:09.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:25:09.688 [DEBUG] [Thread-176988] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:25:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:25:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:25:09.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:24:59', tmtdew=-0.002085, humidity=99.9775, cloud=0.0, wind=13.5698, temperature=11.7077, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:24:39.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:25:09.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:25:09.781 [DEBUG] [Thread-176991] [transport.py] [_log()] starting thread (client mode): 0xb0fcf370
2026-04-11T21:25:09.781 [DEBUG] [Thread-176991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:25:09.796 [DEBUG] [Thread-176991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:25:09.796 [INFO] [Thread-176991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:25:09.804 [DEBUG] [Thread-176991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:25:09.804 [DEBUG] [Thread-176991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:25:09.804 [DEBUG] [Thread-176991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:25:09.804 [DEBUG] [Thread-176991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:09.804 [DEBUG] [Thread-176991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] client lang: <none>
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] server lang: <none>
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] kex follows: False
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] Compression: none
2026-04-11T21:25:09.805 [DEBUG] [Thread-176991] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:25:09.859 [DEBUG] [Thread-176991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:25:09.859 [DEBUG] [Thread-176991] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:25:09.860 [DEBUG] [Thread-176991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:25:09.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:25:09.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:25:09.917 [DEBUG] [Thread-176991] [transport.py] [_log()] userauth is OK
2026-04-11T21:25:09.917 [DEBUG] [Thread-176991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:25:09.918 [DEBUG] [Thread-176991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:25:09.918 [DEBUG] [Thread-176991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:25:09.918 [DEBUG] [Thread-176991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:25:09.941 [INFO] [Thread-176991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:25:09.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:25:09.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:25:10.765 [DEBUG] [Thread-176991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:25:10.765 [DEBUG] [Thread-176991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:25:10.813 [DEBUG] [Thread-176991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:25:10.813 [DEBUG] [Thread-176991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:25:10.822 [DEBUG] [Thread-176991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:25:10.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:25:10.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:25:10.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-04-11T21:25:10.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:25:10.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:25:10.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:25:10.856 [DEBUG] [Thread-176991] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:25:23.457 [DEBUG] [Thread-176993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:28.017 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:28.018 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:34.055 [DEBUG] [Thread-176994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:38.509 [DEBUG] [Thread-176995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:25:40.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:25:40.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:25:40.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-04-11T21:25:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 25, 34), -0.01953, 100.055, 0.0, 11.399, 12.2485, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:25:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:25:34
2026-04-11T21:25:42.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:25:42.684 [DEBUG] [Thread-176996] [transport.py] [_log()] starting thread (client mode): 0xb0fb5c30
2026-04-11T21:25:42.684 [DEBUG] [Thread-176996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:25:42.704 [DEBUG] [Thread-176996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:25:42.704 [INFO] [Thread-176996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:25:42.707 [DEBUG] [Thread-176996] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] client lang: <none>
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] server lang: <none>
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] kex follows: False
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:25:42.708 [DEBUG] [Thread-176996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:25:42.709 [DEBUG] [Thread-176996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:25:42.709 [DEBUG] [Thread-176996] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:25:42.709 [DEBUG] [Thread-176996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:25:42.709 [DEBUG] [Thread-176996] [transport.py] [_log()] Compression: none
2026-04-11T21:25:42.709 [DEBUG] [Thread-176996] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:25:42.731 [DEBUG] [Thread-176996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:25:42.731 [DEBUG] [Thread-176996] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:25:42.732 [DEBUG] [Thread-176996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:25:42.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:25:42.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:25:42.734 [DEBUG] [Thread-176996] [transport.py] [_log()] userauth is OK
2026-04-11T21:25:42.734 [DEBUG] [Thread-176996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:25:42.734 [DEBUG] [Thread-176996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:25:42.734 [DEBUG] [Thread-176996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:25:42.734 [DEBUG] [Thread-176996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:25:42.760 [INFO] [Thread-176996] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:25:42.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:25:43.550 [DEBUG] [Thread-176996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:25:43.550 [DEBUG] [Thread-176996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:25:43.550 [DEBUG] [Thread-176996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:25:43.591 [DEBUG] [Thread-176996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:25:43.592 [DEBUG] [Thread-176996] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:25:43.595 [DEBUG] [Thread-176996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:25:43.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:25:43.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:25:43.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:25:43.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:25:43.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:25:43.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:25:43.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:25:43.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:25:43.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:25:43.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.809143 -999.00  +11.80   9.27     97  +11.40 1 3 1 3 1     0    0 0.40 0.91 ----- 9.3 9.3 296.0 13.9 13.2 -1.1 13.1 -0.3 12.7 -0.3 13.0 -0.6
2026-04-11T21:25:43.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:25:43.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:25:43.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.809143
2026-04-11T21:25:43.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:25:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:25:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:25:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:25:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:25:43.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:25:34', tmtdew=-0.01953, humidity=100.055, cloud=0.0, wind=11.399, temperature=12.2485, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:25:09.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:25:43.618 [DEBUG] [Thread-176996] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:25:43.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:25:43.711 [DEBUG] [Thread-176999] [transport.py] [_log()] starting thread (client mode): 0xb0f57af0
2026-04-11T21:25:43.711 [DEBUG] [Thread-176999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:25:43.725 [DEBUG] [Thread-176999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:25:43.725 [INFO] [Thread-176999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] client lang: <none>
2026-04-11T21:25:43.733 [DEBUG] [Thread-176999] [transport.py] [_log()] server lang: <none>
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] kex follows: False
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] Compression: none
2026-04-11T21:25:43.734 [DEBUG] [Thread-176999] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:25:43.791 [DEBUG] [Thread-176999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:25:43.791 [DEBUG] [Thread-176999] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:25:43.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:25:43.793 [DEBUG] [Thread-176999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:25:43.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:25:43.856 [DEBUG] [Thread-176999] [transport.py] [_log()] userauth is OK
2026-04-11T21:25:43.856 [DEBUG] [Thread-176999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:25:43.857 [DEBUG] [Thread-176999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:25:43.857 [DEBUG] [Thread-176999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:25:43.857 [DEBUG] [Thread-176999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:25:43.878 [INFO] [Thread-176999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:25:43.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:25:43.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:25:44.692 [DEBUG] [Thread-176999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:25:44.693 [DEBUG] [Thread-176999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:25:44.740 [DEBUG] [Thread-176999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:25:44.740 [DEBUG] [Thread-176999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:25:44.750 [DEBUG] [Thread-176999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:25:44.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:25:44.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-04-11T21:25:44.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-04-11T21:25:44.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:25:44.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:25:44.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:25:44.787 [DEBUG] [Thread-176999] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:25:53.547 [DEBUG] [Thread-177001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:08.604 [DEBUG] [Thread-177002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:26:14.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:26:14.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-04-11T21:26:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 25, 34), -0.01953, 100.055, 0.0, 11.399, 12.2485, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:26:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:25:34
2026-04-11T21:26:16.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:26:16.660 [DEBUG] [Thread-177003] [transport.py] [_log()] starting thread (client mode): 0xb0f55b40
2026-04-11T21:26:16.660 [DEBUG] [Thread-177003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:26:16.680 [DEBUG] [Thread-177003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:26:16.680 [INFO] [Thread-177003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:26:16.683 [DEBUG] [Thread-177003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:26:16.683 [DEBUG] [Thread-177003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:26:16.683 [DEBUG] [Thread-177003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:26:16.683 [DEBUG] [Thread-177003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:16.683 [DEBUG] [Thread-177003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:16.683 [DEBUG] [Thread-177003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] client lang: <none>
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] server lang: <none>
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] kex follows: False
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] Compression: none
2026-04-11T21:26:16.684 [DEBUG] [Thread-177003] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:26:16.698 [DEBUG] [Thread-177003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:26:16.698 [DEBUG] [Thread-177003] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:26:16.698 [DEBUG] [Thread-177003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:26:16.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:26:16.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:26:16.699 [DEBUG] [Thread-177003] [transport.py] [_log()] userauth is OK
2026-04-11T21:26:16.699 [DEBUG] [Thread-177003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:26:16.699 [DEBUG] [Thread-177003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:26:16.699 [DEBUG] [Thread-177003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:26:16.699 [DEBUG] [Thread-177003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:26:16.713 [INFO] [Thread-177003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:26:16.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:26:17.508 [DEBUG] [Thread-177003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:26:17.508 [DEBUG] [Thread-177003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:26:17.509 [DEBUG] [Thread-177003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:26:17.549 [DEBUG] [Thread-177003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:26:17.549 [DEBUG] [Thread-177003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:26:17.553 [DEBUG] [Thread-177003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:26:17.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:26:17.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:26:17.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:26:17.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:26:17.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:26:17.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:26:17.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:26:17.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:26:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:26:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.809490 -999.00  +11.80  10.61     97  +11.50 1 3 1 3 1     0    0 0.38 0.40 ----- 10.6 10.6 295.0 11.5 13.2 -1.2 13.1 -0.3 12.7 -0.4 13.1 -0.8
2026-04-11T21:26:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:26:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:26:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.809490
2026-04-11T21:26:17.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:26:17.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:26:17.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:26:17.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:26:17.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:26:17.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:25:34', tmtdew=-0.01953, humidity=100.055, cloud=0.0, wind=11.399, temperature=12.2485, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:25:39.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:26:17.579 [DEBUG] [Thread-177003] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:26:17.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:26:17.670 [DEBUG] [Thread-177006] [transport.py] [_log()] starting thread (client mode): 0xae5144f0
2026-04-11T21:26:17.670 [DEBUG] [Thread-177006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:26:17.685 [DEBUG] [Thread-177006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:26:17.685 [INFO] [Thread-177006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] client lang: <none>
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] server lang: <none>
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] kex follows: False
2026-04-11T21:26:17.693 [DEBUG] [Thread-177006] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:26:17.694 [DEBUG] [Thread-177006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:26:17.694 [DEBUG] [Thread-177006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:26:17.694 [DEBUG] [Thread-177006] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:26:17.694 [DEBUG] [Thread-177006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:26:17.694 [DEBUG] [Thread-177006] [transport.py] [_log()] Compression: none
2026-04-11T21:26:17.694 [DEBUG] [Thread-177006] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:26:17.749 [DEBUG] [Thread-177006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:26:17.749 [DEBUG] [Thread-177006] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:26:17.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:26:17.750 [DEBUG] [Thread-177006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:26:17.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:26:17.805 [DEBUG] [Thread-177006] [transport.py] [_log()] userauth is OK
2026-04-11T21:26:17.806 [DEBUG] [Thread-177006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:26:17.806 [DEBUG] [Thread-177006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:26:17.806 [DEBUG] [Thread-177006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:26:17.806 [DEBUG] [Thread-177006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:26:17.830 [INFO] [Thread-177006] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:26:17.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:26:17.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:26:18.636 [DEBUG] [Thread-177006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:26:18.636 [DEBUG] [Thread-177006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:26:18.684 [DEBUG] [Thread-177006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:26:18.684 [DEBUG] [Thread-177006] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:26:18.694 [DEBUG] [Thread-177006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:26:18.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:26:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:26:18.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:26:18.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:26:18.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:26:18.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:26:18.730 [DEBUG] [Thread-177006] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:26:23.646 [DEBUG] [Thread-177008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:28.222 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:28.223 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:34.143 [DEBUG] [Thread-177009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:38.701 [DEBUG] [Thread-177010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:26:48.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:26:48.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:26:48.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-04-11T21:26:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 26, 10), 0.0478, 99.9778, 0.0, 13.7639, 11.7742, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:26:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:26:10
2026-04-11T21:26:50.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:26:50.658 [DEBUG] [Thread-177011] [transport.py] [_log()] starting thread (client mode): 0xae5f1000
2026-04-11T21:26:50.659 [DEBUG] [Thread-177011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:26:50.681 [DEBUG] [Thread-177011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:26:50.681 [INFO] [Thread-177011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] client lang: <none>
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] server lang: <none>
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] kex follows: False
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] Compression: none
2026-04-11T21:26:50.685 [DEBUG] [Thread-177011] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:26:50.704 [DEBUG] [Thread-177011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:26:50.705 [DEBUG] [Thread-177011] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:26:50.706 [DEBUG] [Thread-177011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:26:50.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:26:50.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:26:50.707 [DEBUG] [Thread-177011] [transport.py] [_log()] userauth is OK
2026-04-11T21:26:50.707 [DEBUG] [Thread-177011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:26:50.708 [DEBUG] [Thread-177011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:26:50.708 [DEBUG] [Thread-177011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:26:50.708 [DEBUG] [Thread-177011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:26:50.730 [INFO] [Thread-177011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:26:50.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:26:51.538 [DEBUG] [Thread-177011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:26:51.538 [DEBUG] [Thread-177011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:26:51.539 [DEBUG] [Thread-177011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:26:51.579 [DEBUG] [Thread-177011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:26:51.580 [DEBUG] [Thread-177011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:26:51.583 [DEBUG] [Thread-177011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:26:51.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:26:51.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:26:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:26:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:26:51.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:26:51.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:26:51.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:26:51.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:26:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:26:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.809837 -999.00  +11.80  11.48     97  +11.40 1 3 1 3 1     0    0 0.38 0.16 ----- 11.5 11.5 298.2 17.0 13.2 -1.2 13.1 -0.5 12.7 -0.7 13.0 -0.7
2026-04-11T21:26:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:26:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:26:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.809837
2026-04-11T21:26:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:26:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:26:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:26:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:26:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:26:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:26:10', tmtdew=0.0478, humidity=99.9778, cloud=0.0, wind=13.7639, temperature=11.7742, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:26:09.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:26:51.610 [DEBUG] [Thread-177011] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:26:51.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:26:51.705 [DEBUG] [Thread-177014] [transport.py] [_log()] starting thread (client mode): 0xb0fb4a30
2026-04-11T21:26:51.705 [DEBUG] [Thread-177014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:26:51.720 [DEBUG] [Thread-177014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:26:51.720 [INFO] [Thread-177014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] client lang: <none>
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] server lang: <none>
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] kex follows: False
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] Compression: none
2026-04-11T21:26:51.728 [DEBUG] [Thread-177014] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:26:51.787 [DEBUG] [Thread-177014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:26:51.788 [DEBUG] [Thread-177014] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:26:51.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:26:51.789 [DEBUG] [Thread-177014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:26:51.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:26:51.851 [DEBUG] [Thread-177014] [transport.py] [_log()] userauth is OK
2026-04-11T21:26:51.851 [DEBUG] [Thread-177014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:26:51.852 [DEBUG] [Thread-177014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:26:51.852 [DEBUG] [Thread-177014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:26:51.852 [DEBUG] [Thread-177014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:26:51.874 [INFO] [Thread-177014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:26:51.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:26:51.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:26:52.738 [DEBUG] [Thread-177014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:26:52.738 [DEBUG] [Thread-177014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:26:52.786 [DEBUG] [Thread-177014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:26:52.786 [DEBUG] [Thread-177014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:26:52.795 [DEBUG] [Thread-177014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:26:52.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:26:52.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-04-11T21:26:52.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-04-11T21:26:52.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:26:52.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:26:52.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:26:52.832 [DEBUG] [Thread-177014] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:26:53.739 [DEBUG] [Thread-177016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:08.787 [DEBUG] [Thread-177017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:22.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:27:22.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:27: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-04-11T21:27:23.826 [DEBUG] [Thread-177018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 26, 45), -0.01946, 100.055, 0.0, 10.4818, 12.2151, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:27:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:26:45
2026-04-11T21:27:24.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:27:24.717 [DEBUG] [Thread-177019] [transport.py] [_log()] starting thread (client mode): 0xb0fb5120
2026-04-11T21:27:24.717 [DEBUG] [Thread-177019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:27:24.736 [DEBUG] [Thread-177019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:27:24.736 [INFO] [Thread-177019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:27:24.740 [DEBUG] [Thread-177019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:27:24.740 [DEBUG] [Thread-177019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] client lang: <none>
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] server lang: <none>
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] kex follows: False
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:27:24.741 [DEBUG] [Thread-177019] [transport.py] [_log()] Compression: none
2026-04-11T21:27:24.742 [DEBUG] [Thread-177019] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:27:24.756 [DEBUG] [Thread-177019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:27:24.757 [DEBUG] [Thread-177019] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:27:24.757 [DEBUG] [Thread-177019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:27:24.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:27:24.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:27:24.759 [DEBUG] [Thread-177019] [transport.py] [_log()] userauth is OK
2026-04-11T21:27:24.760 [DEBUG] [Thread-177019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:27:24.760 [DEBUG] [Thread-177019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:27:24.760 [DEBUG] [Thread-177019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:27:24.760 [DEBUG] [Thread-177019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:27:24.784 [INFO] [Thread-177019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:27:24.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:27:25.545 [DEBUG] [Thread-177019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:27:25.546 [DEBUG] [Thread-177019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:27:25.546 [DEBUG] [Thread-177019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:27:25.587 [DEBUG] [Thread-177019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:27:25.587 [DEBUG] [Thread-177019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:27:25.591 [DEBUG] [Thread-177019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:27:25.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:27:25.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:27:25.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:27:25.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:27:25.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:27:25.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:27:25.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:27:25.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:27:25.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:27:25.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.810185 -999.00  +11.80  11.92     97  +11.40 1 3 1 3 1     0    0 0.38 0.31 ----- 11.9 11.9 283.8 14.1 13.2 -1.0 13.0 -0.4 12.7 -0.4 13.0 -0.7
2026-04-11T21:27:25.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:27:25.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:27:25.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.810185
2026-04-11T21:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:27:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:27:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:27:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:27:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:26:45', tmtdew=-0.01946, humidity=100.055, cloud=0.0, wind=10.4818, temperature=12.2151, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:26:39.984', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:27:25.619 [DEBUG] [Thread-177019] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:27:25.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:27:25.711 [DEBUG] [Thread-177022] [transport.py] [_log()] starting thread (client mode): 0xb0fcd030
2026-04-11T21:27:25.712 [DEBUG] [Thread-177022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:27:25.726 [DEBUG] [Thread-177022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:27:25.726 [INFO] [Thread-177022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] client lang: <none>
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] server lang: <none>
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] kex follows: False
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:27:25.734 [DEBUG] [Thread-177022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:27:25.735 [DEBUG] [Thread-177022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:27:25.735 [DEBUG] [Thread-177022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:27:25.735 [DEBUG] [Thread-177022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:27:25.735 [DEBUG] [Thread-177022] [transport.py] [_log()] Compression: none
2026-04-11T21:27:25.735 [DEBUG] [Thread-177022] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:27:25.790 [DEBUG] [Thread-177022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:27:25.791 [DEBUG] [Thread-177022] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:27:25.791 [DEBUG] [Thread-177022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:27:25.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:27:25.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:27:25.847 [DEBUG] [Thread-177022] [transport.py] [_log()] userauth is OK
2026-04-11T21:27:25.847 [DEBUG] [Thread-177022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:27:25.847 [DEBUG] [Thread-177022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:27:25.847 [DEBUG] [Thread-177022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:27:25.847 [DEBUG] [Thread-177022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:27:25.866 [INFO] [Thread-177022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:27:25.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:27:25.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:27:26.707 [DEBUG] [Thread-177022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:27:26.708 [DEBUG] [Thread-177022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:27:26.757 [DEBUG] [Thread-177022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:27:26.757 [DEBUG] [Thread-177022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:27:26.766 [DEBUG] [Thread-177022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:27:26.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:27: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')
2026-04-11T21:27:26.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:27:26.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:27:26.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:27:26.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:27:26.803 [DEBUG] [Thread-177022] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:27:28.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:28.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:34.217 [DEBUG] [Thread-177024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:38.863 [DEBUG] [Thread-177025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:53.926 [DEBUG] [Thread-177026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:27:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:27:56.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:27:56.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-04-11T21:27:58.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 27, 20), -0.009795, 100.027, 0.0, 12.6166, 11.7739, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:27:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:27:20
2026-04-11T21:27:58.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:27:58.675 [DEBUG] [Thread-177027] [transport.py] [_log()] starting thread (client mode): 0xb0fb7b80
2026-04-11T21:27:58.675 [DEBUG] [Thread-177027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:27:58.697 [DEBUG] [Thread-177027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:27:58.697 [INFO] [Thread-177027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:27:58.700 [DEBUG] [Thread-177027] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:27:58.700 [DEBUG] [Thread-177027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] client lang: <none>
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] server lang: <none>
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] kex follows: False
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:27:58.702 [DEBUG] [Thread-177027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:27:58.703 [DEBUG] [Thread-177027] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:27:58.703 [DEBUG] [Thread-177027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:27:58.703 [DEBUG] [Thread-177027] [transport.py] [_log()] Compression: none
2026-04-11T21:27:58.703 [DEBUG] [Thread-177027] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:27:58.722 [DEBUG] [Thread-177027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:27:58.722 [DEBUG] [Thread-177027] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:27:58.723 [DEBUG] [Thread-177027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:27:58.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:27:58.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:27:58.725 [DEBUG] [Thread-177027] [transport.py] [_log()] userauth is OK
2026-04-11T21:27:58.725 [DEBUG] [Thread-177027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:27:58.725 [DEBUG] [Thread-177027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:27:58.725 [DEBUG] [Thread-177027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:27:58.725 [DEBUG] [Thread-177027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:27:58.741 [INFO] [Thread-177027] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:27:58.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:27:59.514 [DEBUG] [Thread-177027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:27:59.515 [DEBUG] [Thread-177027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:27:59.515 [DEBUG] [Thread-177027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:27:59.556 [DEBUG] [Thread-177027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:27:59.556 [DEBUG] [Thread-177027] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:27:59.559 [DEBUG] [Thread-177027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:27:59.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:27:59.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:27:59.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:27:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:27:59.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:27:59.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:27:59.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:27:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:27:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:27:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.810532 -999.00  +11.80  12.48     97  +11.40 1 3 1 3 1     0    0 0.39 0.57 ----- 12.5 12.5 285.0 15.7 13.2 -1.3 13.1 -0.4 12.6 -0.9 13.0 -0.8
2026-04-11T21:27:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:27:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:27:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.810532
2026-04-11T21:27:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:27:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:27:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:27:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:27:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:27:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:27:20', tmtdew=-0.009795, humidity=100.027, cloud=0.0, wind=12.6166, temperature=11.7739, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:27:09.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:27:59.586 [DEBUG] [Thread-177027] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:27:59.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:27:59.680 [DEBUG] [Thread-177030] [transport.py] [_log()] starting thread (client mode): 0xa7910a60
2026-04-11T21:27:59.680 [DEBUG] [Thread-177030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:27:59.695 [DEBUG] [Thread-177030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:27:59.695 [INFO] [Thread-177030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] client lang: <none>
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] server lang: <none>
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] kex follows: False
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:27:59.702 [DEBUG] [Thread-177030] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:27:59.703 [DEBUG] [Thread-177030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:27:59.703 [DEBUG] [Thread-177030] [transport.py] [_log()] Compression: none
2026-04-11T21:27:59.703 [DEBUG] [Thread-177030] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:27:59.757 [DEBUG] [Thread-177030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:27:59.757 [DEBUG] [Thread-177030] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:27:59.757 [DEBUG] [Thread-177030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:27:59.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:27:59.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:27:59.815 [DEBUG] [Thread-177030] [transport.py] [_log()] userauth is OK
2026-04-11T21:27:59.815 [DEBUG] [Thread-177030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:27:59.815 [DEBUG] [Thread-177030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:27:59.815 [DEBUG] [Thread-177030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:27:59.815 [DEBUG] [Thread-177030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:27:59.835 [INFO] [Thread-177030] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:27:59.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:27:59.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:28:00.632 [DEBUG] [Thread-177030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:28:00.632 [DEBUG] [Thread-177030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:28:00.681 [DEBUG] [Thread-177030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:28:00.681 [DEBUG] [Thread-177030] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:28:00.691 [DEBUG] [Thread-177030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:28:00.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:28:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:28:00.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:28:00.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:28:00.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:28:00.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:28:00.727 [DEBUG] [Thread-177030] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:28:08.965 [DEBUG] [Thread-177032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:28:24.026 [DEBUG] [Thread-177033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:28:28.634 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:28:28.636 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:28:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:28:30.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:28:30.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-04-11T21:28:32.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 27, 56), 0.037715, 100.044, 0.0, 12.6173, 11.8572, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:28:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:27:56
2026-04-11T21:28:32.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:28:32.584 [DEBUG] [Thread-177034] [transport.py] [_log()] starting thread (client mode): 0xa7911f90
2026-04-11T21:28:32.584 [DEBUG] [Thread-177034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:28:32.604 [DEBUG] [Thread-177034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:28:32.604 [INFO] [Thread-177034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:28:32.607 [DEBUG] [Thread-177034] [transport.py] [_log()] client lang: <none>
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] server lang: <none>
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] kex follows: False
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] Compression: none
2026-04-11T21:28:32.608 [DEBUG] [Thread-177034] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:28:32.625 [DEBUG] [Thread-177034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:28:32.625 [DEBUG] [Thread-177034] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:28:32.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:28:32.626 [DEBUG] [Thread-177034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:28:32.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:28:32.628 [DEBUG] [Thread-177034] [transport.py] [_log()] userauth is OK
2026-04-11T21:28:32.629 [DEBUG] [Thread-177034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:28:32.629 [DEBUG] [Thread-177034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:28:32.629 [DEBUG] [Thread-177034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:28:32.629 [DEBUG] [Thread-177034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:28:32.663 [INFO] [Thread-177034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:28:32.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:28:33.460 [DEBUG] [Thread-177034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:28:33.460 [DEBUG] [Thread-177034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:28:33.460 [DEBUG] [Thread-177034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:28:33.501 [DEBUG] [Thread-177034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:28:33.501 [DEBUG] [Thread-177034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:28:33.504 [DEBUG] [Thread-177034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:28:33.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:28:33.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:28:33.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:28:33.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:28:33.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:28:33.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:28:33.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:28:33.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:28:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:28:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.811226 -999.00  +11.80  13.23     97  +11.40 1 3 1 3 1     0    0 0.38 0.34 ----- 13.2 13.2 283.0 14.1 13.2 -1.1 13.1 -0.4 12.7 -0.3 13.1 -0.8
2026-04-11T21:28:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:28:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:28:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.811226
2026-04-11T21:28:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:28:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:28:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:28:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:28:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:28:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:27:56', tmtdew=0.037715, humidity=100.044, cloud=0.0, wind=12.6173, temperature=11.8572, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:28:09.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:28:33.530 [DEBUG] [Thread-177034] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:28:33.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:28:33.625 [DEBUG] [Thread-177037] [transport.py] [_log()] starting thread (client mode): 0xa7911db0
2026-04-11T21:28:33.625 [DEBUG] [Thread-177037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:28:33.640 [DEBUG] [Thread-177037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:28:33.640 [INFO] [Thread-177037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:28:33.647 [DEBUG] [Thread-177037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] client lang: <none>
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] server lang: <none>
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] kex follows: False
2026-04-11T21:28:33.648 [DEBUG] [Thread-177037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:28:33.649 [DEBUG] [Thread-177037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:28:33.649 [DEBUG] [Thread-177037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:28:33.649 [DEBUG] [Thread-177037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:28:33.649 [DEBUG] [Thread-177037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:28:33.649 [DEBUG] [Thread-177037] [transport.py] [_log()] Compression: none
2026-04-11T21:28:33.649 [DEBUG] [Thread-177037] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:28:33.708 [DEBUG] [Thread-177037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:28:33.708 [DEBUG] [Thread-177037] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:28:33.709 [DEBUG] [Thread-177037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:28:33.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:28:33.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:28:33.764 [DEBUG] [Thread-177037] [transport.py] [_log()] userauth is OK
2026-04-11T21:28:33.764 [DEBUG] [Thread-177037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:28:33.764 [DEBUG] [Thread-177037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:28:33.764 [DEBUG] [Thread-177037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:28:33.764 [DEBUG] [Thread-177037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:28:33.783 [INFO] [Thread-177037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:28:33.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:28:33.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:28:34.304 [DEBUG] [Thread-177039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:28:34.654 [DEBUG] [Thread-177037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:28:34.654 [DEBUG] [Thread-177037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:28:34.702 [DEBUG] [Thread-177037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:28:34.702 [DEBUG] [Thread-177037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:28:34.712 [DEBUG] [Thread-177037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:28:34.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:28:34.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:28:34.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-04-11T21:28:34.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:28:34.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:28:34.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:28:34.752 [DEBUG] [Thread-177037] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:28:39.061 [DEBUG] [Thread-177040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:28:54.124 [DEBUG] [Thread-177041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:29:04.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:29:04.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-04-11T21:29:06.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 28, 31), 0.0479, 99.9776, 0.0, 13.4287, 11.7577, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:29:06.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:28:31
2026-04-11T21:29:06.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:29:06.601 [DEBUG] [Thread-177042] [transport.py] [_log()] starting thread (client mode): 0xa7911b10
2026-04-11T21:29:06.601 [DEBUG] [Thread-177042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:29:06.622 [DEBUG] [Thread-177042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:29:06.622 [INFO] [Thread-177042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:29:06.624 [DEBUG] [Thread-177042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:29:06.624 [DEBUG] [Thread-177042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:29:06.624 [DEBUG] [Thread-177042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:29:06.624 [DEBUG] [Thread-177042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] client lang: <none>
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] server lang: <none>
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] kex follows: False
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] Compression: none
2026-04-11T21:29:06.625 [DEBUG] [Thread-177042] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:29:06.644 [DEBUG] [Thread-177042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:29:06.645 [DEBUG] [Thread-177042] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:29:06.645 [DEBUG] [Thread-177042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:29:06.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:29:06.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:29:06.648 [DEBUG] [Thread-177042] [transport.py] [_log()] userauth is OK
2026-04-11T21:29:06.648 [DEBUG] [Thread-177042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:29:06.648 [DEBUG] [Thread-177042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:29:06.648 [DEBUG] [Thread-177042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:29:06.648 [DEBUG] [Thread-177042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:29:06.672 [INFO] [Thread-177042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:29:06.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:29:07.495 [DEBUG] [Thread-177042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:29:07.495 [DEBUG] [Thread-177042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:29:07.496 [DEBUG] [Thread-177042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:29:07.535 [DEBUG] [Thread-177042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:29:07.536 [DEBUG] [Thread-177042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:29:07.538 [DEBUG] [Thread-177042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:29:07.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:29:07.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:29:07.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:29:07.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:29:07.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:29:07.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:29:07.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:29:07.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:29:07.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:29:07.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.811573 -999.00  +11.80  11.40     97  +11.40 1 3 1 3 1     0    0 0.39 0.27 ----- 11.4 11.4 290.7 14.6 13.2 -1.5 13.1 -0.4 12.6 -0.8 13.1 -0.7
2026-04-11T21:29:07.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:29:07.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:29:07.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.811573
2026-04-11T21:29:07.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:29:07.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:29:07.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:29:07.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:29:07.563 [DEBUG] [Thread-177042] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:29:07.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:29:07.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:28:31', tmtdew=0.0479, humidity=99.9776, cloud=0.0, wind=13.4287, temperature=11.7577, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:28:39.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:29:07.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:29:07.657 [DEBUG] [Thread-177045] [transport.py] [_log()] starting thread (client mode): 0xae517460
2026-04-11T21:29:07.657 [DEBUG] [Thread-177045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:29:07.672 [DEBUG] [Thread-177045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:29:07.672 [INFO] [Thread-177045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:29:07.680 [DEBUG] [Thread-177045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:29:07.680 [DEBUG] [Thread-177045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:29:07.680 [DEBUG] [Thread-177045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] client lang: <none>
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] server lang: <none>
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] kex follows: False
2026-04-11T21:29:07.681 [DEBUG] [Thread-177045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:29:07.682 [DEBUG] [Thread-177045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:29:07.682 [DEBUG] [Thread-177045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:29:07.682 [DEBUG] [Thread-177045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:29:07.682 [DEBUG] [Thread-177045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:29:07.682 [DEBUG] [Thread-177045] [transport.py] [_log()] Compression: none
2026-04-11T21:29:07.682 [DEBUG] [Thread-177045] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:29:07.739 [DEBUG] [Thread-177045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:29:07.739 [DEBUG] [Thread-177045] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:29:07.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:29:07.739 [DEBUG] [Thread-177045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:29:07.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:29:07.796 [DEBUG] [Thread-177045] [transport.py] [_log()] userauth is OK
2026-04-11T21:29:07.796 [DEBUG] [Thread-177045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:29:07.796 [DEBUG] [Thread-177045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:29:07.796 [DEBUG] [Thread-177045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:29:07.796 [DEBUG] [Thread-177045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:29:07.814 [INFO] [Thread-177045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:29:07.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:29:07.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:29:08.624 [DEBUG] [Thread-177045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:29:08.624 [DEBUG] [Thread-177045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:29:08.673 [DEBUG] [Thread-177045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:29:08.673 [DEBUG] [Thread-177045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:29:08.685 [DEBUG] [Thread-177045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:29:08.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:29:08.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-04-11T21:29:08.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-04-11T21:29:08.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:29:08.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:29:08.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:29:08.721 [DEBUG] [Thread-177045] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:29:09.165 [DEBUG] [Thread-177047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:24.213 [DEBUG] [Thread-177048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:28.841 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:28.842 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:34.387 [DEBUG] [Thread-177049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:38.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:29:38.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:29:38.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-04-11T21:29:39.248 [DEBUG] [Thread-177050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:29:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 29, 7), 0.040235, 100.028, 0.0, 12.6173, 11.8077, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:29:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:29:07
2026-04-11T21:29:40.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:29:40.512 [DEBUG] [Thread-177051] [transport.py] [_log()] starting thread (client mode): 0xae517d90
2026-04-11T21:29:40.512 [DEBUG] [Thread-177051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:29:40.523 [DEBUG] [Thread-177051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:29:40.523 [INFO] [Thread-177051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:40.525 [DEBUG] [Thread-177051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] client lang: <none>
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] server lang: <none>
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] kex follows: False
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] Compression: none
2026-04-11T21:29:40.526 [DEBUG] [Thread-177051] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:29:40.540 [DEBUG] [Thread-177051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:29:40.540 [DEBUG] [Thread-177051] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:29:40.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:29:40.542 [DEBUG] [Thread-177051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:29:40.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:29:40.543 [DEBUG] [Thread-177051] [transport.py] [_log()] userauth is OK
2026-04-11T21:29:40.543 [DEBUG] [Thread-177051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:29:40.544 [DEBUG] [Thread-177051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:29:40.544 [DEBUG] [Thread-177051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:29:40.544 [DEBUG] [Thread-177051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:29:40.572 [INFO] [Thread-177051] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:29:40.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:29:41.357 [DEBUG] [Thread-177051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:29:41.358 [DEBUG] [Thread-177051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:29:41.358 [DEBUG] [Thread-177051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:29:41.398 [DEBUG] [Thread-177051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:29:41.399 [DEBUG] [Thread-177051] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:29:41.402 [DEBUG] [Thread-177051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:29:41.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:29:41.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:29:41.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:29:41.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:29:41.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:29:41.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:29:41.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:29:41.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:29:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:29:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.811921 -999.00  +11.80   8.34     97  +11.40 1 3 1 3 1     0    0 0.38 0.31 ----- 8.3 8.3 285.6 11.9 13.2 -1.4 13.1 -0.4 12.6 -0.9 13.1 -0.7
2026-04-11T21:29:41.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:29:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:29:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.811921
2026-04-11T21:29:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:29:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:29:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:29:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:29:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:29:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:29:07', tmtdew=0.040235, humidity=100.028, cloud=0.0, wind=12.6173, temperature=11.8077, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:29:09.974', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:29:41.430 [DEBUG] [Thread-177051] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:29:41.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:29:41.522 [DEBUG] [Thread-177054] [transport.py] [_log()] starting thread (client mode): 0xae515a80
2026-04-11T21:29:41.522 [DEBUG] [Thread-177054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:29:41.537 [DEBUG] [Thread-177054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:29:41.537 [INFO] [Thread-177054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:29:41.545 [DEBUG] [Thread-177054] [transport.py] [_log()] client lang: <none>
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] server lang: <none>
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] kex follows: False
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] Compression: none
2026-04-11T21:29:41.546 [DEBUG] [Thread-177054] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:29:41.606 [DEBUG] [Thread-177054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:29:41.606 [DEBUG] [Thread-177054] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:29:41.607 [DEBUG] [Thread-177054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:29:41.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:29:41.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:29:41.664 [DEBUG] [Thread-177054] [transport.py] [_log()] userauth is OK
2026-04-11T21:29:41.664 [DEBUG] [Thread-177054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:29:41.665 [DEBUG] [Thread-177054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:29:41.665 [DEBUG] [Thread-177054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:29:41.665 [DEBUG] [Thread-177054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:29:41.683 [INFO] [Thread-177054] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:29:41.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:29:41.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:29:42.477 [DEBUG] [Thread-177054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:29:42.477 [DEBUG] [Thread-177054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:29:42.525 [DEBUG] [Thread-177054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:29:42.525 [DEBUG] [Thread-177054] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:29:42.535 [DEBUG] [Thread-177054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:29:42.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21: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-04-11T21:29:42.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-04-11T21:29:42.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:29:42.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:29:42.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:29:42.573 [DEBUG] [Thread-177054] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:29:54.285 [DEBUG] [Thread-177056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:09.346 [DEBUG] [Thread-177057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:30:12.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:30:12.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-04-11T21:30:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 29, 42), -0.01448, 100.022, 0.0, 12.4222, 12.2154, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:30:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:29:42
2026-04-11T21:30:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:30:14.393 [DEBUG] [Thread-177058] [transport.py] [_log()] starting thread (client mode): 0xa7911300
2026-04-11T21:30:14.393 [DEBUG] [Thread-177058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:30:14.414 [DEBUG] [Thread-177058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:30:14.414 [INFO] [Thread-177058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] client lang: <none>
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] server lang: <none>
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] kex follows: False
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:30:14.417 [DEBUG] [Thread-177058] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:30:14.418 [DEBUG] [Thread-177058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:30:14.418 [DEBUG] [Thread-177058] [transport.py] [_log()] Compression: none
2026-04-11T21:30:14.418 [DEBUG] [Thread-177058] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:30:14.435 [DEBUG] [Thread-177058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:30:14.435 [DEBUG] [Thread-177058] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:30:14.436 [DEBUG] [Thread-177058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:30:14.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:30:14.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:30:14.438 [DEBUG] [Thread-177058] [transport.py] [_log()] userauth is OK
2026-04-11T21:30:14.438 [DEBUG] [Thread-177058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:30:14.438 [DEBUG] [Thread-177058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:30:14.438 [DEBUG] [Thread-177058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:30:14.438 [DEBUG] [Thread-177058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:30:14.464 [INFO] [Thread-177058] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:30:14.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:30:15.532 [DEBUG] [Thread-177058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:30:15.533 [DEBUG] [Thread-177058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:30:15.533 [DEBUG] [Thread-177058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:30:15.573 [DEBUG] [Thread-177058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:30:15.573 [DEBUG] [Thread-177058] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:30:15.575 [DEBUG] [Thread-177058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:30:15.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:30:15.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:30:15.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:30:15.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:30:15.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:30:15.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:30:15.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:30:15.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:30:15.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:30:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.812268 -999.00  +11.70  15.16     97  +11.30 1 3 1 3 1     0    0 0.39 0.49 ----- 15.2 15.2 294.8 17.5 13.2 -1.3 13.1 -0.5 12.7 -0.5 13.0 -0.8
2026-04-11T21:30:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:30:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:30:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.812268
2026-04-11T21:30:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:30:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:30:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:30:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:30:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:30:15.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:29:42', tmtdew=-0.01448, humidity=100.022, cloud=0.0, wind=12.4222, temperature=12.2154, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:29:39.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:30:15.602 [DEBUG] [Thread-177058] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:30:15.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:30:15.706 [DEBUG] [Thread-177061] [transport.py] [_log()] starting thread (client mode): 0xa79111e0
2026-04-11T21:30:15.706 [DEBUG] [Thread-177061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:30:15.721 [DEBUG] [Thread-177061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:30:15.721 [INFO] [Thread-177061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:30:15.728 [DEBUG] [Thread-177061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] client lang: <none>
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] server lang: <none>
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] kex follows: False
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] Compression: none
2026-04-11T21:30:15.729 [DEBUG] [Thread-177061] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:30:15.788 [DEBUG] [Thread-177061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:30:15.789 [DEBUG] [Thread-177061] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:30:15.790 [DEBUG] [Thread-177061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:30:15.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:30:15.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:30:15.845 [DEBUG] [Thread-177061] [transport.py] [_log()] userauth is OK
2026-04-11T21:30:15.846 [DEBUG] [Thread-177061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:30:15.846 [DEBUG] [Thread-177061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:30:15.846 [DEBUG] [Thread-177061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:30:15.846 [DEBUG] [Thread-177061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:30:15.865 [INFO] [Thread-177061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:30:15.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:30:15.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:30:16.677 [DEBUG] [Thread-177061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:30:16.677 [DEBUG] [Thread-177061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:30:16.725 [DEBUG] [Thread-177061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:30:16.725 [DEBUG] [Thread-177061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:30:16.734 [DEBUG] [Thread-177061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:30:16.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:30:16.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:30:16.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-04-11T21:30:16.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:30:16.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:30:16.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:30:16.771 [DEBUG] [Thread-177061] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:30:24.382 [DEBUG] [Thread-177063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:29.047 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:29.049 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:34.476 [DEBUG] [Thread-177064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:39.441 [DEBUG] [Thread-177065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:30:46.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:30:46.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:30:46.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-04-11T21:30:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 30, 18), 0.04527, 99.9948, 0.0, 10.7467, 11.7247, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:30:48.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:30:18
2026-04-11T21:30:48.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:30:48.714 [DEBUG] [Thread-177066] [transport.py] [_log()] starting thread (client mode): 0xb0fb5450
2026-04-11T21:30:48.714 [DEBUG] [Thread-177066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:30:48.734 [DEBUG] [Thread-177066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:30:48.735 [INFO] [Thread-177066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] client lang: <none>
2026-04-11T21:30:48.738 [DEBUG] [Thread-177066] [transport.py] [_log()] server lang: <none>
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] kex follows: False
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] Compression: none
2026-04-11T21:30:48.739 [DEBUG] [Thread-177066] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:30:48.756 [DEBUG] [Thread-177066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:30:48.757 [DEBUG] [Thread-177066] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:30:48.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:30:48.758 [DEBUG] [Thread-177066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:30:48.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:30:48.760 [DEBUG] [Thread-177066] [transport.py] [_log()] userauth is OK
2026-04-11T21:30:48.760 [DEBUG] [Thread-177066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:30:48.760 [DEBUG] [Thread-177066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:30:48.760 [DEBUG] [Thread-177066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:30:48.760 [DEBUG] [Thread-177066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:30:48.796 [INFO] [Thread-177066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:30:48.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:30:49.547 [DEBUG] [Thread-177066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:30:49.548 [DEBUG] [Thread-177066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:30:49.548 [DEBUG] [Thread-177066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:30:49.588 [DEBUG] [Thread-177066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:30:49.588 [DEBUG] [Thread-177066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:30:49.592 [DEBUG] [Thread-177066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:30:49.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:30:49.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:30:49.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:30:49.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:30:49.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:30:49.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:30:49.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:30:49.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:30:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:30:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.812615 -999.00  +11.70  10.96     97  +11.30 1 3 1 3 1     0    0 0.41 0.74 ----- 11.0 11.0 276.6 13.6 13.2 -1.3 13.1 -0.3 12.7 -0.3 13.1 -0.8
2026-04-11T21:30:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:30:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:30:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.812615
2026-04-11T21:30:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:30:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:30:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:30:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:30:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:30:49.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:30:18', tmtdew=0.04527, humidity=99.9948, cloud=0.0, wind=10.7467, temperature=11.7247, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:30:09.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:30:49.617 [DEBUG] [Thread-177066] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:30:49.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:30:49.709 [DEBUG] [Thread-177069] [transport.py] [_log()] starting thread (client mode): 0xa79101c0
2026-04-11T21:30:49.710 [DEBUG] [Thread-177069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:30:49.723 [DEBUG] [Thread-177069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:30:49.723 [INFO] [Thread-177069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] client lang: <none>
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] server lang: <none>
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] kex follows: False
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] Compression: none
2026-04-11T21:30:49.731 [DEBUG] [Thread-177069] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:30:49.789 [DEBUG] [Thread-177069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:30:49.790 [DEBUG] [Thread-177069] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:30:49.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:30:49.791 [DEBUG] [Thread-177069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:30:49.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:30:49.845 [DEBUG] [Thread-177069] [transport.py] [_log()] userauth is OK
2026-04-11T21:30:49.845 [DEBUG] [Thread-177069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:30:49.845 [DEBUG] [Thread-177069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:30:49.845 [DEBUG] [Thread-177069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:30:49.845 [DEBUG] [Thread-177069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:30:49.865 [INFO] [Thread-177069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:30:49.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:30:49.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:30:50.742 [DEBUG] [Thread-177069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:30:50.742 [DEBUG] [Thread-177069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:30:50.789 [DEBUG] [Thread-177069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:30:50.790 [DEBUG] [Thread-177069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:30:50.799 [DEBUG] [Thread-177069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:30:50.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:30:50.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-04-11T21:30:50.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-04-11T21:30:50.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:30:50.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:30:50.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:30:50.833 [DEBUG] [Thread-177069] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:30:54.479 [DEBUG] [Thread-177071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:09.530 [DEBUG] [Thread-177072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:31:20.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:31:20.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-04-11T21:31:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 30, 53), -0.01456, 100.023, 0.0, 10.8346, 12.2157, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:31:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:30:53
2026-04-11T21:31:22.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:31:22.644 [DEBUG] [Thread-177073] [transport.py] [_log()] starting thread (client mode): 0xa79119c0
2026-04-11T21:31:22.644 [DEBUG] [Thread-177073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:31:22.668 [DEBUG] [Thread-177073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:31:22.668 [INFO] [Thread-177073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:31:22.671 [DEBUG] [Thread-177073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:31:22.671 [DEBUG] [Thread-177073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] client lang: <none>
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] server lang: <none>
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] kex follows: False
2026-04-11T21:31:22.672 [DEBUG] [Thread-177073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:31:22.673 [DEBUG] [Thread-177073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:31:22.673 [DEBUG] [Thread-177073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:31:22.673 [DEBUG] [Thread-177073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:31:22.673 [DEBUG] [Thread-177073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:31:22.673 [DEBUG] [Thread-177073] [transport.py] [_log()] Compression: none
2026-04-11T21:31:22.673 [DEBUG] [Thread-177073] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:31:22.690 [DEBUG] [Thread-177073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:31:22.691 [DEBUG] [Thread-177073] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:31:22.691 [DEBUG] [Thread-177073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:31:22.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:31:22.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:31:22.693 [DEBUG] [Thread-177073] [transport.py] [_log()] userauth is OK
2026-04-11T21:31:22.693 [DEBUG] [Thread-177073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:31:22.693 [DEBUG] [Thread-177073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:31:22.693 [DEBUG] [Thread-177073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:31:22.693 [DEBUG] [Thread-177073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:31:22.717 [INFO] [Thread-177073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:31:22.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:31:23.529 [DEBUG] [Thread-177073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:31:23.530 [DEBUG] [Thread-177073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:31:23.530 [DEBUG] [Thread-177073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:31:23.571 [DEBUG] [Thread-177073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:31:23.571 [DEBUG] [Thread-177073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:31:23.573 [DEBUG] [Thread-177073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:31:23.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:31:23.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:31:23.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:31:23.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:31:23.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:31:23.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:31:23.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:31:23.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:31:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:31:23.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.812962 -999.00  +11.70  11.31     97  +11.30 1 3 1 3 1     0    0 0.39 0.83 ----- 11.3 11.3 276.6 14.2 13.2 -1.6 13.1 -0.4 12.7 -0.3 13.0 -0.8
2026-04-11T21:31:23.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:31:23.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:31:23.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.812962
2026-04-11T21:31:23.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:31:23.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:31:23.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:31:23.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:31:23.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:31:23.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:30:53', tmtdew=-0.01456, humidity=100.023, cloud=0.0, wind=10.8346, temperature=12.2157, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:30:39.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:31:23.597 [DEBUG] [Thread-177073] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:31:23.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:31:23.692 [DEBUG] [Thread-177076] [transport.py] [_log()] starting thread (client mode): 0xa7911570
2026-04-11T21:31:23.692 [DEBUG] [Thread-177076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:31:23.707 [DEBUG] [Thread-177076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:31:23.707 [INFO] [Thread-177076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:31:23.714 [DEBUG] [Thread-177076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:31:23.714 [DEBUG] [Thread-177076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:31:23.714 [DEBUG] [Thread-177076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:31:23.714 [DEBUG] [Thread-177076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:23.714 [DEBUG] [Thread-177076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] client lang: <none>
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] server lang: <none>
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] kex follows: False
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] Compression: none
2026-04-11T21:31:23.715 [DEBUG] [Thread-177076] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:31:23.775 [DEBUG] [Thread-177076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:31:23.775 [DEBUG] [Thread-177076] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:31:23.776 [DEBUG] [Thread-177076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:31:23.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:31:23.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:31:23.831 [DEBUG] [Thread-177076] [transport.py] [_log()] userauth is OK
2026-04-11T21:31:23.831 [DEBUG] [Thread-177076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:31:23.831 [DEBUG] [Thread-177076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:31:23.831 [DEBUG] [Thread-177076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:31:23.831 [DEBUG] [Thread-177076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:31:23.849 [INFO] [Thread-177076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:31:23.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:31:23.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:31:24.567 [DEBUG] [Thread-177078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:24.707 [DEBUG] [Thread-177076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:31:24.707 [DEBUG] [Thread-177076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:31:24.756 [DEBUG] [Thread-177076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:31:24.756 [DEBUG] [Thread-177076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:31:24.765 [DEBUG] [Thread-177076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:31:24.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:31:24.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:31:24.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-04-11T21:31:24.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:31:24.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:31:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:31:24.799 [DEBUG] [Thread-177076] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:31:29.253 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:29.254 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:34.532 [DEBUG] [Thread-177079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:39.616 [DEBUG] [Thread-177080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:54.656 [DEBUG] [Thread-177081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:31:54.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:31:54.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:31:54.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-04-11T21:31:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 31, 28), -0.002285, 99.9784, 0.0, 11.3818, 11.7746, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:31:56.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:31:28
2026-04-11T21:31:56.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:31:56.620 [DEBUG] [Thread-177082] [transport.py] [_log()] starting thread (client mode): 0xa7912a40
2026-04-11T21:31:56.620 [DEBUG] [Thread-177082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:31:56.638 [DEBUG] [Thread-177082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:31:56.638 [INFO] [Thread-177082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:31:56.641 [DEBUG] [Thread-177082] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:31:56.641 [DEBUG] [Thread-177082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:31:56.641 [DEBUG] [Thread-177082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] client lang: <none>
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] server lang: <none>
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] kex follows: False
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] Compression: none
2026-04-11T21:31:56.642 [DEBUG] [Thread-177082] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:31:56.661 [DEBUG] [Thread-177082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:31:56.661 [DEBUG] [Thread-177082] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:31:56.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:31:56.662 [DEBUG] [Thread-177082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:31:56.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:31:56.664 [DEBUG] [Thread-177082] [transport.py] [_log()] userauth is OK
2026-04-11T21:31:56.664 [DEBUG] [Thread-177082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:31:56.664 [DEBUG] [Thread-177082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:31:56.664 [DEBUG] [Thread-177082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:31:56.664 [DEBUG] [Thread-177082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:31:56.682 [INFO] [Thread-177082] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:31:56.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:31:57.462 [DEBUG] [Thread-177082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:31:57.463 [DEBUG] [Thread-177082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:31:57.463 [DEBUG] [Thread-177082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:31:57.503 [DEBUG] [Thread-177082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:31:57.503 [DEBUG] [Thread-177082] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:31:57.507 [DEBUG] [Thread-177082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:31:57.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:31:57.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:31:57.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:31:57.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:31:57.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:31:57.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:31:57.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:31:57.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:31:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:31:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.813309 -999.00  +11.80  10.04     97  +11.40 1 3 1 3 1     0    0 0.41 0.98 ----- 10.0 10.0 288.6 12.5 13.2 -1.5 13.0 -0.3 12.7 -0.5 13.0 -0.8
2026-04-11T21:31:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:31:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:31:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.813309
2026-04-11T21:31:57.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:31:57.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:31:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:31:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:31:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:31:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:31:28', tmtdew=-0.002285, humidity=99.9784, cloud=0.0, wind=11.3818, temperature=11.7746, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:31:09.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:31:57.536 [DEBUG] [Thread-177082] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:31:57.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:31:57.629 [DEBUG] [Thread-177085] [transport.py] [_log()] starting thread (client mode): 0xb0fb7be0
2026-04-11T21:31:57.629 [DEBUG] [Thread-177085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:31:57.644 [DEBUG] [Thread-177085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:31:57.645 [INFO] [Thread-177085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:31:57.652 [DEBUG] [Thread-177085] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:31:57.652 [DEBUG] [Thread-177085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:31:57.652 [DEBUG] [Thread-177085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:31:57.652 [DEBUG] [Thread-177085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] client lang: <none>
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] server lang: <none>
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] kex follows: False
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] Compression: none
2026-04-11T21:31:57.653 [DEBUG] [Thread-177085] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:31:57.709 [DEBUG] [Thread-177085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:31:57.709 [DEBUG] [Thread-177085] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:31:57.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:31:57.710 [DEBUG] [Thread-177085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:31:57.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:31:57.766 [DEBUG] [Thread-177085] [transport.py] [_log()] userauth is OK
2026-04-11T21:31:57.766 [DEBUG] [Thread-177085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:31:57.766 [DEBUG] [Thread-177085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:31:57.767 [DEBUG] [Thread-177085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:31:57.767 [DEBUG] [Thread-177085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:31:57.788 [INFO] [Thread-177085] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:31:57.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:31:57.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:31:58.607 [DEBUG] [Thread-177085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:31:58.608 [DEBUG] [Thread-177085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:31:58.655 [DEBUG] [Thread-177085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:31:58.656 [DEBUG] [Thread-177085] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:31:58.665 [DEBUG] [Thread-177085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:31:58.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:31:58.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-04-11T21:31:58.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-04-11T21:31:58.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:31:58.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:31:58.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:31:58.702 [DEBUG] [Thread-177085] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:32:09.692 [DEBUG] [Thread-177087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:32:24.747 [DEBUG] [Thread-177088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:32:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:32:28.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:32:28.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:32:29.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:32:29.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:32:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 32, 4), 0.00028, 99.9618, 0.0, 11.223, 11.7248, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:32:29.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:32:04
2026-04-11T21:32:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:32:30.554 [DEBUG] [Thread-177089] [transport.py] [_log()] starting thread (client mode): 0xae5177f0
2026-04-11T21:32:30.554 [DEBUG] [Thread-177089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:32:30.574 [DEBUG] [Thread-177089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:32:30.574 [INFO] [Thread-177089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] client lang: <none>
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] server lang: <none>
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] kex follows: False
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] Compression: none
2026-04-11T21:32:30.578 [DEBUG] [Thread-177089] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:32:30.594 [DEBUG] [Thread-177089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:32:30.595 [DEBUG] [Thread-177089] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:32:30.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:32:30.596 [DEBUG] [Thread-177089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:32:30.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:32:30.598 [DEBUG] [Thread-177089] [transport.py] [_log()] userauth is OK
2026-04-11T21:32:30.598 [DEBUG] [Thread-177089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:32:30.599 [DEBUG] [Thread-177089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:32:30.599 [DEBUG] [Thread-177089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:32:30.599 [DEBUG] [Thread-177089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:32:30.616 [INFO] [Thread-177089] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:32:30.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:32:31.435 [DEBUG] [Thread-177089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:32:31.435 [DEBUG] [Thread-177089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:32:31.436 [DEBUG] [Thread-177089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:32:31.476 [DEBUG] [Thread-177089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:32:31.476 [DEBUG] [Thread-177089] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:32:31.480 [DEBUG] [Thread-177089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:32:31.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:32:31.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:32:31.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:32:31.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:32:31.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:32:31.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:32:31.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:32:31.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:32:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:32:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.813657 -999.00  +11.80  12.18     97  +11.40 1 3 1 3 1     0    0 0.41 1.03 ----- 12.2 12.2 282.0 14.2 13.2 -1.6 13.1 -0.3 12.6 -0.5 13.0 -0.7
2026-04-11T21:32:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:32:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:32:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.813657
2026-04-11T21:32:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:32:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:32:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:32:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:32:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:32:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:32:04', tmtdew=0.00028, humidity=99.9618, cloud=0.0, wind=11.223, temperature=11.7248, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:31:39.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:32:31.507 [DEBUG] [Thread-177089] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:32:31.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:32:31.601 [DEBUG] [Thread-177092] [transport.py] [_log()] starting thread (client mode): 0xa7952590
2026-04-11T21:32:31.601 [DEBUG] [Thread-177092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:32:31.615 [DEBUG] [Thread-177092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:32:31.615 [INFO] [Thread-177092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] client lang: <none>
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] server lang: <none>
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] kex follows: False
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:32:31.623 [DEBUG] [Thread-177092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:32:31.624 [DEBUG] [Thread-177092] [transport.py] [_log()] Compression: none
2026-04-11T21:32:31.624 [DEBUG] [Thread-177092] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:32:31.682 [DEBUG] [Thread-177092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:32:31.683 [DEBUG] [Thread-177092] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:32:31.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:32:31.684 [DEBUG] [Thread-177092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:32:31.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:32:31.738 [DEBUG] [Thread-177092] [transport.py] [_log()] userauth is OK
2026-04-11T21:32:31.738 [DEBUG] [Thread-177092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:32:31.738 [DEBUG] [Thread-177092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:32:31.738 [DEBUG] [Thread-177092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:32:31.738 [DEBUG] [Thread-177092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:32:31.757 [INFO] [Thread-177092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:32:31.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:32:31.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:32:32.580 [DEBUG] [Thread-177092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:32:32.580 [DEBUG] [Thread-177092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:32:32.633 [DEBUG] [Thread-177092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:32:32.633 [DEBUG] [Thread-177092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:32:32.642 [DEBUG] [Thread-177092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:32:32.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:32:32.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-04-11T21:32:32.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-04-11T21:32:32.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:32:32.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:32:32.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:32:32.697 [DEBUG] [Thread-177092] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:32:34.600 [DEBUG] [Thread-177094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:32:39.782 [DEBUG] [Thread-177095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:32:54.829 [DEBUG] [Thread-177096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:02.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:33:02.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:33:02.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-04-11T21:33:04.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 32, 39), -0.01972, 100.057, 0.0, 11.5402, 12.2162, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:33:04.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:32:39
2026-04-11T21:33:04.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:33:04.587 [DEBUG] [Thread-177097] [transport.py] [_log()] starting thread (client mode): 0xa7911960
2026-04-11T21:33:04.587 [DEBUG] [Thread-177097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:33:04.607 [DEBUG] [Thread-177097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:33:04.608 [INFO] [Thread-177097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:33:04.610 [DEBUG] [Thread-177097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:33:04.610 [DEBUG] [Thread-177097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:33:04.610 [DEBUG] [Thread-177097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:33:04.610 [DEBUG] [Thread-177097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:04.610 [DEBUG] [Thread-177097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:04.610 [DEBUG] [Thread-177097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] client lang: <none>
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] server lang: <none>
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] kex follows: False
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] Compression: none
2026-04-11T21:33:04.611 [DEBUG] [Thread-177097] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:33:04.627 [DEBUG] [Thread-177097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:33:04.628 [DEBUG] [Thread-177097] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:33:04.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:33:04.629 [DEBUG] [Thread-177097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:33:04.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:33:04.673 [DEBUG] [Thread-177097] [transport.py] [_log()] userauth is OK
2026-04-11T21:33:04.673 [DEBUG] [Thread-177097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:33:04.673 [DEBUG] [Thread-177097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:33:04.673 [DEBUG] [Thread-177097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:33:04.673 [DEBUG] [Thread-177097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:33:04.694 [INFO] [Thread-177097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:33:04.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:33:05.506 [DEBUG] [Thread-177097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:33:05.507 [DEBUG] [Thread-177097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:33:05.507 [DEBUG] [Thread-177097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:33:05.548 [DEBUG] [Thread-177097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:33:05.548 [DEBUG] [Thread-177097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:33:05.552 [DEBUG] [Thread-177097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:33:05.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:33:05.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:33:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:33:05.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:33:05.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:33:05.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:33:05.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:33:05.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.814351 -999.00  +11.70  10.46     97  +11.40 1 3 1 3 1     0    0 0.41 1.11 ----- 10.5 10.5 287.2 18.3 13.2 -1.4 13.1 -0.4 12.7 -0.9 13.0 -0.8
2026-04-11T21:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:33:05.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.814351
2026-04-11T21:33:05.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:33:05.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:33:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:33:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:33:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:33:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:32:39', tmtdew=-0.01972, humidity=100.057, cloud=0.0, wind=11.5402, temperature=12.2162, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:32:39.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:33:05.578 [DEBUG] [Thread-177097] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:33:05.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:33:05.679 [DEBUG] [Thread-177100] [transport.py] [_log()] starting thread (client mode): 0xa7911d20
2026-04-11T21:33:05.679 [DEBUG] [Thread-177100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:33:05.694 [DEBUG] [Thread-177100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:33:05.694 [INFO] [Thread-177100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:33:05.702 [DEBUG] [Thread-177100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:33:05.702 [DEBUG] [Thread-177100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] client lang: <none>
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] server lang: <none>
2026-04-11T21:33:05.703 [DEBUG] [Thread-177100] [transport.py] [_log()] kex follows: False
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] Compression: none
2026-04-11T21:33:05.704 [DEBUG] [Thread-177100] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:33:05.765 [DEBUG] [Thread-177100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:33:05.765 [DEBUG] [Thread-177100] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:33:05.766 [DEBUG] [Thread-177100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:33:05.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:33:05.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:33:05.825 [DEBUG] [Thread-177100] [transport.py] [_log()] userauth is OK
2026-04-11T21:33:05.825 [DEBUG] [Thread-177100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:33:05.825 [DEBUG] [Thread-177100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:33:05.825 [DEBUG] [Thread-177100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:33:05.825 [DEBUG] [Thread-177100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:33:05.844 [INFO] [Thread-177100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:33:05.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:33:05.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:33:06.648 [DEBUG] [Thread-177100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:33:06.648 [DEBUG] [Thread-177100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:33:06.696 [DEBUG] [Thread-177100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:33:06.696 [DEBUG] [Thread-177100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:33:06.705 [DEBUG] [Thread-177100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:33:06.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:33:06.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-04-11T21:33: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-04-11T21:33:06.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:33:06.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:33:06.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:33:06.743 [DEBUG] [Thread-177100] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:33:09.870 [DEBUG] [Thread-177102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:24.924 [DEBUG] [Thread-177103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:29.660 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:29.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:34.680 [DEBUG] [Thread-177104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:36.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:33:36.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:33:36.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-04-11T21:33:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 33, 15), -0.007335, 100.012, 0.0, 13.3052, 11.7581, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:33:38.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:33:15
2026-04-11T21:33:38.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:33:38.576 [DEBUG] [Thread-177105] [transport.py] [_log()] starting thread (client mode): 0xb0f557b0
2026-04-11T21:33:38.576 [DEBUG] [Thread-177105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:33:38.596 [DEBUG] [Thread-177105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:33:38.596 [INFO] [Thread-177105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] client lang: <none>
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] server lang: <none>
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] kex follows: False
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:33:38.600 [DEBUG] [Thread-177105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:33:38.601 [DEBUG] [Thread-177105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:33:38.601 [DEBUG] [Thread-177105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:33:38.601 [DEBUG] [Thread-177105] [transport.py] [_log()] Compression: none
2026-04-11T21:33:38.601 [DEBUG] [Thread-177105] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:33:38.608 [DEBUG] [Thread-177105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:33:38.609 [DEBUG] [Thread-177105] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:33:38.609 [DEBUG] [Thread-177105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:33:38.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:33:38.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:33:38.611 [DEBUG] [Thread-177105] [transport.py] [_log()] userauth is OK
2026-04-11T21:33:38.612 [DEBUG] [Thread-177105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:33:38.612 [DEBUG] [Thread-177105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:33:38.612 [DEBUG] [Thread-177105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:33:38.612 [DEBUG] [Thread-177105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:33:38.630 [INFO] [Thread-177105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:33:38.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:33:39.397 [DEBUG] [Thread-177105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:33:39.398 [DEBUG] [Thread-177105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:33:39.398 [DEBUG] [Thread-177105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:33:39.439 [DEBUG] [Thread-177105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:33:39.439 [DEBUG] [Thread-177105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:33:39.443 [DEBUG] [Thread-177105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:33:39.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:33:39.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:33:39.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:33:39.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:33:39.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:33:39.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:33:39.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:33:39.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:33:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:33:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.814698 -999.00  +11.80  11.21     97  +11.40 1 3 1 3 1     0    0 0.42 1.20 ----- 11.2 11.2 284.2 11.7 13.2 -1.2 13.1 -0.4 12.7 -0.9 13.0 -0.7
2026-04-11T21:33:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:33:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:33:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.814698
2026-04-11T21:33:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:33:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:33:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:33:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:33:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:33:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:33:15', tmtdew=-0.007335, humidity=100.012, cloud=0.0, wind=13.3052, temperature=11.7581, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:33:09.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:33:39.468 [DEBUG] [Thread-177105] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:33:39.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:33:39.561 [DEBUG] [Thread-177108] [transport.py] [_log()] starting thread (client mode): 0xae519a20
2026-04-11T21:33:39.561 [DEBUG] [Thread-177108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:33:39.576 [DEBUG] [Thread-177108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:33:39.576 [INFO] [Thread-177108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:33:39.584 [DEBUG] [Thread-177108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:33:39.584 [DEBUG] [Thread-177108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:33:39.584 [DEBUG] [Thread-177108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:33:39.584 [DEBUG] [Thread-177108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:39.584 [DEBUG] [Thread-177108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:33:39.584 [DEBUG] [Thread-177108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] client lang: <none>
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] server lang: <none>
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] kex follows: False
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:33:39.585 [DEBUG] [Thread-177108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:33:39.586 [DEBUG] [Thread-177108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:33:39.586 [DEBUG] [Thread-177108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:33:39.586 [DEBUG] [Thread-177108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:33:39.586 [DEBUG] [Thread-177108] [transport.py] [_log()] Compression: none
2026-04-11T21:33:39.586 [DEBUG] [Thread-177108] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:33:39.645 [DEBUG] [Thread-177108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:33:39.645 [DEBUG] [Thread-177108] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:33:39.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:33:39.647 [DEBUG] [Thread-177108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:33:39.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:33:39.704 [DEBUG] [Thread-177108] [transport.py] [_log()] userauth is OK
2026-04-11T21:33:39.705 [DEBUG] [Thread-177108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:33:39.705 [DEBUG] [Thread-177108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:33:39.705 [DEBUG] [Thread-177108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:33:39.705 [DEBUG] [Thread-177108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:33:39.724 [INFO] [Thread-177108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:33:39.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:33:39.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:33:39.960 [DEBUG] [Thread-177110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:33:40.557 [DEBUG] [Thread-177108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:33:40.557 [DEBUG] [Thread-177108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:33:40.605 [DEBUG] [Thread-177108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:33:40.605 [DEBUG] [Thread-177108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:33:40.614 [DEBUG] [Thread-177108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:33:40.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:33:40.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-04-11T21:33:40.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-04-11T21:33:40.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:33:40.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:33:40.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:33:40.649 [DEBUG] [Thread-177108] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:33:55.015 [DEBUG] [Thread-177111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:10.052 [DEBUG] [Thread-177112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:34:10.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:34:10.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-04-11T21:34:11.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 33, 50), -0.00952, 99.9898, 0.0, 12.5986, 12.1827, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:34:11.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:33:50
2026-04-11T21:34:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:34:12.519 [DEBUG] [Thread-177113] [transport.py] [_log()] starting thread (client mode): 0xa7911570
2026-04-11T21:34:12.519 [DEBUG] [Thread-177113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:34:12.539 [DEBUG] [Thread-177113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:34:12.539 [INFO] [Thread-177113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] client lang: <none>
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] server lang: <none>
2026-04-11T21:34:12.543 [DEBUG] [Thread-177113] [transport.py] [_log()] kex follows: False
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] Compression: none
2026-04-11T21:34:12.544 [DEBUG] [Thread-177113] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:34:12.563 [DEBUG] [Thread-177113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:34:12.564 [DEBUG] [Thread-177113] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:34:12.564 [DEBUG] [Thread-177113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:34:12.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:34:12.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:34:12.566 [DEBUG] [Thread-177113] [transport.py] [_log()] userauth is OK
2026-04-11T21:34:12.566 [DEBUG] [Thread-177113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:34:12.567 [DEBUG] [Thread-177113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:34:12.567 [DEBUG] [Thread-177113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:34:12.567 [DEBUG] [Thread-177113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:34:12.579 [INFO] [Thread-177113] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:34:12.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:34:13.369 [DEBUG] [Thread-177113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:34:13.369 [DEBUG] [Thread-177113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:34:13.370 [DEBUG] [Thread-177113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:34:13.410 [DEBUG] [Thread-177113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:34:13.410 [DEBUG] [Thread-177113] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:34:13.414 [DEBUG] [Thread-177113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:34:13.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:34:13.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:34:13.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:34:13.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:34:13.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:34:13.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:34:13.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:34:13.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:34:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:34:13.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.815045 -999.00  +11.70  12.44     97  +11.40 1 3 1 3 1     0    0 0.41 1.35 ----- 12.4 12.4 284.0 17.1 13.2 -1.1 13.1 -0.3 12.7 -0.7 13.0 -0.7
2026-04-11T21:34:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:34:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:34:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.815045
2026-04-11T21:34:13.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:34:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:34:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:34:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:34:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:34:13.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:33:50', tmtdew=-0.00952, humidity=99.9898, cloud=0.0, wind=12.5986, temperature=12.1827, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:33:39.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:34:13.442 [DEBUG] [Thread-177113] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:34:13.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:34:13.535 [DEBUG] [Thread-177116] [transport.py] [_log()] starting thread (client mode): 0xb0f55210
2026-04-11T21:34:13.535 [DEBUG] [Thread-177116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:34:13.550 [DEBUG] [Thread-177116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:34:13.550 [INFO] [Thread-177116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:34:13.557 [DEBUG] [Thread-177116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:34:13.558 [DEBUG] [Thread-177116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] client lang: <none>
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] server lang: <none>
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] kex follows: False
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] Compression: none
2026-04-11T21:34:13.559 [DEBUG] [Thread-177116] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:34:13.615 [DEBUG] [Thread-177116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:34:13.616 [DEBUG] [Thread-177116] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:34:13.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:34:13.617 [DEBUG] [Thread-177116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:34:13.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:34:13.671 [DEBUG] [Thread-177116] [transport.py] [_log()] userauth is OK
2026-04-11T21:34:13.671 [DEBUG] [Thread-177116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:34:13.671 [DEBUG] [Thread-177116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:34:13.671 [DEBUG] [Thread-177116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:34:13.671 [DEBUG] [Thread-177116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:34:13.685 [INFO] [Thread-177116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:34:13.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:34:13.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:34:14.583 [DEBUG] [Thread-177116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:34:14.583 [DEBUG] [Thread-177116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:34:14.631 [DEBUG] [Thread-177116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:34:14.632 [DEBUG] [Thread-177116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:34:14.641 [DEBUG] [Thread-177116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:34:14.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:34:14.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-04-11T21:34:14.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-04-11T21:34:14.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:34:14.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:34:14.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:34:14.678 [DEBUG] [Thread-177116] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:34:25.090 [DEBUG] [Thread-177118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:29.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:29.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:34.746 [DEBUG] [Thread-177119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:40.156 [DEBUG] [Thread-177120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:34:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:34:44.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:34:44.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-04-11T21:34:45.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 34, 27), -0.004775, 99.9951, 0.0, 11.9815, 11.7249, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:34:45.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:34:27
2026-04-11T21:34:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:34:46.523 [DEBUG] [Thread-177121] [transport.py] [_log()] starting thread (client mode): 0xa7911d20
2026-04-11T21:34:46.523 [DEBUG] [Thread-177121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:34:46.543 [DEBUG] [Thread-177121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:34:46.543 [INFO] [Thread-177121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:34:46.546 [DEBUG] [Thread-177121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:34:46.546 [DEBUG] [Thread-177121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:34:46.546 [DEBUG] [Thread-177121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] client lang: <none>
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] server lang: <none>
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] kex follows: False
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] Compression: none
2026-04-11T21:34:46.547 [DEBUG] [Thread-177121] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:34:46.565 [DEBUG] [Thread-177121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:34:46.565 [DEBUG] [Thread-177121] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:34:46.566 [DEBUG] [Thread-177121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:34:46.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:34:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:34:46.568 [DEBUG] [Thread-177121] [transport.py] [_log()] userauth is OK
2026-04-11T21:34:46.568 [DEBUG] [Thread-177121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:34:46.568 [DEBUG] [Thread-177121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:34:46.568 [DEBUG] [Thread-177121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:34:46.569 [DEBUG] [Thread-177121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:34:46.585 [INFO] [Thread-177121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:34:46.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:34:47.377 [DEBUG] [Thread-177121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:34:47.377 [DEBUG] [Thread-177121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:34:47.377 [DEBUG] [Thread-177121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:34:47.418 [DEBUG] [Thread-177121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:34:47.418 [DEBUG] [Thread-177121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:34:47.420 [DEBUG] [Thread-177121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:34:47.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:34:47.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:34:47.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:34:47.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:34:47.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:34:47.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:34:47.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.815393 -999.00  +11.70  11.18     97  +11.30 1 3 1 3 1     0    0 0.43 1.53 ----- 11.2 11.2 285.0 13.2 13.2 -1.3 13.1 -0.4 12.7 -0.6 13.1 -0.8
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.815393
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:34:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:34:27', tmtdew=-0.004775, humidity=99.9951, cloud=0.0, wind=11.9815, temperature=11.7249, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:34:09.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:34:47.440 [DEBUG] [Thread-177121] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:34:47.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:34:47.522 [DEBUG] [Thread-177124] [transport.py] [_log()] starting thread (client mode): 0xb0f8c580
2026-04-11T21:34:47.522 [DEBUG] [Thread-177124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:34:47.537 [DEBUG] [Thread-177124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:34:47.537 [INFO] [Thread-177124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] client lang: <none>
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] server lang: <none>
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] kex follows: False
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:34:47.544 [DEBUG] [Thread-177124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:34:47.545 [DEBUG] [Thread-177124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:34:47.545 [DEBUG] [Thread-177124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:34:47.545 [DEBUG] [Thread-177124] [transport.py] [_log()] Compression: none
2026-04-11T21:34:47.545 [DEBUG] [Thread-177124] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:34:47.601 [DEBUG] [Thread-177124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:34:47.601 [DEBUG] [Thread-177124] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:34:47.601 [DEBUG] [Thread-177124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:34:47.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:34:47.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:34:47.658 [DEBUG] [Thread-177124] [transport.py] [_log()] userauth is OK
2026-04-11T21:34:47.658 [DEBUG] [Thread-177124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:34:47.658 [DEBUG] [Thread-177124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:34:47.658 [DEBUG] [Thread-177124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:34:47.658 [DEBUG] [Thread-177124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:34:47.672 [INFO] [Thread-177124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:34:47.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:34:47.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:34:48.499 [DEBUG] [Thread-177124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:34:48.500 [DEBUG] [Thread-177124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:34:48.548 [DEBUG] [Thread-177124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:34:48.548 [DEBUG] [Thread-177124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:34:48.557 [DEBUG] [Thread-177124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:34:48.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:34:48.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-04-11T21:34:48.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-04-11T21:34:48.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:34:48.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:34:48.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:34:48.594 [DEBUG] [Thread-177124] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:34:55.193 [DEBUG] [Thread-177126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:10.243 [DEBUG] [Thread-177127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:35:18.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:35:18.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-04-11T21:35:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 35, 2), -0.00227, 99.9785, 0.0, 10.8349, 11.7415, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:35:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:35:02
2026-04-11T21:35:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:35:20.395 [DEBUG] [Thread-177128] [transport.py] [_log()] starting thread (client mode): 0xb0f8d540
2026-04-11T21:35:20.395 [DEBUG] [Thread-177128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:35:20.416 [DEBUG] [Thread-177128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:35:20.416 [INFO] [Thread-177128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] client lang: <none>
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] server lang: <none>
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] kex follows: False
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] Compression: none
2026-04-11T21:35:20.419 [DEBUG] [Thread-177128] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:35:20.436 [DEBUG] [Thread-177128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:35:20.436 [DEBUG] [Thread-177128] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:35:20.436 [DEBUG] [Thread-177128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:35:20.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:35:20.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:35:20.438 [DEBUG] [Thread-177128] [transport.py] [_log()] userauth is OK
2026-04-11T21:35:20.438 [DEBUG] [Thread-177128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:35:20.438 [DEBUG] [Thread-177128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:35:20.439 [DEBUG] [Thread-177128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:35:20.439 [DEBUG] [Thread-177128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:35:20.453 [INFO] [Thread-177128] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:35:20.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:35:21.550 [DEBUG] [Thread-177128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:35:21.551 [DEBUG] [Thread-177128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:35:21.551 [DEBUG] [Thread-177128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:35:21.592 [DEBUG] [Thread-177128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:35:21.592 [DEBUG] [Thread-177128] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:35:21.595 [DEBUG] [Thread-177128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:35:21.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:35:21.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:35:21.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:35:21.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:35:21.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:35:21.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:35:21.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:35:21.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:35:21.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:35:21.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.815740 -999.00  +11.70   9.47     97  +11.30 1 3 1 3 1     0    0 0.42 1.54 ----- 9.5 9.5 292.0 14.5 13.2 -1.6 13.1 -0.5 12.6 -1.0 13.0 -0.9
2026-04-11T21:35:21.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:35:21.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:35:21.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.815740
2026-04-11T21:35:21.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:35:21.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:35:21.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:35:21.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:35:21.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:35:21.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:35:02', tmtdew=-0.00227, humidity=99.9785, cloud=0.0, wind=10.8349, temperature=11.7415, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:34:39.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:35:21.623 [DEBUG] [Thread-177128] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:35:21.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:35:21.729 [DEBUG] [Thread-177131] [transport.py] [_log()] starting thread (client mode): 0xb0fb53f0
2026-04-11T21:35:21.729 [DEBUG] [Thread-177131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:35:21.743 [DEBUG] [Thread-177131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:35:21.743 [INFO] [Thread-177131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:35:21.754 [DEBUG] [Thread-177131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] client lang: <none>
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] server lang: <none>
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] kex follows: False
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] Compression: none
2026-04-11T21:35:21.755 [DEBUG] [Thread-177131] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:35:21.815 [DEBUG] [Thread-177131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:35:21.816 [DEBUG] [Thread-177131] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:35:21.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:35:21.817 [DEBUG] [Thread-177131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:35:21.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:35:21.880 [DEBUG] [Thread-177131] [transport.py] [_log()] userauth is OK
2026-04-11T21:35:21.881 [DEBUG] [Thread-177131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:35:21.881 [DEBUG] [Thread-177131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:35:21.881 [DEBUG] [Thread-177131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:35:21.881 [DEBUG] [Thread-177131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:35:21.903 [INFO] [Thread-177131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:35:21.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:35:21.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:35:22.725 [DEBUG] [Thread-177131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:35:22.726 [DEBUG] [Thread-177131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:35:22.773 [DEBUG] [Thread-177131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:35:22.773 [DEBUG] [Thread-177131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:35:22.785 [DEBUG] [Thread-177131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:35:22.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:35:22.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-04-11T21:35:22.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:35:22.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:35:22.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:35:22.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:35:22.834 [DEBUG] [Thread-177131] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:35:25.286 [DEBUG] [Thread-177133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:30.070 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:30.072 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:34.803 [DEBUG] [Thread-177134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:40.338 [DEBUG] [Thread-177135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:52.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:35:52.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:35:52.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-04-11T21:35:54.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 35, 37), -0.01459, 100.023, 0.0, 10.4465, 12.1498, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:35:54.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:35:37
2026-04-11T21:35:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:35:54.631 [DEBUG] [Thread-177136] [transport.py] [_log()] starting thread (client mode): 0xae51b310
2026-04-11T21:35:54.631 [DEBUG] [Thread-177136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:35:54.653 [DEBUG] [Thread-177136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:35:54.653 [INFO] [Thread-177136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:54.657 [DEBUG] [Thread-177136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] client lang: <none>
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] server lang: <none>
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] kex follows: False
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] Compression: none
2026-04-11T21:35:54.658 [DEBUG] [Thread-177136] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:35:54.676 [DEBUG] [Thread-177136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:35:54.677 [DEBUG] [Thread-177136] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:35:54.677 [DEBUG] [Thread-177136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:35:54.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:35:54.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:35:54.679 [DEBUG] [Thread-177136] [transport.py] [_log()] userauth is OK
2026-04-11T21:35:54.679 [DEBUG] [Thread-177136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:35:54.679 [DEBUG] [Thread-177136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:35:54.679 [DEBUG] [Thread-177136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:35:54.680 [DEBUG] [Thread-177136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:35:54.698 [INFO] [Thread-177136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:35:54.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:35:55.377 [DEBUG] [Thread-177138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:35:55.461 [DEBUG] [Thread-177136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:35:55.461 [DEBUG] [Thread-177136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:35:55.462 [DEBUG] [Thread-177136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:35:55.502 [DEBUG] [Thread-177136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:35:55.502 [DEBUG] [Thread-177136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:35:55.505 [DEBUG] [Thread-177136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:35:55.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:35:55.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:35:55.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:35:55.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:35:55.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:35:55.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:35:55.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:35:55.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:35:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:35:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.816087 -999.00  +11.70   9.90     97  +11.30 1 3 1 3 1     0    0 0.43 1.72 ----- 9.9 9.9 280.4 13.5 13.2 -1.6 13.1 -0.4 12.7 -0.8 13.0 -0.7
2026-04-11T21:35:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:35:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:35:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.816087
2026-04-11T21:35:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:35:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:35:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:35:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:35:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:35:55.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:35:37', tmtdew=-0.01459, humidity=100.023, cloud=0.0, wind=10.4465, temperature=12.1498, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:35:09.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:35:55.530 [DEBUG] [Thread-177136] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:35:55.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:35:55.624 [DEBUG] [Thread-177140] [transport.py] [_log()] starting thread (client mode): 0xae515bd0
2026-04-11T21:35:55.624 [DEBUG] [Thread-177140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:35:55.639 [DEBUG] [Thread-177140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:35:55.639 [INFO] [Thread-177140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:55.647 [DEBUG] [Thread-177140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] client lang: <none>
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] server lang: <none>
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] kex follows: False
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] Compression: none
2026-04-11T21:35:55.648 [DEBUG] [Thread-177140] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:35:55.706 [DEBUG] [Thread-177140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:35:55.706 [DEBUG] [Thread-177140] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:35:55.707 [DEBUG] [Thread-177140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:35:55.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:35:55.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:35:55.762 [DEBUG] [Thread-177140] [transport.py] [_log()] userauth is OK
2026-04-11T21:35:55.762 [DEBUG] [Thread-177140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:35:55.762 [DEBUG] [Thread-177140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:35:55.762 [DEBUG] [Thread-177140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:35:55.762 [DEBUG] [Thread-177140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:35:55.780 [INFO] [Thread-177140] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:35:55.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:35:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:35:56.570 [DEBUG] [Thread-177140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:35:56.570 [DEBUG] [Thread-177140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:35:56.618 [DEBUG] [Thread-177140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:35:56.619 [DEBUG] [Thread-177140] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:35:56.628 [DEBUG] [Thread-177140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:35:56.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:35:56.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-04-11T21:35:56.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-04-11T21:35:56.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:35:56.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:35:56.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:35:56.664 [DEBUG] [Thread-177140] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:36:10.414 [DEBUG] [Thread-177142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:36:25.465 [DEBUG] [Thread-177143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:36:26.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:36:26.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:36:26.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-04-11T21:36:27.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 36, 13), 0.03507, 100.062, 0.0, 10.5343, 11.7747, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:36:27.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:36:13
2026-04-11T21:36:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:36:28.508 [DEBUG] [Thread-177144] [transport.py] [_log()] starting thread (client mode): 0xb0f8cf70
2026-04-11T21:36:28.508 [DEBUG] [Thread-177144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:36:28.530 [DEBUG] [Thread-177144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:36:28.530 [INFO] [Thread-177144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] client lang: <none>
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] server lang: <none>
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] kex follows: False
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:36:28.534 [DEBUG] [Thread-177144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:36:28.535 [DEBUG] [Thread-177144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:36:28.535 [DEBUG] [Thread-177144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:36:28.535 [DEBUG] [Thread-177144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:36:28.535 [DEBUG] [Thread-177144] [transport.py] [_log()] Compression: none
2026-04-11T21:36:28.535 [DEBUG] [Thread-177144] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:36:28.554 [DEBUG] [Thread-177144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:36:28.555 [DEBUG] [Thread-177144] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:36:28.555 [DEBUG] [Thread-177144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:36:28.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:36:28.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:36:28.557 [DEBUG] [Thread-177144] [transport.py] [_log()] userauth is OK
2026-04-11T21:36:28.557 [DEBUG] [Thread-177144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:36:28.557 [DEBUG] [Thread-177144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:36:28.557 [DEBUG] [Thread-177144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:36:28.557 [DEBUG] [Thread-177144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:36:28.581 [INFO] [Thread-177144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:36:28.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:36:29.419 [DEBUG] [Thread-177144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:36:29.419 [DEBUG] [Thread-177144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:36:29.420 [DEBUG] [Thread-177144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:36:29.460 [DEBUG] [Thread-177144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:36:29.460 [DEBUG] [Thread-177144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:36:29.464 [DEBUG] [Thread-177144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:36:29.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:36:29.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:36:29.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:36:29.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:36:29.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:36:29.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:36:29.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:36:29.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:36:29.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:36:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.816434 -999.00  +11.70  10.32     97  +11.30 1 3 1 3 1     0    0 0.43 1.69 ----- 10.3 10.3 288.0 13.5 13.2 -1.5 13.0 -0.3 12.7 -0.4 13.0 -0.7
2026-04-11T21:36:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:36:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:36:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.816434
2026-04-11T21:36:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:36:29.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:36:29.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:36:29.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:36:29.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:36:29.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:36:13', tmtdew=0.03507, humidity=100.062, cloud=0.0, wind=10.5343, temperature=11.7747, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:35:39.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:36:29.492 [DEBUG] [Thread-177144] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:36:29.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:36:29.586 [DEBUG] [Thread-177147] [transport.py] [_log()] starting thread (client mode): 0xb0fb53c0
2026-04-11T21:36:29.586 [DEBUG] [Thread-177147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:36:29.601 [DEBUG] [Thread-177147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:36:29.601 [INFO] [Thread-177147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:36:29.608 [DEBUG] [Thread-177147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] client lang: <none>
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] server lang: <none>
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] kex follows: False
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] Compression: none
2026-04-11T21:36:29.609 [DEBUG] [Thread-177147] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:36:29.666 [DEBUG] [Thread-177147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:36:29.666 [DEBUG] [Thread-177147] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:36:29.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:36:29.667 [DEBUG] [Thread-177147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:36:29.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:36:29.725 [DEBUG] [Thread-177147] [transport.py] [_log()] userauth is OK
2026-04-11T21:36:29.725 [DEBUG] [Thread-177147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:36:29.726 [DEBUG] [Thread-177147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:36:29.726 [DEBUG] [Thread-177147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:36:29.726 [DEBUG] [Thread-177147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:36:29.748 [INFO] [Thread-177147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:36:29.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:36:29.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:36:30.276 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:36:30.278 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:36:30.559 [DEBUG] [Thread-177147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:36:30.559 [DEBUG] [Thread-177147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:36:30.607 [DEBUG] [Thread-177147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:36:30.607 [DEBUG] [Thread-177147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:36:30.617 [DEBUG] [Thread-177147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:36:30.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:36:30.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:36:30.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-04-11T21:36:30.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:36:30.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:36:30.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:36:30.653 [DEBUG] [Thread-177147] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:36:34.870 [DEBUG] [Thread-177149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:36:40.501 [DEBUG] [Thread-177150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:36:55.556 [DEBUG] [Thread-177151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:00.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:37:00.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:37:00.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-04-11T21:37:01.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 36, 48), -0.01981, 100.057, 0.0, 11.2932, 12.2496, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:37:01.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:36:48
2026-04-11T21:37:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:37:02.573 [DEBUG] [Thread-177152] [transport.py] [_log()] starting thread (client mode): 0xb0f8efe0
2026-04-11T21:37:02.573 [DEBUG] [Thread-177152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:37:02.594 [DEBUG] [Thread-177152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:37:02.595 [INFO] [Thread-177152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] client lang: <none>
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] server lang: <none>
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] kex follows: False
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:37:02.598 [DEBUG] [Thread-177152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:37:02.599 [DEBUG] [Thread-177152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:37:02.599 [DEBUG] [Thread-177152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:37:02.599 [DEBUG] [Thread-177152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:37:02.599 [DEBUG] [Thread-177152] [transport.py] [_log()] Compression: none
2026-04-11T21:37:02.599 [DEBUG] [Thread-177152] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:37:02.616 [DEBUG] [Thread-177152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:37:02.617 [DEBUG] [Thread-177152] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:37:02.617 [DEBUG] [Thread-177152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:37:02.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:37:02.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:37:02.619 [DEBUG] [Thread-177152] [transport.py] [_log()] userauth is OK
2026-04-11T21:37:02.620 [DEBUG] [Thread-177152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:37:02.620 [DEBUG] [Thread-177152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:37:02.620 [DEBUG] [Thread-177152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:37:02.620 [DEBUG] [Thread-177152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:37:02.644 [INFO] [Thread-177152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:37:02.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:37:03.445 [DEBUG] [Thread-177152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:37:03.445 [DEBUG] [Thread-177152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:37:03.446 [DEBUG] [Thread-177152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:37:03.486 [DEBUG] [Thread-177152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:37:03.486 [DEBUG] [Thread-177152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:37:03.490 [DEBUG] [Thread-177152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:37:03.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:37:03.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:37:03.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:37:03.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:37:03.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:37:03.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:37:03.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:37:03.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:37:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:37:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.816782 -999.00  +11.70  10.18     97  +11.40 1 3 1 3 1     0    0 0.41 1.22 ----- 10.2 10.2 288.6 11.3 13.2 -1.1 13.1 -0.4 12.7 -0.6 13.0 -0.7
2026-04-11T21:37:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:37:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:37:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.816782
2026-04-11T21:37:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:37:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:37:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:37:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:37:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:37:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:36:48', tmtdew=-0.01981, humidity=100.057, cloud=0.0, wind=11.2932, temperature=12.2496, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:36:09.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:37:03.518 [DEBUG] [Thread-177152] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:37:03.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:37:03.611 [DEBUG] [Thread-177155] [transport.py] [_log()] starting thread (client mode): 0xb0f57730
2026-04-11T21:37:03.612 [DEBUG] [Thread-177155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:37:03.626 [DEBUG] [Thread-177155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:37:03.626 [INFO] [Thread-177155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:37:03.634 [DEBUG] [Thread-177155] [transport.py] [_log()] client lang: <none>
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] server lang: <none>
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] kex follows: False
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] Compression: none
2026-04-11T21:37:03.635 [DEBUG] [Thread-177155] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:37:03.692 [DEBUG] [Thread-177155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:37:03.693 [DEBUG] [Thread-177155] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:37:03.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:37:03.694 [DEBUG] [Thread-177155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:37:03.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:37:03.748 [DEBUG] [Thread-177155] [transport.py] [_log()] userauth is OK
2026-04-11T21:37:03.749 [DEBUG] [Thread-177155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:37:03.749 [DEBUG] [Thread-177155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:37:03.749 [DEBUG] [Thread-177155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:37:03.749 [DEBUG] [Thread-177155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:37:03.767 [INFO] [Thread-177155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:37:03.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:37:03.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:37:04.612 [DEBUG] [Thread-177155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:37:04.612 [DEBUG] [Thread-177155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:37:04.660 [DEBUG] [Thread-177155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:37:04.660 [DEBUG] [Thread-177155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:37:04.670 [DEBUG] [Thread-177155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:37:04.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:37:04.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-04-11T21:37:04.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-04-11T21:37:04.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:37:04.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:37:04.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:37:04.707 [DEBUG] [Thread-177155] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:37:10.592 [DEBUG] [Thread-177157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:25.646 [DEBUG] [Thread-177158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:30.482 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:30.483 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:34.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:37:34.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:37:34.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-04-11T21:37:34.937 [DEBUG] [Thread-177159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:36.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 37, 24), -0.00483, 99.9954, 0.0, 9.5994, 11.7416, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:37:36.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:37:24
2026-04-11T21:37:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:37:36.562 [DEBUG] [Thread-177160] [transport.py] [_log()] starting thread (client mode): 0xae515cc0
2026-04-11T21:37:36.562 [DEBUG] [Thread-177160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:37:36.582 [DEBUG] [Thread-177160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:37:36.582 [INFO] [Thread-177160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:37:36.585 [DEBUG] [Thread-177160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] client lang: <none>
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] server lang: <none>
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] kex follows: False
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:37:36.586 [DEBUG] [Thread-177160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:37:36.587 [DEBUG] [Thread-177160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:37:36.587 [DEBUG] [Thread-177160] [transport.py] [_log()] Compression: none
2026-04-11T21:37:36.587 [DEBUG] [Thread-177160] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:37:36.603 [DEBUG] [Thread-177160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:37:36.604 [DEBUG] [Thread-177160] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:37:36.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:37:36.605 [DEBUG] [Thread-177160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:37:36.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:37:36.607 [DEBUG] [Thread-177160] [transport.py] [_log()] userauth is OK
2026-04-11T21:37:36.607 [DEBUG] [Thread-177160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:37:36.607 [DEBUG] [Thread-177160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:37:36.608 [DEBUG] [Thread-177160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:37:36.608 [DEBUG] [Thread-177160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:37:36.642 [INFO] [Thread-177160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:37:36.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:37:37.455 [DEBUG] [Thread-177160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:37:37.455 [DEBUG] [Thread-177160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:37:37.455 [DEBUG] [Thread-177160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:37:37.496 [DEBUG] [Thread-177160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:37:37.496 [DEBUG] [Thread-177160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:37:37.500 [DEBUG] [Thread-177160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:37:37.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:37:37.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:37:37.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:37:37.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:37:37.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:37:37.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:37:37.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:37:37.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:37:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:37:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.817129 -999.00  +11.70   9.71     97  +11.40 1 3 1 3 1     0    0 0.40 0.61 ----- 9.7 9.7 291.4 12.0 13.2 -1.4 13.1 -0.4 12.7 -1.0 13.0 -0.7
2026-04-11T21:37:37.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:37:37.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:37:37.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.817129
2026-04-11T21:37:37.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:37:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:37:24', tmtdew=-0.00483, humidity=99.9954, cloud=0.0, wind=9.5994, temperature=11.7416, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:36:39.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:37:37.526 [DEBUG] [Thread-177160] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:37:37.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:37:37.619 [DEBUG] [Thread-177163] [transport.py] [_log()] starting thread (client mode): 0xa7911360
2026-04-11T21:37:37.620 [DEBUG] [Thread-177163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:37:37.639 [DEBUG] [Thread-177163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:37:37.640 [INFO] [Thread-177163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:37:37.647 [DEBUG] [Thread-177163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:37:37.647 [DEBUG] [Thread-177163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:37:37.647 [DEBUG] [Thread-177163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:37:37.647 [DEBUG] [Thread-177163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] client lang: <none>
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] server lang: <none>
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] kex follows: False
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] Compression: none
2026-04-11T21:37:37.648 [DEBUG] [Thread-177163] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:37:37.707 [DEBUG] [Thread-177163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:37:37.708 [DEBUG] [Thread-177163] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:37:37.708 [DEBUG] [Thread-177163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:37:37.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:37:37.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:37:37.768 [DEBUG] [Thread-177163] [transport.py] [_log()] userauth is OK
2026-04-11T21:37:37.768 [DEBUG] [Thread-177163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:37:37.768 [DEBUG] [Thread-177163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:37:37.768 [DEBUG] [Thread-177163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:37:37.768 [DEBUG] [Thread-177163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:37:37.791 [INFO] [Thread-177163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:37:37.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:37:37.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:37:38.604 [DEBUG] [Thread-177163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:37:38.604 [DEBUG] [Thread-177163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:37:38.653 [DEBUG] [Thread-177163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:37:38.653 [DEBUG] [Thread-177163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:37:38.661 [DEBUG] [Thread-177163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:37:38.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:37:38.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-04-11T21:37: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-04-11T21:37:38.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:37:38.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:37:38.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:37:38.697 [DEBUG] [Thread-177163] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:37:40.688 [DEBUG] [Thread-177165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:37:55.750 [DEBUG] [Thread-177166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:38:08.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:38:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:38:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 37, 59), 0.040175, 100.028, 0.0, 9.58176, 11.7414, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:38:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:37:59
2026-04-11T21:38:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:38:10.531 [DEBUG] [Thread-177167] [transport.py] [_log()] starting thread (client mode): 0xb0f552a0
2026-04-11T21:38:10.531 [DEBUG] [Thread-177167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:38:10.551 [DEBUG] [Thread-177167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:38:10.551 [INFO] [Thread-177167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] client lang: <none>
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] server lang: <none>
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] kex follows: False
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] Compression: none
2026-04-11T21:38:10.554 [DEBUG] [Thread-177167] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:38:10.570 [DEBUG] [Thread-177167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:38:10.571 [DEBUG] [Thread-177167] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:38:10.571 [DEBUG] [Thread-177167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:38:10.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:38:10.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:38:10.613 [DEBUG] [Thread-177167] [transport.py] [_log()] userauth is OK
2026-04-11T21:38:10.613 [DEBUG] [Thread-177167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:38:10.613 [DEBUG] [Thread-177167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:38:10.613 [DEBUG] [Thread-177167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:38:10.613 [DEBUG] [Thread-177167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:38:10.633 [INFO] [Thread-177167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:38:10.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:38:10.788 [DEBUG] [Thread-177169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:11.477 [DEBUG] [Thread-177167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:38:11.477 [DEBUG] [Thread-177167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:38:11.477 [DEBUG] [Thread-177167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:38:11.518 [DEBUG] [Thread-177167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:38:11.518 [DEBUG] [Thread-177167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:38:11.522 [DEBUG] [Thread-177167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:38:11.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:38:11.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:38:11.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:38:11.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:38:11.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:38:11.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:38:11.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:38:11.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:38:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:38:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.817476 -999.00  +11.80   7.75     97  +11.40 1 3 1 3 1     0    0 0.40 0.69 ----- 7.8 7.8 289.4 11.4 13.2 -1.3 13.1 -0.3 12.7 -0.5 13.1 -0.7
2026-04-11T21:38:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:38:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:38:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.817476
2026-04-11T21:38:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:38:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:38:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:38:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:38:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:38:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:37:59', tmtdew=0.040175, humidity=100.028, cloud=0.0, wind=9.58176, temperature=11.7414, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:37:09.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:38:11.560 [DEBUG] [Thread-177167] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:38:11.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:38:11.655 [DEBUG] [Thread-177171] [transport.py] [_log()] starting thread (client mode): 0xb0f8dcf0
2026-04-11T21:38:11.655 [DEBUG] [Thread-177171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:38:11.671 [DEBUG] [Thread-177171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:38:11.671 [INFO] [Thread-177171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:38:11.678 [DEBUG] [Thread-177171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:38:11.679 [DEBUG] [Thread-177171] [transport.py] [_log()] client lang: <none>
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] server lang: <none>
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] kex follows: False
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:38:11.680 [DEBUG] [Thread-177171] [transport.py] [_log()] Compression: none
2026-04-11T21:38:11.681 [DEBUG] [Thread-177171] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:38:11.745 [DEBUG] [Thread-177171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:38:11.746 [DEBUG] [Thread-177171] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:38:11.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:38:11.748 [DEBUG] [Thread-177171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:38:11.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:38:11.806 [DEBUG] [Thread-177171] [transport.py] [_log()] userauth is OK
2026-04-11T21:38:11.807 [DEBUG] [Thread-177171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:38:11.807 [DEBUG] [Thread-177171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:38:11.807 [DEBUG] [Thread-177171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:38:11.807 [DEBUG] [Thread-177171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:38:11.827 [INFO] [Thread-177171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:38:11.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:38:11.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:38:12.678 [DEBUG] [Thread-177171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:38:12.678 [DEBUG] [Thread-177171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:38:12.727 [DEBUG] [Thread-177171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:38:12.728 [DEBUG] [Thread-177171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:38:12.737 [DEBUG] [Thread-177171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:38:12.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:38:12.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-04-11T21:38:12.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-04-11T21:38:12.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:38:12.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:38:12.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:38:12.775 [DEBUG] [Thread-177171] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:38:25.825 [DEBUG] [Thread-177173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:30.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:30.687 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:34.995 [DEBUG] [Thread-177174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:40.874 [DEBUG] [Thread-177175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:38:42.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:38:42.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:38:42.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:38:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 38, 34), -0.01467, 100.023, 0.0, 9.98784, 12.2492, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:38:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:38:34
2026-04-11T21:38:44.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:38:44.582 [DEBUG] [Thread-177176] [transport.py] [_log()] starting thread (client mode): 0xb0f57b20
2026-04-11T21:38:44.582 [DEBUG] [Thread-177176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:38:44.605 [DEBUG] [Thread-177176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:38:44.605 [INFO] [Thread-177176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:38:44.608 [DEBUG] [Thread-177176] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] client lang: <none>
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] server lang: <none>
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] kex follows: False
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] Compression: none
2026-04-11T21:38:44.609 [DEBUG] [Thread-177176] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:38:44.627 [DEBUG] [Thread-177176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:38:44.628 [DEBUG] [Thread-177176] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:38:44.629 [DEBUG] [Thread-177176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:38:44.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:38:44.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:38:44.631 [DEBUG] [Thread-177176] [transport.py] [_log()] userauth is OK
2026-04-11T21:38:44.631 [DEBUG] [Thread-177176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:38:44.631 [DEBUG] [Thread-177176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:38:44.631 [DEBUG] [Thread-177176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:38:44.631 [DEBUG] [Thread-177176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:38:44.645 [INFO] [Thread-177176] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:38:44.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:38:45.426 [DEBUG] [Thread-177176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:38:45.427 [DEBUG] [Thread-177176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:38:45.427 [DEBUG] [Thread-177176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:38:45.468 [DEBUG] [Thread-177176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:38:45.468 [DEBUG] [Thread-177176] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:38:45.471 [DEBUG] [Thread-177176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:38:45.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:38:45.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:38:45.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:38:45.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:38:45.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:38:45.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:38:45.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:38:45.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:38:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:38:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.818170 -999.00  +11.80   5.66     97  +11.40 1 3 1 3 1     0    0 0.39 0.56 ----- 5.7 5.7 277.2 7.7 13.2 -1.0 13.2 -0.2 12.7 -0.4 13.1 -0.7
2026-04-11T21:38:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:38:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:38:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.818170
2026-04-11T21:38:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:38:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:38:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:38:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:38:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:38:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:38:34', tmtdew=-0.01467, humidity=100.023, cloud=0.0, wind=9.98784, temperature=12.2492, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:38:09.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:38:45.501 [DEBUG] [Thread-177176] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:38:45.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:38:45.594 [DEBUG] [Thread-177179] [transport.py] [_log()] starting thread (client mode): 0xae508040
2026-04-11T21:38:45.594 [DEBUG] [Thread-177179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:38:45.609 [DEBUG] [Thread-177179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:38:45.609 [INFO] [Thread-177179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] client lang: <none>
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] server lang: <none>
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] kex follows: False
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:38:45.619 [DEBUG] [Thread-177179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:38:45.620 [DEBUG] [Thread-177179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:38:45.620 [DEBUG] [Thread-177179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:38:45.620 [DEBUG] [Thread-177179] [transport.py] [_log()] Compression: none
2026-04-11T21:38:45.620 [DEBUG] [Thread-177179] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:38:45.680 [DEBUG] [Thread-177179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:38:45.680 [DEBUG] [Thread-177179] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:38:45.681 [DEBUG] [Thread-177179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:38:45.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:38:45.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:38:45.735 [DEBUG] [Thread-177179] [transport.py] [_log()] userauth is OK
2026-04-11T21:38:45.736 [DEBUG] [Thread-177179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:38:45.736 [DEBUG] [Thread-177179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:38:45.736 [DEBUG] [Thread-177179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:38:45.736 [DEBUG] [Thread-177179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:38:45.754 [INFO] [Thread-177179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:38:45.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:38:45.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:38:46.587 [DEBUG] [Thread-177179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:38:46.587 [DEBUG] [Thread-177179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:38:46.634 [DEBUG] [Thread-177179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:38:46.635 [DEBUG] [Thread-177179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:38:46.643 [DEBUG] [Thread-177179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:38:46.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:38:46.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-04-11T21:38:46.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:38:46.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:38:46.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:38:46.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:38:46.682 [DEBUG] [Thread-177179] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:38:55.915 [DEBUG] [Thread-177181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:10.968 [DEBUG] [Thread-177182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:16.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:39:16.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:39:16.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-04-11T21:39:17.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 39, 10), -0.00985, 100.028, 0.0, 8.11764, 11.7415, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:39:17.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:39:10
2026-04-11T21:39:18.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:39:18.458 [DEBUG] [Thread-177183] [transport.py] [_log()] starting thread (client mode): 0xae50b640
2026-04-11T21:39:18.459 [DEBUG] [Thread-177183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:39:18.478 [DEBUG] [Thread-177183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:39:18.478 [INFO] [Thread-177183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:39:18.491 [DEBUG] [Thread-177183] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] client lang: <none>
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] server lang: <none>
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] kex follows: False
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:39:18.492 [DEBUG] [Thread-177183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:39:18.493 [DEBUG] [Thread-177183] [transport.py] [_log()] Compression: none
2026-04-11T21:39:18.493 [DEBUG] [Thread-177183] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:39:18.513 [DEBUG] [Thread-177183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:39:18.514 [DEBUG] [Thread-177183] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:39:18.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:39:18.515 [DEBUG] [Thread-177183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:39:18.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:39:18.517 [DEBUG] [Thread-177183] [transport.py] [_log()] userauth is OK
2026-04-11T21:39:18.517 [DEBUG] [Thread-177183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:39:18.518 [DEBUG] [Thread-177183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:39:18.518 [DEBUG] [Thread-177183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:39:18.518 [DEBUG] [Thread-177183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:39:18.542 [INFO] [Thread-177183] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:39:18.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:39:19.333 [DEBUG] [Thread-177183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:39:19.333 [DEBUG] [Thread-177183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:39:19.334 [DEBUG] [Thread-177183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:39:19.374 [DEBUG] [Thread-177183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:39:19.374 [DEBUG] [Thread-177183] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:39:19.378 [DEBUG] [Thread-177183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:39:19.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:39:19.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:39:19.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:39:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:39:19.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:39:19.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:39:19.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:39:19.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:39:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:39:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.818518 -999.00  +11.80   7.17     97  +11.40 1 3 1 3 1     0    0 0.39 0.33 ----- 7.2 7.2 282.0 9.9 13.3 -1.2 13.2 -0.4 12.7 -0.9 13.1 -0.7
2026-04-11T21:39:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:39:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:39:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.818518
2026-04-11T21:39:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:39:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:39:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:39:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:39:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:39:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:39:10', tmtdew=-0.00985, humidity=100.028, cloud=0.0, wind=8.11764, temperature=11.7415, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:38:39.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:39:19.405 [DEBUG] [Thread-177183] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:39:19.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:39:19.499 [DEBUG] [Thread-177186] [transport.py] [_log()] starting thread (client mode): 0xae50b7f0
2026-04-11T21:39:19.499 [DEBUG] [Thread-177186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:39:19.515 [DEBUG] [Thread-177186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:39:19.515 [INFO] [Thread-177186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] client lang: <none>
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] server lang: <none>
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] kex follows: False
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:39:19.523 [DEBUG] [Thread-177186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:39:19.524 [DEBUG] [Thread-177186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:39:19.524 [DEBUG] [Thread-177186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:39:19.524 [DEBUG] [Thread-177186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:39:19.524 [DEBUG] [Thread-177186] [transport.py] [_log()] Compression: none
2026-04-11T21:39:19.524 [DEBUG] [Thread-177186] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:39:19.583 [DEBUG] [Thread-177186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:39:19.584 [DEBUG] [Thread-177186] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:39:19.585 [DEBUG] [Thread-177186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:39:19.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:39:19.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:39:19.639 [DEBUG] [Thread-177186] [transport.py] [_log()] userauth is OK
2026-04-11T21:39:19.640 [DEBUG] [Thread-177186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:39:19.640 [DEBUG] [Thread-177186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:39:19.640 [DEBUG] [Thread-177186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:39:19.640 [DEBUG] [Thread-177186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:39:19.661 [INFO] [Thread-177186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:39:19.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:39:19.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:39:20.494 [DEBUG] [Thread-177186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:39:20.495 [DEBUG] [Thread-177186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:39:20.546 [DEBUG] [Thread-177186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:39:20.546 [DEBUG] [Thread-177186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:39:20.557 [DEBUG] [Thread-177186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:39:20.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:39:20.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:39:20.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:39:20.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:39:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:39:20.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:39:20.593 [DEBUG] [Thread-177186] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:39:26.005 [DEBUG] [Thread-177188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:30.888 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:30.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:35.053 [DEBUG] [Thread-177189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:41.061 [DEBUG] [Thread-177190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:39:50.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:39:50.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:39:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:39:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 39, 10), -0.00985, 100.028, 0.0, 8.11764, 11.7415, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:39:51.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:39:10
2026-04-11T21:39:52.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:39:52.424 [DEBUG] [Thread-177191] [transport.py] [_log()] starting thread (client mode): 0xae5f1300
2026-04-11T21:39:52.424 [DEBUG] [Thread-177191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:39:52.445 [DEBUG] [Thread-177191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:39:52.445 [INFO] [Thread-177191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:39:52.448 [DEBUG] [Thread-177191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:39:52.448 [DEBUG] [Thread-177191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:39:52.448 [DEBUG] [Thread-177191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:39:52.448 [DEBUG] [Thread-177191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] client lang: <none>
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] server lang: <none>
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] kex follows: False
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:39:52.449 [DEBUG] [Thread-177191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:39:52.450 [DEBUG] [Thread-177191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:39:52.450 [DEBUG] [Thread-177191] [transport.py] [_log()] Compression: none
2026-04-11T21:39:52.450 [DEBUG] [Thread-177191] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:39:52.468 [DEBUG] [Thread-177191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:39:52.468 [DEBUG] [Thread-177191] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:39:52.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:39:52.469 [DEBUG] [Thread-177191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:39:52.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:39:52.471 [DEBUG] [Thread-177191] [transport.py] [_log()] userauth is OK
2026-04-11T21:39:52.472 [DEBUG] [Thread-177191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:39:52.472 [DEBUG] [Thread-177191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:39:52.472 [DEBUG] [Thread-177191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:39:52.472 [DEBUG] [Thread-177191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:39:52.496 [INFO] [Thread-177191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:39:52.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:39:53.285 [DEBUG] [Thread-177191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:39:53.285 [DEBUG] [Thread-177191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:39:53.286 [DEBUG] [Thread-177191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:39:53.327 [DEBUG] [Thread-177191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:39:53.327 [DEBUG] [Thread-177191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:39:53.329 [DEBUG] [Thread-177191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:39:53.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:39:53.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:39:53.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:39:53.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:39:53.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:39:53.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:39:53.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:39:53.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:39:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:39:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.818865 -999.00  +11.80   7.88     97  +11.50 1 3 1 3 1     0    0 0.38 -0.05 ----- 7.9 7.9 298.8 8.9 13.3 -1.3 13.2 -0.3 12.8 -0.5 13.1 -0.7
2026-04-11T21:39:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:39:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:39:53.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.818865
2026-04-11T21:39:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:39:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:39:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:39:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:39:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:39:53.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:39:10', tmtdew=-0.00985, humidity=100.028, cloud=0.0, wind=8.11764, temperature=11.7415, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:39:09.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:39:53.349 [DEBUG] [Thread-177191] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:39:53.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:39:53.451 [DEBUG] [Thread-177194] [transport.py] [_log()] starting thread (client mode): 0xae5f26b0
2026-04-11T21:39:53.451 [DEBUG] [Thread-177194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:39:53.465 [DEBUG] [Thread-177194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:39:53.465 [INFO] [Thread-177194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:39:53.472 [DEBUG] [Thread-177194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] client lang: <none>
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] server lang: <none>
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] kex follows: False
2026-04-11T21:39:53.473 [DEBUG] [Thread-177194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:39:53.474 [DEBUG] [Thread-177194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:39:53.474 [DEBUG] [Thread-177194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:39:53.474 [DEBUG] [Thread-177194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:39:53.474 [DEBUG] [Thread-177194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:39:53.474 [DEBUG] [Thread-177194] [transport.py] [_log()] Compression: none
2026-04-11T21:39:53.474 [DEBUG] [Thread-177194] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:39:53.530 [DEBUG] [Thread-177194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:39:53.530 [DEBUG] [Thread-177194] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:39:53.531 [DEBUG] [Thread-177194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:39:53.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:39:53.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:39:53.586 [DEBUG] [Thread-177194] [transport.py] [_log()] userauth is OK
2026-04-11T21:39:53.586 [DEBUG] [Thread-177194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:39:53.586 [DEBUG] [Thread-177194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:39:53.586 [DEBUG] [Thread-177194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:39:53.587 [DEBUG] [Thread-177194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:39:53.605 [INFO] [Thread-177194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:39:53.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:39:53.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:39:54.405 [DEBUG] [Thread-177194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:39:54.405 [DEBUG] [Thread-177194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:39:54.454 [DEBUG] [Thread-177194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:39:54.455 [DEBUG] [Thread-177194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:39:54.463 [DEBUG] [Thread-177194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:39:54.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:39:54.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:39:54.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:39:54.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:39:54.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:39:54.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:39:54.497 [DEBUG] [Thread-177194] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:39:56.098 [DEBUG] [Thread-177196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:11.145 [DEBUG] [Thread-177197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:24.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:40:24.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:40: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-04-11T21:40:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 39, 46), -0.00956, 99.9904, 0.0, 10.7287, 12.1167, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:40:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:39:46
2026-04-11T21:40:26.184 [DEBUG] [Thread-177198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:40:26.454 [DEBUG] [Thread-177199] [transport.py] [_log()] starting thread (client mode): 0xae5f3f10
2026-04-11T21:40:26.454 [DEBUG] [Thread-177199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:40:26.474 [DEBUG] [Thread-177199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:40:26.474 [INFO] [Thread-177199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:40:26.477 [DEBUG] [Thread-177199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:40:26.477 [DEBUG] [Thread-177199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] client lang: <none>
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] server lang: <none>
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] kex follows: False
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] Compression: none
2026-04-11T21:40:26.478 [DEBUG] [Thread-177199] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:40:26.493 [DEBUG] [Thread-177199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:40:26.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:40:26.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] userauth is OK
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:40:26.494 [DEBUG] [Thread-177199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:40:26.504 [INFO] [Thread-177199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:40:26.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:40:27.857 [DEBUG] [Thread-177199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:40:27.857 [DEBUG] [Thread-177199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:40:27.857 [DEBUG] [Thread-177199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:40:27.899 [DEBUG] [Thread-177199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:40:27.899 [DEBUG] [Thread-177199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:40:27.902 [DEBUG] [Thread-177199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:40:27.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:40:27.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:40:27.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:40:27.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:40:27.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:40:27.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:40:27.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:40:27.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:40:27.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:40:27.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.819212 -999.00  +11.90   9.04     97  +11.50 1 3 1 3 1     0    0 0.39 0.09 ----- 9.0 9.0 292.8 10.3 13.3 -1.2 13.2 -0.3 12.8 -0.5 13.1 -0.6
2026-04-11T21:40:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:40:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:40:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.819212
2026-04-11T21:40:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:40:27.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:40:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:40:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:40:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:40:27.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:39:46', tmtdew=-0.00956, humidity=99.9904, cloud=0.0, wind=10.7287, temperature=12.1167, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:39:39.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:40:27.929 [DEBUG] [Thread-177199] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:40:28.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:40:28.025 [DEBUG] [Thread-177202] [transport.py] [_log()] starting thread (client mode): 0xb0fce290
2026-04-11T21:40:28.025 [DEBUG] [Thread-177202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:40:28.044 [DEBUG] [Thread-177202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:40:28.044 [INFO] [Thread-177202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:40:28.051 [DEBUG] [Thread-177202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:40:28.051 [DEBUG] [Thread-177202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:40:28.051 [DEBUG] [Thread-177202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:40:28.051 [DEBUG] [Thread-177202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:40:28.051 [DEBUG] [Thread-177202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:40:28.051 [DEBUG] [Thread-177202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] client lang: <none>
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] server lang: <none>
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] kex follows: False
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] Compression: none
2026-04-11T21:40:28.052 [DEBUG] [Thread-177202] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:40:28.115 [DEBUG] [Thread-177202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:40:28.116 [DEBUG] [Thread-177202] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:40:28.116 [DEBUG] [Thread-177202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:40:28.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:40:28.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:40:28.175 [DEBUG] [Thread-177202] [transport.py] [_log()] userauth is OK
2026-04-11T21:40:28.175 [DEBUG] [Thread-177202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:40:28.175 [DEBUG] [Thread-177202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:40:28.175 [DEBUG] [Thread-177202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:40:28.175 [DEBUG] [Thread-177202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:40:28.194 [INFO] [Thread-177202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:40:28.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:40:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:40:29.008 [DEBUG] [Thread-177202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:40:29.009 [DEBUG] [Thread-177202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:40:29.057 [DEBUG] [Thread-177202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:40:29.057 [DEBUG] [Thread-177202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:40:29.067 [DEBUG] [Thread-177202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:40:29.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:40:29.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-04-11T21:40:29.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-04-11T21:40:29.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:40:29.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:40:29.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:40:29.104 [DEBUG] [Thread-177202] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:40:31.092 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:31.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:35.109 [DEBUG] [Thread-177204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:41.220 [DEBUG] [Thread-177205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:56.274 [DEBUG] [Thread-177206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:40:59.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:40:59.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:40:59.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-04-11T21:41:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 40, 21), -0.009835, 100.028, 0.0, 9.37008, 11.7745, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:41:00.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:40:21
2026-04-11T21:41:00.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:41:01.086 [DEBUG] [Thread-177207] [transport.py] [_log()] starting thread (client mode): 0xb0fcfcd0
2026-04-11T21:41:01.086 [DEBUG] [Thread-177207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:41:01.108 [DEBUG] [Thread-177207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:41:01.108 [INFO] [Thread-177207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] client lang: <none>
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] server lang: <none>
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] kex follows: False
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] Compression: none
2026-04-11T21:41:01.111 [DEBUG] [Thread-177207] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:41:01.128 [DEBUG] [Thread-177207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:41:01.128 [DEBUG] [Thread-177207] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:41:01.129 [DEBUG] [Thread-177207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:41:01.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:41:01.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:41:01.131 [DEBUG] [Thread-177207] [transport.py] [_log()] userauth is OK
2026-04-11T21:41:01.132 [DEBUG] [Thread-177207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:41:01.132 [DEBUG] [Thread-177207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:41:01.132 [DEBUG] [Thread-177207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:41:01.132 [DEBUG] [Thread-177207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:41:01.157 [INFO] [Thread-177207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:41:01.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:41:01.912 [DEBUG] [Thread-177207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:41:01.912 [DEBUG] [Thread-177207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:41:01.913 [DEBUG] [Thread-177207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:41:01.953 [DEBUG] [Thread-177207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:41:01.953 [DEBUG] [Thread-177207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:41:01.957 [DEBUG] [Thread-177207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:41:01.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:41:01.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:41:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:41:01.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:41:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:41:01.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:41:01.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:41:01.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:41:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:41:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.819907 -999.00  +11.80   7.00     97  +11.50 1 3 1 3 1     0    0 0.38 0.05 ----- 7.0 7.0 296.2 9.4 13.4 -1.2 13.2 -0.2 12.9 -0.3 13.2 -0.6
2026-04-11T21:41:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:41:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:41:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.819907
2026-04-11T21:41:01.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:41:01.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:41:01.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:41:01.984 [DEBUG] [Thread-177207] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:41:01.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:41:01.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:41:01.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:40:21', tmtdew=-0.009835, humidity=100.028, cloud=0.0, wind=9.37008, temperature=11.7745, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:40:39.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:41:02.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:41:02.078 [DEBUG] [Thread-177210] [transport.py] [_log()] starting thread (client mode): 0xb0fccf70
2026-04-11T21:41:02.078 [DEBUG] [Thread-177210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:41:02.093 [DEBUG] [Thread-177210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:41:02.094 [INFO] [Thread-177210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:41:02.101 [DEBUG] [Thread-177210] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:41:02.101 [DEBUG] [Thread-177210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:41:02.101 [DEBUG] [Thread-177210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] client lang: <none>
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] server lang: <none>
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] kex follows: False
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:41:02.102 [DEBUG] [Thread-177210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:41:02.103 [DEBUG] [Thread-177210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:41:02.103 [DEBUG] [Thread-177210] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:41:02.103 [DEBUG] [Thread-177210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:41:02.103 [DEBUG] [Thread-177210] [transport.py] [_log()] Compression: none
2026-04-11T21:41:02.103 [DEBUG] [Thread-177210] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:41:02.158 [DEBUG] [Thread-177210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:41:02.159 [DEBUG] [Thread-177210] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:41:02.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:41:02.160 [DEBUG] [Thread-177210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:41:02.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:41:02.218 [DEBUG] [Thread-177210] [transport.py] [_log()] userauth is OK
2026-04-11T21:41:02.219 [DEBUG] [Thread-177210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:41:02.219 [DEBUG] [Thread-177210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:41:02.219 [DEBUG] [Thread-177210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:41:02.219 [DEBUG] [Thread-177210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:41:02.236 [INFO] [Thread-177210] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:41:02.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:41:02.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:41:03.036 [DEBUG] [Thread-177210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:41:03.036 [DEBUG] [Thread-177210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:41:03.084 [DEBUG] [Thread-177210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:41:03.084 [DEBUG] [Thread-177210] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:41:03.093 [DEBUG] [Thread-177210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:41:03.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:41:03.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:41:03.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:41:03.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:41:03.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:41:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:41:03.131 [DEBUG] [Thread-177210] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:41:11.313 [DEBUG] [Thread-177212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:41:26.365 [DEBUG] [Thread-177213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:41:31.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:41:31.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:41:33.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:41:33.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:41:33.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-04-11T21:41:34.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 40, 57), 0.037675, 100.045, 0.0, 8.34696, 11.7914, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:41:34.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:40:57
2026-04-11T21:41:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:41:35.162 [DEBUG] [Thread-177214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:41:35.254 [DEBUG] [Thread-177215] [transport.py] [_log()] starting thread (client mode): 0xae5f2da0
2026-04-11T21:41:35.254 [DEBUG] [Thread-177215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:41:35.269 [DEBUG] [Thread-177215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:41:35.269 [INFO] [Thread-177215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:41:35.270 [DEBUG] [Thread-177215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] client lang: <none>
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] server lang: <none>
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] kex follows: False
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] Compression: none
2026-04-11T21:41:35.271 [DEBUG] [Thread-177215] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:41:35.284 [DEBUG] [Thread-177215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:41:35.284 [DEBUG] [Thread-177215] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:41:35.285 [DEBUG] [Thread-177215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:41:35.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:41:35.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:41:35.286 [DEBUG] [Thread-177215] [transport.py] [_log()] userauth is OK
2026-04-11T21:41:35.286 [DEBUG] [Thread-177215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:41:35.286 [DEBUG] [Thread-177215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:41:35.286 [DEBUG] [Thread-177215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:41:35.286 [DEBUG] [Thread-177215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:41:35.309 [INFO] [Thread-177215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:41:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:41:35.896 [DEBUG] [Thread-177215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:41:35.896 [DEBUG] [Thread-177215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:41:35.896 [DEBUG] [Thread-177215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:41:35.937 [DEBUG] [Thread-177215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:41:35.937 [DEBUG] [Thread-177215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:41:35.940 [DEBUG] [Thread-177215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:41:35.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:41:35.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:41:35.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:41:35.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:41:35.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:41:35.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:41:35.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:41:35.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:41:35.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:41:35.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.820254 -999.00  +11.90   9.78     97  +11.50 1 3 1 3 1     0    0 0.38 0.13 ----- 9.8 9.8 301.2 10.3 13.4 -1.4 13.2 -0.3 12.9 -0.6 13.2 -0.7
2026-04-11T21:41:35.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:41:35.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:41:35.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.820254
2026-04-11T21:41:35.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:41:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:41:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:41:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:41:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:41:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:40:57', tmtdew=0.037675, humidity=100.045, cloud=0.0, wind=8.34696, temperature=11.7914, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:41:09.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:41:35.959 [DEBUG] [Thread-177215] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:41:36.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:41:36.053 [DEBUG] [Thread-177218] [transport.py] [_log()] starting thread (client mode): 0xae5f3820
2026-04-11T21:41:36.053 [DEBUG] [Thread-177218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:41:36.069 [DEBUG] [Thread-177218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:41:36.069 [INFO] [Thread-177218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] client lang: <none>
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] server lang: <none>
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] kex follows: False
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:41:36.077 [DEBUG] [Thread-177218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:41:36.078 [DEBUG] [Thread-177218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:41:36.078 [DEBUG] [Thread-177218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:41:36.078 [DEBUG] [Thread-177218] [transport.py] [_log()] Compression: none
2026-04-11T21:41:36.078 [DEBUG] [Thread-177218] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:41:36.134 [DEBUG] [Thread-177218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:41:36.135 [DEBUG] [Thread-177218] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:41:36.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:41:36.136 [DEBUG] [Thread-177218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:41:36.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:41:36.190 [DEBUG] [Thread-177218] [transport.py] [_log()] userauth is OK
2026-04-11T21:41:36.191 [DEBUG] [Thread-177218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:41:36.191 [DEBUG] [Thread-177218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:41:36.191 [DEBUG] [Thread-177218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:41:36.191 [DEBUG] [Thread-177218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:41:36.210 [INFO] [Thread-177218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:41:36.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:41:36.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:41:37.080 [DEBUG] [Thread-177218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:41:37.081 [DEBUG] [Thread-177218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:41:37.129 [DEBUG] [Thread-177218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:41:37.129 [DEBUG] [Thread-177218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:41:37.139 [DEBUG] [Thread-177218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:41:37.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:41:37.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-04-11T21:41:37.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-04-11T21:41:37.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:41:37.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:41:37.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:41:37.183 [DEBUG] [Thread-177218] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:41:41.402 [DEBUG] [Thread-177220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:41:56.456 [DEBUG] [Thread-177221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:07.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:42:07.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:42:07.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-04-11T21:42:08.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 41, 32), 0.04015, 100.028, 0.0, 9.3348, 11.8081, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:42:08.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:41:32
2026-04-11T21:42:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:42:08.996 [DEBUG] [Thread-177222] [transport.py] [_log()] starting thread (client mode): 0xae5f20e0
2026-04-11T21:42:08.996 [DEBUG] [Thread-177222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:42:09.009 [DEBUG] [Thread-177222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:42:09.010 [INFO] [Thread-177222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] client lang: <none>
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] server lang: <none>
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] kex follows: False
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] Compression: none
2026-04-11T21:42:09.011 [DEBUG] [Thread-177222] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:42:09.022 [DEBUG] [Thread-177222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:42:09.022 [DEBUG] [Thread-177222] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:42:09.022 [DEBUG] [Thread-177222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:42:09.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:42:09.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:42:09.024 [DEBUG] [Thread-177222] [transport.py] [_log()] userauth is OK
2026-04-11T21:42:09.024 [DEBUG] [Thread-177222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:42:09.024 [DEBUG] [Thread-177222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:42:09.024 [DEBUG] [Thread-177222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:42:09.024 [DEBUG] [Thread-177222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:42:09.043 [INFO] [Thread-177222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:42:09.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:42:09.579 [DEBUG] [Thread-177222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:42:09.579 [DEBUG] [Thread-177222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:42:09.580 [DEBUG] [Thread-177222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:42:09.620 [DEBUG] [Thread-177222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:42:09.620 [DEBUG] [Thread-177222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:42:09.624 [DEBUG] [Thread-177222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:42:09.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:42:09.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:42:09.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:42:09.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:42:09.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:42:09.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:42:09.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:42:09.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:42:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:42:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.820601 -999.00  +11.80   7.03     97  +11.50 1 3 1 3 1     0    0 0.38 0.02 ----- 7.0 7.0 313.4 9.6 13.4 -1.2 13.3 -0.3 12.9 -0.8 13.2 -0.6
2026-04-11T21:42:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:42:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:42:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.820601
2026-04-11T21:42:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:42:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:42:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:42:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:42:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:42:09.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:41:32', tmtdew=0.04015, humidity=100.028, cloud=0.0, wind=9.3348, temperature=11.8081, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:41:39.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:42:09.650 [DEBUG] [Thread-177222] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:42:09.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:42:09.756 [DEBUG] [Thread-177225] [transport.py] [_log()] starting thread (client mode): 0xb0f8ea10
2026-04-11T21:42:09.756 [DEBUG] [Thread-177225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:42:09.770 [DEBUG] [Thread-177225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:42:09.770 [INFO] [Thread-177225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:42:09.778 [DEBUG] [Thread-177225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:42:09.778 [DEBUG] [Thread-177225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:42:09.778 [DEBUG] [Thread-177225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] client lang: <none>
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] server lang: <none>
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] kex follows: False
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:42:09.779 [DEBUG] [Thread-177225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:42:09.780 [DEBUG] [Thread-177225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:42:09.780 [DEBUG] [Thread-177225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:42:09.780 [DEBUG] [Thread-177225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:42:09.780 [DEBUG] [Thread-177225] [transport.py] [_log()] Compression: none
2026-04-11T21:42:09.780 [DEBUG] [Thread-177225] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:42:09.840 [DEBUG] [Thread-177225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:42:09.840 [DEBUG] [Thread-177225] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:42:09.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:42:09.842 [DEBUG] [Thread-177225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:42:09.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:42:09.898 [DEBUG] [Thread-177225] [transport.py] [_log()] userauth is OK
2026-04-11T21:42:09.899 [DEBUG] [Thread-177225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:42:09.899 [DEBUG] [Thread-177225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:42:09.899 [DEBUG] [Thread-177225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:42:09.899 [DEBUG] [Thread-177225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:42:09.923 [INFO] [Thread-177225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:42:09.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:42:09.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:42:10.757 [DEBUG] [Thread-177225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:42:10.758 [DEBUG] [Thread-177225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:42:10.806 [DEBUG] [Thread-177225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:42:10.806 [DEBUG] [Thread-177225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:42:10.815 [DEBUG] [Thread-177225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:42:10.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:42:10.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-04-11T21:42:10.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:42:10.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:42:10.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:42:10.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:42:10.850 [DEBUG] [Thread-177225] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:42:11.490 [DEBUG] [Thread-177227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:26.552 [DEBUG] [Thread-177228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:31.500 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:31.502 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:35.217 [DEBUG] [Thread-177229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:40.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:42:40.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:42:40.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-04-11T21:42:41.592 [DEBUG] [Thread-177230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:42:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 42, 8), 0.040185, 100.028, 0.0, 8.34696, 11.7749, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:42:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:42:08
2026-04-11T21:42:42.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:42:42.679 [DEBUG] [Thread-177231] [transport.py] [_log()] starting thread (client mode): 0xae5f1870
2026-04-11T21:42:42.679 [DEBUG] [Thread-177231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:42:42.699 [DEBUG] [Thread-177231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:42:42.699 [INFO] [Thread-177231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:42:42.702 [DEBUG] [Thread-177231] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:42:42.702 [DEBUG] [Thread-177231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] client lang: <none>
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] server lang: <none>
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] kex follows: False
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:42:42.703 [DEBUG] [Thread-177231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:42:42.704 [DEBUG] [Thread-177231] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:42:42.704 [DEBUG] [Thread-177231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:42:42.704 [DEBUG] [Thread-177231] [transport.py] [_log()] Compression: none
2026-04-11T21:42:42.704 [DEBUG] [Thread-177231] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:42:42.721 [DEBUG] [Thread-177231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:42:42.722 [DEBUG] [Thread-177231] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:42:42.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:42:42.723 [DEBUG] [Thread-177231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:42:42.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:42:42.769 [DEBUG] [Thread-177231] [transport.py] [_log()] userauth is OK
2026-04-11T21:42:42.769 [DEBUG] [Thread-177231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:42:42.769 [DEBUG] [Thread-177231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:42:42.769 [DEBUG] [Thread-177231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:42:42.769 [DEBUG] [Thread-177231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:42:42.789 [INFO] [Thread-177231] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:42:42.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:42:43.356 [DEBUG] [Thread-177231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:42:43.356 [DEBUG] [Thread-177231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:42:43.356 [DEBUG] [Thread-177231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:42:43.397 [DEBUG] [Thread-177231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:42:43.397 [DEBUG] [Thread-177231] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:42:43.400 [DEBUG] [Thread-177231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:42:43.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:42:43.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:42:43.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:42:43.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:42:43.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:42:43.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:42:43.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:42:43.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:42:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:42:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.820948 -999.00  +11.90   7.00     97  +11.50 1 3 1 3 1     0    0 0.37 -0.02 ----- 7.0 7.0 295.8 8.3 13.4 -1.0 13.3 -0.3 12.9 -0.1 13.3 -0.6
2026-04-11T21:42:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:42:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:42:43.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.820948
2026-04-11T21:42:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:42:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:42:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:42:43.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:42:43.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:42:43.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:42:08', tmtdew=0.040185, humidity=100.028, cloud=0.0, wind=8.34696, temperature=11.7749, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:42:09.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:42:43.424 [DEBUG] [Thread-177231] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:42:43.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:42:43.517 [DEBUG] [Thread-177234] [transport.py] [_log()] starting thread (client mode): 0xae519f60
2026-04-11T21:42:43.517 [DEBUG] [Thread-177234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:42:43.532 [DEBUG] [Thread-177234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:42:43.532 [INFO] [Thread-177234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:42:43.539 [DEBUG] [Thread-177234] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:42:43.539 [DEBUG] [Thread-177234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:42:43.539 [DEBUG] [Thread-177234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] client lang: <none>
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] server lang: <none>
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] kex follows: False
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] Compression: none
2026-04-11T21:42:43.540 [DEBUG] [Thread-177234] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:42:43.597 [DEBUG] [Thread-177234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:42:43.598 [DEBUG] [Thread-177234] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:42:43.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:42:43.599 [DEBUG] [Thread-177234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:42:43.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:42:43.654 [DEBUG] [Thread-177234] [transport.py] [_log()] userauth is OK
2026-04-11T21:42:43.654 [DEBUG] [Thread-177234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:42:43.655 [DEBUG] [Thread-177234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:42:43.655 [DEBUG] [Thread-177234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:42:43.655 [DEBUG] [Thread-177234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:42:43.673 [INFO] [Thread-177234] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:42:43.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:42:43.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:42:44.509 [DEBUG] [Thread-177234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:42:44.510 [DEBUG] [Thread-177234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:42:44.558 [DEBUG] [Thread-177234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:42:44.558 [DEBUG] [Thread-177234] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:42:44.568 [DEBUG] [Thread-177234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:42:44.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:42:44.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-04-11T21:42:44.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-04-11T21:42:44.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:42:44.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:42:44.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:42:44.608 [DEBUG] [Thread-177234] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:42:56.633 [DEBUG] [Thread-177236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:11.686 [DEBUG] [Thread-177237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:43:14.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:43:14.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-04-11T21:43:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 42, 44), -0.01964, 100.057, 0.0, 10.0231, 12.1168, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:43:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:42:44
2026-04-11T21:43:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:43:16.434 [DEBUG] [Thread-177238] [transport.py] [_log()] starting thread (client mode): 0xb0fcd390
2026-04-11T21:43:16.434 [DEBUG] [Thread-177238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:43:16.453 [DEBUG] [Thread-177238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:43:16.453 [INFO] [Thread-177238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:43:16.454 [DEBUG] [Thread-177238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] client lang: <none>
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] server lang: <none>
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] kex follows: False
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:43:16.455 [DEBUG] [Thread-177238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:43:16.456 [DEBUG] [Thread-177238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:43:16.456 [DEBUG] [Thread-177238] [transport.py] [_log()] Compression: none
2026-04-11T21:43:16.456 [DEBUG] [Thread-177238] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:43:16.467 [DEBUG] [Thread-177238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:43:16.468 [DEBUG] [Thread-177238] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:43:16.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:43:16.470 [DEBUG] [Thread-177238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:43:16.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:43:16.472 [DEBUG] [Thread-177238] [transport.py] [_log()] userauth is OK
2026-04-11T21:43:16.472 [DEBUG] [Thread-177238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:43:16.472 [DEBUG] [Thread-177238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:43:16.473 [DEBUG] [Thread-177238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:43:16.473 [DEBUG] [Thread-177238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:43:16.497 [INFO] [Thread-177238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:43:16.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:43:17.096 [DEBUG] [Thread-177238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:43:17.097 [DEBUG] [Thread-177238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:43:17.097 [DEBUG] [Thread-177238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:43:17.138 [DEBUG] [Thread-177238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:43:17.138 [DEBUG] [Thread-177238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:43:17.141 [DEBUG] [Thread-177238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:43:17.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:43:17.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:43:17.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:43:17.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:43:17.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:43:17.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:43:17.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:43:17.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:43:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:43:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.821642 -999.00  +11.90   7.68     97  +11.50 1 3 1 3 1     0    0 0.37 -0.36 ----- 7.7 7.7 284.6 10.9 13.4 -1.2 13.3 -0.2 13.0 -0.2 13.3 -0.8
2026-04-11T21:43:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:43:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:43:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.821642
2026-04-11T21:43:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:43:17.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:43:17.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:43:17.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:43:17.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:43:17.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:42:44', tmtdew=-0.01964, humidity=100.057, cloud=0.0, wind=10.0231, temperature=12.1168, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:43:09.869', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:43:17.161 [DEBUG] [Thread-177238] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:43:17.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:43:17.253 [DEBUG] [Thread-177241] [transport.py] [_log()] starting thread (client mode): 0xae5f2f80
2026-04-11T21:43:17.253 [DEBUG] [Thread-177241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:43:17.268 [DEBUG] [Thread-177241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:43:17.268 [INFO] [Thread-177241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:17.276 [DEBUG] [Thread-177241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] client lang: <none>
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] server lang: <none>
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] kex follows: False
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:43:17.277 [DEBUG] [Thread-177241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:43:17.278 [DEBUG] [Thread-177241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:43:17.278 [DEBUG] [Thread-177241] [transport.py] [_log()] Compression: none
2026-04-11T21:43:17.278 [DEBUG] [Thread-177241] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:43:17.333 [DEBUG] [Thread-177241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:43:17.334 [DEBUG] [Thread-177241] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:43:17.335 [DEBUG] [Thread-177241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:43:17.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:43:17.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:43:17.389 [DEBUG] [Thread-177241] [transport.py] [_log()] userauth is OK
2026-04-11T21:43:17.390 [DEBUG] [Thread-177241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:43:17.390 [DEBUG] [Thread-177241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:43:17.390 [DEBUG] [Thread-177241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:43:17.390 [DEBUG] [Thread-177241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:43:17.409 [INFO] [Thread-177241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:43:17.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:43:17.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:43:18.228 [DEBUG] [Thread-177241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:43:18.228 [DEBUG] [Thread-177241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:43:18.276 [DEBUG] [Thread-177241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:43:18.276 [DEBUG] [Thread-177241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:43:18.286 [DEBUG] [Thread-177241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:43:18.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:43:18.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-04-11T21:43:18.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:43:18.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:43:18.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:43:18.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:43:18.322 [DEBUG] [Thread-177241] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:43:26.723 [DEBUG] [Thread-177243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:31.709 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:31.710 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:35.284 [DEBUG] [Thread-177244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:41.764 [DEBUG] [Thread-177245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:43:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:43:48.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:43:48.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-04-11T21:43:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 43, 19), 0.042665, 100.012, 0.0, 10.0411, 11.7916, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:43:49.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:43:19
2026-04-11T21:43:50.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:43:50.306 [DEBUG] [Thread-177246] [transport.py] [_log()] starting thread (client mode): 0xb0fcee00
2026-04-11T21:43:50.306 [DEBUG] [Thread-177246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:43:50.327 [DEBUG] [Thread-177246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:43:50.328 [INFO] [Thread-177246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:43:50.329 [DEBUG] [Thread-177246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:43:50.329 [DEBUG] [Thread-177246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:43:50.329 [DEBUG] [Thread-177246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:43:50.329 [DEBUG] [Thread-177246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] client lang: <none>
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] server lang: <none>
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] kex follows: False
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:43:50.330 [DEBUG] [Thread-177246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:43:50.331 [DEBUG] [Thread-177246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:43:50.331 [DEBUG] [Thread-177246] [transport.py] [_log()] Compression: none
2026-04-11T21:43:50.331 [DEBUG] [Thread-177246] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:43:50.347 [DEBUG] [Thread-177246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:43:50.347 [DEBUG] [Thread-177246] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:43:50.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:43:50.349 [DEBUG] [Thread-177246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:43:50.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:43:50.351 [DEBUG] [Thread-177246] [transport.py] [_log()] userauth is OK
2026-04-11T21:43:50.351 [DEBUG] [Thread-177246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:43:50.352 [DEBUG] [Thread-177246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:43:50.352 [DEBUG] [Thread-177246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:43:50.352 [DEBUG] [Thread-177246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:43:50.369 [INFO] [Thread-177246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:43:50.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:43:51.025 [DEBUG] [Thread-177246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:43:51.025 [DEBUG] [Thread-177246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:43:51.025 [DEBUG] [Thread-177246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:43:51.066 [DEBUG] [Thread-177246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:43:51.066 [DEBUG] [Thread-177246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:43:51.069 [DEBUG] [Thread-177246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:43:51.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:43:51.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:43:51.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:43:51.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:43:51.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:43:51.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:43:51.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:43:51.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:43:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:43:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.821990 -999.00  +11.90   4.87     97  +11.50 1 3 1 3 1     0    0 0.36 -0.44 ----- 4.9 4.9 278.6 7.9 13.4 -1.4 13.4 -0.4 12.9 -0.5 13.3 -0.8
2026-04-11T21:43:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:43:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:43:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.821990
2026-04-11T21:43:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:43:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:43:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:43:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:43:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:43:51.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:43:19', tmtdew=0.042665, humidity=100.012, cloud=0.0, wind=10.0411, temperature=11.7916, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:43:39.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:43:51.095 [DEBUG] [Thread-177246] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:43:51.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:43:51.189 [DEBUG] [Thread-177249] [transport.py] [_log()] starting thread (client mode): 0xb0f8c0a0
2026-04-11T21:43:51.189 [DEBUG] [Thread-177249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:43:51.207 [DEBUG] [Thread-177249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:43:51.207 [INFO] [Thread-177249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:43:51.214 [DEBUG] [Thread-177249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] client lang: <none>
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] server lang: <none>
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] kex follows: False
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] Compression: none
2026-04-11T21:43:51.215 [DEBUG] [Thread-177249] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:43:51.274 [DEBUG] [Thread-177249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:43:51.275 [DEBUG] [Thread-177249] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:43:51.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:43:51.276 [DEBUG] [Thread-177249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:43:51.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:43:51.330 [DEBUG] [Thread-177249] [transport.py] [_log()] userauth is OK
2026-04-11T21:43:51.330 [DEBUG] [Thread-177249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:43:51.331 [DEBUG] [Thread-177249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:43:51.331 [DEBUG] [Thread-177249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:43:51.331 [DEBUG] [Thread-177249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:43:51.353 [INFO] [Thread-177249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:43:51.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:43:51.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:43:52.156 [DEBUG] [Thread-177249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:43:52.156 [DEBUG] [Thread-177249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:43:52.204 [DEBUG] [Thread-177249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:43:52.204 [DEBUG] [Thread-177249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:43:52.213 [DEBUG] [Thread-177249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:43:52.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:43:52.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-04-11T21:43:52.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:43:52.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:43:52.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:43:52.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:43:52.249 [DEBUG] [Thread-177249] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:43:56.801 [DEBUG] [Thread-177251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:11.861 [DEBUG] [Thread-177252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:44:22.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:44:22.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-04-11T21:44:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 43, 54), 0.037605, 100.045, 0.0, 9.01728, 11.7916, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:44:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:43:54
2026-04-11T21:44:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:44:24.065 [DEBUG] [Thread-177253] [transport.py] [_log()] starting thread (client mode): 0xb0f8f250
2026-04-11T21:44:24.065 [DEBUG] [Thread-177253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:44:24.083 [DEBUG] [Thread-177253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:44:24.084 [INFO] [Thread-177253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:44:24.084 [DEBUG] [Thread-177253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:44:24.084 [DEBUG] [Thread-177253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] client lang: <none>
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] server lang: <none>
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] kex follows: False
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:44:24.085 [DEBUG] [Thread-177253] [transport.py] [_log()] Compression: none
2026-04-11T21:44:24.086 [DEBUG] [Thread-177253] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:44:24.095 [DEBUG] [Thread-177253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:44:24.096 [DEBUG] [Thread-177253] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:44:24.096 [DEBUG] [Thread-177253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:44:24.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:44:24.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:44:24.098 [DEBUG] [Thread-177253] [transport.py] [_log()] userauth is OK
2026-04-11T21:44:24.098 [DEBUG] [Thread-177253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:44:24.098 [DEBUG] [Thread-177253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:44:24.098 [DEBUG] [Thread-177253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:44:24.098 [DEBUG] [Thread-177253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:44:24.116 [INFO] [Thread-177253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:44:24.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:44:24.770 [DEBUG] [Thread-177253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:44:24.770 [DEBUG] [Thread-177253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:44:24.770 [DEBUG] [Thread-177253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:44:24.812 [DEBUG] [Thread-177253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:44:24.812 [DEBUG] [Thread-177253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:44:24.814 [DEBUG] [Thread-177253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:44:24.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:44:24.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:44:24.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:44:24.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:44:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:44:24.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:44:24.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:44:24.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:44:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:44:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.822337 -999.00  +11.90   6.76     97  +11.60 1 3 1 3 1     0    0 0.37 -0.49 ----- 6.8 6.8 279.0 9.0 13.4 -1.4 13.4 -0.4 12.9 -0.9 13.3 -0.8
2026-04-11T21:44:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:44:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:44:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.822337
2026-04-11T21:44:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:44:24.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:44:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:44:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:44:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:44:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:43:54', tmtdew=0.037605, humidity=100.045, cloud=0.0, wind=9.01728, temperature=11.7916, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:44:09.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:44:24.842 [DEBUG] [Thread-177253] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:44:24.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:44:24.935 [DEBUG] [Thread-177256] [transport.py] [_log()] starting thread (client mode): 0xb0f8e0b0
2026-04-11T21:44:24.935 [DEBUG] [Thread-177256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:44:24.949 [DEBUG] [Thread-177256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:44:24.950 [INFO] [Thread-177256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:44:24.957 [DEBUG] [Thread-177256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] client lang: <none>
2026-04-11T21:44:24.958 [DEBUG] [Thread-177256] [transport.py] [_log()] server lang: <none>
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] kex follows: False
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] Compression: none
2026-04-11T21:44:24.959 [DEBUG] [Thread-177256] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:44:25.022 [DEBUG] [Thread-177256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:44:25.023 [DEBUG] [Thread-177256] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:44:25.024 [DEBUG] [Thread-177256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:44:25.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:44:25.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:44:25.081 [DEBUG] [Thread-177256] [transport.py] [_log()] userauth is OK
2026-04-11T21:44:25.082 [DEBUG] [Thread-177256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:44:25.082 [DEBUG] [Thread-177256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:44:25.083 [DEBUG] [Thread-177256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:44:25.083 [DEBUG] [Thread-177256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:44:25.101 [INFO] [Thread-177256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:44:25.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:44:25.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:44:25.906 [DEBUG] [Thread-177256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:44:25.906 [DEBUG] [Thread-177256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:44:25.954 [DEBUG] [Thread-177256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:44:25.954 [DEBUG] [Thread-177256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:44:25.963 [DEBUG] [Thread-177256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:44:25.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:44:25.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:44:25.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:44:25.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:44:25.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:44:25.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:44:26.000 [DEBUG] [Thread-177256] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:44:26.896 [DEBUG] [Thread-177258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:31.915 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:31.917 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:35.362 [DEBUG] [Thread-177259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:41.947 [DEBUG] [Thread-177260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:44:56.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:44: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-04-11T21:44:56.986 [DEBUG] [Thread-177261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:44:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 44, 30), 0.03257, 100.078, 0.0, 10.1462, 11.7916, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:44:57.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:44:30
2026-04-11T21:44:57.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:44:57.838 [DEBUG] [Thread-177262] [transport.py] [_log()] starting thread (client mode): 0xb0f57520
2026-04-11T21:44:57.839 [DEBUG] [Thread-177262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:44:57.858 [DEBUG] [Thread-177262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:44:57.858 [INFO] [Thread-177262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] client lang: <none>
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] server lang: <none>
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] kex follows: False
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] Compression: none
2026-04-11T21:44:57.860 [DEBUG] [Thread-177262] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:44:57.869 [DEBUG] [Thread-177262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:44:57.870 [DEBUG] [Thread-177262] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:44:57.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:44:57.871 [DEBUG] [Thread-177262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:44:57.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:44:57.872 [DEBUG] [Thread-177262] [transport.py] [_log()] userauth is OK
2026-04-11T21:44:57.873 [DEBUG] [Thread-177262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:44:57.873 [DEBUG] [Thread-177262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:44:57.873 [DEBUG] [Thread-177262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:44:57.873 [DEBUG] [Thread-177262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:44:57.894 [INFO] [Thread-177262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:44:57.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:44:58.567 [DEBUG] [Thread-177262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:44:58.568 [DEBUG] [Thread-177262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:44:58.568 [DEBUG] [Thread-177262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:44:58.610 [DEBUG] [Thread-177262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:44:58.610 [DEBUG] [Thread-177262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:44:58.613 [DEBUG] [Thread-177262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:44:58.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:44:58.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:44:58.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:44:58.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:44:58.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:44:58.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:44:58.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:44:58.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:44:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:44:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.822684 -999.00  +11.90  10.38     97  +11.50 1 3 1 3 1     0    0 0.35 -0.72 ----- 10.4 10.4 286.8 13.6 13.5 -1.4 13.3 -0.3 13.0 -0.6 13.3 -0.8
2026-04-11T21:44:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:44:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:44:58.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.822684
2026-04-11T21:44:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:44:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:44:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:44:58.637 [DEBUG] [Thread-177262] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:44:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:44:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:44:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:44:30', tmtdew=0.03257, humidity=100.078, cloud=0.0, wind=10.1462, temperature=11.7916, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:44:39.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:44:58.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:44:58.734 [DEBUG] [Thread-177265] [transport.py] [_log()] starting thread (client mode): 0xa7950d00
2026-04-11T21:44:58.734 [DEBUG] [Thread-177265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:44:58.751 [DEBUG] [Thread-177265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:44:58.751 [INFO] [Thread-177265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:44:58.758 [DEBUG] [Thread-177265] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:44:58.758 [DEBUG] [Thread-177265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:44:58.758 [DEBUG] [Thread-177265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] client lang: <none>
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] server lang: <none>
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] kex follows: False
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] Compression: none
2026-04-11T21:44:58.759 [DEBUG] [Thread-177265] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:44:58.819 [DEBUG] [Thread-177265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:44:58.819 [DEBUG] [Thread-177265] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:44:58.820 [DEBUG] [Thread-177265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:44:58.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:44:58.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:44:58.877 [DEBUG] [Thread-177265] [transport.py] [_log()] userauth is OK
2026-04-11T21:44:58.878 [DEBUG] [Thread-177265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:44:58.878 [DEBUG] [Thread-177265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:44:58.878 [DEBUG] [Thread-177265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:44:58.878 [DEBUG] [Thread-177265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:44:58.901 [INFO] [Thread-177265] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:44: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-04-11T21:44:58.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:44:59.725 [DEBUG] [Thread-177265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:44:59.725 [DEBUG] [Thread-177265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:44:59.772 [DEBUG] [Thread-177265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:44:59.772 [DEBUG] [Thread-177265] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:44:59.783 [DEBUG] [Thread-177265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:44:59.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:44:59.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:44:59.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-04-11T21:44:59.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:44:59.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:44:59.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:44:59.814 [DEBUG] [Thread-177265] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:45:12.022 [DEBUG] [Thread-177267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:45:27.073 [DEBUG] [Thread-177268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:45:29.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:45:29.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:45:29.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-04-11T21:45:31.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 45, 5), 0.03763, 100.045, 0.0, 9.74052, 11.7585, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:45:31.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:45:05
2026-04-11T21:45:31.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:45:31.668 [DEBUG] [Thread-177269] [transport.py] [_log()] starting thread (client mode): 0xae5f2920
2026-04-11T21:45:31.668 [DEBUG] [Thread-177269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:45:31.690 [DEBUG] [Thread-177269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:45:31.690 [INFO] [Thread-177269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] client lang: <none>
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] server lang: <none>
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] kex follows: False
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:45:31.693 [DEBUG] [Thread-177269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:45:31.694 [DEBUG] [Thread-177269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:45:31.694 [DEBUG] [Thread-177269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:45:31.694 [DEBUG] [Thread-177269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:45:31.694 [DEBUG] [Thread-177269] [transport.py] [_log()] Compression: none
2026-04-11T21:45:31.694 [DEBUG] [Thread-177269] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:45:31.708 [DEBUG] [Thread-177269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:45:31.709 [DEBUG] [Thread-177269] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:45:31.709 [DEBUG] [Thread-177269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:45:31.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:45:31.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:45:31.711 [DEBUG] [Thread-177269] [transport.py] [_log()] userauth is OK
2026-04-11T21:45:31.712 [DEBUG] [Thread-177269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:45:31.712 [DEBUG] [Thread-177269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:45:31.712 [DEBUG] [Thread-177269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:45:31.712 [DEBUG] [Thread-177269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:45:31.736 [INFO] [Thread-177269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:45:31.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:45:32.120 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:45:32.121 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:45:32.343 [DEBUG] [Thread-177269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:45:32.343 [DEBUG] [Thread-177269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:45:32.344 [DEBUG] [Thread-177269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:45:32.383 [DEBUG] [Thread-177269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:45:32.384 [DEBUG] [Thread-177269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:45:32.386 [DEBUG] [Thread-177269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:45:32.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:45:32.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:45:32.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:45:32.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:45:32.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:45:32.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:45:32.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:45:32.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.823031 -999.00  +11.80   9.87     97  +11.40 1 3 1 3 1     0    0 0.36 -0.62 ----- 9.9 9.9 281.6 12.5 13.5 -1.4 13.3 -0.5 13.0 -1.3 13.3 -0.9
2026-04-11T21:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.823031
2026-04-11T21:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:45:05', tmtdew=0.03763, humidity=100.045, cloud=0.0, wind=9.74052, temperature=11.7585, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:45:09.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:45:32.412 [DEBUG] [Thread-177269] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:45:32.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:45:32.507 [DEBUG] [Thread-177272] [transport.py] [_log()] starting thread (client mode): 0xa7953670
2026-04-11T21:45:32.508 [DEBUG] [Thread-177272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:45:32.522 [DEBUG] [Thread-177272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:45:32.523 [INFO] [Thread-177272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:45:32.532 [DEBUG] [Thread-177272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:45:32.532 [DEBUG] [Thread-177272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] client lang: <none>
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] server lang: <none>
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] kex follows: False
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] Compression: none
2026-04-11T21:45:32.533 [DEBUG] [Thread-177272] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:45:32.588 [DEBUG] [Thread-177272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:45:32.589 [DEBUG] [Thread-177272] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:45:32.589 [DEBUG] [Thread-177272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:45:32.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:45:32.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:45:32.644 [DEBUG] [Thread-177272] [transport.py] [_log()] userauth is OK
2026-04-11T21:45:32.645 [DEBUG] [Thread-177272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:45:32.645 [DEBUG] [Thread-177272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:45:32.645 [DEBUG] [Thread-177272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:45:32.645 [DEBUG] [Thread-177272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:45:32.663 [INFO] [Thread-177272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:45:32.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:45:32.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:45:33.483 [DEBUG] [Thread-177272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:45:33.483 [DEBUG] [Thread-177272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:45:33.531 [DEBUG] [Thread-177272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:45:33.531 [DEBUG] [Thread-177272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:45:33.539 [DEBUG] [Thread-177272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:45:33.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:45:33.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-04-11T21:45:33.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-04-11T21:45:33.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:45:33.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:45:33.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:45:33.574 [DEBUG] [Thread-177272] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:45:35.437 [DEBUG] [Thread-177274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:45:42.115 [DEBUG] [Thread-177275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:45:57.169 [DEBUG] [Thread-177276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:03.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:46:03.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:46:03.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-04-11T21:46:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 45, 41), -0.01467, 100.024, 0.0, 13.657, 12.1171, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:46:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:45:41
2026-04-11T21:46:05.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:46:05.417 [DEBUG] [Thread-177277] [transport.py] [_log()] starting thread (client mode): 0xae509f00
2026-04-11T21:46:05.417 [DEBUG] [Thread-177277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:46:05.439 [DEBUG] [Thread-177277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:46:05.439 [INFO] [Thread-177277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] client lang: <none>
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] server lang: <none>
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] kex follows: False
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:46:05.442 [DEBUG] [Thread-177277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:46:05.443 [DEBUG] [Thread-177277] [transport.py] [_log()] Compression: none
2026-04-11T21:46:05.443 [DEBUG] [Thread-177277] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:46:05.460 [DEBUG] [Thread-177277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:46:05.461 [DEBUG] [Thread-177277] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:46:05.462 [DEBUG] [Thread-177277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:46:05.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:46:05.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:46:05.464 [DEBUG] [Thread-177277] [transport.py] [_log()] userauth is OK
2026-04-11T21:46:05.464 [DEBUG] [Thread-177277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:46:05.464 [DEBUG] [Thread-177277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:46:05.464 [DEBUG] [Thread-177277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:46:05.464 [DEBUG] [Thread-177277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:46:05.500 [INFO] [Thread-177277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:46:05.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:46:06.131 [DEBUG] [Thread-177277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:46:06.131 [DEBUG] [Thread-177277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:46:06.132 [DEBUG] [Thread-177277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:46:06.172 [DEBUG] [Thread-177277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:46:06.172 [DEBUG] [Thread-177277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:46:06.176 [DEBUG] [Thread-177277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:46:06.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:46:06.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:46:06.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:46:06.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:46:06.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:46:06.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:46:06.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:46:06.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:46:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:46:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.823379 -999.00  +11.80  10.55     97  +11.50 1 3 1 3 1     0    0 0.36 -0.60 ----- 10.6 10.6 293.4 11.6 13.4 -1.5 13.4 -0.5 13.0 -0.4 13.3 -0.7
2026-04-11T21:46:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:46:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:46:06.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.823379
2026-04-11T21:46:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:46:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:46:06.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:46:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:46:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:46:06.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:45:41', tmtdew=-0.01467, humidity=100.024, cloud=0.0, wind=13.657, temperature=12.1171, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:45:39.946', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:46:06.204 [DEBUG] [Thread-177277] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:46:06.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:46:06.297 [DEBUG] [Thread-177280] [transport.py] [_log()] starting thread (client mode): 0xb0fceaa0
2026-04-11T21:46:06.297 [DEBUG] [Thread-177280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:46:06.311 [DEBUG] [Thread-177280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:46:06.312 [INFO] [Thread-177280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] client lang: <none>
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] server lang: <none>
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] kex follows: False
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:46:06.319 [DEBUG] [Thread-177280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:46:06.320 [DEBUG] [Thread-177280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:46:06.320 [DEBUG] [Thread-177280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:46:06.320 [DEBUG] [Thread-177280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:46:06.320 [DEBUG] [Thread-177280] [transport.py] [_log()] Compression: none
2026-04-11T21:46:06.320 [DEBUG] [Thread-177280] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:46:06.383 [DEBUG] [Thread-177280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:46:06.384 [DEBUG] [Thread-177280] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:46:06.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:46:06.385 [DEBUG] [Thread-177280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:46:06.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:46:06.441 [DEBUG] [Thread-177280] [transport.py] [_log()] userauth is OK
2026-04-11T21:46:06.441 [DEBUG] [Thread-177280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:46:06.441 [DEBUG] [Thread-177280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:46:06.441 [DEBUG] [Thread-177280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:46:06.441 [DEBUG] [Thread-177280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:46:06.466 [INFO] [Thread-177280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:46:06.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:46:06.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:46:07.307 [DEBUG] [Thread-177280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:46:07.307 [DEBUG] [Thread-177280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:46:07.355 [DEBUG] [Thread-177280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:46:07.355 [DEBUG] [Thread-177280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:46:07.364 [DEBUG] [Thread-177280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:46:07.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:46:07.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-04-11T21:46:07.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-04-11T21:46:07.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:46:07.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:46:07.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:46:07.397 [DEBUG] [Thread-177280] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:46:12.205 [DEBUG] [Thread-177282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:27.257 [DEBUG] [Thread-177283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:32.324 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:32.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:35.493 [DEBUG] [Thread-177284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:37.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:46:37.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:46:37.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-04-11T21:46:38.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 46, 16), -0.012475, 100.045, 0.0, 12.7048, 11.7915, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:46:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:46:16
2026-04-11T21:46:39.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:46:39.202 [DEBUG] [Thread-177285] [transport.py] [_log()] starting thread (client mode): 0xb0f54550
2026-04-11T21:46:39.202 [DEBUG] [Thread-177285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:46:39.221 [DEBUG] [Thread-177285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:46:39.221 [INFO] [Thread-177285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] client lang: <none>
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] server lang: <none>
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] kex follows: False
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] Compression: none
2026-04-11T21:46:39.223 [DEBUG] [Thread-177285] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:46:39.231 [DEBUG] [Thread-177285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:46:39.231 [DEBUG] [Thread-177285] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:46:39.232 [DEBUG] [Thread-177285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:46:39.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:46:39.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:46:39.232 [DEBUG] [Thread-177285] [transport.py] [_log()] userauth is OK
2026-04-11T21:46:39.232 [DEBUG] [Thread-177285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:46:39.232 [DEBUG] [Thread-177285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:46:39.232 [DEBUG] [Thread-177285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:46:39.233 [DEBUG] [Thread-177285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:46:39.242 [INFO] [Thread-177285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:46:39.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:46:39.896 [DEBUG] [Thread-177285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:46:39.897 [DEBUG] [Thread-177285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:46:39.897 [DEBUG] [Thread-177285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:46:39.938 [DEBUG] [Thread-177285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:46:39.938 [DEBUG] [Thread-177285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:46:39.941 [DEBUG] [Thread-177285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:46:39.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:46:39.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:46:39.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:46:39.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:46:39.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:46:39.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:46:39.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:46:39.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:46:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:46:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.823726 -999.00  +11.80   8.57     97  +11.50 1 3 1 3 1     0    0 0.36 -0.85 ----- 8.6 8.6 294.8 11.1 13.4 -1.3 13.3 -0.3 13.0 -0.3 13.3 -0.8
2026-04-11T21:46:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:46:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:46:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.823726
2026-04-11T21:46:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:46:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:46:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:46:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:46:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:46:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:46:16', tmtdew=-0.012475, humidity=100.045, cloud=0.0, wind=12.7048, temperature=11.7915, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:46:09.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:46:39.968 [DEBUG] [Thread-177285] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:46:40.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:46:40.061 [DEBUG] [Thread-177288] [transport.py] [_log()] starting thread (client mode): 0xb0f8cdc0
2026-04-11T21:46:40.062 [DEBUG] [Thread-177288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:46:40.080 [DEBUG] [Thread-177288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:46:40.081 [INFO] [Thread-177288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:46:40.089 [DEBUG] [Thread-177288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] client lang: <none>
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] server lang: <none>
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] kex follows: False
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] Compression: none
2026-04-11T21:46:40.090 [DEBUG] [Thread-177288] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:46:40.149 [DEBUG] [Thread-177288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:46:40.150 [DEBUG] [Thread-177288] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:46:40.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:46:40.151 [DEBUG] [Thread-177288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:46:40.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:46:40.209 [DEBUG] [Thread-177288] [transport.py] [_log()] userauth is OK
2026-04-11T21:46:40.210 [DEBUG] [Thread-177288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:46:40.210 [DEBUG] [Thread-177288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:46:40.210 [DEBUG] [Thread-177288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:46:40.210 [DEBUG] [Thread-177288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:46:40.235 [INFO] [Thread-177288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:46:40.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:46:40.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:46:41.014 [DEBUG] [Thread-177288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:46:41.015 [DEBUG] [Thread-177288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:46:41.063 [DEBUG] [Thread-177288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:46:41.063 [DEBUG] [Thread-177288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:46:41.072 [DEBUG] [Thread-177288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:46:41.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:46:41.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:46:41.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:46:41.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:46:41.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:46:41.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:46:41.109 [DEBUG] [Thread-177288] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:46:42.295 [DEBUG] [Thread-177290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:46:57.337 [DEBUG] [Thread-177291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:11.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:47:11.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:47:11.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-04-11T21:47:12.375 [DEBUG] [Thread-177292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 46, 52), -0.02484, 100.091, 0.0, 12.4927, 12.1835, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:47:12.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:46:52
2026-04-11T21:47:12.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:47:12.930 [DEBUG] [Thread-177293] [transport.py] [_log()] starting thread (client mode): 0xb0f8c190
2026-04-11T21:47:12.930 [DEBUG] [Thread-177293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:47:12.951 [DEBUG] [Thread-177293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:47:12.952 [INFO] [Thread-177293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:47:12.955 [DEBUG] [Thread-177293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] client lang: <none>
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] server lang: <none>
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] kex follows: False
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] Compression: none
2026-04-11T21:47:12.956 [DEBUG] [Thread-177293] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:47:12.977 [DEBUG] [Thread-177293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:47:12.978 [DEBUG] [Thread-177293] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:47:12.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:47:12.979 [DEBUG] [Thread-177293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:47:12.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:47:12.981 [DEBUG] [Thread-177293] [transport.py] [_log()] userauth is OK
2026-04-11T21:47:12.981 [DEBUG] [Thread-177293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:47:12.981 [DEBUG] [Thread-177293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:47:12.982 [DEBUG] [Thread-177293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:47:12.982 [DEBUG] [Thread-177293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:47:13.004 [INFO] [Thread-177293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:47:13.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:47:13.667 [DEBUG] [Thread-177293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:47:13.667 [DEBUG] [Thread-177293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:47:13.667 [DEBUG] [Thread-177293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:47:13.708 [DEBUG] [Thread-177293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:47:13.708 [DEBUG] [Thread-177293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:47:13.712 [DEBUG] [Thread-177293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:47:13.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:47:13.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:47:13.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:47:13.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:47:13.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:47:13.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:47:13.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:47:13.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:47:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:47:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.824073 -999.00  +11.80  11.73     97  +11.40 1 3 1 3 1     0    0 0.35 -0.69 ----- 11.7 11.7 273.3 14.3 13.4 -1.6 13.3 -0.6 13.0 -0.7 13.3 -0.9
2026-04-11T21:47:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:47:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:47:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.824073
2026-04-11T21:47:13.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:47:13.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:47:13.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:47:13.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:47:13.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:47:13.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:46:52', tmtdew=-0.02484, humidity=100.091, cloud=0.0, wind=12.4927, temperature=12.1835, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:46:39.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:47:13.737 [DEBUG] [Thread-177293] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:47:13.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:47:13.833 [DEBUG] [Thread-177296] [transport.py] [_log()] starting thread (client mode): 0xa7953340
2026-04-11T21:47:13.833 [DEBUG] [Thread-177296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:47:13.848 [DEBUG] [Thread-177296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:47:13.848 [INFO] [Thread-177296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:47:13.859 [DEBUG] [Thread-177296] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] client lang: <none>
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] server lang: <none>
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] kex follows: False
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:47:13.860 [DEBUG] [Thread-177296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:47:13.861 [DEBUG] [Thread-177296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:47:13.861 [DEBUG] [Thread-177296] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:47:13.861 [DEBUG] [Thread-177296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:47:13.861 [DEBUG] [Thread-177296] [transport.py] [_log()] Compression: none
2026-04-11T21:47:13.861 [DEBUG] [Thread-177296] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:47:13.917 [DEBUG] [Thread-177296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:47:13.918 [DEBUG] [Thread-177296] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:47:13.918 [DEBUG] [Thread-177296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:47:13.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:47:13.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:47:13.977 [DEBUG] [Thread-177296] [transport.py] [_log()] userauth is OK
2026-04-11T21:47:13.977 [DEBUG] [Thread-177296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:47:13.978 [DEBUG] [Thread-177296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:47:13.978 [DEBUG] [Thread-177296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:47:13.978 [DEBUG] [Thread-177296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:47:13.997 [INFO] [Thread-177296] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:47:13.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:47:13.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:47:14.831 [DEBUG] [Thread-177296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:47:14.831 [DEBUG] [Thread-177296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:47:14.879 [DEBUG] [Thread-177296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:47:14.880 [DEBUG] [Thread-177296] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:47:14.889 [DEBUG] [Thread-177296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:47:14.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:47:14.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-04-11T21:47:14.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-04-11T21:47:14.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:47:14.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:47:14.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:47:14.929 [DEBUG] [Thread-177296] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:47:27.411 [DEBUG] [Thread-177298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:32.529 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:32.530 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:35.561 [DEBUG] [Thread-177299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:42.463 [DEBUG] [Thread-177300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:47:44.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:47:44.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:47:44.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:47:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 47, 27), 0.047695, 99.979, 0.0, 11.6287, 11.742, 2, 2, 0, 2, 0, 0),)
2026-04-11T21:47:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:47:27
2026-04-11T21:47:46.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:47:46.879 [DEBUG] [Thread-177301] [transport.py] [_log()] starting thread (client mode): 0xa7910cd0
2026-04-11T21:47:46.879 [DEBUG] [Thread-177301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:47:46.894 [DEBUG] [Thread-177301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:47:46.894 [INFO] [Thread-177301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:46.898 [DEBUG] [Thread-177301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] client lang: <none>
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] server lang: <none>
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] kex follows: False
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] Compression: none
2026-04-11T21:47:46.899 [DEBUG] [Thread-177301] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:47:46.919 [DEBUG] [Thread-177301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:47:46.919 [DEBUG] [Thread-177301] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:47:46.920 [DEBUG] [Thread-177301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:47:46.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:47:46.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:47:46.922 [DEBUG] [Thread-177301] [transport.py] [_log()] userauth is OK
2026-04-11T21:47:46.922 [DEBUG] [Thread-177301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:47:46.922 [DEBUG] [Thread-177301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:47:46.922 [DEBUG] [Thread-177301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:47:46.922 [DEBUG] [Thread-177301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:47:46.963 [INFO] [Thread-177301] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:47:46.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:47:47.580 [DEBUG] [Thread-177301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:47:47.581 [DEBUG] [Thread-177301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:47:47.581 [DEBUG] [Thread-177301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:47:47.621 [DEBUG] [Thread-177301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:47:47.621 [DEBUG] [Thread-177301] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:47:47.625 [DEBUG] [Thread-177301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:47:47.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:47:47.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:47:47.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:47:47.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:47:47.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:47:47.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:47:47.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:47:47.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:47:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:47:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.824420 -999.00  +11.80   9.32     97  +11.40 1 3 1 3 1     0    0 0.36 -0.72 ----- 9.3 9.3 281.2 12.0 13.4 -1.7 13.3 -0.5 12.8 -0.9 13.2 -1.0
2026-04-11T21:47:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:47:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:47:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.824420
2026-04-11T21:47:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:47:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:47:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:47:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:47:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:47:47.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:47:27', tmtdew=0.047695, humidity=99.979, cloud=0.0, wind=11.6287, temperature=11.742, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:47:09.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:47:47.652 [DEBUG] [Thread-177301] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:47:47.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:47:47.748 [DEBUG] [Thread-177304] [transport.py] [_log()] starting thread (client mode): 0xb0fceaa0
2026-04-11T21:47:47.748 [DEBUG] [Thread-177304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:47:47.763 [DEBUG] [Thread-177304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:47:47.763 [INFO] [Thread-177304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:47:47.771 [DEBUG] [Thread-177304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] client lang: <none>
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] server lang: <none>
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] kex follows: False
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] Compression: none
2026-04-11T21:47:47.772 [DEBUG] [Thread-177304] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:47:47.832 [DEBUG] [Thread-177304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:47:47.833 [DEBUG] [Thread-177304] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:47:47.833 [DEBUG] [Thread-177304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:47:47.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:47:47.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:47:47.888 [DEBUG] [Thread-177304] [transport.py] [_log()] userauth is OK
2026-04-11T21:47:47.889 [DEBUG] [Thread-177304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:47:47.889 [DEBUG] [Thread-177304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:47:47.889 [DEBUG] [Thread-177304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:47:47.889 [DEBUG] [Thread-177304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:47:47.904 [INFO] [Thread-177304] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:47:47.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:47:47.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:47:48.747 [DEBUG] [Thread-177304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:47:48.747 [DEBUG] [Thread-177304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:47:48.795 [DEBUG] [Thread-177304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:47:48.795 [DEBUG] [Thread-177304] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:47:48.804 [DEBUG] [Thread-177304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:47:48.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:47:48.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-04-11T21:47:48.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-04-11T21:47:48.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:47:48.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:47:48.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:47:48.846 [DEBUG] [Thread-177304] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:47:57.502 [DEBUG] [Thread-177306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:12.554 [DEBUG] [Thread-177307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:48:18.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:48:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:48:20.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 48, 3), 0.04266, 100.012, 0.0, 11.5405, 11.742, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:48:20.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:48:03
2026-04-11T21:48:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:48:20.724 [DEBUG] [Thread-177308] [transport.py] [_log()] starting thread (client mode): 0xb0f8c760
2026-04-11T21:48:20.724 [DEBUG] [Thread-177308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:48:20.744 [DEBUG] [Thread-177308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:48:20.744 [INFO] [Thread-177308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:48:20.747 [DEBUG] [Thread-177308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:48:20.747 [DEBUG] [Thread-177308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:48:20.747 [DEBUG] [Thread-177308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] client lang: <none>
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] server lang: <none>
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] kex follows: False
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:48:20.748 [DEBUG] [Thread-177308] [transport.py] [_log()] Compression: none
2026-04-11T21:48:20.749 [DEBUG] [Thread-177308] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:48:20.766 [DEBUG] [Thread-177308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:48:20.766 [DEBUG] [Thread-177308] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:48:20.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:48:20.767 [DEBUG] [Thread-177308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:48:20.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:48:20.770 [DEBUG] [Thread-177308] [transport.py] [_log()] userauth is OK
2026-04-11T21:48:20.770 [DEBUG] [Thread-177308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:48:20.770 [DEBUG] [Thread-177308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:48:20.770 [DEBUG] [Thread-177308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:48:20.770 [DEBUG] [Thread-177308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:48:20.795 [INFO] [Thread-177308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:48:20.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:48:21.387 [DEBUG] [Thread-177308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:48:21.388 [DEBUG] [Thread-177308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:48:21.388 [DEBUG] [Thread-177308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:48:21.429 [DEBUG] [Thread-177308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:48:21.430 [DEBUG] [Thread-177308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:48:21.433 [DEBUG] [Thread-177308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:48:21.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:48:21.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:48:21.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:48:21.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:48:21.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:48:21.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:48:21.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:48:21.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:48:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:48:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.825115 -999.00  +11.70  10.26     97  +11.30 1 3 1 3 1     0    0 0.36 -0.89 ----- 10.3 10.3 275.6 15.0 13.4 -1.5 13.3 -0.6 12.9 -1.0 13.2 -1.1
2026-04-11T21:48:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:48:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:48:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.825115
2026-04-11T21:48:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:48:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:48:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:48:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:48:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:48:21.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:48:03', tmtdew=0.04266, humidity=100.012, cloud=0.0, wind=11.5405, temperature=11.742, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:48:09.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:48:21.461 [DEBUG] [Thread-177308] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:48:21.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:48:21.556 [DEBUG] [Thread-177311] [transport.py] [_log()] starting thread (client mode): 0xa7912110
2026-04-11T21:48:21.556 [DEBUG] [Thread-177311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:48:21.571 [DEBUG] [Thread-177311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:48:21.571 [INFO] [Thread-177311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:48:21.582 [DEBUG] [Thread-177311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:48:21.582 [DEBUG] [Thread-177311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:48:21.582 [DEBUG] [Thread-177311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:48:21.582 [DEBUG] [Thread-177311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] client lang: <none>
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] server lang: <none>
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] kex follows: False
2026-04-11T21:48:21.583 [DEBUG] [Thread-177311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:48:21.584 [DEBUG] [Thread-177311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:48:21.584 [DEBUG] [Thread-177311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:48:21.584 [DEBUG] [Thread-177311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:48:21.584 [DEBUG] [Thread-177311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:48:21.584 [DEBUG] [Thread-177311] [transport.py] [_log()] Compression: none
2026-04-11T21:48:21.584 [DEBUG] [Thread-177311] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:48:21.641 [DEBUG] [Thread-177311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:48:21.642 [DEBUG] [Thread-177311] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:48:21.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:48:21.643 [DEBUG] [Thread-177311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:48:21.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:48:21.697 [DEBUG] [Thread-177311] [transport.py] [_log()] userauth is OK
2026-04-11T21:48:21.698 [DEBUG] [Thread-177311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:48:21.698 [DEBUG] [Thread-177311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:48:21.698 [DEBUG] [Thread-177311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:48:21.698 [DEBUG] [Thread-177311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:48:21.723 [INFO] [Thread-177311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:48:21.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:48:21.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:48:22.554 [DEBUG] [Thread-177311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:48:22.555 [DEBUG] [Thread-177311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:48:22.602 [DEBUG] [Thread-177311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:48:22.602 [DEBUG] [Thread-177311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:48:22.611 [DEBUG] [Thread-177311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:48:22.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:48:22.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-04-11T21:48:22.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-04-11T21:48:22.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:48:22.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:48:22.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:48:22.648 [DEBUG] [Thread-177311] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:48:27.592 [DEBUG] [Thread-177313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:32.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:32.734 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:35.646 [DEBUG] [Thread-177314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:42.642 [DEBUG] [Thread-177315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:48:52.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:48:52.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:48:52.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-04-11T21:48:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 48, 38), -0.02995, 100.124, 0.0, 10.3406, 12.2168, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:48:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:48:38
2026-04-11T21:48:54.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:48:54.502 [DEBUG] [Thread-177316] [transport.py] [_log()] starting thread (client mode): 0xa79513c0
2026-04-11T21:48:54.502 [DEBUG] [Thread-177316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:48:54.522 [DEBUG] [Thread-177316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:48:54.522 [INFO] [Thread-177316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:48:54.525 [DEBUG] [Thread-177316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:48:54.525 [DEBUG] [Thread-177316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:48:54.525 [DEBUG] [Thread-177316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:48:54.525 [DEBUG] [Thread-177316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] client lang: <none>
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] server lang: <none>
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] kex follows: False
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] Compression: none
2026-04-11T21:48:54.526 [DEBUG] [Thread-177316] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:48:54.543 [DEBUG] [Thread-177316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:48:54.543 [DEBUG] [Thread-177316] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:48:54.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:48:54.544 [DEBUG] [Thread-177316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:48:54.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:48:54.547 [DEBUG] [Thread-177316] [transport.py] [_log()] userauth is OK
2026-04-11T21:48:54.547 [DEBUG] [Thread-177316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:48:54.547 [DEBUG] [Thread-177316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:48:54.547 [DEBUG] [Thread-177316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:48:54.547 [DEBUG] [Thread-177316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:48:54.565 [INFO] [Thread-177316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:48:54.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:48:55.163 [DEBUG] [Thread-177316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:48:55.164 [DEBUG] [Thread-177316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:48:55.164 [DEBUG] [Thread-177316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:48:55.204 [DEBUG] [Thread-177316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:48:55.204 [DEBUG] [Thread-177316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:48:55.208 [DEBUG] [Thread-177316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:48:55.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:48:55.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:48:55.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:48:55.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:48:55.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:48:55.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:48:55.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:48:55.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:48:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:48:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.825462 -999.00  +11.70  12.22     97  +11.30 1 3 1 3 1     0    0 0.35 -0.79 ----- 12.2 12.2 271.8 14.4 13.3 -1.9 13.3 -0.6 12.8 -1.4 13.2 -1.0
2026-04-11T21:48:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:48:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:48:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.825462
2026-04-11T21:48:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:48:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:48:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:48:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:48:55.235 [DEBUG] [Thread-177316] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:48:55.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:48:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:48:38', tmtdew=-0.02995, humidity=100.124, cloud=0.0, wind=10.3406, temperature=12.2168, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:48:39.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:48:55.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:48:55.329 [DEBUG] [Thread-177319] [transport.py] [_log()] starting thread (client mode): 0xae514610
2026-04-11T21:48:55.329 [DEBUG] [Thread-177319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:48:55.345 [DEBUG] [Thread-177319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:48:55.345 [INFO] [Thread-177319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:48:55.353 [DEBUG] [Thread-177319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:48:55.353 [DEBUG] [Thread-177319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:48:55.353 [DEBUG] [Thread-177319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] client lang: <none>
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] server lang: <none>
2026-04-11T21:48:55.354 [DEBUG] [Thread-177319] [transport.py] [_log()] kex follows: False
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] Compression: none
2026-04-11T21:48:55.355 [DEBUG] [Thread-177319] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:48:55.414 [DEBUG] [Thread-177319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:48:55.414 [DEBUG] [Thread-177319] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:48:55.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:48:55.415 [DEBUG] [Thread-177319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:48:55.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:48:55.473 [DEBUG] [Thread-177319] [transport.py] [_log()] userauth is OK
2026-04-11T21:48:55.473 [DEBUG] [Thread-177319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:48:55.474 [DEBUG] [Thread-177319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:48:55.474 [DEBUG] [Thread-177319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:48:55.474 [DEBUG] [Thread-177319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:48:55.493 [INFO] [Thread-177319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:48:55.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:48:55.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:48:56.317 [DEBUG] [Thread-177319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:48:56.318 [DEBUG] [Thread-177319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:48:56.366 [DEBUG] [Thread-177319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:48:56.366 [DEBUG] [Thread-177319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:48:56.375 [DEBUG] [Thread-177319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:48:56.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:48:56.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:48:56.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:48:56.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:48:56.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:48:56.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:48:56.410 [DEBUG] [Thread-177319] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:48:57.682 [DEBUG] [Thread-177321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:12.735 [DEBUG] [Thread-177322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:26.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:49:26.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:49:26.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-04-11T21:49:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 49, 13), 0.037525, 100.045, 0.0, 11.7169, 11.775, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:49:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:49:13
2026-04-11T21:49:27.772 [DEBUG] [Thread-177323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:28.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:49:28.241 [DEBUG] [Thread-177324] [transport.py] [_log()] starting thread (client mode): 0xa7951f90
2026-04-11T21:49:28.241 [DEBUG] [Thread-177324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:49:28.261 [DEBUG] [Thread-177324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:49:28.261 [INFO] [Thread-177324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:49:28.264 [DEBUG] [Thread-177324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:49:28.264 [DEBUG] [Thread-177324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:49:28.264 [DEBUG] [Thread-177324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:49:28.264 [DEBUG] [Thread-177324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:49:28.264 [DEBUG] [Thread-177324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] client lang: <none>
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] server lang: <none>
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] kex follows: False
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] Compression: none
2026-04-11T21:49:28.265 [DEBUG] [Thread-177324] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:49:28.284 [DEBUG] [Thread-177324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:49:28.284 [DEBUG] [Thread-177324] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:49:28.285 [DEBUG] [Thread-177324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:49:28.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:49:28.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:49:28.287 [DEBUG] [Thread-177324] [transport.py] [_log()] userauth is OK
2026-04-11T21:49:28.287 [DEBUG] [Thread-177324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:49:28.287 [DEBUG] [Thread-177324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:49:28.287 [DEBUG] [Thread-177324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:49:28.287 [DEBUG] [Thread-177324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:49:28.319 [INFO] [Thread-177324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:49:28.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:49:28.914 [DEBUG] [Thread-177324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:49:28.915 [DEBUG] [Thread-177324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:49:28.915 [DEBUG] [Thread-177324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:49:28.956 [DEBUG] [Thread-177324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:49:28.957 [DEBUG] [Thread-177324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:49:28.960 [DEBUG] [Thread-177324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:49:28.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:49:28.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:49:28.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:49:28.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:49:28.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:49:28.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:49:28.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:49:28.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:49:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:49:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.825809 -999.00  +11.70  13.18     97  +11.30 1 3 1 3 1     0    0 0.37 -0.57 ----- 13.2 13.2 270.2 15.8 13.3 -1.8 13.2 -0.5 12.8 -1.5 13.1 -0.9
2026-04-11T21:49:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:49:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:49:28.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.825809
2026-04-11T21:49:28.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:49:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:49:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:49:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:49:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:49:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:49:13', tmtdew=0.037525, humidity=100.045, cloud=0.0, wind=11.7169, temperature=11.775, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:49:09.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:49:28.987 [DEBUG] [Thread-177324] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:49:29.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:49:29.081 [DEBUG] [Thread-177327] [transport.py] [_log()] starting thread (client mode): 0xb0fcc9a0
2026-04-11T21:49:29.081 [DEBUG] [Thread-177327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:49:29.097 [DEBUG] [Thread-177327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:49:29.097 [INFO] [Thread-177327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:49:29.109 [DEBUG] [Thread-177327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:49:29.110 [DEBUG] [Thread-177327] [transport.py] [_log()] client lang: <none>
2026-04-11T21:49:29.119 [DEBUG] [Thread-177327] [transport.py] [_log()] server lang: <none>
2026-04-11T21:49:29.119 [DEBUG] [Thread-177327] [transport.py] [_log()] kex follows: False
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] Compression: none
2026-04-11T21:49:29.120 [DEBUG] [Thread-177327] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:49:29.165 [DEBUG] [Thread-177327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:49:29.165 [DEBUG] [Thread-177327] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:49:29.166 [DEBUG] [Thread-177327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:49:29.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:49:29.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:49:29.221 [DEBUG] [Thread-177327] [transport.py] [_log()] userauth is OK
2026-04-11T21:49:29.221 [DEBUG] [Thread-177327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:49:29.221 [DEBUG] [Thread-177327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:49:29.222 [DEBUG] [Thread-177327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:49:29.222 [DEBUG] [Thread-177327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:49:29.240 [INFO] [Thread-177327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:49:29.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:49:29.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:49:30.066 [DEBUG] [Thread-177327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:49:30.066 [DEBUG] [Thread-177327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:49:30.114 [DEBUG] [Thread-177327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:49:30.114 [DEBUG] [Thread-177327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:49:30.124 [DEBUG] [Thread-177327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:49:30.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:49:30.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-04-11T21:49:30.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:49:30.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:49:30.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:49:30.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:49:30.162 [DEBUG] [Thread-177327] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:49:32.941 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:32.943 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:35.701 [DEBUG] [Thread-177329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:42.808 [DEBUG] [Thread-177330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:49:57.864 [DEBUG] [Thread-177331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:00.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:50:00.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:50:00.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-04-11T21:50:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 49, 49), -0.02499, 100.091, 0.0, 11.9988, 12.2832, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:50:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:49:49
2026-04-11T21:50:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:50:02.031 [DEBUG] [Thread-177332] [transport.py] [_log()] starting thread (client mode): 0xb0fcead0
2026-04-11T21:50:02.031 [DEBUG] [Thread-177332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:50:02.051 [DEBUG] [Thread-177332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:50:02.051 [INFO] [Thread-177332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] client lang: <none>
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] server lang: <none>
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] kex follows: False
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:50:02.054 [DEBUG] [Thread-177332] [transport.py] [_log()] Compression: none
2026-04-11T21:50:02.055 [DEBUG] [Thread-177332] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:50:02.069 [DEBUG] [Thread-177332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:50:02.070 [DEBUG] [Thread-177332] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:50:02.070 [DEBUG] [Thread-177332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:50:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:50:02.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:50:02.112 [DEBUG] [Thread-177332] [transport.py] [_log()] userauth is OK
2026-04-11T21:50:02.113 [DEBUG] [Thread-177332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:50:02.113 [DEBUG] [Thread-177332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:50:02.113 [DEBUG] [Thread-177332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:50:02.113 [DEBUG] [Thread-177332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:50:02.145 [INFO] [Thread-177332] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:50:02.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:50:02.832 [DEBUG] [Thread-177332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:50:02.832 [DEBUG] [Thread-177332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:50:02.833 [DEBUG] [Thread-177332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:50:02.873 [DEBUG] [Thread-177332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:50:02.873 [DEBUG] [Thread-177332] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:50:02.878 [DEBUG] [Thread-177332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:50:02.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:50:02.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:50:02.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:50:02.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:50:02.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:50:02.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:50:02.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:50:02.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:50:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:50:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.826156 -999.00  +11.70  12.23     97  +11.30 1 3 1 3 1     0    0 0.36 -0.40 ----- 12.2 12.2 275.4 14.9 13.3 -1.8 13.2 -0.6 12.7 -1.0 13.1 -0.8
2026-04-11T21:50:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:50:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:50:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.826156
2026-04-11T21:50:02.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:50:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:50:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:50:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:50:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:50:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:49:49', tmtdew=-0.02499, humidity=100.091, cloud=0.0, wind=11.9988, temperature=12.2832, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:49:39.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:50:02.911 [DEBUG] [Thread-177332] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:50:02.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:50:03.004 [DEBUG] [Thread-177335] [transport.py] [_log()] starting thread (client mode): 0xb0fcee00
2026-04-11T21:50:03.004 [DEBUG] [Thread-177335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:50:03.019 [DEBUG] [Thread-177335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:50:03.019 [INFO] [Thread-177335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:50:03.027 [DEBUG] [Thread-177335] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:50:03.027 [DEBUG] [Thread-177335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:50:03.027 [DEBUG] [Thread-177335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:50:03.027 [DEBUG] [Thread-177335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] client lang: <none>
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] server lang: <none>
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] kex follows: False
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:50:03.028 [DEBUG] [Thread-177335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:50:03.029 [DEBUG] [Thread-177335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:50:03.029 [DEBUG] [Thread-177335] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:50:03.029 [DEBUG] [Thread-177335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:50:03.029 [DEBUG] [Thread-177335] [transport.py] [_log()] Compression: none
2026-04-11T21:50:03.029 [DEBUG] [Thread-177335] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:50:03.086 [DEBUG] [Thread-177335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:50:03.086 [DEBUG] [Thread-177335] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:50:03.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:50:03.088 [DEBUG] [Thread-177335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:50:03.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:50:03.146 [DEBUG] [Thread-177335] [transport.py] [_log()] userauth is OK
2026-04-11T21:50:03.146 [DEBUG] [Thread-177335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:50:03.147 [DEBUG] [Thread-177335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:50:03.147 [DEBUG] [Thread-177335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:50:03.147 [DEBUG] [Thread-177335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:50:03.166 [INFO] [Thread-177335] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:50:03.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:50:03.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:50:03.989 [DEBUG] [Thread-177335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:50:03.989 [DEBUG] [Thread-177335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:50:04.037 [DEBUG] [Thread-177335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:50:04.037 [DEBUG] [Thread-177335] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:50:04.046 [DEBUG] [Thread-177335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:50:04.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:50: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')
2026-04-11T21:50:04.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-04-11T21:50:04.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:50:04.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:50:04.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:50:04.086 [DEBUG] [Thread-177335] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:50:12.900 [DEBUG] [Thread-177337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:27.954 [DEBUG] [Thread-177338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:33.145 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:33.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:34.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:50:34.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:50:34.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-04-11T21:50:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 50, 25), -0.01244, 100.045, 0.0, 11.5229, 11.7418, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:50:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:50:25
2026-04-11T21:50:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:50:35.787 [DEBUG] [Thread-177339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:35.907 [DEBUG] [Thread-177340] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6d0
2026-04-11T21:50:35.907 [DEBUG] [Thread-177340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:50:35.927 [DEBUG] [Thread-177340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:50:35.927 [INFO] [Thread-177340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] client lang: <none>
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] server lang: <none>
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] kex follows: False
2026-04-11T21:50:35.937 [DEBUG] [Thread-177340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:50:35.938 [DEBUG] [Thread-177340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:50:35.938 [DEBUG] [Thread-177340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:50:35.938 [DEBUG] [Thread-177340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:50:35.938 [DEBUG] [Thread-177340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:50:35.938 [DEBUG] [Thread-177340] [transport.py] [_log()] Compression: none
2026-04-11T21:50:35.938 [DEBUG] [Thread-177340] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:50:35.957 [DEBUG] [Thread-177340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:50:35.957 [DEBUG] [Thread-177340] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:50:35.958 [DEBUG] [Thread-177340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:50:35.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:50:35.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:50:35.959 [DEBUG] [Thread-177340] [transport.py] [_log()] userauth is OK
2026-04-11T21:50:35.960 [DEBUG] [Thread-177340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:50:35.960 [DEBUG] [Thread-177340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:50:35.960 [DEBUG] [Thread-177340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:50:35.960 [DEBUG] [Thread-177340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:50:35.984 [INFO] [Thread-177340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:50:35.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:50:36.591 [DEBUG] [Thread-177340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:50:36.591 [DEBUG] [Thread-177340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:50:36.591 [DEBUG] [Thread-177340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:50:36.632 [DEBUG] [Thread-177340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:50:36.632 [DEBUG] [Thread-177340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:50:36.635 [DEBUG] [Thread-177340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:50:36.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:50:36.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:50:36.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:50:36.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:50:36.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:50:36.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:50:36.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:50:36.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:50:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:50:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.826503 -999.00  +11.80  12.84     97  +11.40 1 3 1 3 1     0    0 0.37 -0.25 ----- 12.8 12.8 271.6 15.1 13.3 -1.5 13.2 -0.5 12.8 -0.4 13.1 -0.7
2026-04-11T21:50:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:50:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:50:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.826503
2026-04-11T21:50:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:50:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:50:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:50:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:50:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:50:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:50:25', tmtdew=-0.01244, humidity=100.045, cloud=0.0, wind=11.5229, temperature=11.7418, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:50:09.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:50:36.662 [DEBUG] [Thread-177340] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:50:36.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:50:36.760 [DEBUG] [Thread-177343] [transport.py] [_log()] starting thread (client mode): 0xae509bd0
2026-04-11T21:50:36.760 [DEBUG] [Thread-177343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:50:36.774 [DEBUG] [Thread-177343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:50:36.774 [INFO] [Thread-177343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] client lang: <none>
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] server lang: <none>
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] kex follows: False
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:50:36.782 [DEBUG] [Thread-177343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:50:36.783 [DEBUG] [Thread-177343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:50:36.783 [DEBUG] [Thread-177343] [transport.py] [_log()] Compression: none
2026-04-11T21:50:36.783 [DEBUG] [Thread-177343] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:50:36.844 [DEBUG] [Thread-177343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:50:36.844 [DEBUG] [Thread-177343] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:50:36.845 [DEBUG] [Thread-177343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:50:36.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:50:36.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:50:36.901 [DEBUG] [Thread-177343] [transport.py] [_log()] userauth is OK
2026-04-11T21:50:36.902 [DEBUG] [Thread-177343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:50:36.902 [DEBUG] [Thread-177343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:50:36.902 [DEBUG] [Thread-177343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:50:36.902 [DEBUG] [Thread-177343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:50:36.921 [INFO] [Thread-177343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:50:36.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:50:36.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:50:37.728 [DEBUG] [Thread-177343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:50:37.728 [DEBUG] [Thread-177343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:50:37.776 [DEBUG] [Thread-177343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:50:37.776 [DEBUG] [Thread-177343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:50:37.786 [DEBUG] [Thread-177343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:50:37.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:50:37.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-04-11T21:50:37.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:50:37.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:50:37.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:50:37.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:50:37.820 [DEBUG] [Thread-177343] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:50:42.986 [DEBUG] [Thread-177345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:50:58.040 [DEBUG] [Thread-177346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:07.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:51:07.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:51:07.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-04-11T21:51:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 50, 25), -0.01244, 100.045, 0.0, 11.5229, 11.7418, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:51:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:50:25
2026-04-11T21:51:09.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:51:09.666 [DEBUG] [Thread-177347] [transport.py] [_log()] starting thread (client mode): 0xb0fb7820
2026-04-11T21:51:09.666 [DEBUG] [Thread-177347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:51:09.686 [DEBUG] [Thread-177347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:51:09.686 [INFO] [Thread-177347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:51:09.689 [DEBUG] [Thread-177347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] client lang: <none>
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] server lang: <none>
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] kex follows: False
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:51:09.690 [DEBUG] [Thread-177347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:51:09.691 [DEBUG] [Thread-177347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:51:09.691 [DEBUG] [Thread-177347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:51:09.691 [DEBUG] [Thread-177347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:51:09.691 [DEBUG] [Thread-177347] [transport.py] [_log()] Compression: none
2026-04-11T21:51:09.691 [DEBUG] [Thread-177347] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:51:09.708 [DEBUG] [Thread-177347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:51:09.709 [DEBUG] [Thread-177347] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:51:09.710 [DEBUG] [Thread-177347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:51:09.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:51:09.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:51:09.712 [DEBUG] [Thread-177347] [transport.py] [_log()] userauth is OK
2026-04-11T21:51:09.713 [DEBUG] [Thread-177347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:51:09.713 [DEBUG] [Thread-177347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:51:09.713 [DEBUG] [Thread-177347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:51:09.713 [DEBUG] [Thread-177347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:51:09.727 [INFO] [Thread-177347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:51:09.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:51:10.359 [DEBUG] [Thread-177347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:51:10.359 [DEBUG] [Thread-177347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:51:10.360 [DEBUG] [Thread-177347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:51:10.400 [DEBUG] [Thread-177347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:51:10.400 [DEBUG] [Thread-177347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:51:10.403 [DEBUG] [Thread-177347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:51:10.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:51:10.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:51:10.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:51:10.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:51:10.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:51:10.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:51:10.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:51:10.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:51:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:51:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.826851 -999.00  +11.70  14.36     97  +11.30 1 3 1 3 1     0    0 0.37 -0.33 ----- 14.4 14.4 275.8 15.1 13.3 -1.6 13.2 -0.5 12.8 -0.8 13.1 -0.8
2026-04-11T21:51:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:51:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:51:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.826851
2026-04-11T21:51:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:51:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:51:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:51:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:51:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:51:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:50:25', tmtdew=-0.01244, humidity=100.045, cloud=0.0, wind=11.5229, temperature=11.7418, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:50:39.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:51:10.428 [DEBUG] [Thread-177347] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:51:10.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:51:10.520 [DEBUG] [Thread-177350] [transport.py] [_log()] starting thread (client mode): 0xb0fb6020
2026-04-11T21:51:10.521 [DEBUG] [Thread-177350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:51:10.535 [DEBUG] [Thread-177350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:51:10.536 [INFO] [Thread-177350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:51:10.543 [DEBUG] [Thread-177350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:10.544 [DEBUG] [Thread-177350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] client lang: <none>
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] server lang: <none>
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] kex follows: False
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:51:10.545 [DEBUG] [Thread-177350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:51:10.546 [DEBUG] [Thread-177350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:51:10.546 [DEBUG] [Thread-177350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:51:10.546 [DEBUG] [Thread-177350] [transport.py] [_log()] Compression: none
2026-04-11T21:51:10.546 [DEBUG] [Thread-177350] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:51:10.601 [DEBUG] [Thread-177350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:51:10.602 [DEBUG] [Thread-177350] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:51:10.602 [DEBUG] [Thread-177350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:51:10.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:51:10.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:51:10.662 [DEBUG] [Thread-177350] [transport.py] [_log()] userauth is OK
2026-04-11T21:51:10.662 [DEBUG] [Thread-177350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:51:10.662 [DEBUG] [Thread-177350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:51:10.663 [DEBUG] [Thread-177350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:51:10.663 [DEBUG] [Thread-177350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:51:10.691 [INFO] [Thread-177350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:51:10.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:51:10.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:51:11.503 [DEBUG] [Thread-177350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:51:11.503 [DEBUG] [Thread-177350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:51:11.551 [DEBUG] [Thread-177350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:51:11.552 [DEBUG] [Thread-177350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:51:11.560 [DEBUG] [Thread-177350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:51:11.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:51:11.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:51:11.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-04-11T21:51:11.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:51:11.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:51:11.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:51:11.600 [DEBUG] [Thread-177350] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:51:13.075 [DEBUG] [Thread-177352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:28.130 [DEBUG] [Thread-177353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:33.351 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:33.352 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:35.865 [DEBUG] [Thread-177354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:51:41.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:51:41.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-04-11T21:51:42.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 51, 35), -0.02487, 100.091, 0.0, 12.7044, 12.1506, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:51:42.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:51:35
2026-04-11T21:51:43.165 [DEBUG] [Thread-177355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:51:43.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:51:43.518 [DEBUG] [Thread-177356] [transport.py] [_log()] starting thread (client mode): 0xae515c60
2026-04-11T21:51:43.518 [DEBUG] [Thread-177356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:51:43.539 [DEBUG] [Thread-177356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:51:43.539 [INFO] [Thread-177356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:43.543 [DEBUG] [Thread-177356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] client lang: <none>
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] server lang: <none>
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] kex follows: False
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:51:43.544 [DEBUG] [Thread-177356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:51:43.545 [DEBUG] [Thread-177356] [transport.py] [_log()] Compression: none
2026-04-11T21:51:43.545 [DEBUG] [Thread-177356] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:51:43.565 [DEBUG] [Thread-177356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:51:43.565 [DEBUG] [Thread-177356] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:51:43.566 [DEBUG] [Thread-177356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:51:43.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:51:43.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:51:43.568 [DEBUG] [Thread-177356] [transport.py] [_log()] userauth is OK
2026-04-11T21:51:43.568 [DEBUG] [Thread-177356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:51:43.568 [DEBUG] [Thread-177356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:51:43.568 [DEBUG] [Thread-177356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:51:43.568 [DEBUG] [Thread-177356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:51:43.586 [INFO] [Thread-177356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:51:43.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:51:44.204 [DEBUG] [Thread-177356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:51:44.204 [DEBUG] [Thread-177356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:51:44.205 [DEBUG] [Thread-177356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:51:44.245 [DEBUG] [Thread-177356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:51:44.245 [DEBUG] [Thread-177356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:51:44.249 [DEBUG] [Thread-177356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:51:44.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:51:44.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:51:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:51:44.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:51:44.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:51:44.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:51:44.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:51:44.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:51:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:51:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.827198 -999.00  +11.70  12.09     97  +11.30 1 3 1 3 1     0    0 0.37 -0.14 ----- 12.1 12.1 281.0 14.9 13.3 -1.7 13.2 -0.5 12.7 -1.5 13.1 -0.9
2026-04-11T21:51:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:51:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:51:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.827198
2026-04-11T21:51:44.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:51:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:51:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:51:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:51:44.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:51:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:51:35', tmtdew=-0.02487, humidity=100.091, cloud=0.0, wind=12.7044, temperature=12.1506, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:51:09.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:51:44.276 [DEBUG] [Thread-177356] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:51:44.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:51:44.362 [DEBUG] [Thread-177359] [transport.py] [_log()] starting thread (client mode): 0xae516020
2026-04-11T21:51:44.362 [DEBUG] [Thread-177359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:51:44.376 [DEBUG] [Thread-177359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:51:44.377 [INFO] [Thread-177359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:51:44.384 [DEBUG] [Thread-177359] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:51:44.384 [DEBUG] [Thread-177359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] client lang: <none>
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] server lang: <none>
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] kex follows: False
2026-04-11T21:51:44.385 [DEBUG] [Thread-177359] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:51:44.386 [DEBUG] [Thread-177359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:51:44.386 [DEBUG] [Thread-177359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:51:44.386 [DEBUG] [Thread-177359] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:51:44.386 [DEBUG] [Thread-177359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:51:44.386 [DEBUG] [Thread-177359] [transport.py] [_log()] Compression: none
2026-04-11T21:51:44.386 [DEBUG] [Thread-177359] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:51:44.441 [DEBUG] [Thread-177359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:51:44.442 [DEBUG] [Thread-177359] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:51:44.442 [DEBUG] [Thread-177359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:51:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:51:44.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:51:44.501 [DEBUG] [Thread-177359] [transport.py] [_log()] userauth is OK
2026-04-11T21:51:44.501 [DEBUG] [Thread-177359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:51:44.501 [DEBUG] [Thread-177359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:51:44.501 [DEBUG] [Thread-177359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:51:44.501 [DEBUG] [Thread-177359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:51:44.520 [INFO] [Thread-177359] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:51:44.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:51:44.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:51:45.335 [DEBUG] [Thread-177359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:51:45.336 [DEBUG] [Thread-177359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:51:45.383 [DEBUG] [Thread-177359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:51:45.383 [DEBUG] [Thread-177359] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:51:45.392 [DEBUG] [Thread-177359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:51:45.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:51:45.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-04-11T21:51:45.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-04-11T21:51:45.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:51:45.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:51:45.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:51:45.429 [DEBUG] [Thread-177359] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:51:58.204 [DEBUG] [Thread-177361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:13.257 [DEBUG] [Thread-177362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:52:15.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:52:15.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-04-11T21:52:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 51, 35), -0.02487, 100.091, 0.0, 12.7044, 12.1506, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:52:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:51:35
2026-04-11T21:52:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:52:17.286 [DEBUG] [Thread-177363] [transport.py] [_log()] starting thread (client mode): 0xae514f10
2026-04-11T21:52:17.287 [DEBUG] [Thread-177363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:52:17.308 [DEBUG] [Thread-177363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:52:17.308 [INFO] [Thread-177363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] client lang: <none>
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] server lang: <none>
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] kex follows: False
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] Compression: none
2026-04-11T21:52:17.311 [DEBUG] [Thread-177363] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:52:17.328 [DEBUG] [Thread-177363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:52:17.328 [DEBUG] [Thread-177363] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:52:17.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:52:17.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:52:17.329 [DEBUG] [Thread-177363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:52:17.329 [DEBUG] [Thread-177363] [transport.py] [_log()] userauth is OK
2026-04-11T21:52:17.329 [DEBUG] [Thread-177363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:52:17.329 [DEBUG] [Thread-177363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:52:17.329 [DEBUG] [Thread-177363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:52:17.329 [DEBUG] [Thread-177363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:52:17.344 [INFO] [Thread-177363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:52:17.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:52:17.959 [DEBUG] [Thread-177363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:52:17.959 [DEBUG] [Thread-177363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:52:17.959 [DEBUG] [Thread-177363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:52:18.000 [DEBUG] [Thread-177363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:52:18.000 [DEBUG] [Thread-177363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:52:18.002 [DEBUG] [Thread-177363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:52:18.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:52:18.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:52:18.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:52:18.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:52:18.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:52:18.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:52:18.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:52:18.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:52:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:52:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.827545 -999.00  +11.70  12.94     97  +11.30 1 3 1 3 1     0    0 0.40 0.08 ----- 12.9 12.9 275.0 13.9 13.3 -1.5 13.3 -0.5 12.8 -0.5 13.1 -0.8
2026-04-11T21:52:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:52:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:52:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.827545
2026-04-11T21:52:18.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:52:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:52:18.025 [DEBUG] [Thread-177363] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:52:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:52:18.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:52:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:52:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:51:35', tmtdew=-0.02487, humidity=100.091, cloud=0.0, wind=12.7044, temperature=12.1506, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:51:39.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:52:18.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:52:18.119 [DEBUG] [Thread-177366] [transport.py] [_log()] starting thread (client mode): 0xb0fb43a0
2026-04-11T21:52:18.119 [DEBUG] [Thread-177366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:52:18.134 [DEBUG] [Thread-177366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:52:18.134 [INFO] [Thread-177366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:52:18.141 [DEBUG] [Thread-177366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:52:18.141 [DEBUG] [Thread-177366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] client lang: <none>
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] server lang: <none>
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] kex follows: False
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] Compression: none
2026-04-11T21:52:18.142 [DEBUG] [Thread-177366] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:52:18.201 [DEBUG] [Thread-177366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:52:18.202 [DEBUG] [Thread-177366] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:52:18.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:52:18.203 [DEBUG] [Thread-177366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:52:18.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:52:18.258 [DEBUG] [Thread-177366] [transport.py] [_log()] userauth is OK
2026-04-11T21:52:18.258 [DEBUG] [Thread-177366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:52:18.258 [DEBUG] [Thread-177366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:52:18.258 [DEBUG] [Thread-177366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:52:18.258 [DEBUG] [Thread-177366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:52:18.277 [INFO] [Thread-177366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:52:18.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:52:18.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:52:19.075 [DEBUG] [Thread-177366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:52:19.076 [DEBUG] [Thread-177366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:52:19.124 [DEBUG] [Thread-177366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:52:19.124 [DEBUG] [Thread-177366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:52:19.133 [DEBUG] [Thread-177366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:52:19.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:52:19.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-04-11T21:52:19.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-04-11T21:52:19.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:52:19.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:52:19.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:52:19.172 [DEBUG] [Thread-177366] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:52:28.292 [DEBUG] [Thread-177368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:33.558 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:33.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:35.950 [DEBUG] [Thread-177369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:43.344 [DEBUG] [Thread-177370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:52:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:52:49.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:52:49.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:52:50.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 52, 11), 0.035, 100.062, 0.0, 11.0642, 11.725, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:52:50.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:52:11
2026-04-11T21:52:50.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:52:51.074 [DEBUG] [Thread-177371] [transport.py] [_log()] starting thread (client mode): 0xb0fb6d10
2026-04-11T21:52:51.074 [DEBUG] [Thread-177371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:52:51.096 [DEBUG] [Thread-177371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:52:51.096 [INFO] [Thread-177371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:52:51.099 [DEBUG] [Thread-177371] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] client lang: <none>
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] server lang: <none>
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] kex follows: False
2026-04-11T21:52:51.100 [DEBUG] [Thread-177371] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:52:51.101 [DEBUG] [Thread-177371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:52:51.101 [DEBUG] [Thread-177371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:52:51.101 [DEBUG] [Thread-177371] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:52:51.101 [DEBUG] [Thread-177371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:52:51.101 [DEBUG] [Thread-177371] [transport.py] [_log()] Compression: none
2026-04-11T21:52:51.101 [DEBUG] [Thread-177371] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:52:51.120 [DEBUG] [Thread-177371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:52:51.120 [DEBUG] [Thread-177371] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:52:51.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:52:51.121 [DEBUG] [Thread-177371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:52:51.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:52:51.123 [DEBUG] [Thread-177371] [transport.py] [_log()] userauth is OK
2026-04-11T21:52:51.124 [DEBUG] [Thread-177371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:52:51.124 [DEBUG] [Thread-177371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:52:51.124 [DEBUG] [Thread-177371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:52:51.124 [DEBUG] [Thread-177371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:52:51.148 [INFO] [Thread-177371] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:52:51.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:52:51.806 [DEBUG] [Thread-177371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:52:51.806 [DEBUG] [Thread-177371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:52:51.806 [DEBUG] [Thread-177371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:52:51.847 [DEBUG] [Thread-177371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:52:51.848 [DEBUG] [Thread-177371] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:52:51.851 [DEBUG] [Thread-177371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:52:51.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:52:51.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:52:51.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:52:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:52:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:52:51.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:52:51.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:52:51.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.828240 -999.00  +11.70   8.83     97  +11.30 1 3 1 3 1     0    0 0.40 0.57 ----- 8.8 8.8 278.4 12.3 13.3 -1.6 13.2 -0.5 12.7 -1.1 13.1 -0.7
2026-04-11T21:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.828240
2026-04-11T21:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:52:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:52:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:52:51.878 [DEBUG] [Thread-177371] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:52:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:52:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:52:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:52:11', tmtdew=0.035, humidity=100.062, cloud=0.0, wind=11.0642, temperature=11.725, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:52:39.936', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:52:51.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:52:51.973 [DEBUG] [Thread-177374] [transport.py] [_log()] starting thread (client mode): 0xae516fb0
2026-04-11T21:52:51.973 [DEBUG] [Thread-177374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:52:51.988 [DEBUG] [Thread-177374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:52:51.988 [INFO] [Thread-177374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:52:51.995 [DEBUG] [Thread-177374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] client lang: <none>
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] server lang: <none>
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] kex follows: False
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] Compression: none
2026-04-11T21:52:51.996 [DEBUG] [Thread-177374] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:52:52.054 [DEBUG] [Thread-177374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:52:52.054 [DEBUG] [Thread-177374] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:52:52.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:52:52.056 [DEBUG] [Thread-177374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:52:52.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:52:52.110 [DEBUG] [Thread-177374] [transport.py] [_log()] userauth is OK
2026-04-11T21:52:52.111 [DEBUG] [Thread-177374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:52:52.111 [DEBUG] [Thread-177374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:52:52.112 [DEBUG] [Thread-177374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:52:52.112 [DEBUG] [Thread-177374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:52:52.132 [INFO] [Thread-177374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:52:52.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:52:52.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:52:52.954 [DEBUG] [Thread-177374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:52:52.954 [DEBUG] [Thread-177374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:52:53.003 [DEBUG] [Thread-177374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:52:53.004 [DEBUG] [Thread-177374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:52:53.013 [DEBUG] [Thread-177374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:52:53.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:52:53.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:52:53.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:52:53.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:52:53.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:52:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:52:53.050 [DEBUG] [Thread-177374] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:52:58.379 [DEBUG] [Thread-177376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:13.439 [DEBUG] [Thread-177377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:23.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:53:23.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:53:23.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-04-11T21:53:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 52, 46), -0.02999, 100.124, 0.0, 12.7397, 12.217, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:53:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:52:46
2026-04-11T21:53:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:53:24.930 [DEBUG] [Thread-177378] [transport.py] [_log()] starting thread (client mode): 0xa7911060
2026-04-11T21:53:24.930 [DEBUG] [Thread-177378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:53:24.951 [DEBUG] [Thread-177378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:53:24.951 [INFO] [Thread-177378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] client lang: <none>
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] server lang: <none>
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] kex follows: False
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] Compression: none
2026-04-11T21:53:24.954 [DEBUG] [Thread-177378] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:53:24.971 [DEBUG] [Thread-177378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:53:24.972 [DEBUG] [Thread-177378] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:53:24.972 [DEBUG] [Thread-177378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:53:24.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:53:24.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:53:24.974 [DEBUG] [Thread-177378] [transport.py] [_log()] userauth is OK
2026-04-11T21:53:24.975 [DEBUG] [Thread-177378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:53:24.975 [DEBUG] [Thread-177378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:53:24.975 [DEBUG] [Thread-177378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:53:24.975 [DEBUG] [Thread-177378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:53:25.010 [INFO] [Thread-177378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:53:25.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:53:25.635 [DEBUG] [Thread-177378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:53:25.635 [DEBUG] [Thread-177378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:53:25.635 [DEBUG] [Thread-177378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:53:25.677 [DEBUG] [Thread-177378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:53:25.677 [DEBUG] [Thread-177378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:53:25.681 [DEBUG] [Thread-177378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:53:25.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:53:25.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:53:25.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:53:25.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:53:25.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:53:25.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:53:25.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:53:25.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:53:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:53:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.828587 -999.00  +11.70  11.74     97  +11.30 1 3 1 3 1     0    0 0.41 0.83 ----- 11.7 11.7 273.8 14.2 13.2 -1.7 13.2 -0.5 12.7 -1.0 13.0 -0.8
2026-04-11T21:53:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:53:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:53:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.828587
2026-04-11T21:53:25.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:53:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:53:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:53:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:53:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:53:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:52:46', tmtdew=-0.02999, humidity=100.124, cloud=0.0, wind=12.7397, temperature=12.217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:53:09.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:53:25.707 [DEBUG] [Thread-177378] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:53:25.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:53:25.805 [DEBUG] [Thread-177381] [transport.py] [_log()] starting thread (client mode): 0xb0fb4100
2026-04-11T21:53:25.805 [DEBUG] [Thread-177381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:53:25.823 [DEBUG] [Thread-177381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:53:25.823 [INFO] [Thread-177381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:53:25.831 [DEBUG] [Thread-177381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:53:25.831 [DEBUG] [Thread-177381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:53:25.831 [DEBUG] [Thread-177381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:53:25.831 [DEBUG] [Thread-177381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:25.831 [DEBUG] [Thread-177381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] client lang: <none>
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] server lang: <none>
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] kex follows: False
2026-04-11T21:53:25.832 [DEBUG] [Thread-177381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:53:25.833 [DEBUG] [Thread-177381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:53:25.833 [DEBUG] [Thread-177381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:53:25.833 [DEBUG] [Thread-177381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:53:25.833 [DEBUG] [Thread-177381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:53:25.833 [DEBUG] [Thread-177381] [transport.py] [_log()] Compression: none
2026-04-11T21:53:25.833 [DEBUG] [Thread-177381] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:53:25.890 [DEBUG] [Thread-177381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:53:25.890 [DEBUG] [Thread-177381] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:53:25.891 [DEBUG] [Thread-177381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:53:25.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:53:25.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:53:25.946 [DEBUG] [Thread-177381] [transport.py] [_log()] userauth is OK
2026-04-11T21:53:25.946 [DEBUG] [Thread-177381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:53:25.947 [DEBUG] [Thread-177381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:53:25.947 [DEBUG] [Thread-177381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:53:25.947 [DEBUG] [Thread-177381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:53:25.965 [INFO] [Thread-177381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:53:25.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:53:25.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:53:26.763 [DEBUG] [Thread-177381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:53:26.763 [DEBUG] [Thread-177381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:53:26.811 [DEBUG] [Thread-177381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:53:26.811 [DEBUG] [Thread-177381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:53:26.821 [DEBUG] [Thread-177381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:53:26.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:53:26.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-04-11T21:53:26.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-04-11T21:53:26.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:53:26.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:53:26.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:53:26.859 [DEBUG] [Thread-177381] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:53:28.476 [DEBUG] [Thread-177383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:33.762 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:33.763 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:36.020 [DEBUG] [Thread-177384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:43.528 [DEBUG] [Thread-177385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:53:56.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:53:56.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-04-11T21:53:58.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 53, 21), -0.00992, 100.029, 0.0, 11.5229, 11.6753, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:53:58.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:53:21
2026-04-11T21:53:58.565 [DEBUG] [Thread-177386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:53:58.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:53:58.740 [DEBUG] [Thread-177387] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ea0
2026-04-11T21:53:58.740 [DEBUG] [Thread-177387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:53:58.759 [DEBUG] [Thread-177387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:53:58.759 [INFO] [Thread-177387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] client lang: <none>
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] server lang: <none>
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] kex follows: False
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:53:58.762 [DEBUG] [Thread-177387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:53:58.763 [DEBUG] [Thread-177387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:53:58.763 [DEBUG] [Thread-177387] [transport.py] [_log()] Compression: none
2026-04-11T21:53:58.763 [DEBUG] [Thread-177387] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:53:58.779 [DEBUG] [Thread-177387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:53:58.780 [DEBUG] [Thread-177387] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:53:58.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:53:58.781 [DEBUG] [Thread-177387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:53:58.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:53:58.783 [DEBUG] [Thread-177387] [transport.py] [_log()] userauth is OK
2026-04-11T21:53:58.783 [DEBUG] [Thread-177387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:53:58.783 [DEBUG] [Thread-177387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:53:58.783 [DEBUG] [Thread-177387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:53:58.783 [DEBUG] [Thread-177387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:53:58.801 [INFO] [Thread-177387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:53:58.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:53:59.392 [DEBUG] [Thread-177387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:53:59.392 [DEBUG] [Thread-177387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:53:59.393 [DEBUG] [Thread-177387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:53:59.433 [DEBUG] [Thread-177387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:53:59.433 [DEBUG] [Thread-177387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:53:59.436 [DEBUG] [Thread-177387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:53:59.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:53:59.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:53:59.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:53:59.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:53:59.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:53:59.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:53:59.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:53:59.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:53:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:53:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.828934 -999.00  +11.70  12.47     97  +11.30 1 3 1 3 1     0    0 0.40 0.70 ----- 12.5 12.5 271.8 15.1 13.2 -1.6 13.2 -0.4 12.7 -0.7 13.1 -0.9
2026-04-11T21:53:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:53:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:53:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.828934
2026-04-11T21:53:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:53:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:53:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:53:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:53:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:53:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:53:21', tmtdew=-0.00992, humidity=100.029, cloud=0.0, wind=11.5229, temperature=11.6753, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:53:39.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:53:59.459 [DEBUG] [Thread-177387] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:53:59.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:53:59.551 [DEBUG] [Thread-177390] [transport.py] [_log()] starting thread (client mode): 0xb0fb4d30
2026-04-11T21:53:59.551 [DEBUG] [Thread-177390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:53:59.566 [DEBUG] [Thread-177390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:53:59.566 [INFO] [Thread-177390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] client lang: <none>
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] server lang: <none>
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] kex follows: False
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:53:59.574 [DEBUG] [Thread-177390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:53:59.575 [DEBUG] [Thread-177390] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:53:59.575 [DEBUG] [Thread-177390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:53:59.575 [DEBUG] [Thread-177390] [transport.py] [_log()] Compression: none
2026-04-11T21:53:59.575 [DEBUG] [Thread-177390] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:53:59.632 [DEBUG] [Thread-177390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:53:59.632 [DEBUG] [Thread-177390] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:53:59.632 [DEBUG] [Thread-177390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:53:59.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:53:59.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:53:59.689 [DEBUG] [Thread-177390] [transport.py] [_log()] userauth is OK
2026-04-11T21:53:59.689 [DEBUG] [Thread-177390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:53:59.689 [DEBUG] [Thread-177390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:53:59.689 [DEBUG] [Thread-177390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:53:59.689 [DEBUG] [Thread-177390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:53:59.703 [INFO] [Thread-177390] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:53: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-04-11T21:53:59.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:54:00.515 [DEBUG] [Thread-177390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:54:00.515 [DEBUG] [Thread-177390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:54:00.562 [DEBUG] [Thread-177390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:54:00.562 [DEBUG] [Thread-177390] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:54:00.571 [DEBUG] [Thread-177390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:54:00.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:54:00.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:54:00.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-04-11T21:54:00.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:54:00.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:54:00.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:54:00.603 [DEBUG] [Thread-177390] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:54:13.601 [DEBUG] [Thread-177392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:54:28.656 [DEBUG] [Thread-177393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:54:30.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:54:30.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:54:30.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-04-11T21:54:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 53, 57), 0.03756, 100.046, 0.0, 10.6585, 11.7253, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:54:31.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:53:57
2026-04-11T21:54:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:54:32.438 [DEBUG] [Thread-177394] [transport.py] [_log()] starting thread (client mode): 0xa7952e60
2026-04-11T21:54:32.438 [DEBUG] [Thread-177394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:54:32.458 [DEBUG] [Thread-177394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:54:32.458 [INFO] [Thread-177394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] client lang: <none>
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] server lang: <none>
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] kex follows: False
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] Compression: none
2026-04-11T21:54:32.462 [DEBUG] [Thread-177394] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:54:32.479 [DEBUG] [Thread-177394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:54:32.479 [DEBUG] [Thread-177394] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:54:32.480 [DEBUG] [Thread-177394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:54:32.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:54:32.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:54:32.482 [DEBUG] [Thread-177394] [transport.py] [_log()] userauth is OK
2026-04-11T21:54:32.483 [DEBUG] [Thread-177394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:54:32.483 [DEBUG] [Thread-177394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:54:32.483 [DEBUG] [Thread-177394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:54:32.483 [DEBUG] [Thread-177394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:54:32.507 [INFO] [Thread-177394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:54:32.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:54:33.140 [DEBUG] [Thread-177394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:54:33.140 [DEBUG] [Thread-177394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:54:33.141 [DEBUG] [Thread-177394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:54:33.181 [DEBUG] [Thread-177394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:54:33.181 [DEBUG] [Thread-177394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:54:33.185 [DEBUG] [Thread-177394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:54:33.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:54:33.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:54:33.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:54:33.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:54:33.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:54:33.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:54:33.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.829282 -999.00  +11.70  10.81     97  +11.30 1 3 1 3 1     0    0 0.40 0.83 ----- 10.8 10.8 278.2 13.2 13.2 -1.7 13.2 -0.5 12.7 -1.2 13.0 -0.8
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.829282
2026-04-11T21:54:33.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:54:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:54:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:54:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:54:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:54:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:53:57', tmtdew=0.03756, humidity=100.046, cloud=0.0, wind=10.6585, temperature=11.7253, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:54:09.965', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:54:33.215 [DEBUG] [Thread-177394] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:54:33.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:54:33.300 [DEBUG] [Thread-177397] [transport.py] [_log()] starting thread (client mode): 0xa7952440
2026-04-11T21:54:33.300 [DEBUG] [Thread-177397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:54:33.318 [DEBUG] [Thread-177397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:54:33.318 [INFO] [Thread-177397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:54:33.325 [DEBUG] [Thread-177397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:54:33.325 [DEBUG] [Thread-177397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] client lang: <none>
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] server lang: <none>
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] kex follows: False
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] Compression: none
2026-04-11T21:54:33.326 [DEBUG] [Thread-177397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:54:33.385 [DEBUG] [Thread-177397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:54:33.385 [DEBUG] [Thread-177397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:54:33.386 [DEBUG] [Thread-177397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:54:33.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:54:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:54:33.441 [DEBUG] [Thread-177397] [transport.py] [_log()] userauth is OK
2026-04-11T21:54:33.441 [DEBUG] [Thread-177397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:54:33.442 [DEBUG] [Thread-177397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:54:33.442 [DEBUG] [Thread-177397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:54:33.442 [DEBUG] [Thread-177397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:54:33.461 [INFO] [Thread-177397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:54:33.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:54:33.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:54:33.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:54:33.971 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:54:34.259 [DEBUG] [Thread-177397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:54:34.260 [DEBUG] [Thread-177397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:54:34.308 [DEBUG] [Thread-177397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:54:34.308 [DEBUG] [Thread-177397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:54:34.318 [DEBUG] [Thread-177397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:54:34.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:54:34.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-04-11T21:54:34.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-04-11T21:54:34.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:54:34.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:54:34.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:54:34.355 [DEBUG] [Thread-177397] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:54:36.092 [DEBUG] [Thread-177399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:54:43.693 [DEBUG] [Thread-177400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:54:58.750 [DEBUG] [Thread-177401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:04.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:55:04.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:55:04.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-04-11T21:55:05.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 54, 32), 0.0401, 100.029, 0.0, 11.9815, 11.7087, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:55:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:54:32
2026-04-11T21:55:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:55:06.183 [DEBUG] [Thread-177402] [transport.py] [_log()] starting thread (client mode): 0xa79111e0
2026-04-11T21:55:06.183 [DEBUG] [Thread-177402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:55:06.204 [DEBUG] [Thread-177402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:55:06.204 [INFO] [Thread-177402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] client lang: <none>
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] server lang: <none>
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] kex follows: False
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] Compression: none
2026-04-11T21:55:06.208 [DEBUG] [Thread-177402] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:55:06.225 [DEBUG] [Thread-177402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:55:06.225 [DEBUG] [Thread-177402] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:55:06.225 [DEBUG] [Thread-177402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:55:06.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:55:06.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:55:06.227 [DEBUG] [Thread-177402] [transport.py] [_log()] userauth is OK
2026-04-11T21:55:06.228 [DEBUG] [Thread-177402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:55:06.228 [DEBUG] [Thread-177402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:55:06.228 [DEBUG] [Thread-177402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:55:06.228 [DEBUG] [Thread-177402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:55:06.252 [INFO] [Thread-177402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:55:06.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:55:07.220 [DEBUG] [Thread-177402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:55:07.220 [DEBUG] [Thread-177402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:55:07.221 [DEBUG] [Thread-177402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:55:07.261 [DEBUG] [Thread-177402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:55:07.261 [DEBUG] [Thread-177402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:55:07.265 [DEBUG] [Thread-177402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:55:07.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:55:07.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:55:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:55:07.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:55:07.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:55:07.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:55:07.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:55:07.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:55:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:55:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.829628 -999.00  +11.70  11.55     97  +11.30 1 3 1 3 1     0    0 0.40 0.74 ----- 11.6 11.6 271.0 14.5 13.2 -1.4 13.1 -0.3 12.7 -0.9 13.0 -0.7
2026-04-11T21:55:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:55:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:55:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.829628
2026-04-11T21:55:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:55:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:55:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:55:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:55:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:55:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:54:32', tmtdew=0.0401, humidity=100.029, cloud=0.0, wind=11.9815, temperature=11.7087, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:54:39.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:55:07.295 [DEBUG] [Thread-177402] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:55:07.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:55:07.385 [DEBUG] [Thread-177405] [transport.py] [_log()] starting thread (client mode): 0xb0fb5fc0
2026-04-11T21:55:07.385 [DEBUG] [Thread-177405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:55:07.400 [DEBUG] [Thread-177405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:55:07.400 [INFO] [Thread-177405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:07.408 [DEBUG] [Thread-177405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] client lang: <none>
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] server lang: <none>
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] kex follows: False
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] Compression: none
2026-04-11T21:55:07.409 [DEBUG] [Thread-177405] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:55:07.471 [DEBUG] [Thread-177405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:55:07.472 [DEBUG] [Thread-177405] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:55:07.472 [DEBUG] [Thread-177405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:55:07.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:55:07.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:55:07.530 [DEBUG] [Thread-177405] [transport.py] [_log()] userauth is OK
2026-04-11T21:55:07.530 [DEBUG] [Thread-177405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:55:07.531 [DEBUG] [Thread-177405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:55:07.531 [DEBUG] [Thread-177405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:55:07.531 [DEBUG] [Thread-177405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:55:07.549 [INFO] [Thread-177405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:55:07.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:55:07.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:55:08.379 [DEBUG] [Thread-177405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:55:08.379 [DEBUG] [Thread-177405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:55:08.427 [DEBUG] [Thread-177405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:55:08.427 [DEBUG] [Thread-177405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:55:08.437 [DEBUG] [Thread-177405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:55:08.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:55:08.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-04-11T21:55:08.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:55:08.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:55:08.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:55:08.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:55:08.473 [DEBUG] [Thread-177405] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:55:13.788 [DEBUG] [Thread-177407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:28.842 [DEBUG] [Thread-177408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:34.183 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:34.185 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:36.184 [DEBUG] [Thread-177409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:38.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:55:38.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:55:38.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-04-11T21:55:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 55, 8), 0.037595, 100.046, 0.0, 10.1822, 11.6922, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:55:39.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:55:08
2026-04-11T21:55:40.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:55:40.346 [DEBUG] [Thread-177410] [transport.py] [_log()] starting thread (client mode): 0xb0fb64d0
2026-04-11T21:55:40.346 [DEBUG] [Thread-177410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:55:40.367 [DEBUG] [Thread-177410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:55:40.367 [INFO] [Thread-177410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] client lang: <none>
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] server lang: <none>
2026-04-11T21:55:40.371 [DEBUG] [Thread-177410] [transport.py] [_log()] kex follows: False
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] Compression: none
2026-04-11T21:55:40.372 [DEBUG] [Thread-177410] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:55:40.389 [DEBUG] [Thread-177410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:55:40.390 [DEBUG] [Thread-177410] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:55:40.390 [DEBUG] [Thread-177410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:55:40.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:55:40.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:55:40.393 [DEBUG] [Thread-177410] [transport.py] [_log()] userauth is OK
2026-04-11T21:55:40.393 [DEBUG] [Thread-177410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:55:40.393 [DEBUG] [Thread-177410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:55:40.393 [DEBUG] [Thread-177410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:55:40.393 [DEBUG] [Thread-177410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:55:40.418 [INFO] [Thread-177410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:55:40.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:55:41.025 [DEBUG] [Thread-177410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:55:41.026 [DEBUG] [Thread-177410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:55:41.026 [DEBUG] [Thread-177410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:55:41.066 [DEBUG] [Thread-177410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:55:41.066 [DEBUG] [Thread-177410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:55:41.070 [DEBUG] [Thread-177410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:55:41.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:55:41.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:55:41.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:55:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:55:41.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:55:41.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:55:41.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:55:41.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:55:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:55:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.829976 -999.00  +11.70   9.48     97  +11.40 1 3 1 3 1     0    0 0.39 0.55 ----- 9.5 9.5 273.6 14.0 13.2 -1.2 13.2 -0.3 12.7 -0.4 13.1 -0.7
2026-04-11T21:55:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:55:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:55:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.829976
2026-04-11T21:55:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:55:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:55:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:55:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:55:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:55:41.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:55:08', tmtdew=0.037595, humidity=100.046, cloud=0.0, wind=10.1822, temperature=11.6922, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:55:09.926', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:55:41.097 [DEBUG] [Thread-177410] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:55:41.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:55:41.190 [DEBUG] [Thread-177413] [transport.py] [_log()] starting thread (client mode): 0xa79115d0
2026-04-11T21:55:41.190 [DEBUG] [Thread-177413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:55:41.204 [DEBUG] [Thread-177413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:55:41.205 [INFO] [Thread-177413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:55:41.212 [DEBUG] [Thread-177413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:55:41.212 [DEBUG] [Thread-177413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:55:41.212 [DEBUG] [Thread-177413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:55:41.212 [DEBUG] [Thread-177413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] client lang: <none>
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] server lang: <none>
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] kex follows: False
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] Compression: none
2026-04-11T21:55:41.213 [DEBUG] [Thread-177413] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:55:41.270 [DEBUG] [Thread-177413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:55:41.270 [DEBUG] [Thread-177413] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:55:41.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:55:41.272 [DEBUG] [Thread-177413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:55:41.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:55:41.326 [DEBUG] [Thread-177413] [transport.py] [_log()] userauth is OK
2026-04-11T21:55:41.326 [DEBUG] [Thread-177413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:55:41.327 [DEBUG] [Thread-177413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:55:41.327 [DEBUG] [Thread-177413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:55:41.327 [DEBUG] [Thread-177413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:55:41.350 [INFO] [Thread-177413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:55:41.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:55:41.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:55:42.178 [DEBUG] [Thread-177413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:55:42.178 [DEBUG] [Thread-177413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:55:42.226 [DEBUG] [Thread-177413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:55:42.226 [DEBUG] [Thread-177413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:55:42.235 [DEBUG] [Thread-177413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:55:42.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:55:42.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-04-11T21:55:42.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-04-11T21:55:42.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:55:42.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:55:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:55:42.272 [DEBUG] [Thread-177413] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:55:43.879 [DEBUG] [Thread-177415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:55:58.934 [DEBUG] [Thread-177416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:12.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:56:12.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:56:12.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-04-11T21:56:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 55, 43), -0.02991, 100.124, 0.0, 8.57664, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:56:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:55:43
2026-04-11T21:56:13.971 [DEBUG] [Thread-177417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:56:14.169 [DEBUG] [Thread-177418] [transport.py] [_log()] starting thread (client mode): 0xa7953340
2026-04-11T21:56:14.169 [DEBUG] [Thread-177418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:56:14.190 [DEBUG] [Thread-177418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:56:14.190 [INFO] [Thread-177418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] client lang: <none>
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] server lang: <none>
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] kex follows: False
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] Compression: none
2026-04-11T21:56:14.193 [DEBUG] [Thread-177418] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:56:14.202 [DEBUG] [Thread-177418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:56:14.202 [DEBUG] [Thread-177418] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:56:14.203 [DEBUG] [Thread-177418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:56:14.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:56:14.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:56:14.205 [DEBUG] [Thread-177418] [transport.py] [_log()] userauth is OK
2026-04-11T21:56:14.205 [DEBUG] [Thread-177418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:56:14.205 [DEBUG] [Thread-177418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:56:14.205 [DEBUG] [Thread-177418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:56:14.205 [DEBUG] [Thread-177418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:56:14.231 [INFO] [Thread-177418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:56:14.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:56:14.835 [DEBUG] [Thread-177418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:56:14.835 [DEBUG] [Thread-177418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:56:14.835 [DEBUG] [Thread-177418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:56:14.876 [DEBUG] [Thread-177418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:56:14.876 [DEBUG] [Thread-177418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:56:14.879 [DEBUG] [Thread-177418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:56:14.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:56:14.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:56:14.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:56:14.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:56:14.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:56:14.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:56:14.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:56:14.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:56:14.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:56:14.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.830323 -999.00  +11.80   6.26     97  +11.40 1 3 1 3 1     0    0 0.40 0.40 ----- 6.3 6.3 266.5 11.2 13.3 -1.5 13.2 -0.3 12.8 -0.7 13.1 -0.7
2026-04-11T21:56:14.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:56:14.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:56:14.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.830323
2026-04-11T21:56:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:56:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:56:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:56:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:56:14.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:56:14.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:55:43', tmtdew=-0.02991, humidity=100.124, cloud=0.0, wind=8.57664, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:55:39.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:56:14.907 [DEBUG] [Thread-177418] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:56:14.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:56:15.004 [DEBUG] [Thread-177421] [transport.py] [_log()] starting thread (client mode): 0xa7951930
2026-04-11T21:56:15.004 [DEBUG] [Thread-177421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:56:15.022 [DEBUG] [Thread-177421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:56:15.022 [INFO] [Thread-177421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:15.033 [DEBUG] [Thread-177421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] client lang: <none>
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] server lang: <none>
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] kex follows: False
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] Compression: none
2026-04-11T21:56:15.034 [DEBUG] [Thread-177421] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:56:15.091 [DEBUG] [Thread-177421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:56:15.092 [DEBUG] [Thread-177421] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:56:15.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:56:15.093 [DEBUG] [Thread-177421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:56:15.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:56:15.155 [DEBUG] [Thread-177421] [transport.py] [_log()] userauth is OK
2026-04-11T21:56:15.155 [DEBUG] [Thread-177421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:56:15.156 [DEBUG] [Thread-177421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:56:15.156 [DEBUG] [Thread-177421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:56:15.156 [DEBUG] [Thread-177421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:56:15.174 [INFO] [Thread-177421] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:56:15.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:56:15.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:56:15.978 [DEBUG] [Thread-177421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:56:15.978 [DEBUG] [Thread-177421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:56:16.026 [DEBUG] [Thread-177421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:56:16.027 [DEBUG] [Thread-177421] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:56:16.036 [DEBUG] [Thread-177421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:56:16.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:56:16.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-04-11T21:56:16.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-04-11T21:56:16.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:56:16.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:56:16.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:56:16.073 [DEBUG] [Thread-177421] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:56:29.008 [DEBUG] [Thread-177423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:34.386 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:34.387 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:36.241 [DEBUG] [Thread-177424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:44.059 [DEBUG] [Thread-177425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:56:46.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:56:46.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:56:46.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:56:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 56, 18), -0.004855, 99.9958, 0.0, 11.3818, 11.6422, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:56:47.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:56:18
2026-04-11T21:56:47.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:56:47.895 [DEBUG] [Thread-177426] [transport.py] [_log()] starting thread (client mode): 0xb0fb4370
2026-04-11T21:56:47.895 [DEBUG] [Thread-177426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:56:47.915 [DEBUG] [Thread-177426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:56:47.915 [INFO] [Thread-177426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:56:47.919 [DEBUG] [Thread-177426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] client lang: <none>
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] server lang: <none>
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] kex follows: False
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] Compression: none
2026-04-11T21:56:47.920 [DEBUG] [Thread-177426] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:56:47.938 [DEBUG] [Thread-177426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:56:47.939 [DEBUG] [Thread-177426] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:56:47.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:56:47.940 [DEBUG] [Thread-177426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:56:47.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:56:47.942 [DEBUG] [Thread-177426] [transport.py] [_log()] userauth is OK
2026-04-11T21:56:47.942 [DEBUG] [Thread-177426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:56:47.942 [DEBUG] [Thread-177426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:56:47.943 [DEBUG] [Thread-177426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:56:47.943 [DEBUG] [Thread-177426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:56:47.966 [INFO] [Thread-177426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:56:47.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:56:48.627 [DEBUG] [Thread-177426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:56:48.627 [DEBUG] [Thread-177426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:56:48.628 [DEBUG] [Thread-177426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:56:48.668 [DEBUG] [Thread-177426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:56:48.668 [DEBUG] [Thread-177426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:56:48.671 [DEBUG] [Thread-177426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:56:48.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:56:48.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:56:48.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:56:48.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:56:48.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:56:48.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:56:48.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:56:48.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:56:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:56:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.830670 -999.00  +11.80   8.32     97  +11.40 1 3 1 3 1     0    0 0.40 0.40 ----- 8.3 8.3 273.8 10.9 13.3 -1.6 13.2 -0.3 12.8 -0.5 13.1 -0.8
2026-04-11T21:56:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:56:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:56:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.830670
2026-04-11T21:56:48.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:56:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:56:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:56:48.693 [DEBUG] [Thread-177426] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:56:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:56:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:56:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:56:18', tmtdew=-0.004855, humidity=99.9958, cloud=0.0, wind=11.3818, temperature=11.6422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:56:09.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:56:48.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:56:48.787 [DEBUG] [Thread-177429] [transport.py] [_log()] starting thread (client mode): 0xb0f57b50
2026-04-11T21:56:48.787 [DEBUG] [Thread-177429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:56:48.801 [DEBUG] [Thread-177429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:56:48.801 [INFO] [Thread-177429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:56:48.809 [DEBUG] [Thread-177429] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:56:48.809 [DEBUG] [Thread-177429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] client lang: <none>
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] server lang: <none>
2026-04-11T21:56:48.810 [DEBUG] [Thread-177429] [transport.py] [_log()] kex follows: False
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] Compression: none
2026-04-11T21:56:48.811 [DEBUG] [Thread-177429] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:56:48.866 [DEBUG] [Thread-177429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:56:48.867 [DEBUG] [Thread-177429] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:56:48.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:56:48.869 [DEBUG] [Thread-177429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:56:48.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:56:48.922 [DEBUG] [Thread-177429] [transport.py] [_log()] userauth is OK
2026-04-11T21:56:48.923 [DEBUG] [Thread-177429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:56:48.923 [DEBUG] [Thread-177429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:56:48.923 [DEBUG] [Thread-177429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:56:48.924 [DEBUG] [Thread-177429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:56:48.943 [INFO] [Thread-177429] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:56:48.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:56:48.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:56:49.746 [DEBUG] [Thread-177429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:56:49.746 [DEBUG] [Thread-177429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:56:49.793 [DEBUG] [Thread-177429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:56:49.794 [DEBUG] [Thread-177429] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:56:49.803 [DEBUG] [Thread-177429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:56:49.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:56:49.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-04-11T21:56:49.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:56:49.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:56:49.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:56:49.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:56:49.836 [DEBUG] [Thread-177429] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:56:59.095 [DEBUG] [Thread-177431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:14.147 [DEBUG] [Thread-177432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:19.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:57:19.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:57:19.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-04-11T21:57:21.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 56, 54), -0.02489, 100.091, 0.0, 12.775, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:57:21.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:56:54
2026-04-11T21:57:21.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:57:21.766 [DEBUG] [Thread-177433] [transport.py] [_log()] starting thread (client mode): 0xae5f1330
2026-04-11T21:57:21.766 [DEBUG] [Thread-177433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:57:21.787 [DEBUG] [Thread-177433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:57:21.787 [INFO] [Thread-177433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:57:21.790 [DEBUG] [Thread-177433] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:57:21.790 [DEBUG] [Thread-177433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:57:21.790 [DEBUG] [Thread-177433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] client lang: <none>
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] server lang: <none>
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] kex follows: False
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:57:21.791 [DEBUG] [Thread-177433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:57:21.792 [DEBUG] [Thread-177433] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:57:21.792 [DEBUG] [Thread-177433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:57:21.792 [DEBUG] [Thread-177433] [transport.py] [_log()] Compression: none
2026-04-11T21:57:21.792 [DEBUG] [Thread-177433] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:57:21.811 [DEBUG] [Thread-177433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:57:21.812 [DEBUG] [Thread-177433] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:57:21.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:57:21.813 [DEBUG] [Thread-177433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:57:21.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:57:21.816 [DEBUG] [Thread-177433] [transport.py] [_log()] userauth is OK
2026-04-11T21:57:21.816 [DEBUG] [Thread-177433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:57:21.816 [DEBUG] [Thread-177433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:57:21.816 [DEBUG] [Thread-177433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:57:21.816 [DEBUG] [Thread-177433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:57:21.841 [INFO] [Thread-177433] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:57:21.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:57:22.493 [DEBUG] [Thread-177433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:57:22.493 [DEBUG] [Thread-177433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:57:22.494 [DEBUG] [Thread-177433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:57:22.534 [DEBUG] [Thread-177433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:57:22.535 [DEBUG] [Thread-177433] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:57:22.538 [DEBUG] [Thread-177433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:57:22.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:57:22.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:57:22.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:57:22.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:57:22.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:57:22.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:57:22.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:57:22.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:57:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:57:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.831018 -999.00  +11.70   7.89     97  +11.40 1 3 1 3 1     0    0 0.39 0.37 ----- 7.9 7.9 268.5 12.2 13.3 -1.6 13.2 -0.3 12.8 -0.3 13.1 -0.8
2026-04-11T21:57:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:57:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:57:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.831018
2026-04-11T21:57:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:57:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:57:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:57:22.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:57:22.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:57:22.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:56:54', tmtdew=-0.02489, humidity=100.091, cloud=0.0, wind=12.775, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:56:39.955', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:57:22.567 [DEBUG] [Thread-177433] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:57:22.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:57:22.660 [DEBUG] [Thread-177436] [transport.py] [_log()] starting thread (client mode): 0xb0fb6a70
2026-04-11T21:57:22.660 [DEBUG] [Thread-177436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:57:22.675 [DEBUG] [Thread-177436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:57:22.676 [INFO] [Thread-177436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:57:22.683 [DEBUG] [Thread-177436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:22.684 [DEBUG] [Thread-177436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] client lang: <none>
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] server lang: <none>
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] kex follows: False
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] Compression: none
2026-04-11T21:57:22.685 [DEBUG] [Thread-177436] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:57:22.742 [DEBUG] [Thread-177436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:57:22.743 [DEBUG] [Thread-177436] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:57:22.743 [DEBUG] [Thread-177436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:57:22.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:57:22.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:57:22.802 [DEBUG] [Thread-177436] [transport.py] [_log()] userauth is OK
2026-04-11T21:57:22.802 [DEBUG] [Thread-177436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:57:22.803 [DEBUG] [Thread-177436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:57:22.803 [DEBUG] [Thread-177436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:57:22.803 [DEBUG] [Thread-177436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:57:22.829 [INFO] [Thread-177436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:57:22.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:57:22.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:57:23.646 [DEBUG] [Thread-177436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:57:23.647 [DEBUG] [Thread-177436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:57:23.694 [DEBUG] [Thread-177436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:57:23.694 [DEBUG] [Thread-177436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:57:23.703 [DEBUG] [Thread-177436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:57:23.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:57:23.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-04-11T21:57: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-04-11T21:57:23.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:57:23.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:57:23.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:57:23.740 [DEBUG] [Thread-177436] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:57:29.181 [DEBUG] [Thread-177438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:34.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:34.597 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:36.318 [DEBUG] [Thread-177439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:44.232 [DEBUG] [Thread-177440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:57:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:57:53.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:57:53.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-04-11T21:57:55.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 57, 30), 0.040125, 100.029, 0.0, 10.0933, 11.6756, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:57:55.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:57:30
2026-04-11T21:57:55.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:57:55.575 [DEBUG] [Thread-177441] [transport.py] [_log()] starting thread (client mode): 0xae5143d0
2026-04-11T21:57:55.575 [DEBUG] [Thread-177441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:57:55.596 [DEBUG] [Thread-177441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:57:55.596 [INFO] [Thread-177441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:57:55.599 [DEBUG] [Thread-177441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] client lang: <none>
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] server lang: <none>
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] kex follows: False
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] Compression: none
2026-04-11T21:57:55.600 [DEBUG] [Thread-177441] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:57:55.619 [DEBUG] [Thread-177441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:57:55.620 [DEBUG] [Thread-177441] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:57:55.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:57:55.621 [DEBUG] [Thread-177441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:57:55.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:57:55.623 [DEBUG] [Thread-177441] [transport.py] [_log()] userauth is OK
2026-04-11T21:57:55.624 [DEBUG] [Thread-177441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:57:55.624 [DEBUG] [Thread-177441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:57:55.624 [DEBUG] [Thread-177441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:57:55.624 [DEBUG] [Thread-177441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:57:55.659 [INFO] [Thread-177441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:57:55.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:57:56.280 [DEBUG] [Thread-177441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:57:56.281 [DEBUG] [Thread-177441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:57:56.281 [DEBUG] [Thread-177441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:57:56.322 [DEBUG] [Thread-177441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:57:56.323 [DEBUG] [Thread-177441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:57:56.326 [DEBUG] [Thread-177441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:57:56.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:57:56.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:57:56.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:57:56.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:57:56.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:57:56.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:57:56.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:57:56.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:57:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:57:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.831712 -999.00  +11.70   8.69     97  +11.40 1 3 1 3 1     0    0 0.40 0.51 ----- 8.7 8.7 272.4 9.9 13.3 -1.4 13.2 -0.3 12.8 -0.2 13.1 -0.8
2026-04-11T21:57:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:57:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:57:56.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.831712
2026-04-11T21:57:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:57:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:57:56.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:57:56.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:57:56.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:57:56.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:57:30', tmtdew=0.040125, humidity=100.029, cloud=0.0, wind=10.0933, temperature=11.6756, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:57:39.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:57:56.355 [DEBUG] [Thread-177441] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:57:56.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:57:56.447 [DEBUG] [Thread-177444] [transport.py] [_log()] starting thread (client mode): 0xa7910df0
2026-04-11T21:57:56.447 [DEBUG] [Thread-177444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:57:56.462 [DEBUG] [Thread-177444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:57:56.462 [INFO] [Thread-177444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:57:56.470 [DEBUG] [Thread-177444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] client lang: <none>
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] server lang: <none>
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] kex follows: False
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] Compression: none
2026-04-11T21:57:56.471 [DEBUG] [Thread-177444] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:57:56.530 [DEBUG] [Thread-177444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:57:56.531 [DEBUG] [Thread-177444] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:57:56.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:57:56.532 [DEBUG] [Thread-177444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:57:56.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:57:56.586 [DEBUG] [Thread-177444] [transport.py] [_log()] userauth is OK
2026-04-11T21:57:56.587 [DEBUG] [Thread-177444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:57:56.587 [DEBUG] [Thread-177444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:57:56.587 [DEBUG] [Thread-177444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:57:56.587 [DEBUG] [Thread-177444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:57:56.606 [INFO] [Thread-177444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:57:56.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:57:56.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:57:57.427 [DEBUG] [Thread-177444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:57:57.428 [DEBUG] [Thread-177444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:57:57.476 [DEBUG] [Thread-177444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:57:57.476 [DEBUG] [Thread-177444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:57:57.485 [DEBUG] [Thread-177444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:57:57.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:57:57.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-04-11T21:57:57.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:57:57.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:57:57.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:57:57.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:57:57.522 [DEBUG] [Thread-177444] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:57:59.271 [DEBUG] [Thread-177446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:14.324 [DEBUG] [Thread-177447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:27.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:58:27.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:58:27.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-04-11T21:58:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 58, 5), 0.040125, 100.029, 0.0, 9.81108, 11.6756, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:58:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:58:05
2026-04-11T21:58:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:58:29.361 [DEBUG] [Thread-177448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:29.374 [DEBUG] [Thread-177449] [transport.py] [_log()] starting thread (client mode): 0xb0f57370
2026-04-11T21:58:29.374 [DEBUG] [Thread-177449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:58:29.393 [DEBUG] [Thread-177449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:58:29.394 [INFO] [Thread-177449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:58:29.397 [DEBUG] [Thread-177449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] client lang: <none>
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] server lang: <none>
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] kex follows: False
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] Compression: none
2026-04-11T21:58:29.398 [DEBUG] [Thread-177449] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:58:29.418 [DEBUG] [Thread-177449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:58:29.419 [DEBUG] [Thread-177449] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:58:29.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:58:29.420 [DEBUG] [Thread-177449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:58:29.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:58:29.422 [DEBUG] [Thread-177449] [transport.py] [_log()] userauth is OK
2026-04-11T21:58:29.422 [DEBUG] [Thread-177449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:58:29.422 [DEBUG] [Thread-177449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:58:29.422 [DEBUG] [Thread-177449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:58:29.423 [DEBUG] [Thread-177449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:58:29.447 [INFO] [Thread-177449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:58:29.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:58:30.110 [DEBUG] [Thread-177449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:58:30.110 [DEBUG] [Thread-177449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:58:30.111 [DEBUG] [Thread-177449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:58:30.151 [DEBUG] [Thread-177449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:58:30.151 [DEBUG] [Thread-177449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:58:30.154 [DEBUG] [Thread-177449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:58:30.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:58:30.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:58:30.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:58:30.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:58:30.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:58:30.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:58:30.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:58:30.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:58:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:58:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.832059 -999.00  +11.80   5.26     97  +11.40 1 3 1 3 1     0    0 0.41 0.63 ----- 5.3 5.3 269.3 9.3 13.3 -1.5 13.2 -0.1 12.8 -0.3 13.1 -0.8
2026-04-11T21:58:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:58:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:58:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.832059
2026-04-11T21:58:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:58:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:58:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:58:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:58:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:58:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:58:05', tmtdew=0.040125, humidity=100.029, cloud=0.0, wind=9.81108, temperature=11.6756, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:58:09.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:58:30.182 [DEBUG] [Thread-177449] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:58:30.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:58:30.275 [DEBUG] [Thread-177452] [transport.py] [_log()] starting thread (client mode): 0xae517400
2026-04-11T21:58:30.275 [DEBUG] [Thread-177452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:58:30.291 [DEBUG] [Thread-177452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:58:30.292 [INFO] [Thread-177452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:58:30.299 [DEBUG] [Thread-177452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:58:30.300 [DEBUG] [Thread-177452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] client lang: <none>
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] server lang: <none>
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] kex follows: False
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:58:30.301 [DEBUG] [Thread-177452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:58:30.302 [DEBUG] [Thread-177452] [transport.py] [_log()] Compression: none
2026-04-11T21:58:30.302 [DEBUG] [Thread-177452] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:58:30.359 [DEBUG] [Thread-177452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:58:30.359 [DEBUG] [Thread-177452] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:58:30.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:58:30.360 [DEBUG] [Thread-177452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:58:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:58:30.415 [DEBUG] [Thread-177452] [transport.py] [_log()] userauth is OK
2026-04-11T21:58:30.415 [DEBUG] [Thread-177452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:58:30.415 [DEBUG] [Thread-177452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:58:30.415 [DEBUG] [Thread-177452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:58:30.415 [DEBUG] [Thread-177452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:58:30.435 [INFO] [Thread-177452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:58:30.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:58:30.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:58:31.272 [DEBUG] [Thread-177452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:58:31.273 [DEBUG] [Thread-177452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:58:31.321 [DEBUG] [Thread-177452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:58:31.322 [DEBUG] [Thread-177452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:58:31.331 [DEBUG] [Thread-177452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:58:31.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:58:31.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:58:31.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T21:58:31.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:58:31.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:58:31.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:58:31.368 [DEBUG] [Thread-177452] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:58:34.802 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:34.804 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:36.396 [DEBUG] [Thread-177454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:44.398 [DEBUG] [Thread-177455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:58:59.450 [DEBUG] [Thread-177456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:59:01.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:59:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:59:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 58, 41), -0.02485, 100.091, 0.0, 12.4222, 12.1175, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:59:02.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:58:41
2026-04-11T21:59:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:59:03.152 [DEBUG] [Thread-177457] [transport.py] [_log()] starting thread (client mode): 0xa79522c0
2026-04-11T21:59:03.153 [DEBUG] [Thread-177457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:59:03.173 [DEBUG] [Thread-177457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:59:03.173 [INFO] [Thread-177457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:59:03.176 [DEBUG] [Thread-177457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] client lang: <none>
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] server lang: <none>
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] kex follows: False
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:59:03.177 [DEBUG] [Thread-177457] [transport.py] [_log()] Compression: none
2026-04-11T21:59:03.178 [DEBUG] [Thread-177457] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:59:03.194 [DEBUG] [Thread-177457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:59:03.195 [DEBUG] [Thread-177457] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:59:03.195 [DEBUG] [Thread-177457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:59:03.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:59:03.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:59:03.197 [DEBUG] [Thread-177457] [transport.py] [_log()] userauth is OK
2026-04-11T21:59:03.197 [DEBUG] [Thread-177457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:59:03.197 [DEBUG] [Thread-177457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:59:03.197 [DEBUG] [Thread-177457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:59:03.197 [DEBUG] [Thread-177457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:59:03.220 [INFO] [Thread-177457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:59:03.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:59:03.857 [DEBUG] [Thread-177457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:59:03.857 [DEBUG] [Thread-177457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:59:03.858 [DEBUG] [Thread-177457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:59:03.899 [DEBUG] [Thread-177457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:59:03.900 [DEBUG] [Thread-177457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:59:03.902 [DEBUG] [Thread-177457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:59:03.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:59:03.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:59:03.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:59:03.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:59:03.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:59:03.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:59:03.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:59:03.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:59:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:59:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.832406 -999.00  +11.80   7.62     97  +11.50 1 3 1 3 1     0    0 0.40 0.45 ----- 7.6 7.6 272.6 9.3 13.4 -1.4 13.2 -0.2 12.8 -0.2 13.2 -0.7
2026-04-11T21:59:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:59:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:59:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.832406
2026-04-11T21:59:03.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:59:03.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:59:03.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:59:03.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:59:03.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:59:03.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:58:41', tmtdew=-0.02485, humidity=100.091, cloud=0.0, wind=12.4222, temperature=12.1175, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:58:39.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:59:03.926 [DEBUG] [Thread-177457] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:59:04.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:59:04.020 [DEBUG] [Thread-177460] [transport.py] [_log()] starting thread (client mode): 0xb0fb6a70
2026-04-11T21:59:04.020 [DEBUG] [Thread-177460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:59:04.036 [DEBUG] [Thread-177460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:59:04.036 [INFO] [Thread-177460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] client lang: <none>
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] server lang: <none>
2026-04-11T21:59:04.044 [DEBUG] [Thread-177460] [transport.py] [_log()] kex follows: False
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] Compression: none
2026-04-11T21:59:04.045 [DEBUG] [Thread-177460] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:59:04.111 [DEBUG] [Thread-177460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:59:04.111 [DEBUG] [Thread-177460] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:59:04.111 [DEBUG] [Thread-177460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:59:04.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:59:04.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:59:04.166 [DEBUG] [Thread-177460] [transport.py] [_log()] userauth is OK
2026-04-11T21:59:04.166 [DEBUG] [Thread-177460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:59:04.166 [DEBUG] [Thread-177460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:59:04.166 [DEBUG] [Thread-177460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:59:04.166 [DEBUG] [Thread-177460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:59:04.185 [INFO] [Thread-177460] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:59:04.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:59:04.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:59:05.010 [DEBUG] [Thread-177460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:59:05.010 [DEBUG] [Thread-177460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:59:05.059 [DEBUG] [Thread-177460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:59:05.059 [DEBUG] [Thread-177460] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:59:05.068 [DEBUG] [Thread-177460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:59:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:59:05.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:59:05.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-04-11T21:59:05.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:59:05.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:59:05.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:59:05.102 [DEBUG] [Thread-177460] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:59:14.483 [DEBUG] [Thread-177462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:29.537 [DEBUG] [Thread-177463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:35.008 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:35.009 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T21:59:35.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T21:59:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T21:59:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 59, 16), -0.00986, 100.029, 0.0, 10.9408, 11.659, 2, 2, 2, 2, 0, 0),)
2026-04-11T21:59:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:59:16
2026-04-11T21:59:36.469 [DEBUG] [Thread-177464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:36.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T21:59:36.926 [DEBUG] [Thread-177465] [transport.py] [_log()] starting thread (client mode): 0xae5f14b0
2026-04-11T21:59:36.926 [DEBUG] [Thread-177465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:59:36.947 [DEBUG] [Thread-177465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T21:59:36.947 [INFO] [Thread-177465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:59:36.951 [DEBUG] [Thread-177465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] client lang: <none>
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] server lang: <none>
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] kex follows: False
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] Compression: none
2026-04-11T21:59:36.952 [DEBUG] [Thread-177465] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:59:36.971 [DEBUG] [Thread-177465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:59:36.972 [DEBUG] [Thread-177465] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:59:36.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T21:59:36.973 [DEBUG] [Thread-177465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T21:59:36.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:59:36.975 [DEBUG] [Thread-177465] [transport.py] [_log()] userauth is OK
2026-04-11T21:59:36.976 [DEBUG] [Thread-177465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:59:36.976 [DEBUG] [Thread-177465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:59:36.976 [DEBUG] [Thread-177465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T21:59:36.976 [DEBUG] [Thread-177465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:59:36.999 [INFO] [Thread-177465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:59:36.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:59:37.654 [DEBUG] [Thread-177465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:59:37.655 [DEBUG] [Thread-177465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:59:37.655 [DEBUG] [Thread-177465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T21:59:37.695 [DEBUG] [Thread-177465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:59:37.695 [DEBUG] [Thread-177465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:59:37.700 [DEBUG] [Thread-177465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:59:37.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:59:37.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T21:59:37.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T21:59:37.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T21:59:37.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:59:37.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T21:59:37.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:59:37.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.832753 -999.00  +11.90   7.50     97  +11.50 1 3 1 3 1     0    0 0.40 0.51 ----- 7.5 7.5 270.0 10.3 13.4 -1.4 13.2 -0.3 12.8 -0.6 13.2 -0.8
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.832753
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T21:59:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:59:16', tmtdew=-0.00986, humidity=100.029, cloud=0.0, wind=10.9408, temperature=11.659, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:59:09.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T21:59:37.724 [DEBUG] [Thread-177465] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:59:37.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T21:59:37.817 [DEBUG] [Thread-177468] [transport.py] [_log()] starting thread (client mode): 0xae5f1c30
2026-04-11T21:59:37.817 [DEBUG] [Thread-177468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T21:59:37.832 [DEBUG] [Thread-177468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T21:59:37.832 [INFO] [Thread-177468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] client lang: <none>
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] server lang: <none>
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] kex follows: False
2026-04-11T21:59:37.840 [DEBUG] [Thread-177468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T21:59:37.841 [DEBUG] [Thread-177468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T21:59:37.841 [DEBUG] [Thread-177468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T21:59:37.841 [DEBUG] [Thread-177468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T21:59:37.841 [DEBUG] [Thread-177468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T21:59:37.841 [DEBUG] [Thread-177468] [transport.py] [_log()] Compression: none
2026-04-11T21:59:37.841 [DEBUG] [Thread-177468] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T21:59:37.899 [DEBUG] [Thread-177468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T21:59:37.899 [DEBUG] [Thread-177468] [transport.py] [_log()] Switch to new keys ...
2026-04-11T21:59:37.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T21:59:37.900 [DEBUG] [Thread-177468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T21:59:37.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T21:59:37.955 [DEBUG] [Thread-177468] [transport.py] [_log()] userauth is OK
2026-04-11T21:59:37.955 [DEBUG] [Thread-177468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T21:59:37.955 [DEBUG] [Thread-177468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T21:59:37.955 [DEBUG] [Thread-177468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T21:59:37.955 [DEBUG] [Thread-177468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T21:59:37.978 [INFO] [Thread-177468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T21:59:37.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T21:59:37.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T21:59:38.805 [DEBUG] [Thread-177468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T21:59:38.805 [DEBUG] [Thread-177468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T21:59:38.853 [DEBUG] [Thread-177468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T21:59:38.853 [DEBUG] [Thread-177468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T21:59:38.863 [DEBUG] [Thread-177468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T21:59:38.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T21:59:38.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T21:59:38.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-04-11T21:59:38.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T21:59:38.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T21:59:38.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T21:59:38.900 [DEBUG] [Thread-177468] [transport.py] [_log()] EOF in transport thread
2026-04-11T21:59:44.573 [DEBUG] [Thread-177470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T21:59:59.616 [DEBUG] [Thread-177471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:08.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:00:08.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:00:08.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-04-11T22:00:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 21, 59, 51), -0.00969, 99.9917, 0.0, 14.2214, 12.0512, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:00:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 21:59:51
2026-04-11T22:00:10.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:00:10.752 [DEBUG] [Thread-177472] [transport.py] [_log()] starting thread (client mode): 0xae5f2680
2026-04-11T22:00:10.752 [DEBUG] [Thread-177472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:00:10.772 [DEBUG] [Thread-177472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:00:10.772 [INFO] [Thread-177472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] client lang: <none>
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] server lang: <none>
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] kex follows: False
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:00:10.773 [DEBUG] [Thread-177472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:00:10.774 [DEBUG] [Thread-177472] [transport.py] [_log()] Compression: none
2026-04-11T22:00:10.774 [DEBUG] [Thread-177472] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:00:10.787 [DEBUG] [Thread-177472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:00:10.787 [DEBUG] [Thread-177472] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:00:10.788 [DEBUG] [Thread-177472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:00:10.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:00:10.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:00:10.790 [DEBUG] [Thread-177472] [transport.py] [_log()] userauth is OK
2026-04-11T22:00:10.790 [DEBUG] [Thread-177472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:00:10.790 [DEBUG] [Thread-177472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:00:10.790 [DEBUG] [Thread-177472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:00:10.790 [DEBUG] [Thread-177472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:00:10.826 [INFO] [Thread-177472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:00:10.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:00:11.919 [DEBUG] [Thread-177472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:00:11.919 [DEBUG] [Thread-177472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:00:11.920 [DEBUG] [Thread-177472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:00:11.960 [DEBUG] [Thread-177472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:00:11.960 [DEBUG] [Thread-177472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:00:11.964 [DEBUG] [Thread-177472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:00:11.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:00:11.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:00:11.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:00:11.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:00:11.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:00:11.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:00:11.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:00:11.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:00:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:00:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.833100 -999.00  +11.80   7.47     97  +11.40 1 3 1 3 1     0    0 0.41 0.60 ----- 7.5 7.5 285.3 9.5 13.3 -1.5 13.3 -0.3 12.8 -0.4 13.2 -0.9
2026-04-11T22:00:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:00:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:00:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.833100
2026-04-11T22:00:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:00:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:00:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:00:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:00:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:00:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T21:59:51', tmtdew=-0.00969, humidity=99.9917, cloud=0.0, wind=14.2214, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T19:59:39.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:00:11.998 [DEBUG] [Thread-177472] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:00:12.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:00:12.095 [DEBUG] [Thread-177475] [transport.py] [_log()] starting thread (client mode): 0xae5f01c0
2026-04-11T22:00:12.095 [DEBUG] [Thread-177475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:00:12.110 [DEBUG] [Thread-177475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:00:12.110 [INFO] [Thread-177475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:00:12.118 [DEBUG] [Thread-177475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:00:12.118 [DEBUG] [Thread-177475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:00:12.118 [DEBUG] [Thread-177475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:00:12.118 [DEBUG] [Thread-177475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] client lang: <none>
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] server lang: <none>
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] kex follows: False
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] Compression: none
2026-04-11T22:00:12.119 [DEBUG] [Thread-177475] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:00:12.179 [DEBUG] [Thread-177475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:00:12.179 [DEBUG] [Thread-177475] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:00:12.180 [DEBUG] [Thread-177475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:00:12.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:00:12.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:00:12.235 [DEBUG] [Thread-177475] [transport.py] [_log()] userauth is OK
2026-04-11T22:00:12.235 [DEBUG] [Thread-177475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:00:12.235 [DEBUG] [Thread-177475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:00:12.235 [DEBUG] [Thread-177475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:00:12.235 [DEBUG] [Thread-177475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:00:12.269 [INFO] [Thread-177475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:00:12.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:00:12.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:00:13.125 [DEBUG] [Thread-177475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:00:13.125 [DEBUG] [Thread-177475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:00:13.173 [DEBUG] [Thread-177475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:00:13.173 [DEBUG] [Thread-177475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:00:13.182 [DEBUG] [Thread-177475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:00:13.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:00:13.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:00:13.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-04-11T22:00:13.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:00:13.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:00:13.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:00:13.220 [DEBUG] [Thread-177475] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:00:14.653 [DEBUG] [Thread-177477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:29.716 [DEBUG] [Thread-177478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:35.213 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:35.215 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:36.521 [DEBUG] [Thread-177479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:43.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:00:43.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:00:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:00:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 0, 27), 0.04009, 100.029, 0.0, 10.0757, 11.7588, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:00:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:00:27
2026-04-11T22:00:44.752 [DEBUG] [Thread-177480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:00:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:00:45.081 [DEBUG] [Thread-177481] [transport.py] [_log()] starting thread (client mode): 0xae5f1450
2026-04-11T22:00:45.081 [DEBUG] [Thread-177481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:00:45.101 [DEBUG] [Thread-177481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:00:45.101 [INFO] [Thread-177481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:00:45.104 [DEBUG] [Thread-177481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:00:45.104 [DEBUG] [Thread-177481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:00:45.104 [DEBUG] [Thread-177481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:00:45.104 [DEBUG] [Thread-177481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:45.104 [DEBUG] [Thread-177481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:45.104 [DEBUG] [Thread-177481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] client lang: <none>
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] server lang: <none>
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] kex follows: False
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] Compression: none
2026-04-11T22:00:45.105 [DEBUG] [Thread-177481] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:00:45.123 [DEBUG] [Thread-177481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:00:45.123 [DEBUG] [Thread-177481] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:00:45.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:00:45.124 [DEBUG] [Thread-177481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:00:45.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:00:45.127 [DEBUG] [Thread-177481] [transport.py] [_log()] userauth is OK
2026-04-11T22:00:45.127 [DEBUG] [Thread-177481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:00:45.127 [DEBUG] [Thread-177481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:00:45.127 [DEBUG] [Thread-177481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:00:45.127 [DEBUG] [Thread-177481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:00:45.163 [INFO] [Thread-177481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:00:45.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:00:45.920 [DEBUG] [Thread-177481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:00:45.921 [DEBUG] [Thread-177481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:00:45.921 [DEBUG] [Thread-177481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:00:45.961 [DEBUG] [Thread-177481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:00:45.962 [DEBUG] [Thread-177481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:00:45.965 [DEBUG] [Thread-177481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:00:45.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:00:45.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:00:45.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:00:45.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:00:45.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:00:45.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:00:45.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:00:45.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:00:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:00:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.833447 -999.00  +11.80   7.96     97  +11.40 1 3 1 3 1     0    0 0.41 0.73 ----- 8.0 8.0 274.8 9.4 13.4 -1.6 13.2 -0.2 12.9 -0.7 13.1 -0.8
2026-04-11T22:00:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:00:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:00:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.833447
2026-04-11T22:00:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:00:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:00:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:00:45.992 [DEBUG] [Thread-177481] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:00:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:00:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:00:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:00:27', tmtdew=0.04009, humidity=100.029, cloud=0.0, wind=10.0757, temperature=11.7588, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:00:09.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:00: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-04-11T22:00:46.098 [DEBUG] [Thread-177484] [transport.py] [_log()] starting thread (client mode): 0xa7910f40
2026-04-11T22:00:46.099 [DEBUG] [Thread-177484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:00:46.114 [DEBUG] [Thread-177484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:00:46.114 [INFO] [Thread-177484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:00:46.122 [DEBUG] [Thread-177484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] client lang: <none>
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] server lang: <none>
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] kex follows: False
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] Compression: none
2026-04-11T22:00:46.123 [DEBUG] [Thread-177484] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:00:46.191 [DEBUG] [Thread-177484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:00:46.192 [DEBUG] [Thread-177484] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:00:46.192 [DEBUG] [Thread-177484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:00:46.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:00:46.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:00:46.251 [DEBUG] [Thread-177484] [transport.py] [_log()] userauth is OK
2026-04-11T22:00:46.251 [DEBUG] [Thread-177484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:00:46.252 [DEBUG] [Thread-177484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:00:46.252 [DEBUG] [Thread-177484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:00:46.252 [DEBUG] [Thread-177484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:00:46.270 [INFO] [Thread-177484] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:00:46.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:00:46.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:00:47.100 [DEBUG] [Thread-177484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:00:47.101 [DEBUG] [Thread-177484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:00:47.148 [DEBUG] [Thread-177484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:00:47.148 [DEBUG] [Thread-177484] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:00:47.157 [DEBUG] [Thread-177484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:00:47.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:00:47.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:00:47.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:00:47.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:00:47.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:00:47.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:00:47.194 [DEBUG] [Thread-177484] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:00:59.787 [DEBUG] [Thread-177486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:14.823 [DEBUG] [Thread-177487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:01:17.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:01:17.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:01:18.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 1, 2), 0.03252, 100.079, 0.0, 9.35244, 11.7753, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:01:18.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:01:02
2026-04-11T22:01:18.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:01:19.021 [DEBUG] [Thread-177488] [transport.py] [_log()] starting thread (client mode): 0xb0f570a0
2026-04-11T22:01:19.021 [DEBUG] [Thread-177488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:01:19.043 [DEBUG] [Thread-177488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:01:19.043 [INFO] [Thread-177488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:01:19.046 [DEBUG] [Thread-177488] [transport.py] [_log()] client lang: <none>
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] server lang: <none>
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] kex follows: False
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] Compression: none
2026-04-11T22:01:19.047 [DEBUG] [Thread-177488] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:01:19.063 [DEBUG] [Thread-177488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:01:19.064 [DEBUG] [Thread-177488] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:01:19.064 [DEBUG] [Thread-177488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:01:19.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:01:19.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:01:19.067 [DEBUG] [Thread-177488] [transport.py] [_log()] userauth is OK
2026-04-11T22:01:19.067 [DEBUG] [Thread-177488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:01:19.067 [DEBUG] [Thread-177488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:01:19.067 [DEBUG] [Thread-177488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:01:19.067 [DEBUG] [Thread-177488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:01:19.085 [INFO] [Thread-177488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:01:19.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:01:19.857 [DEBUG] [Thread-177488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:01:19.857 [DEBUG] [Thread-177488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:01:19.857 [DEBUG] [Thread-177488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:01:19.898 [DEBUG] [Thread-177488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:01:19.898 [DEBUG] [Thread-177488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:01:19.900 [DEBUG] [Thread-177488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:01:19.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:01:19.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:01:19.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:01:19.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:01:19.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:01:19.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:01:19.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:01:19.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:01:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:01:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.833795 -999.00  +11.90   9.06     97  +11.50 1 3 1 3 1     0    0 0.41 0.74 ----- 9.1 9.1 268.4 10.8 13.4 -1.5 13.3 -0.3 12.8 -0.3 13.2 -0.9
2026-04-11T22:01:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:01:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:01:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.833795
2026-04-11T22:01:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:01:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:01:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:01:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:01:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:01:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:01:02', tmtdew=0.03252, humidity=100.079, cloud=0.0, wind=9.35244, temperature=11.7753, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:00:39.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:01:19.923 [DEBUG] [Thread-177488] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:01:20.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:01:20.017 [DEBUG] [Thread-177491] [transport.py] [_log()] starting thread (client mode): 0xb0fb5b40
2026-04-11T22:01:20.017 [DEBUG] [Thread-177491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:01:20.031 [DEBUG] [Thread-177491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:01:20.031 [INFO] [Thread-177491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:20.039 [DEBUG] [Thread-177491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] client lang: <none>
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] server lang: <none>
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] kex follows: False
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:01:20.040 [DEBUG] [Thread-177491] [transport.py] [_log()] Compression: none
2026-04-11T22:01:20.041 [DEBUG] [Thread-177491] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:01:20.099 [DEBUG] [Thread-177491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:01:20.099 [DEBUG] [Thread-177491] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:01:20.100 [DEBUG] [Thread-177491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:01:20.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:01:20.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:01:20.155 [DEBUG] [Thread-177491] [transport.py] [_log()] userauth is OK
2026-04-11T22:01:20.155 [DEBUG] [Thread-177491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:01:20.156 [DEBUG] [Thread-177491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:01:20.156 [DEBUG] [Thread-177491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:01:20.156 [DEBUG] [Thread-177491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:01:20.175 [INFO] [Thread-177491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:01:20.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:01:20.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:01:20.959 [DEBUG] [Thread-177491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:01:20.959 [DEBUG] [Thread-177491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:01:21.007 [DEBUG] [Thread-177491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:01:21.007 [DEBUG] [Thread-177491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:01:21.016 [DEBUG] [Thread-177491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:01:21.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:01:21.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-04-11T22:01:21.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-04-11T22:01:21.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:01:21.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:01:21.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:01:21.052 [DEBUG] [Thread-177491] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:01:29.858 [DEBUG] [Thread-177493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:35.421 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:35.422 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:36.582 [DEBUG] [Thread-177494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:44.912 [DEBUG] [Thread-177495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:01:51.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:01:51.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:01:51.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-04-11T22:01:52.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 1, 37), -0.02997, 100.124, 0.0, 11.7871, 12.1839, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:01:52.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:01:37
2026-04-11T22:01:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:01:52.872 [DEBUG] [Thread-177496] [transport.py] [_log()] starting thread (client mode): 0xb0f8f820
2026-04-11T22:01:52.872 [DEBUG] [Thread-177496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:01:52.887 [DEBUG] [Thread-177496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:01:52.887 [INFO] [Thread-177496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:01:52.890 [DEBUG] [Thread-177496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] client lang: <none>
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] server lang: <none>
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] kex follows: False
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] Compression: none
2026-04-11T22:01:52.891 [DEBUG] [Thread-177496] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:01:52.909 [DEBUG] [Thread-177496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:01:52.910 [DEBUG] [Thread-177496] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:01:52.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:01:52.912 [DEBUG] [Thread-177496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:01:52.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:01:52.914 [DEBUG] [Thread-177496] [transport.py] [_log()] userauth is OK
2026-04-11T22:01:52.915 [DEBUG] [Thread-177496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:01:52.915 [DEBUG] [Thread-177496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:01:52.915 [DEBUG] [Thread-177496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:01:52.915 [DEBUG] [Thread-177496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:01:52.940 [INFO] [Thread-177496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:01:52.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:01:53.736 [DEBUG] [Thread-177496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:01:53.736 [DEBUG] [Thread-177496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:01:53.736 [DEBUG] [Thread-177496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:01:53.777 [DEBUG] [Thread-177496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:01:53.777 [DEBUG] [Thread-177496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:01:53.781 [DEBUG] [Thread-177496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:01:53.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:01:53.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:01:53.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:01:53.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:01:53.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:01:53.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:01:53.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:01:53.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:01:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:01:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.834142 -999.00  +11.80   7.42     97  +11.40 1 3 1 3 1     0    0 0.40 0.61 ----- 7.4 7.4 273.0 12.2 13.4 -1.7 13.2 -0.3 12.9 -0.3 13.1 -1.0
2026-04-11T22:01:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:01:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:01:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.834142
2026-04-11T22:01:53.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:01:53.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:01:53.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:01:53.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:01:53.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:01:53.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:01:37', tmtdew=-0.02997, humidity=100.124, cloud=0.0, wind=11.7871, temperature=12.1839, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:01:09.869', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:01:53.807 [DEBUG] [Thread-177496] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:01:53.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:01:53.901 [DEBUG] [Thread-177499] [transport.py] [_log()] starting thread (client mode): 0xb0f8f1f0
2026-04-11T22:01:53.901 [DEBUG] [Thread-177499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:01:53.915 [DEBUG] [Thread-177499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:01:53.915 [INFO] [Thread-177499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:01:53.923 [DEBUG] [Thread-177499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] client lang: <none>
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] server lang: <none>
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] kex follows: False
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] Compression: none
2026-04-11T22:01:53.924 [DEBUG] [Thread-177499] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:01:53.983 [DEBUG] [Thread-177499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:01:53.984 [DEBUG] [Thread-177499] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:01:53.985 [DEBUG] [Thread-177499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:01:53.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:01:53.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:01:54.039 [DEBUG] [Thread-177499] [transport.py] [_log()] userauth is OK
2026-04-11T22:01:54.040 [DEBUG] [Thread-177499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:01:54.040 [DEBUG] [Thread-177499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:01:54.040 [DEBUG] [Thread-177499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:01:54.040 [DEBUG] [Thread-177499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:01:54.059 [INFO] [Thread-177499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:01:54.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:01:54.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:01:54.883 [DEBUG] [Thread-177499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:01:54.883 [DEBUG] [Thread-177499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:01:54.931 [DEBUG] [Thread-177499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:01:54.931 [DEBUG] [Thread-177499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:01:54.941 [DEBUG] [Thread-177499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:01:54.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:01:54.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-04-11T22:01:54.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-04-11T22:01:54.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:01:54.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:01:54.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:01:54.977 [DEBUG] [Thread-177499] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:01:59.953 [DEBUG] [Thread-177501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:15.008 [DEBUG] [Thread-177502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:25.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:02:25.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:02:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:02:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 2, 13), -0.01496, 100.062, 0.0, 10.1639, 11.7254, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:02:26.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:02:13
2026-04-11T22:02:26.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:02:26.825 [DEBUG] [Thread-177503] [transport.py] [_log()] starting thread (client mode): 0xb0f8dea0
2026-04-11T22:02:26.825 [DEBUG] [Thread-177503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:02:26.841 [DEBUG] [Thread-177503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:02:26.841 [INFO] [Thread-177503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:02:26.844 [DEBUG] [Thread-177503] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:02:26.844 [DEBUG] [Thread-177503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:02:26.844 [DEBUG] [Thread-177503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:02:26.844 [DEBUG] [Thread-177503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:02:26.844 [DEBUG] [Thread-177503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] client lang: <none>
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] server lang: <none>
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] kex follows: False
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] Compression: none
2026-04-11T22:02:26.845 [DEBUG] [Thread-177503] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:02:26.859 [DEBUG] [Thread-177503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:02:26.860 [DEBUG] [Thread-177503] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:02:26.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:02:26.862 [DEBUG] [Thread-177503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:02:26.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:02:26.864 [DEBUG] [Thread-177503] [transport.py] [_log()] userauth is OK
2026-04-11T22:02:26.864 [DEBUG] [Thread-177503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:02:26.865 [DEBUG] [Thread-177503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:02:26.865 [DEBUG] [Thread-177503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:02:26.865 [DEBUG] [Thread-177503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:02:26.890 [INFO] [Thread-177503] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:02:26.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:02:27.649 [DEBUG] [Thread-177503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:02:27.649 [DEBUG] [Thread-177503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:02:27.650 [DEBUG] [Thread-177503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:02:27.690 [DEBUG] [Thread-177503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:02:27.691 [DEBUG] [Thread-177503] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:02:27.693 [DEBUG] [Thread-177503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:02:27.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:02:27.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:02:27.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:02:27.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:02:27.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:02:27.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:02:27.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:02:27.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:02:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:02:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.834489 -999.00  +11.80   5.65     97  +11.40 1 3 1 3 1     0    0 0.41 0.77 ----- 5.7 5.7 278.0 9.0 13.3 -1.5 13.3 -0.3 12.8 -0.2 13.1 -0.8
2026-04-11T22:02:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:02:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:02:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.834489
2026-04-11T22:02:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:02:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:02:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:02:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:02:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:02:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:02:13', tmtdew=-0.01496, humidity=100.062, cloud=0.0, wind=10.1639, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:01:39.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:02:27.717 [DEBUG] [Thread-177503] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:02:27.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:02:27.811 [DEBUG] [Thread-177506] [transport.py] [_log()] starting thread (client mode): 0xb0f8e620
2026-04-11T22:02:27.811 [DEBUG] [Thread-177506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:02:27.826 [DEBUG] [Thread-177506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:02:27.826 [INFO] [Thread-177506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:02:27.833 [DEBUG] [Thread-177506] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] client lang: <none>
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] server lang: <none>
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] kex follows: False
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] Compression: none
2026-04-11T22:02:27.834 [DEBUG] [Thread-177506] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:02:27.894 [DEBUG] [Thread-177506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:02:27.894 [DEBUG] [Thread-177506] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:02:27.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:02:27.895 [DEBUG] [Thread-177506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:02:27.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:02:27.952 [DEBUG] [Thread-177506] [transport.py] [_log()] userauth is OK
2026-04-11T22:02:27.952 [DEBUG] [Thread-177506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:02:27.952 [DEBUG] [Thread-177506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:02:27.952 [DEBUG] [Thread-177506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:02:27.952 [DEBUG] [Thread-177506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:02:27.970 [INFO] [Thread-177506] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:02:27.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:02:27.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:02:28.792 [DEBUG] [Thread-177506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:02:28.793 [DEBUG] [Thread-177506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:02:28.840 [DEBUG] [Thread-177506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:02:28.841 [DEBUG] [Thread-177506] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:02:28.850 [DEBUG] [Thread-177506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:02:28.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:02:28.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-04-11T22:02:28.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-04-11T22:02:28.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:02:28.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:02:28.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:02:28.887 [DEBUG] [Thread-177506] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:02:30.045 [DEBUG] [Thread-177508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:35.625 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:35.626 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:36.640 [DEBUG] [Thread-177509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:45.099 [DEBUG] [Thread-177510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:02:58.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:02:58.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:02:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:03:00.138 [DEBUG] [Thread-177511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:03:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 2, 50), -0.0249, 100.091, 0.0, 12.4222, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:03:00.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:02:50
2026-04-11T22:03:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:03:00.765 [DEBUG] [Thread-177512] [transport.py] [_log()] starting thread (client mode): 0xb0fcee30
2026-04-11T22:03:00.765 [DEBUG] [Thread-177512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:03:00.785 [DEBUG] [Thread-177512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:03:00.785 [INFO] [Thread-177512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] client lang: <none>
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] server lang: <none>
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] kex follows: False
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] Compression: none
2026-04-11T22:03:00.788 [DEBUG] [Thread-177512] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:03:00.805 [DEBUG] [Thread-177512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:03:00.806 [DEBUG] [Thread-177512] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:03:00.806 [DEBUG] [Thread-177512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:03:00.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:03:00.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:03:00.808 [DEBUG] [Thread-177512] [transport.py] [_log()] userauth is OK
2026-04-11T22:03:00.808 [DEBUG] [Thread-177512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:03:00.808 [DEBUG] [Thread-177512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:03:00.808 [DEBUG] [Thread-177512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:03:00.808 [DEBUG] [Thread-177512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:03:00.832 [INFO] [Thread-177512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:03:00.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:03:01.646 [DEBUG] [Thread-177512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:03:01.646 [DEBUG] [Thread-177512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:03:01.647 [DEBUG] [Thread-177512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:03:01.687 [DEBUG] [Thread-177512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:03:01.687 [DEBUG] [Thread-177512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:03:01.691 [DEBUG] [Thread-177512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:03:01.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:03:01.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:03:01.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:03:01.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:03:01.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:03:01.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:03:01.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:03:01.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:03:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:03:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.835184 -999.00  +11.90   6.38     97  +11.50 1 3 1 3 1     0    0 0.40 0.51 ----- 6.4 6.4 263.1 11.7 13.4 -1.7 13.3 -0.3 12.8 -0.9 13.2 -0.9
2026-04-11T22:03:01.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:03:01.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:03:01.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.835184
2026-04-11T22:03:01.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:03:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:03:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:03:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:03:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:03:01.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:02:50', tmtdew=-0.0249, humidity=100.091, cloud=0.0, wind=12.4222, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:02:39.898', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:03:01.720 [DEBUG] [Thread-177512] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:03:01.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:03:01.823 [DEBUG] [Thread-177515] [transport.py] [_log()] starting thread (client mode): 0xb0fcdff0
2026-04-11T22:03:01.823 [DEBUG] [Thread-177515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:03:01.838 [DEBUG] [Thread-177515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:03:01.838 [INFO] [Thread-177515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] client lang: <none>
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] server lang: <none>
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] kex follows: False
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] Compression: none
2026-04-11T22:03:01.846 [DEBUG] [Thread-177515] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:03:01.903 [DEBUG] [Thread-177515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:03:01.904 [DEBUG] [Thread-177515] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:03:01.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:03:01.905 [DEBUG] [Thread-177515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:03:01.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:03:01.959 [DEBUG] [Thread-177515] [transport.py] [_log()] userauth is OK
2026-04-11T22:03:01.960 [DEBUG] [Thread-177515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:03:01.960 [DEBUG] [Thread-177515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:03:01.960 [DEBUG] [Thread-177515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:03:01.960 [DEBUG] [Thread-177515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:03:01.981 [INFO] [Thread-177515] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:03:01.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:03:01.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:03:02.880 [DEBUG] [Thread-177515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:03:02.880 [DEBUG] [Thread-177515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:03:02.928 [DEBUG] [Thread-177515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:03:02.928 [DEBUG] [Thread-177515] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:03:02.937 [DEBUG] [Thread-177515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:03:02.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:03:02.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-04-11T22:03:02.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-04-11T22:03:02.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:03:02.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:03:02.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:03:02.974 [DEBUG] [Thread-177515] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:03:15.176 [DEBUG] [Thread-177517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:03:30.230 [DEBUG] [Thread-177518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:03:32.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:03:32.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:03:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:03:34.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 3, 25), 0.03757, 100.046, 0.0, 11.1348, 11.7588, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:03:34.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:03:25
2026-04-11T22:03:34.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:03:34.853 [DEBUG] [Thread-177519] [transport.py] [_log()] starting thread (client mode): 0xb0fcde70
2026-04-11T22:03:34.853 [DEBUG] [Thread-177519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:03:34.873 [DEBUG] [Thread-177519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:03:34.873 [INFO] [Thread-177519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:03:34.876 [DEBUG] [Thread-177519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:03:34.876 [DEBUG] [Thread-177519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:03:34.876 [DEBUG] [Thread-177519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:03:34.876 [DEBUG] [Thread-177519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:34.876 [DEBUG] [Thread-177519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] client lang: <none>
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] server lang: <none>
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] kex follows: False
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] Compression: none
2026-04-11T22:03:34.877 [DEBUG] [Thread-177519] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:03:34.886 [DEBUG] [Thread-177519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:03:34.886 [DEBUG] [Thread-177519] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:03:34.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:03:34.887 [DEBUG] [Thread-177519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:03:34.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:03:34.889 [DEBUG] [Thread-177519] [transport.py] [_log()] userauth is OK
2026-04-11T22:03:34.889 [DEBUG] [Thread-177519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:03:34.890 [DEBUG] [Thread-177519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:03:34.890 [DEBUG] [Thread-177519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:03:34.890 [DEBUG] [Thread-177519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:03:34.915 [INFO] [Thread-177519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:03:34.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:03:35.702 [DEBUG] [Thread-177519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:03:35.702 [DEBUG] [Thread-177519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:03:35.703 [DEBUG] [Thread-177519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:03:35.743 [DEBUG] [Thread-177519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:03:35.743 [DEBUG] [Thread-177519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:03:35.747 [DEBUG] [Thread-177519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:03:35.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:03:35.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:03:35.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:03:35.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:03:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:03:35.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:03:35.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:03:35.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:03:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:03:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.835531 -999.00  +11.80   8.60     97  +11.50 1 3 1 3 1     0    0 0.39 0.45 ----- 8.6 8.6 266.6 10.4 13.4 -1.8 13.2 -0.3 12.8 -0.7 13.2 -1.4
2026-04-11T22:03:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:03:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:03:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.835531
2026-04-11T22:03:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:03:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:03:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:03:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:03:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:03:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:03:25', tmtdew=0.03757, humidity=100.046, cloud=0.0, wind=11.1348, temperature=11.7588, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:03:09.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:03:35.775 [DEBUG] [Thread-177519] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:03:35.829 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:03:35.829 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:03:35.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:03:35.867 [DEBUG] [Thread-177522] [transport.py] [_log()] starting thread (client mode): 0xb0fceb60
2026-04-11T22:03:35.867 [DEBUG] [Thread-177522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:03:35.882 [DEBUG] [Thread-177522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:03:35.882 [INFO] [Thread-177522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:03:35.889 [DEBUG] [Thread-177522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:03:35.889 [DEBUG] [Thread-177522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] client lang: <none>
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] server lang: <none>
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] kex follows: False
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] Compression: none
2026-04-11T22:03:35.890 [DEBUG] [Thread-177522] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:03:35.947 [DEBUG] [Thread-177522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:03:35.948 [DEBUG] [Thread-177522] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:03:35.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:03:35.949 [DEBUG] [Thread-177522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:03:35.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:03:36.004 [DEBUG] [Thread-177522] [transport.py] [_log()] userauth is OK
2026-04-11T22:03:36.004 [DEBUG] [Thread-177522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:03:36.004 [DEBUG] [Thread-177522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:03:36.004 [DEBUG] [Thread-177522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:03:36.004 [DEBUG] [Thread-177522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:03:36.023 [INFO] [Thread-177522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:03:36.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:03:36.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:03:36.713 [DEBUG] [Thread-177524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:03:36.793 [DEBUG] [Thread-177522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:03:36.793 [DEBUG] [Thread-177522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:03:36.843 [DEBUG] [Thread-177522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:03:36.844 [DEBUG] [Thread-177522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:03:36.853 [DEBUG] [Thread-177522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:03:36.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:03:36.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:03:36.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:03:36.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:03:36.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:03:36.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:03:36.890 [DEBUG] [Thread-177522] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:03:45.269 [DEBUG] [Thread-177525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:00.328 [DEBUG] [Thread-177526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:06.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:04:06.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:04:06.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-04-11T22:04:08.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 4), -0.004875, 99.9958, 0.0, 9.79344, 11.7088, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:04:08.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:04:00
2026-04-11T22:04:08.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:04:08.771 [DEBUG] [Thread-177527] [transport.py] [_log()] starting thread (client mode): 0xb0f8e590
2026-04-11T22:04:08.771 [DEBUG] [Thread-177527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:04:08.792 [DEBUG] [Thread-177527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:04:08.792 [INFO] [Thread-177527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:04:08.793 [DEBUG] [Thread-177527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] client lang: <none>
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] server lang: <none>
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] kex follows: False
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:04:08.794 [DEBUG] [Thread-177527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:04:08.795 [DEBUG] [Thread-177527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:04:08.795 [DEBUG] [Thread-177527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:04:08.795 [DEBUG] [Thread-177527] [transport.py] [_log()] Compression: none
2026-04-11T22:04:08.795 [DEBUG] [Thread-177527] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:04:08.809 [DEBUG] [Thread-177527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:04:08.809 [DEBUG] [Thread-177527] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:04:08.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:04:08.810 [DEBUG] [Thread-177527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:04:08.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:04:08.812 [DEBUG] [Thread-177527] [transport.py] [_log()] userauth is OK
2026-04-11T22:04:08.813 [DEBUG] [Thread-177527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:04:08.813 [DEBUG] [Thread-177527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:04:08.813 [DEBUG] [Thread-177527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:04:08.813 [DEBUG] [Thread-177527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:04:08.832 [INFO] [Thread-177527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:04:08.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:04:09.679 [DEBUG] [Thread-177527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:04:09.679 [DEBUG] [Thread-177527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:04:09.680 [DEBUG] [Thread-177527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:04:09.720 [DEBUG] [Thread-177527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:04:09.720 [DEBUG] [Thread-177527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:04:09.723 [DEBUG] [Thread-177527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:04:09.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:04:09.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:04:09.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:04:09.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:04:09.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:04:09.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:04:09.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:04:09.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:04:09.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:04:09.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.835878 -999.00  +11.80   8.70     97  +11.40 1 3 1 3 1     0    0 0.40 0.47 ----- 8.7 8.7 267.8 10.2 13.4 -1.9 13.2 -0.2 12.9 -0.3 13.2 -1.3
2026-04-11T22:04:09.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:04:09.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:04:09.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.835878
2026-04-11T22:04:09.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:04:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:04:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:04:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:04:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:04:09.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:04:00', tmtdew=-0.004875, humidity=99.9958, cloud=0.0, wind=9.79344, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:03:39.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:04:09.749 [DEBUG] [Thread-177527] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:04:09.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:04:09.843 [DEBUG] [Thread-177530] [transport.py] [_log()] starting thread (client mode): 0xb0f8c9a0
2026-04-11T22:04:09.843 [DEBUG] [Thread-177530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:04:09.859 [DEBUG] [Thread-177530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:04:09.859 [INFO] [Thread-177530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:04:09.867 [DEBUG] [Thread-177530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:04:09.867 [DEBUG] [Thread-177530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:04:09.867 [DEBUG] [Thread-177530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:04:09.867 [DEBUG] [Thread-177530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] client lang: <none>
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] server lang: <none>
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] kex follows: False
2026-04-11T22:04:09.868 [DEBUG] [Thread-177530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:04:09.869 [DEBUG] [Thread-177530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:04:09.869 [DEBUG] [Thread-177530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:04:09.869 [DEBUG] [Thread-177530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:04:09.869 [DEBUG] [Thread-177530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:04:09.869 [DEBUG] [Thread-177530] [transport.py] [_log()] Compression: none
2026-04-11T22:04:09.869 [DEBUG] [Thread-177530] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:04:09.928 [DEBUG] [Thread-177530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:04:09.928 [DEBUG] [Thread-177530] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:04:09.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:04:09.929 [DEBUG] [Thread-177530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:04:09.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:04:09.984 [DEBUG] [Thread-177530] [transport.py] [_log()] userauth is OK
2026-04-11T22:04:09.984 [DEBUG] [Thread-177530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:04:09.984 [DEBUG] [Thread-177530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:04:09.984 [DEBUG] [Thread-177530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:04:09.984 [DEBUG] [Thread-177530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:04:10.003 [INFO] [Thread-177530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:04:10.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:04:10.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:04:10.806 [DEBUG] [Thread-177530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:04:10.807 [DEBUG] [Thread-177530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:04:10.855 [DEBUG] [Thread-177530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:04:10.855 [DEBUG] [Thread-177530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:04:10.864 [DEBUG] [Thread-177530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:04:10.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:04:10.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-04-11T22:04:10.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-04-11T22:04:10.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:04:10.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:04:10.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:04:10.902 [DEBUG] [Thread-177530] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:04:15.363 [DEBUG] [Thread-177532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:30.418 [DEBUG] [Thread-177533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:36.044 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:36.046 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:36.779 [DEBUG] [Thread-177534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:04:40.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:04:40.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:04:40.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-04-11T22:04:42.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 4), -0.004875, 99.9958, 0.0, 9.79344, 11.7088, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:04:42.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:04:00
2026-04-11T22:04:42.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:04:42.768 [DEBUG] [Thread-177535] [transport.py] [_log()] starting thread (client mode): 0xb0fcf4c0
2026-04-11T22:04:42.769 [DEBUG] [Thread-177535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:04:42.789 [DEBUG] [Thread-177535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:04:42.789 [INFO] [Thread-177535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] client lang: <none>
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] server lang: <none>
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] kex follows: False
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:04:42.799 [DEBUG] [Thread-177535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:04:42.800 [DEBUG] [Thread-177535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:04:42.800 [DEBUG] [Thread-177535] [transport.py] [_log()] Compression: none
2026-04-11T22:04:42.800 [DEBUG] [Thread-177535] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:04:42.818 [DEBUG] [Thread-177535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:04:42.818 [DEBUG] [Thread-177535] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:04:42.819 [DEBUG] [Thread-177535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:04:42.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:04:42.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:04:42.821 [DEBUG] [Thread-177535] [transport.py] [_log()] userauth is OK
2026-04-11T22:04:42.821 [DEBUG] [Thread-177535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:04:42.822 [DEBUG] [Thread-177535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:04:42.822 [DEBUG] [Thread-177535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:04:42.822 [DEBUG] [Thread-177535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:04:42.846 [INFO] [Thread-177535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:04:42.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:04:43.651 [DEBUG] [Thread-177535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:04:43.652 [DEBUG] [Thread-177535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:04:43.652 [DEBUG] [Thread-177535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:04:43.692 [DEBUG] [Thread-177535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:04:43.692 [DEBUG] [Thread-177535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:04:43.695 [DEBUG] [Thread-177535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:04:43.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:04:43.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:04:43.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:04:43.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:04:43.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:04:43.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:04:43.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:04:43.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:04:43.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:04:43.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.836225 -999.00  +11.80  10.23     97  +11.40 1 3 1 3 1     0    0 0.40 0.57 ----- 10.2 10.2 263.8 11.7 13.4 -1.9 13.2 -0.3 12.8 -0.3 13.2 -1.2
2026-04-11T22:04:43.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:04:43.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:04:43.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.836225
2026-04-11T22:04:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:04:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:04:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:04:43.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:04:43.723 [DEBUG] [Thread-177535] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:04:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:04:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:04:00', tmtdew=-0.004875, humidity=99.9958, cloud=0.0, wind=9.79344, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:04:09.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:04:43.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:04:43.814 [DEBUG] [Thread-177538] [transport.py] [_log()] starting thread (client mode): 0xae5190f0
2026-04-11T22:04:43.815 [DEBUG] [Thread-177538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:04:43.829 [DEBUG] [Thread-177538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:04:43.829 [INFO] [Thread-177538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:04:43.837 [DEBUG] [Thread-177538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:04:43.837 [DEBUG] [Thread-177538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:04:43.837 [DEBUG] [Thread-177538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] client lang: <none>
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] server lang: <none>
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] kex follows: False
2026-04-11T22:04:43.838 [DEBUG] [Thread-177538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:04:43.839 [DEBUG] [Thread-177538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:04:43.839 [DEBUG] [Thread-177538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:04:43.839 [DEBUG] [Thread-177538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:04:43.839 [DEBUG] [Thread-177538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:04:43.839 [DEBUG] [Thread-177538] [transport.py] [_log()] Compression: none
2026-04-11T22:04:43.839 [DEBUG] [Thread-177538] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:04:43.897 [DEBUG] [Thread-177538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:04:43.897 [DEBUG] [Thread-177538] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:04:43.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:04:43.899 [DEBUG] [Thread-177538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:04:43.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:04:43.956 [DEBUG] [Thread-177538] [transport.py] [_log()] userauth is OK
2026-04-11T22:04:43.957 [DEBUG] [Thread-177538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:04:43.957 [DEBUG] [Thread-177538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:04:43.957 [DEBUG] [Thread-177538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:04:43.957 [DEBUG] [Thread-177538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:04:43.971 [INFO] [Thread-177538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:04:43.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:04:43.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:04:44.800 [DEBUG] [Thread-177538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:04:44.800 [DEBUG] [Thread-177538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:04:44.849 [DEBUG] [Thread-177538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:04:44.849 [DEBUG] [Thread-177538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:04:44.858 [DEBUG] [Thread-177538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:04:44.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:04:44.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-04-11T22:04:44.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-04-11T22:04:44.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:04:44.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:04:44.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:04:44.896 [DEBUG] [Thread-177538] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:04:45.454 [DEBUG] [Thread-177540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:00.505 [DEBUG] [Thread-177541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:14.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:05:14.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:05:14.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-04-11T22:05:15.539 [DEBUG] [Thread-177542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 4, 36), -0.00968, 99.9917, 0.0, 11.2226, 12.0512, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:05:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:04:36
2026-04-11T22:05:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:05:16.730 [DEBUG] [Thread-177543] [transport.py] [_log()] starting thread (client mode): 0xb0f8d540
2026-04-11T22:05:16.730 [DEBUG] [Thread-177543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:05:16.751 [DEBUG] [Thread-177543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:05:16.751 [INFO] [Thread-177543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:05:16.754 [DEBUG] [Thread-177543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:05:16.754 [DEBUG] [Thread-177543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:05:16.754 [DEBUG] [Thread-177543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:05:16.754 [DEBUG] [Thread-177543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] client lang: <none>
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] server lang: <none>
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] kex follows: False
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] Compression: none
2026-04-11T22:05:16.755 [DEBUG] [Thread-177543] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:05:16.772 [DEBUG] [Thread-177543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:05:16.773 [DEBUG] [Thread-177543] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:05:16.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:05:16.774 [DEBUG] [Thread-177543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:05:16.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:05:16.776 [DEBUG] [Thread-177543] [transport.py] [_log()] userauth is OK
2026-04-11T22:05:16.777 [DEBUG] [Thread-177543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:05:16.777 [DEBUG] [Thread-177543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:05:16.777 [DEBUG] [Thread-177543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:05:16.777 [DEBUG] [Thread-177543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:05:16.802 [INFO] [Thread-177543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:05:16.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:05:17.937 [DEBUG] [Thread-177543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:05:17.937 [DEBUG] [Thread-177543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:05:17.937 [DEBUG] [Thread-177543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:05:17.979 [DEBUG] [Thread-177543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:05:17.979 [DEBUG] [Thread-177543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:05:17.982 [DEBUG] [Thread-177543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:05:17.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:05:17.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:05:17.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:05:17.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:05:18.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:05:18.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:05:18.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:05:18.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:05:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:05:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.836573 -999.00  +11.80   9.68     97  +11.40 1 3 1 3 1     0    0 0.41 0.79 ----- 9.7 9.7 273.0 11.2 13.4 -2.2 13.2 -0.3 12.8 -0.4 13.1 -1.5
2026-04-11T22:05:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:05:18.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:05:18.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.836573
2026-04-11T22:05:18.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:05:18.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:05:18.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:05:18.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:05:18.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:05:18.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:04:36', tmtdew=-0.00968, humidity=99.9917, cloud=0.0, wind=11.2226, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:04:39.907', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:05:18.007 [DEBUG] [Thread-177543] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:05:18.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:05:18.103 [DEBUG] [Thread-177546] [transport.py] [_log()] starting thread (client mode): 0xb0f8ded0
2026-04-11T22:05:18.103 [DEBUG] [Thread-177546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:05:18.118 [DEBUG] [Thread-177546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:05:18.118 [INFO] [Thread-177546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:05:18.127 [DEBUG] [Thread-177546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:05:18.127 [DEBUG] [Thread-177546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:05:18.127 [DEBUG] [Thread-177546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:05:18.127 [DEBUG] [Thread-177546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:18.127 [DEBUG] [Thread-177546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] client lang: <none>
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] server lang: <none>
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] kex follows: False
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] Compression: none
2026-04-11T22:05:18.128 [DEBUG] [Thread-177546] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:05:18.184 [DEBUG] [Thread-177546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:05:18.184 [DEBUG] [Thread-177546] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:05:18.184 [DEBUG] [Thread-177546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:05:18.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:05:18.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:05:18.244 [DEBUG] [Thread-177546] [transport.py] [_log()] userauth is OK
2026-04-11T22:05:18.245 [DEBUG] [Thread-177546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:05:18.254 [DEBUG] [Thread-177546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:05:18.254 [DEBUG] [Thread-177546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:05:18.254 [DEBUG] [Thread-177546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:05:18.278 [INFO] [Thread-177546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:05:18.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:05:18.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:05:19.080 [DEBUG] [Thread-177546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:05:19.080 [DEBUG] [Thread-177546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:05:19.128 [DEBUG] [Thread-177546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:05:19.128 [DEBUG] [Thread-177546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:05:19.137 [DEBUG] [Thread-177546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:05:19.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:05: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')
2026-04-11T22:05:19.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-04-11T22:05:19.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:05:19.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:05:19.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:05:19.171 [DEBUG] [Thread-177546] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:05:30.574 [DEBUG] [Thread-177548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:36.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:36.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:36.837 [DEBUG] [Thread-177549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:45.628 [DEBUG] [Thread-177550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:05:49.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:05:49.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:05:49.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-04-11T22:05:50.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 5, 12), 0.0325, 100.079, 0.0, 8.13528, 11.7419, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:05:50.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:05:12
2026-04-11T22:05:50.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:05:51.075 [DEBUG] [Thread-177551] [transport.py] [_log()] starting thread (client mode): 0xb0f8ed10
2026-04-11T22:05:51.075 [DEBUG] [Thread-177551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:05:51.095 [DEBUG] [Thread-177551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:05:51.095 [INFO] [Thread-177551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:05:51.098 [DEBUG] [Thread-177551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:05:51.098 [DEBUG] [Thread-177551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:05:51.098 [DEBUG] [Thread-177551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:05:51.098 [DEBUG] [Thread-177551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] client lang: <none>
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] server lang: <none>
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] kex follows: False
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] Compression: none
2026-04-11T22:05:51.099 [DEBUG] [Thread-177551] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:05:51.116 [DEBUG] [Thread-177551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:05:51.116 [DEBUG] [Thread-177551] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:05:51.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:05:51.117 [DEBUG] [Thread-177551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:05:51.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:05:51.160 [DEBUG] [Thread-177551] [transport.py] [_log()] userauth is OK
2026-04-11T22:05:51.160 [DEBUG] [Thread-177551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:05:51.160 [DEBUG] [Thread-177551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:05:51.160 [DEBUG] [Thread-177551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:05:51.160 [DEBUG] [Thread-177551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:05:51.175 [INFO] [Thread-177551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:05:51.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:05:51.987 [DEBUG] [Thread-177551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:05:51.988 [DEBUG] [Thread-177551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:05:51.989 [DEBUG] [Thread-177551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:05:52.028 [DEBUG] [Thread-177551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:05:52.028 [DEBUG] [Thread-177551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:05:52.032 [DEBUG] [Thread-177551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:05:52.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:05:52.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:05:52.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:05:52.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:05:52.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:05:52.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:05:52.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:05:52.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:05:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:05:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.836919 -999.00  +11.70   9.50     97  +11.30 1 3 1 3 1     0    0 0.42 0.97 ----- 9.5 9.5 265.8 10.7 13.4 -2.0 13.3 -0.3 12.8 -0.3 13.1 -1.5
2026-04-11T22:05:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:05:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:05:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.836919
2026-04-11T22:05:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:05:52.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:05:52.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:05:52.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:05:52.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:05:52.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:05:12', tmtdew=0.0325, humidity=100.079, cloud=0.0, wind=8.13528, temperature=11.7419, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:05:09.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:05:52.060 [DEBUG] [Thread-177551] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:05:52.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:05:52.154 [DEBUG] [Thread-177554] [transport.py] [_log()] starting thread (client mode): 0xb0f8e1a0
2026-04-11T22:05:52.154 [DEBUG] [Thread-177554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:05:52.169 [DEBUG] [Thread-177554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:05:52.169 [INFO] [Thread-177554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:05:52.177 [DEBUG] [Thread-177554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] client lang: <none>
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] server lang: <none>
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] kex follows: False
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] Compression: none
2026-04-11T22:05:52.178 [DEBUG] [Thread-177554] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:05:52.236 [DEBUG] [Thread-177554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:05:52.237 [DEBUG] [Thread-177554] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:05:52.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:05:52.238 [DEBUG] [Thread-177554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:05:52.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:05:52.296 [DEBUG] [Thread-177554] [transport.py] [_log()] userauth is OK
2026-04-11T22:05:52.296 [DEBUG] [Thread-177554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:05:52.296 [DEBUG] [Thread-177554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:05:52.296 [DEBUG] [Thread-177554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:05:52.296 [DEBUG] [Thread-177554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:05:52.321 [INFO] [Thread-177554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:05:52.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:05:52.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:05:53.180 [DEBUG] [Thread-177554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:05:53.180 [DEBUG] [Thread-177554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:05:53.228 [DEBUG] [Thread-177554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:05:53.228 [DEBUG] [Thread-177554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:05:53.239 [DEBUG] [Thread-177554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:05:53.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:05:53.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-04-11T22:05:53.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:05:53.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:05:53.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:05:53.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:05:53.276 [DEBUG] [Thread-177554] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:06:00.666 [DEBUG] [Thread-177556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:15.719 [DEBUG] [Thread-177557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:23.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:06:23.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:06:23.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-04-11T22:06:24.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 5, 47), -0.04019, 100.191, 0.0, 8.71776, 12.3165, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:06:24.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:05:47
2026-04-11T22:06:25.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:06:25.161 [DEBUG] [Thread-177558] [transport.py] [_log()] starting thread (client mode): 0xb0f8c190
2026-04-11T22:06:25.161 [DEBUG] [Thread-177558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:06:25.181 [DEBUG] [Thread-177558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:06:25.181 [INFO] [Thread-177558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] client lang: <none>
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] server lang: <none>
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] kex follows: False
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:06:25.185 [DEBUG] [Thread-177558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:06:25.186 [DEBUG] [Thread-177558] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:06:25.186 [DEBUG] [Thread-177558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:06:25.186 [DEBUG] [Thread-177558] [transport.py] [_log()] Compression: none
2026-04-11T22:06:25.186 [DEBUG] [Thread-177558] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:06:25.205 [DEBUG] [Thread-177558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:06:25.206 [DEBUG] [Thread-177558] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:06:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:06:25.207 [DEBUG] [Thread-177558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:06:25.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:06:25.209 [DEBUG] [Thread-177558] [transport.py] [_log()] userauth is OK
2026-04-11T22:06:25.210 [DEBUG] [Thread-177558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:06:25.210 [DEBUG] [Thread-177558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:06:25.210 [DEBUG] [Thread-177558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:06:25.210 [DEBUG] [Thread-177558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:06:25.243 [INFO] [Thread-177558] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:06:25.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:06:26.038 [DEBUG] [Thread-177558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:06:26.038 [DEBUG] [Thread-177558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:06:26.038 [DEBUG] [Thread-177558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:06:26.079 [DEBUG] [Thread-177558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:06:26.079 [DEBUG] [Thread-177558] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:06:26.083 [DEBUG] [Thread-177558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:06:26.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:06:26.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:06:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:06:26.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:06:26.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:06:26.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:06:26.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:06:26.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:06:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:06:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.837267 -999.00  +11.70   8.15     97  +11.30 1 3 1 3 1     0    0 0.42 1.10 ----- 8.2 8.2 275.0 12.3 13.4 -2.6 13.2 -0.3 12.8 -0.4 13.1 -2.0
2026-04-11T22:06:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:06:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:06:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.837267
2026-04-11T22:06:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:06:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:06:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:06:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:06:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:06:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:05:47', tmtdew=-0.04019, humidity=100.191, cloud=0.0, wind=8.71776, temperature=12.3165, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:05:39.869', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:06:26.111 [DEBUG] [Thread-177558] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:06:26.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:06:26.204 [DEBUG] [Thread-177561] [transport.py] [_log()] starting thread (client mode): 0xae5f3c10
2026-04-11T22:06:26.204 [DEBUG] [Thread-177561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:06:26.218 [DEBUG] [Thread-177561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:06:26.218 [INFO] [Thread-177561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:06:26.226 [DEBUG] [Thread-177561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:06:26.226 [DEBUG] [Thread-177561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:06:26.226 [DEBUG] [Thread-177561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:06:26.226 [DEBUG] [Thread-177561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] client lang: <none>
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] server lang: <none>
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] kex follows: False
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] Compression: none
2026-04-11T22:06:26.227 [DEBUG] [Thread-177561] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:06:26.286 [DEBUG] [Thread-177561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:06:26.287 [DEBUG] [Thread-177561] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:06:26.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:06:26.288 [DEBUG] [Thread-177561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:06:26.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:06:26.349 [DEBUG] [Thread-177561] [transport.py] [_log()] userauth is OK
2026-04-11T22:06:26.350 [DEBUG] [Thread-177561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:06:26.350 [DEBUG] [Thread-177561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:06:26.350 [DEBUG] [Thread-177561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:06:26.350 [DEBUG] [Thread-177561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:06:26.370 [INFO] [Thread-177561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:06:26.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:06:26.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:06:27.213 [DEBUG] [Thread-177561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:06:27.213 [DEBUG] [Thread-177561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:06:27.262 [DEBUG] [Thread-177561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:06:27.262 [DEBUG] [Thread-177561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:06:27.272 [DEBUG] [Thread-177561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:06:27.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:06:27.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-04-11T22:06: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-04-11T22:06:27.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:06:27.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:06:27.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:06:27.310 [DEBUG] [Thread-177561] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:06:30.758 [DEBUG] [Thread-177563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:36.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:36.458 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:36.894 [DEBUG] [Thread-177564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:45.813 [DEBUG] [Thread-177565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:06:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:06:57.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:06:57.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-04-11T22:06:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 6, 23), 0.035045, 100.062, 0.0, 8.87616, 11.7748, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:06:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:06:23
2026-04-11T22:06:59.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:06:59.183 [DEBUG] [Thread-177566] [transport.py] [_log()] starting thread (client mode): 0xae5f30d0
2026-04-11T22:06:59.183 [DEBUG] [Thread-177566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:06:59.205 [DEBUG] [Thread-177566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:06:59.206 [INFO] [Thread-177566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:06:59.209 [DEBUG] [Thread-177566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] client lang: <none>
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] server lang: <none>
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] kex follows: False
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] Compression: none
2026-04-11T22:06:59.210 [DEBUG] [Thread-177566] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:06:59.229 [DEBUG] [Thread-177566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:06:59.230 [DEBUG] [Thread-177566] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:06:59.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:06:59.231 [DEBUG] [Thread-177566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:06:59.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:06:59.233 [DEBUG] [Thread-177566] [transport.py] [_log()] userauth is OK
2026-04-11T22:06:59.233 [DEBUG] [Thread-177566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:06:59.233 [DEBUG] [Thread-177566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:06:59.233 [DEBUG] [Thread-177566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:06:59.233 [DEBUG] [Thread-177566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:06:59.268 [INFO] [Thread-177566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:06:59.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:07:00.104 [DEBUG] [Thread-177566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:07:00.104 [DEBUG] [Thread-177566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:07:00.105 [DEBUG] [Thread-177566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:07:00.145 [DEBUG] [Thread-177566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:07:00.145 [DEBUG] [Thread-177566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:07:00.148 [DEBUG] [Thread-177566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:07:00.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:07:00.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:07:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:07:00.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:07:00.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:07:00.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:07:00.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:07:00.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:07:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:07:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.837614 -999.00  +11.70   7.90     97  +11.30 1 3 1 3 1     0    0 0.42 1.08 ----- 7.9 7.9 281.0 9.9 13.4 -2.9 13.2 -0.2 12.8 -0.3 13.1 -2.0
2026-04-11T22:07:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:07:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:07:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.837614
2026-04-11T22:07:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:07:00.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:06:23', tmtdew=0.035045, humidity=100.062, cloud=0.0, wind=8.87616, temperature=11.7748, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:06:09.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:07:00.173 [DEBUG] [Thread-177566] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:07:00.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:07:00.266 [DEBUG] [Thread-177569] [transport.py] [_log()] starting thread (client mode): 0xb0f57100
2026-04-11T22:07:00.266 [DEBUG] [Thread-177569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:07:00.281 [DEBUG] [Thread-177569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:07:00.281 [INFO] [Thread-177569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:07:00.288 [DEBUG] [Thread-177569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] client lang: <none>
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] server lang: <none>
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] kex follows: False
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] Compression: none
2026-04-11T22:07:00.289 [DEBUG] [Thread-177569] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:07:00.346 [DEBUG] [Thread-177569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:07:00.347 [DEBUG] [Thread-177569] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:07:00.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:07:00.348 [DEBUG] [Thread-177569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:07:00.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:07:00.402 [DEBUG] [Thread-177569] [transport.py] [_log()] userauth is OK
2026-04-11T22:07:00.403 [DEBUG] [Thread-177569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:07:00.403 [DEBUG] [Thread-177569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:07:00.403 [DEBUG] [Thread-177569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:07:00.403 [DEBUG] [Thread-177569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:07:00.428 [INFO] [Thread-177569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:07:00.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:07:00.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:07:00.850 [DEBUG] [Thread-177571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:07:01.275 [DEBUG] [Thread-177569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:07:01.275 [DEBUG] [Thread-177569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:07:01.323 [DEBUG] [Thread-177569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:07:01.324 [DEBUG] [Thread-177569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:07:01.333 [DEBUG] [Thread-177569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:07:01.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:07:01.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-04-11T22:07:01.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-04-11T22:07:01.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:07:01.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:07:01.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:07:01.369 [DEBUG] [Thread-177569] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:07:15.904 [DEBUG] [Thread-177572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:07:30.939 [DEBUG] [Thread-177573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:07:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:07:31.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:07:31.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-04-11T22:07:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 6, 58), 0.03003, 100.095, 0.0, 8.77032, 11.7583, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:07:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:06:58
2026-04-11T22:07:33.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:07:33.211 [DEBUG] [Thread-177574] [transport.py] [_log()] starting thread (client mode): 0xb0f55ff0
2026-04-11T22:07:33.211 [DEBUG] [Thread-177574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:07:33.229 [DEBUG] [Thread-177574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:07:33.229 [INFO] [Thread-177574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] client lang: <none>
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] server lang: <none>
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] kex follows: False
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] Compression: none
2026-04-11T22:07:33.233 [DEBUG] [Thread-177574] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:07:33.249 [DEBUG] [Thread-177574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:07:33.249 [DEBUG] [Thread-177574] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:07:33.250 [DEBUG] [Thread-177574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:07:33.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:07:33.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:07:33.251 [DEBUG] [Thread-177574] [transport.py] [_log()] userauth is OK
2026-04-11T22:07:33.251 [DEBUG] [Thread-177574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:07:33.251 [DEBUG] [Thread-177574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:07:33.251 [DEBUG] [Thread-177574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:07:33.251 [DEBUG] [Thread-177574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:07:33.269 [INFO] [Thread-177574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:07:33.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:07:34.065 [DEBUG] [Thread-177574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:07:34.065 [DEBUG] [Thread-177574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:07:34.065 [DEBUG] [Thread-177574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:07:34.106 [DEBUG] [Thread-177574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:07:34.106 [DEBUG] [Thread-177574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:07:34.109 [DEBUG] [Thread-177574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:07:34.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:07:34.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:07:34.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:07:34.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:07:34.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:07:34.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:07:34.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:07:34.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:07:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:07:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.837961 -999.00  +11.80   6.26     97  +11.40 1 3 1 3 1     0    0 0.40 0.75 ----- 6.3 6.3 280.2 8.3 13.4 -2.9 13.3 -0.4 12.8 -0.3 13.1 -2.0
2026-04-11T22:07:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:07:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:07:34.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.837961
2026-04-11T22:07:34.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:07:34.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:07:34.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:07:34.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:07:34.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:07:34.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:06:58', tmtdew=0.03003, humidity=100.095, cloud=0.0, wind=8.77032, temperature=11.7583, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:06:39.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:07:34.134 [DEBUG] [Thread-177574] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:07:34.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:07:34.228 [DEBUG] [Thread-177577] [transport.py] [_log()] starting thread (client mode): 0xa7952500
2026-04-11T22:07:34.228 [DEBUG] [Thread-177577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:07:34.243 [DEBUG] [Thread-177577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:07:34.243 [INFO] [Thread-177577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:07:34.250 [DEBUG] [Thread-177577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:07:34.250 [DEBUG] [Thread-177577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:07:34.250 [DEBUG] [Thread-177577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] client lang: <none>
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] server lang: <none>
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] kex follows: False
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:07:34.251 [DEBUG] [Thread-177577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:07:34.252 [DEBUG] [Thread-177577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:07:34.252 [DEBUG] [Thread-177577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:07:34.252 [DEBUG] [Thread-177577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:07:34.252 [DEBUG] [Thread-177577] [transport.py] [_log()] Compression: none
2026-04-11T22:07:34.252 [DEBUG] [Thread-177577] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:07:34.308 [DEBUG] [Thread-177577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:07:34.309 [DEBUG] [Thread-177577] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:07:34.310 [DEBUG] [Thread-177577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:07:34.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:07:34.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:07:34.364 [DEBUG] [Thread-177577] [transport.py] [_log()] userauth is OK
2026-04-11T22:07:34.364 [DEBUG] [Thread-177577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:07:34.365 [DEBUG] [Thread-177577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:07:34.365 [DEBUG] [Thread-177577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:07:34.365 [DEBUG] [Thread-177577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:07:34.384 [INFO] [Thread-177577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:07:34.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:07:34.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:07:35.210 [DEBUG] [Thread-177577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:07:35.210 [DEBUG] [Thread-177577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:07:35.258 [DEBUG] [Thread-177577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:07:35.258 [DEBUG] [Thread-177577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:07:35.267 [DEBUG] [Thread-177577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:07:35.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:07:35.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:07:35.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-04-11T22:07:35.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:07:35.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:07:35.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:07:35.303 [DEBUG] [Thread-177577] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:07:36.663 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:07:36.665 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:07:36.960 [DEBUG] [Thread-177579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:07:45.971 [DEBUG] [Thread-177580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:01.025 [DEBUG] [Thread-177581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:05.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:08:05.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:08:05.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-04-11T22:08:06.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 7, 34), -0.02483, 100.091, 0.0, 10.5523, 12.1835, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:08:06.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:07:34
2026-04-11T22:08:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:08:07.194 [DEBUG] [Thread-177582] [transport.py] [_log()] starting thread (client mode): 0xa79531c0
2026-04-11T22:08:07.194 [DEBUG] [Thread-177582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:08:07.213 [DEBUG] [Thread-177582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:08:07.213 [INFO] [Thread-177582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] client lang: <none>
2026-04-11T22:08:07.217 [DEBUG] [Thread-177582] [transport.py] [_log()] server lang: <none>
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] kex follows: False
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] Compression: none
2026-04-11T22:08:07.218 [DEBUG] [Thread-177582] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:08:07.236 [DEBUG] [Thread-177582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:08:07.236 [DEBUG] [Thread-177582] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:08:07.237 [DEBUG] [Thread-177582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:08:07.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:08:07.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:08:07.239 [DEBUG] [Thread-177582] [transport.py] [_log()] userauth is OK
2026-04-11T22:08:07.239 [DEBUG] [Thread-177582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:08:07.239 [DEBUG] [Thread-177582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:08:07.239 [DEBUG] [Thread-177582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:08:07.239 [DEBUG] [Thread-177582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:08:07.264 [INFO] [Thread-177582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:08:07.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:08:08.058 [DEBUG] [Thread-177582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:08:08.058 [DEBUG] [Thread-177582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:08:08.059 [DEBUG] [Thread-177582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:08:08.099 [DEBUG] [Thread-177582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:08:08.100 [DEBUG] [Thread-177582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:08:08.102 [DEBUG] [Thread-177582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:08:08.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:08:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:08:08.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:08:08.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:08:08.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:08:08.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:08:08.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:08:08.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:08:08.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:08:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.838656 -999.00  +11.80   7.16     97  +11.40 1 3 1 3 1     0    0 0.41 0.85 ----- 7.2 7.2 280.2 9.7 13.4 -2.6 13.2 -0.2 12.7 -0.1 13.1 -1.7
2026-04-11T22:08:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:08:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:08:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.838656
2026-04-11T22:08:08.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:07:34', tmtdew=-0.02483, humidity=100.091, cloud=0.0, wind=10.5523, temperature=12.1835, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:07:39.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:08:08.125 [DEBUG] [Thread-177582] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:08:08.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:08:08.220 [DEBUG] [Thread-177585] [transport.py] [_log()] starting thread (client mode): 0xb0f8c730
2026-04-11T22:08:08.220 [DEBUG] [Thread-177585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:08:08.236 [DEBUG] [Thread-177585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:08:08.236 [INFO] [Thread-177585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] client lang: <none>
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] server lang: <none>
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] kex follows: False
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:08:08.244 [DEBUG] [Thread-177585] [transport.py] [_log()] Compression: none
2026-04-11T22:08:08.245 [DEBUG] [Thread-177585] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:08:08.303 [DEBUG] [Thread-177585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:08:08.303 [DEBUG] [Thread-177585] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:08:08.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:08:08.305 [DEBUG] [Thread-177585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:08:08.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:08:08.363 [DEBUG] [Thread-177585] [transport.py] [_log()] userauth is OK
2026-04-11T22:08:08.363 [DEBUG] [Thread-177585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:08:08.363 [DEBUG] [Thread-177585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:08:08.363 [DEBUG] [Thread-177585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:08:08.363 [DEBUG] [Thread-177585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:08:08.384 [INFO] [Thread-177585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:08:08.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:08:08.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:08:09.229 [DEBUG] [Thread-177585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:08:09.229 [DEBUG] [Thread-177585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:08:09.277 [DEBUG] [Thread-177585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:08:09.277 [DEBUG] [Thread-177585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:08:09.287 [DEBUG] [Thread-177585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:08:09.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:08:09.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:08:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:08:09.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:08:09.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:08:09.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:08:09.324 [DEBUG] [Thread-177585] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:08:16.065 [DEBUG] [Thread-177587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:31.118 [DEBUG] [Thread-177588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:36.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:36.871 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:37.028 [DEBUG] [Thread-177589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:08:39.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:08:39.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:08:39.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-04-11T22:08:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 8, 10), 0.035085, 100.062, 0.0, 7.9236, 11.7252, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:08:40.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:08:10
2026-04-11T22:08:41.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:08:41.184 [DEBUG] [Thread-177590] [transport.py] [_log()] starting thread (client mode): 0xb0f54490
2026-04-11T22:08:41.184 [DEBUG] [Thread-177590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:08:41.204 [DEBUG] [Thread-177590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:08:41.204 [INFO] [Thread-177590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:08:41.207 [DEBUG] [Thread-177590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] client lang: <none>
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] server lang: <none>
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] kex follows: False
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] Compression: none
2026-04-11T22:08:41.208 [DEBUG] [Thread-177590] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:08:41.218 [DEBUG] [Thread-177590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:08:41.219 [DEBUG] [Thread-177590] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:08:41.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:08:41.220 [DEBUG] [Thread-177590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:08:41.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:08:41.223 [DEBUG] [Thread-177590] [transport.py] [_log()] userauth is OK
2026-04-11T22:08:41.223 [DEBUG] [Thread-177590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:08:41.223 [DEBUG] [Thread-177590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:08:41.223 [DEBUG] [Thread-177590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:08:41.223 [DEBUG] [Thread-177590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:08:41.249 [INFO] [Thread-177590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:08:41.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:08:42.041 [DEBUG] [Thread-177590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:08:42.041 [DEBUG] [Thread-177590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:08:42.041 [DEBUG] [Thread-177590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:08:42.082 [DEBUG] [Thread-177590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:08:42.082 [DEBUG] [Thread-177590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:08:42.086 [DEBUG] [Thread-177590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:08:42.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:08:42.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:08:42.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:08:42.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:08:42.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:08:42.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:08:42.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:08:42.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:08:42.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:08:42.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.839003 -999.00  +11.70   8.96     97  +11.30 1 3 1 3 1     0    0 0.42 1.06 ----- 9.0 9.0 276.6 9.8 13.3 -2.7 13.2 -0.4 12.7 -0.3 13.1 -1.9
2026-04-11T22:08:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:08:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:08:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.839003
2026-04-11T22:08:42.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:08:42.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:08:42.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:08:42.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:08:42.116 [DEBUG] [Thread-177590] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:08:42.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:08:42.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:08:10', tmtdew=0.035085, humidity=100.062, cloud=0.0, wind=7.9236, temperature=11.7252, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:08:09.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:08:42.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:08:42.220 [DEBUG] [Thread-177593] [transport.py] [_log()] starting thread (client mode): 0xb0f57bb0
2026-04-11T22:08:42.220 [DEBUG] [Thread-177593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:08:42.235 [DEBUG] [Thread-177593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:08:42.235 [INFO] [Thread-177593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:42.243 [DEBUG] [Thread-177593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] client lang: <none>
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] server lang: <none>
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] kex follows: False
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] Compression: none
2026-04-11T22:08:42.244 [DEBUG] [Thread-177593] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:08:42.301 [DEBUG] [Thread-177593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:08:42.302 [DEBUG] [Thread-177593] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:08:42.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:08:42.303 [DEBUG] [Thread-177593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:08:42.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:08:42.356 [DEBUG] [Thread-177593] [transport.py] [_log()] userauth is OK
2026-04-11T22:08:42.356 [DEBUG] [Thread-177593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:08:42.356 [DEBUG] [Thread-177593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:08:42.357 [DEBUG] [Thread-177593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:08:42.357 [DEBUG] [Thread-177593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:08:42.375 [INFO] [Thread-177593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:08:42.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:08:42.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:08:43.174 [DEBUG] [Thread-177593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:08:43.174 [DEBUG] [Thread-177593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:08:43.226 [DEBUG] [Thread-177593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:08:43.226 [DEBUG] [Thread-177593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:08:43.235 [DEBUG] [Thread-177593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:08:43.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:08:43.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-04-11T22:08:43.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:08:43.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:08:43.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:08:43.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:08:43.272 [DEBUG] [Thread-177593] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:08:46.155 [DEBUG] [Thread-177595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:01.208 [DEBUG] [Thread-177596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:13.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:09:13.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:09:13.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-04-11T22:09:14.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 8, 46), -0.01967, 100.057, 0.0, 7.30656, 12.0509, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:09:14.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:08:46
2026-04-11T22:09:15.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:09:15.194 [DEBUG] [Thread-177597] [transport.py] [_log()] starting thread (client mode): 0xb0f8fa60
2026-04-11T22:09:15.194 [DEBUG] [Thread-177597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:09:15.214 [DEBUG] [Thread-177597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:09:15.214 [INFO] [Thread-177597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:09:15.217 [DEBUG] [Thread-177597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:09:15.217 [DEBUG] [Thread-177597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:09:15.217 [DEBUG] [Thread-177597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:09:15.217 [DEBUG] [Thread-177597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] client lang: <none>
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] server lang: <none>
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] kex follows: False
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:09:15.218 [DEBUG] [Thread-177597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:09:15.219 [DEBUG] [Thread-177597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:09:15.219 [DEBUG] [Thread-177597] [transport.py] [_log()] Compression: none
2026-04-11T22:09:15.219 [DEBUG] [Thread-177597] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:09:15.240 [DEBUG] [Thread-177597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:09:15.240 [DEBUG] [Thread-177597] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:09:15.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:09:15.241 [DEBUG] [Thread-177597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:09:15.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:09:15.243 [DEBUG] [Thread-177597] [transport.py] [_log()] userauth is OK
2026-04-11T22:09:15.244 [DEBUG] [Thread-177597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:09:15.244 [DEBUG] [Thread-177597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:09:15.244 [DEBUG] [Thread-177597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:09:15.244 [DEBUG] [Thread-177597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:09:15.278 [INFO] [Thread-177597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:09:15.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:09:16.091 [DEBUG] [Thread-177597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:09:16.091 [DEBUG] [Thread-177597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:09:16.091 [DEBUG] [Thread-177597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:09:16.132 [DEBUG] [Thread-177597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:09:16.132 [DEBUG] [Thread-177597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:09:16.136 [DEBUG] [Thread-177597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:09:16.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:09:16.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:09:16.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:09:16.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:09:16.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:09:16.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:09:16.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:09:16.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:09:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:09:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.839350 -999.00  +11.70   7.26     97  +11.30 1 3 1 3 1     0    0 0.42 1.17 ----- 7.3 7.3 278.8 9.8 13.3 -2.9 13.2 -0.4 12.6 -0.8 13.1 -1.5
2026-04-11T22:09:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:09:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:09:16.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.839350
2026-04-11T22:09:16.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:09:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:09:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:09:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:09:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:09:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:08:46', tmtdew=-0.01967, humidity=100.057, cloud=0.0, wind=7.30656, temperature=12.0509, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:08:39.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:09:16.162 [DEBUG] [Thread-177597] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:09:16.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:09:16.247 [DEBUG] [Thread-177600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:16.250 [DEBUG] [Thread-177601] [transport.py] [_log()] starting thread (client mode): 0xae518c10
2026-04-11T22:09:16.250 [DEBUG] [Thread-177601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:09:16.265 [DEBUG] [Thread-177601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:09:16.265 [INFO] [Thread-177601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] client lang: <none>
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] server lang: <none>
2026-04-11T22:09:16.273 [DEBUG] [Thread-177601] [transport.py] [_log()] kex follows: False
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] Compression: none
2026-04-11T22:09:16.274 [DEBUG] [Thread-177601] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:09:16.331 [DEBUG] [Thread-177601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:09:16.331 [DEBUG] [Thread-177601] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:09:16.332 [DEBUG] [Thread-177601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:09:16.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:09:16.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:09:16.387 [DEBUG] [Thread-177601] [transport.py] [_log()] userauth is OK
2026-04-11T22:09:16.387 [DEBUG] [Thread-177601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:09:16.387 [DEBUG] [Thread-177601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:09:16.387 [DEBUG] [Thread-177601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:09:16.387 [DEBUG] [Thread-177601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:09:16.405 [INFO] [Thread-177601] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:09: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-04-11T22:09:16.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:09:17.229 [DEBUG] [Thread-177601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:09:17.229 [DEBUG] [Thread-177601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:09:17.277 [DEBUG] [Thread-177601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:09:17.277 [DEBUG] [Thread-177601] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:09:17.286 [DEBUG] [Thread-177601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:09:17.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:09:17.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:09:17.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-04-11T22:09:17.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:09:17.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:09:17.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:09:17.320 [DEBUG] [Thread-177601] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:09:31.288 [DEBUG] [Thread-177603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:37.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:37.077 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:37.097 [DEBUG] [Thread-177604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:46.320 [DEBUG] [Thread-177605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:09:47.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:09:47.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:09:47.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-04-11T22:09:48.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 9, 21), 0.04266, 100.012, 0.0, 7.64136, 11.692, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:09:48.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:09:21
2026-04-11T22:09:49.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:09:49.222 [DEBUG] [Thread-177606] [transport.py] [_log()] starting thread (client mode): 0xb0fb75e0
2026-04-11T22:09:49.222 [DEBUG] [Thread-177606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:09:49.242 [DEBUG] [Thread-177606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:09:49.242 [INFO] [Thread-177606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:09:49.245 [DEBUG] [Thread-177606] [transport.py] [_log()] client lang: <none>
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] server lang: <none>
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] kex follows: False
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] Compression: none
2026-04-11T22:09:49.246 [DEBUG] [Thread-177606] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:09:49.263 [DEBUG] [Thread-177606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:09:49.263 [DEBUG] [Thread-177606] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:09:49.263 [DEBUG] [Thread-177606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:09:49.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:09:49.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:09:49.264 [DEBUG] [Thread-177606] [transport.py] [_log()] userauth is OK
2026-04-11T22:09:49.264 [DEBUG] [Thread-177606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:09:49.264 [DEBUG] [Thread-177606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:09:49.264 [DEBUG] [Thread-177606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:09:49.264 [DEBUG] [Thread-177606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:09:49.279 [INFO] [Thread-177606] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:09:49.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:09:50.069 [DEBUG] [Thread-177606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:09:50.070 [DEBUG] [Thread-177606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:09:50.070 [DEBUG] [Thread-177606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:09:50.110 [DEBUG] [Thread-177606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:09:50.110 [DEBUG] [Thread-177606] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:09:50.114 [DEBUG] [Thread-177606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:09:50.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:09:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:09:50.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:09:50.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:09:50.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:09:50.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:09:50.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:09:50.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:09:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:09:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.839697 -999.00  +11.70   5.75     97  +11.30 1 3 1 3 1     0    0 0.43 1.27 ----- 5.8 5.8 279.8 7.4 13.3 -2.3 13.2 -0.3 12.7 -0.2 13.0 -1.6
2026-04-11T22:09:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:09:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:09:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.839697
2026-04-11T22:09:50.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:09:50.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:09:50.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:09:50.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:09:50.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:09:50.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:09:21', tmtdew=0.04266, humidity=100.012, cloud=0.0, wind=7.64136, temperature=11.692, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:09:09.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:09:50.141 [DEBUG] [Thread-177606] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:09:50.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:09:50.234 [DEBUG] [Thread-177609] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ea0
2026-04-11T22:09:50.234 [DEBUG] [Thread-177609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:09:50.249 [DEBUG] [Thread-177609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:09:50.249 [INFO] [Thread-177609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] client lang: <none>
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] server lang: <none>
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] kex follows: False
2026-04-11T22:09:50.256 [DEBUG] [Thread-177609] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:09:50.257 [DEBUG] [Thread-177609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:09:50.257 [DEBUG] [Thread-177609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:09:50.257 [DEBUG] [Thread-177609] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:09:50.257 [DEBUG] [Thread-177609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:09:50.257 [DEBUG] [Thread-177609] [transport.py] [_log()] Compression: none
2026-04-11T22:09:50.257 [DEBUG] [Thread-177609] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:09:50.318 [DEBUG] [Thread-177609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:09:50.318 [DEBUG] [Thread-177609] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:09:50.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:09:50.319 [DEBUG] [Thread-177609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:09:50.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:09:50.377 [DEBUG] [Thread-177609] [transport.py] [_log()] userauth is OK
2026-04-11T22:09:50.378 [DEBUG] [Thread-177609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:09:50.378 [DEBUG] [Thread-177609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:09:50.378 [DEBUG] [Thread-177609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:09:50.378 [DEBUG] [Thread-177609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:09:50.402 [INFO] [Thread-177609] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:09:50.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:09:50.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:09:51.230 [DEBUG] [Thread-177609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:09:51.230 [DEBUG] [Thread-177609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:09:51.280 [DEBUG] [Thread-177609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:09:51.281 [DEBUG] [Thread-177609] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:09:51.290 [DEBUG] [Thread-177609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:09:51.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:09:51.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-04-11T22:09:51.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-04-11T22:09:51.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:09:51.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:09:51.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:09:51.327 [DEBUG] [Thread-177609] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:10:01.354 [DEBUG] [Thread-177611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:16.408 [DEBUG] [Thread-177612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:21.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:10:21.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:10:21.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-04-11T22:10:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 9, 57), 0.03255, 100.079, 0.0, 8.38224, 11.7252, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:10:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:09:57
2026-04-11T22:10:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:10:23.175 [DEBUG] [Thread-177613] [transport.py] [_log()] starting thread (client mode): 0xb0f55780
2026-04-11T22:10:23.175 [DEBUG] [Thread-177613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:10:23.195 [DEBUG] [Thread-177613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:10:23.195 [INFO] [Thread-177613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] client lang: <none>
2026-04-11T22:10:23.198 [DEBUG] [Thread-177613] [transport.py] [_log()] server lang: <none>
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] kex follows: False
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] Compression: none
2026-04-11T22:10:23.199 [DEBUG] [Thread-177613] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:10:23.215 [DEBUG] [Thread-177613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:10:23.216 [DEBUG] [Thread-177613] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:10:23.216 [DEBUG] [Thread-177613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:10:23.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:10:23.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:10:23.260 [DEBUG] [Thread-177613] [transport.py] [_log()] userauth is OK
2026-04-11T22:10:23.260 [DEBUG] [Thread-177613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:10:23.260 [DEBUG] [Thread-177613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:10:23.260 [DEBUG] [Thread-177613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:10:23.260 [DEBUG] [Thread-177613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:10:23.287 [INFO] [Thread-177613] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:10:23.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:10:24.384 [DEBUG] [Thread-177613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:10:24.384 [DEBUG] [Thread-177613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:10:24.384 [DEBUG] [Thread-177613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:10:24.425 [DEBUG] [Thread-177613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:10:24.425 [DEBUG] [Thread-177613] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:10:24.428 [DEBUG] [Thread-177613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:10:24.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:10:24.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:10:24.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:10:24.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:10:24.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:10:24.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:10:24.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:10:24.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:10:24.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:10:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.840045 -999.00  +11.70   6.61     97  +11.30 1 3 1 3 1     0    0 0.43 1.47 ----- 6.6 6.6 271.2 9.5 13.3 -2.6 13.2 -0.6 12.7 -0.2 13.0 -1.4
2026-04-11T22:10:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:10:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:10:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.840045
2026-04-11T22:10:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:10:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:10:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:10:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:10:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:10:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:09:57', tmtdew=0.03255, humidity=100.079, cloud=0.0, wind=8.38224, temperature=11.7252, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:09:39.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:10:24.453 [DEBUG] [Thread-177613] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:10:24.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:10:24.555 [DEBUG] [Thread-177616] [transport.py] [_log()] starting thread (client mode): 0xb0f56890
2026-04-11T22:10:24.555 [DEBUG] [Thread-177616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:10:24.570 [DEBUG] [Thread-177616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:10:24.570 [INFO] [Thread-177616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:10:24.579 [DEBUG] [Thread-177616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:10:24.579 [DEBUG] [Thread-177616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:10:24.579 [DEBUG] [Thread-177616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:10:24.579 [DEBUG] [Thread-177616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] client lang: <none>
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] server lang: <none>
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] kex follows: False
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] Compression: none
2026-04-11T22:10:24.580 [DEBUG] [Thread-177616] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:10:24.638 [DEBUG] [Thread-177616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:10:24.639 [DEBUG] [Thread-177616] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:10:24.639 [DEBUG] [Thread-177616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:10:24.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:10:24.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:10:24.700 [DEBUG] [Thread-177616] [transport.py] [_log()] userauth is OK
2026-04-11T22:10:24.700 [DEBUG] [Thread-177616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:10:24.700 [DEBUG] [Thread-177616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:10:24.701 [DEBUG] [Thread-177616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:10:24.701 [DEBUG] [Thread-177616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:10:24.723 [INFO] [Thread-177616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:10:24.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:10:24.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:10:25.555 [DEBUG] [Thread-177616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:10:25.555 [DEBUG] [Thread-177616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:10:25.603 [DEBUG] [Thread-177616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:10:25.603 [DEBUG] [Thread-177616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:10:25.612 [DEBUG] [Thread-177616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:10:25.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:10:25.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-04-11T22:10:25.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-04-11T22:10:25.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:10:25.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:10:25.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:10:25.650 [DEBUG] [Thread-177616] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:10:31.444 [DEBUG] [Thread-177618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:37.170 [DEBUG] [Thread-177619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:37.280 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:37.282 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:46.506 [DEBUG] [Thread-177620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:10:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:10:55.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:10:55.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-04-11T22:10:56.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 10, 33), -0.02476, 100.091, 0.0, 9.45864, 12.0841, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:10:56.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:10:33
2026-04-11T22:10:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:10:57.395 [DEBUG] [Thread-177621] [transport.py] [_log()] starting thread (client mode): 0xb0fb7040
2026-04-11T22:10:57.395 [DEBUG] [Thread-177621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:10:57.416 [DEBUG] [Thread-177621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:10:57.416 [INFO] [Thread-177621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] client lang: <none>
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] server lang: <none>
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] kex follows: False
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] Compression: none
2026-04-11T22:10:57.420 [DEBUG] [Thread-177621] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:10:57.438 [DEBUG] [Thread-177621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:10:57.438 [DEBUG] [Thread-177621] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:10:57.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:10:57.439 [DEBUG] [Thread-177621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:10:57.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:10:57.442 [DEBUG] [Thread-177621] [transport.py] [_log()] userauth is OK
2026-04-11T22:10:57.442 [DEBUG] [Thread-177621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:10:57.442 [DEBUG] [Thread-177621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:10:57.442 [DEBUG] [Thread-177621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:10:57.442 [DEBUG] [Thread-177621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:10:57.461 [INFO] [Thread-177621] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:10:57.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:10:58.245 [DEBUG] [Thread-177621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:10:58.245 [DEBUG] [Thread-177621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:10:58.245 [DEBUG] [Thread-177621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:10:58.286 [DEBUG] [Thread-177621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:10:58.286 [DEBUG] [Thread-177621] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:10:58.290 [DEBUG] [Thread-177621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:10:58.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:10:58.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:10:58.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:10:58.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:10:58.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:10:58.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:10:58.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:10:58.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:10:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:10:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.840391 -999.00  +11.70   6.68     97  +11.30 1 3 1 3 1     0    0 0.43 1.39 ----- 6.7 6.7 267.2 9.9 13.3 -3.1 13.1 -0.4 12.6 -0.5 13.1 -1.3
2026-04-11T22:10:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:10:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:10:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.840391
2026-04-11T22:10:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:10:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:10:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:10:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:10:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:10:58.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:10:33', tmtdew=-0.02476, humidity=100.091, cloud=0.0, wind=9.45864, temperature=12.0841, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:10:09.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:10:58.317 [DEBUG] [Thread-177621] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:10:58.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:10:58.411 [DEBUG] [Thread-177624] [transport.py] [_log()] starting thread (client mode): 0xb0f8fa60
2026-04-11T22:10:58.412 [DEBUG] [Thread-177624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:10:58.427 [DEBUG] [Thread-177624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:10:58.427 [INFO] [Thread-177624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] client lang: <none>
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] server lang: <none>
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] kex follows: False
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:10:58.435 [DEBUG] [Thread-177624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:10:58.436 [DEBUG] [Thread-177624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:10:58.436 [DEBUG] [Thread-177624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:10:58.436 [DEBUG] [Thread-177624] [transport.py] [_log()] Compression: none
2026-04-11T22:10:58.436 [DEBUG] [Thread-177624] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:10:58.494 [DEBUG] [Thread-177624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:10:58.495 [DEBUG] [Thread-177624] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:10:58.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:10:58.496 [DEBUG] [Thread-177624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:10:58.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:10:58.550 [DEBUG] [Thread-177624] [transport.py] [_log()] userauth is OK
2026-04-11T22:10:58.550 [DEBUG] [Thread-177624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:10:58.551 [DEBUG] [Thread-177624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:10:58.551 [DEBUG] [Thread-177624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:10:58.551 [DEBUG] [Thread-177624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:10:58.569 [INFO] [Thread-177624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:10:58.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:10:58.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:10:59.441 [DEBUG] [Thread-177624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:10:59.442 [DEBUG] [Thread-177624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:10:59.489 [DEBUG] [Thread-177624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:10:59.489 [DEBUG] [Thread-177624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:10:59.499 [DEBUG] [Thread-177624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:10:59.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:10:59.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-04-11T22:10:59.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-04-11T22:10:59.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:10:59.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:10:59.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:10:59.536 [DEBUG] [Thread-177624] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:11:01.543 [DEBUG] [Thread-177626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:11:16.605 [DEBUG] [Thread-177627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:11:29.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:11:29.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:11:29.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-04-11T22:11:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 11, 9), -0.01239, 100.045, 0.0, 8.1882, 11.6921, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:11:30.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:11:09
2026-04-11T22:11:31.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:11:31.548 [DEBUG] [Thread-177628] [transport.py] [_log()] starting thread (client mode): 0xb0fb7070
2026-04-11T22:11:31.548 [DEBUG] [Thread-177628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:11:31.570 [DEBUG] [Thread-177628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:11:31.570 [INFO] [Thread-177628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] client lang: <none>
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] server lang: <none>
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] kex follows: False
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:11:31.573 [DEBUG] [Thread-177628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:11:31.574 [DEBUG] [Thread-177628] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:11:31.574 [DEBUG] [Thread-177628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:11:31.574 [DEBUG] [Thread-177628] [transport.py] [_log()] Compression: none
2026-04-11T22:11:31.574 [DEBUG] [Thread-177628] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:11:31.590 [DEBUG] [Thread-177628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:11:31.591 [DEBUG] [Thread-177628] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:11:31.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:11:31.592 [DEBUG] [Thread-177628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:11:31.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:11:31.594 [DEBUG] [Thread-177628] [transport.py] [_log()] userauth is OK
2026-04-11T22:11:31.594 [DEBUG] [Thread-177628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:11:31.594 [DEBUG] [Thread-177628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:11:31.595 [DEBUG] [Thread-177628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:11:31.595 [DEBUG] [Thread-177628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:11:31.613 [INFO] [Thread-177628] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:11:31.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:11:31.641 [DEBUG] [Thread-177630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:11:32.409 [DEBUG] [Thread-177628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:11:32.410 [DEBUG] [Thread-177628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:11:32.410 [DEBUG] [Thread-177628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:11:32.451 [DEBUG] [Thread-177628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:11:32.451 [DEBUG] [Thread-177628] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:11:32.454 [DEBUG] [Thread-177628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:11:32.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:11:32.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:11:32.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:11:32.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:11:32.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:11:32.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:11:32.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:11:32.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:11:32.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:11:32.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.840739 -999.00  +11.70   6.52     97  +11.30 1 3 1 3 1     0    0 0.44 1.63 ----- 6.5 6.5 271.8 9.5 13.3 -3.0 13.1 -0.2 12.7 -0.3 13.1 -1.3
2026-04-11T22:11:32.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:11:32.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:11:32.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.840739
2026-04-11T22:11:32.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:11:32.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:11:32.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:11:32.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:11:32.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:11:32.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:11:09', tmtdew=-0.01239, humidity=100.045, cloud=0.0, wind=8.1882, temperature=11.6921, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:10:39.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:11:32.479 [DEBUG] [Thread-177628] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:11:32.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:11:32.573 [DEBUG] [Thread-177632] [transport.py] [_log()] starting thread (client mode): 0xb0fb4370
2026-04-11T22:11:32.573 [DEBUG] [Thread-177632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:11:32.588 [DEBUG] [Thread-177632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:11:32.588 [INFO] [Thread-177632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:11:32.595 [DEBUG] [Thread-177632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] client lang: <none>
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] server lang: <none>
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] kex follows: False
2026-04-11T22:11:32.596 [DEBUG] [Thread-177632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:11:32.597 [DEBUG] [Thread-177632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:11:32.597 [DEBUG] [Thread-177632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:11:32.597 [DEBUG] [Thread-177632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:11:32.597 [DEBUG] [Thread-177632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:11:32.597 [DEBUG] [Thread-177632] [transport.py] [_log()] Compression: none
2026-04-11T22:11:32.597 [DEBUG] [Thread-177632] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:11:32.652 [DEBUG] [Thread-177632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:11:32.652 [DEBUG] [Thread-177632] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:11:32.652 [DEBUG] [Thread-177632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:11:32.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:11:32.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:11:32.708 [DEBUG] [Thread-177632] [transport.py] [_log()] userauth is OK
2026-04-11T22:11:32.708 [DEBUG] [Thread-177632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:11:32.708 [DEBUG] [Thread-177632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:11:32.708 [DEBUG] [Thread-177632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:11:32.709 [DEBUG] [Thread-177632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:11:32.732 [INFO] [Thread-177632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:11:32.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:11:32.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:11:33.548 [DEBUG] [Thread-177632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:11:33.548 [DEBUG] [Thread-177632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:11:33.597 [DEBUG] [Thread-177632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:11:33.597 [DEBUG] [Thread-177632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:11:33.606 [DEBUG] [Thread-177632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:11:33.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:11:33.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-04-11T22:11:33.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-04-11T22:11:33.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:11:33.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:11:33.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:11:33.641 [DEBUG] [Thread-177632] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:11:37.247 [DEBUG] [Thread-177634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:11:37.487 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:11:37.489 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:11:46.678 [DEBUG] [Thread-177635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:01.730 [DEBUG] [Thread-177636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:03.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:12:03.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:12:03.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-04-11T22:12:04.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 11, 44), -0.03487, 100.157, 0.0, 8.36496, 12.1173, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:12:04.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:11:44
2026-04-11T22:12:05.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:12:05.451 [DEBUG] [Thread-177637] [transport.py] [_log()] starting thread (client mode): 0xb0fcc1c0
2026-04-11T22:12:05.451 [DEBUG] [Thread-177637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:12:05.471 [DEBUG] [Thread-177637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:12:05.471 [INFO] [Thread-177637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] client lang: <none>
2026-04-11T22:12:05.474 [DEBUG] [Thread-177637] [transport.py] [_log()] server lang: <none>
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] kex follows: False
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] Compression: none
2026-04-11T22:12:05.475 [DEBUG] [Thread-177637] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:12:05.484 [DEBUG] [Thread-177637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:12:05.485 [DEBUG] [Thread-177637] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:12:05.485 [DEBUG] [Thread-177637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:12:05.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:12:05.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:12:05.488 [DEBUG] [Thread-177637] [transport.py] [_log()] userauth is OK
2026-04-11T22:12:05.488 [DEBUG] [Thread-177637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:12:05.488 [DEBUG] [Thread-177637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:12:05.488 [DEBUG] [Thread-177637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:12:05.488 [DEBUG] [Thread-177637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:12:05.524 [INFO] [Thread-177637] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:12:05.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:12:06.334 [DEBUG] [Thread-177637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:12:06.334 [DEBUG] [Thread-177637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:12:06.334 [DEBUG] [Thread-177637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:12:06.375 [DEBUG] [Thread-177637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:12:06.375 [DEBUG] [Thread-177637] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:12:06.379 [DEBUG] [Thread-177637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:12:06.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:12:06.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:12:06.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:12:06.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:12:06.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:12:06.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:12:06.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:12:06.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:12:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:12:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.841086 -999.00  +11.70   6.72     97  +11.30 1 3 1 3 1     0    0 0.44 1.56 ----- 6.7 6.7 266.2 7.7 13.3 -2.1 13.2 -0.1 12.7 -0.2 13.1 -1.0
2026-04-11T22:12:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:12:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:12:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.841086
2026-04-11T22:12:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:12:06.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:12:06.408 [DEBUG] [Thread-177637] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:12:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:12:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:12:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:12:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:11:44', tmtdew=-0.03487, humidity=100.157, cloud=0.0, wind=8.36496, temperature=12.1173, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:11:09.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:12:06.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:12:06.504 [DEBUG] [Thread-177640] [transport.py] [_log()] starting thread (client mode): 0xa7953460
2026-04-11T22:12:06.504 [DEBUG] [Thread-177640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:12:06.519 [DEBUG] [Thread-177640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:12:06.519 [INFO] [Thread-177640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:12:06.527 [DEBUG] [Thread-177640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] client lang: <none>
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] server lang: <none>
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] kex follows: False
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] Compression: none
2026-04-11T22:12:06.528 [DEBUG] [Thread-177640] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:12:06.587 [DEBUG] [Thread-177640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:12:06.588 [DEBUG] [Thread-177640] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:12:06.589 [DEBUG] [Thread-177640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:12:06.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:12:06.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:12:06.643 [DEBUG] [Thread-177640] [transport.py] [_log()] userauth is OK
2026-04-11T22:12:06.643 [DEBUG] [Thread-177640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:12:06.644 [DEBUG] [Thread-177640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:12:06.644 [DEBUG] [Thread-177640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:12:06.644 [DEBUG] [Thread-177640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:12:06.668 [INFO] [Thread-177640] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:12:06.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:12:06.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:12:07.485 [DEBUG] [Thread-177640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:12:07.486 [DEBUG] [Thread-177640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:12:07.533 [DEBUG] [Thread-177640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:12:07.533 [DEBUG] [Thread-177640] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:12:07.542 [DEBUG] [Thread-177640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:12:07.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:12:07.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-04-11T22:12:07.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-04-11T22:12:07.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:12:07.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:12:07.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:12:07.580 [DEBUG] [Thread-177640] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:12:16.767 [DEBUG] [Thread-177642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:31.825 [DEBUG] [Thread-177643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:37.303 [DEBUG] [Thread-177644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:12:37.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:12:37.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-04-11T22:12:37.688 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:37.689 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:12:38.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 12, 20), -0.017445, 100.079, 0.0, 8.06472, 11.7087, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:12:38.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:12:20
2026-04-11T22:12:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:12:39.348 [DEBUG] [Thread-177645] [transport.py] [_log()] starting thread (client mode): 0xb0f8ed70
2026-04-11T22:12:39.348 [DEBUG] [Thread-177645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:12:39.370 [DEBUG] [Thread-177645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:12:39.370 [INFO] [Thread-177645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] client lang: <none>
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] server lang: <none>
2026-04-11T22:12:39.373 [DEBUG] [Thread-177645] [transport.py] [_log()] kex follows: False
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] Compression: none
2026-04-11T22:12:39.374 [DEBUG] [Thread-177645] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:12:39.393 [DEBUG] [Thread-177645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:12:39.393 [DEBUG] [Thread-177645] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:12:39.394 [DEBUG] [Thread-177645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:12:39.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:12:39.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:12:39.396 [DEBUG] [Thread-177645] [transport.py] [_log()] userauth is OK
2026-04-11T22:12:39.396 [DEBUG] [Thread-177645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:12:39.396 [DEBUG] [Thread-177645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:12:39.396 [DEBUG] [Thread-177645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:12:39.397 [DEBUG] [Thread-177645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:12:39.416 [INFO] [Thread-177645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:12:39.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:12:40.231 [DEBUG] [Thread-177645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:12:40.232 [DEBUG] [Thread-177645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:12:40.232 [DEBUG] [Thread-177645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:12:40.273 [DEBUG] [Thread-177645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:12:40.273 [DEBUG] [Thread-177645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:12:40.277 [DEBUG] [Thread-177645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:12:40.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:12:40.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:12:40.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:12:40.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:12:40.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:12:40.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:12:40.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:12:40.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:12:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:12:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.841433 -999.00  +11.80   4.98     97  +11.40 1 3 1 3 1     0    0 0.43 1.26 ----- 5.0 5.0 261.0 9.2 13.3 -2.4 13.1 -0.3 12.7 -0.4 13.1 -1.0
2026-04-11T22:12:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:12:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:12:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.841433
2026-04-11T22:12:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:12:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:12:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:12:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:12:40.306 [DEBUG] [Thread-177645] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:12:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:12:40.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:12:20', tmtdew=-0.017445, humidity=100.079, cloud=0.0, wind=8.06472, temperature=11.7087, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:11:39.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:12:40.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:12:40.398 [DEBUG] [Thread-177648] [transport.py] [_log()] starting thread (client mode): 0xb0f551b0
2026-04-11T22:12:40.399 [DEBUG] [Thread-177648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:12:40.414 [DEBUG] [Thread-177648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:12:40.414 [INFO] [Thread-177648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:12:40.421 [DEBUG] [Thread-177648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:12:40.421 [DEBUG] [Thread-177648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] client lang: <none>
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] server lang: <none>
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] kex follows: False
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] Compression: none
2026-04-11T22:12:40.422 [DEBUG] [Thread-177648] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:12:40.482 [DEBUG] [Thread-177648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:12:40.483 [DEBUG] [Thread-177648] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:12:40.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:12:40.484 [DEBUG] [Thread-177648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:12:40.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:12:40.541 [DEBUG] [Thread-177648] [transport.py] [_log()] userauth is OK
2026-04-11T22:12:40.542 [DEBUG] [Thread-177648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:12:40.542 [DEBUG] [Thread-177648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:12:40.542 [DEBUG] [Thread-177648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:12:40.542 [DEBUG] [Thread-177648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:12:40.563 [INFO] [Thread-177648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:12:40.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:12:40.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:12:41.427 [DEBUG] [Thread-177648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:12:41.427 [DEBUG] [Thread-177648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:12:41.475 [DEBUG] [Thread-177648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:12:41.475 [DEBUG] [Thread-177648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:12:41.485 [DEBUG] [Thread-177648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:12:41.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:12:41.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-04-11T22:12:41.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-04-11T22:12:41.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:12:41.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:12:41.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:12:41.523 [DEBUG] [Thread-177648] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:12:46.862 [DEBUG] [Thread-177650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:01.903 [DEBUG] [Thread-177651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:13:11.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:13:11.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-04-11T22:13:12.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 12, 55), -0.017405, 100.079, 0.0, 8.17056, 11.6255, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:13:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:12:55
2026-04-11T22:13:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:13:13.323 [DEBUG] [Thread-177652] [transport.py] [_log()] starting thread (client mode): 0xa79111b0
2026-04-11T22:13:13.323 [DEBUG] [Thread-177652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:13:13.344 [DEBUG] [Thread-177652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:13:13.345 [INFO] [Thread-177652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:13:13.357 [DEBUG] [Thread-177652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:13:13.357 [DEBUG] [Thread-177652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:13:13.357 [DEBUG] [Thread-177652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:13:13.357 [DEBUG] [Thread-177652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] client lang: <none>
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] server lang: <none>
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] kex follows: False
2026-04-11T22:13:13.358 [DEBUG] [Thread-177652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:13:13.359 [DEBUG] [Thread-177652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:13:13.359 [DEBUG] [Thread-177652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:13:13.359 [DEBUG] [Thread-177652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:13:13.360 [DEBUG] [Thread-177652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:13:13.360 [DEBUG] [Thread-177652] [transport.py] [_log()] Compression: none
2026-04-11T22:13:13.360 [DEBUG] [Thread-177652] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:13:13.378 [DEBUG] [Thread-177652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:13:13.379 [DEBUG] [Thread-177652] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:13:13.380 [DEBUG] [Thread-177652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:13:13.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:13:13.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:13:13.382 [DEBUG] [Thread-177652] [transport.py] [_log()] userauth is OK
2026-04-11T22:13:13.382 [DEBUG] [Thread-177652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:13:13.383 [DEBUG] [Thread-177652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:13:13.383 [DEBUG] [Thread-177652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:13:13.383 [DEBUG] [Thread-177652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:13:13.407 [INFO] [Thread-177652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:13:13.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:13:14.175 [DEBUG] [Thread-177652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:13:14.175 [DEBUG] [Thread-177652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:13:14.176 [DEBUG] [Thread-177652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:13:14.216 [DEBUG] [Thread-177652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:13:14.217 [DEBUG] [Thread-177652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:13:14.220 [DEBUG] [Thread-177652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:13:14.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:13:14.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:13:14.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:13:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:13:14.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:13:14.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:13:14.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:13:14.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:13:14.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:13:14.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.842128 -999.00  +11.80   6.94     97  +11.40 1 3 1 3 1     0    0 0.44 1.43 ----- 6.9 6.9 269.4 10.0 13.3 -2.8 13.2 -0.3 12.7 -0.1 13.0 -1.4
2026-04-11T22:13:14.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:13:14.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:13:14.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.842128
2026-04-11T22:13:14.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:13:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:13:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:13:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:13:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:13:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:12:55', tmtdew=-0.017405, humidity=100.079, cloud=0.0, wind=8.17056, temperature=11.6255, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:12:39.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:13:14.247 [DEBUG] [Thread-177652] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:13:14.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:13:14.341 [DEBUG] [Thread-177655] [transport.py] [_log()] starting thread (client mode): 0xa7957310
2026-04-11T22:13:14.341 [DEBUG] [Thread-177655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:13:14.356 [DEBUG] [Thread-177655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:13:14.356 [INFO] [Thread-177655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:13:14.364 [DEBUG] [Thread-177655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:13:14.364 [DEBUG] [Thread-177655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:13:14.364 [DEBUG] [Thread-177655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] client lang: <none>
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] server lang: <none>
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] kex follows: False
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] Compression: none
2026-04-11T22:13:14.365 [DEBUG] [Thread-177655] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:13:14.422 [DEBUG] [Thread-177655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:13:14.422 [DEBUG] [Thread-177655] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:13:14.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:13:14.423 [DEBUG] [Thread-177655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:13:14.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:13:14.480 [DEBUG] [Thread-177655] [transport.py] [_log()] userauth is OK
2026-04-11T22:13:14.480 [DEBUG] [Thread-177655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:13:14.481 [DEBUG] [Thread-177655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:13:14.481 [DEBUG] [Thread-177655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:13:14.481 [DEBUG] [Thread-177655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:13:14.502 [INFO] [Thread-177655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:13:14.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:13:14.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:13:15.301 [DEBUG] [Thread-177655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:13:15.301 [DEBUG] [Thread-177655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:13:15.348 [DEBUG] [Thread-177655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:13:15.349 [DEBUG] [Thread-177655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:13:15.357 [DEBUG] [Thread-177655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:13:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:13:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:13:15.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:13:15.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:13:15.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:13:15.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:13:15.389 [DEBUG] [Thread-177655] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:13:16.938 [DEBUG] [Thread-177657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:31.995 [DEBUG] [Thread-177658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:37.378 [DEBUG] [Thread-177659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:37.892 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:37.893 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:45.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:13:45.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:13:45.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:13:46.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 13, 31), -0.009845, 100.029, 0.0, 8.1, 11.609, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:13:46.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:13:31
2026-04-11T22:13:47.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:13:47.033 [DEBUG] [Thread-177660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:13:47.183 [DEBUG] [Thread-177661] [transport.py] [_log()] starting thread (client mode): 0xa7910dc0
2026-04-11T22:13:47.183 [DEBUG] [Thread-177661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:13:47.204 [DEBUG] [Thread-177661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:13:47.204 [INFO] [Thread-177661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:13:47.206 [DEBUG] [Thread-177661] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] client lang: <none>
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] server lang: <none>
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] kex follows: False
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] Compression: none
2026-04-11T22:13:47.207 [DEBUG] [Thread-177661] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:13:47.225 [DEBUG] [Thread-177661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:13:47.226 [DEBUG] [Thread-177661] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:13:47.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:13:47.228 [DEBUG] [Thread-177661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:13:47.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:13:47.230 [DEBUG] [Thread-177661] [transport.py] [_log()] userauth is OK
2026-04-11T22:13:47.231 [DEBUG] [Thread-177661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:13:47.231 [DEBUG] [Thread-177661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:13:47.231 [DEBUG] [Thread-177661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:13:47.231 [DEBUG] [Thread-177661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:13:47.253 [INFO] [Thread-177661] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:13:47.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:13:48.006 [DEBUG] [Thread-177661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:13:48.007 [DEBUG] [Thread-177661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:13:48.007 [DEBUG] [Thread-177661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:13:48.048 [DEBUG] [Thread-177661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:13:48.048 [DEBUG] [Thread-177661] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:13:48.051 [DEBUG] [Thread-177661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:13:48.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:13:48.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:13:48.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:13:48.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:13:48.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:13:48.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:13:48.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:13:48.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:13:48.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:13:48.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.842475 -999.00  +11.80   6.75     97  +11.40 1 3 1 3 1     0    0 0.43 1.15 ----- 6.8 6.8 258.4 9.8 13.3 -3.1 13.1 -0.4 12.6 -0.2 13.0 -1.4
2026-04-11T22:13:48.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:13:48.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:13:48.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.842475
2026-04-11T22:13:48.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:13:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:13:48.076 [DEBUG] [Thread-177661] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:13:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:13:48.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:13:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:13:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:13:31', tmtdew=-0.009845, humidity=100.029, cloud=0.0, wind=8.1, temperature=11.609, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:13:09.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:13:48.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:13:48.178 [DEBUG] [Thread-177664] [transport.py] [_log()] starting thread (client mode): 0xa79115d0
2026-04-11T22:13:48.178 [DEBUG] [Thread-177664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:13:48.194 [DEBUG] [Thread-177664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:13:48.194 [INFO] [Thread-177664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:13:48.202 [DEBUG] [Thread-177664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] client lang: <none>
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] server lang: <none>
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] kex follows: False
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:13:48.203 [DEBUG] [Thread-177664] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:13:48.204 [DEBUG] [Thread-177664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:13:48.204 [DEBUG] [Thread-177664] [transport.py] [_log()] Compression: none
2026-04-11T22:13:48.204 [DEBUG] [Thread-177664] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:13:48.265 [DEBUG] [Thread-177664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:13:48.265 [DEBUG] [Thread-177664] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:13:48.266 [DEBUG] [Thread-177664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:13:48.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:13:48.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:13:48.324 [DEBUG] [Thread-177664] [transport.py] [_log()] userauth is OK
2026-04-11T22:13:48.325 [DEBUG] [Thread-177664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:13:48.325 [DEBUG] [Thread-177664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:13:48.325 [DEBUG] [Thread-177664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:13:48.325 [DEBUG] [Thread-177664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:13:48.345 [INFO] [Thread-177664] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:13:48.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:13:48.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:13:49.180 [DEBUG] [Thread-177664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:13:49.181 [DEBUG] [Thread-177664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:13:49.232 [DEBUG] [Thread-177664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:13:49.232 [DEBUG] [Thread-177664] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:13:49.242 [DEBUG] [Thread-177664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:13:49.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:13:49.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-04-11T22:13:49.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-04-11T22:13:49.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:13:49.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:13:49.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:13:49.286 [DEBUG] [Thread-177664] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:14:02.068 [DEBUG] [Thread-177666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:17.118 [DEBUG] [Thread-177667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:14:19.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:14:19.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-04-11T22:14:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 14, 6), -0.01749, 100.079, 0.0, 9.14076, 11.6919, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:14:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:14:06
2026-04-11T22:14:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:14:21.095 [DEBUG] [Thread-177668] [transport.py] [_log()] starting thread (client mode): 0xae516fb0
2026-04-11T22:14:21.095 [DEBUG] [Thread-177668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:14:21.116 [DEBUG] [Thread-177668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:14:21.116 [INFO] [Thread-177668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] client lang: <none>
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] server lang: <none>
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] kex follows: False
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:14:21.121 [DEBUG] [Thread-177668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:14:21.122 [DEBUG] [Thread-177668] [transport.py] [_log()] Compression: none
2026-04-11T22:14:21.122 [DEBUG] [Thread-177668] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:14:21.138 [DEBUG] [Thread-177668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:14:21.139 [DEBUG] [Thread-177668] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:14:21.139 [DEBUG] [Thread-177668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:14:21.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:14:21.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:14:21.141 [DEBUG] [Thread-177668] [transport.py] [_log()] userauth is OK
2026-04-11T22:14:21.142 [DEBUG] [Thread-177668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:14:21.142 [DEBUG] [Thread-177668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:14:21.142 [DEBUG] [Thread-177668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:14:21.142 [DEBUG] [Thread-177668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:14:21.169 [INFO] [Thread-177668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:14:21.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:14:21.946 [DEBUG] [Thread-177668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:14:21.946 [DEBUG] [Thread-177668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:14:21.947 [DEBUG] [Thread-177668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:14:21.987 [DEBUG] [Thread-177668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:14:21.987 [DEBUG] [Thread-177668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:14:21.991 [DEBUG] [Thread-177668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:14:22.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:14:22.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:14:22.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:14:22.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:14:22.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:14:22.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:14:22.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:14:22.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:14:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:14:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.842822 -999.00  +11.80  10.09     97  +11.40 1 3 1 3 1     0    0 0.42 1.28 ----- 10.1 10.1 257.6 10.5 13.3 -3.6 13.1 -0.4 12.6 -0.1 13.0 -1.7
2026-04-11T22:14:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:14:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:14:22.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.842822
2026-04-11T22:14:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:14:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:14:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:14:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:14:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:14:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:14:06', tmtdew=-0.01749, humidity=100.079, cloud=0.0, wind=9.14076, temperature=11.6919, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:13:39.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:14:22.019 [DEBUG] [Thread-177668] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:14:22.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:14:22.113 [DEBUG] [Thread-177671] [transport.py] [_log()] starting thread (client mode): 0xae514400
2026-04-11T22:14:22.113 [DEBUG] [Thread-177671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:14:22.128 [DEBUG] [Thread-177671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:14:22.128 [INFO] [Thread-177671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] client lang: <none>
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] server lang: <none>
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] kex follows: False
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:14:22.136 [DEBUG] [Thread-177671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:14:22.137 [DEBUG] [Thread-177671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:14:22.137 [DEBUG] [Thread-177671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:14:22.137 [DEBUG] [Thread-177671] [transport.py] [_log()] Compression: none
2026-04-11T22:14:22.137 [DEBUG] [Thread-177671] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:14:22.195 [DEBUG] [Thread-177671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:14:22.195 [DEBUG] [Thread-177671] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:14:22.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:14:22.196 [DEBUG] [Thread-177671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:14:22.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:14:22.250 [DEBUG] [Thread-177671] [transport.py] [_log()] userauth is OK
2026-04-11T22:14:22.251 [DEBUG] [Thread-177671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:14:22.251 [DEBUG] [Thread-177671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:14:22.251 [DEBUG] [Thread-177671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:14:22.251 [DEBUG] [Thread-177671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:14:22.272 [INFO] [Thread-177671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:14:22.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:14:22.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:14:23.088 [DEBUG] [Thread-177671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:14:23.089 [DEBUG] [Thread-177671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:14:23.136 [DEBUG] [Thread-177671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:14:23.137 [DEBUG] [Thread-177671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:14:23.146 [DEBUG] [Thread-177671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:14:23.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:14:23.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-04-11T22:14: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') -> 00000000
2026-04-11T22:14:23.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:14:23.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:14:23.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:14:23.180 [DEBUG] [Thread-177671] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:14:32.153 [DEBUG] [Thread-177673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:37.435 [DEBUG] [Thread-177674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:38.097 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:38.098 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:47.206 [DEBUG] [Thread-177675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:14:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:14:53.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:14:53.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-04-11T22:14:54.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 14, 41), -0.03501, 100.157, 0.0, 10.3406, 12.217, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:14:54.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:14:41
2026-04-11T22:14:54.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:14:54.980 [DEBUG] [Thread-177676] [transport.py] [_log()] starting thread (client mode): 0xa7912290
2026-04-11T22:14:54.980 [DEBUG] [Thread-177676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:14:54.998 [DEBUG] [Thread-177676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:14:54.998 [INFO] [Thread-177676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:14:55.001 [DEBUG] [Thread-177676] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] client lang: <none>
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] server lang: <none>
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] kex follows: False
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] Compression: none
2026-04-11T22:14:55.002 [DEBUG] [Thread-177676] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:14:55.010 [DEBUG] [Thread-177676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:14:55.010 [DEBUG] [Thread-177676] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:14:55.010 [DEBUG] [Thread-177676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:14:55.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:14:55.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:14:55.011 [DEBUG] [Thread-177676] [transport.py] [_log()] userauth is OK
2026-04-11T22:14:55.012 [DEBUG] [Thread-177676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:14:55.012 [DEBUG] [Thread-177676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:14:55.012 [DEBUG] [Thread-177676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:14:55.012 [DEBUG] [Thread-177676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:14:55.028 [INFO] [Thread-177676] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:14:55.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:14:55.772 [DEBUG] [Thread-177676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:14:55.772 [DEBUG] [Thread-177676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:14:55.773 [DEBUG] [Thread-177676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:14:55.813 [DEBUG] [Thread-177676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:14:55.813 [DEBUG] [Thread-177676] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:14:55.817 [DEBUG] [Thread-177676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:14:55.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:14:55.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:14:55.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:14:55.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:14:55.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:14:55.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:14:55.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:14:55.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:14:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:14:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.843170 -999.00  +11.70   9.02     97  +11.30 1 3 1 3 1     0    0 0.43 1.15 ----- 9.0 9.0 268.0 9.8 13.3 -3.0 13.1 -0.2 12.7 -0.2 13.0 -1.4
2026-04-11T22:14:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:14:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:14:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.843170
2026-04-11T22:14:55.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:14:55.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:14:55.843 [DEBUG] [Thread-177676] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:14:55.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:14:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:14:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:14:55.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:14:41', tmtdew=-0.03501, humidity=100.157, cloud=0.0, wind=10.3406, temperature=12.217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:14:09.888', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:14:55.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:14:55.937 [DEBUG] [Thread-177679] [transport.py] [_log()] starting thread (client mode): 0xa7956110
2026-04-11T22:14:55.937 [DEBUG] [Thread-177679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:14:55.954 [DEBUG] [Thread-177679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:14:55.954 [INFO] [Thread-177679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:14:55.962 [DEBUG] [Thread-177679] [transport.py] [_log()] client lang: <none>
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] server lang: <none>
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] kex follows: False
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] Compression: none
2026-04-11T22:14:55.963 [DEBUG] [Thread-177679] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:14:56.022 [DEBUG] [Thread-177679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:14:56.023 [DEBUG] [Thread-177679] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:14:56.023 [DEBUG] [Thread-177679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:14:56.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:14:56.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:14:56.082 [DEBUG] [Thread-177679] [transport.py] [_log()] userauth is OK
2026-04-11T22:14:56.082 [DEBUG] [Thread-177679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:14:56.082 [DEBUG] [Thread-177679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:14:56.083 [DEBUG] [Thread-177679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:14:56.083 [DEBUG] [Thread-177679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:14:56.103 [INFO] [Thread-177679] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:14:56.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:14:56.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:14:57.178 [DEBUG] [Thread-177679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:14:57.178 [DEBUG] [Thread-177679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:14:57.178 [DEBUG] [Thread-177679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:14:57.179 [DEBUG] [Thread-177679] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:14:57.188 [DEBUG] [Thread-177679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:14:57.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:14:57.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:14:57.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-04-11T22:14:57.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:14:57.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:14:57.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:14:57.225 [DEBUG] [Thread-177679] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:15:02.237 [DEBUG] [Thread-177681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:15:17.291 [DEBUG] [Thread-177682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:15:27.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:15:27.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:15:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:15:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 15, 17), -0.017505, 100.079, 0.0, 7.64136, 11.7085, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:15:28.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:15:17
2026-04-11T22:15:28.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:15:29.072 [DEBUG] [Thread-177683] [transport.py] [_log()] starting thread (client mode): 0xa7957e20
2026-04-11T22:15:29.072 [DEBUG] [Thread-177683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:15:29.094 [DEBUG] [Thread-177683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:15:29.094 [INFO] [Thread-177683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:15:29.096 [DEBUG] [Thread-177683] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] client lang: <none>
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] server lang: <none>
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] kex follows: False
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] Compression: none
2026-04-11T22:15:29.097 [DEBUG] [Thread-177683] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:15:29.115 [DEBUG] [Thread-177683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:15:29.115 [DEBUG] [Thread-177683] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:15:29.116 [DEBUG] [Thread-177683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:15:29.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:15:29.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:15:29.118 [DEBUG] [Thread-177683] [transport.py] [_log()] userauth is OK
2026-04-11T22:15:29.118 [DEBUG] [Thread-177683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:15:29.118 [DEBUG] [Thread-177683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:15:29.118 [DEBUG] [Thread-177683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:15:29.119 [DEBUG] [Thread-177683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:15:29.142 [INFO] [Thread-177683] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:15:29.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:15:30.720 [DEBUG] [Thread-177683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:15:30.725 [DEBUG] [Thread-177683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:15:30.726 [DEBUG] [Thread-177683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:15:30.761 [DEBUG] [Thread-177683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:15:30.761 [DEBUG] [Thread-177683] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:15:30.765 [DEBUG] [Thread-177683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:15:30.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:15:30.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:15:30.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:15:30.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:15:30.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:15:30.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:15:30.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:15:30.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:15:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:15:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.843864 -999.00  +11.80   6.78     97  +11.40 1 3 1 3 1     0    0 0.42 0.73 ----- 6.8 6.8 266.2 8.8 13.2 -2.7 13.1 -0.2 12.7 -0.3 13.0 -1.3
2026-04-11T22:15:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:15:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:15:30.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.843864
2026-04-11T22:15:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:15:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:15:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:15:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:15:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:15:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:15:17', tmtdew=-0.017505, humidity=100.079, cloud=0.0, wind=7.64136, temperature=11.7085, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:15:09.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:15:30.791 [DEBUG] [Thread-177683] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:15:30.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:15:30.884 [DEBUG] [Thread-177685] [transport.py] [_log()] starting thread (client mode): 0xa7911180
2026-04-11T22:15:30.885 [DEBUG] [Thread-177685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:15:30.899 [DEBUG] [Thread-177685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:15:30.899 [INFO] [Thread-177685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:15:30.907 [DEBUG] [Thread-177685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:15:30.907 [DEBUG] [Thread-177685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:15:30.908 [DEBUG] [Thread-177685] [transport.py] [_log()] client lang: <none>
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] server lang: <none>
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] kex follows: False
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] Compression: none
2026-04-11T22:15:30.909 [DEBUG] [Thread-177685] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:15:30.965 [DEBUG] [Thread-177685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:15:30.965 [DEBUG] [Thread-177685] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:15:30.966 [DEBUG] [Thread-177685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:15:30.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:15:30.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:15:31.021 [DEBUG] [Thread-177685] [transport.py] [_log()] userauth is OK
2026-04-11T22:15:31.021 [DEBUG] [Thread-177685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:15:31.021 [DEBUG] [Thread-177685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:15:31.022 [DEBUG] [Thread-177685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:15:31.022 [DEBUG] [Thread-177685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:15:31.040 [INFO] [Thread-177685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:15:31.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:15:31.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:15:31.862 [DEBUG] [Thread-177685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:15:31.862 [DEBUG] [Thread-177685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:15:31.910 [DEBUG] [Thread-177685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:15:31.910 [DEBUG] [Thread-177685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:15:31.920 [DEBUG] [Thread-177685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:15:31.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:15:31.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-04-11T22:15:31.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-04-11T22:15:31.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:15:31.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:15:31.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:15:31.956 [DEBUG] [Thread-177685] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:15:32.329 [DEBUG] [Thread-177687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:15:37.490 [DEBUG] [Thread-177688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:15:38.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:15:38.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:15:47.392 [DEBUG] [Thread-177689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:16:01.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:16:01.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-04-11T22:16:02.426 [DEBUG] [Thread-177690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:03.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 15, 52), -0.03503, 100.157, 0.0, 4.87224, 12.217, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:16:03.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:15:52
2026-04-11T22:16:03.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:16:03.775 [DEBUG] [Thread-177691] [transport.py] [_log()] starting thread (client mode): 0xb0fb5a80
2026-04-11T22:16:03.775 [DEBUG] [Thread-177691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:16:03.794 [DEBUG] [Thread-177691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:16:03.794 [INFO] [Thread-177691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:16:03.797 [DEBUG] [Thread-177691] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:16:03.797 [DEBUG] [Thread-177691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:16:03.797 [DEBUG] [Thread-177691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:16:03.797 [DEBUG] [Thread-177691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:03.797 [DEBUG] [Thread-177691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:03.797 [DEBUG] [Thread-177691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] client lang: <none>
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] server lang: <none>
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] kex follows: False
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] Compression: none
2026-04-11T22:16:03.798 [DEBUG] [Thread-177691] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:16:03.811 [DEBUG] [Thread-177691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:16:03.811 [DEBUG] [Thread-177691] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:16:03.812 [DEBUG] [Thread-177691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:16:03.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:16:03.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:16:03.814 [DEBUG] [Thread-177691] [transport.py] [_log()] userauth is OK
2026-04-11T22:16:03.814 [DEBUG] [Thread-177691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:16:03.814 [DEBUG] [Thread-177691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:16:03.814 [DEBUG] [Thread-177691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:16:03.814 [DEBUG] [Thread-177691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:16:03.833 [INFO] [Thread-177691] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:16:03.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:16:04.434 [DEBUG] [Thread-177691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:16:04.434 [DEBUG] [Thread-177691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:16:04.434 [DEBUG] [Thread-177691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:16:04.475 [DEBUG] [Thread-177691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:16:04.475 [DEBUG] [Thread-177691] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:16:04.479 [DEBUG] [Thread-177691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:16:04.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:16:04.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:16:04.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:16:04.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:16:04.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:16:04.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:16:04.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:16:04.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:16:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:16:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.844212 -999.00  +11.70   5.72     97  +11.30 1 3 1 3 1     0    0 0.42 0.80 ----- 5.7 5.7 262.2 9.9 13.3 -2.4 13.1 -0.3 12.7 -0.6 13.0 -1.0
2026-04-11T22:16:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:16:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:16:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.844212
2026-04-11T22:16:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:16:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:16:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:16:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:16:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:16:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:15:52', tmtdew=-0.03503, humidity=100.157, cloud=0.0, wind=4.87224, temperature=12.217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:15:39.917', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:16:04.507 [DEBUG] [Thread-177691] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:16: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-04-11T22:16:04.602 [DEBUG] [Thread-177694] [transport.py] [_log()] starting thread (client mode): 0xa79571f0
2026-04-11T22:16:04.602 [DEBUG] [Thread-177694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:16:04.617 [DEBUG] [Thread-177694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:16:04.617 [INFO] [Thread-177694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:16:04.625 [DEBUG] [Thread-177694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:16:04.626 [DEBUG] [Thread-177694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:16:04.626 [DEBUG] [Thread-177694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:16:04.626 [DEBUG] [Thread-177694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:04.626 [DEBUG] [Thread-177694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:04.626 [DEBUG] [Thread-177694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:04.626 [DEBUG] [Thread-177694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] client lang: <none>
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] server lang: <none>
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] kex follows: False
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] Compression: none
2026-04-11T22:16:04.627 [DEBUG] [Thread-177694] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:16:04.684 [DEBUG] [Thread-177694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:16:04.685 [DEBUG] [Thread-177694] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:16:04.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:16:04.686 [DEBUG] [Thread-177694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:16:04.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:16:04.744 [DEBUG] [Thread-177694] [transport.py] [_log()] userauth is OK
2026-04-11T22:16:04.744 [DEBUG] [Thread-177694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:16:04.744 [DEBUG] [Thread-177694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:16:04.744 [DEBUG] [Thread-177694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:16:04.744 [DEBUG] [Thread-177694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:16:04.763 [INFO] [Thread-177694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:16:04.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:16:04.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:16:05.609 [DEBUG] [Thread-177694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:16:05.609 [DEBUG] [Thread-177694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:16:05.657 [DEBUG] [Thread-177694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:16:05.657 [DEBUG] [Thread-177694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:16:05.666 [DEBUG] [Thread-177694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:16:05.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:16:05.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:16:05.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-04-11T22:16:05.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:16:05.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:16:05.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:16:05.700 [DEBUG] [Thread-177694] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:16:17.457 [DEBUG] [Thread-177696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:32.517 [DEBUG] [Thread-177697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:16:35.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:16:35.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-04-11T22:16:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 16, 28), -0.017495, 100.079, 0.0, 8.08236, 11.6919, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:16:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:16:28
2026-04-11T22:16:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:16:37.542 [DEBUG] [Thread-177698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:37.547 [DEBUG] [Thread-177699] [transport.py] [_log()] starting thread (client mode): 0xb0fb64d0
2026-04-11T22:16:37.547 [DEBUG] [Thread-177699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:16:37.567 [DEBUG] [Thread-177699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:16:37.567 [INFO] [Thread-177699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:16:37.570 [DEBUG] [Thread-177699] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:16:37.570 [DEBUG] [Thread-177699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:16:37.570 [DEBUG] [Thread-177699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:16:37.570 [DEBUG] [Thread-177699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:37.570 [DEBUG] [Thread-177699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] client lang: <none>
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] server lang: <none>
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] kex follows: False
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:16:37.571 [DEBUG] [Thread-177699] [transport.py] [_log()] Compression: none
2026-04-11T22:16:37.572 [DEBUG] [Thread-177699] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:16:37.589 [DEBUG] [Thread-177699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:16:37.590 [DEBUG] [Thread-177699] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:16:37.590 [DEBUG] [Thread-177699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:16:37.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:16:37.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:16:37.635 [DEBUG] [Thread-177699] [transport.py] [_log()] userauth is OK
2026-04-11T22:16:37.636 [DEBUG] [Thread-177699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:16:37.636 [DEBUG] [Thread-177699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:16:37.636 [DEBUG] [Thread-177699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:16:37.636 [DEBUG] [Thread-177699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:16:37.667 [INFO] [Thread-177699] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:16:37.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:16:38.266 [DEBUG] [Thread-177699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:16:38.267 [DEBUG] [Thread-177699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:16:38.267 [DEBUG] [Thread-177699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:16:38.308 [DEBUG] [Thread-177699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:16:38.308 [DEBUG] [Thread-177699] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:16:38.314 [DEBUG] [Thread-177699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:16:38.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:16:38.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:16:38.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:16:38.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:16:38.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:16:38.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:16:38.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:16:38.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:16:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:16:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.844558 -999.00  +11.80   8.08     97  +11.40 1 3 1 3 1     0    0 0.40 0.41 ----- 8.1 8.1 279.6 9.2 -999.0 -999.0 13.1 -0.3 12.7 -0.1 13.0 -0.9
2026-04-11T22:16:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:16:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:16:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.844558
2026-04-11T22:16:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:16:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:16:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:16:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:16:38.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:16:38.344 [DEBUG] [Thread-177699] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:16:38.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:16:28', tmtdew=-0.017495, humidity=100.079, cloud=0.0, wind=8.08236, temperature=11.6919, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:16:09.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:16:38.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:16:38.437 [DEBUG] [Thread-177702] [transport.py] [_log()] starting thread (client mode): 0xb0fb7ee0
2026-04-11T22:16:38.438 [DEBUG] [Thread-177702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:16:38.452 [DEBUG] [Thread-177702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:16:38.453 [INFO] [Thread-177702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:38.461 [DEBUG] [Thread-177702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] client lang: <none>
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] server lang: <none>
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] kex follows: False
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] Compression: none
2026-04-11T22:16:38.462 [DEBUG] [Thread-177702] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:16:38.504 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:38.506 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:16:38.519 [DEBUG] [Thread-177702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:16:38.519 [DEBUG] [Thread-177702] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:16:38.520 [DEBUG] [Thread-177702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:16:38.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:16:38.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:16:38.575 [DEBUG] [Thread-177702] [transport.py] [_log()] userauth is OK
2026-04-11T22:16:38.576 [DEBUG] [Thread-177702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:16:38.576 [DEBUG] [Thread-177702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:16:38.576 [DEBUG] [Thread-177702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:16:38.576 [DEBUG] [Thread-177702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:16:38.594 [INFO] [Thread-177702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:16:38.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:16:38.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:16:39.427 [DEBUG] [Thread-177702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:16:39.427 [DEBUG] [Thread-177702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:16:39.475 [DEBUG] [Thread-177702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:16:39.475 [DEBUG] [Thread-177702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:16:39.485 [DEBUG] [Thread-177702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:16:39.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:16:39.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-04-11T22:16:39.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-04-11T22:16:39.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:16:39.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:16:39.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:16:39.523 [DEBUG] [Thread-177702] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:16:47.553 [DEBUG] [Thread-177704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:02.605 [DEBUG] [Thread-177705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:17:09.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:17:09.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-04-11T22:17:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 17, 3), -0.01498, 100.062, 0.0, 9.49356, 11.6919, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:17:10.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:17:03
2026-04-11T22:17:11.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:17:11.367 [DEBUG] [Thread-177706] [transport.py] [_log()] starting thread (client mode): 0xa7952650
2026-04-11T22:17:11.368 [DEBUG] [Thread-177706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:17:11.387 [DEBUG] [Thread-177706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:17:11.388 [INFO] [Thread-177706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] client lang: <none>
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] server lang: <none>
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] kex follows: False
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:17:11.390 [DEBUG] [Thread-177706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:17:11.391 [DEBUG] [Thread-177706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:17:11.391 [DEBUG] [Thread-177706] [transport.py] [_log()] Compression: none
2026-04-11T22:17:11.391 [DEBUG] [Thread-177706] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:17:11.408 [DEBUG] [Thread-177706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:17:11.409 [DEBUG] [Thread-177706] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:17:11.409 [DEBUG] [Thread-177706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:17:11.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:17:11.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:17:11.411 [DEBUG] [Thread-177706] [transport.py] [_log()] userauth is OK
2026-04-11T22:17:11.411 [DEBUG] [Thread-177706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:17:11.411 [DEBUG] [Thread-177706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:17:11.411 [DEBUG] [Thread-177706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:17:11.411 [DEBUG] [Thread-177706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:17:11.436 [INFO] [Thread-177706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:17:11.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:17:12.064 [DEBUG] [Thread-177706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:17:12.064 [DEBUG] [Thread-177706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:17:12.065 [DEBUG] [Thread-177706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:17:12.105 [DEBUG] [Thread-177706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:17:12.105 [DEBUG] [Thread-177706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:17:12.109 [DEBUG] [Thread-177706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:17:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:17:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:17:12.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:17:12.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:17:12.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:17:12.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:17:12.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:17:12.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:17:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:17:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.844906 -999.00  +11.80   8.10     97  +11.40 1 3 1 3 1     0    0 0.40 0.29 ----- 8.1 8.1 270.8 8.9 13.3 -2.7 13.1 -0.2 12.7 -0.4 13.0 -1.1
2026-04-11T22:17:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:17:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:17:12.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.844906
2026-04-11T22:17:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:17:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:17:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:17:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:17:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:17:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:17:03', tmtdew=-0.01498, humidity=100.062, cloud=0.0, wind=9.49356, temperature=11.6919, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:16:39.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:17:12.134 [DEBUG] [Thread-177706] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:17:12.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:17:12.225 [DEBUG] [Thread-177709] [transport.py] [_log()] starting thread (client mode): 0xa79519c0
2026-04-11T22:17:12.225 [DEBUG] [Thread-177709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:17:12.240 [DEBUG] [Thread-177709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:17:12.240 [INFO] [Thread-177709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:17:12.248 [DEBUG] [Thread-177709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:17:12.248 [DEBUG] [Thread-177709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:17:12.248 [DEBUG] [Thread-177709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] client lang: <none>
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] server lang: <none>
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] kex follows: False
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] Compression: none
2026-04-11T22:17:12.249 [DEBUG] [Thread-177709] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:17:12.306 [DEBUG] [Thread-177709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:17:12.307 [DEBUG] [Thread-177709] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:17:12.307 [DEBUG] [Thread-177709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:17:12.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:17:12.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:17:12.362 [DEBUG] [Thread-177709] [transport.py] [_log()] userauth is OK
2026-04-11T22:17:12.362 [DEBUG] [Thread-177709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:17:12.362 [DEBUG] [Thread-177709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:17:12.362 [DEBUG] [Thread-177709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:17:12.362 [DEBUG] [Thread-177709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:17:12.380 [INFO] [Thread-177709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:17:12.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:17:12.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:17:13.194 [DEBUG] [Thread-177709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:17:13.194 [DEBUG] [Thread-177709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:17:13.242 [DEBUG] [Thread-177709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:17:13.242 [DEBUG] [Thread-177709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:17:13.251 [DEBUG] [Thread-177709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:17:13.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:17:13.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:17:13.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-04-11T22:17:13.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:17:13.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:17:13.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:17:13.288 [DEBUG] [Thread-177709] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:17:17.643 [DEBUG] [Thread-177711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:32.694 [DEBUG] [Thread-177712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:37.617 [DEBUG] [Thread-177713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:38.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:38.722 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:17:43.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:17:43.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:17:43.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-04-11T22:17:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 17, 3), -0.01498, 100.062, 0.0, 9.49356, 11.6919, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:17:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:17:03
2026-04-11T22:17:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:17:45.176 [DEBUG] [Thread-177714] [transport.py] [_log()] starting thread (client mode): 0xa7911ed0
2026-04-11T22:17:45.176 [DEBUG] [Thread-177714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:17:45.196 [DEBUG] [Thread-177714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:17:45.196 [INFO] [Thread-177714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] client lang: <none>
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] server lang: <none>
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] kex follows: False
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] Compression: none
2026-04-11T22:17:45.199 [DEBUG] [Thread-177714] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:17:45.208 [DEBUG] [Thread-177714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:17:45.208 [DEBUG] [Thread-177714] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:17:45.209 [DEBUG] [Thread-177714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:17:45.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:17:45.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:17:45.211 [DEBUG] [Thread-177714] [transport.py] [_log()] userauth is OK
2026-04-11T22:17:45.211 [DEBUG] [Thread-177714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:17:45.211 [DEBUG] [Thread-177714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:17:45.211 [DEBUG] [Thread-177714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:17:45.211 [DEBUG] [Thread-177714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:17:45.234 [INFO] [Thread-177714] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:17:45.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:17:45.826 [DEBUG] [Thread-177714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:17:45.826 [DEBUG] [Thread-177714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:17:45.826 [DEBUG] [Thread-177714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:17:45.867 [DEBUG] [Thread-177714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:17:45.867 [DEBUG] [Thread-177714] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:17:45.870 [DEBUG] [Thread-177714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:17:45.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:17:45.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:17:45.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:17:45.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:17:45.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:17:45.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:17:45.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:17:45.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:17:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:17:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.845600 -999.00  +11.80   8.57     97  +11.40 1 3 1 3 1     0    0 0.42 0.45 ----- 8.6 8.6 279.4 9.0 13.3 -2.9 13.1 -0.3 12.7 -0.7 13.1 -1.2
2026-04-11T22:17:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:17:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:17:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.845600
2026-04-11T22:17:45.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:17:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:17:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:17:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:17:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:17:45.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:17:03', tmtdew=-0.01498, humidity=100.062, cloud=0.0, wind=9.49356, temperature=11.6919, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:17:39.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:17:45.900 [DEBUG] [Thread-177714] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:17:45.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:17:45.993 [DEBUG] [Thread-177717] [transport.py] [_log()] starting thread (client mode): 0xa79106d0
2026-04-11T22:17:45.993 [DEBUG] [Thread-177717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:17:46.008 [DEBUG] [Thread-177717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:17:46.008 [INFO] [Thread-177717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:17:46.016 [DEBUG] [Thread-177717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:17:46.016 [DEBUG] [Thread-177717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] client lang: <none>
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] server lang: <none>
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] kex follows: False
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] Compression: none
2026-04-11T22:17:46.017 [DEBUG] [Thread-177717] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:17:46.077 [DEBUG] [Thread-177717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:17:46.077 [DEBUG] [Thread-177717] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:17:46.078 [DEBUG] [Thread-177717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:17:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:17:46.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:17:46.134 [DEBUG] [Thread-177717] [transport.py] [_log()] userauth is OK
2026-04-11T22:17:46.134 [DEBUG] [Thread-177717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:17:46.134 [DEBUG] [Thread-177717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:17:46.135 [DEBUG] [Thread-177717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:17:46.135 [DEBUG] [Thread-177717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:17:46.159 [INFO] [Thread-177717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:17:46.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:17:46.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:17:46.972 [DEBUG] [Thread-177717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:17:46.972 [DEBUG] [Thread-177717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:17:47.020 [DEBUG] [Thread-177717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:17:47.020 [DEBUG] [Thread-177717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:17:47.030 [DEBUG] [Thread-177717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:17:47.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:17:47.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-04-11T22:17:47.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-04-11T22:17:47.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:17:47.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:17:47.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:17:47.067 [DEBUG] [Thread-177717] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:17:47.725 [DEBUG] [Thread-177719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:02.779 [DEBUG] [Thread-177720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:18:17.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:18:17.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-04-11T22:18:17.817 [DEBUG] [Thread-177721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 17, 39), -0.02985, 100.124, 0.0, 12.3516, 12.0843, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:18:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:17:39
2026-04-11T22:18:18.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:18:18.987 [DEBUG] [Thread-177722] [transport.py] [_log()] starting thread (client mode): 0xae517460
2026-04-11T22:18:18.987 [DEBUG] [Thread-177722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:18:19.000 [DEBUG] [Thread-177722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:18:19.000 [INFO] [Thread-177722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:18:19.003 [DEBUG] [Thread-177722] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] client lang: <none>
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] server lang: <none>
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] kex follows: False
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] Compression: none
2026-04-11T22:18:19.004 [DEBUG] [Thread-177722] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:18:19.014 [DEBUG] [Thread-177722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:18:19.015 [DEBUG] [Thread-177722] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:18:19.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:18:19.015 [DEBUG] [Thread-177722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:18:19.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:18:19.016 [DEBUG] [Thread-177722] [transport.py] [_log()] userauth is OK
2026-04-11T22:18:19.017 [DEBUG] [Thread-177722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:18:19.017 [DEBUG] [Thread-177722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:18:19.017 [DEBUG] [Thread-177722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:18:19.017 [DEBUG] [Thread-177722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:18:19.043 [INFO] [Thread-177722] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:18:19.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:18:19.654 [DEBUG] [Thread-177722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:18:19.655 [DEBUG] [Thread-177722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:18:19.655 [DEBUG] [Thread-177722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:18:19.696 [DEBUG] [Thread-177722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:18:19.696 [DEBUG] [Thread-177722] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:18:19.699 [DEBUG] [Thread-177722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:18:19.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:18:19.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:18:19.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:18:19.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:18:19.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:18:19.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:18:19.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:18:19.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:18:19.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:18:19.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.845947 -999.00  +11.80   9.22     97  +11.40 1 3 1 3 1     0    0 0.41 0.49 ----- 9.2 9.2 275.0 9.9 13.2 -3.0 13.1 -0.4 12.6 -1.1 13.0 -1.1
2026-04-11T22:18:19.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:18:19.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:18:19.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.845947
2026-04-11T22:18:19.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:18:19.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:18:19.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:18:19.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:18:19.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:18:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:17:39', tmtdew=-0.02985, humidity=100.124, cloud=0.0, wind=12.3516, temperature=12.0843, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:18:09.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:18:19.718 [DEBUG] [Thread-177722] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:18:19.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:18:19.806 [DEBUG] [Thread-177725] [transport.py] [_log()] starting thread (client mode): 0xb0fb4a90
2026-04-11T22:18:19.806 [DEBUG] [Thread-177725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:18:19.820 [DEBUG] [Thread-177725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:18:19.820 [INFO] [Thread-177725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] client lang: <none>
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] server lang: <none>
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] kex follows: False
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] Compression: none
2026-04-11T22:18:19.828 [DEBUG] [Thread-177725] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:18:19.888 [DEBUG] [Thread-177725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:18:19.888 [DEBUG] [Thread-177725] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:18:19.889 [DEBUG] [Thread-177725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:18:19.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:18:19.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:18:19.944 [DEBUG] [Thread-177725] [transport.py] [_log()] userauth is OK
2026-04-11T22:18:19.944 [DEBUG] [Thread-177725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:18:19.944 [DEBUG] [Thread-177725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:18:19.944 [DEBUG] [Thread-177725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:18:19.944 [DEBUG] [Thread-177725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:18:19.963 [INFO] [Thread-177725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:18:19.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:18:19.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:18:20.849 [DEBUG] [Thread-177725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:18:20.849 [DEBUG] [Thread-177725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:18:20.897 [DEBUG] [Thread-177725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:18:20.897 [DEBUG] [Thread-177725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:18:20.906 [DEBUG] [Thread-177725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:18:20.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:18:20.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-04-11T22:18:20.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:18:20.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:18:20.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:18:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:18:20.940 [DEBUG] [Thread-177725] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:18:32.855 [DEBUG] [Thread-177727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:37.695 [DEBUG] [Thread-177728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:38.927 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:38.928 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:47.909 [DEBUG] [Thread-177729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:18:50.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:18:50.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:18:50.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:18:52.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 18, 14), -0.01742, 100.079, 0.0, 9.58176, 11.6256, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:18:52.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:18:14
2026-04-11T22:18:52.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:18:52.825 [DEBUG] [Thread-177730] [transport.py] [_log()] starting thread (client mode): 0xae5161a0
2026-04-11T22:18:52.826 [DEBUG] [Thread-177730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:18:52.845 [DEBUG] [Thread-177730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:18:52.845 [INFO] [Thread-177730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] client lang: <none>
2026-04-11T22:18:52.847 [DEBUG] [Thread-177730] [transport.py] [_log()] server lang: <none>
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] kex follows: False
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] Compression: none
2026-04-11T22:18:52.848 [DEBUG] [Thread-177730] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:18:52.858 [DEBUG] [Thread-177730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:18:52.859 [DEBUG] [Thread-177730] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:18:52.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:18:52.861 [DEBUG] [Thread-177730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:18:52.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:18:52.864 [DEBUG] [Thread-177730] [transport.py] [_log()] userauth is OK
2026-04-11T22:18:52.865 [DEBUG] [Thread-177730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:18:52.865 [DEBUG] [Thread-177730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:18:52.865 [DEBUG] [Thread-177730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:18:52.865 [DEBUG] [Thread-177730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:18:52.890 [INFO] [Thread-177730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:18:52.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:18:53.517 [DEBUG] [Thread-177730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:18:53.517 [DEBUG] [Thread-177730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:18:53.517 [DEBUG] [Thread-177730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:18:53.558 [DEBUG] [Thread-177730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:18:53.558 [DEBUG] [Thread-177730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:18:53.562 [DEBUG] [Thread-177730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:18:53.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:18:53.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:18:53.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:18:53.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:18:53.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:18:53.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:18:53.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:18:53.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:18:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:18:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.846294 -999.00  +11.70   8.53     97  +11.30 1 3 1 3 1     0    0 0.42 0.57 ----- 8.5 8.5 276.4 11.3 13.2 -2.7 13.1 -0.4 12.6 -1.0 13.0 -0.9
2026-04-11T22:18:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:18:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:18:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.846294
2026-04-11T22:18:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:18:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:18:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:18:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:18:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:18:53.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:18:14', tmtdew=-0.01742, humidity=100.079, cloud=0.0, wind=9.58176, temperature=11.6256, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:18:39.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:18:53.587 [DEBUG] [Thread-177730] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:18:53.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:18:53.681 [DEBUG] [Thread-177733] [transport.py] [_log()] starting thread (client mode): 0xae51a590
2026-04-11T22:18:53.681 [DEBUG] [Thread-177733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:18:53.699 [DEBUG] [Thread-177733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:18:53.699 [INFO] [Thread-177733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] client lang: <none>
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] server lang: <none>
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] kex follows: False
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:18:53.711 [DEBUG] [Thread-177733] [transport.py] [_log()] Compression: none
2026-04-11T22:18:53.712 [DEBUG] [Thread-177733] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:18:53.764 [DEBUG] [Thread-177733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:18:53.765 [DEBUG] [Thread-177733] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:18:53.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:18:53.766 [DEBUG] [Thread-177733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:18:53.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:18:53.825 [DEBUG] [Thread-177733] [transport.py] [_log()] userauth is OK
2026-04-11T22:18:53.825 [DEBUG] [Thread-177733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:18:53.826 [DEBUG] [Thread-177733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:18:53.826 [DEBUG] [Thread-177733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:18:53.826 [DEBUG] [Thread-177733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:18:53.844 [INFO] [Thread-177733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:18:53.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:18:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:18:54.645 [DEBUG] [Thread-177733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:18:54.646 [DEBUG] [Thread-177733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:18:54.694 [DEBUG] [Thread-177733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:18:54.694 [DEBUG] [Thread-177733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:18:54.703 [DEBUG] [Thread-177733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:18:54.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:18:54.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-04-11T22:18:54.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-04-11T22:18:54.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:18:54.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:18:54.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:18:54.740 [DEBUG] [Thread-177733] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:19:02.946 [DEBUG] [Thread-177735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:17.999 [DEBUG] [Thread-177736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:24.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:19:24.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:19:24.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-04-11T22:19:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 18, 50), -0.02478, 100.091, 0.0, 10.1995, 12.0512, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:19:26.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:18:50
2026-04-11T22:19:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:19:26.620 [DEBUG] [Thread-177737] [transport.py] [_log()] starting thread (client mode): 0xb0f564a0
2026-04-11T22:19:26.620 [DEBUG] [Thread-177737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:19:26.640 [DEBUG] [Thread-177737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:19:26.640 [INFO] [Thread-177737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:19:26.643 [DEBUG] [Thread-177737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] client lang: <none>
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] server lang: <none>
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] kex follows: False
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] Compression: none
2026-04-11T22:19:26.644 [DEBUG] [Thread-177737] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:19:26.661 [DEBUG] [Thread-177737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:19:26.662 [DEBUG] [Thread-177737] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:19:26.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:19:26.663 [DEBUG] [Thread-177737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:19:26.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:19:26.665 [DEBUG] [Thread-177737] [transport.py] [_log()] userauth is OK
2026-04-11T22:19:26.665 [DEBUG] [Thread-177737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:19:26.665 [DEBUG] [Thread-177737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:19:26.665 [DEBUG] [Thread-177737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:19:26.665 [DEBUG] [Thread-177737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:19:26.690 [INFO] [Thread-177737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:19:26.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:19:27.332 [DEBUG] [Thread-177737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:19:27.332 [DEBUG] [Thread-177737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:19:27.332 [DEBUG] [Thread-177737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:19:27.373 [DEBUG] [Thread-177737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:19:27.374 [DEBUG] [Thread-177737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:19:27.377 [DEBUG] [Thread-177737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:19:27.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:19:27.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:19:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:19:27.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:19:27.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:19:27.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:19:27.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:19:27.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:19:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:19:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.846642 -999.00  +11.70   9.12     97  +11.30 1 3 1 3 1     0    0 0.41 0.60 ----- 9.1 9.1 268.4 10.3 13.2 -2.3 13.0 -0.5 12.6 -1.1 13.0 -0.8
2026-04-11T22:19:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:19:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:19:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.846642
2026-04-11T22:19:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:19:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:19:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:19:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:19:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:19:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:18:50', tmtdew=-0.02478, humidity=100.091, cloud=0.0, wind=10.1995, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:19:09.869', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:19:27.407 [DEBUG] [Thread-177737] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:19:27.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:19:27.504 [DEBUG] [Thread-177740] [transport.py] [_log()] starting thread (client mode): 0xae5173d0
2026-04-11T22:19:27.505 [DEBUG] [Thread-177740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:19:27.524 [DEBUG] [Thread-177740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:19:27.524 [INFO] [Thread-177740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:19:27.534 [DEBUG] [Thread-177740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] client lang: <none>
2026-04-11T22:19:27.535 [DEBUG] [Thread-177740] [transport.py] [_log()] server lang: <none>
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] kex follows: False
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] Compression: none
2026-04-11T22:19:27.536 [DEBUG] [Thread-177740] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:19:27.596 [DEBUG] [Thread-177740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:19:27.597 [DEBUG] [Thread-177740] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:19:27.597 [DEBUG] [Thread-177740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:19:27.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:19:27.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:19:27.664 [DEBUG] [Thread-177740] [transport.py] [_log()] userauth is OK
2026-04-11T22:19:27.664 [DEBUG] [Thread-177740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:19:27.664 [DEBUG] [Thread-177740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:19:27.664 [DEBUG] [Thread-177740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:19:27.664 [DEBUG] [Thread-177740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:19:27.679 [INFO] [Thread-177740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:19:27.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:19:27.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:19:28.492 [DEBUG] [Thread-177740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:19:28.492 [DEBUG] [Thread-177740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:19:28.541 [DEBUG] [Thread-177740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:19:28.541 [DEBUG] [Thread-177740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:19:28.552 [DEBUG] [Thread-177740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:19:28.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:19:28.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-04-11T22:19:28.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:19:28.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:19:28.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:19:28.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:19:28.591 [DEBUG] [Thread-177740] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:19:33.035 [DEBUG] [Thread-177742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:37.778 [DEBUG] [Thread-177743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:39.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:39.131 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:48.095 [DEBUG] [Thread-177744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:19:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:19:58.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:19:58.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-04-11T22:19:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 19, 25), 0.03761, 100.046, 0.0, 8.69976, 11.6756, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:19:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:19:25
2026-04-11T22:20:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:20:00.583 [DEBUG] [Thread-177745] [transport.py] [_log()] starting thread (client mode): 0xb0f55a80
2026-04-11T22:20:00.583 [DEBUG] [Thread-177745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:20:00.603 [DEBUG] [Thread-177745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:20:00.603 [INFO] [Thread-177745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:20:00.606 [DEBUG] [Thread-177745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] client lang: <none>
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] server lang: <none>
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] kex follows: False
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:20:00.607 [DEBUG] [Thread-177745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:20:00.608 [DEBUG] [Thread-177745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:20:00.608 [DEBUG] [Thread-177745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:20:00.608 [DEBUG] [Thread-177745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:20:00.608 [DEBUG] [Thread-177745] [transport.py] [_log()] Compression: none
2026-04-11T22:20:00.608 [DEBUG] [Thread-177745] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:20:00.627 [DEBUG] [Thread-177745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:20:00.627 [DEBUG] [Thread-177745] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:20:00.628 [DEBUG] [Thread-177745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:20:00.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:20:00.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:20:00.673 [DEBUG] [Thread-177745] [transport.py] [_log()] userauth is OK
2026-04-11T22:20:00.673 [DEBUG] [Thread-177745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:20:00.673 [DEBUG] [Thread-177745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:20:00.673 [DEBUG] [Thread-177745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:20:00.673 [DEBUG] [Thread-177745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:20:00.693 [INFO] [Thread-177745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:20:00.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:20:01.329 [DEBUG] [Thread-177745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:20:01.329 [DEBUG] [Thread-177745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:20:01.330 [DEBUG] [Thread-177745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:20:01.370 [DEBUG] [Thread-177745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:20:01.370 [DEBUG] [Thread-177745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:20:01.373 [DEBUG] [Thread-177745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:20:01.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:20:01.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:20:01.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:20:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:20:01.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:20:01.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:20:01.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:20:01.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:20:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:20:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.846989 -999.00  +11.70   7.53     97  +11.30 1 3 1 3 1     0    0 0.41 0.64 ----- 7.5 7.5 278.4 11.1 13.2 -2.6 13.1 -0.5 12.5 -1.1 13.0 -0.8
2026-04-11T22:20:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:20:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:20:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.846989
2026-04-11T22:20:01.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:20:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:20:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:20:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:20:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:20:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:19:25', tmtdew=0.03761, humidity=100.046, cloud=0.0, wind=8.69976, temperature=11.6756, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:19:39.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:20:01.397 [DEBUG] [Thread-177745] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:20:01.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:20:01.492 [DEBUG] [Thread-177748] [transport.py] [_log()] starting thread (client mode): 0xb0f8d060
2026-04-11T22:20:01.493 [DEBUG] [Thread-177748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:20:01.507 [DEBUG] [Thread-177748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:20:01.508 [INFO] [Thread-177748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:20:01.515 [DEBUG] [Thread-177748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:20:01.516 [DEBUG] [Thread-177748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] client lang: <none>
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] server lang: <none>
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] kex follows: False
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] Compression: none
2026-04-11T22:20:01.517 [DEBUG] [Thread-177748] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:20:01.573 [DEBUG] [Thread-177748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:20:01.574 [DEBUG] [Thread-177748] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:20:01.574 [DEBUG] [Thread-177748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:20:01.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:20:01.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:20:01.630 [DEBUG] [Thread-177748] [transport.py] [_log()] userauth is OK
2026-04-11T22:20:01.631 [DEBUG] [Thread-177748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:20:01.631 [DEBUG] [Thread-177748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:20:01.631 [DEBUG] [Thread-177748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:20:01.631 [DEBUG] [Thread-177748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:20:01.652 [INFO] [Thread-177748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:20:01.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:20:01.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:20:02.504 [DEBUG] [Thread-177748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:20:02.504 [DEBUG] [Thread-177748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:20:02.552 [DEBUG] [Thread-177748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:20:02.552 [DEBUG] [Thread-177748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:20:02.562 [DEBUG] [Thread-177748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:20:02.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:20:02.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-04-11T22:20:02.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-04-11T22:20:02.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:20:02.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:20:02.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:20:02.599 [DEBUG] [Thread-177748] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:20:03.133 [DEBUG] [Thread-177750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:20:18.197 [DEBUG] [Thread-177751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:20:32.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:20:32.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:20:32.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-04-11T22:20:33.232 [DEBUG] [Thread-177752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:20:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 20), -0.012425, 100.046, 0.0, 8.66448, 11.6588, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:20:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:20:00
2026-04-11T22:20:34.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:20:34.439 [DEBUG] [Thread-177753] [transport.py] [_log()] starting thread (client mode): 0xb0fb5ea0
2026-04-11T22:20:34.439 [DEBUG] [Thread-177753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:20:34.460 [DEBUG] [Thread-177753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:20:34.460 [INFO] [Thread-177753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:20:34.463 [DEBUG] [Thread-177753] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] client lang: <none>
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] server lang: <none>
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] kex follows: False
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:20:34.464 [DEBUG] [Thread-177753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:20:34.465 [DEBUG] [Thread-177753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:20:34.465 [DEBUG] [Thread-177753] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:20:34.465 [DEBUG] [Thread-177753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:20:34.465 [DEBUG] [Thread-177753] [transport.py] [_log()] Compression: none
2026-04-11T22:20:34.465 [DEBUG] [Thread-177753] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:20:34.483 [DEBUG] [Thread-177753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:20:34.484 [DEBUG] [Thread-177753] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:20:34.484 [DEBUG] [Thread-177753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:20:34.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:20:34.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:20:34.486 [DEBUG] [Thread-177753] [transport.py] [_log()] userauth is OK
2026-04-11T22:20:34.487 [DEBUG] [Thread-177753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:20:34.487 [DEBUG] [Thread-177753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:20:34.487 [DEBUG] [Thread-177753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:20:34.487 [DEBUG] [Thread-177753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:20:34.507 [INFO] [Thread-177753] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:20:34.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:20:35.135 [DEBUG] [Thread-177753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:20:35.135 [DEBUG] [Thread-177753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:20:35.135 [DEBUG] [Thread-177753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:20:35.176 [DEBUG] [Thread-177753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:20:35.176 [DEBUG] [Thread-177753] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:20:35.180 [DEBUG] [Thread-177753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:20:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:20:35.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:20:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:20:35.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:20:35.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:20:35.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:20:35.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:20:35.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:20:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:20:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.847336 -999.00  +11.70   8.08     97  +11.30 1 3 1 3 1     0    0 0.42 0.60 ----- 8.1 8.1 277.0 11.4 13.2 -2.6 13.1 -0.4 12.5 -0.6 13.0 -0.9
2026-04-11T22:20:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:20:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:20:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.847336
2026-04-11T22:20:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:20:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:20:35.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:20:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:20:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:20:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:20:00', tmtdew=-0.012425, humidity=100.046, cloud=0.0, wind=8.66448, temperature=11.6588, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:20:09.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:20:35.208 [DEBUG] [Thread-177753] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:20:35.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:20:35.301 [DEBUG] [Thread-177756] [transport.py] [_log()] starting thread (client mode): 0xa7911720
2026-04-11T22:20:35.301 [DEBUG] [Thread-177756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:20:35.316 [DEBUG] [Thread-177756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:20:35.316 [INFO] [Thread-177756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] client lang: <none>
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] server lang: <none>
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] kex follows: False
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] Compression: none
2026-04-11T22:20:35.324 [DEBUG] [Thread-177756] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:20:35.382 [DEBUG] [Thread-177756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:20:35.383 [DEBUG] [Thread-177756] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:20:35.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:20:35.384 [DEBUG] [Thread-177756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:20:35.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:20:35.446 [DEBUG] [Thread-177756] [transport.py] [_log()] userauth is OK
2026-04-11T22:20:35.446 [DEBUG] [Thread-177756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:20:35.446 [DEBUG] [Thread-177756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:20:35.447 [DEBUG] [Thread-177756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:20:35.447 [DEBUG] [Thread-177756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:20:35.467 [INFO] [Thread-177756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:20:35.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:20:35.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:20:36.277 [DEBUG] [Thread-177756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:20:36.277 [DEBUG] [Thread-177756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:20:36.325 [DEBUG] [Thread-177756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:20:36.325 [DEBUG] [Thread-177756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:20:36.335 [DEBUG] [Thread-177756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:20:36.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:20:36.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:20:36.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:20:36.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:20:36.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:20:36.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:20:36.372 [DEBUG] [Thread-177756] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:20:37.861 [DEBUG] [Thread-177758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:20:39.333 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:20:39.335 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:20:48.268 [DEBUG] [Thread-177759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:03.325 [DEBUG] [Thread-177760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:06.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:21:06.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:21: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-04-11T22:21:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 20, 36), -0.02478, 100.091, 0.0, 10.5523, 12.0512, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:21:07.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:20:36
2026-04-11T22:21:08.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:21:08.206 [DEBUG] [Thread-177761] [transport.py] [_log()] starting thread (client mode): 0xa7955930
2026-04-11T22:21:08.206 [DEBUG] [Thread-177761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:21:08.227 [DEBUG] [Thread-177761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:21:08.228 [INFO] [Thread-177761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:21:08.229 [DEBUG] [Thread-177761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:21:08.229 [DEBUG] [Thread-177761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:21:08.229 [DEBUG] [Thread-177761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:21:08.229 [DEBUG] [Thread-177761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] client lang: <none>
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] server lang: <none>
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] kex follows: False
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:21:08.230 [DEBUG] [Thread-177761] [transport.py] [_log()] Compression: none
2026-04-11T22:21:08.231 [DEBUG] [Thread-177761] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:21:08.243 [DEBUG] [Thread-177761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:21:08.244 [DEBUG] [Thread-177761] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:21:08.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:21:08.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:21:08.246 [DEBUG] [Thread-177761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:21:08.246 [DEBUG] [Thread-177761] [transport.py] [_log()] userauth is OK
2026-04-11T22:21:08.246 [DEBUG] [Thread-177761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:21:08.246 [DEBUG] [Thread-177761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:21:08.246 [DEBUG] [Thread-177761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:21:08.246 [DEBUG] [Thread-177761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:21:08.281 [INFO] [Thread-177761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:21:08.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:21:08.894 [DEBUG] [Thread-177761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:21:08.894 [DEBUG] [Thread-177761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:21:08.895 [DEBUG] [Thread-177761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:21:08.935 [DEBUG] [Thread-177761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:21:08.935 [DEBUG] [Thread-177761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:21:08.939 [DEBUG] [Thread-177761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:21:08.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:21:08.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:21:08.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:21:08.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:21:08.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:21:08.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:21:08.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:21:08.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:21:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:21:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.847683 -999.00  +11.70  10.58     97  +11.30 1 3 1 3 1     0    0 0.41 0.59 ----- 10.6 10.6 274.0 11.4 13.2 -3.0 13.0 -0.3 12.6 -0.5 13.0 -1.3
2026-04-11T22:21:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:21:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:21:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.847683
2026-04-11T22:21:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:21:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:21:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:21:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:21:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:21:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:20:36', tmtdew=-0.02478, humidity=100.091, cloud=0.0, wind=10.5523, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:20:39.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:21:08.964 [DEBUG] [Thread-177761] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:21:09.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:21:09.057 [DEBUG] [Thread-177764] [transport.py] [_log()] starting thread (client mode): 0xa7910220
2026-04-11T22:21:09.057 [DEBUG] [Thread-177764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:21:09.072 [DEBUG] [Thread-177764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:21:09.072 [INFO] [Thread-177764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:21:09.080 [DEBUG] [Thread-177764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:21:09.080 [DEBUG] [Thread-177764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:21:09.080 [DEBUG] [Thread-177764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:21:09.080 [DEBUG] [Thread-177764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:09.080 [DEBUG] [Thread-177764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:09.080 [DEBUG] [Thread-177764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] client lang: <none>
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] server lang: <none>
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] kex follows: False
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:21:09.081 [DEBUG] [Thread-177764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:21:09.082 [DEBUG] [Thread-177764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:21:09.082 [DEBUG] [Thread-177764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:21:09.082 [DEBUG] [Thread-177764] [transport.py] [_log()] Compression: none
2026-04-11T22:21:09.082 [DEBUG] [Thread-177764] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:21:09.142 [DEBUG] [Thread-177764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:21:09.143 [DEBUG] [Thread-177764] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:21:09.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:21:09.145 [DEBUG] [Thread-177764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:21:09.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:21:09.203 [DEBUG] [Thread-177764] [transport.py] [_log()] userauth is OK
2026-04-11T22:21:09.203 [DEBUG] [Thread-177764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:21:09.204 [DEBUG] [Thread-177764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:21:09.204 [DEBUG] [Thread-177764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:21:09.204 [DEBUG] [Thread-177764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:21:09.224 [INFO] [Thread-177764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:21:09.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:21:09.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:21:10.040 [DEBUG] [Thread-177764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:21:10.040 [DEBUG] [Thread-177764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:21:10.089 [DEBUG] [Thread-177764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:21:10.089 [DEBUG] [Thread-177764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:21:10.099 [DEBUG] [Thread-177764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:21:10.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:21:10.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-04-11T22:21:10.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-04-11T22:21:10.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:21:10.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:21:10.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:21:10.137 [DEBUG] [Thread-177764] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:21:18.362 [DEBUG] [Thread-177766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:33.415 [DEBUG] [Thread-177767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:37.938 [DEBUG] [Thread-177768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:39.540 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:39.542 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:21:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:21:40.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:21:40.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-04-11T22:21:41.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 21, 12), -0.01744, 100.079, 0.0, 8.66448, 11.6422, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:21:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:21:12
2026-04-11T22:21:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:21:41.969 [DEBUG] [Thread-177769] [transport.py] [_log()] starting thread (client mode): 0xb0f56c50
2026-04-11T22:21:41.969 [DEBUG] [Thread-177769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:21:41.984 [DEBUG] [Thread-177769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:21:41.984 [INFO] [Thread-177769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:21:41.987 [DEBUG] [Thread-177769] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:21:41.987 [DEBUG] [Thread-177769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] client lang: <none>
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] server lang: <none>
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] kex follows: False
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] Compression: none
2026-04-11T22:21:41.988 [DEBUG] [Thread-177769] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:21:42.005 [DEBUG] [Thread-177769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:21:42.006 [DEBUG] [Thread-177769] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:21:42.006 [DEBUG] [Thread-177769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:21:42.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:21:42.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:21:42.008 [DEBUG] [Thread-177769] [transport.py] [_log()] userauth is OK
2026-04-11T22:21:42.008 [DEBUG] [Thread-177769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:21:42.009 [DEBUG] [Thread-177769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:21:42.009 [DEBUG] [Thread-177769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:21:42.009 [DEBUG] [Thread-177769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:21:42.033 [INFO] [Thread-177769] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:21:42.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:21:42.630 [DEBUG] [Thread-177769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:21:42.630 [DEBUG] [Thread-177769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:21:42.631 [DEBUG] [Thread-177769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:21:42.671 [DEBUG] [Thread-177769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:21:42.671 [DEBUG] [Thread-177769] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:21:42.675 [DEBUG] [Thread-177769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:21:42.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:21:42.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:21:42.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:21:42.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:21:42.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:21:42.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:21:42.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:21:42.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:21:42.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:21:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.848031 -999.00  +11.70   8.42     97  +11.20 1 3 1 3 1     0    0 0.42 1.00 ----- 8.4 8.4 276.0 10.0 13.2 -3.6 13.1 -0.4 12.6 -0.7 12.9 -1.6
2026-04-11T22:21:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:21:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:21:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.848031
2026-04-11T22:21:42.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:21:42.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:21:42.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:21:42.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:21:42.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:21:42.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:21:12', tmtdew=-0.01744, humidity=100.079, cloud=0.0, wind=8.66448, temperature=11.6422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:21:09.878', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:21:42.703 [DEBUG] [Thread-177769] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:21:42.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:21:42.799 [DEBUG] [Thread-177772] [transport.py] [_log()] starting thread (client mode): 0xb0fb5870
2026-04-11T22:21:42.799 [DEBUG] [Thread-177772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:21:42.814 [DEBUG] [Thread-177772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:21:42.814 [INFO] [Thread-177772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:21:42.821 [DEBUG] [Thread-177772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:21:42.821 [DEBUG] [Thread-177772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] client lang: <none>
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] server lang: <none>
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] kex follows: False
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] Compression: none
2026-04-11T22:21:42.822 [DEBUG] [Thread-177772] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:21:42.881 [DEBUG] [Thread-177772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:21:42.881 [DEBUG] [Thread-177772] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:21:42.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:21:42.883 [DEBUG] [Thread-177772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:21:42.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:21:42.937 [DEBUG] [Thread-177772] [transport.py] [_log()] userauth is OK
2026-04-11T22:21:42.937 [DEBUG] [Thread-177772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:21:42.937 [DEBUG] [Thread-177772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:21:42.937 [DEBUG] [Thread-177772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:21:42.938 [DEBUG] [Thread-177772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:21:42.956 [INFO] [Thread-177772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:21:42.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:21:42.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:21:43.766 [DEBUG] [Thread-177772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:21:43.766 [DEBUG] [Thread-177772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:21:43.814 [DEBUG] [Thread-177772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:21:43.814 [DEBUG] [Thread-177772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:21:43.823 [DEBUG] [Thread-177772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:21:43.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:21:43.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-04-11T22:21:43.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-04-11T22:21:43.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:21:43.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:21:43.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:21:43.860 [DEBUG] [Thread-177772] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:21:48.451 [DEBUG] [Thread-177774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:03.497 [DEBUG] [Thread-177775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:22:13.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:22:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:22:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 21, 47), -0.02993, 100.124, 0.0, 9.882, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:22:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:21:47
2026-04-11T22:22:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:22:15.715 [DEBUG] [Thread-177776] [transport.py] [_log()] starting thread (client mode): 0xb0f8da50
2026-04-11T22:22:15.715 [DEBUG] [Thread-177776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:22:15.735 [DEBUG] [Thread-177776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:22:15.736 [INFO] [Thread-177776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:22:15.739 [DEBUG] [Thread-177776] [transport.py] [_log()] client lang: <none>
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] server lang: <none>
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] kex follows: False
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] Compression: none
2026-04-11T22:22:15.740 [DEBUG] [Thread-177776] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:22:15.759 [DEBUG] [Thread-177776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:22:15.760 [DEBUG] [Thread-177776] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:22:15.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:22:15.760 [DEBUG] [Thread-177776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:22:15.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:22:15.763 [DEBUG] [Thread-177776] [transport.py] [_log()] userauth is OK
2026-04-11T22:22:15.763 [DEBUG] [Thread-177776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:22:15.763 [DEBUG] [Thread-177776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:22:15.763 [DEBUG] [Thread-177776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:22:15.763 [DEBUG] [Thread-177776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:22:15.786 [INFO] [Thread-177776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:22:15.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:22:16.399 [DEBUG] [Thread-177776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:22:16.399 [DEBUG] [Thread-177776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:22:16.399 [DEBUG] [Thread-177776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:22:16.440 [DEBUG] [Thread-177776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:22:16.440 [DEBUG] [Thread-177776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:22:16.443 [DEBUG] [Thread-177776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:22:16.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:22:16.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:22:16.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:22:16.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:22:16.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:22:16.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:22:16.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:22:16.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:22:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:22:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.848378 -999.00  +11.70   8.74     97  +11.20 1 3 1 3 1     0    0 0.45 1.46 ----- 8.7 8.7 278.8 10.2 13.2 -3.7 13.0 -0.4 12.5 -1.0 12.9 -1.4
2026-04-11T22:22:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:22:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:22:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.848378
2026-04-11T22:22:16.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:22:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:22:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:22:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:22:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:22:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:21:47', tmtdew=-0.02993, humidity=100.124, cloud=0.0, wind=9.882, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:21:39.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:22:16.468 [DEBUG] [Thread-177776] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:22:16.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:22:16.560 [DEBUG] [Thread-177779] [transport.py] [_log()] starting thread (client mode): 0xb0f8db70
2026-04-11T22:22:16.560 [DEBUG] [Thread-177779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:22:16.575 [DEBUG] [Thread-177779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:22:16.575 [INFO] [Thread-177779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:22:16.582 [DEBUG] [Thread-177779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:22:16.582 [DEBUG] [Thread-177779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:22:16.582 [DEBUG] [Thread-177779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:22:16.582 [DEBUG] [Thread-177779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] client lang: <none>
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] server lang: <none>
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] kex follows: False
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:22:16.583 [DEBUG] [Thread-177779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:22:16.584 [DEBUG] [Thread-177779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:22:16.584 [DEBUG] [Thread-177779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:22:16.584 [DEBUG] [Thread-177779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:22:16.584 [DEBUG] [Thread-177779] [transport.py] [_log()] Compression: none
2026-04-11T22:22:16.584 [DEBUG] [Thread-177779] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:22:16.640 [DEBUG] [Thread-177779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:22:16.641 [DEBUG] [Thread-177779] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:22:16.641 [DEBUG] [Thread-177779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:22:16.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:22:16.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:22:16.696 [DEBUG] [Thread-177779] [transport.py] [_log()] userauth is OK
2026-04-11T22:22:16.697 [DEBUG] [Thread-177779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:22:16.697 [DEBUG] [Thread-177779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:22:16.697 [DEBUG] [Thread-177779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:22:16.697 [DEBUG] [Thread-177779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:22:16.714 [INFO] [Thread-177779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:22:16.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:22:16.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:22:17.537 [DEBUG] [Thread-177779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:22:17.537 [DEBUG] [Thread-177779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:22:17.585 [DEBUG] [Thread-177779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:22:17.585 [DEBUG] [Thread-177779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:22:17.594 [DEBUG] [Thread-177779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:22:17.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:22:17.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-04-11T22:22:17.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-04-11T22:22:17.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:22:17.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:22:17.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:22:17.628 [DEBUG] [Thread-177779] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:22:18.532 [DEBUG] [Thread-177781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:33.573 [DEBUG] [Thread-177782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:38.019 [DEBUG] [Thread-177783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:39.745 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:39.746 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:22:47.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:22:47.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:22:48.609 [DEBUG] [Thread-177784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:22:48.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 22, 23), 0.040155, 100.029, 0.0, 8.2764, 11.5924, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:22:48.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:22:23
2026-04-11T22:22:49.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:22:49.505 [DEBUG] [Thread-177785] [transport.py] [_log()] starting thread (client mode): 0xb0f57760
2026-04-11T22:22:49.505 [DEBUG] [Thread-177785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:22:49.525 [DEBUG] [Thread-177785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:22:49.525 [INFO] [Thread-177785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] client lang: <none>
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] server lang: <none>
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] kex follows: False
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] Compression: none
2026-04-11T22:22:49.528 [DEBUG] [Thread-177785] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:22:49.545 [DEBUG] [Thread-177785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:22:49.546 [DEBUG] [Thread-177785] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:22:49.546 [DEBUG] [Thread-177785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:22:49.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:22:49.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:22:49.548 [DEBUG] [Thread-177785] [transport.py] [_log()] userauth is OK
2026-04-11T22:22:49.548 [DEBUG] [Thread-177785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:22:49.548 [DEBUG] [Thread-177785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:22:49.548 [DEBUG] [Thread-177785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:22:49.548 [DEBUG] [Thread-177785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:22:49.572 [INFO] [Thread-177785] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:22:49.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:22:50.164 [DEBUG] [Thread-177785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:22:50.164 [DEBUG] [Thread-177785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:22:50.165 [DEBUG] [Thread-177785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:22:50.205 [DEBUG] [Thread-177785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:22:50.205 [DEBUG] [Thread-177785] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:22:50.209 [DEBUG] [Thread-177785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:22:50.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:22:50.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:22:50.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:22:50.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:22:50.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:22:50.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:22:50.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:22:50.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:22:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:22:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.849072 -999.00  +11.70   8.30     97  +11.30 1 3 1 3 1     0    0 0.46 1.94 ----- 8.3 8.3 274.2 10.0 13.2 -3.1 13.1 -0.3 12.5 -0.7 12.9 -1.3
2026-04-11T22:22:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:22:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:22:50.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.849072
2026-04-11T22:22:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:22:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:22:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:22:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:22:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:22:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:22:23', tmtdew=0.040155, humidity=100.029, cloud=0.0, wind=8.2764, temperature=11.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:22:39.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:22:50.236 [DEBUG] [Thread-177785] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:22:50.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:22:50.329 [DEBUG] [Thread-177788] [transport.py] [_log()] starting thread (client mode): 0xa7910ee0
2026-04-11T22:22:50.329 [DEBUG] [Thread-177788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:22:50.344 [DEBUG] [Thread-177788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:22:50.344 [INFO] [Thread-177788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:22:50.351 [DEBUG] [Thread-177788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] client lang: <none>
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] server lang: <none>
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] kex follows: False
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] Compression: none
2026-04-11T22:22:50.352 [DEBUG] [Thread-177788] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:22:50.412 [DEBUG] [Thread-177788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:22:50.413 [DEBUG] [Thread-177788] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:22:50.414 [DEBUG] [Thread-177788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:22:50.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:22:50.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:22:50.472 [DEBUG] [Thread-177788] [transport.py] [_log()] userauth is OK
2026-04-11T22:22:50.472 [DEBUG] [Thread-177788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:22:50.472 [DEBUG] [Thread-177788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:22:50.472 [DEBUG] [Thread-177788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:22:50.472 [DEBUG] [Thread-177788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:22:50.491 [INFO] [Thread-177788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:22:50.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:22:50.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:22:51.320 [DEBUG] [Thread-177788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:22:51.320 [DEBUG] [Thread-177788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:22:51.368 [DEBUG] [Thread-177788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:22:51.368 [DEBUG] [Thread-177788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:22:51.377 [DEBUG] [Thread-177788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:22:51.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:22:51.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:22:51.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-04-11T22:22:51.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:22:51.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:22:51.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:22:51.417 [DEBUG] [Thread-177788] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:23:03.646 [DEBUG] [Thread-177790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:18.697 [DEBUG] [Thread-177791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:23:21.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:23:21.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-04-11T22:23:22.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 22, 59), 0.035035, 100.062, 0.0, 8.34696, 11.7254, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:23:22.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:22:59
2026-04-11T22:23:23.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:23:23.223 [DEBUG] [Thread-177792] [transport.py] [_log()] starting thread (client mode): 0xb0f56770
2026-04-11T22:23:23.223 [DEBUG] [Thread-177792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:23:23.245 [DEBUG] [Thread-177792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:23:23.245 [INFO] [Thread-177792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:23:23.248 [DEBUG] [Thread-177792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:23:23.248 [DEBUG] [Thread-177792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:23:23.248 [DEBUG] [Thread-177792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] client lang: <none>
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] server lang: <none>
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] kex follows: False
2026-04-11T22:23:23.249 [DEBUG] [Thread-177792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:23:23.250 [DEBUG] [Thread-177792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:23:23.250 [DEBUG] [Thread-177792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:23:23.250 [DEBUG] [Thread-177792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:23:23.250 [DEBUG] [Thread-177792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:23:23.250 [DEBUG] [Thread-177792] [transport.py] [_log()] Compression: none
2026-04-11T22:23:23.250 [DEBUG] [Thread-177792] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:23:23.265 [DEBUG] [Thread-177792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:23:23.265 [DEBUG] [Thread-177792] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:23:23.265 [DEBUG] [Thread-177792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:23:23.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:23:23.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:23:23.267 [DEBUG] [Thread-177792] [transport.py] [_log()] userauth is OK
2026-04-11T22:23:23.267 [DEBUG] [Thread-177792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:23:23.268 [DEBUG] [Thread-177792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:23:23.268 [DEBUG] [Thread-177792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:23:23.268 [DEBUG] [Thread-177792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:23:23.292 [INFO] [Thread-177792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:23:23.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:23:23.925 [DEBUG] [Thread-177792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:23:23.925 [DEBUG] [Thread-177792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:23:23.926 [DEBUG] [Thread-177792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:23:23.966 [DEBUG] [Thread-177792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:23:23.966 [DEBUG] [Thread-177792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:23:23.970 [DEBUG] [Thread-177792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:23:23.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:23:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:23:23.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:23:23.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:23:23.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:23:23.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:23:23.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:23:23.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:23:23.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:23:23.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.849419 -999.00  +11.70   7.83     97  +11.30 1 3 1 3 1     0    0 0.46 1.83 ----- 7.8 7.8 284.4 12.5 13.1 -3.8 13.0 -0.4 12.5 -1.0 12.9 -1.3
2026-04-11T22:23:23.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:23:23.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:23:23.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.849419
2026-04-11T22:23:23.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:23:23.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:23:23.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:23:23.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:23:23.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:23:23.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:22:59', tmtdew=0.035035, humidity=100.062, cloud=0.0, wind=8.34696, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:23:09.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:23:23.998 [DEBUG] [Thread-177792] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:23:24.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:23:24.091 [DEBUG] [Thread-177795] [transport.py] [_log()] starting thread (client mode): 0xb0fcf850
2026-04-11T22:23:24.091 [DEBUG] [Thread-177795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:23:24.106 [DEBUG] [Thread-177795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:23:24.107 [INFO] [Thread-177795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:23:24.114 [DEBUG] [Thread-177795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:23:24.114 [DEBUG] [Thread-177795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] client lang: <none>
2026-04-11T22:23:24.115 [DEBUG] [Thread-177795] [transport.py] [_log()] server lang: <none>
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] kex follows: False
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] Compression: none
2026-04-11T22:23:24.116 [DEBUG] [Thread-177795] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:23:24.172 [DEBUG] [Thread-177795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:23:24.172 [DEBUG] [Thread-177795] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:23:24.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:23:24.173 [DEBUG] [Thread-177795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:23:24.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:23:24.228 [DEBUG] [Thread-177795] [transport.py] [_log()] userauth is OK
2026-04-11T22:23:24.229 [DEBUG] [Thread-177795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:23:24.229 [DEBUG] [Thread-177795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:23:24.229 [DEBUG] [Thread-177795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:23:24.229 [DEBUG] [Thread-177795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:23:24.249 [INFO] [Thread-177795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:23:24.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:23:24.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:23:25.077 [DEBUG] [Thread-177795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:23:25.077 [DEBUG] [Thread-177795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:23:25.125 [DEBUG] [Thread-177795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:23:25.125 [DEBUG] [Thread-177795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:23:25.134 [DEBUG] [Thread-177795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:23:25.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:23:25.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-04-11T22:23:25.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-04-11T22:23:25.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:23:25.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:23:25.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:23:25.170 [DEBUG] [Thread-177795] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:23:33.737 [DEBUG] [Thread-177797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:38.082 [DEBUG] [Thread-177798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:39.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:39.952 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:48.797 [DEBUG] [Thread-177799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:23:55.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:23:55.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:23:55.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-04-11T22:23:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 23, 35), -0.02482, 100.091, 0.0, 8.25912, 12.0844, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:23:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:23:35
2026-04-11T22:23:56.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:23:57.038 [DEBUG] [Thread-177800] [transport.py] [_log()] starting thread (client mode): 0xb0f56410
2026-04-11T22:23:57.039 [DEBUG] [Thread-177800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:23:57.059 [DEBUG] [Thread-177800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:23:57.059 [INFO] [Thread-177800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:23:57.062 [DEBUG] [Thread-177800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:23:57.062 [DEBUG] [Thread-177800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] client lang: <none>
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] server lang: <none>
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] kex follows: False
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:23:57.063 [DEBUG] [Thread-177800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:23:57.064 [DEBUG] [Thread-177800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:23:57.064 [DEBUG] [Thread-177800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:23:57.064 [DEBUG] [Thread-177800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:23:57.064 [DEBUG] [Thread-177800] [transport.py] [_log()] Compression: none
2026-04-11T22:23:57.064 [DEBUG] [Thread-177800] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:23:57.082 [DEBUG] [Thread-177800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:23:57.082 [DEBUG] [Thread-177800] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:23:57.083 [DEBUG] [Thread-177800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:23:57.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:23:57.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:23:57.085 [DEBUG] [Thread-177800] [transport.py] [_log()] userauth is OK
2026-04-11T22:23:57.085 [DEBUG] [Thread-177800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:23:57.085 [DEBUG] [Thread-177800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:23:57.085 [DEBUG] [Thread-177800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:23:57.085 [DEBUG] [Thread-177800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:23:57.121 [INFO] [Thread-177800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:23:57.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:23:57.753 [DEBUG] [Thread-177800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:23:57.753 [DEBUG] [Thread-177800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:23:57.753 [DEBUG] [Thread-177800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:23:57.793 [DEBUG] [Thread-177800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:23:57.793 [DEBUG] [Thread-177800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:23:57.796 [DEBUG] [Thread-177800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:23:57.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:23:57.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:23:57.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:23:57.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:23:57.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:23:57.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:23:57.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:23:57.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:23:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:23:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.849767 -999.00  +11.70   7.60     97  +11.30 1 3 1 3 1     0    0 0.46 1.94 ----- 7.6 7.6 284.6 8.2 13.2 -3.0 12.9 -0.4 12.4 -1.1 12.9 -1.0
2026-04-11T22:23:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:23:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:23:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.849767
2026-04-11T22:23:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:23:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:23:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:23:57.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:23:57.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:23:57.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:23:35', tmtdew=-0.02482, humidity=100.091, cloud=0.0, wind=8.25912, temperature=12.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:23:39.869', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:23:57.818 [DEBUG] [Thread-177800] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:23:57.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:23:57.923 [DEBUG] [Thread-177803] [transport.py] [_log()] starting thread (client mode): 0xb0fb5870
2026-04-11T22:23:57.923 [DEBUG] [Thread-177803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:23:57.938 [DEBUG] [Thread-177803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:23:57.939 [INFO] [Thread-177803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] client lang: <none>
2026-04-11T22:23:57.946 [DEBUG] [Thread-177803] [transport.py] [_log()] server lang: <none>
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] kex follows: False
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] Compression: none
2026-04-11T22:23:57.947 [DEBUG] [Thread-177803] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:23:58.004 [DEBUG] [Thread-177803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:23:58.005 [DEBUG] [Thread-177803] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:23:58.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:23:58.006 [DEBUG] [Thread-177803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:23:58.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:23:58.068 [DEBUG] [Thread-177803] [transport.py] [_log()] userauth is OK
2026-04-11T22:23:58.069 [DEBUG] [Thread-177803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:23:58.069 [DEBUG] [Thread-177803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:23:58.069 [DEBUG] [Thread-177803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:23:58.069 [DEBUG] [Thread-177803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:23:58.093 [INFO] [Thread-177803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:23:58.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:23:58.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:23:58.904 [DEBUG] [Thread-177803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:23:58.905 [DEBUG] [Thread-177803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:23:58.953 [DEBUG] [Thread-177803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:23:58.953 [DEBUG] [Thread-177803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:23:58.962 [DEBUG] [Thread-177803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:23:58.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:23:58.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:23:58.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-04-11T22:23:58.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:23:58.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:23:58.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:23:59.001 [DEBUG] [Thread-177803] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:24:03.837 [DEBUG] [Thread-177805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:24:18.898 [DEBUG] [Thread-177806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:24:28.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:24:28.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:24:29.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-04-11T22:24:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 24, 10), 0.035075, 100.062, 0.0, 8.52336, 11.6922, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:24:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:24:10
2026-04-11T22:24:30.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:24:30.845 [DEBUG] [Thread-177807] [transport.py] [_log()] starting thread (client mode): 0xae519f60
2026-04-11T22:24:30.845 [DEBUG] [Thread-177807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:24:30.865 [DEBUG] [Thread-177807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:24:30.865 [INFO] [Thread-177807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] client lang: <none>
2026-04-11T22:24:30.866 [DEBUG] [Thread-177807] [transport.py] [_log()] server lang: <none>
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] kex follows: False
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] Compression: none
2026-04-11T22:24:30.867 [DEBUG] [Thread-177807] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:24:30.874 [DEBUG] [Thread-177807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:24:30.875 [DEBUG] [Thread-177807] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:24:30.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:24:30.875 [DEBUG] [Thread-177807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:24:30.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:24:30.876 [DEBUG] [Thread-177807] [transport.py] [_log()] userauth is OK
2026-04-11T22:24:30.876 [DEBUG] [Thread-177807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:24:30.876 [DEBUG] [Thread-177807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:24:30.876 [DEBUG] [Thread-177807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:24:30.876 [DEBUG] [Thread-177807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:24:30.888 [INFO] [Thread-177807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:24:30.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:24:31.507 [DEBUG] [Thread-177807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:24:31.507 [DEBUG] [Thread-177807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:24:31.508 [DEBUG] [Thread-177807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:24:31.549 [DEBUG] [Thread-177807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:24:31.549 [DEBUG] [Thread-177807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:24:31.552 [DEBUG] [Thread-177807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:24:31.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:24:31.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:24:31.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:24:31.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:24:31.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:24:31.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:24:31.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:24:31.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:24:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:24:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.850114 -999.00  +11.70   8.86     97  +11.30 1 3 1 3 1     0    0 0.47 2.15 ----- 8.9 8.9 284.2 10.2 13.2 -3.9 13.0 -0.4 12.5 -0.3 12.9 -1.3
2026-04-11T22:24:31.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:24:31.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:24:31.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.850114
2026-04-11T22:24:31.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:24:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:24:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:24:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:24:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:24:31.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:24:10', tmtdew=0.035075, humidity=100.062, cloud=0.0, wind=8.52336, temperature=11.6922, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:24:09.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:24:31.575 [DEBUG] [Thread-177807] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:24:31.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:24:31.670 [DEBUG] [Thread-177810] [transport.py] [_log()] starting thread (client mode): 0xa79560e0
2026-04-11T22:24:31.670 [DEBUG] [Thread-177810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:24:31.684 [DEBUG] [Thread-177810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:24:31.684 [INFO] [Thread-177810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] client lang: <none>
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] server lang: <none>
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] kex follows: False
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:24:31.692 [DEBUG] [Thread-177810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:24:31.693 [DEBUG] [Thread-177810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:24:31.693 [DEBUG] [Thread-177810] [transport.py] [_log()] Compression: none
2026-04-11T22:24:31.693 [DEBUG] [Thread-177810] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:24:31.755 [DEBUG] [Thread-177810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:24:31.756 [DEBUG] [Thread-177810] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:24:31.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:24:31.757 [DEBUG] [Thread-177810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:24:31.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:24:31.815 [DEBUG] [Thread-177810] [transport.py] [_log()] userauth is OK
2026-04-11T22:24:31.815 [DEBUG] [Thread-177810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:24:31.815 [DEBUG] [Thread-177810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:24:31.815 [DEBUG] [Thread-177810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:24:31.816 [DEBUG] [Thread-177810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:24:31.834 [INFO] [Thread-177810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:24:31.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:24:31.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:24:32.657 [DEBUG] [Thread-177810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:24:32.658 [DEBUG] [Thread-177810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:24:32.706 [DEBUG] [Thread-177810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:24:32.706 [DEBUG] [Thread-177810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:24:32.715 [DEBUG] [Thread-177810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:24:32.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:24: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-04-11T22:24: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-04-11T22:24:32.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:24:32.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:24:32.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:24:32.750 [DEBUG] [Thread-177810] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:24:33.936 [DEBUG] [Thread-177812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:24:38.165 [DEBUG] [Thread-177813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:24:40.154 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:24:40.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:24:48.989 [DEBUG] [Thread-177814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:25:02.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:25:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:25:04.026 [DEBUG] [Thread-177815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 24, 45), -0.02486, 100.091, 0.0, 10.129, 12.1175, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:25:04.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:24:45
2026-04-11T22:25:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:25:04.575 [DEBUG] [Thread-177816] [transport.py] [_log()] starting thread (client mode): 0xae50b2e0
2026-04-11T22:25:04.575 [DEBUG] [Thread-177816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:25:04.593 [DEBUG] [Thread-177816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:25:04.594 [INFO] [Thread-177816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] client lang: <none>
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] server lang: <none>
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] kex follows: False
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:25:04.595 [DEBUG] [Thread-177816] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:25:04.596 [DEBUG] [Thread-177816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:25:04.596 [DEBUG] [Thread-177816] [transport.py] [_log()] Compression: none
2026-04-11T22:25:04.596 [DEBUG] [Thread-177816] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:25:04.603 [DEBUG] [Thread-177816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:25:04.604 [DEBUG] [Thread-177816] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:25:04.604 [DEBUG] [Thread-177816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:25:04.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:25:04.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:25:04.606 [DEBUG] [Thread-177816] [transport.py] [_log()] userauth is OK
2026-04-11T22:25:04.606 [DEBUG] [Thread-177816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:25:04.606 [DEBUG] [Thread-177816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:25:04.606 [DEBUG] [Thread-177816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:25:04.606 [DEBUG] [Thread-177816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:25:04.624 [INFO] [Thread-177816] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:25:04.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:25:05.420 [DEBUG] [Thread-177816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:25:05.421 [DEBUG] [Thread-177816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:25:05.421 [DEBUG] [Thread-177816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:25:05.462 [DEBUG] [Thread-177816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:25:05.462 [DEBUG] [Thread-177816] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:25:05.466 [DEBUG] [Thread-177816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:25:05.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:25:05.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:25:05.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:25:05.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:25:05.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:25:05.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:25:05.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:25:05.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:25:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:25:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.850461 -999.00  +11.70   8.50     97  +11.30 1 3 1 3 1     0    0 0.48 2.12 ----- 8.5 8.5 285.8 10.2 13.1 -3.6 13.0 -0.3 12.5 -0.8 12.9 -1.3
2026-04-11T22:25:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:25:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:25:05.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.850461
2026-04-11T22:25:05.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:25:05.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:25:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:25:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:25:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:25:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:24:45', tmtdew=-0.02486, humidity=100.091, cloud=0.0, wind=10.129, temperature=12.1175, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:24:39.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:25:05.494 [DEBUG] [Thread-177816] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:25:05.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:25:05.588 [DEBUG] [Thread-177819] [transport.py] [_log()] starting thread (client mode): 0xae5f1420
2026-04-11T22:25:05.588 [DEBUG] [Thread-177819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:25:05.603 [DEBUG] [Thread-177819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:25:05.603 [INFO] [Thread-177819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:25:05.610 [DEBUG] [Thread-177819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:25:05.610 [DEBUG] [Thread-177819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] client lang: <none>
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] server lang: <none>
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] kex follows: False
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] Compression: none
2026-04-11T22:25:05.611 [DEBUG] [Thread-177819] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:25:05.674 [DEBUG] [Thread-177819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:25:05.674 [DEBUG] [Thread-177819] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:25:05.675 [DEBUG] [Thread-177819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:25:05.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:25:05.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:25:05.730 [DEBUG] [Thread-177819] [transport.py] [_log()] userauth is OK
2026-04-11T22:25:05.730 [DEBUG] [Thread-177819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:25:05.730 [DEBUG] [Thread-177819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:25:05.730 [DEBUG] [Thread-177819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:25:05.731 [DEBUG] [Thread-177819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:25:05.750 [INFO] [Thread-177819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:25:05.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:25:05.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:25:06.582 [DEBUG] [Thread-177819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:25:06.582 [DEBUG] [Thread-177819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:25:06.631 [DEBUG] [Thread-177819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:25:06.631 [DEBUG] [Thread-177819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:25:06.641 [DEBUG] [Thread-177819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:25:06.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:25:06.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-04-11T22:25:06.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-04-11T22:25:06.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:25:06.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:25:06.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:25:06.679 [DEBUG] [Thread-177819] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:25:19.062 [DEBUG] [Thread-177821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:34.114 [DEBUG] [Thread-177822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:36.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:25:36.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:25:36.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:25:37.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 25, 22), 0.032515, 100.079, 0.0, 8.25876, 11.7254, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:25:37.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:25:22
2026-04-11T22:25:38.255 [DEBUG] [Thread-177823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:25:38.514 [DEBUG] [Thread-177824] [transport.py] [_log()] starting thread (client mode): 0xb0fcca90
2026-04-11T22:25:38.514 [DEBUG] [Thread-177824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:25:38.533 [DEBUG] [Thread-177824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:25:38.533 [INFO] [Thread-177824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:25:38.537 [DEBUG] [Thread-177824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] client lang: <none>
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] server lang: <none>
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] kex follows: False
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] Compression: none
2026-04-11T22:25:38.538 [DEBUG] [Thread-177824] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:25:38.548 [DEBUG] [Thread-177824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:25:38.549 [DEBUG] [Thread-177824] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:25:38.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:25:38.551 [DEBUG] [Thread-177824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:25:38.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:25:38.553 [DEBUG] [Thread-177824] [transport.py] [_log()] userauth is OK
2026-04-11T22:25:38.553 [DEBUG] [Thread-177824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:25:38.553 [DEBUG] [Thread-177824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:25:38.553 [DEBUG] [Thread-177824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:25:38.554 [DEBUG] [Thread-177824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:25:38.591 [INFO] [Thread-177824] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:25:38.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:25:39.184 [DEBUG] [Thread-177824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:25:39.184 [DEBUG] [Thread-177824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:25:39.184 [DEBUG] [Thread-177824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:25:39.225 [DEBUG] [Thread-177824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:25:39.225 [DEBUG] [Thread-177824] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:25:39.228 [DEBUG] [Thread-177824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:25:39.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:25:39.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:25:39.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:25:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:25:39.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:25:39.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:25:39.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:25:39.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:25:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:25:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.850808 -999.00  +11.70   8.68     97  +11.30 1 3 1 3 1     0    0 0.48 2.12 ----- 8.7 8.7 282.8 9.6 13.1 -3.4 12.9 -0.3 12.5 -0.6 12.9 -1.3
2026-04-11T22:25:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:25:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:25:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.850808
2026-04-11T22:25:39.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:25:39.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:25:39.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:25:39.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:25:39.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:25:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:25:22', tmtdew=0.032515, humidity=100.079, cloud=0.0, wind=8.25876, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:25:09.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:25:39.257 [DEBUG] [Thread-177824] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:25:39.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:25:39.350 [DEBUG] [Thread-177827] [transport.py] [_log()] starting thread (client mode): 0xb0fcd9f0
2026-04-11T22:25:39.350 [DEBUG] [Thread-177827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:25:39.369 [DEBUG] [Thread-177827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:25:39.369 [INFO] [Thread-177827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] client lang: <none>
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] server lang: <none>
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] kex follows: False
2026-04-11T22:25:39.376 [DEBUG] [Thread-177827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:25:39.377 [DEBUG] [Thread-177827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:25:39.377 [DEBUG] [Thread-177827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:25:39.377 [DEBUG] [Thread-177827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:25:39.377 [DEBUG] [Thread-177827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:25:39.377 [DEBUG] [Thread-177827] [transport.py] [_log()] Compression: none
2026-04-11T22:25:39.377 [DEBUG] [Thread-177827] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:25:39.433 [DEBUG] [Thread-177827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:25:39.434 [DEBUG] [Thread-177827] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:25:39.434 [DEBUG] [Thread-177827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:25:39.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:25:39.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:25:39.490 [DEBUG] [Thread-177827] [transport.py] [_log()] userauth is OK
2026-04-11T22:25:39.490 [DEBUG] [Thread-177827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:25:39.490 [DEBUG] [Thread-177827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:25:39.490 [DEBUG] [Thread-177827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:25:39.490 [DEBUG] [Thread-177827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:25:39.510 [INFO] [Thread-177827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:25:39.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:25:39.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:25:40.359 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:40.360 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:25:40.399 [DEBUG] [Thread-177827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:25:40.399 [DEBUG] [Thread-177827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:25:40.447 [DEBUG] [Thread-177827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:25:40.447 [DEBUG] [Thread-177827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:25:40.456 [DEBUG] [Thread-177827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:25:40.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:25:40.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-04-11T22:25:40.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-04-11T22:25:40.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:25:40.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:25:40.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:25:40.494 [DEBUG] [Thread-177827] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:25:49.152 [DEBUG] [Thread-177829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:04.209 [DEBUG] [Thread-177830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:26:10.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:26:10.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-04-11T22:26:11.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 25, 58), 0.005065, 99.9295, 0.0, 8.29404, 11.8412, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:26:11.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:25:58
2026-04-11T22:26:12.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:26:12.426 [DEBUG] [Thread-177831] [transport.py] [_log()] starting thread (client mode): 0xb0fcc370
2026-04-11T22:26:12.426 [DEBUG] [Thread-177831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:26:12.440 [DEBUG] [Thread-177831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:26:12.440 [INFO] [Thread-177831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:26:12.443 [DEBUG] [Thread-177831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:26:12.443 [DEBUG] [Thread-177831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:26:12.443 [DEBUG] [Thread-177831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:26:12.443 [DEBUG] [Thread-177831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:12.443 [DEBUG] [Thread-177831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:12.443 [DEBUG] [Thread-177831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] client lang: <none>
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] server lang: <none>
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] kex follows: False
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] Compression: none
2026-04-11T22:26:12.444 [DEBUG] [Thread-177831] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:26:12.462 [DEBUG] [Thread-177831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:26:12.463 [DEBUG] [Thread-177831] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:26:12.463 [DEBUG] [Thread-177831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:26:12.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:26:12.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:26:12.466 [DEBUG] [Thread-177831] [transport.py] [_log()] userauth is OK
2026-04-11T22:26:12.466 [DEBUG] [Thread-177831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:26:12.466 [DEBUG] [Thread-177831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:26:12.466 [DEBUG] [Thread-177831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:26:12.466 [DEBUG] [Thread-177831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:26:12.490 [INFO] [Thread-177831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:26:12.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:26:13.120 [DEBUG] [Thread-177831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:26:13.120 [DEBUG] [Thread-177831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:26:13.121 [DEBUG] [Thread-177831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:26:13.161 [DEBUG] [Thread-177831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:26:13.161 [DEBUG] [Thread-177831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:26:13.164 [DEBUG] [Thread-177831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:26:13.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:26:13.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:26:13.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:26:13.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:26:13.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:26:13.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:26:13.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:26:13.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:26:13.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:26:13.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.851155 -999.00  +11.70   7.44     97  +11.30 1 3 1 3 1     0    0 0.46 2.04 ----- 7.4 7.4 291.0 9.0 13.2 -3.4 13.0 -0.3 12.5 -0.2 12.9 -1.4
2026-04-11T22:26:13.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:26:13.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:26:13.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.851155
2026-04-11T22:26:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:26:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:26:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:26:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:26:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:26:13.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:25:58', tmtdew=0.005065, humidity=99.9295, cloud=0.0, wind=8.29404, temperature=11.8412, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:25:39.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:26:13.190 [DEBUG] [Thread-177831] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:26:13.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:26:13.286 [DEBUG] [Thread-177834] [transport.py] [_log()] starting thread (client mode): 0xb0fcc0a0
2026-04-11T22:26:13.286 [DEBUG] [Thread-177834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:26:13.301 [DEBUG] [Thread-177834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:26:13.301 [INFO] [Thread-177834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] client lang: <none>
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] server lang: <none>
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] kex follows: False
2026-04-11T22:26:13.309 [DEBUG] [Thread-177834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:26:13.310 [DEBUG] [Thread-177834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:26:13.310 [DEBUG] [Thread-177834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:26:13.310 [DEBUG] [Thread-177834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:26:13.310 [DEBUG] [Thread-177834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:26:13.310 [DEBUG] [Thread-177834] [transport.py] [_log()] Compression: none
2026-04-11T22:26:13.310 [DEBUG] [Thread-177834] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:26:13.369 [DEBUG] [Thread-177834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:26:13.370 [DEBUG] [Thread-177834] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:26:13.370 [DEBUG] [Thread-177834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:26:13.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:26:13.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:26:13.429 [DEBUG] [Thread-177834] [transport.py] [_log()] userauth is OK
2026-04-11T22:26:13.430 [DEBUG] [Thread-177834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:26:13.430 [DEBUG] [Thread-177834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:26:13.430 [DEBUG] [Thread-177834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:26:13.430 [DEBUG] [Thread-177834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:26:13.448 [INFO] [Thread-177834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:26:13.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:26:13.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:26:14.306 [DEBUG] [Thread-177834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:26:14.307 [DEBUG] [Thread-177834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:26:14.355 [DEBUG] [Thread-177834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:26:14.355 [DEBUG] [Thread-177834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:26:14.366 [DEBUG] [Thread-177834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:26:14.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:26:14.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-04-11T22:26:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:26:14.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:26:14.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:26:14.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:26:14.404 [DEBUG] [Thread-177834] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:26:19.246 [DEBUG] [Thread-177836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:34.296 [DEBUG] [Thread-177837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:38.320 [DEBUG] [Thread-177838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:40.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:40.560 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:26:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:26:44.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:26:44.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-04-11T22:26:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 26, 34), -0.03489, 100.158, 0.0, 9.59976, 12.0844, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:26:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:26:34
2026-04-11T22:26:46.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:26:46.234 [DEBUG] [Thread-177839] [transport.py] [_log()] starting thread (client mode): 0xae5f0d90
2026-04-11T22:26:46.234 [DEBUG] [Thread-177839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:26:46.254 [DEBUG] [Thread-177839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:26:46.254 [INFO] [Thread-177839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:26:46.257 [DEBUG] [Thread-177839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:26:46.257 [DEBUG] [Thread-177839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:26:46.257 [DEBUG] [Thread-177839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] client lang: <none>
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] server lang: <none>
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] kex follows: False
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:26:46.258 [DEBUG] [Thread-177839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:26:46.259 [DEBUG] [Thread-177839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:26:46.259 [DEBUG] [Thread-177839] [transport.py] [_log()] Compression: none
2026-04-11T22:26:46.259 [DEBUG] [Thread-177839] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:26:46.277 [DEBUG] [Thread-177839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:26:46.278 [DEBUG] [Thread-177839] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:26:46.279 [DEBUG] [Thread-177839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:26:46.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:26:46.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:26:46.280 [DEBUG] [Thread-177839] [transport.py] [_log()] userauth is OK
2026-04-11T22:26:46.281 [DEBUG] [Thread-177839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:26:46.281 [DEBUG] [Thread-177839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:26:46.281 [DEBUG] [Thread-177839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:26:46.281 [DEBUG] [Thread-177839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:26:46.304 [INFO] [Thread-177839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:26:46.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:26:46.908 [DEBUG] [Thread-177839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:26:46.908 [DEBUG] [Thread-177839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:26:46.908 [DEBUG] [Thread-177839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:26:46.950 [DEBUG] [Thread-177839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:26:46.950 [DEBUG] [Thread-177839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:26:46.953 [DEBUG] [Thread-177839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:26:46.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:26:46.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:26:46.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:26:46.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:26:46.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:26:46.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:26:46.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:26:46.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:26:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:26:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.851503 -999.00  +11.70   7.54     97  +11.30 1 3 1 3 1     0    0 0.46 1.98 ----- 7.5 7.5 271.6 8.1 13.2 -3.2 12.9 -0.2 12.5 -0.3 12.9 -1.2
2026-04-11T22:26:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:26:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:26:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.851503
2026-04-11T22:26:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:26:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:26:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:26:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:26:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:26:46.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:26:34', tmtdew=-0.03489, humidity=100.158, cloud=0.0, wind=9.59976, temperature=12.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:26:09.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:26:46.977 [DEBUG] [Thread-177839] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:26:47.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:26:47.070 [DEBUG] [Thread-177842] [transport.py] [_log()] starting thread (client mode): 0xae5f1510
2026-04-11T22:26:47.070 [DEBUG] [Thread-177842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:26:47.084 [DEBUG] [Thread-177842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:26:47.084 [INFO] [Thread-177842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] client lang: <none>
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] server lang: <none>
2026-04-11T22:26:47.092 [DEBUG] [Thread-177842] [transport.py] [_log()] kex follows: False
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] Compression: none
2026-04-11T22:26:47.093 [DEBUG] [Thread-177842] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:26:47.149 [DEBUG] [Thread-177842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:26:47.150 [DEBUG] [Thread-177842] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:26:47.150 [DEBUG] [Thread-177842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:26:47.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:26:47.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:26:47.204 [DEBUG] [Thread-177842] [transport.py] [_log()] userauth is OK
2026-04-11T22:26:47.205 [DEBUG] [Thread-177842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:26:47.205 [DEBUG] [Thread-177842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:26:47.205 [DEBUG] [Thread-177842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:26:47.205 [DEBUG] [Thread-177842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:26:47.230 [INFO] [Thread-177842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:26:47.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:26:47.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:26:48.053 [DEBUG] [Thread-177842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:26:48.054 [DEBUG] [Thread-177842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:26:48.101 [DEBUG] [Thread-177842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:26:48.102 [DEBUG] [Thread-177842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:26:48.111 [DEBUG] [Thread-177842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:26:48.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:26:48.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-04-11T22:26:48.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-04-11T22:26:48.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:26:48.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:26:48.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:26:48.145 [DEBUG] [Thread-177842] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:26:49.332 [DEBUG] [Thread-177844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:04.379 [DEBUG] [Thread-177845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:18.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:27:18.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:27:18.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-04-11T22:27:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 27, 9), 0.03, 100.095, 0.0, 8.38224, 11.6754, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:27:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:27:09
2026-04-11T22:27:19.418 [DEBUG] [Thread-177846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:19.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:27:19.960 [DEBUG] [Thread-177847] [transport.py] [_log()] starting thread (client mode): 0xa7957100
2026-04-11T22:27:19.960 [DEBUG] [Thread-177847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:27:19.980 [DEBUG] [Thread-177847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:27:19.980 [INFO] [Thread-177847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:27:19.983 [DEBUG] [Thread-177847] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] client lang: <none>
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] server lang: <none>
2026-04-11T22:27:19.984 [DEBUG] [Thread-177847] [transport.py] [_log()] kex follows: False
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] Compression: none
2026-04-11T22:27:19.985 [DEBUG] [Thread-177847] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:27:20.003 [DEBUG] [Thread-177847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:27:20.004 [DEBUG] [Thread-177847] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:27:20.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:27:20.006 [DEBUG] [Thread-177847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:27:20.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:27:20.007 [DEBUG] [Thread-177847] [transport.py] [_log()] userauth is OK
2026-04-11T22:27:20.007 [DEBUG] [Thread-177847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:27:20.007 [DEBUG] [Thread-177847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:27:20.008 [DEBUG] [Thread-177847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:27:20.008 [DEBUG] [Thread-177847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:27:20.025 [INFO] [Thread-177847] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:27:20.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:27:20.678 [DEBUG] [Thread-177847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:27:20.679 [DEBUG] [Thread-177847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:27:20.679 [DEBUG] [Thread-177847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:27:20.720 [DEBUG] [Thread-177847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:27:20.720 [DEBUG] [Thread-177847] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:27:20.724 [DEBUG] [Thread-177847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:27:20.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:27:20.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:27:20.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:27:20.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:27:20.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:27:20.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:27:20.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:27:20.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:27:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:27:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.851850 -999.00  +11.70   7.19     97  +11.30 1 3 1 3 1     0    0 0.48 2.09 ----- 7.2 7.2 280.8 8.8 13.1 -3.0 13.0 -0.3 12.5 -0.4 12.9 -1.2
2026-04-11T22:27:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:27:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:27:20.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.851850
2026-04-11T22:27:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:27:20.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:27:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:27:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:27:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:27:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:27:09', tmtdew=0.03, humidity=100.095, cloud=0.0, wind=8.38224, temperature=11.6754, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:26:39.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:27:20.747 [DEBUG] [Thread-177847] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:27:20.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:27:20.840 [DEBUG] [Thread-177850] [transport.py] [_log()] starting thread (client mode): 0xa7957310
2026-04-11T22:27:20.840 [DEBUG] [Thread-177850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:27:20.855 [DEBUG] [Thread-177850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:27:20.855 [INFO] [Thread-177850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:27:20.863 [DEBUG] [Thread-177850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:27:20.863 [DEBUG] [Thread-177850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:27:20.863 [DEBUG] [Thread-177850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] client lang: <none>
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] server lang: <none>
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] kex follows: False
2026-04-11T22:27:20.864 [DEBUG] [Thread-177850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:27:20.865 [DEBUG] [Thread-177850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:27:20.865 [DEBUG] [Thread-177850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:27:20.865 [DEBUG] [Thread-177850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:27:20.865 [DEBUG] [Thread-177850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:27:20.865 [DEBUG] [Thread-177850] [transport.py] [_log()] Compression: none
2026-04-11T22:27:20.865 [DEBUG] [Thread-177850] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:27:20.921 [DEBUG] [Thread-177850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:27:20.922 [DEBUG] [Thread-177850] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:27:20.922 [DEBUG] [Thread-177850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:27:20.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:27:20.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:27:20.976 [DEBUG] [Thread-177850] [transport.py] [_log()] userauth is OK
2026-04-11T22:27:20.976 [DEBUG] [Thread-177850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:27:20.976 [DEBUG] [Thread-177850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:27:20.976 [DEBUG] [Thread-177850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:27:20.976 [DEBUG] [Thread-177850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:27:20.997 [INFO] [Thread-177850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:27:20.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:27:20.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:27:21.788 [DEBUG] [Thread-177850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:27:21.789 [DEBUG] [Thread-177850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:27:21.836 [DEBUG] [Thread-177850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:27:21.836 [DEBUG] [Thread-177850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:27:21.846 [DEBUG] [Thread-177850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:27:21.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:27:21.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-04-11T22:27:21.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-04-11T22:27:21.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:27:21.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:27:21.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:27:21.883 [DEBUG] [Thread-177850] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:27:34.455 [DEBUG] [Thread-177852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:38.377 [DEBUG] [Thread-177853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:40.761 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:40.763 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:49.506 [DEBUG] [Thread-177854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:27:51.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:27:51.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:27:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:27:53.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 27, 44), -0.04, 100.191, 0.0, 10.4112, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:27:53.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:27:44
2026-04-11T22:27:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:27:53.782 [DEBUG] [Thread-177855] [transport.py] [_log()] starting thread (client mode): 0xae5f00d0
2026-04-11T22:27:53.783 [DEBUG] [Thread-177855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:27:53.803 [DEBUG] [Thread-177855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:27:53.803 [INFO] [Thread-177855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:27:53.806 [DEBUG] [Thread-177855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] client lang: <none>
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] server lang: <none>
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] kex follows: False
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:27:53.807 [DEBUG] [Thread-177855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:27:53.808 [DEBUG] [Thread-177855] [transport.py] [_log()] Compression: none
2026-04-11T22:27:53.808 [DEBUG] [Thread-177855] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:27:53.824 [DEBUG] [Thread-177855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:27:53.825 [DEBUG] [Thread-177855] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:27:53.825 [DEBUG] [Thread-177855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:27:53.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:27:53.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:27:53.827 [DEBUG] [Thread-177855] [transport.py] [_log()] userauth is OK
2026-04-11T22:27:53.828 [DEBUG] [Thread-177855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:27:53.828 [DEBUG] [Thread-177855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:27:53.828 [DEBUG] [Thread-177855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:27:53.828 [DEBUG] [Thread-177855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:27:53.853 [INFO] [Thread-177855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:27:53.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:27:54.485 [DEBUG] [Thread-177855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:27:54.485 [DEBUG] [Thread-177855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:27:54.486 [DEBUG] [Thread-177855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:27:54.526 [DEBUG] [Thread-177855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:27:54.526 [DEBUG] [Thread-177855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:27:54.529 [DEBUG] [Thread-177855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:27:54.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:27:54.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:27:54.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:27:54.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:27:54.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:27:54.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:27:54.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:27:54.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:27:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:27:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.852544 -999.00  +11.70   6.44     97  +11.30 1 3 1 3 1     0    0 0.46 1.98 ----- 6.4 6.4 277.0 9.2 13.2 -2.8 13.0 -0.4 12.6 -0.2 12.9 -0.9
2026-04-11T22:27:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:27:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:27:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.852544
2026-04-11T22:27:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:27:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:27:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:27:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:27:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:27:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:27:44', tmtdew=-0.04, humidity=100.191, cloud=0.0, wind=10.4112, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:27:39.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:27:54.555 [DEBUG] [Thread-177855] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:27:54.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:27:54.652 [DEBUG] [Thread-177858] [transport.py] [_log()] starting thread (client mode): 0xa7955ab0
2026-04-11T22:27:54.653 [DEBUG] [Thread-177858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:27:54.669 [DEBUG] [Thread-177858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:27:54.670 [INFO] [Thread-177858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:27:54.677 [DEBUG] [Thread-177858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:27:54.677 [DEBUG] [Thread-177858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] client lang: <none>
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] server lang: <none>
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] kex follows: False
2026-04-11T22:27:54.678 [DEBUG] [Thread-177858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:27:54.679 [DEBUG] [Thread-177858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:27:54.679 [DEBUG] [Thread-177858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:27:54.679 [DEBUG] [Thread-177858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:27:54.679 [DEBUG] [Thread-177858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:27:54.679 [DEBUG] [Thread-177858] [transport.py] [_log()] Compression: none
2026-04-11T22:27:54.679 [DEBUG] [Thread-177858] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:27:54.737 [DEBUG] [Thread-177858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:27:54.737 [DEBUG] [Thread-177858] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:27:54.738 [DEBUG] [Thread-177858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:27:54.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:27:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:27:54.796 [DEBUG] [Thread-177858] [transport.py] [_log()] userauth is OK
2026-04-11T22:27:54.797 [DEBUG] [Thread-177858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:27:54.797 [DEBUG] [Thread-177858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:27:54.797 [DEBUG] [Thread-177858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:27:54.797 [DEBUG] [Thread-177858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:27:54.816 [INFO] [Thread-177858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:27:54.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:27:54.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:27:55.652 [DEBUG] [Thread-177858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:27:55.653 [DEBUG] [Thread-177858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:27:55.700 [DEBUG] [Thread-177858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:27:55.700 [DEBUG] [Thread-177858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:27:55.709 [DEBUG] [Thread-177858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:27:55.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:27:55.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-04-11T22:27:55.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:27:55.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:27:55.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:27:55.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:27:55.747 [DEBUG] [Thread-177858] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:28:04.541 [DEBUG] [Thread-177860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:19.594 [DEBUG] [Thread-177861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:25.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:28:25.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:28:25.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-04-11T22:28:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 27, 44), -0.04, 100.191, 0.0, 10.4112, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:28:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:27:44
2026-04-11T22:28:27.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:28:27.685 [DEBUG] [Thread-177862] [transport.py] [_log()] starting thread (client mode): 0xb0fcebf0
2026-04-11T22:28:27.685 [DEBUG] [Thread-177862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:28:27.703 [DEBUG] [Thread-177862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:28:27.703 [INFO] [Thread-177862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:28:27.706 [DEBUG] [Thread-177862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:28:27.706 [DEBUG] [Thread-177862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:28:27.706 [DEBUG] [Thread-177862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] client lang: <none>
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] server lang: <none>
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] kex follows: False
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] Compression: none
2026-04-11T22:28:27.707 [DEBUG] [Thread-177862] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:28:27.725 [DEBUG] [Thread-177862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:28:27.725 [DEBUG] [Thread-177862] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:28:27.726 [DEBUG] [Thread-177862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:28:27.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:28:27.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:28:27.727 [DEBUG] [Thread-177862] [transport.py] [_log()] userauth is OK
2026-04-11T22:28:27.728 [DEBUG] [Thread-177862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:28:27.728 [DEBUG] [Thread-177862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:28:27.728 [DEBUG] [Thread-177862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:28:27.728 [DEBUG] [Thread-177862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:28:27.747 [INFO] [Thread-177862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:28:27.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:28:28.369 [DEBUG] [Thread-177862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:28:28.369 [DEBUG] [Thread-177862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:28:28.369 [DEBUG] [Thread-177862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:28:28.410 [DEBUG] [Thread-177862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:28:28.410 [DEBUG] [Thread-177862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:28:28.414 [DEBUG] [Thread-177862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:28:28.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:28:28.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:28:28.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:28:28.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:28:28.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:28:28.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:28:28.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:28:28.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:28:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:28:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.852892 -999.00  +11.70   8.89     97  +11.30 1 3 1 3 1     0    0 0.46 1.83 ----- 8.9 8.9 281.4 10.2 13.2 -3.5 13.0 -0.4 12.6 -0.9 12.9 -1.3
2026-04-11T22:28:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:28:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:28:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.852892
2026-04-11T22:28:28.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:28:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:28:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:28:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:28:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:28:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:27:44', tmtdew=-0.04, humidity=100.191, cloud=0.0, wind=10.4112, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:28:09.869', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:28:28.439 [DEBUG] [Thread-177862] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:28:28.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:28:28.543 [DEBUG] [Thread-177865] [transport.py] [_log()] starting thread (client mode): 0xae5f20e0
2026-04-11T22:28:28.543 [DEBUG] [Thread-177865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:28:28.558 [DEBUG] [Thread-177865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:28:28.558 [INFO] [Thread-177865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] client lang: <none>
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] server lang: <none>
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] kex follows: False
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:28:28.566 [DEBUG] [Thread-177865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:28:28.567 [DEBUG] [Thread-177865] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:28:28.567 [DEBUG] [Thread-177865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:28:28.567 [DEBUG] [Thread-177865] [transport.py] [_log()] Compression: none
2026-04-11T22:28:28.567 [DEBUG] [Thread-177865] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:28:28.625 [DEBUG] [Thread-177865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:28:28.625 [DEBUG] [Thread-177865] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:28:28.626 [DEBUG] [Thread-177865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:28:28.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:28:28.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:28:28.684 [DEBUG] [Thread-177865] [transport.py] [_log()] userauth is OK
2026-04-11T22:28:28.684 [DEBUG] [Thread-177865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:28:28.684 [DEBUG] [Thread-177865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:28:28.684 [DEBUG] [Thread-177865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:28:28.685 [DEBUG] [Thread-177865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:28:28.712 [INFO] [Thread-177865] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:28:28.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:28:28.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:28:29.550 [DEBUG] [Thread-177865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:28:29.550 [DEBUG] [Thread-177865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:28:29.598 [DEBUG] [Thread-177865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:28:29.598 [DEBUG] [Thread-177865] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:28:29.607 [DEBUG] [Thread-177865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:28:29.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:28:29.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-04-11T22:28:29.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-04-11T22:28:29.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:28:29.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:28:29.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:28:29.644 [DEBUG] [Thread-177865] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:28:34.632 [DEBUG] [Thread-177867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:38.435 [DEBUG] [Thread-177868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:40.971 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:40.972 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:49.680 [DEBUG] [Thread-177869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:28:59.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:28:59.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:28:59.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-04-11T22:29:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 28, 20), 0.035105, 100.062, 0.0, 9.29952, 11.609, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:29:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:28:20
2026-04-11T22:29:01.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:29:01.749 [DEBUG] [Thread-177870] [transport.py] [_log()] starting thread (client mode): 0xb0fcc310
2026-04-11T22:29:01.749 [DEBUG] [Thread-177870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:29:01.769 [DEBUG] [Thread-177870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:29:01.769 [INFO] [Thread-177870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:29:01.772 [DEBUG] [Thread-177870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] client lang: <none>
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] server lang: <none>
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] kex follows: False
2026-04-11T22:29:01.773 [DEBUG] [Thread-177870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:29:01.774 [DEBUG] [Thread-177870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:29:01.774 [DEBUG] [Thread-177870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:29:01.774 [DEBUG] [Thread-177870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:29:01.774 [DEBUG] [Thread-177870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:29:01.774 [DEBUG] [Thread-177870] [transport.py] [_log()] Compression: none
2026-04-11T22:29:01.774 [DEBUG] [Thread-177870] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:29:01.792 [DEBUG] [Thread-177870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:29:01.792 [DEBUG] [Thread-177870] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:29:01.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:29:01.793 [DEBUG] [Thread-177870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:29:01.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:29:01.795 [DEBUG] [Thread-177870] [transport.py] [_log()] userauth is OK
2026-04-11T22:29:01.795 [DEBUG] [Thread-177870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:29:01.796 [DEBUG] [Thread-177870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:29:01.796 [DEBUG] [Thread-177870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:29:01.796 [DEBUG] [Thread-177870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:29:01.828 [INFO] [Thread-177870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:29:01.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:29:02.461 [DEBUG] [Thread-177870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:29:02.461 [DEBUG] [Thread-177870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:29:02.461 [DEBUG] [Thread-177870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:29:02.502 [DEBUG] [Thread-177870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:29:02.502 [DEBUG] [Thread-177870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:29:02.505 [DEBUG] [Thread-177870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:29:02.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:29:02.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:29:02.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:29:02.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:29:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:29:02.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:29:02.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:29:02.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:29:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:29:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.853239 -999.00  +11.70   9.70     97  +11.30 1 3 1 3 1     0    0 0.45 1.79 ----- 9.7 9.7 275.0 10.7 13.2 -3.4 13.0 -0.6 12.6 -0.4 12.9 -1.3
2026-04-11T22:29:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:29:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:29:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.853239
2026-04-11T22:29:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:29:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:29:02.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:29:02.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:29:02.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:29:02.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:28:20', tmtdew=0.035105, humidity=100.062, cloud=0.0, wind=9.29952, temperature=11.609, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:28:39.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:29:02.531 [DEBUG] [Thread-177870] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:29:02.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:29:02.635 [DEBUG] [Thread-177873] [transport.py] [_log()] starting thread (client mode): 0xb0f8dab0
2026-04-11T22:29:02.635 [DEBUG] [Thread-177873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:29:02.649 [DEBUG] [Thread-177873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:29:02.649 [INFO] [Thread-177873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] client lang: <none>
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] server lang: <none>
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] kex follows: False
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:29:02.657 [DEBUG] [Thread-177873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:29:02.658 [DEBUG] [Thread-177873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:29:02.658 [DEBUG] [Thread-177873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:29:02.658 [DEBUG] [Thread-177873] [transport.py] [_log()] Compression: none
2026-04-11T22:29:02.658 [DEBUG] [Thread-177873] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:29:02.716 [DEBUG] [Thread-177873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:29:02.717 [DEBUG] [Thread-177873] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:29:02.717 [DEBUG] [Thread-177873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:29:02.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:29:02.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:29:02.776 [DEBUG] [Thread-177873] [transport.py] [_log()] userauth is OK
2026-04-11T22:29:02.776 [DEBUG] [Thread-177873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:29:02.776 [DEBUG] [Thread-177873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:29:02.776 [DEBUG] [Thread-177873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:29:02.776 [DEBUG] [Thread-177873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:29:02.800 [INFO] [Thread-177873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:29:02.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:29:02.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:29:03.617 [DEBUG] [Thread-177873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:29:03.617 [DEBUG] [Thread-177873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:29:03.665 [DEBUG] [Thread-177873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:29:03.665 [DEBUG] [Thread-177873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:29:03.675 [DEBUG] [Thread-177873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:29:03.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:29: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')
2026-04-11T22:29:03.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-04-11T22:29:03.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:29:03.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:29:03.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:29:03.712 [DEBUG] [Thread-177873] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:29:04.713 [DEBUG] [Thread-177875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:29:19.767 [DEBUG] [Thread-177876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:29:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:29:33.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:29:33.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-04-11T22:29:34.804 [DEBUG] [Thread-177877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:29:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 28, 56), 0.03757, 100.046, 0.0, 9.37008, 11.6588, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:29:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:28:56
2026-04-11T22:29:35.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:29:35.609 [DEBUG] [Thread-177878] [transport.py] [_log()] starting thread (client mode): 0xb0f8c130
2026-04-11T22:29:35.610 [DEBUG] [Thread-177878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:29:35.629 [DEBUG] [Thread-177878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:29:35.630 [INFO] [Thread-177878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] client lang: <none>
2026-04-11T22:29:35.633 [DEBUG] [Thread-177878] [transport.py] [_log()] server lang: <none>
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] kex follows: False
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] Compression: none
2026-04-11T22:29:35.634 [DEBUG] [Thread-177878] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:29:35.652 [DEBUG] [Thread-177878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:29:35.653 [DEBUG] [Thread-177878] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:29:35.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:29:35.654 [DEBUG] [Thread-177878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:29:35.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:29:35.657 [DEBUG] [Thread-177878] [transport.py] [_log()] userauth is OK
2026-04-11T22:29:35.657 [DEBUG] [Thread-177878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:29:35.657 [DEBUG] [Thread-177878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:29:35.658 [DEBUG] [Thread-177878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:29:35.658 [DEBUG] [Thread-177878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:29:35.679 [INFO] [Thread-177878] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:29:35.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:29:36.296 [DEBUG] [Thread-177878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:29:36.296 [DEBUG] [Thread-177878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:29:36.297 [DEBUG] [Thread-177878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:29:36.338 [DEBUG] [Thread-177878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:29:36.338 [DEBUG] [Thread-177878] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:29:36.341 [DEBUG] [Thread-177878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:29:36.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:29:36.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:29:36.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:29:36.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:29:36.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:29:36.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:29:36.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:29:36.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:29:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:29:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.853586 -999.00  +11.60  10.84     97  +11.20 1 3 1 3 1     0    0 0.46 1.93 ----- 10.8 10.8 275.2 12.2 13.1 -2.8 12.9 -0.4 12.5 -1.0 12.9 -1.1
2026-04-11T22:29:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:29:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:29:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.853586
2026-04-11T22:29:36.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:29:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:29:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:29:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:29:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:29:36.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:28:56', tmtdew=0.03757, humidity=100.046, cloud=0.0, wind=9.37008, temperature=11.6588, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:29:09.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:29:36.368 [DEBUG] [Thread-177878] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:29:36.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:29:36.461 [DEBUG] [Thread-177881] [transport.py] [_log()] starting thread (client mode): 0xa7956350
2026-04-11T22:29:36.461 [DEBUG] [Thread-177881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:29:36.476 [DEBUG] [Thread-177881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:29:36.476 [INFO] [Thread-177881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:29:36.484 [DEBUG] [Thread-177881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:29:36.484 [DEBUG] [Thread-177881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] client lang: <none>
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] server lang: <none>
2026-04-11T22:29:36.485 [DEBUG] [Thread-177881] [transport.py] [_log()] kex follows: False
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] Compression: none
2026-04-11T22:29:36.486 [DEBUG] [Thread-177881] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:29:36.544 [DEBUG] [Thread-177881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:29:36.544 [DEBUG] [Thread-177881] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:29:36.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:29:36.546 [DEBUG] [Thread-177881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:29:36.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:29:36.606 [DEBUG] [Thread-177881] [transport.py] [_log()] userauth is OK
2026-04-11T22:29:36.607 [DEBUG] [Thread-177881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:29:36.607 [DEBUG] [Thread-177881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:29:36.607 [DEBUG] [Thread-177881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:29:36.607 [DEBUG] [Thread-177881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:29:36.625 [INFO] [Thread-177881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:29:36.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:29:36.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:29:37.446 [DEBUG] [Thread-177881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:29:37.446 [DEBUG] [Thread-177881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:29:37.494 [DEBUG] [Thread-177881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:29:37.494 [DEBUG] [Thread-177881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:29:37.503 [DEBUG] [Thread-177881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:29:37.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:29:37.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-04-11T22:29:37.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-04-11T22:29:37.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:29:37.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:29:37.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:29:37.546 [DEBUG] [Thread-177881] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:29:38.513 [DEBUG] [Thread-177883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:29:41.176 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:29:41.178 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:29:49.844 [DEBUG] [Thread-177884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:04.898 [DEBUG] [Thread-177885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:07.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:30:07.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:30:07.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:30:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 29, 32), 0.03507, 100.062, 0.0, 8.91144, 11.6422, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:30:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:29:32
2026-04-11T22:30:09.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:30:09.382 [DEBUG] [Thread-177886] [transport.py] [_log()] starting thread (client mode): 0xb0f8e110
2026-04-11T22:30:09.382 [DEBUG] [Thread-177886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:30:09.401 [DEBUG] [Thread-177886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:30:09.401 [INFO] [Thread-177886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:09.404 [DEBUG] [Thread-177886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] client lang: <none>
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] server lang: <none>
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] kex follows: False
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] Compression: none
2026-04-11T22:30:09.405 [DEBUG] [Thread-177886] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:30:09.412 [DEBUG] [Thread-177886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:30:09.413 [DEBUG] [Thread-177886] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:30:09.413 [DEBUG] [Thread-177886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:30:09.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:30:09.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:30:09.415 [DEBUG] [Thread-177886] [transport.py] [_log()] userauth is OK
2026-04-11T22:30:09.415 [DEBUG] [Thread-177886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:30:09.415 [DEBUG] [Thread-177886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:30:09.415 [DEBUG] [Thread-177886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:30:09.415 [DEBUG] [Thread-177886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:30:09.432 [INFO] [Thread-177886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:30:09.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:30:10.417 [DEBUG] [Thread-177886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:30:10.417 [DEBUG] [Thread-177886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:30:10.417 [DEBUG] [Thread-177886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:30:10.458 [DEBUG] [Thread-177886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:30:10.458 [DEBUG] [Thread-177886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:30:10.461 [DEBUG] [Thread-177886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:30:10.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:30:10.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:30:10.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:30:10.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:30:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:30:10.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:30:10.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.853933 -999.00  +11.70   9.42     97  +11.20 1 3 1 3 1     0    0 0.46 1.93 ----- 9.4 9.4 281.0 14.9 13.1 -2.2 12.9 -0.3 12.5 -0.4 12.9 -0.9
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.853933
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:30:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:29:32', tmtdew=0.03507, humidity=100.062, cloud=0.0, wind=8.91144, temperature=11.6422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:29:39.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:30:10.484 [DEBUG] [Thread-177886] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:30:10.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:30:10.566 [DEBUG] [Thread-177889] [transport.py] [_log()] starting thread (client mode): 0xa79522c0
2026-04-11T22:30:10.566 [DEBUG] [Thread-177889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:30:10.584 [DEBUG] [Thread-177889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:30:10.584 [INFO] [Thread-177889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:30:10.593 [DEBUG] [Thread-177889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] client lang: <none>
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] server lang: <none>
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] kex follows: False
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:30:10.594 [DEBUG] [Thread-177889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:30:10.595 [DEBUG] [Thread-177889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:30:10.595 [DEBUG] [Thread-177889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:30:10.595 [DEBUG] [Thread-177889] [transport.py] [_log()] Compression: none
2026-04-11T22:30:10.595 [DEBUG] [Thread-177889] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:30:10.651 [DEBUG] [Thread-177889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:30:10.651 [DEBUG] [Thread-177889] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:30:10.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:30:10.652 [DEBUG] [Thread-177889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:30:10.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:30:10.707 [DEBUG] [Thread-177889] [transport.py] [_log()] userauth is OK
2026-04-11T22:30:10.708 [DEBUG] [Thread-177889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:30:10.708 [DEBUG] [Thread-177889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:30:10.708 [DEBUG] [Thread-177889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:30:10.708 [DEBUG] [Thread-177889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:30:10.731 [INFO] [Thread-177889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:30:10.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:30:10.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:30:11.602 [DEBUG] [Thread-177889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:30:11.602 [DEBUG] [Thread-177889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:30:11.650 [DEBUG] [Thread-177889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:30:11.650 [DEBUG] [Thread-177889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:30:11.659 [DEBUG] [Thread-177889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:30:11.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:30:11.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-04-11T22:30:11.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-04-11T22:30:11.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:30:11.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:30:11.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:30:11.697 [DEBUG] [Thread-177889] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:30:19.938 [DEBUG] [Thread-177891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:34.994 [DEBUG] [Thread-177892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:38.569 [DEBUG] [Thread-177893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:41.381 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:41.382 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:30:41.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:30:41.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:30:41.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-04-11T22:30:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 30, 7), 0.040175, 100.029, 0.0, 8.982, 11.5759, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:30:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:30:07
2026-04-11T22:30:43.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:30:43.473 [DEBUG] [Thread-177894] [transport.py] [_log()] starting thread (client mode): 0xb0f8e800
2026-04-11T22:30:43.473 [DEBUG] [Thread-177894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:30:43.494 [DEBUG] [Thread-177894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:30:43.494 [INFO] [Thread-177894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:43.497 [DEBUG] [Thread-177894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] client lang: <none>
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] server lang: <none>
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] kex follows: False
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] Compression: none
2026-04-11T22:30:43.498 [DEBUG] [Thread-177894] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:30:43.516 [DEBUG] [Thread-177894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:30:43.517 [DEBUG] [Thread-177894] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:30:43.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:30:43.518 [DEBUG] [Thread-177894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:30:43.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:30:43.520 [DEBUG] [Thread-177894] [transport.py] [_log()] userauth is OK
2026-04-11T22:30:43.520 [DEBUG] [Thread-177894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:30:43.520 [DEBUG] [Thread-177894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:30:43.520 [DEBUG] [Thread-177894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:30:43.520 [DEBUG] [Thread-177894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:30:43.540 [INFO] [Thread-177894] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:30:43.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:30:44.147 [DEBUG] [Thread-177894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:30:44.147 [DEBUG] [Thread-177894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:30:44.148 [DEBUG] [Thread-177894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:30:44.188 [DEBUG] [Thread-177894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:30:44.188 [DEBUG] [Thread-177894] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:30:44.195 [DEBUG] [Thread-177894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:30:44.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:30:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:30:44.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:30:44.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:30:44.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:30:44.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:30:44.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:30:44.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:30:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:30:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.854280 -999.00  +11.70  12.44     97  +11.30 1 3 1 3 1     0    0 0.48 2.28 ----- 12.4 12.4 268.8 13.6 13.1 -3.1 12.9 -0.7 12.5 -1.0 12.9 -1.5
2026-04-11T22:30:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:30:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:30:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.854280
2026-04-11T22:30:44.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:30:44.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:30:44.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:30:44.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:30:44.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:30:44.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:30:07', tmtdew=0.040175, humidity=100.029, cloud=0.0, wind=8.982, temperature=11.5759, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:30:09.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:30:44.216 [DEBUG] [Thread-177894] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:30:44.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:30:44.309 [DEBUG] [Thread-177897] [transport.py] [_log()] starting thread (client mode): 0xb0f54550
2026-04-11T22:30:44.309 [DEBUG] [Thread-177897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:30:44.324 [DEBUG] [Thread-177897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:30:44.324 [INFO] [Thread-177897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:30:44.331 [DEBUG] [Thread-177897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:30:44.331 [DEBUG] [Thread-177897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:30:44.331 [DEBUG] [Thread-177897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] client lang: <none>
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] server lang: <none>
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] kex follows: False
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] Compression: none
2026-04-11T22:30:44.332 [DEBUG] [Thread-177897] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:30:44.390 [DEBUG] [Thread-177897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:30:44.391 [DEBUG] [Thread-177897] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:30:44.391 [DEBUG] [Thread-177897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:30:44.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:30:44.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:30:44.447 [DEBUG] [Thread-177897] [transport.py] [_log()] userauth is OK
2026-04-11T22:30:44.447 [DEBUG] [Thread-177897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:30:44.447 [DEBUG] [Thread-177897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:30:44.448 [DEBUG] [Thread-177897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:30:44.448 [DEBUG] [Thread-177897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:30:44.467 [INFO] [Thread-177897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:30:44.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:30:44.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:30:45.305 [DEBUG] [Thread-177897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:30:45.305 [DEBUG] [Thread-177897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:30:45.353 [DEBUG] [Thread-177897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:30:45.353 [DEBUG] [Thread-177897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:30:45.362 [DEBUG] [Thread-177897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:30:45.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:30:45.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-04-11T22:30: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-04-11T22:30:45.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:30:45.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:30:45.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:30:45.398 [DEBUG] [Thread-177897] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:30:50.037 [DEBUG] [Thread-177899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:05.087 [DEBUG] [Thread-177900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:15.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:31:15.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:31:15.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-04-11T22:31:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 30, 43), -0.03996, 100.191, 0.0, 12.2458, 12.1175, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:31:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:30:43
2026-04-11T22:31:17.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:31:17.203 [DEBUG] [Thread-177901] [transport.py] [_log()] starting thread (client mode): 0xa7955a20
2026-04-11T22:31:17.203 [DEBUG] [Thread-177901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:31:17.222 [DEBUG] [Thread-177901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:31:17.222 [INFO] [Thread-177901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:31:17.225 [DEBUG] [Thread-177901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:31:17.225 [DEBUG] [Thread-177901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:31:17.225 [DEBUG] [Thread-177901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:31:17.225 [DEBUG] [Thread-177901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:17.225 [DEBUG] [Thread-177901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:17.225 [DEBUG] [Thread-177901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] client lang: <none>
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] server lang: <none>
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] kex follows: False
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] Compression: none
2026-04-11T22:31:17.226 [DEBUG] [Thread-177901] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:31:17.235 [DEBUG] [Thread-177901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:31:17.235 [DEBUG] [Thread-177901] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:31:17.236 [DEBUG] [Thread-177901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:31:17.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:31:17.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:31:17.238 [DEBUG] [Thread-177901] [transport.py] [_log()] userauth is OK
2026-04-11T22:31:17.238 [DEBUG] [Thread-177901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:31:17.238 [DEBUG] [Thread-177901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:31:17.238 [DEBUG] [Thread-177901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:31:17.238 [DEBUG] [Thread-177901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:31:17.260 [INFO] [Thread-177901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:31:17.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:31:17.874 [DEBUG] [Thread-177901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:31:17.874 [DEBUG] [Thread-177901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:31:17.874 [DEBUG] [Thread-177901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:31:17.915 [DEBUG] [Thread-177901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:31:17.915 [DEBUG] [Thread-177901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:31:17.918 [DEBUG] [Thread-177901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:31:17.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:31:17.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:31:17.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:31:17.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:31:17.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:31:17.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:31:17.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:31:17.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:31:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:31:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.854628 -999.00  +11.70   9.74     97  +11.20 1 3 1 3 1     0    0 0.47 2.16 ----- 9.7 9.7 287.6 13.6 13.0 -2.9 12.9 -0.6 12.4 -1.2 12.9 -1.2
2026-04-11T22:31:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:31:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:31:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.854628
2026-04-11T22:31:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:31:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:31:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:31:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:31:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:31:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:30:43', tmtdew=-0.03996, humidity=100.191, cloud=0.0, wind=12.2458, temperature=12.1175, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:30:39.859', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:31:17.940 [DEBUG] [Thread-177901] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:31:18.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:31:18.037 [DEBUG] [Thread-177904] [transport.py] [_log()] starting thread (client mode): 0xb0fce860
2026-04-11T22:31:18.037 [DEBUG] [Thread-177904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:31:18.052 [DEBUG] [Thread-177904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:31:18.052 [INFO] [Thread-177904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:31:18.059 [DEBUG] [Thread-177904] [transport.py] [_log()] client lang: <none>
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] server lang: <none>
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] kex follows: False
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] Compression: none
2026-04-11T22:31:18.060 [DEBUG] [Thread-177904] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:31:18.125 [DEBUG] [Thread-177904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:31:18.125 [DEBUG] [Thread-177904] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:31:18.126 [DEBUG] [Thread-177904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:31:18.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:31:18.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:31:18.182 [DEBUG] [Thread-177904] [transport.py] [_log()] userauth is OK
2026-04-11T22:31:18.183 [DEBUG] [Thread-177904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:31:18.183 [DEBUG] [Thread-177904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:31:18.183 [DEBUG] [Thread-177904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:31:18.183 [DEBUG] [Thread-177904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:31:18.203 [INFO] [Thread-177904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:31:18.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:31:18.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:31:19.004 [DEBUG] [Thread-177904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:31:19.005 [DEBUG] [Thread-177904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:31:19.053 [DEBUG] [Thread-177904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:31:19.053 [DEBUG] [Thread-177904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:31:19.063 [DEBUG] [Thread-177904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:31:19.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:31:19.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-04-11T22:31:19.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-04-11T22:31:19.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:31:19.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:31:19.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:31:19.100 [DEBUG] [Thread-177904] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:31:20.125 [DEBUG] [Thread-177906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:35.185 [DEBUG] [Thread-177907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:38.626 [DEBUG] [Thread-177908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:41.586 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:41.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:49.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:31:49.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:31: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-04-11T22:31:50.228 [DEBUG] [Thread-177909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:31:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 31, 18), 0.03002, 100.095, 0.0, 9.75816, 11.7088, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:31:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:31:18
2026-04-11T22:31:50.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:31:50.917 [DEBUG] [Thread-177910] [transport.py] [_log()] starting thread (client mode): 0xa7956140
2026-04-11T22:31:50.917 [DEBUG] [Thread-177910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:31:50.937 [DEBUG] [Thread-177910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:31:50.937 [INFO] [Thread-177910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:31:50.939 [DEBUG] [Thread-177910] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:31:50.939 [DEBUG] [Thread-177910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:31:50.939 [DEBUG] [Thread-177910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:31:50.939 [DEBUG] [Thread-177910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:50.939 [DEBUG] [Thread-177910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:50.939 [DEBUG] [Thread-177910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] client lang: <none>
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] server lang: <none>
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] kex follows: False
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] Compression: none
2026-04-11T22:31:50.940 [DEBUG] [Thread-177910] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:31:50.955 [DEBUG] [Thread-177910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:31:50.956 [DEBUG] [Thread-177910] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:31:50.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:31:50.957 [DEBUG] [Thread-177910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:31:50.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:31:50.960 [DEBUG] [Thread-177910] [transport.py] [_log()] userauth is OK
2026-04-11T22:31:50.960 [DEBUG] [Thread-177910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:31:50.960 [DEBUG] [Thread-177910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:31:50.960 [DEBUG] [Thread-177910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:31:50.960 [DEBUG] [Thread-177910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:31:50.985 [INFO] [Thread-177910] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:31:50.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:31:51.630 [DEBUG] [Thread-177910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:31:51.630 [DEBUG] [Thread-177910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:31:51.631 [DEBUG] [Thread-177910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:31:51.671 [DEBUG] [Thread-177910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:31:51.671 [DEBUG] [Thread-177910] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:31:51.674 [DEBUG] [Thread-177910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:31:51.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:31:51.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:31:51.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:31:51.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:31:51.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:31:51.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:31:51.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:31:51.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:31:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:31:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.854975 -999.00  +11.60  10.48     97  +11.20 1 3 1 3 1     0    0 0.47 2.22 ----- 10.5 10.5 282.2 13.4 13.1 -2.5 12.9 -0.4 12.5 -0.9 12.9 -0.8
2026-04-11T22:31:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:31:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:31:51.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.854975
2026-04-11T22:31:51.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:31:51.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:31:51.700 [DEBUG] [Thread-177910] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:31:51.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:31:51.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:31:51.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:31:51.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:31:18', tmtdew=0.03002, humidity=100.095, cloud=0.0, wind=9.75816, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:31:09.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:31:51.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:31:51.789 [DEBUG] [Thread-177913] [transport.py] [_log()] starting thread (client mode): 0xae5f0d90
2026-04-11T22:31:51.790 [DEBUG] [Thread-177913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:31:51.804 [DEBUG] [Thread-177913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:31:51.804 [INFO] [Thread-177913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:31:51.812 [DEBUG] [Thread-177913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:31:51.813 [DEBUG] [Thread-177913] [transport.py] [_log()] client lang: <none>
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] server lang: <none>
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] kex follows: False
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] Compression: none
2026-04-11T22:31:51.814 [DEBUG] [Thread-177913] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:31:51.870 [DEBUG] [Thread-177913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:31:51.871 [DEBUG] [Thread-177913] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:31:51.871 [DEBUG] [Thread-177913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:31:51.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:31:51.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:31:51.926 [DEBUG] [Thread-177913] [transport.py] [_log()] userauth is OK
2026-04-11T22:31:51.926 [DEBUG] [Thread-177913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:31:51.926 [DEBUG] [Thread-177913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:31:51.926 [DEBUG] [Thread-177913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:31:51.926 [DEBUG] [Thread-177913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:31:51.945 [INFO] [Thread-177913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:31:51.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:31:51.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:31:52.774 [DEBUG] [Thread-177913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:31:52.775 [DEBUG] [Thread-177913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:31:52.823 [DEBUG] [Thread-177913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:31:52.823 [DEBUG] [Thread-177913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:31:52.832 [DEBUG] [Thread-177913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:31:52.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:31:52.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-04-11T22:31:52.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-04-11T22:31:52.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:31:52.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:31:52.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:31:52.869 [DEBUG] [Thread-177913] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:32:05.267 [DEBUG] [Thread-177915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:20.320 [DEBUG] [Thread-177916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:32:22.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:32:22.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-04-11T22:32:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 31, 53), -0.03497, 100.158, 0.0, 10.8698, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:32:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:31:53
2026-04-11T22:32:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:32:24.627 [DEBUG] [Thread-177917] [transport.py] [_log()] starting thread (client mode): 0xa7950e80
2026-04-11T22:32:24.627 [DEBUG] [Thread-177917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:32:24.647 [DEBUG] [Thread-177917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:32:24.647 [INFO] [Thread-177917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:32:24.651 [DEBUG] [Thread-177917] [transport.py] [_log()] client lang: <none>
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] server lang: <none>
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] kex follows: False
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] Compression: none
2026-04-11T22:32:24.652 [DEBUG] [Thread-177917] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:32:24.671 [DEBUG] [Thread-177917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:32:24.672 [DEBUG] [Thread-177917] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:32:24.672 [DEBUG] [Thread-177917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:32:24.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:32:24.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:32:24.674 [DEBUG] [Thread-177917] [transport.py] [_log()] userauth is OK
2026-04-11T22:32:24.674 [DEBUG] [Thread-177917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:32:24.674 [DEBUG] [Thread-177917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:32:24.674 [DEBUG] [Thread-177917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:32:24.674 [DEBUG] [Thread-177917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:32:24.695 [INFO] [Thread-177917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:32:24.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:32:25.343 [DEBUG] [Thread-177917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:32:25.343 [DEBUG] [Thread-177917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:32:25.343 [DEBUG] [Thread-177917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:32:25.384 [DEBUG] [Thread-177917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:32:25.384 [DEBUG] [Thread-177917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:32:25.388 [DEBUG] [Thread-177917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:32:25.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:32:25.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:32:25.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:32:25.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:32:25.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:32:25.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:32:25.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:32:25.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:32:25.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:32:25.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.855322 -999.00  +11.70   9.60     97  +11.30 1 3 1 3 1     0    0 0.48 2.14 ----- 9.6 9.6 291.7 10.9 13.1 -2.4 12.9 -0.4 12.5 -1.0 12.9 -0.9
2026-04-11T22:32:25.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:32:25.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:32:25.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.855322
2026-04-11T22:32:25.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:32:25.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:32:25.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:32:25.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:32:25.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:32:25.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:31:53', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=10.8698, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:31:39.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:32:25.416 [DEBUG] [Thread-177917] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:32:25.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:32:25.509 [DEBUG] [Thread-177920] [transport.py] [_log()] starting thread (client mode): 0xb0f546a0
2026-04-11T22:32:25.509 [DEBUG] [Thread-177920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:32:25.527 [DEBUG] [Thread-177920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:32:25.527 [INFO] [Thread-177920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] client lang: <none>
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] server lang: <none>
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] kex follows: False
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:32:25.535 [DEBUG] [Thread-177920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:32:25.536 [DEBUG] [Thread-177920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:32:25.536 [DEBUG] [Thread-177920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:32:25.536 [DEBUG] [Thread-177920] [transport.py] [_log()] Compression: none
2026-04-11T22:32:25.536 [DEBUG] [Thread-177920] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:32:25.594 [DEBUG] [Thread-177920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:32:25.595 [DEBUG] [Thread-177920] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:32:25.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:32:25.596 [DEBUG] [Thread-177920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:32:25.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:32:25.654 [DEBUG] [Thread-177920] [transport.py] [_log()] userauth is OK
2026-04-11T22:32:25.654 [DEBUG] [Thread-177920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:32:25.655 [DEBUG] [Thread-177920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:32:25.655 [DEBUG] [Thread-177920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:32:25.655 [DEBUG] [Thread-177920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:32:25.673 [INFO] [Thread-177920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:32:25.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:32:25.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:32:26.506 [DEBUG] [Thread-177920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:32:26.507 [DEBUG] [Thread-177920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:32:26.554 [DEBUG] [Thread-177920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:32:26.554 [DEBUG] [Thread-177920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:32:26.563 [DEBUG] [Thread-177920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:32:26.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:32:26.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:32:26.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-04-11T22:32:26.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:32:26.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:32:26.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:32:26.598 [DEBUG] [Thread-177920] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:32:35.357 [DEBUG] [Thread-177922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:38.700 [DEBUG] [Thread-177923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:41.807 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:41.808 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:50.411 [DEBUG] [Thread-177924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:32:56.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:32:56.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:32:56.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-04-11T22:32:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 32, 29), 0.03, 100.095, 0.0, 11.5582, 11.6754, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:32:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:32:29
2026-04-11T22:32:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:32:58.474 [DEBUG] [Thread-177925] [transport.py] [_log()] starting thread (client mode): 0xa7911d80
2026-04-11T22:32:58.474 [DEBUG] [Thread-177925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:32:58.495 [DEBUG] [Thread-177925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:32:58.495 [INFO] [Thread-177925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:32:58.498 [DEBUG] [Thread-177925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:32:58.498 [DEBUG] [Thread-177925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:32:58.498 [DEBUG] [Thread-177925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] client lang: <none>
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] server lang: <none>
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] kex follows: False
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] Compression: none
2026-04-11T22:32:58.499 [DEBUG] [Thread-177925] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:32:58.516 [DEBUG] [Thread-177925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:32:58.516 [DEBUG] [Thread-177925] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:32:58.517 [DEBUG] [Thread-177925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:32:58.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:32:58.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:32:58.519 [DEBUG] [Thread-177925] [transport.py] [_log()] userauth is OK
2026-04-11T22:32:58.519 [DEBUG] [Thread-177925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:32:58.520 [DEBUG] [Thread-177925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:32:58.520 [DEBUG] [Thread-177925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:32:58.520 [DEBUG] [Thread-177925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:32:58.544 [INFO] [Thread-177925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:32:58.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:32:59.313 [DEBUG] [Thread-177925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:32:59.313 [DEBUG] [Thread-177925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:32:59.314 [DEBUG] [Thread-177925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:32:59.354 [DEBUG] [Thread-177925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:32:59.354 [DEBUG] [Thread-177925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:32:59.357 [DEBUG] [Thread-177925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:32:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:32:59.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:32:59.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:32:59.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:32:59.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:32:59.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:32:59.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:32:59.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:32:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:32:59.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.856016 -999.00  +11.70  10.68     97  +11.30 1 3 1 3 1     0    0 0.46 1.68 ----- 10.7 10.7 276.6 14.1 13.1 -2.3 12.9 -0.4 12.4 -0.9 12.9 -0.9
2026-04-11T22:32:59.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:32:59.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:32:59.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.856016
2026-04-11T22:32:59.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:32:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:32:59.383 [DEBUG] [Thread-177925] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:32:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:32:59.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:32:59.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:32:59.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:32:29', tmtdew=0.03, humidity=100.095, cloud=0.0, wind=11.5582, temperature=11.6754, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:32:39.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:32:59.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:32:59.473 [DEBUG] [Thread-177928] [transport.py] [_log()] starting thread (client mode): 0xa79511e0
2026-04-11T22:32:59.473 [DEBUG] [Thread-177928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:32:59.488 [DEBUG] [Thread-177928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:32:59.488 [INFO] [Thread-177928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:59.496 [DEBUG] [Thread-177928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] client lang: <none>
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] server lang: <none>
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] kex follows: False
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] Compression: none
2026-04-11T22:32:59.497 [DEBUG] [Thread-177928] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:32:59.553 [DEBUG] [Thread-177928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:32:59.553 [DEBUG] [Thread-177928] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:32:59.554 [DEBUG] [Thread-177928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:32:59.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:32:59.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:32:59.609 [DEBUG] [Thread-177928] [transport.py] [_log()] userauth is OK
2026-04-11T22:32:59.610 [DEBUG] [Thread-177928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:32:59.610 [DEBUG] [Thread-177928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:32:59.610 [DEBUG] [Thread-177928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:32:59.610 [DEBUG] [Thread-177928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:32:59.634 [INFO] [Thread-177928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:32:59.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:32:59.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:33:00.430 [DEBUG] [Thread-177928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:33:00.430 [DEBUG] [Thread-177928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:33:00.479 [DEBUG] [Thread-177928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:33:00.479 [DEBUG] [Thread-177928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:33:00.488 [DEBUG] [Thread-177928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:33:00.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:33:00.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:33:00.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-04-11T22:33:00.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:33:00.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:33:00.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:33:00.520 [DEBUG] [Thread-177928] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:33:05.447 [DEBUG] [Thread-177930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:33:20.498 [DEBUG] [Thread-177931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:33:30.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:33:30.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:33:30.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-04-11T22:33:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 33, 4), 0.03503, 100.062, 0.0, 11.9639, 11.6754, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:33:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:33:04
2026-04-11T22:33:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:33:32.327 [DEBUG] [Thread-177932] [transport.py] [_log()] starting thread (client mode): 0xb0f55660
2026-04-11T22:33:32.327 [DEBUG] [Thread-177932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:33:32.346 [DEBUG] [Thread-177932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:33:32.347 [INFO] [Thread-177932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] client lang: <none>
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] server lang: <none>
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] kex follows: False
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:33:32.350 [DEBUG] [Thread-177932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:33:32.351 [DEBUG] [Thread-177932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:33:32.351 [DEBUG] [Thread-177932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:33:32.351 [DEBUG] [Thread-177932] [transport.py] [_log()] Compression: none
2026-04-11T22:33:32.351 [DEBUG] [Thread-177932] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:33:32.367 [DEBUG] [Thread-177932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:33:32.367 [DEBUG] [Thread-177932] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:33:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:33:32.368 [DEBUG] [Thread-177932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:33:32.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:33:32.409 [DEBUG] [Thread-177932] [transport.py] [_log()] userauth is OK
2026-04-11T22:33:32.409 [DEBUG] [Thread-177932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:33:32.409 [DEBUG] [Thread-177932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:33:32.409 [DEBUG] [Thread-177932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:33:32.409 [DEBUG] [Thread-177932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:33:32.434 [INFO] [Thread-177932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:33:32.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:33:33.235 [DEBUG] [Thread-177932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:33:33.235 [DEBUG] [Thread-177932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:33:33.235 [DEBUG] [Thread-177932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:33:33.276 [DEBUG] [Thread-177932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:33:33.276 [DEBUG] [Thread-177932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:33:33.278 [DEBUG] [Thread-177932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:33:33.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:33:33.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:33:33.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:33:33.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:33:33.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:33:33.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:33:33.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.856364 -999.00  +11.70  11.19     97  +11.30 1 3 1 3 1     0    0 0.46 1.53 ----- 11.2 11.2 281.6 14.3 13.0 -2.0 12.9 -0.4 12.5 -1.2 12.9 -0.5
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.856364
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:33:33.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:33:33.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:33:04', tmtdew=0.03503, humidity=100.062, cloud=0.0, wind=11.9639, temperature=11.6754, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:33:09.850', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:33:33.299 [DEBUG] [Thread-177932] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:33:33.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:33:33.382 [DEBUG] [Thread-177935] [transport.py] [_log()] starting thread (client mode): 0xa7911060
2026-04-11T22:33:33.382 [DEBUG] [Thread-177935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:33:33.398 [DEBUG] [Thread-177935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:33:33.398 [INFO] [Thread-177935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:33:33.405 [DEBUG] [Thread-177935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:33:33.405 [DEBUG] [Thread-177935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:33:33.405 [DEBUG] [Thread-177935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] client lang: <none>
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] server lang: <none>
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] kex follows: False
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] Compression: none
2026-04-11T22:33:33.406 [DEBUG] [Thread-177935] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:33:33.464 [DEBUG] [Thread-177935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:33:33.465 [DEBUG] [Thread-177935] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:33:33.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:33:33.465 [DEBUG] [Thread-177935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:33:33.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:33:33.521 [DEBUG] [Thread-177935] [transport.py] [_log()] userauth is OK
2026-04-11T22:33:33.521 [DEBUG] [Thread-177935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:33:33.521 [DEBUG] [Thread-177935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:33:33.521 [DEBUG] [Thread-177935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:33:33.521 [DEBUG] [Thread-177935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:33:33.544 [INFO] [Thread-177935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:33:33.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:33:33.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:33:34.422 [DEBUG] [Thread-177935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:33:34.422 [DEBUG] [Thread-177935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:33:34.470 [DEBUG] [Thread-177935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:33:34.470 [DEBUG] [Thread-177935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:33:34.479 [DEBUG] [Thread-177935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:33:34.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:33:34.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')
2026-04-11T22:33:34.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:33:34.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:33:34.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:33:34.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:33:34.516 [DEBUG] [Thread-177935] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:33:35.536 [DEBUG] [Thread-177937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:33:38.757 [DEBUG] [Thread-177938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:33:42.016 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:33:42.017 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:33:50.588 [DEBUG] [Thread-177939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:04.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:34:04.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:34:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:34:05.621 [DEBUG] [Thread-177940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 33, 40), -0.02986, 100.124, 0.0, 13.163, 12.0844, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:34:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:33:40
2026-04-11T22:34:06.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:34:06.388 [DEBUG] [Thread-177941] [transport.py] [_log()] starting thread (client mode): 0xb0f54640
2026-04-11T22:34:06.388 [DEBUG] [Thread-177941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:34:06.408 [DEBUG] [Thread-177941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:34:06.408 [INFO] [Thread-177941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] client lang: <none>
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] server lang: <none>
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] kex follows: False
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] Compression: none
2026-04-11T22:34:06.411 [DEBUG] [Thread-177941] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:34:06.428 [DEBUG] [Thread-177941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:34:06.429 [DEBUG] [Thread-177941] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:34:06.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:34:06.429 [DEBUG] [Thread-177941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:34:06.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:34:06.432 [DEBUG] [Thread-177941] [transport.py] [_log()] userauth is OK
2026-04-11T22:34:06.432 [DEBUG] [Thread-177941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:34:06.432 [DEBUG] [Thread-177941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:34:06.432 [DEBUG] [Thread-177941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:34:06.432 [DEBUG] [Thread-177941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:34:06.452 [INFO] [Thread-177941] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:34:06.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:34:07.251 [DEBUG] [Thread-177941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:34:07.252 [DEBUG] [Thread-177941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:34:07.252 [DEBUG] [Thread-177941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:34:07.293 [DEBUG] [Thread-177941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:34:07.293 [DEBUG] [Thread-177941] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:34:07.297 [DEBUG] [Thread-177941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:34:07.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:34:07.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:34:07.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:34:07.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:34:07.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:34:07.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:34:07.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:34:07.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:34:07.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:34:07.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.856711 -999.00  +11.70  10.61     97  +11.30 1 3 1 3 1     0    0 0.45 1.09 ----- 10.6 10.6 281.1 14.4 13.1 -1.5 12.9 -0.3 12.5 -0.6 12.9 -0.6
2026-04-11T22:34:07.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:34:07.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:34:07.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.856711
2026-04-11T22:34:07.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:34:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:34:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:34:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:34:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:34:07.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:33:40', tmtdew=-0.02986, humidity=100.124, cloud=0.0, wind=13.163, temperature=12.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:33:39.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:34:07.329 [DEBUG] [Thread-177941] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:34:07.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:34:07.431 [DEBUG] [Thread-177944] [transport.py] [_log()] starting thread (client mode): 0xae517610
2026-04-11T22:34:07.431 [DEBUG] [Thread-177944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:34:07.446 [DEBUG] [Thread-177944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:34:07.446 [INFO] [Thread-177944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:34:07.454 [DEBUG] [Thread-177944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] client lang: <none>
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] server lang: <none>
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] kex follows: False
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] Compression: none
2026-04-11T22:34:07.455 [DEBUG] [Thread-177944] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:34:07.513 [DEBUG] [Thread-177944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:34:07.514 [DEBUG] [Thread-177944] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:34:07.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:34:07.515 [DEBUG] [Thread-177944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:34:07.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:34:07.569 [DEBUG] [Thread-177944] [transport.py] [_log()] userauth is OK
2026-04-11T22:34:07.569 [DEBUG] [Thread-177944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:34:07.569 [DEBUG] [Thread-177944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:34:07.569 [DEBUG] [Thread-177944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:34:07.569 [DEBUG] [Thread-177944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:34:07.588 [INFO] [Thread-177944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:34:07.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:34:07.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:34:08.381 [DEBUG] [Thread-177944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:34:08.381 [DEBUG] [Thread-177944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:34:08.429 [DEBUG] [Thread-177944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:34:08.429 [DEBUG] [Thread-177944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:34:08.438 [DEBUG] [Thread-177944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:34:08.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:34:08.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-04-11T22:34:08.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:34:08.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:34:08.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:34:08.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:34:08.474 [DEBUG] [Thread-177944] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:34:20.654 [DEBUG] [Thread-177946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:35.720 [DEBUG] [Thread-177947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:34:38.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:34:38.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-04-11T22:34:38.826 [DEBUG] [Thread-177948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 34, 16), 0.04262, 100.012, 0.0, 12.74, 11.6422, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:34:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:34:16
2026-04-11T22:34:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:34:40.293 [DEBUG] [Thread-177949] [transport.py] [_log()] starting thread (client mode): 0xa7913fd0
2026-04-11T22:34:40.293 [DEBUG] [Thread-177949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:34:40.314 [DEBUG] [Thread-177949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:34:40.314 [INFO] [Thread-177949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:40.318 [DEBUG] [Thread-177949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] client lang: <none>
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] server lang: <none>
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] kex follows: False
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] Compression: none
2026-04-11T22:34:40.319 [DEBUG] [Thread-177949] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:34:40.336 [DEBUG] [Thread-177949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:34:40.336 [DEBUG] [Thread-177949] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:34:40.337 [DEBUG] [Thread-177949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:34:40.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:34:40.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:34:40.339 [DEBUG] [Thread-177949] [transport.py] [_log()] userauth is OK
2026-04-11T22:34:40.339 [DEBUG] [Thread-177949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:34:40.340 [DEBUG] [Thread-177949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:34:40.340 [DEBUG] [Thread-177949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:34:40.340 [DEBUG] [Thread-177949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:34:40.376 [INFO] [Thread-177949] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:34:40.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:34:41.217 [DEBUG] [Thread-177949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:34:41.217 [DEBUG] [Thread-177949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:34:41.217 [DEBUG] [Thread-177949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:34:41.259 [DEBUG] [Thread-177949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:34:41.259 [DEBUG] [Thread-177949] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:34:41.262 [DEBUG] [Thread-177949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:34:41.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:34:41.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:34:41.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:34:41.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:34:41.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:34:41.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:34:41.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:34:41.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:34:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:34:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.857058 -999.00  +11.70  11.50     97  +11.30 1 3 1 3 1     0    0 0.43 0.93 ----- 11.5 11.5 296.6 14.7 13.2 -1.3 12.9 -0.3 12.6 -0.5 12.9 -0.5
2026-04-11T22:34:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:34:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:34:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.857058
2026-04-11T22:34:41.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:34:41.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:34:41.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:34:41.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:34:41.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:34:41.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:34:16', tmtdew=0.04262, humidity=100.012, cloud=0.0, wind=12.74, temperature=11.6422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:34:09.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:34:41.289 [DEBUG] [Thread-177949] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:34:41.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:34:41.382 [DEBUG] [Thread-177952] [transport.py] [_log()] starting thread (client mode): 0xae5f2e00
2026-04-11T22:34:41.382 [DEBUG] [Thread-177952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:34:41.397 [DEBUG] [Thread-177952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:34:41.397 [INFO] [Thread-177952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:34:41.405 [DEBUG] [Thread-177952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:34:41.405 [DEBUG] [Thread-177952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] client lang: <none>
2026-04-11T22:34:41.406 [DEBUG] [Thread-177952] [transport.py] [_log()] server lang: <none>
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] kex follows: False
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:34:41.407 [DEBUG] [Thread-177952] [transport.py] [_log()] Compression: none
2026-04-11T22:34:41.408 [DEBUG] [Thread-177952] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:34:41.465 [DEBUG] [Thread-177952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:34:41.466 [DEBUG] [Thread-177952] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:34:41.467 [DEBUG] [Thread-177952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:34:41.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:34:41.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:34:41.521 [DEBUG] [Thread-177952] [transport.py] [_log()] userauth is OK
2026-04-11T22:34:41.521 [DEBUG] [Thread-177952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:34:41.522 [DEBUG] [Thread-177952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:34:41.522 [DEBUG] [Thread-177952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:34:41.522 [DEBUG] [Thread-177952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:34:41.541 [INFO] [Thread-177952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:34:41.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:34:41.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:34:42.222 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:42.224 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:34:42.357 [DEBUG] [Thread-177952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:34:42.357 [DEBUG] [Thread-177952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:34:42.405 [DEBUG] [Thread-177952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:34:42.405 [DEBUG] [Thread-177952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:34:42.414 [DEBUG] [Thread-177952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:34:42.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:34: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-04-11T22:34:42.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-04-11T22:34:42.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:34:42.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:34:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:34:42.452 [DEBUG] [Thread-177952] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:34:50.761 [DEBUG] [Thread-177954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:05.826 [DEBUG] [Thread-177955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:35:12.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:35:12.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:35:13.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 34, 51), -0.03497, 100.158, 0.0, 14.927, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:35:13.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:34:51
2026-04-11T22:35:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:35:14.372 [DEBUG] [Thread-177956] [transport.py] [_log()] starting thread (client mode): 0xa7952260
2026-04-11T22:35:14.372 [DEBUG] [Thread-177956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:35:14.393 [DEBUG] [Thread-177956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:35:14.393 [INFO] [Thread-177956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:35:14.396 [DEBUG] [Thread-177956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:35:14.396 [DEBUG] [Thread-177956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:35:14.396 [DEBUG] [Thread-177956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] client lang: <none>
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] server lang: <none>
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] kex follows: False
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] Compression: none
2026-04-11T22:35:14.397 [DEBUG] [Thread-177956] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:35:14.413 [DEBUG] [Thread-177956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:35:14.413 [DEBUG] [Thread-177956] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:35:14.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:35:14.414 [DEBUG] [Thread-177956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:35:14.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:35:14.417 [DEBUG] [Thread-177956] [transport.py] [_log()] userauth is OK
2026-04-11T22:35:14.417 [DEBUG] [Thread-177956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:35:14.417 [DEBUG] [Thread-177956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:35:14.417 [DEBUG] [Thread-177956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:35:14.417 [DEBUG] [Thread-177956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:35:14.441 [INFO] [Thread-177956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:35:14.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:35:15.595 [DEBUG] [Thread-177956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:35:15.595 [DEBUG] [Thread-177956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:35:15.596 [DEBUG] [Thread-177956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:35:15.636 [DEBUG] [Thread-177956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:35:15.636 [DEBUG] [Thread-177956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:35:15.639 [DEBUG] [Thread-177956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:35:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:35:15.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:35:15.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:35:15.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:35:15.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:35:15.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:35:15.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:35:15.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:35:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:35:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.857405 -999.00  +11.70  13.05     97  +11.30 1 3 1 3 1     0    0 0.44 0.88 ----- 13.1 13.1 292.6 14.3 13.1 -1.3 13.0 -0.2 12.6 -0.5 12.9 -0.6
2026-04-11T22:35:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:35:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:35:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.857405
2026-04-11T22:35:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:35:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:35:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:35:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:35:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:35:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:34:51', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=14.927, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:34:39.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:35:15.729 [DEBUG] [Thread-177956] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:35:15.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:35:15.824 [DEBUG] [Thread-177959] [transport.py] [_log()] starting thread (client mode): 0xb0f57cd0
2026-04-11T22:35:15.824 [DEBUG] [Thread-177959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:35:15.838 [DEBUG] [Thread-177959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:35:15.838 [INFO] [Thread-177959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:15.846 [DEBUG] [Thread-177959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] client lang: <none>
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] server lang: <none>
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] kex follows: False
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] Compression: none
2026-04-11T22:35:15.847 [DEBUG] [Thread-177959] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:35:15.904 [DEBUG] [Thread-177959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:35:15.905 [DEBUG] [Thread-177959] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:35:15.905 [DEBUG] [Thread-177959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:35:15.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:35:15.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:35:15.963 [DEBUG] [Thread-177959] [transport.py] [_log()] userauth is OK
2026-04-11T22:35:15.963 [DEBUG] [Thread-177959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:35:15.963 [DEBUG] [Thread-177959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:35:15.963 [DEBUG] [Thread-177959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:35:15.963 [DEBUG] [Thread-177959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:35:15.982 [INFO] [Thread-177959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:35:15.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:35:15.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:35:16.810 [DEBUG] [Thread-177959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:35:16.810 [DEBUG] [Thread-177959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:35:16.857 [DEBUG] [Thread-177959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:35:16.857 [DEBUG] [Thread-177959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:35:16.865 [DEBUG] [Thread-177959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:35:16.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:35: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-04-11T22:35: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-04-11T22:35:16.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:35:16.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:35:16.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:35:16.897 [DEBUG] [Thread-177959] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:35:20.862 [DEBUG] [Thread-177961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:35.910 [DEBUG] [Thread-177962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:38.885 [DEBUG] [Thread-177963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:42.427 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:42.428 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:35:46.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:35:46.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:35:46.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-04-11T22:35:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 35, 27), 0.03507, 100.062, 0.0, 14.8576, 11.6922, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:35:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:35:27
2026-04-11T22:35:48.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:35:48.719 [DEBUG] [Thread-177964] [transport.py] [_log()] starting thread (client mode): 0xa79519c0
2026-04-11T22:35:48.719 [DEBUG] [Thread-177964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:35:48.741 [DEBUG] [Thread-177964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:35:48.741 [INFO] [Thread-177964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:35:48.745 [DEBUG] [Thread-177964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] client lang: <none>
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] server lang: <none>
2026-04-11T22:35:48.754 [DEBUG] [Thread-177964] [transport.py] [_log()] kex follows: False
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] Compression: none
2026-04-11T22:35:48.755 [DEBUG] [Thread-177964] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:35:48.777 [DEBUG] [Thread-177964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:35:48.777 [DEBUG] [Thread-177964] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:35:48.778 [DEBUG] [Thread-177964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:35:48.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:35:48.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:35:48.780 [DEBUG] [Thread-177964] [transport.py] [_log()] userauth is OK
2026-04-11T22:35:48.780 [DEBUG] [Thread-177964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:35:48.780 [DEBUG] [Thread-177964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:35:48.780 [DEBUG] [Thread-177964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:35:48.780 [DEBUG] [Thread-177964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:35:48.816 [INFO] [Thread-177964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:35:48.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:35:49.627 [DEBUG] [Thread-177964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:35:49.628 [DEBUG] [Thread-177964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:35:49.628 [DEBUG] [Thread-177964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:35:49.668 [DEBUG] [Thread-177964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:35:49.668 [DEBUG] [Thread-177964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:35:49.672 [DEBUG] [Thread-177964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:35:49.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:35:49.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:35:49.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:35:49.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:35:49.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:35:49.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:35:49.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:35:49.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:35:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:35:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.857752 -999.00  +11.70  11.82     97  +11.30 1 3 1 3 1     0    0 0.43 0.74 ----- 11.8 11.8 291.2 14.2 13.2 -1.3 13.0 -0.4 12.6 -0.3 12.9 -0.5
2026-04-11T22:35:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:35:49.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:35:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.857752
2026-04-11T22:35:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:35:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:35:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:35:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:35:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:35:49.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:35:27', tmtdew=0.03507, humidity=100.062, cloud=0.0, wind=14.8576, temperature=11.6922, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:35:09.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:35:49.700 [DEBUG] [Thread-177964] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:35:49.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:35:49.793 [DEBUG] [Thread-177967] [transport.py] [_log()] starting thread (client mode): 0xb0fb45e0
2026-04-11T22:35:49.793 [DEBUG] [Thread-177967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:35:49.808 [DEBUG] [Thread-177967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:35:49.808 [INFO] [Thread-177967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:35:49.815 [DEBUG] [Thread-177967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] client lang: <none>
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] server lang: <none>
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] kex follows: False
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] Compression: none
2026-04-11T22:35:49.816 [DEBUG] [Thread-177967] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:35:49.877 [DEBUG] [Thread-177967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:35:49.877 [DEBUG] [Thread-177967] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:35:49.878 [DEBUG] [Thread-177967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:35:49.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:35:49.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:35:49.936 [DEBUG] [Thread-177967] [transport.py] [_log()] userauth is OK
2026-04-11T22:35:49.937 [DEBUG] [Thread-177967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:35:49.937 [DEBUG] [Thread-177967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:35:49.937 [DEBUG] [Thread-177967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:35:49.937 [DEBUG] [Thread-177967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:35:49.960 [INFO] [Thread-177967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:35:49.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:35:49.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:35:50.793 [DEBUG] [Thread-177967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:35:50.794 [DEBUG] [Thread-177967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:35:50.841 [DEBUG] [Thread-177967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:35:50.842 [DEBUG] [Thread-177967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:35:50.850 [DEBUG] [Thread-177967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:35:50.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:35: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-04-11T22:35: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-04-11T22:35:50.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:35:50.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:35:50.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:35:50.886 [DEBUG] [Thread-177967] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:35:50.952 [DEBUG] [Thread-177969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:06.004 [DEBUG] [Thread-177970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:36:20.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:36:20.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-04-11T22:36:21.040 [DEBUG] [Thread-177971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 36, 2), 0.03757, 100.046, 0.0, 14.787, 11.7088, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:36:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:36:02
2026-04-11T22:36:22.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:36:22.712 [DEBUG] [Thread-177972] [transport.py] [_log()] starting thread (client mode): 0xb0fb5030
2026-04-11T22:36:22.712 [DEBUG] [Thread-177972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:36:22.732 [DEBUG] [Thread-177972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:36:22.732 [INFO] [Thread-177972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] client lang: <none>
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] server lang: <none>
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] kex follows: False
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:36:22.735 [DEBUG] [Thread-177972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:36:22.736 [DEBUG] [Thread-177972] [transport.py] [_log()] Compression: none
2026-04-11T22:36:22.736 [DEBUG] [Thread-177972] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:36:22.752 [DEBUG] [Thread-177972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:36:22.753 [DEBUG] [Thread-177972] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:36:22.753 [DEBUG] [Thread-177972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:36:22.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:36:22.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:36:22.755 [DEBUG] [Thread-177972] [transport.py] [_log()] userauth is OK
2026-04-11T22:36:22.755 [DEBUG] [Thread-177972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:36:22.755 [DEBUG] [Thread-177972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:36:22.756 [DEBUG] [Thread-177972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:36:22.756 [DEBUG] [Thread-177972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:36:22.770 [INFO] [Thread-177972] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:36:22.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:36:23.542 [DEBUG] [Thread-177972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:36:23.542 [DEBUG] [Thread-177972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:36:23.543 [DEBUG] [Thread-177972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:36:23.583 [DEBUG] [Thread-177972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:36:23.583 [DEBUG] [Thread-177972] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:36:23.586 [DEBUG] [Thread-177972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:36:23.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:36:23.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:36:23.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:36:23.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:36:23.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:36:23.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:36:23.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:36:23.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:36:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:36:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.858100 -999.00  +11.80  11.51     97  +11.40 1 3 1 3 1     0    0 0.43 0.68 ----- 11.5 11.5 292.0 13.5 13.1 -1.0 12.9 -0.3 12.7 -0.3 13.0 -0.6
2026-04-11T22:36:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:36:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:36:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.858100
2026-04-11T22:36:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:36:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:36:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:36:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:36:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:36:23.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:36:02', tmtdew=0.03757, humidity=100.046, cloud=0.0, wind=14.787, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:35:39.840', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:36:23.608 [DEBUG] [Thread-177972] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:36:23.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:36:23.695 [DEBUG] [Thread-177975] [transport.py] [_log()] starting thread (client mode): 0xb0fb64d0
2026-04-11T22:36:23.695 [DEBUG] [Thread-177975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:36:23.709 [DEBUG] [Thread-177975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:36:23.709 [INFO] [Thread-177975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] client lang: <none>
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] server lang: <none>
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] kex follows: False
2026-04-11T22:36:23.717 [DEBUG] [Thread-177975] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:36:23.718 [DEBUG] [Thread-177975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:36:23.718 [DEBUG] [Thread-177975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:36:23.718 [DEBUG] [Thread-177975] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:36:23.718 [DEBUG] [Thread-177975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:36:23.718 [DEBUG] [Thread-177975] [transport.py] [_log()] Compression: none
2026-04-11T22:36:23.718 [DEBUG] [Thread-177975] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:36:23.776 [DEBUG] [Thread-177975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:36:23.776 [DEBUG] [Thread-177975] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:36:23.777 [DEBUG] [Thread-177975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:36:23.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:36:23.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:36:23.832 [DEBUG] [Thread-177975] [transport.py] [_log()] userauth is OK
2026-04-11T22:36:23.832 [DEBUG] [Thread-177975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:36:23.833 [DEBUG] [Thread-177975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:36:23.833 [DEBUG] [Thread-177975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:36:23.833 [DEBUG] [Thread-177975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:36:23.857 [INFO] [Thread-177975] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:36:23.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:36:23.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:36:24.672 [DEBUG] [Thread-177975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:36:24.672 [DEBUG] [Thread-177975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:36:24.720 [DEBUG] [Thread-177975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:36:24.720 [DEBUG] [Thread-177975] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:36:24.730 [DEBUG] [Thread-177975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:36:24.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:36:24.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-04-11T22:36:24.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-04-11T22:36:24.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:36:24.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:36:24.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:36:24.767 [DEBUG] [Thread-177975] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:36:36.079 [DEBUG] [Thread-177977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:38.981 [DEBUG] [Thread-177978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:42.634 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:42.635 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:51.132 [DEBUG] [Thread-177979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:36:54.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:36:54.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:36:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:36:56.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 36, 38), -0.0249, 100.091, 0.0, 14.8565, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:36:56.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:36:38
2026-04-11T22:36:56.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:36:56.621 [DEBUG] [Thread-177980] [transport.py] [_log()] starting thread (client mode): 0xae516860
2026-04-11T22:36:56.621 [DEBUG] [Thread-177980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:36:56.640 [DEBUG] [Thread-177980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:36:56.640 [INFO] [Thread-177980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:36:56.644 [DEBUG] [Thread-177980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] client lang: <none>
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] server lang: <none>
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] kex follows: False
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] Compression: none
2026-04-11T22:36:56.645 [DEBUG] [Thread-177980] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:36:56.663 [DEBUG] [Thread-177980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:36:56.663 [DEBUG] [Thread-177980] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:36:56.664 [DEBUG] [Thread-177980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:36:56.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:36:56.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:36:56.666 [DEBUG] [Thread-177980] [transport.py] [_log()] userauth is OK
2026-04-11T22:36:56.666 [DEBUG] [Thread-177980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:36:56.666 [DEBUG] [Thread-177980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:36:56.666 [DEBUG] [Thread-177980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:36:56.666 [DEBUG] [Thread-177980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:36:56.683 [INFO] [Thread-177980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:36:56.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:36:57.501 [DEBUG] [Thread-177980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:36:57.501 [DEBUG] [Thread-177980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:36:57.501 [DEBUG] [Thread-177980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:36:57.542 [DEBUG] [Thread-177980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:36:57.542 [DEBUG] [Thread-177980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:36:57.545 [DEBUG] [Thread-177980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:36:57.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:36:57.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:36:57.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:36:57.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:36:57.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:36:57.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:36:57.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:36:57.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:36:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:36:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.858447 -999.00  +11.80  13.85     97  +11.40 1 3 1 3 1     0    0 0.43 0.56 ----- 13.8 13.8 285.0 16.3 13.1 -1.4 13.0 -0.5 12.6 -0.5 12.9 -0.6
2026-04-11T22:36:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:36:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:36:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.858447
2026-04-11T22:36:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:36:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:36:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:36:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:36:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:36:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:36:38', tmtdew=-0.0249, humidity=100.091, cloud=0.0, wind=14.8565, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:36:09.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:36:57.572 [DEBUG] [Thread-177980] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:36:57.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:36:57.664 [DEBUG] [Thread-177983] [transport.py] [_log()] starting thread (client mode): 0xae516170
2026-04-11T22:36:57.664 [DEBUG] [Thread-177983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:36:57.679 [DEBUG] [Thread-177983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:36:57.679 [INFO] [Thread-177983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] client lang: <none>
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] server lang: <none>
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] kex follows: False
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] Compression: none
2026-04-11T22:36:57.686 [DEBUG] [Thread-177983] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:36:57.742 [DEBUG] [Thread-177983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:36:57.743 [DEBUG] [Thread-177983] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:36:57.743 [DEBUG] [Thread-177983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:36:57.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:36:57.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:36:57.799 [DEBUG] [Thread-177983] [transport.py] [_log()] userauth is OK
2026-04-11T22:36:57.799 [DEBUG] [Thread-177983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:36:57.799 [DEBUG] [Thread-177983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:36:57.800 [DEBUG] [Thread-177983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:36:57.800 [DEBUG] [Thread-177983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:36:57.821 [INFO] [Thread-177983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:36:57.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:36:57.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:36:58.699 [DEBUG] [Thread-177983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:36:58.699 [DEBUG] [Thread-177983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:36:58.746 [DEBUG] [Thread-177983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:36:58.747 [DEBUG] [Thread-177983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:36:58.755 [DEBUG] [Thread-177983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:36:58.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:36:58.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-04-11T22:36:58.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-04-11T22:36:58.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:36:58.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:36:58.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:36:58.787 [DEBUG] [Thread-177983] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:37:06.169 [DEBUG] [Thread-177985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:37:21.234 [DEBUG] [Thread-177986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:37:28.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:37:28.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:37:28.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-04-11T22:37:30.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 37, 14), -0.014945, 100.062, 0.0, 13.658, 11.6588, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:37:30.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:37:14
2026-04-11T22:37:30.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:37:30.618 [DEBUG] [Thread-177987] [transport.py] [_log()] starting thread (client mode): 0xae517a00
2026-04-11T22:37:30.618 [DEBUG] [Thread-177987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:37:30.638 [DEBUG] [Thread-177987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:37:30.639 [INFO] [Thread-177987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:37:30.642 [DEBUG] [Thread-177987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] client lang: <none>
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] server lang: <none>
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] kex follows: False
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] Compression: none
2026-04-11T22:37:30.643 [DEBUG] [Thread-177987] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:37:30.661 [DEBUG] [Thread-177987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:37:30.662 [DEBUG] [Thread-177987] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:37:30.663 [DEBUG] [Thread-177987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:37:30.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:37:30.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:37:30.665 [DEBUG] [Thread-177987] [transport.py] [_log()] userauth is OK
2026-04-11T22:37:30.665 [DEBUG] [Thread-177987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:37:30.665 [DEBUG] [Thread-177987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:37:30.665 [DEBUG] [Thread-177987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:37:30.665 [DEBUG] [Thread-177987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:37:30.682 [INFO] [Thread-177987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:37:30.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:37:31.460 [DEBUG] [Thread-177987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:37:31.461 [DEBUG] [Thread-177987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:37:31.461 [DEBUG] [Thread-177987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:37:31.502 [DEBUG] [Thread-177987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:37:31.502 [DEBUG] [Thread-177987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:37:31.505 [DEBUG] [Thread-177987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:37:31.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:37:31.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:37:31.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:37:31.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:37:31.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:37:31.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:37:31.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:37:31.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:37:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:37:31.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.858794 -999.00  +11.70  15.66     97  +11.30 1 3 1 3 1     0    0 0.42 0.43 ----- 15.7 15.7 292.2 17.9 13.1 -1.4 12.9 -0.5 12.5 -0.7 12.9 -0.7
2026-04-11T22:37:31.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:37:31.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:37:31.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.858794
2026-04-11T22:37:31.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:37:31.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:37:31.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:37:31.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:37:31.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:37:31.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:37:14', tmtdew=-0.014945, humidity=100.062, cloud=0.0, wind=13.658, temperature=11.6588, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:36:39.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:37:31.535 [DEBUG] [Thread-177987] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:37:31.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:37:31.638 [DEBUG] [Thread-177990] [transport.py] [_log()] starting thread (client mode): 0xb0fb4c10
2026-04-11T22:37:31.638 [DEBUG] [Thread-177990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:37:31.652 [DEBUG] [Thread-177990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:37:31.652 [INFO] [Thread-177990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:37:31.660 [DEBUG] [Thread-177990] [transport.py] [_log()] client lang: <none>
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] server lang: <none>
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] kex follows: False
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] Compression: none
2026-04-11T22:37:31.661 [DEBUG] [Thread-177990] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:37:31.721 [DEBUG] [Thread-177990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:37:31.721 [DEBUG] [Thread-177990] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:37:31.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:37:31.722 [DEBUG] [Thread-177990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:37:31.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:37:31.787 [DEBUG] [Thread-177990] [transport.py] [_log()] userauth is OK
2026-04-11T22:37:31.788 [DEBUG] [Thread-177990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:37:31.788 [DEBUG] [Thread-177990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:37:31.788 [DEBUG] [Thread-177990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:37:31.788 [DEBUG] [Thread-177990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:37:31.807 [INFO] [Thread-177990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:37:31.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:37:31.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:37:32.635 [DEBUG] [Thread-177990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:37:32.635 [DEBUG] [Thread-177990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:37:32.684 [DEBUG] [Thread-177990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:37:32.684 [DEBUG] [Thread-177990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:37:32.693 [DEBUG] [Thread-177990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:37:32.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:37:32.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:37:32.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-04-11T22:37:32.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:37:32.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:37:32.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:37:32.728 [DEBUG] [Thread-177990] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:37:36.270 [DEBUG] [Thread-177992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:37:39.044 [DEBUG] [Thread-177993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:37:42.841 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:37:42.842 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:37:51.335 [DEBUG] [Thread-177994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:38:02.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:38:02.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-04-11T22:38:04.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 37, 49), -0.03497, 100.158, 0.0, 16.1618, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:38:04.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:37:49
2026-04-11T22:38:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:38:04.548 [DEBUG] [Thread-177995] [transport.py] [_log()] starting thread (client mode): 0xb0fb5870
2026-04-11T22:38:04.548 [DEBUG] [Thread-177995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:38:04.568 [DEBUG] [Thread-177995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:38:04.568 [INFO] [Thread-177995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:38:04.572 [DEBUG] [Thread-177995] [transport.py] [_log()] client lang: <none>
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] server lang: <none>
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] kex follows: False
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] Compression: none
2026-04-11T22:38:04.573 [DEBUG] [Thread-177995] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:38:04.593 [DEBUG] [Thread-177995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:38:04.594 [DEBUG] [Thread-177995] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:38:04.594 [DEBUG] [Thread-177995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:38:04.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:38:04.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:38:04.596 [DEBUG] [Thread-177995] [transport.py] [_log()] userauth is OK
2026-04-11T22:38:04.596 [DEBUG] [Thread-177995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:38:04.596 [DEBUG] [Thread-177995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:38:04.597 [DEBUG] [Thread-177995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:38:04.597 [DEBUG] [Thread-177995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:38:04.622 [INFO] [Thread-177995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:38:04.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:38:05.396 [DEBUG] [Thread-177995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:38:05.396 [DEBUG] [Thread-177995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:38:05.397 [DEBUG] [Thread-177995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:38:05.438 [DEBUG] [Thread-177995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:38:05.438 [DEBUG] [Thread-177995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:38:05.442 [DEBUG] [Thread-177995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:38:05.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:38:05.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:38:05.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:38:05.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:38:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:38:05.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:38:05.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:38:05.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:38:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:38:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.859488 -999.00  +11.70  12.00     97  +11.30 1 3 1 3 1     0    0 0.41 0.25 ----- 12.0 12.0 282.8 15.7 13.1 -1.1 12.9 -0.3 12.6 -0.9 12.9 -0.5
2026-04-11T22:38:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:38:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:38:05.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.859488
2026-04-11T22:38:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:38:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:38:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:38:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:38:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:38:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:37:49', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=16.1618, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:37:39.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:38:05.473 [DEBUG] [Thread-177995] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:38:05.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:38:05.575 [DEBUG] [Thread-177998] [transport.py] [_log()] starting thread (client mode): 0xb0fb69b0
2026-04-11T22:38:05.575 [DEBUG] [Thread-177998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:38:05.589 [DEBUG] [Thread-177998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:38:05.589 [INFO] [Thread-177998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:05.597 [DEBUG] [Thread-177998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] client lang: <none>
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] server lang: <none>
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] kex follows: False
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] Compression: none
2026-04-11T22:38:05.598 [DEBUG] [Thread-177998] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:38:05.657 [DEBUG] [Thread-177998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:38:05.658 [DEBUG] [Thread-177998] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:38:05.658 [DEBUG] [Thread-177998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:38:05.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:38:05.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:38:05.715 [DEBUG] [Thread-177998] [transport.py] [_log()] userauth is OK
2026-04-11T22:38:05.716 [DEBUG] [Thread-177998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:38:05.716 [DEBUG] [Thread-177998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:38:05.716 [DEBUG] [Thread-177998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:38:05.716 [DEBUG] [Thread-177998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:38:05.735 [INFO] [Thread-177998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:38:05.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:38:05.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:38:06.371 [DEBUG] [Thread-178000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:06.545 [DEBUG] [Thread-177998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:38:06.545 [DEBUG] [Thread-177998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:38:06.593 [DEBUG] [Thread-177998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:38:06.593 [DEBUG] [Thread-177998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:38:06.603 [DEBUG] [Thread-177998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:38:06.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:38:06.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-04-11T22:38:06.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:38:06.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:38:06.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:38:06.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:38:06.640 [DEBUG] [Thread-177998] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:38:21.428 [DEBUG] [Thread-178001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:36.466 [DEBUG] [Thread-178002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:38:36.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:38:36.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-04-11T22:38:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 38, 24), -0.0099, 100.029, 0.0, 15.1045, 11.6422, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:38:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:38:24
2026-04-11T22:38:38.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:38:38.441 [DEBUG] [Thread-178003] [transport.py] [_log()] starting thread (client mode): 0xa7911870
2026-04-11T22:38:38.441 [DEBUG] [Thread-178003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:38:38.460 [DEBUG] [Thread-178003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:38:38.461 [INFO] [Thread-178003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:38:38.464 [DEBUG] [Thread-178003] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:38:38.464 [DEBUG] [Thread-178003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:38:38.464 [DEBUG] [Thread-178003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:38:38.464 [DEBUG] [Thread-178003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:38.464 [DEBUG] [Thread-178003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:38.464 [DEBUG] [Thread-178003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] client lang: <none>
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] server lang: <none>
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] kex follows: False
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] Compression: none
2026-04-11T22:38:38.465 [DEBUG] [Thread-178003] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:38:38.484 [DEBUG] [Thread-178003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:38:38.485 [DEBUG] [Thread-178003] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:38:38.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:38:38.486 [DEBUG] [Thread-178003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:38:38.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:38:38.488 [DEBUG] [Thread-178003] [transport.py] [_log()] userauth is OK
2026-04-11T22:38:38.488 [DEBUG] [Thread-178003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:38:38.488 [DEBUG] [Thread-178003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:38:38.488 [DEBUG] [Thread-178003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:38:38.488 [DEBUG] [Thread-178003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:38:38.513 [INFO] [Thread-178003] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:38:38.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:38:39.110 [DEBUG] [Thread-178005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:39.296 [DEBUG] [Thread-178003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:38:39.296 [DEBUG] [Thread-178003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:38:39.296 [DEBUG] [Thread-178003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:38:39.337 [DEBUG] [Thread-178003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:38:39.337 [DEBUG] [Thread-178003] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:38:39.341 [DEBUG] [Thread-178003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:38:39.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:38:39.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:38:39.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:38:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:38:39.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:38:39.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:38:39.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:38:39.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:38:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:38:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.859836 -999.00  +11.70  10.65     97  +11.30 1 3 1 3 1     0    0 0.43 0.16 ----- 10.7 10.7 289.4 14.0 13.1 -0.9 12.9 -0.4 12.6 -0.5 12.9 -0.5
2026-04-11T22:38:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:38:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:38:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.859836
2026-04-11T22:38:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:38:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:38:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:38:24', tmtdew=-0.0099, humidity=100.029, cloud=0.0, wind=15.1045, temperature=11.6422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:38:09.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:38:39.370 [DEBUG] [Thread-178003] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:38:39.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:38:39.468 [DEBUG] [Thread-178007] [transport.py] [_log()] starting thread (client mode): 0xb0fb4f70
2026-04-11T22:38:39.468 [DEBUG] [Thread-178007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:38:39.482 [DEBUG] [Thread-178007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:38:39.483 [INFO] [Thread-178007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:38:39.490 [DEBUG] [Thread-178007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] client lang: <none>
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] server lang: <none>
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] kex follows: False
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] Compression: none
2026-04-11T22:38:39.491 [DEBUG] [Thread-178007] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:38:39.552 [DEBUG] [Thread-178007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:38:39.552 [DEBUG] [Thread-178007] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:38:39.552 [DEBUG] [Thread-178007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:38:39.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:38:39.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:38:39.611 [DEBUG] [Thread-178007] [transport.py] [_log()] userauth is OK
2026-04-11T22:38:39.611 [DEBUG] [Thread-178007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:38:39.611 [DEBUG] [Thread-178007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:38:39.611 [DEBUG] [Thread-178007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:38:39.611 [DEBUG] [Thread-178007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:38:39.628 [INFO] [Thread-178007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:38:39.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:38:39.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:38:40.433 [DEBUG] [Thread-178007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:38:40.433 [DEBUG] [Thread-178007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:38:40.484 [DEBUG] [Thread-178007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:38:40.484 [DEBUG] [Thread-178007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:38:40.493 [DEBUG] [Thread-178007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:38:40.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:38:40.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:38:40.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:38:40.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:38:40.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:38:40.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:38:40.530 [DEBUG] [Thread-178007] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:38:43.045 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:43.047 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:38:51.504 [DEBUG] [Thread-178009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:06.565 [DEBUG] [Thread-178010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:39:10.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:39:10.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-04-11T22:39:11.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 38, 24), -0.0099, 100.029, 0.0, 15.1045, 11.6422, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:39:11.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:38:24
2026-04-11T22:39:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:39:12.397 [DEBUG] [Thread-178011] [transport.py] [_log()] starting thread (client mode): 0xa79103d0
2026-04-11T22:39:12.397 [DEBUG] [Thread-178011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:39:12.417 [DEBUG] [Thread-178011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:39:12.417 [INFO] [Thread-178011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] client lang: <none>
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] server lang: <none>
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] kex follows: False
2026-04-11T22:39:12.421 [DEBUG] [Thread-178011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:39:12.422 [DEBUG] [Thread-178011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:39:12.422 [DEBUG] [Thread-178011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:39:12.422 [DEBUG] [Thread-178011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:39:12.422 [DEBUG] [Thread-178011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:39:12.422 [DEBUG] [Thread-178011] [transport.py] [_log()] Compression: none
2026-04-11T22:39:12.422 [DEBUG] [Thread-178011] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:39:12.441 [DEBUG] [Thread-178011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:39:12.442 [DEBUG] [Thread-178011] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:39:12.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:39:12.443 [DEBUG] [Thread-178011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:39:12.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:39:12.445 [DEBUG] [Thread-178011] [transport.py] [_log()] userauth is OK
2026-04-11T22:39:12.445 [DEBUG] [Thread-178011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:39:12.446 [DEBUG] [Thread-178011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:39:12.446 [DEBUG] [Thread-178011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:39:12.446 [DEBUG] [Thread-178011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:39:12.480 [INFO] [Thread-178011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:39:12.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:39:13.266 [DEBUG] [Thread-178011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:39:13.266 [DEBUG] [Thread-178011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:39:13.266 [DEBUG] [Thread-178011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:39:13.307 [DEBUG] [Thread-178011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:39:13.307 [DEBUG] [Thread-178011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:39:13.309 [DEBUG] [Thread-178011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:39:13.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:39:13.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:39:13.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:39:13.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:39:13.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:39:13.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:39:13.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:39:13.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:39:13.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:39:13.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.860183 -999.00  +11.70  12.19     97  +11.40 1 3 1 3 1     0    0 0.41 -0.01 ----- 12.2 12.2 292.0 19.0 13.1 -1.0 12.9 -0.3 12.5 -0.3 12.9 -0.6
2026-04-11T22:39:13.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:39:13.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:39:13.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.860183
2026-04-11T22:39:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:39:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:39:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:39:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:39:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:39:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:38:24', tmtdew=-0.0099, humidity=100.029, cloud=0.0, wind=15.1045, temperature=11.6422, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:38:39.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:39:13.334 [DEBUG] [Thread-178011] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:39:13.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:39:13.427 [DEBUG] [Thread-178014] [transport.py] [_log()] starting thread (client mode): 0xa7910d60
2026-04-11T22:39:13.427 [DEBUG] [Thread-178014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:39:13.442 [DEBUG] [Thread-178014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:39:13.442 [INFO] [Thread-178014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:39:13.449 [DEBUG] [Thread-178014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:39:13.450 [DEBUG] [Thread-178014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:39:13.450 [DEBUG] [Thread-178014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:39:13.450 [DEBUG] [Thread-178014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:13.450 [DEBUG] [Thread-178014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:13.450 [DEBUG] [Thread-178014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] client lang: <none>
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] server lang: <none>
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] kex follows: False
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:39:13.451 [DEBUG] [Thread-178014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:39:13.452 [DEBUG] [Thread-178014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:39:13.452 [DEBUG] [Thread-178014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:39:13.452 [DEBUG] [Thread-178014] [transport.py] [_log()] Compression: none
2026-04-11T22:39:13.452 [DEBUG] [Thread-178014] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:39:13.508 [DEBUG] [Thread-178014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:39:13.509 [DEBUG] [Thread-178014] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:39:13.510 [DEBUG] [Thread-178014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:39:13.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:39:13.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:39:13.564 [DEBUG] [Thread-178014] [transport.py] [_log()] userauth is OK
2026-04-11T22:39:13.565 [DEBUG] [Thread-178014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:39:13.565 [DEBUG] [Thread-178014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:39:13.565 [DEBUG] [Thread-178014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:39:13.565 [DEBUG] [Thread-178014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:39:13.587 [INFO] [Thread-178014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:39:13.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:39:13.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:39:14.378 [DEBUG] [Thread-178014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:39:14.378 [DEBUG] [Thread-178014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:39:14.426 [DEBUG] [Thread-178014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:39:14.427 [DEBUG] [Thread-178014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:39:14.436 [DEBUG] [Thread-178014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:39:14.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:39:14.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-04-11T22:39: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') -> 00000000
2026-04-11T22:39:14.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:39:14.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:39:14.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:39:14.472 [DEBUG] [Thread-178014] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:39:21.600 [DEBUG] [Thread-178016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:36.654 [DEBUG] [Thread-178017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:39.169 [DEBUG] [Thread-178018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:43.252 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:43.254 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:39:44.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:39:44.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:39:44.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-04-11T22:39:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 39, 35), -0.04008, 100.191, 0.0, 14.539, 12.217, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:39:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:39:35
2026-04-11T22:39:46.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:39:46.264 [DEBUG] [Thread-178019] [transport.py] [_log()] starting thread (client mode): 0xb0fb6d40
2026-04-11T22:39:46.264 [DEBUG] [Thread-178019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:39:46.284 [DEBUG] [Thread-178019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:39:46.284 [INFO] [Thread-178019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:39:46.287 [DEBUG] [Thread-178019] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] client lang: <none>
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] server lang: <none>
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] kex follows: False
2026-04-11T22:39:46.288 [DEBUG] [Thread-178019] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:39:46.289 [DEBUG] [Thread-178019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:39:46.289 [DEBUG] [Thread-178019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:39:46.289 [DEBUG] [Thread-178019] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:39:46.289 [DEBUG] [Thread-178019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:39:46.289 [DEBUG] [Thread-178019] [transport.py] [_log()] Compression: none
2026-04-11T22:39:46.289 [DEBUG] [Thread-178019] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:39:46.307 [DEBUG] [Thread-178019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:39:46.308 [DEBUG] [Thread-178019] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:39:46.309 [DEBUG] [Thread-178019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:39:46.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:39:46.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:39:46.311 [DEBUG] [Thread-178019] [transport.py] [_log()] userauth is OK
2026-04-11T22:39:46.311 [DEBUG] [Thread-178019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:39:46.311 [DEBUG] [Thread-178019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:39:46.311 [DEBUG] [Thread-178019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:39:46.311 [DEBUG] [Thread-178019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:39:46.335 [INFO] [Thread-178019] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:39:46.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:39:47.132 [DEBUG] [Thread-178019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:39:47.133 [DEBUG] [Thread-178019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:39:47.133 [DEBUG] [Thread-178019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:39:47.174 [DEBUG] [Thread-178019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:39:47.174 [DEBUG] [Thread-178019] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:39:47.178 [DEBUG] [Thread-178019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:39:47.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:39:47.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:39:47.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:39:47.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:39:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:39:47.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:39:47.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:39:47.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:39:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:39:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.860530 -999.00  +11.80  11.50     97  +11.40 1 3 1 3 1     0    0 0.41 -0.09 ----- 11.5 11.5 285.4 13.5 13.1 -0.9 13.0 -0.3 12.6 -0.6 12.9 -0.5
2026-04-11T22:39:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:39:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:39:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.860530
2026-04-11T22:39:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:39:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:39:47.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:39:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:39:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:39:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:39:35', tmtdew=-0.04008, humidity=100.191, cloud=0.0, wind=14.539, temperature=12.217, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:39:09.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:39:47.206 [DEBUG] [Thread-178019] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:39:47.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:39:47.299 [DEBUG] [Thread-178022] [transport.py] [_log()] starting thread (client mode): 0xa7951420
2026-04-11T22:39:47.299 [DEBUG] [Thread-178022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:39:47.314 [DEBUG] [Thread-178022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:39:47.314 [INFO] [Thread-178022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:39:47.322 [DEBUG] [Thread-178022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:39:47.322 [DEBUG] [Thread-178022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:39:47.322 [DEBUG] [Thread-178022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:39:47.322 [DEBUG] [Thread-178022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:47.322 [DEBUG] [Thread-178022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:39:47.322 [DEBUG] [Thread-178022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] client lang: <none>
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] server lang: <none>
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] kex follows: False
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] Compression: none
2026-04-11T22:39:47.323 [DEBUG] [Thread-178022] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:39:47.388 [DEBUG] [Thread-178022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:39:47.389 [DEBUG] [Thread-178022] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:39:47.389 [DEBUG] [Thread-178022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:39:47.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:39:47.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:39:47.446 [DEBUG] [Thread-178022] [transport.py] [_log()] userauth is OK
2026-04-11T22:39:47.447 [DEBUG] [Thread-178022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:39:47.447 [DEBUG] [Thread-178022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:39:47.447 [DEBUG] [Thread-178022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:39:47.447 [DEBUG] [Thread-178022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:39:47.466 [INFO] [Thread-178022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:39:47.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:39:47.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:39:48.301 [DEBUG] [Thread-178022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:39:48.301 [DEBUG] [Thread-178022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:39:48.351 [DEBUG] [Thread-178022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:39:48.351 [DEBUG] [Thread-178022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:39:48.363 [DEBUG] [Thread-178022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:39:48.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:39:48.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-04-11T22:39:48.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:39:48.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:39:48.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:39:48.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:39:48.407 [DEBUG] [Thread-178022] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:39:51.690 [DEBUG] [Thread-178024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:06.741 [DEBUG] [Thread-178025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:40:18.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:40:18.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-04-11T22:40:19.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 40, 11), 0.027485, 100.112, 0.0, 14.9281, 11.7254, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:40:19.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:40:11
2026-04-11T22:40:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:40:20.172 [DEBUG] [Thread-178026] [transport.py] [_log()] starting thread (client mode): 0xae5170d0
2026-04-11T22:40:20.172 [DEBUG] [Thread-178026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:40:20.193 [DEBUG] [Thread-178026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:40:20.193 [INFO] [Thread-178026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:40:20.196 [DEBUG] [Thread-178026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] client lang: <none>
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] server lang: <none>
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] kex follows: False
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] Compression: none
2026-04-11T22:40:20.197 [DEBUG] [Thread-178026] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:40:20.210 [DEBUG] [Thread-178026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:40:20.211 [DEBUG] [Thread-178026] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:40:20.211 [DEBUG] [Thread-178026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:40:20.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:40:20.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:40:20.213 [DEBUG] [Thread-178026] [transport.py] [_log()] userauth is OK
2026-04-11T22:40:20.214 [DEBUG] [Thread-178026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:40:20.214 [DEBUG] [Thread-178026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:40:20.214 [DEBUG] [Thread-178026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:40:20.214 [DEBUG] [Thread-178026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:40:20.238 [INFO] [Thread-178026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:40:20.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:40:21.308 [DEBUG] [Thread-178026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:40:21.309 [DEBUG] [Thread-178026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:40:21.309 [DEBUG] [Thread-178026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:40:21.350 [DEBUG] [Thread-178026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:40:21.350 [DEBUG] [Thread-178026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:40:21.353 [DEBUG] [Thread-178026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:40:21.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:40:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:40:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:40:21.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:40:21.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:40:21.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:40:21.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:40:21.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:40:21.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:40:21.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.860877 -999.00  +11.80  11.48     97  +11.40 1 3 1 3 1     0    0 0.40 -0.17 ----- 11.5 11.5 285.2 13.8 13.1 -1.1 12.9 -0.4 12.5 -1.2 13.0 -0.6
2026-04-11T22:40:21.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:40:21.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:40:21.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.860877
2026-04-11T22:40:21.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:40:21.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:40:21.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:40:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:40:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:40:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:40:11', tmtdew=0.027485, humidity=100.112, cloud=0.0, wind=14.9281, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:39:39.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:40:21.382 [DEBUG] [Thread-178026] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:40:21.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:40:21.476 [DEBUG] [Thread-178029] [transport.py] [_log()] starting thread (client mode): 0xa79108e0
2026-04-11T22:40:21.476 [DEBUG] [Thread-178029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:40:21.491 [DEBUG] [Thread-178029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:40:21.491 [INFO] [Thread-178029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:40:21.499 [DEBUG] [Thread-178029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] client lang: <none>
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] server lang: <none>
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] kex follows: False
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] Compression: none
2026-04-11T22:40:21.500 [DEBUG] [Thread-178029] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:40:21.557 [DEBUG] [Thread-178029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:40:21.557 [DEBUG] [Thread-178029] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:40:21.558 [DEBUG] [Thread-178029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:40:21.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:40:21.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:40:21.613 [DEBUG] [Thread-178029] [transport.py] [_log()] userauth is OK
2026-04-11T22:40:21.613 [DEBUG] [Thread-178029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:40:21.614 [DEBUG] [Thread-178029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:40:21.614 [DEBUG] [Thread-178029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:40:21.614 [DEBUG] [Thread-178029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:40:21.632 [INFO] [Thread-178029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:40:21.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:40:21.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:40:21.778 [DEBUG] [Thread-178031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:22.435 [DEBUG] [Thread-178029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:40:22.436 [DEBUG] [Thread-178029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:40:22.484 [DEBUG] [Thread-178029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:40:22.484 [DEBUG] [Thread-178029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:40:22.493 [DEBUG] [Thread-178029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:40:22.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:40:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:40:22.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-04-11T22:40:22.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:40:22.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:40:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:40:22.530 [DEBUG] [Thread-178029] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:40:36.831 [DEBUG] [Thread-178032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:39.245 [DEBUG] [Thread-178033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:43.455 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:43.456 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:51.869 [DEBUG] [Thread-178034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:40:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:40:52.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:40:52.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-04-11T22:40:53.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 40, 46), -0.03497, 100.158, 0.0, 12.4927, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:40:53.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:40:46
2026-04-11T22:40:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:40:54.418 [DEBUG] [Thread-178035] [transport.py] [_log()] starting thread (client mode): 0xb0fb64d0
2026-04-11T22:40:54.418 [DEBUG] [Thread-178035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:40:54.431 [DEBUG] [Thread-178035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:40:54.431 [INFO] [Thread-178035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] client lang: <none>
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] server lang: <none>
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] kex follows: False
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] Compression: none
2026-04-11T22:40:54.433 [DEBUG] [Thread-178035] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:40:54.442 [DEBUG] [Thread-178035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:40:54.442 [DEBUG] [Thread-178035] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:40:54.443 [DEBUG] [Thread-178035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:40:54.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:40:54.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:40:54.444 [DEBUG] [Thread-178035] [transport.py] [_log()] userauth is OK
2026-04-11T22:40:54.444 [DEBUG] [Thread-178035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:40:54.444 [DEBUG] [Thread-178035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:40:54.444 [DEBUG] [Thread-178035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:40:54.444 [DEBUG] [Thread-178035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:40:54.456 [INFO] [Thread-178035] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:40:54.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:40:55.263 [DEBUG] [Thread-178035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:40:55.263 [DEBUG] [Thread-178035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:40:55.263 [DEBUG] [Thread-178035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:40:55.306 [DEBUG] [Thread-178035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:40:55.306 [DEBUG] [Thread-178035] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:40:55.308 [DEBUG] [Thread-178035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:40:55.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:40:55.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:40:55.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:40:55.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:40:55.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:40:55.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:40:55.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:40:55.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.861224 -999.00  +11.80  14.07     97  +11.40 1 3 1 3 1     0    0 0.40 -0.22 ----- 14.1 14.1 286.4 15.6 13.2 -1.1 12.9 -0.4 12.6 -0.8 12.9 -0.8
2026-04-11T22:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.861224
2026-04-11T22:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:40:46', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=12.4927, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:40:09.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:40:55.325 [DEBUG] [Thread-178035] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:40:55.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:40:55.415 [DEBUG] [Thread-178038] [transport.py] [_log()] starting thread (client mode): 0xae5143d0
2026-04-11T22:40:55.415 [DEBUG] [Thread-178038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:40:55.430 [DEBUG] [Thread-178038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:40:55.430 [INFO] [Thread-178038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:40:55.437 [DEBUG] [Thread-178038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] client lang: <none>
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] server lang: <none>
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] kex follows: False
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] Compression: none
2026-04-11T22:40:55.438 [DEBUG] [Thread-178038] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:40:55.495 [DEBUG] [Thread-178038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:40:55.496 [DEBUG] [Thread-178038] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:40:55.497 [DEBUG] [Thread-178038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:40:55.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:40:55.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:40:55.551 [DEBUG] [Thread-178038] [transport.py] [_log()] userauth is OK
2026-04-11T22:40:55.551 [DEBUG] [Thread-178038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:40:55.552 [DEBUG] [Thread-178038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:40:55.552 [DEBUG] [Thread-178038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:40:55.552 [DEBUG] [Thread-178038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:40:55.571 [INFO] [Thread-178038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:40:55.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:40:55.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:40:56.381 [DEBUG] [Thread-178038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:40:56.381 [DEBUG] [Thread-178038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:40:56.430 [DEBUG] [Thread-178038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:40:56.430 [DEBUG] [Thread-178038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:40:56.439 [DEBUG] [Thread-178038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:40:56.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:40:56.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:40:56.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-04-11T22:40:56.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:40:56.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:40:56.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:40:56.478 [DEBUG] [Thread-178038] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:41:06.907 [DEBUG] [Thread-178040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:41:21.957 [DEBUG] [Thread-178041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:41:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:41:26.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:41:26.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-04-11T22:41:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 40, 46), -0.03497, 100.158, 0.0, 12.4927, 12.1507, 2, 2, 2, 2, 0, 0),)
2026-04-11T22:41:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:40:46
2026-04-11T22:41:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:41:28.346 [DEBUG] [Thread-178042] [transport.py] [_log()] starting thread (client mode): 0xb0fb4130
2026-04-11T22:41:28.346 [DEBUG] [Thread-178042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:41:28.366 [DEBUG] [Thread-178042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:41:28.367 [INFO] [Thread-178042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:41:28.369 [DEBUG] [Thread-178042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] client lang: <none>
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] server lang: <none>
2026-04-11T22:41:28.370 [DEBUG] [Thread-178042] [transport.py] [_log()] kex follows: False
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] Compression: none
2026-04-11T22:41:28.371 [DEBUG] [Thread-178042] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:41:28.389 [DEBUG] [Thread-178042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:41:28.389 [DEBUG] [Thread-178042] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:41:28.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:41:28.390 [DEBUG] [Thread-178042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:41:28.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:41:28.392 [DEBUG] [Thread-178042] [transport.py] [_log()] userauth is OK
2026-04-11T22:41:28.393 [DEBUG] [Thread-178042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:41:28.393 [DEBUG] [Thread-178042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:41:28.393 [DEBUG] [Thread-178042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:41:28.393 [DEBUG] [Thread-178042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:41:28.413 [INFO] [Thread-178042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:41:28.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:41:29.168 [DEBUG] [Thread-178042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:41:29.168 [DEBUG] [Thread-178042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:41:29.168 [DEBUG] [Thread-178042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:41:29.209 [DEBUG] [Thread-178042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:41:29.210 [DEBUG] [Thread-178042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:41:29.213 [DEBUG] [Thread-178042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:41:29.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:41:29.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:41:29.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:41:29.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:41:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:41:29.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:41:29.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:41:29.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.861572 -999.00  +11.70  12.80     97  +11.30 1 3 1 3 1     0    0 0.40 -0.28 ----- 12.8 12.8 290.4 15.2 13.1 -1.3 12.9 -0.4 12.5 -0.7 12.9 -0.6
2026-04-11T22:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.861572
2026-04-11T22:41:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:41:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:41:29.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:41:29.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:41:29.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:41:29.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:40:46', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=12.4927, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:40:39.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:41:29.239 [DEBUG] [Thread-178042] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:41:29.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:41:29.332 [DEBUG] [Thread-178045] [transport.py] [_log()] starting thread (client mode): 0xae518910
2026-04-11T22:41:29.332 [DEBUG] [Thread-178045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:41:29.349 [DEBUG] [Thread-178045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:41:29.349 [INFO] [Thread-178045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:41:29.356 [DEBUG] [Thread-178045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:41:29.356 [DEBUG] [Thread-178045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:41:29.356 [DEBUG] [Thread-178045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] client lang: <none>
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] server lang: <none>
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] kex follows: False
2026-04-11T22:41:29.357 [DEBUG] [Thread-178045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:41:29.358 [DEBUG] [Thread-178045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:41:29.358 [DEBUG] [Thread-178045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:41:29.358 [DEBUG] [Thread-178045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:41:29.358 [DEBUG] [Thread-178045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:41:29.358 [DEBUG] [Thread-178045] [transport.py] [_log()] Compression: none
2026-04-11T22:41:29.358 [DEBUG] [Thread-178045] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:41:29.413 [DEBUG] [Thread-178045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:41:29.413 [DEBUG] [Thread-178045] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:41:29.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:41:29.415 [DEBUG] [Thread-178045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:41:29.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:41:29.469 [DEBUG] [Thread-178045] [transport.py] [_log()] userauth is OK
2026-04-11T22:41:29.470 [DEBUG] [Thread-178045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:41:29.470 [DEBUG] [Thread-178045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:41:29.470 [DEBUG] [Thread-178045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:41:29.470 [DEBUG] [Thread-178045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:41:29.493 [INFO] [Thread-178045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:41:29.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:41:29.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:41:30.264 [DEBUG] [Thread-178045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:41:30.265 [DEBUG] [Thread-178045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:41:30.313 [DEBUG] [Thread-178045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:41:30.314 [DEBUG] [Thread-178045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:41:30.323 [DEBUG] [Thread-178045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:41:30.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:41:30.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-04-11T22:41:30.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-04-11T22:41:30.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:41:30.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:41:30.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:41:30.361 [DEBUG] [Thread-178045] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:41:36.992 [DEBUG] [Thread-178047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:41:39.309 [DEBUG] [Thread-178048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:41:43.660 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:41:43.662 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:41:52.029 [DEBUG] [Thread-178049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:42:00.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:42:00.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:42:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 41, 22), 0.04007, 100.029, 0.0, 13.5522, 11.7254, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:42:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:41:22
2026-04-11T22:42:02.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:42:02.189 [DEBUG] [Thread-178050] [transport.py] [_log()] starting thread (client mode): 0xb0fb7190
2026-04-11T22:42:02.189 [DEBUG] [Thread-178050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:42:02.203 [DEBUG] [Thread-178050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:42:02.203 [INFO] [Thread-178050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:42:02.206 [DEBUG] [Thread-178050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:42:02.206 [DEBUG] [Thread-178050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] client lang: <none>
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] server lang: <none>
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] kex follows: False
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] Compression: none
2026-04-11T22:42:02.207 [DEBUG] [Thread-178050] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:42:02.225 [DEBUG] [Thread-178050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:42:02.226 [DEBUG] [Thread-178050] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:42:02.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:42:02.227 [DEBUG] [Thread-178050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:42:02.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:42:02.229 [DEBUG] [Thread-178050] [transport.py] [_log()] userauth is OK
2026-04-11T22:42:02.230 [DEBUG] [Thread-178050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:42:02.230 [DEBUG] [Thread-178050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:42:02.230 [DEBUG] [Thread-178050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:42:02.230 [DEBUG] [Thread-178050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:42:02.256 [INFO] [Thread-178050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:42:02.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:42:03.020 [DEBUG] [Thread-178050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:42:03.020 [DEBUG] [Thread-178050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:42:03.020 [DEBUG] [Thread-178050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:42:03.061 [DEBUG] [Thread-178050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:42:03.061 [DEBUG] [Thread-178050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:42:03.065 [DEBUG] [Thread-178050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:42:03.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:42:03.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:42:03.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:42:03.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:42:03.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:42:03.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:42:03.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:42:03.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.861919 -999.00  +11.80   9.30     97  +11.40 1 3 1 3 1     0    0 0.39 -0.34 ----- 9.3 9.3 288.0 12.1 13.1 -0.9 12.9 -0.4 12.6 -0.3 12.9 -0.5
2026-04-11T22:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.861919
2026-04-11T22:42:03.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:42:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:42:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:41:22', tmtdew=0.04007, humidity=100.029, cloud=0.0, wind=13.5522, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:41:09.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:42:03.091 [DEBUG] [Thread-178050] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:42:03.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:42:03.185 [DEBUG] [Thread-178053] [transport.py] [_log()] starting thread (client mode): 0xb0f56bf0
2026-04-11T22:42:03.185 [DEBUG] [Thread-178053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:42:03.199 [DEBUG] [Thread-178053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:42:03.199 [INFO] [Thread-178053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:42:03.207 [DEBUG] [Thread-178053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:42:03.207 [DEBUG] [Thread-178053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:42:03.207 [DEBUG] [Thread-178053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:42:03.207 [DEBUG] [Thread-178053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:03.207 [DEBUG] [Thread-178053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:03.207 [DEBUG] [Thread-178053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] client lang: <none>
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] server lang: <none>
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] kex follows: False
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] Compression: none
2026-04-11T22:42:03.208 [DEBUG] [Thread-178053] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:42:03.269 [DEBUG] [Thread-178053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:42:03.269 [DEBUG] [Thread-178053] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:42:03.270 [DEBUG] [Thread-178053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:42:03.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:42:03.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:42:03.327 [DEBUG] [Thread-178053] [transport.py] [_log()] userauth is OK
2026-04-11T22:42:03.328 [DEBUG] [Thread-178053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:42:03.328 [DEBUG] [Thread-178053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:42:03.328 [DEBUG] [Thread-178053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:42:03.328 [DEBUG] [Thread-178053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:42:03.349 [INFO] [Thread-178053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:42: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-04-11T22:42:03.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:42:04.218 [DEBUG] [Thread-178053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:42:04.218 [DEBUG] [Thread-178053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:42:04.266 [DEBUG] [Thread-178053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:42:04.266 [DEBUG] [Thread-178053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:42:04.276 [DEBUG] [Thread-178053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:42:04.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:42:04.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:42:04.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-04-11T22:42:04.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:42:04.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:42:04.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:42:04.316 [DEBUG] [Thread-178053] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:42:07.066 [DEBUG] [Thread-178055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:22.118 [DEBUG] [Thread-178056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:42:34.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:42:34.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-04-11T22:42:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 41, 57), 0.03757, 100.046, 0.0, 11.7522, 11.7088, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:42:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:41:57
2026-04-11T22:42:36.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:42:36.186 [DEBUG] [Thread-178057] [transport.py] [_log()] starting thread (client mode): 0xae509bd0
2026-04-11T22:42:36.186 [DEBUG] [Thread-178057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:42:36.205 [DEBUG] [Thread-178057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:42:36.205 [INFO] [Thread-178057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] client lang: <none>
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] server lang: <none>
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] kex follows: False
2026-04-11T22:42:36.208 [DEBUG] [Thread-178057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:42:36.209 [DEBUG] [Thread-178057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:42:36.209 [DEBUG] [Thread-178057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:42:36.209 [DEBUG] [Thread-178057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:42:36.209 [DEBUG] [Thread-178057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:42:36.209 [DEBUG] [Thread-178057] [transport.py] [_log()] Compression: none
2026-04-11T22:42:36.209 [DEBUG] [Thread-178057] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:42:36.226 [DEBUG] [Thread-178057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:42:36.227 [DEBUG] [Thread-178057] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:42:36.228 [DEBUG] [Thread-178057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:42:36.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:42:36.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:42:36.231 [DEBUG] [Thread-178057] [transport.py] [_log()] userauth is OK
2026-04-11T22:42:36.231 [DEBUG] [Thread-178057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:42:36.231 [DEBUG] [Thread-178057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:42:36.231 [DEBUG] [Thread-178057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:42:36.231 [DEBUG] [Thread-178057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:42:36.263 [INFO] [Thread-178057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:42:36.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:42:37.059 [DEBUG] [Thread-178057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:42:37.059 [DEBUG] [Thread-178057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:42:37.060 [DEBUG] [Thread-178057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:42:37.100 [DEBUG] [Thread-178057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:42:37.100 [DEBUG] [Thread-178057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:42:37.103 [DEBUG] [Thread-178057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:42:37.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:42:37.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:42:37.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:42:37.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:42:37.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:42:37.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:42:37.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:42:37.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:42:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:42:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.862613 -999.00  +11.70  11.68     97  +11.30 1 3 1 3 1     0    0 0.39 -0.51 ----- 11.7 11.7 292.4 18.1 13.1 -1.1 12.9 -0.6 12.5 -0.8 12.9 -0.6
2026-04-11T22:42:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:42:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:42:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.862613
2026-04-11T22:42:37.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:42:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:42:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:42:37.128 [DEBUG] [Thread-178057] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:42:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:42:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:42:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:41:57', tmtdew=0.03757, humidity=100.046, cloud=0.0, wind=11.7522, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:42:09.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:42:37.152 [DEBUG] [Thread-178060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:37.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:42:37.222 [DEBUG] [Thread-178061] [transport.py] [_log()] starting thread (client mode): 0xae5f0580
2026-04-11T22:42:37.222 [DEBUG] [Thread-178061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:42:37.237 [DEBUG] [Thread-178061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:42:37.237 [INFO] [Thread-178061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] client lang: <none>
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] server lang: <none>
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] kex follows: False
2026-04-11T22:42:37.245 [DEBUG] [Thread-178061] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:42:37.246 [DEBUG] [Thread-178061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:42:37.246 [DEBUG] [Thread-178061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:42:37.246 [DEBUG] [Thread-178061] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:42:37.246 [DEBUG] [Thread-178061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:42:37.246 [DEBUG] [Thread-178061] [transport.py] [_log()] Compression: none
2026-04-11T22:42:37.246 [DEBUG] [Thread-178061] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:42:37.305 [DEBUG] [Thread-178061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:42:37.305 [DEBUG] [Thread-178061] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:42:37.306 [DEBUG] [Thread-178061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:42:37.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:42:37.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:42:37.361 [DEBUG] [Thread-178061] [transport.py] [_log()] userauth is OK
2026-04-11T22:42:37.362 [DEBUG] [Thread-178061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:42:37.362 [DEBUG] [Thread-178061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:42:37.362 [DEBUG] [Thread-178061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:42:37.362 [DEBUG] [Thread-178061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:42:37.382 [INFO] [Thread-178061] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:42:37.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:42:37.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:42:38.187 [DEBUG] [Thread-178061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:42:38.188 [DEBUG] [Thread-178061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:42:38.236 [DEBUG] [Thread-178061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:42:38.236 [DEBUG] [Thread-178061] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:42:38.246 [DEBUG] [Thread-178061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:42:38.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:42:38.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-04-11T22:42:38.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-04-11T22:42:38.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:42:38.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:42:38.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:42:38.283 [DEBUG] [Thread-178061] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:42:39.386 [DEBUG] [Thread-178063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:43.868 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:43.870 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:42:52.193 [DEBUG] [Thread-178064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:07.229 [DEBUG] [Thread-178065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:43:08.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:43:08.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-04-11T22:43:09.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 42, 32), 0.03755, 100.046, 0.0, 11.8404, 11.7254, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:43:09.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:42:32
2026-04-11T22:43:10.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:43:10.200 [DEBUG] [Thread-178066] [transport.py] [_log()] starting thread (client mode): 0xae509300
2026-04-11T22:43:10.200 [DEBUG] [Thread-178066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:43:10.221 [DEBUG] [Thread-178066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:43:10.222 [INFO] [Thread-178066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] client lang: <none>
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] server lang: <none>
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] kex follows: False
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:43:10.226 [DEBUG] [Thread-178066] [transport.py] [_log()] Compression: none
2026-04-11T22:43:10.227 [DEBUG] [Thread-178066] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:43:10.244 [DEBUG] [Thread-178066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:43:10.244 [DEBUG] [Thread-178066] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:43:10.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:43:10.245 [DEBUG] [Thread-178066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:43:10.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:43:10.247 [DEBUG] [Thread-178066] [transport.py] [_log()] userauth is OK
2026-04-11T22:43:10.247 [DEBUG] [Thread-178066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:43:10.247 [DEBUG] [Thread-178066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:43:10.248 [DEBUG] [Thread-178066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:43:10.248 [DEBUG] [Thread-178066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:43:10.268 [INFO] [Thread-178066] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:43:10.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:43:11.091 [DEBUG] [Thread-178066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:43:11.092 [DEBUG] [Thread-178066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:43:11.092 [DEBUG] [Thread-178066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:43:11.133 [DEBUG] [Thread-178066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:43:11.134 [DEBUG] [Thread-178066] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:43:11.137 [DEBUG] [Thread-178066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:43:11.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:43:11.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:43:11.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:43:11.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:43:11.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:43:11.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:43:11.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:43:11.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:43:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:43:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.862961 -999.00  +11.70  11.79     97  +11.30 1 3 1 3 1     0    0 0.39 -0.59 ----- 11.8 11.8 272.0 14.7 13.1 -1.1 12.9 -0.3 12.5 -1.3 12.9 -0.5
2026-04-11T22:43:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:43:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:43:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.862961
2026-04-11T22:43:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:43:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:43:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:43:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:43:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:43:11.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:42:32', tmtdew=0.03755, humidity=100.046, cloud=0.0, wind=11.8404, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:42:39.830', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:43:11.163 [DEBUG] [Thread-178066] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:43:11.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:43:11.258 [DEBUG] [Thread-178069] [transport.py] [_log()] starting thread (client mode): 0xa7952050
2026-04-11T22:43:11.258 [DEBUG] [Thread-178069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:43:11.272 [DEBUG] [Thread-178069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:43:11.273 [INFO] [Thread-178069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:43:11.280 [DEBUG] [Thread-178069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:43:11.280 [DEBUG] [Thread-178069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] client lang: <none>
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] server lang: <none>
2026-04-11T22:43:11.281 [DEBUG] [Thread-178069] [transport.py] [_log()] kex follows: False
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] Compression: none
2026-04-11T22:43:11.282 [DEBUG] [Thread-178069] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:43:11.340 [DEBUG] [Thread-178069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:43:11.341 [DEBUG] [Thread-178069] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:43:11.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:43:11.342 [DEBUG] [Thread-178069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:43:11.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:43:11.399 [DEBUG] [Thread-178069] [transport.py] [_log()] userauth is OK
2026-04-11T22:43:11.400 [DEBUG] [Thread-178069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:43:11.400 [DEBUG] [Thread-178069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:43:11.400 [DEBUG] [Thread-178069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:43:11.400 [DEBUG] [Thread-178069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:43:11.419 [INFO] [Thread-178069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:43:11.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:43:11.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:43:12.285 [DEBUG] [Thread-178069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:43:12.285 [DEBUG] [Thread-178069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:43:12.336 [DEBUG] [Thread-178069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:43:12.337 [DEBUG] [Thread-178069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:43:12.349 [DEBUG] [Thread-178069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:43:12.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:43:12.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-04-11T22:43:12.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-04-11T22:43:12.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:43:12.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:43:12.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:43:12.385 [DEBUG] [Thread-178069] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:43:22.265 [DEBUG] [Thread-178071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:37.324 [DEBUG] [Thread-178072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:39.456 [DEBUG] [Thread-178073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:43:42.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:43:42.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-04-11T22:43:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 43, 7), 0.029945, 100.095, 0.0, 11.3994, 11.7751, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:43:43.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:43:07
2026-04-11T22:43:44.075 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:44.076 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:43:44.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:43:44.294 [DEBUG] [Thread-178074] [transport.py] [_log()] starting thread (client mode): 0xb0f56080
2026-04-11T22:43:44.294 [DEBUG] [Thread-178074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:43:44.314 [DEBUG] [Thread-178074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:43:44.315 [INFO] [Thread-178074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] client lang: <none>
2026-04-11T22:43:44.318 [DEBUG] [Thread-178074] [transport.py] [_log()] server lang: <none>
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] kex follows: False
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] Compression: none
2026-04-11T22:43:44.319 [DEBUG] [Thread-178074] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:43:44.340 [DEBUG] [Thread-178074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:43:44.341 [DEBUG] [Thread-178074] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:43:44.341 [DEBUG] [Thread-178074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:43:44.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:43:44.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:43:44.343 [DEBUG] [Thread-178074] [transport.py] [_log()] userauth is OK
2026-04-11T22:43:44.343 [DEBUG] [Thread-178074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:43:44.343 [DEBUG] [Thread-178074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:43:44.343 [DEBUG] [Thread-178074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:43:44.344 [DEBUG] [Thread-178074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:43:44.368 [INFO] [Thread-178074] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:43:44.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:43:45.148 [DEBUG] [Thread-178074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:43:45.148 [DEBUG] [Thread-178074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:43:45.149 [DEBUG] [Thread-178074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:43:45.189 [DEBUG] [Thread-178074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:43:45.189 [DEBUG] [Thread-178074] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:43:45.192 [DEBUG] [Thread-178074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:43:45.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:43:45.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:43:45.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:43:45.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:43:45.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:43:45.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:43:45.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:43:45.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:43:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:43:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.863308 -999.00  +11.70  10.90     97  +11.30 1 3 1 3 1     0    0 0.40 -0.62 ----- 10.9 10.9 286.0 15.4 13.1 -1.2 12.9 -0.3 12.5 -0.9 12.9 -0.5
2026-04-11T22:43:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:43:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:43:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.863308
2026-04-11T22:43:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:43:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:43:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:43:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:43:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:43:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:43:07', tmtdew=0.029945, humidity=100.095, cloud=0.0, wind=11.3994, temperature=11.7751, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:43:09.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:43:45.216 [DEBUG] [Thread-178074] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:43:45.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:43:45.308 [DEBUG] [Thread-178077] [transport.py] [_log()] starting thread (client mode): 0xb0f54b50
2026-04-11T22:43:45.308 [DEBUG] [Thread-178077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:43:45.323 [DEBUG] [Thread-178077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:43:45.323 [INFO] [Thread-178077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] client lang: <none>
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] server lang: <none>
2026-04-11T22:43:45.330 [DEBUG] [Thread-178077] [transport.py] [_log()] kex follows: False
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] Compression: none
2026-04-11T22:43:45.331 [DEBUG] [Thread-178077] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:43:45.392 [DEBUG] [Thread-178077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:43:45.392 [DEBUG] [Thread-178077] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:43:45.392 [DEBUG] [Thread-178077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:43:45.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:43:45.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:43:45.449 [DEBUG] [Thread-178077] [transport.py] [_log()] userauth is OK
2026-04-11T22:43:45.449 [DEBUG] [Thread-178077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:43:45.450 [DEBUG] [Thread-178077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:43:45.450 [DEBUG] [Thread-178077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:43:45.450 [DEBUG] [Thread-178077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:43:45.468 [INFO] [Thread-178077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:43:45.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:43:45.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:43:46.305 [DEBUG] [Thread-178077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:43:46.305 [DEBUG] [Thread-178077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:43:46.353 [DEBUG] [Thread-178077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:43:46.354 [DEBUG] [Thread-178077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:43:46.363 [DEBUG] [Thread-178077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:43:46.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:43:46.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-04-11T22:43:46.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-04-11T22:43:46.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:43:46.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:43:46.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:43:46.401 [DEBUG] [Thread-178077] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:43:52.358 [DEBUG] [Thread-178079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:07.413 [DEBUG] [Thread-178080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:16.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:44:16.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:44:16.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-04-11T22:44:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 43, 43), -0.04519, 100.224, 0.0, 11.3638, 12.2834, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:44:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:43:43
2026-04-11T22:44:18.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:44:18.267 [DEBUG] [Thread-178081] [transport.py] [_log()] starting thread (client mode): 0xb0f57ca0
2026-04-11T22:44:18.267 [DEBUG] [Thread-178081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:44:18.287 [DEBUG] [Thread-178081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:44:18.288 [INFO] [Thread-178081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:18.291 [DEBUG] [Thread-178081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] client lang: <none>
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] server lang: <none>
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] kex follows: False
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] Compression: none
2026-04-11T22:44:18.292 [DEBUG] [Thread-178081] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:44:18.311 [DEBUG] [Thread-178081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:44:18.312 [DEBUG] [Thread-178081] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:44:18.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:44:18.314 [DEBUG] [Thread-178081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:44:18.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:44:18.353 [DEBUG] [Thread-178081] [transport.py] [_log()] userauth is OK
2026-04-11T22:44:18.353 [DEBUG] [Thread-178081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:44:18.353 [DEBUG] [Thread-178081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:44:18.353 [DEBUG] [Thread-178081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:44:18.353 [DEBUG] [Thread-178081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:44:18.378 [INFO] [Thread-178081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:44:18.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:44:19.173 [DEBUG] [Thread-178081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:44:19.174 [DEBUG] [Thread-178081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:44:19.174 [DEBUG] [Thread-178081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:44:19.214 [DEBUG] [Thread-178081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:44:19.214 [DEBUG] [Thread-178081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:44:19.217 [DEBUG] [Thread-178081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:44:19.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:44:19.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:44:19.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:44:19.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:44:19.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:44:19.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:44:19.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:44:19.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:44:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:44:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.863655 -999.00  +11.70  10.14     97  +11.30 1 3 1 3 1     0    0 0.39 -0.71 ----- 10.1 10.1 274.2 14.5 13.1 -1.2 12.9 -0.3 12.6 -1.1 12.9 -0.5
2026-04-11T22:44:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:44:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:44:19.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.863655
2026-04-11T22:44:19.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:44:19.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:44:19.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:44:19.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:44:19.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:44:19.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:43:43', tmtdew=-0.04519, humidity=100.224, cloud=0.0, wind=11.3638, temperature=12.2834, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:43:39.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:44:19.245 [DEBUG] [Thread-178081] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:44:19.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:44:19.349 [DEBUG] [Thread-178084] [transport.py] [_log()] starting thread (client mode): 0xa7910340
2026-04-11T22:44:19.349 [DEBUG] [Thread-178084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:44:19.363 [DEBUG] [Thread-178084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:44:19.364 [INFO] [Thread-178084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:44:19.371 [DEBUG] [Thread-178084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:44:19.371 [DEBUG] [Thread-178084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:44:19.371 [DEBUG] [Thread-178084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] client lang: <none>
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] server lang: <none>
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] kex follows: False
2026-04-11T22:44:19.372 [DEBUG] [Thread-178084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:44:19.373 [DEBUG] [Thread-178084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:44:19.373 [DEBUG] [Thread-178084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:44:19.373 [DEBUG] [Thread-178084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:44:19.373 [DEBUG] [Thread-178084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:44:19.373 [DEBUG] [Thread-178084] [transport.py] [_log()] Compression: none
2026-04-11T22:44:19.373 [DEBUG] [Thread-178084] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:44:19.431 [DEBUG] [Thread-178084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:44:19.431 [DEBUG] [Thread-178084] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:44:19.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:44:19.432 [DEBUG] [Thread-178084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:44:19.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:44:19.488 [DEBUG] [Thread-178084] [transport.py] [_log()] userauth is OK
2026-04-11T22:44:19.488 [DEBUG] [Thread-178084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:44:19.488 [DEBUG] [Thread-178084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:44:19.488 [DEBUG] [Thread-178084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:44:19.489 [DEBUG] [Thread-178084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:44:19.507 [INFO] [Thread-178084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:44:19.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:44:19.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:44:20.339 [DEBUG] [Thread-178084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:44:20.339 [DEBUG] [Thread-178084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:44:20.387 [DEBUG] [Thread-178084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:44:20.388 [DEBUG] [Thread-178084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:44:20.398 [DEBUG] [Thread-178084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:44:20.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:44:20.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:44:20.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:44:20.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:44:20.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:44:20.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:44:20.438 [DEBUG] [Thread-178084] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:44:22.449 [DEBUG] [Thread-178086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:37.501 [DEBUG] [Thread-178087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:39.542 [DEBUG] [Thread-178088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:44.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:44.282 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:50.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:44:50.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:44:50.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-04-11T22:44:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 44, 19), -0.015005, 100.062, 0.0, 12.9164, 11.7585, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:44:51.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:44:19
2026-04-11T22:44:52.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:44:52.279 [DEBUG] [Thread-178089] [transport.py] [_log()] starting thread (client mode): 0xb0f573a0
2026-04-11T22:44:52.279 [DEBUG] [Thread-178089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:44:52.299 [DEBUG] [Thread-178089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:44:52.299 [INFO] [Thread-178089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:44:52.302 [DEBUG] [Thread-178089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] client lang: <none>
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] server lang: <none>
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] kex follows: False
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] Compression: none
2026-04-11T22:44:52.303 [DEBUG] [Thread-178089] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:44:52.320 [DEBUG] [Thread-178089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:44:52.320 [DEBUG] [Thread-178089] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:44:52.321 [DEBUG] [Thread-178089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:44:52.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:44:52.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:44:52.323 [DEBUG] [Thread-178089] [transport.py] [_log()] userauth is OK
2026-04-11T22:44:52.323 [DEBUG] [Thread-178089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:44:52.324 [DEBUG] [Thread-178089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:44:52.324 [DEBUG] [Thread-178089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:44:52.324 [DEBUG] [Thread-178089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:44:52.348 [INFO] [Thread-178089] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:44:52.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:44:52.538 [DEBUG] [Thread-178091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:44:53.149 [DEBUG] [Thread-178089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:44:53.149 [DEBUG] [Thread-178089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:44:53.149 [DEBUG] [Thread-178089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:44:53.190 [DEBUG] [Thread-178089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:44:53.190 [DEBUG] [Thread-178089] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:44:53.194 [DEBUG] [Thread-178089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:44:53.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:44:53.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:44:53.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:44:53.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:44:53.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:44:53.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:44:53.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:44:53.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:44:53.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:44:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.864002 -999.00  +11.70  12.78     97  +11.30 1 3 1 3 1     0    0 0.39 -0.79 ----- 12.8 12.8 276.8 15.9 13.1 -1.5 12.9 -0.4 12.5 -1.4 13.0 -0.6
2026-04-11T22:44:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:44:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:44:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.864002
2026-04-11T22:44:53.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:44:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:44:53.222 [DEBUG] [Thread-178089] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:44:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:44:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:44:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:44:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:44:19', tmtdew=-0.015005, humidity=100.062, cloud=0.0, wind=12.9164, temperature=11.7585, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:44:09.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:44:53.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:44:53.320 [DEBUG] [Thread-178093] [transport.py] [_log()] starting thread (client mode): 0xb0f54880
2026-04-11T22:44:53.320 [DEBUG] [Thread-178093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:44:53.334 [DEBUG] [Thread-178093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:44:53.334 [INFO] [Thread-178093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:53.342 [DEBUG] [Thread-178093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] client lang: <none>
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] server lang: <none>
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] kex follows: False
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] Compression: none
2026-04-11T22:44:53.343 [DEBUG] [Thread-178093] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:44:53.400 [DEBUG] [Thread-178093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:44:53.401 [DEBUG] [Thread-178093] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:44:53.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:44:53.402 [DEBUG] [Thread-178093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:44:53.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:44:53.456 [DEBUG] [Thread-178093] [transport.py] [_log()] userauth is OK
2026-04-11T22:44:53.456 [DEBUG] [Thread-178093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:44:53.456 [DEBUG] [Thread-178093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:44:53.457 [DEBUG] [Thread-178093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:44:53.457 [DEBUG] [Thread-178093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:44:53.475 [INFO] [Thread-178093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:44:53.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:44:53.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:44:54.280 [DEBUG] [Thread-178093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:44:54.280 [DEBUG] [Thread-178093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:44:54.328 [DEBUG] [Thread-178093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:44:54.328 [DEBUG] [Thread-178093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:44:54.337 [DEBUG] [Thread-178093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:44:54.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:44:54.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-04-11T22:44:54.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-04-11T22:44:54.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:44:54.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:44:54.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:44:54.374 [DEBUG] [Thread-178093] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:45:07.574 [DEBUG] [Thread-178095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:22.631 [DEBUG] [Thread-178096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:24.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:45:24.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:45:24.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-04-11T22:45:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 44, 55), 0.02996, 100.095, 0.0, 13.905, 11.8085, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:45:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:44:55
2026-04-11T22:45:25.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:45:26.134 [DEBUG] [Thread-178097] [transport.py] [_log()] starting thread (client mode): 0xb0fcfac0
2026-04-11T22:45:26.134 [DEBUG] [Thread-178097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:45:26.154 [DEBUG] [Thread-178097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:45:26.154 [INFO] [Thread-178097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:45:26.155 [DEBUG] [Thread-178097] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:45:26.155 [DEBUG] [Thread-178097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:45:26.155 [DEBUG] [Thread-178097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:45:26.155 [DEBUG] [Thread-178097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:45:26.155 [DEBUG] [Thread-178097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:45:26.155 [DEBUG] [Thread-178097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] client lang: <none>
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] server lang: <none>
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] kex follows: False
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] Compression: none
2026-04-11T22:45:26.156 [DEBUG] [Thread-178097] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:45:26.169 [DEBUG] [Thread-178097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:45:26.169 [DEBUG] [Thread-178097] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:45:26.170 [DEBUG] [Thread-178097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:45:26.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:45:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:45:26.172 [DEBUG] [Thread-178097] [transport.py] [_log()] userauth is OK
2026-04-11T22:45:26.172 [DEBUG] [Thread-178097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:45:26.172 [DEBUG] [Thread-178097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:45:26.172 [DEBUG] [Thread-178097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:45:26.173 [DEBUG] [Thread-178097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:45:26.191 [INFO] [Thread-178097] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:45:26.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:45:27.551 [DEBUG] [Thread-178097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:45:27.551 [DEBUG] [Thread-178097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:45:27.551 [DEBUG] [Thread-178097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:45:27.592 [DEBUG] [Thread-178097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:45:27.592 [DEBUG] [Thread-178097] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:45:27.596 [DEBUG] [Thread-178097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:45:27.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:45:27.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:45:27.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:45:27.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:45:27.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:45:27.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:45:27.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:45:27.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:45:27.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:45:27.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.864349 -999.00  +11.70  11.69     97  +11.30 1 3 1 3 1     0    0 0.39 -0.85 ----- 11.7 11.7 286.8 15.6 13.0 -1.2 12.9 -0.4 12.5 -1.2 12.9 -0.6
2026-04-11T22:45:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:45:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:45:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.864349
2026-04-11T22:45:27.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:45:27.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:45:27.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:45:27.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:45:27.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:45:27.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:44:55', tmtdew=0.02996, humidity=100.095, cloud=0.0, wind=13.905, temperature=11.8085, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:44:39.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:45:27.626 [DEBUG] [Thread-178097] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:45:27.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:45:27.731 [DEBUG] [Thread-178100] [transport.py] [_log()] starting thread (client mode): 0xb0fcda20
2026-04-11T22:45:27.731 [DEBUG] [Thread-178100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:45:27.748 [DEBUG] [Thread-178100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:45:27.748 [INFO] [Thread-178100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:45:27.755 [DEBUG] [Thread-178100] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:45:27.755 [DEBUG] [Thread-178100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] client lang: <none>
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] server lang: <none>
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] kex follows: False
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] Compression: none
2026-04-11T22:45:27.756 [DEBUG] [Thread-178100] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:45:27.813 [DEBUG] [Thread-178100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:45:27.814 [DEBUG] [Thread-178100] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:45:27.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:45:27.815 [DEBUG] [Thread-178100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:45:27.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:45:27.869 [DEBUG] [Thread-178100] [transport.py] [_log()] userauth is OK
2026-04-11T22:45:27.869 [DEBUG] [Thread-178100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:45:27.869 [DEBUG] [Thread-178100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:45:27.869 [DEBUG] [Thread-178100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:45:27.870 [DEBUG] [Thread-178100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:45:27.892 [INFO] [Thread-178100] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:45:27.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:45:27.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:45:28.747 [DEBUG] [Thread-178100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:45:28.747 [DEBUG] [Thread-178100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:45:28.795 [DEBUG] [Thread-178100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:45:28.795 [DEBUG] [Thread-178100] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:45:28.804 [DEBUG] [Thread-178100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:45:28.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:45:28.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-04-11T22:45:28.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-04-11T22:45:28.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:45:28.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:45:28.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:45:28.840 [DEBUG] [Thread-178100] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:45:37.676 [DEBUG] [Thread-178102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:39.621 [DEBUG] [Thread-178103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:44.492 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:44.494 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:52.735 [DEBUG] [Thread-178104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:45:58.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:45:58.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:45:58.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-04-11T22:46:00.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 45, 30), 0.032515, 100.079, 0.0, 13.9932, 11.7754, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:46:00.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:45:30
2026-04-11T22:46:00.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:46:00.700 [DEBUG] [Thread-178105] [transport.py] [_log()] starting thread (client mode): 0xae5f08e0
2026-04-11T22:46:00.700 [DEBUG] [Thread-178105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:46:00.720 [DEBUG] [Thread-178105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:46:00.720 [INFO] [Thread-178105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:46:00.723 [DEBUG] [Thread-178105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] client lang: <none>
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] server lang: <none>
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] kex follows: False
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:46:00.724 [DEBUG] [Thread-178105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:46:00.725 [DEBUG] [Thread-178105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:46:00.725 [DEBUG] [Thread-178105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:46:00.725 [DEBUG] [Thread-178105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:46:00.725 [DEBUG] [Thread-178105] [transport.py] [_log()] Compression: none
2026-04-11T22:46:00.725 [DEBUG] [Thread-178105] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:46:00.743 [DEBUG] [Thread-178105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:46:00.744 [DEBUG] [Thread-178105] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:46:00.745 [DEBUG] [Thread-178105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:46:00.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:46:00.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:46:00.747 [DEBUG] [Thread-178105] [transport.py] [_log()] userauth is OK
2026-04-11T22:46:00.747 [DEBUG] [Thread-178105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:46:00.747 [DEBUG] [Thread-178105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:46:00.747 [DEBUG] [Thread-178105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:46:00.748 [DEBUG] [Thread-178105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:46:00.772 [INFO] [Thread-178105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:46:00.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:46:01.579 [DEBUG] [Thread-178105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:46:01.579 [DEBUG] [Thread-178105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:46:01.580 [DEBUG] [Thread-178105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:46:01.621 [DEBUG] [Thread-178105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:46:01.621 [DEBUG] [Thread-178105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:46:01.624 [DEBUG] [Thread-178105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:46:01.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:46:01.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:46:01.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:46:01.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:46:01.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:46:01.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:46:01.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:46:01.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:46:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:46:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.864696 -999.00  +11.70  12.28     97  +11.30 1 3 1 3 1     0    0 0.37 -0.97 ----- 12.3 12.3 284.4 15.3 13.1 -1.2 12.9 -0.4 12.5 -0.5 12.9 -0.6
2026-04-11T22:46:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:46:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:46:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.864696
2026-04-11T22:46:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:46:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:46:01.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:46:01.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:46:01.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:46:01.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:45:30', tmtdew=0.032515, humidity=100.079, cloud=0.0, wind=13.9932, temperature=11.7754, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:45:09.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:46:01.648 [DEBUG] [Thread-178105] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:46:01.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:46:01.742 [DEBUG] [Thread-178108] [transport.py] [_log()] starting thread (client mode): 0xb0f56ce0
2026-04-11T22:46:01.742 [DEBUG] [Thread-178108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:46:01.757 [DEBUG] [Thread-178108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:46:01.757 [INFO] [Thread-178108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:46:01.764 [DEBUG] [Thread-178108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] client lang: <none>
2026-04-11T22:46:01.765 [DEBUG] [Thread-178108] [transport.py] [_log()] server lang: <none>
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] kex follows: False
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] Compression: none
2026-04-11T22:46:01.766 [DEBUG] [Thread-178108] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:46:01.822 [DEBUG] [Thread-178108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:46:01.822 [DEBUG] [Thread-178108] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:46:01.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:46:01.823 [DEBUG] [Thread-178108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:46:01.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:46:01.883 [DEBUG] [Thread-178108] [transport.py] [_log()] userauth is OK
2026-04-11T22:46:01.883 [DEBUG] [Thread-178108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:46:01.883 [DEBUG] [Thread-178108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:46:01.883 [DEBUG] [Thread-178108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:46:01.883 [DEBUG] [Thread-178108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:46:01.902 [INFO] [Thread-178108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:46:01.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:46:01.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:46:02.712 [DEBUG] [Thread-178108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:46:02.712 [DEBUG] [Thread-178108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:46:02.760 [DEBUG] [Thread-178108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:46:02.760 [DEBUG] [Thread-178108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:46:02.769 [DEBUG] [Thread-178108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:46:02.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:46:02.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-04-11T22:46:02.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-04-11T22:46:02.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:46:02.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:46:02.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:46:02.803 [DEBUG] [Thread-178108] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:46:07.767 [DEBUG] [Thread-178110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:46:22.816 [DEBUG] [Thread-178111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:46:32.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:46:32.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:46:32.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-04-11T22:46:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 46, 5), 0.032515, 100.079, 0.0, 12.829, 11.7754, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:46:34.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:46:05
2026-04-11T22:46:34.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:46:34.676 [DEBUG] [Thread-178112] [transport.py] [_log()] starting thread (client mode): 0xb0fb7130
2026-04-11T22:46:34.676 [DEBUG] [Thread-178112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:46:34.693 [DEBUG] [Thread-178112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:46:34.693 [INFO] [Thread-178112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] client lang: <none>
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] server lang: <none>
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] kex follows: False
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] Compression: none
2026-04-11T22:46:34.696 [DEBUG] [Thread-178112] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:46:34.717 [DEBUG] [Thread-178112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:46:34.717 [DEBUG] [Thread-178112] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:46:34.718 [DEBUG] [Thread-178112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:46:34.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:46:34.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:46:34.720 [DEBUG] [Thread-178112] [transport.py] [_log()] userauth is OK
2026-04-11T22:46:34.720 [DEBUG] [Thread-178112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:46:34.720 [DEBUG] [Thread-178112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:46:34.720 [DEBUG] [Thread-178112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:46:34.720 [DEBUG] [Thread-178112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:46:34.745 [INFO] [Thread-178112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:46:34.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:46:35.506 [DEBUG] [Thread-178112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:46:35.507 [DEBUG] [Thread-178112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:46:35.507 [DEBUG] [Thread-178112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:46:35.547 [DEBUG] [Thread-178112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:46:35.548 [DEBUG] [Thread-178112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:46:35.551 [DEBUG] [Thread-178112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:46:35.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:46:35.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:46:35.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:46:35.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:46:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:46:35.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:46:35.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:46:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:46:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:46:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.865044 -999.00  +11.70  11.91     97  +11.30 1 3 1 3 1     0    0 0.38 -1.00 ----- 11.9 11.9 284.8 17.8 13.0 -1.4 12.9 -0.7 12.5 -1.4 12.9 -0.4
2026-04-11T22:46:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:46:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:46:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.865044
2026-04-11T22:46:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:46:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:46:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:46:35.578 [DEBUG] [Thread-178112] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:46:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:46:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:46:35.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:46:05', tmtdew=0.032515, humidity=100.079, cloud=0.0, wind=12.829, temperature=11.7754, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:45:39.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:46: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-04-11T22:46:35.672 [DEBUG] [Thread-178115] [transport.py] [_log()] starting thread (client mode): 0xb0f56e90
2026-04-11T22:46:35.672 [DEBUG] [Thread-178115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:46:35.686 [DEBUG] [Thread-178115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:46:35.687 [INFO] [Thread-178115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:46:35.694 [DEBUG] [Thread-178115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:46:35.694 [DEBUG] [Thread-178115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:46:35.694 [DEBUG] [Thread-178115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:46:35.694 [DEBUG] [Thread-178115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:35.694 [DEBUG] [Thread-178115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:46:35.694 [DEBUG] [Thread-178115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] client lang: <none>
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] server lang: <none>
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] kex follows: False
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] Compression: none
2026-04-11T22:46:35.695 [DEBUG] [Thread-178115] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:46:35.751 [DEBUG] [Thread-178115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:46:35.752 [DEBUG] [Thread-178115] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:46:35.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:46:35.753 [DEBUG] [Thread-178115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:46:35.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:46:35.808 [DEBUG] [Thread-178115] [transport.py] [_log()] userauth is OK
2026-04-11T22:46:35.808 [DEBUG] [Thread-178115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:46:35.808 [DEBUG] [Thread-178115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:46:35.808 [DEBUG] [Thread-178115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:46:35.808 [DEBUG] [Thread-178115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:46:35.826 [INFO] [Thread-178115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:46:35.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:46:35.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:46:36.645 [DEBUG] [Thread-178115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:46:36.645 [DEBUG] [Thread-178115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:46:36.693 [DEBUG] [Thread-178115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:46:36.693 [DEBUG] [Thread-178115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:46:36.702 [DEBUG] [Thread-178115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:46:36.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:46:36.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-04-11T22:46:36.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-04-11T22:46:36.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:46:36.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:46:36.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:46:36.739 [DEBUG] [Thread-178115] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:46:37.851 [DEBUG] [Thread-178117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:46:39.690 [DEBUG] [Thread-178118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:46:44.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:46:44.695 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:46:52.903 [DEBUG] [Thread-178119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:06.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:47:06.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:47:06.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-04-11T22:47:07.937 [DEBUG] [Thread-178120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:07.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 46, 41), -0.02486, 100.091, 0.0, 10.3759, 12.1175, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:47:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:46:41
2026-04-11T22:47:08.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:47:08.489 [DEBUG] [Thread-178121] [transport.py] [_log()] starting thread (client mode): 0xae5f2950
2026-04-11T22:47:08.489 [DEBUG] [Thread-178121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:47:08.505 [DEBUG] [Thread-178121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:47:08.505 [INFO] [Thread-178121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:47:08.515 [DEBUG] [Thread-178121] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] client lang: <none>
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] server lang: <none>
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] kex follows: False
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] Compression: none
2026-04-11T22:47:08.516 [DEBUG] [Thread-178121] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:47:08.527 [DEBUG] [Thread-178121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:47:08.528 [DEBUG] [Thread-178121] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:47:08.528 [DEBUG] [Thread-178121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:47:08.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:47:08.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:47:08.531 [DEBUG] [Thread-178121] [transport.py] [_log()] userauth is OK
2026-04-11T22:47:08.531 [DEBUG] [Thread-178121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:47:08.531 [DEBUG] [Thread-178121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:47:08.531 [DEBUG] [Thread-178121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:47:08.531 [DEBUG] [Thread-178121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:47:08.555 [INFO] [Thread-178121] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:47:08.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:47:09.361 [DEBUG] [Thread-178121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:47:09.361 [DEBUG] [Thread-178121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:47:09.362 [DEBUG] [Thread-178121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:47:09.402 [DEBUG] [Thread-178121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:47:09.402 [DEBUG] [Thread-178121] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:47:09.406 [DEBUG] [Thread-178121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:47:09.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:47:09.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:47:09.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:47:09.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:47:09.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:47:09.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:47:09.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:47:09.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:47:09.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:47:09.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.865391 -999.00  +11.70  11.25     97  +11.30 1 3 1 3 1     0    0 0.38 -1.09 ----- 11.2 11.2 278.8 15.6 13.0 -1.2 12.9 -0.5 12.5 -1.2 12.9 -0.5
2026-04-11T22:47:09.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:47:09.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:47:09.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.865391
2026-04-11T22:47:09.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:47:09.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:47:09.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:47:09.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:47:09.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:47:09.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:46:41', tmtdew=-0.02486, humidity=100.091, cloud=0.0, wind=10.3759, temperature=12.1175, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:46:09.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:47:09.441 [DEBUG] [Thread-178121] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:47:09.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:47:09.534 [DEBUG] [Thread-178124] [transport.py] [_log()] starting thread (client mode): 0xa79559f0
2026-04-11T22:47:09.534 [DEBUG] [Thread-178124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:47:09.550 [DEBUG] [Thread-178124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:47:09.550 [INFO] [Thread-178124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] client lang: <none>
2026-04-11T22:47:09.558 [DEBUG] [Thread-178124] [transport.py] [_log()] server lang: <none>
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] kex follows: False
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] Compression: none
2026-04-11T22:47:09.559 [DEBUG] [Thread-178124] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:47:09.617 [DEBUG] [Thread-178124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:47:09.617 [DEBUG] [Thread-178124] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:47:09.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:47:09.619 [DEBUG] [Thread-178124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:47:09.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:47:09.673 [DEBUG] [Thread-178124] [transport.py] [_log()] userauth is OK
2026-04-11T22:47:09.673 [DEBUG] [Thread-178124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:47:09.673 [DEBUG] [Thread-178124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:47:09.673 [DEBUG] [Thread-178124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:47:09.673 [DEBUG] [Thread-178124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:47:09.692 [INFO] [Thread-178124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:47:09.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:47:09.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:47:10.537 [DEBUG] [Thread-178124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:47:10.537 [DEBUG] [Thread-178124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:47:10.588 [DEBUG] [Thread-178124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:47:10.588 [DEBUG] [Thread-178124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:47:10.600 [DEBUG] [Thread-178124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:47:10.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:47:10.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-04-11T22:47:10.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-04-11T22:47:10.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:47:10.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:47:10.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:47:10.650 [DEBUG] [Thread-178124] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:47:22.972 [DEBUG] [Thread-178126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:38.025 [DEBUG] [Thread-178127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:39.764 [DEBUG] [Thread-178128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:40.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:47:40.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:47:40.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-04-11T22:47:42.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 47, 17), -0.02507, 100.129, 0.0, 12.5644, 11.7085, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:47:42.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:47:17
2026-04-11T22:47:42.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:47:42.744 [DEBUG] [Thread-178129] [transport.py] [_log()] starting thread (client mode): 0xb0f8dc30
2026-04-11T22:47:42.744 [DEBUG] [Thread-178129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:47:42.765 [DEBUG] [Thread-178129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:47:42.765 [INFO] [Thread-178129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] client lang: <none>
2026-04-11T22:47:42.769 [DEBUG] [Thread-178129] [transport.py] [_log()] server lang: <none>
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] kex follows: False
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] Compression: none
2026-04-11T22:47:42.770 [DEBUG] [Thread-178129] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:47:42.787 [DEBUG] [Thread-178129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:47:42.787 [DEBUG] [Thread-178129] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:47:42.788 [DEBUG] [Thread-178129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:47:42.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:47:42.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:47:42.791 [DEBUG] [Thread-178129] [transport.py] [_log()] userauth is OK
2026-04-11T22:47:42.791 [DEBUG] [Thread-178129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:47:42.791 [DEBUG] [Thread-178129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:47:42.791 [DEBUG] [Thread-178129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:47:42.791 [DEBUG] [Thread-178129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:47:42.829 [INFO] [Thread-178129] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:47:42.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:47:43.613 [DEBUG] [Thread-178129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:47:43.613 [DEBUG] [Thread-178129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:47:43.613 [DEBUG] [Thread-178129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:47:43.654 [DEBUG] [Thread-178129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:47:43.654 [DEBUG] [Thread-178129] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:47:43.657 [DEBUG] [Thread-178129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:47:43.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:47:43.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:47:43.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:47:43.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:47:43.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:47:43.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:47:43.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:47:43.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.865738 -999.00  +11.70  12.79     97  +11.30 1 3 1 3 1     0    0 0.37 -1.10 ----- 12.8 12.8 272.4 16.4 13.0 -1.3 12.9 -0.4 12.5 -0.9 12.9 -0.7
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.865738
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:47:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:47:17', tmtdew=-0.02507, humidity=100.129, cloud=0.0, wind=12.5644, temperature=11.7085, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:46:39.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:47:43.675 [DEBUG] [Thread-178129] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:47:43.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:47:43.758 [DEBUG] [Thread-178132] [transport.py] [_log()] starting thread (client mode): 0xb0f8ffa0
2026-04-11T22:47:43.758 [DEBUG] [Thread-178132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:47:43.772 [DEBUG] [Thread-178132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:47:43.773 [INFO] [Thread-178132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] client lang: <none>
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] server lang: <none>
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] kex follows: False
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:47:43.780 [DEBUG] [Thread-178132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:47:43.781 [DEBUG] [Thread-178132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:47:43.781 [DEBUG] [Thread-178132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:47:43.781 [DEBUG] [Thread-178132] [transport.py] [_log()] Compression: none
2026-04-11T22:47:43.781 [DEBUG] [Thread-178132] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:47:43.838 [DEBUG] [Thread-178132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:47:43.839 [DEBUG] [Thread-178132] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:47:43.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:47:43.849 [DEBUG] [Thread-178132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:47:43.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:47:43.895 [DEBUG] [Thread-178132] [transport.py] [_log()] userauth is OK
2026-04-11T22:47:43.895 [DEBUG] [Thread-178132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:47:43.895 [DEBUG] [Thread-178132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:47:43.895 [DEBUG] [Thread-178132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:47:43.896 [DEBUG] [Thread-178132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:47:43.914 [INFO] [Thread-178132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:47:43.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:47:43.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:47:44.724 [DEBUG] [Thread-178132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:47:44.724 [DEBUG] [Thread-178132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:47:44.772 [DEBUG] [Thread-178132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:47:44.772 [DEBUG] [Thread-178132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:47:44.781 [DEBUG] [Thread-178132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:47:44.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:47:44.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:47:44.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:47:44.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:47:44.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:47:44.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:47:44.818 [DEBUG] [Thread-178132] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:47:44.900 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:44.901 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:47:53.063 [DEBUG] [Thread-178134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:08.113 [DEBUG] [Thread-178135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:14.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:48:14.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:48:14.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-04-11T22:48:16.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 47, 52), -0.04511, 100.224, 0.0, 13.657, 12.217, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:48:16.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:47:52
2026-04-11T22:48:16.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:48:16.650 [DEBUG] [Thread-178136] [transport.py] [_log()] starting thread (client mode): 0xb0fcf460
2026-04-11T22:48:16.650 [DEBUG] [Thread-178136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:48:16.670 [DEBUG] [Thread-178136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:48:16.670 [INFO] [Thread-178136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] client lang: <none>
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] server lang: <none>
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] kex follows: False
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] Compression: none
2026-04-11T22:48:16.673 [DEBUG] [Thread-178136] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:48:16.691 [DEBUG] [Thread-178136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:48:16.692 [DEBUG] [Thread-178136] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:48:16.692 [DEBUG] [Thread-178136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:48:16.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:48:16.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:48:16.694 [DEBUG] [Thread-178136] [transport.py] [_log()] userauth is OK
2026-04-11T22:48:16.695 [DEBUG] [Thread-178136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:48:16.695 [DEBUG] [Thread-178136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:48:16.695 [DEBUG] [Thread-178136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:48:16.695 [DEBUG] [Thread-178136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:48:16.710 [INFO] [Thread-178136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:48:16.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:48:17.481 [DEBUG] [Thread-178136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:48:17.482 [DEBUG] [Thread-178136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:48:17.482 [DEBUG] [Thread-178136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:48:17.523 [DEBUG] [Thread-178136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:48:17.523 [DEBUG] [Thread-178136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:48:17.526 [DEBUG] [Thread-178136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:48:17.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:48:17.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:48:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:48:17.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:48:17.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:48:17.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:48:17.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:48:17.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:48:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:48:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.866433 -999.00  +11.60  11.47     97  +11.20 1 3 1 3 1     0    0 0.37 -1.39 ----- 11.5 11.5 285.8 16.6 13.0 -1.5 12.9 -0.5 12.5 -1.1 12.9 -0.6
2026-04-11T22:48:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:48:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:48:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.866433
2026-04-11T22:48:17.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:48:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:48:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:48:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:48:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:48:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:47:52', tmtdew=-0.04511, humidity=100.224, cloud=0.0, wind=13.657, temperature=12.217, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:47:39.811', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:48:17.556 [DEBUG] [Thread-178136] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:48:17.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:48:17.648 [DEBUG] [Thread-178139] [transport.py] [_log()] starting thread (client mode): 0xb0fce740
2026-04-11T22:48:17.648 [DEBUG] [Thread-178139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:48:17.663 [DEBUG] [Thread-178139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:48:17.663 [INFO] [Thread-178139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:48:17.671 [DEBUG] [Thread-178139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:48:17.671 [DEBUG] [Thread-178139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:48:17.671 [DEBUG] [Thread-178139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:48:17.671 [DEBUG] [Thread-178139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:17.671 [DEBUG] [Thread-178139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:17.671 [DEBUG] [Thread-178139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] client lang: <none>
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] server lang: <none>
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] kex follows: False
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:48:17.672 [DEBUG] [Thread-178139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:48:17.673 [DEBUG] [Thread-178139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:48:17.673 [DEBUG] [Thread-178139] [transport.py] [_log()] Compression: none
2026-04-11T22:48:17.673 [DEBUG] [Thread-178139] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:48:17.731 [DEBUG] [Thread-178139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:48:17.731 [DEBUG] [Thread-178139] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:48:17.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:48:17.733 [DEBUG] [Thread-178139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:48:17.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:48:17.791 [DEBUG] [Thread-178139] [transport.py] [_log()] userauth is OK
2026-04-11T22:48:17.791 [DEBUG] [Thread-178139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:48:17.791 [DEBUG] [Thread-178139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:48:17.791 [DEBUG] [Thread-178139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:48:17.791 [DEBUG] [Thread-178139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:48:17.809 [INFO] [Thread-178139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:48:17.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:48:17.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:48:18.627 [DEBUG] [Thread-178139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:48:18.627 [DEBUG] [Thread-178139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:48:18.675 [DEBUG] [Thread-178139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:48:18.675 [DEBUG] [Thread-178139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:48:18.684 [DEBUG] [Thread-178139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:48:18.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:48:18.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:48:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:48:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:48:18.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:48:18.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:48:18.722 [DEBUG] [Thread-178139] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:48:23.150 [DEBUG] [Thread-178141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:38.214 [DEBUG] [Thread-178142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:39.821 [DEBUG] [Thread-178143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:45.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:45.106 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:48:48.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:48:48.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:48:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:48:49.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 48, 27), 0.02747, 100.112, 0.0, 13.658, 11.6919, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:48:49.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:48:27
2026-04-11T22:48:50.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:48:50.514 [DEBUG] [Thread-178144] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-11T22:48:50.515 [DEBUG] [Thread-178144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:48:50.534 [DEBUG] [Thread-178144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:48:50.534 [INFO] [Thread-178144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] client lang: <none>
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] server lang: <none>
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] kex follows: False
2026-04-11T22:48:50.537 [DEBUG] [Thread-178144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:48:50.538 [DEBUG] [Thread-178144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:48:50.538 [DEBUG] [Thread-178144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:48:50.538 [DEBUG] [Thread-178144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:48:50.538 [DEBUG] [Thread-178144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:48:50.538 [DEBUG] [Thread-178144] [transport.py] [_log()] Compression: none
2026-04-11T22:48:50.538 [DEBUG] [Thread-178144] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:48:50.554 [DEBUG] [Thread-178144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:48:50.555 [DEBUG] [Thread-178144] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:48:50.556 [DEBUG] [Thread-178144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:48:50.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:48:50.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:48:50.558 [DEBUG] [Thread-178144] [transport.py] [_log()] userauth is OK
2026-04-11T22:48:50.558 [DEBUG] [Thread-178144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:48:50.558 [DEBUG] [Thread-178144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:48:50.558 [DEBUG] [Thread-178144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:48:50.558 [DEBUG] [Thread-178144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:48:50.583 [INFO] [Thread-178144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:48:50.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:48:51.357 [DEBUG] [Thread-178144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:48:51.357 [DEBUG] [Thread-178144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:48:51.358 [DEBUG] [Thread-178144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:48:51.398 [DEBUG] [Thread-178144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:48:51.398 [DEBUG] [Thread-178144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:48:51.401 [DEBUG] [Thread-178144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:48:51.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:48:51.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:48:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:48:51.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:48:51.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:48:51.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:48:51.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:48:51.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:48:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:48:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.866780 -999.00  +11.60  11.89     97  +11.30 1 3 1 3 1     0    0 0.35 -1.59 ----- 11.9 11.9 280.2 17.2 13.0 -1.0 12.9 -0.4 12.5 -0.8 12.8 -0.7
2026-04-11T22:48:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:48:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:48:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.866780
2026-04-11T22:48:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:48:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:48:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:48:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:48:51.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:48:51.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:48:27', tmtdew=0.02747, humidity=100.112, cloud=0.0, wind=13.658, temperature=11.6919, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:48:09.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:48:51.429 [DEBUG] [Thread-178144] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:48:51.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:48:51.521 [DEBUG] [Thread-178147] [transport.py] [_log()] starting thread (client mode): 0xb0fcc160
2026-04-11T22:48:51.522 [DEBUG] [Thread-178147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:48:51.536 [DEBUG] [Thread-178147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:48:51.536 [INFO] [Thread-178147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] client lang: <none>
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] server lang: <none>
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] kex follows: False
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:48:51.544 [DEBUG] [Thread-178147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:48:51.545 [DEBUG] [Thread-178147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:48:51.545 [DEBUG] [Thread-178147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:48:51.545 [DEBUG] [Thread-178147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:48:51.545 [DEBUG] [Thread-178147] [transport.py] [_log()] Compression: none
2026-04-11T22:48:51.545 [DEBUG] [Thread-178147] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:48:51.604 [DEBUG] [Thread-178147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:48:51.605 [DEBUG] [Thread-178147] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:48:51.605 [DEBUG] [Thread-178147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:48:51.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:48:51.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:48:51.664 [DEBUG] [Thread-178147] [transport.py] [_log()] userauth is OK
2026-04-11T22:48:51.665 [DEBUG] [Thread-178147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:48:51.665 [DEBUG] [Thread-178147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:48:51.665 [DEBUG] [Thread-178147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:48:51.665 [DEBUG] [Thread-178147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:48:51.686 [INFO] [Thread-178147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:48:51.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:48:51.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:48:52.493 [DEBUG] [Thread-178147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:48:52.493 [DEBUG] [Thread-178147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:48:52.541 [DEBUG] [Thread-178147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:48:52.542 [DEBUG] [Thread-178147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:48:52.551 [DEBUG] [Thread-178147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:48:52.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:48:52.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-04-11T22:48:52.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-04-11T22:48:52.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:48:52.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:48:52.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:48:52.588 [DEBUG] [Thread-178147] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:48:53.256 [DEBUG] [Thread-178149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:08.308 [DEBUG] [Thread-178150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:49:22.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:49:22.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-04-11T22:49:23.344 [DEBUG] [Thread-178151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:23.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 49, 3), 0.032515, 100.079, 0.0, 13.0759, 11.6754, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:49:23.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:49:03
2026-04-11T22:49:24.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:49:24.471 [DEBUG] [Thread-178152] [transport.py] [_log()] starting thread (client mode): 0xb0f8f400
2026-04-11T22:49:24.471 [DEBUG] [Thread-178152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:49:24.491 [DEBUG] [Thread-178152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:49:24.491 [INFO] [Thread-178152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] client lang: <none>
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] server lang: <none>
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] kex follows: False
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:49:24.493 [DEBUG] [Thread-178152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:49:24.494 [DEBUG] [Thread-178152] [transport.py] [_log()] Compression: none
2026-04-11T22:49:24.494 [DEBUG] [Thread-178152] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:49:24.507 [DEBUG] [Thread-178152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:49:24.508 [DEBUG] [Thread-178152] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:49:24.508 [DEBUG] [Thread-178152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:49:24.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:49:24.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:49:24.512 [DEBUG] [Thread-178152] [transport.py] [_log()] userauth is OK
2026-04-11T22:49:24.513 [DEBUG] [Thread-178152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:49:24.513 [DEBUG] [Thread-178152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:49:24.513 [DEBUG] [Thread-178152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:49:24.513 [DEBUG] [Thread-178152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:49:24.537 [INFO] [Thread-178152] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:49:24.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:49:25.167 [DEBUG] [Thread-178152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:49:25.167 [DEBUG] [Thread-178152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:49:25.167 [DEBUG] [Thread-178152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:49:25.208 [DEBUG] [Thread-178152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:49:25.208 [DEBUG] [Thread-178152] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:49:25.212 [DEBUG] [Thread-178152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:49:25.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:49:25.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:49:25.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:49:25.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:49:25.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:49:25.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:49:25.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:49:25.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:49:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:49:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.867474 -999.00  +11.60  10.46     97  +11.20 1 3 1 3 1     0    0 0.35 -1.54 ----- 10.5 10.5 292.8 16.2 13.0 -1.2 12.9 -0.4 12.5 -1.0 12.8 -0.8
2026-04-11T22:49:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:49:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:49:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.867474
2026-04-11T22:49:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:49:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:49:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:49:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:49:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:49:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:49:03', tmtdew=0.032515, humidity=100.079, cloud=0.0, wind=13.0759, temperature=11.6754, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:49:09.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:49:25.237 [DEBUG] [Thread-178152] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:49:25.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:49:25.330 [DEBUG] [Thread-178155] [transport.py] [_log()] starting thread (client mode): 0xa7955ab0
2026-04-11T22:49:25.330 [DEBUG] [Thread-178155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:49:25.344 [DEBUG] [Thread-178155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:49:25.345 [INFO] [Thread-178155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:25.352 [DEBUG] [Thread-178155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] client lang: <none>
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] server lang: <none>
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] kex follows: False
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] Compression: none
2026-04-11T22:49:25.353 [DEBUG] [Thread-178155] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:49:25.413 [DEBUG] [Thread-178155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:49:25.414 [DEBUG] [Thread-178155] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:49:25.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:49:25.415 [DEBUG] [Thread-178155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:49:25.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:49:25.469 [DEBUG] [Thread-178155] [transport.py] [_log()] userauth is OK
2026-04-11T22:49:25.469 [DEBUG] [Thread-178155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:49:25.470 [DEBUG] [Thread-178155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:49:25.470 [DEBUG] [Thread-178155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:49:25.470 [DEBUG] [Thread-178155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:49:25.488 [INFO] [Thread-178155] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:49:25.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:49:25.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:49:26.317 [DEBUG] [Thread-178155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:49:26.317 [DEBUG] [Thread-178155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:49:26.365 [DEBUG] [Thread-178155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:49:26.365 [DEBUG] [Thread-178155] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:49:26.375 [DEBUG] [Thread-178155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:49:26.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:49:26.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:49:26.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-04-11T22:49:26.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:49:26.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:49:26.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:49:26.411 [DEBUG] [Thread-178155] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:49:38.381 [DEBUG] [Thread-178157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:39.878 [DEBUG] [Thread-178158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:45.311 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:45.312 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:53.442 [DEBUG] [Thread-178159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:49:56.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:49:56.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:49:56.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-04-11T22:49:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 49, 39), -0.03497, 100.158, 0.0, 14.0803, 12.1507, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:49:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:49:39
2026-04-11T22:49:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:49:58.300 [DEBUG] [Thread-178160] [transport.py] [_log()] starting thread (client mode): 0xb0f8ca60
2026-04-11T22:49:58.300 [DEBUG] [Thread-178160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:49:58.322 [DEBUG] [Thread-178160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:49:58.322 [INFO] [Thread-178160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:49:58.324 [DEBUG] [Thread-178160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:49:58.324 [DEBUG] [Thread-178160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:49:58.324 [DEBUG] [Thread-178160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:49:58.324 [DEBUG] [Thread-178160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:58.324 [DEBUG] [Thread-178160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] client lang: <none>
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] server lang: <none>
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] kex follows: False
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] Compression: none
2026-04-11T22:49:58.325 [DEBUG] [Thread-178160] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:49:58.348 [DEBUG] [Thread-178160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:49:58.348 [DEBUG] [Thread-178160] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:49:58.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:49:58.350 [DEBUG] [Thread-178160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:49:58.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:49:58.352 [DEBUG] [Thread-178160] [transport.py] [_log()] userauth is OK
2026-04-11T22:49:58.352 [DEBUG] [Thread-178160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:49:58.352 [DEBUG] [Thread-178160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:49:58.352 [DEBUG] [Thread-178160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:49:58.352 [DEBUG] [Thread-178160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:49:58.376 [INFO] [Thread-178160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:49:58.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:49:58.961 [DEBUG] [Thread-178160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:49:58.961 [DEBUG] [Thread-178160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:49:58.961 [DEBUG] [Thread-178160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:49:59.002 [DEBUG] [Thread-178160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:49:59.002 [DEBUG] [Thread-178160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:49:59.006 [DEBUG] [Thread-178160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:49:59.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:49:59.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:49:59.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:49:59.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:49:59.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:49:59.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:49:59.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:49:59.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:49:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:49:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.867822 -999.00  +11.60  12.95     97  +11.30 1 3 1 3 1     0    0 0.35 -1.81 ----- 12.9 12.9 286.6 15.9 13.1 -1.0 12.9 -0.5 12.5 -0.7 12.8 -0.4
2026-04-11T22:49:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:49:59.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:49:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.867822
2026-04-11T22:49:59.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:49:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:49:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:49:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:49:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:49:59.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:49:39', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=14.0803, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:49:39.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:49:59.031 [DEBUG] [Thread-178160] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:49:59.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:49:59.124 [DEBUG] [Thread-178163] [transport.py] [_log()] starting thread (client mode): 0xae519a80
2026-04-11T22:49:59.124 [DEBUG] [Thread-178163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:49:59.138 [DEBUG] [Thread-178163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:49:59.139 [INFO] [Thread-178163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:49:59.146 [DEBUG] [Thread-178163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:49:59.146 [DEBUG] [Thread-178163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:49:59.146 [DEBUG] [Thread-178163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] client lang: <none>
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] server lang: <none>
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] kex follows: False
2026-04-11T22:49:59.147 [DEBUG] [Thread-178163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:49:59.148 [DEBUG] [Thread-178163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:49:59.148 [DEBUG] [Thread-178163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:49:59.148 [DEBUG] [Thread-178163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:49:59.148 [DEBUG] [Thread-178163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:49:59.148 [DEBUG] [Thread-178163] [transport.py] [_log()] Compression: none
2026-04-11T22:49:59.148 [DEBUG] [Thread-178163] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:49:59.206 [DEBUG] [Thread-178163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:49:59.207 [DEBUG] [Thread-178163] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:49:59.208 [DEBUG] [Thread-178163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:49:59.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:49:59.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:49:59.266 [DEBUG] [Thread-178163] [transport.py] [_log()] userauth is OK
2026-04-11T22:49:59.267 [DEBUG] [Thread-178163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:49:59.267 [DEBUG] [Thread-178163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:49:59.267 [DEBUG] [Thread-178163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:49:59.267 [DEBUG] [Thread-178163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:49:59.285 [INFO] [Thread-178163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:49:59.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:49:59.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:50:00.156 [DEBUG] [Thread-178163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:50:00.156 [DEBUG] [Thread-178163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:50:00.204 [DEBUG] [Thread-178163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:50:00.204 [DEBUG] [Thread-178163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:50:00.214 [DEBUG] [Thread-178163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:50:00.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:50:00.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-04-11T22:50:00.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-04-11T22:50:00.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:50:00.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:50:00.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:50:00.249 [DEBUG] [Thread-178163] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:50:08.475 [DEBUG] [Thread-178165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:50:23.515 [DEBUG] [Thread-178166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:50:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:50:30.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:50:30.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:50:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 50, 14), 0.032515, 100.079, 0.0, 12.105, 11.7254, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:50:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:50:14
2026-04-11T22:50:31.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:50:32.132 [DEBUG] [Thread-178167] [transport.py] [_log()] starting thread (client mode): 0xa7955a50
2026-04-11T22:50:32.132 [DEBUG] [Thread-178167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:50:32.152 [DEBUG] [Thread-178167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:50:32.152 [INFO] [Thread-178167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:50:32.154 [DEBUG] [Thread-178167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] client lang: <none>
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] server lang: <none>
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] kex follows: False
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] Compression: none
2026-04-11T22:50:32.155 [DEBUG] [Thread-178167] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:50:32.164 [DEBUG] [Thread-178167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:50:32.165 [DEBUG] [Thread-178167] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:50:32.165 [DEBUG] [Thread-178167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:50:32.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:50:32.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:50:32.167 [DEBUG] [Thread-178167] [transport.py] [_log()] userauth is OK
2026-04-11T22:50:32.167 [DEBUG] [Thread-178167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:50:32.167 [DEBUG] [Thread-178167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:50:32.167 [DEBUG] [Thread-178167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:50:32.168 [DEBUG] [Thread-178167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:50:32.191 [INFO] [Thread-178167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:50:32.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:50:32.784 [DEBUG] [Thread-178167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:50:32.784 [DEBUG] [Thread-178167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:50:32.784 [DEBUG] [Thread-178167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:50:32.825 [DEBUG] [Thread-178167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:50:32.825 [DEBUG] [Thread-178167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:50:32.828 [DEBUG] [Thread-178167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:50:32.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:50:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:50:32.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:50:32.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:50:32.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:50:32.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:50:32.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:50:32.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:50:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:50:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.868169 -999.00  +11.70   8.57     97  +11.30 1 3 1 3 1     0    0 0.35 -1.84 ----- 8.6 8.6 294.6 12.1 13.0 -0.9 12.9 -0.3 12.5 -0.4 12.9 -0.5
2026-04-11T22:50:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:50:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:50:32.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.868169
2026-04-11T22:50:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:50:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:50:32.854 [DEBUG] [Thread-178167] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:50:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:50:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:50:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:50:32.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:50:14', tmtdew=0.032515, humidity=100.079, cloud=0.0, wind=12.105, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:50:09.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:50:32.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:50:32.943 [DEBUG] [Thread-178170] [transport.py] [_log()] starting thread (client mode): 0xb0f8c2e0
2026-04-11T22:50:32.943 [DEBUG] [Thread-178170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:50:32.957 [DEBUG] [Thread-178170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:50:32.957 [INFO] [Thread-178170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] client lang: <none>
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] server lang: <none>
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] kex follows: False
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] Compression: none
2026-04-11T22:50:32.965 [DEBUG] [Thread-178170] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:50:33.022 [DEBUG] [Thread-178170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:50:33.022 [DEBUG] [Thread-178170] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:50:33.023 [DEBUG] [Thread-178170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:50:33.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:50:33.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:50:33.078 [DEBUG] [Thread-178170] [transport.py] [_log()] userauth is OK
2026-04-11T22:50:33.078 [DEBUG] [Thread-178170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:50:33.078 [DEBUG] [Thread-178170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:50:33.078 [DEBUG] [Thread-178170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:50:33.078 [DEBUG] [Thread-178170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:50:33.097 [INFO] [Thread-178170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:50:33.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:50:33.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:50:33.910 [DEBUG] [Thread-178170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:50:33.910 [DEBUG] [Thread-178170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:50:33.958 [DEBUG] [Thread-178170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:50:33.958 [DEBUG] [Thread-178170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:50:33.967 [DEBUG] [Thread-178170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:50:33.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:50:33.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-04-11T22:50:33.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-04-11T22:50:33.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:50:33.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:50:33.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:50:34.003 [DEBUG] [Thread-178170] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:50:38.552 [DEBUG] [Thread-178172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:50:39.944 [DEBUG] [Thread-178173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:50:45.512 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:50:45.514 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:50:53.605 [DEBUG] [Thread-178174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:51:03.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:51:04.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-04-11T22:51:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 50, 49), -0.03497, 100.158, 0.0, 14.0098, 12.1507, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:51:05.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:50:49
2026-04-11T22:51:05.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:51:05.820 [DEBUG] [Thread-178175] [transport.py] [_log()] starting thread (client mode): 0xb0f8e2c0
2026-04-11T22:51:05.820 [DEBUG] [Thread-178175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:51:05.840 [DEBUG] [Thread-178175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:51:05.840 [INFO] [Thread-178175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:51:05.843 [DEBUG] [Thread-178175] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:51:05.843 [DEBUG] [Thread-178175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] client lang: <none>
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] server lang: <none>
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] kex follows: False
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:51:05.844 [DEBUG] [Thread-178175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:51:05.845 [DEBUG] [Thread-178175] [transport.py] [_log()] Compression: none
2026-04-11T22:51:05.845 [DEBUG] [Thread-178175] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:51:05.853 [DEBUG] [Thread-178175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:51:05.854 [DEBUG] [Thread-178175] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:51:05.854 [DEBUG] [Thread-178175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:51:05.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:51:05.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:51:05.856 [DEBUG] [Thread-178175] [transport.py] [_log()] userauth is OK
2026-04-11T22:51:05.856 [DEBUG] [Thread-178175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:51:05.856 [DEBUG] [Thread-178175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:51:05.856 [DEBUG] [Thread-178175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:51:05.856 [DEBUG] [Thread-178175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:51:05.881 [INFO] [Thread-178175] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:51:05.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:51:06.436 [DEBUG] [Thread-178175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:51:06.437 [DEBUG] [Thread-178175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:51:06.437 [DEBUG] [Thread-178175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:51:06.478 [DEBUG] [Thread-178175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:51:06.479 [DEBUG] [Thread-178175] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:51:06.485 [DEBUG] [Thread-178175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:51:06.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:51:06.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:51:06.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:51:06.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:51:06.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:51:06.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:51:06.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:51:06.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:51:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:51:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.868516 -999.00  +11.70   9.93     97  +11.30 1 3 1 3 1     0    0 0.34 -1.88 ----- 9.9 9.9 290.0 13.8 13.0 -0.9 12.9 -0.3 12.5 -0.8 12.9 -0.5
2026-04-11T22:51:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:51:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:51:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.868516
2026-04-11T22:51:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:51:06.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:51:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:51:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:51:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:51:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:50:49', tmtdew=-0.03497, humidity=100.158, cloud=0.0, wind=14.0098, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:50:39.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:51:06.513 [DEBUG] [Thread-178175] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:51:06.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:51:06.610 [DEBUG] [Thread-178178] [transport.py] [_log()] starting thread (client mode): 0xb0f8fb80
2026-04-11T22:51:06.610 [DEBUG] [Thread-178178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:51:06.624 [DEBUG] [Thread-178178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:51:06.625 [INFO] [Thread-178178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:51:06.632 [DEBUG] [Thread-178178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:51:06.632 [DEBUG] [Thread-178178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:51:06.632 [DEBUG] [Thread-178178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] client lang: <none>
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] server lang: <none>
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] kex follows: False
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] Compression: none
2026-04-11T22:51:06.633 [DEBUG] [Thread-178178] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:51:06.692 [DEBUG] [Thread-178178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:51:06.693 [DEBUG] [Thread-178178] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:51:06.693 [DEBUG] [Thread-178178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:51:06.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:51:06.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:51:06.747 [DEBUG] [Thread-178178] [transport.py] [_log()] userauth is OK
2026-04-11T22:51:06.748 [DEBUG] [Thread-178178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:51:06.748 [DEBUG] [Thread-178178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:51:06.748 [DEBUG] [Thread-178178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:51:06.748 [DEBUG] [Thread-178178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:51:06.767 [INFO] [Thread-178178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:51:06.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:51:06.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:51:07.625 [DEBUG] [Thread-178178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:51:07.625 [DEBUG] [Thread-178178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:51:07.674 [DEBUG] [Thread-178178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:51:07.674 [DEBUG] [Thread-178178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:51:07.683 [DEBUG] [Thread-178178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:51:07.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:51:07.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-04-11T22:51:07.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-04-11T22:51:07.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:51:07.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:51:07.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:51:07.717 [DEBUG] [Thread-178178] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:51:08.641 [DEBUG] [Thread-178180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:23.692 [DEBUG] [Thread-178181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:51:37.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:51:37.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-04-11T22:51:38.728 [DEBUG] [Thread-178182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:38.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 51, 25), 0.032515, 100.079, 0.0, 13.8168, 11.7254, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:51:38.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:51:25
2026-04-11T22:51:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:51:39.493 [DEBUG] [Thread-178183] [transport.py] [_log()] starting thread (client mode): 0xb0fce5f0
2026-04-11T22:51:39.493 [DEBUG] [Thread-178183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:51:39.514 [DEBUG] [Thread-178183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:51:39.514 [INFO] [Thread-178183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] client lang: <none>
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] server lang: <none>
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] kex follows: False
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] Compression: none
2026-04-11T22:51:39.517 [DEBUG] [Thread-178183] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:51:39.533 [DEBUG] [Thread-178183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:51:39.533 [DEBUG] [Thread-178183] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:51:39.533 [DEBUG] [Thread-178183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:51:39.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:51:39.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:51:39.535 [DEBUG] [Thread-178183] [transport.py] [_log()] userauth is OK
2026-04-11T22:51:39.535 [DEBUG] [Thread-178183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:51:39.535 [DEBUG] [Thread-178183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:51:39.536 [DEBUG] [Thread-178183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:51:39.536 [DEBUG] [Thread-178183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:51:39.559 [INFO] [Thread-178183] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:51:39.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:51:40.009 [DEBUG] [Thread-178185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:40.157 [DEBUG] [Thread-178183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:51:40.157 [DEBUG] [Thread-178183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:51:40.158 [DEBUG] [Thread-178183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:51:40.198 [DEBUG] [Thread-178183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:51:40.198 [DEBUG] [Thread-178183] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:51:40.202 [DEBUG] [Thread-178183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:51:40.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:51:40.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:51:40.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:51:40.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:51:40.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:51:40.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:51:40.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:51:40.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:51:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:51:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.868863 -999.00  +11.70   8.02     97  +11.30 1 3 1 3 1     0    0 0.35 -1.73 ----- 8.0 8.0 292.0 11.3 13.1 -0.9 13.0 -0.2 12.6 -0.3 12.9 -0.5
2026-04-11T22:51:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:51:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:51:40.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.868863
2026-04-11T22:51:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:51:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:51:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:51:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:51:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:51:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:51:25', tmtdew=0.032515, humidity=100.079, cloud=0.0, wind=13.8168, temperature=11.7254, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:51:09.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:51:40.232 [DEBUG] [Thread-178183] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:51:40.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:51:40.325 [DEBUG] [Thread-178187] [transport.py] [_log()] starting thread (client mode): 0xb0f8cf70
2026-04-11T22:51:40.325 [DEBUG] [Thread-178187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:51:40.339 [DEBUG] [Thread-178187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:51:40.340 [INFO] [Thread-178187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:40.348 [DEBUG] [Thread-178187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] client lang: <none>
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] server lang: <none>
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] kex follows: False
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:51:40.349 [DEBUG] [Thread-178187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:51:40.350 [DEBUG] [Thread-178187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:51:40.350 [DEBUG] [Thread-178187] [transport.py] [_log()] Compression: none
2026-04-11T22:51:40.350 [DEBUG] [Thread-178187] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:51:40.408 [DEBUG] [Thread-178187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:51:40.409 [DEBUG] [Thread-178187] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:51:40.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:51:40.411 [DEBUG] [Thread-178187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:51:40.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:51:40.464 [DEBUG] [Thread-178187] [transport.py] [_log()] userauth is OK
2026-04-11T22:51:40.464 [DEBUG] [Thread-178187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:51:40.465 [DEBUG] [Thread-178187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:51:40.465 [DEBUG] [Thread-178187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:51:40.465 [DEBUG] [Thread-178187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:51:40.491 [INFO] [Thread-178187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:51:40.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:51:40.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:51:41.317 [DEBUG] [Thread-178187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:51:41.317 [DEBUG] [Thread-178187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:51:41.365 [DEBUG] [Thread-178187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:51:41.365 [DEBUG] [Thread-178187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:51:41.374 [DEBUG] [Thread-178187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:51:41.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:51:41.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:51:41.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:51:41.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:51:41.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:51:41.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:51:41.412 [DEBUG] [Thread-178187] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:51:45.720 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:45.721 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:51:53.768 [DEBUG] [Thread-178189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:08.830 [DEBUG] [Thread-178190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:11.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:52:11.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:52:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:52:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 52, 1), 0.03002, 100.095, 0.0, 12.1579, 11.7088, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:52:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:52:01
2026-04-11T22:52:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:52:13.260 [DEBUG] [Thread-178191] [transport.py] [_log()] starting thread (client mode): 0xae5f2920
2026-04-11T22:52:13.260 [DEBUG] [Thread-178191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:52:13.279 [DEBUG] [Thread-178191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:52:13.280 [INFO] [Thread-178191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:52:13.282 [DEBUG] [Thread-178191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] client lang: <none>
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] server lang: <none>
2026-04-11T22:52:13.283 [DEBUG] [Thread-178191] [transport.py] [_log()] kex follows: False
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] Compression: none
2026-04-11T22:52:13.284 [DEBUG] [Thread-178191] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:52:13.303 [DEBUG] [Thread-178191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:52:13.303 [DEBUG] [Thread-178191] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:52:13.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:52:13.304 [DEBUG] [Thread-178191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:52:13.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:52:13.306 [DEBUG] [Thread-178191] [transport.py] [_log()] userauth is OK
2026-04-11T22:52:13.307 [DEBUG] [Thread-178191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:52:13.307 [DEBUG] [Thread-178191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:52:13.307 [DEBUG] [Thread-178191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:52:13.307 [DEBUG] [Thread-178191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:52:13.342 [INFO] [Thread-178191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:52:13.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:52:13.930 [DEBUG] [Thread-178191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:52:13.930 [DEBUG] [Thread-178191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:52:13.931 [DEBUG] [Thread-178191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:52:13.971 [DEBUG] [Thread-178191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:52:13.971 [DEBUG] [Thread-178191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:52:13.974 [DEBUG] [Thread-178191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:52:13.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:52:13.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:52:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:52:13.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:52:13.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:52:13.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:52:13.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:52:13.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:52:13.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:52:13.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.869210 -999.00  +11.70   8.96     97  +11.40 1 3 1 3 1     0    0 0.35 -1.56 ----- 9.0 9.0 296.0 12.9 13.1 -0.9 12.9 -0.2 12.6 -0.4 12.9 -0.5
2026-04-11T22:52:13.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:52:13.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:52:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.869210
2026-04-11T22:52:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:52:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:52:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:52:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:52:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:52:13.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:52:01', tmtdew=0.03002, humidity=100.095, cloud=0.0, wind=12.1579, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:51:39.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:52:13.998 [DEBUG] [Thread-178191] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:52:14.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:52:14.091 [DEBUG] [Thread-178194] [transport.py] [_log()] starting thread (client mode): 0xb0fcfd00
2026-04-11T22:52:14.091 [DEBUG] [Thread-178194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:52:14.105 [DEBUG] [Thread-178194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:52:14.105 [INFO] [Thread-178194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:52:14.113 [DEBUG] [Thread-178194] [transport.py] [_log()] client lang: <none>
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] server lang: <none>
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] kex follows: False
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:52:14.114 [DEBUG] [Thread-178194] [transport.py] [_log()] Compression: none
2026-04-11T22:52:14.115 [DEBUG] [Thread-178194] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:52:14.171 [DEBUG] [Thread-178194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:52:14.172 [DEBUG] [Thread-178194] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:52:14.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:52:14.172 [DEBUG] [Thread-178194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:52:14.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:52:14.229 [DEBUG] [Thread-178194] [transport.py] [_log()] userauth is OK
2026-04-11T22:52:14.229 [DEBUG] [Thread-178194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:52:14.229 [DEBUG] [Thread-178194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:52:14.230 [DEBUG] [Thread-178194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:52:14.230 [DEBUG] [Thread-178194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:52:14.249 [INFO] [Thread-178194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:52:14.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:52:14.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:52:15.072 [DEBUG] [Thread-178194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:52:15.072 [DEBUG] [Thread-178194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:52:15.120 [DEBUG] [Thread-178194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:52:15.120 [DEBUG] [Thread-178194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:52:15.129 [DEBUG] [Thread-178194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:52:15.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:52:15.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-04-11T22:52:15.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-04-11T22:52:15.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:52:15.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:52:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:52:15.166 [DEBUG] [Thread-178194] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:52:23.865 [DEBUG] [Thread-178196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:38.913 [DEBUG] [Thread-178197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:40.073 [DEBUG] [Thread-178198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:45.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:52:45.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:52:45.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:52:45.924 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:45.925 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:52:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 52, 36), -0.03485, 100.158, 0.0, 12.528, 12.0512, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:52:46.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:52:36
2026-04-11T22:52:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:52:46.992 [DEBUG] [Thread-178199] [transport.py] [_log()] starting thread (client mode): 0xb0fce7a0
2026-04-11T22:52:46.992 [DEBUG] [Thread-178199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:52:47.002 [DEBUG] [Thread-178199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:52:47.002 [INFO] [Thread-178199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:52:47.004 [DEBUG] [Thread-178199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] client lang: <none>
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] server lang: <none>
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] kex follows: False
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] Compression: none
2026-04-11T22:52:47.005 [DEBUG] [Thread-178199] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:52:47.014 [DEBUG] [Thread-178199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:52:47.015 [DEBUG] [Thread-178199] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:52:47.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:52:47.015 [DEBUG] [Thread-178199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:52:47.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:52:47.016 [DEBUG] [Thread-178199] [transport.py] [_log()] userauth is OK
2026-04-11T22:52:47.016 [DEBUG] [Thread-178199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:52:47.017 [DEBUG] [Thread-178199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:52:47.017 [DEBUG] [Thread-178199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:52:47.017 [DEBUG] [Thread-178199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:52:47.036 [INFO] [Thread-178199] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:52:47.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:52:47.622 [DEBUG] [Thread-178199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:52:47.622 [DEBUG] [Thread-178199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:52:47.622 [DEBUG] [Thread-178199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:52:47.663 [DEBUG] [Thread-178199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:52:47.663 [DEBUG] [Thread-178199] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:52:47.667 [DEBUG] [Thread-178199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:52:47.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:52:47.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:52:47.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:52:47.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:52:47.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:52:47.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:52:47.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:52:47.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:52:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:52:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.869905 -999.00  +11.70  10.71     97  +11.30 1 3 1 3 1     0    0 0.36 -1.04 ----- 10.7 10.7 298.4 13.3 13.1 -1.0 12.9 -0.4 12.6 -0.4 12.9 -0.6
2026-04-11T22:52:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:52:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:52:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.869905
2026-04-11T22:52:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:52:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:52:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:52:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:52:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:52:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:52:36', tmtdew=-0.03485, humidity=100.158, cloud=0.0, wind=12.528, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:52:39.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:52:47.697 [DEBUG] [Thread-178199] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:52:47.793 [DEBUG] [Thread-178202] [transport.py] [_log()] starting thread (client mode): 0xa7952050
2026-04-11T22:52:47.793 [DEBUG] [Thread-178202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:52:47.807 [DEBUG] [Thread-178202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:52:47.807 [INFO] [Thread-178202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] client lang: <none>
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] server lang: <none>
2026-04-11T22:52:47.815 [DEBUG] [Thread-178202] [transport.py] [_log()] kex follows: False
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] Compression: none
2026-04-11T22:52:47.816 [DEBUG] [Thread-178202] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:52:47.873 [DEBUG] [Thread-178202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:52:47.873 [DEBUG] [Thread-178202] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:52:47.874 [DEBUG] [Thread-178202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:52:47.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:52:47.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:52:47.929 [DEBUG] [Thread-178202] [transport.py] [_log()] userauth is OK
2026-04-11T22:52:47.929 [DEBUG] [Thread-178202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:52:47.929 [DEBUG] [Thread-178202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:52:47.929 [DEBUG] [Thread-178202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:52:47.929 [DEBUG] [Thread-178202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:52:47.950 [INFO] [Thread-178202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:52:47.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:52:47.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:52:48.792 [DEBUG] [Thread-178202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:52:48.792 [DEBUG] [Thread-178202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:52:48.840 [DEBUG] [Thread-178202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:52:48.840 [DEBUG] [Thread-178202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:52:48.850 [DEBUG] [Thread-178202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:52:48.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:52:48.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-04-11T22:52:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:52:48.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:52:48.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:52:48.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:52:48.887 [DEBUG] [Thread-178202] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:52:53.951 [DEBUG] [Thread-178204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:09.007 [DEBUG] [Thread-178205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:18.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:53:18.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:53:18.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-04-11T22:53:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 53, 12), -0.014895, 100.062, 0.0, 12.0344, 11.659, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:53:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:53:12
2026-04-11T22:53:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:53:20.809 [DEBUG] [Thread-178206] [transport.py] [_log()] starting thread (client mode): 0xa7955a50
2026-04-11T22:53:20.809 [DEBUG] [Thread-178206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:53:20.821 [DEBUG] [Thread-178206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:53:20.821 [INFO] [Thread-178206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] client lang: <none>
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] server lang: <none>
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] kex follows: False
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:53:20.824 [DEBUG] [Thread-178206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:53:20.825 [DEBUG] [Thread-178206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:53:20.825 [DEBUG] [Thread-178206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:53:20.825 [DEBUG] [Thread-178206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:53:20.825 [DEBUG] [Thread-178206] [transport.py] [_log()] Compression: none
2026-04-11T22:53:20.825 [DEBUG] [Thread-178206] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:53:20.843 [DEBUG] [Thread-178206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:53:20.843 [DEBUG] [Thread-178206] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:53:20.844 [DEBUG] [Thread-178206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:53:20.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:53:20.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:53:20.845 [DEBUG] [Thread-178206] [transport.py] [_log()] userauth is OK
2026-04-11T22:53:20.845 [DEBUG] [Thread-178206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:53:20.846 [DEBUG] [Thread-178206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:53:20.846 [DEBUG] [Thread-178206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:53:20.846 [DEBUG] [Thread-178206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:53:20.865 [INFO] [Thread-178206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:53:20.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:53:21.486 [DEBUG] [Thread-178206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:53:21.486 [DEBUG] [Thread-178206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:53:21.486 [DEBUG] [Thread-178206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:53:21.527 [DEBUG] [Thread-178206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:53:21.527 [DEBUG] [Thread-178206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:53:21.530 [DEBUG] [Thread-178206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:53:21.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:53:21.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:53:21.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:53:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:53:21.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:53:21.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:53:21.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:53:21.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:53:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:53:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.870252 -999.00  +11.70  12.25     97  +11.30 1 3 1 3 1     0    0 0.36 -1.03 ----- 12.2 12.2 288.4 13.2 13.1 -1.1 13.0 -0.3 12.6 -0.6 12.9 -0.7
2026-04-11T22:53:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:53:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:53:21.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.870252
2026-04-11T22:53:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:53:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:53:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:53:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:53:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:53:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:53:12', tmtdew=-0.014895, humidity=100.062, cloud=0.0, wind=12.0344, temperature=11.659, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:53:09.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:53:21.550 [DEBUG] [Thread-178206] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:53:21.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:53:21.643 [DEBUG] [Thread-178209] [transport.py] [_log()] starting thread (client mode): 0xa7952200
2026-04-11T22:53:21.644 [DEBUG] [Thread-178209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:53:21.658 [DEBUG] [Thread-178209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:53:21.659 [INFO] [Thread-178209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:53:21.666 [DEBUG] [Thread-178209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:53:21.666 [DEBUG] [Thread-178209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] client lang: <none>
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] server lang: <none>
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] kex follows: False
2026-04-11T22:53:21.667 [DEBUG] [Thread-178209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:53:21.668 [DEBUG] [Thread-178209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:53:21.668 [DEBUG] [Thread-178209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:53:21.668 [DEBUG] [Thread-178209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:53:21.668 [DEBUG] [Thread-178209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:53:21.668 [DEBUG] [Thread-178209] [transport.py] [_log()] Compression: none
2026-04-11T22:53:21.668 [DEBUG] [Thread-178209] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:53:21.726 [DEBUG] [Thread-178209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:53:21.726 [DEBUG] [Thread-178209] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:53:21.727 [DEBUG] [Thread-178209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:53:21.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:53:21.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:53:21.782 [DEBUG] [Thread-178209] [transport.py] [_log()] userauth is OK
2026-04-11T22:53:21.783 [DEBUG] [Thread-178209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:53:21.783 [DEBUG] [Thread-178209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:53:21.783 [DEBUG] [Thread-178209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:53:21.783 [DEBUG] [Thread-178209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:53:21.802 [INFO] [Thread-178209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:53:21.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:53:21.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:53:22.614 [DEBUG] [Thread-178209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:53:22.615 [DEBUG] [Thread-178209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:53:22.663 [DEBUG] [Thread-178209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:53:22.663 [DEBUG] [Thread-178209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:53:22.672 [DEBUG] [Thread-178209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:53:22.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:53:22.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-04-11T22:53:22.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-04-11T22:53:22.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:53:22.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:53:22.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:53:22.708 [DEBUG] [Thread-178209] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:53:24.044 [DEBUG] [Thread-178211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:39.097 [DEBUG] [Thread-178212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:40.131 [DEBUG] [Thread-178213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:46.128 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:46.129 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:52.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:53:52.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:53:52.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:53:54.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 53, 12), -0.014895, 100.062, 0.0, 12.0344, 11.659, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:53:54.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:53:12
2026-04-11T22:53:54.135 [DEBUG] [Thread-178214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:53:54.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:53:54.679 [DEBUG] [Thread-178215] [transport.py] [_log()] starting thread (client mode): 0xb0f8f280
2026-04-11T22:53:54.679 [DEBUG] [Thread-178215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:53:54.696 [DEBUG] [Thread-178215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:53:54.697 [INFO] [Thread-178215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:53:54.698 [DEBUG] [Thread-178215] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] client lang: <none>
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] server lang: <none>
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] kex follows: False
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:53:54.699 [DEBUG] [Thread-178215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:53:54.700 [DEBUG] [Thread-178215] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:53:54.700 [DEBUG] [Thread-178215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:53:54.700 [DEBUG] [Thread-178215] [transport.py] [_log()] Compression: none
2026-04-11T22:53:54.700 [DEBUG] [Thread-178215] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:53:54.725 [DEBUG] [Thread-178215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:53:54.725 [DEBUG] [Thread-178215] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:53:54.726 [DEBUG] [Thread-178215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:53:54.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:53:54.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:53:54.728 [DEBUG] [Thread-178215] [transport.py] [_log()] userauth is OK
2026-04-11T22:53:54.728 [DEBUG] [Thread-178215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:53:54.728 [DEBUG] [Thread-178215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:53:54.728 [DEBUG] [Thread-178215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:53:54.728 [DEBUG] [Thread-178215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:53:54.747 [INFO] [Thread-178215] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:53:54.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:53:55.372 [DEBUG] [Thread-178215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:53:55.373 [DEBUG] [Thread-178215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:53:55.373 [DEBUG] [Thread-178215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:53:55.415 [DEBUG] [Thread-178215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:53:55.415 [DEBUG] [Thread-178215] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:53:55.418 [DEBUG] [Thread-178215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:53:55.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:53:55.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:53:55.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:53:55.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:53:55.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:53:55.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:53:55.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:53:55.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:53:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:53:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.870599 -999.00  +11.70  10.93     97  +11.30 1 3 1 3 1     0    0 0.36 -1.04 ----- 10.9 10.9 285.2 15.6 13.1 -1.6 13.0 -0.3 12.6 -1.4 12.9 -0.8
2026-04-11T22:53:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:53:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:53:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.870599
2026-04-11T22:53:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:53:55.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:53:55.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:53:55.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:53:55.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:53:55.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:53:12', tmtdew=-0.014895, humidity=100.062, cloud=0.0, wind=12.0344, temperature=11.659, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:53:39.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:53:55.445 [DEBUG] [Thread-178215] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:53:55.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:53:55.539 [DEBUG] [Thread-178218] [transport.py] [_log()] starting thread (client mode): 0xb0fcfd00
2026-04-11T22:53:55.539 [DEBUG] [Thread-178218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:53:55.554 [DEBUG] [Thread-178218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:53:55.554 [INFO] [Thread-178218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] client lang: <none>
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] server lang: <none>
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] kex follows: False
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:53:55.562 [DEBUG] [Thread-178218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:53:55.563 [DEBUG] [Thread-178218] [transport.py] [_log()] Compression: none
2026-04-11T22:53:55.563 [DEBUG] [Thread-178218] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:53:55.618 [DEBUG] [Thread-178218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:53:55.619 [DEBUG] [Thread-178218] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:53:55.620 [DEBUG] [Thread-178218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:53:55.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:53:55.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:53:55.675 [DEBUG] [Thread-178218] [transport.py] [_log()] userauth is OK
2026-04-11T22:53:55.675 [DEBUG] [Thread-178218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:53:55.675 [DEBUG] [Thread-178218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:53:55.676 [DEBUG] [Thread-178218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:53:55.676 [DEBUG] [Thread-178218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:53:55.696 [INFO] [Thread-178218] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:53:55.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:53:55.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:53:56.497 [DEBUG] [Thread-178218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:53:56.497 [DEBUG] [Thread-178218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:53:56.545 [DEBUG] [Thread-178218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:53:56.545 [DEBUG] [Thread-178218] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:53:56.554 [DEBUG] [Thread-178218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:53:56.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:53:56.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:53:56.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-04-11T22:53:56.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:53:56.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:53:56.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:53:56.592 [DEBUG] [Thread-178218] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:54:09.174 [DEBUG] [Thread-178220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:54:24.222 [DEBUG] [Thread-178221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:54:26.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:54:26.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:54:26.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-04-11T22:54:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 53, 47), -0.03493, 100.158, 0.0, 10.7287, 12.1175, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:54:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:53:47
2026-04-11T22:54:28.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:54:28.458 [DEBUG] [Thread-178222] [transport.py] [_log()] starting thread (client mode): 0xb0f8e410
2026-04-11T22:54:28.458 [DEBUG] [Thread-178222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:54:28.478 [DEBUG] [Thread-178222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:54:28.478 [INFO] [Thread-178222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] client lang: <none>
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] server lang: <none>
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] kex follows: False
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] Compression: none
2026-04-11T22:54:28.481 [DEBUG] [Thread-178222] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:54:28.498 [DEBUG] [Thread-178222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:54:28.499 [DEBUG] [Thread-178222] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:54:28.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:54:28.500 [DEBUG] [Thread-178222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:54:28.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:54:28.501 [DEBUG] [Thread-178222] [transport.py] [_log()] userauth is OK
2026-04-11T22:54:28.502 [DEBUG] [Thread-178222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:54:28.502 [DEBUG] [Thread-178222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:54:28.502 [DEBUG] [Thread-178222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:54:28.502 [DEBUG] [Thread-178222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:54:28.525 [INFO] [Thread-178222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:54:28.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:54:29.178 [DEBUG] [Thread-178222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:54:29.178 [DEBUG] [Thread-178222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:54:29.179 [DEBUG] [Thread-178222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:54:29.220 [DEBUG] [Thread-178222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:54:29.220 [DEBUG] [Thread-178222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:54:29.223 [DEBUG] [Thread-178222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:54:29.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:54:29.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:54:29.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:54:29.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:54:29.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:54:29.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:54:29.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:54:29.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:54:29.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:54:29.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.870947 -999.00  +11.70   9.08     97  +11.30 1 3 1 3 1     0    0 0.36 -1.12 ----- 9.1 9.1 289.3 12.7 13.1 -1.2 13.0 -0.4 12.6 -0.9 12.9 -0.8
2026-04-11T22:54:29.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:54:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:54:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.870947
2026-04-11T22:54:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:54:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:54:29.247 [DEBUG] [Thread-178222] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:54:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:54:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:54:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:54:29.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:53:47', tmtdew=-0.03493, humidity=100.158, cloud=0.0, wind=10.7287, temperature=12.1175, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:54:09.821', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:54:29.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:54:29.341 [DEBUG] [Thread-178225] [transport.py] [_log()] starting thread (client mode): 0xae5f07f0
2026-04-11T22:54:29.341 [DEBUG] [Thread-178225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:54:29.356 [DEBUG] [Thread-178225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:54:29.356 [INFO] [Thread-178225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:54:29.364 [DEBUG] [Thread-178225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] client lang: <none>
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] server lang: <none>
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] kex follows: False
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:54:29.365 [DEBUG] [Thread-178225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:54:29.366 [DEBUG] [Thread-178225] [transport.py] [_log()] Compression: none
2026-04-11T22:54:29.366 [DEBUG] [Thread-178225] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:54:29.425 [DEBUG] [Thread-178225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:54:29.425 [DEBUG] [Thread-178225] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:54:29.426 [DEBUG] [Thread-178225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:54:29.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:54:29.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:54:29.483 [DEBUG] [Thread-178225] [transport.py] [_log()] userauth is OK
2026-04-11T22:54:29.483 [DEBUG] [Thread-178225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:54:29.483 [DEBUG] [Thread-178225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:54:29.483 [DEBUG] [Thread-178225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:54:29.483 [DEBUG] [Thread-178225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:54:29.502 [INFO] [Thread-178225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:54:29.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:54:29.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:54:30.331 [DEBUG] [Thread-178225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:54:30.331 [DEBUG] [Thread-178225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:54:30.379 [DEBUG] [Thread-178225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:54:30.380 [DEBUG] [Thread-178225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:54:30.388 [DEBUG] [Thread-178225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:54:30.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:54:30.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-04-11T22:54:30.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:54:30.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:54:30.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:54:30.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:54:30.422 [DEBUG] [Thread-178225] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:54:39.257 [DEBUG] [Thread-178227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:54:40.193 [DEBUG] [Thread-178228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:54:46.331 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:54:46.333 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:54:54.311 [DEBUG] [Thread-178229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:00.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:55:00.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:55: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-04-11T22:55:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 54, 24), 0.03509, 100.062, 0.0, 11.9462, 11.6256, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:55:01.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:54:24
2026-04-11T22:55:02.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:55:02.259 [DEBUG] [Thread-178230] [transport.py] [_log()] starting thread (client mode): 0xb0fb4c40
2026-04-11T22:55:02.259 [DEBUG] [Thread-178230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:55:02.271 [DEBUG] [Thread-178230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:55:02.271 [INFO] [Thread-178230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] client lang: <none>
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] server lang: <none>
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] kex follows: False
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] Compression: none
2026-04-11T22:55:02.272 [DEBUG] [Thread-178230] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:55:02.281 [DEBUG] [Thread-178230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:55:02.281 [DEBUG] [Thread-178230] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:55:02.282 [DEBUG] [Thread-178230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:55:02.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:55:02.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:55:02.283 [DEBUG] [Thread-178230] [transport.py] [_log()] userauth is OK
2026-04-11T22:55:02.283 [DEBUG] [Thread-178230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:55:02.283 [DEBUG] [Thread-178230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:55:02.283 [DEBUG] [Thread-178230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:55:02.283 [DEBUG] [Thread-178230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:55:02.311 [INFO] [Thread-178230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:55:02.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:55:02.968 [DEBUG] [Thread-178230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:55:02.968 [DEBUG] [Thread-178230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:55:02.969 [DEBUG] [Thread-178230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:55:03.010 [DEBUG] [Thread-178230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:55:03.011 [DEBUG] [Thread-178230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:55:03.014 [DEBUG] [Thread-178230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:55:03.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:55:03.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:55:03.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:55:03.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:55:03.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:55:03.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:55:03.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:55:03.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:55:03.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:55:03.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.871294 -999.00  +11.70  12.44     97  +11.30 1 3 1 3 1     0    0 0.36 -1.13 ----- 12.4 12.4 281.6 14.4 13.2 -1.3 13.1 -0.5 12.6 -0.6 12.9 -0.7
2026-04-11T22:55:03.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:55:03.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:55:03.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.871294
2026-04-11T22:55:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:55:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:55:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:55:03.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:55:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:55:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:54:24', tmtdew=0.03509, humidity=100.062, cloud=0.0, wind=11.9462, temperature=11.6256, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:54:39.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:55:03.051 [DEBUG] [Thread-178230] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:55:03.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:55:03.146 [DEBUG] [Thread-178233] [transport.py] [_log()] starting thread (client mode): 0xae509300
2026-04-11T22:55:03.146 [DEBUG] [Thread-178233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:55:03.164 [DEBUG] [Thread-178233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:55:03.165 [INFO] [Thread-178233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:55:03.172 [DEBUG] [Thread-178233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:55:03.172 [DEBUG] [Thread-178233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:55:03.172 [DEBUG] [Thread-178233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] client lang: <none>
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] server lang: <none>
2026-04-11T22:55:03.173 [DEBUG] [Thread-178233] [transport.py] [_log()] kex follows: False
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] Compression: none
2026-04-11T22:55:03.174 [DEBUG] [Thread-178233] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:55:03.233 [DEBUG] [Thread-178233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:55:03.233 [DEBUG] [Thread-178233] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:55:03.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:55:03.235 [DEBUG] [Thread-178233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:55:03.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:55:03.292 [DEBUG] [Thread-178233] [transport.py] [_log()] userauth is OK
2026-04-11T22:55:03.293 [DEBUG] [Thread-178233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:55:03.293 [DEBUG] [Thread-178233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:55:03.293 [DEBUG] [Thread-178233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:55:03.293 [DEBUG] [Thread-178233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:55:03.316 [INFO] [Thread-178233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:55:03.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:55:03.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:55:04.142 [DEBUG] [Thread-178233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:55:04.143 [DEBUG] [Thread-178233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:55:04.191 [DEBUG] [Thread-178233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:55:04.191 [DEBUG] [Thread-178233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:55:04.200 [DEBUG] [Thread-178233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:55:04.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:55:04.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-04-11T22:55:04.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:55:04.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:55:04.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:55:04.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:55:04.235 [DEBUG] [Thread-178233] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:55:09.345 [DEBUG] [Thread-178235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:24.399 [DEBUG] [Thread-178236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:55:34.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:55:34.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-04-11T22:55:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 54, 59), -0.01236, 100.046, 0.0, 13.3582, 11.5924, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:55:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:54:59
2026-04-11T22:55:36.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:55:36.227 [DEBUG] [Thread-178237] [transport.py] [_log()] starting thread (client mode): 0xa7951930
2026-04-11T22:55:36.227 [DEBUG] [Thread-178237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:55:36.248 [DEBUG] [Thread-178237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:55:36.248 [INFO] [Thread-178237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] client lang: <none>
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] server lang: <none>
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] kex follows: False
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] Compression: none
2026-04-11T22:55:36.252 [DEBUG] [Thread-178237] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:55:36.269 [DEBUG] [Thread-178237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:55:36.270 [DEBUG] [Thread-178237] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:55:36.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:55:36.271 [DEBUG] [Thread-178237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:55:36.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:55:36.274 [DEBUG] [Thread-178237] [transport.py] [_log()] userauth is OK
2026-04-11T22:55:36.274 [DEBUG] [Thread-178237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:55:36.274 [DEBUG] [Thread-178237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:55:36.275 [DEBUG] [Thread-178237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:55:36.275 [DEBUG] [Thread-178237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:55:36.299 [INFO] [Thread-178237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:55:36.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:55:36.928 [DEBUG] [Thread-178237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:55:36.929 [DEBUG] [Thread-178237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:55:36.929 [DEBUG] [Thread-178237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:55:36.969 [DEBUG] [Thread-178237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:55:36.969 [DEBUG] [Thread-178237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:55:36.971 [DEBUG] [Thread-178237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:55:36.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:55:36.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:55:36.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:55:36.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:55:36.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:55:36.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:55:36.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:55:36.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:55:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:55:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.871640 -999.00  +11.70   9.92     97  +11.30 1 3 1 3 1     0    0 0.36 -1.12 ----- 9.9 9.9 295.8 14.9 13.1 -0.8 13.0 -0.4 12.6 -0.3 13.0 -0.7
2026-04-11T22:55:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:55:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:55:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.871640
2026-04-11T22:55:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:55:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:55:36.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:55:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:55:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:55:36.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:54:59', tmtdew=-0.01236, humidity=100.046, cloud=0.0, wind=13.3582, temperature=11.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:55:09.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:55:36.998 [DEBUG] [Thread-178237] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:55:37.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:55:37.089 [DEBUG] [Thread-178240] [transport.py] [_log()] starting thread (client mode): 0xae517a60
2026-04-11T22:55:37.089 [DEBUG] [Thread-178240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:55:37.103 [DEBUG] [Thread-178240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:55:37.103 [INFO] [Thread-178240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] client lang: <none>
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] server lang: <none>
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] kex follows: False
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:55:37.111 [DEBUG] [Thread-178240] [transport.py] [_log()] Compression: none
2026-04-11T22:55:37.112 [DEBUG] [Thread-178240] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:55:37.169 [DEBUG] [Thread-178240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:55:37.169 [DEBUG] [Thread-178240] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:55:37.170 [DEBUG] [Thread-178240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:55:37.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:55:37.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:55:37.224 [DEBUG] [Thread-178240] [transport.py] [_log()] userauth is OK
2026-04-11T22:55:37.225 [DEBUG] [Thread-178240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:55:37.225 [DEBUG] [Thread-178240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:55:37.225 [DEBUG] [Thread-178240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:55:37.225 [DEBUG] [Thread-178240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:55:37.249 [INFO] [Thread-178240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:55:37.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:55:37.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:55:38.066 [DEBUG] [Thread-178240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:55:38.066 [DEBUG] [Thread-178240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:55:38.114 [DEBUG] [Thread-178240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:55:38.115 [DEBUG] [Thread-178240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:55:38.123 [DEBUG] [Thread-178240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:55:38.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:55:38.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:55:38.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:55:38.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:55:38.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:55:38.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:55:38.157 [DEBUG] [Thread-178240] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:55:39.436 [DEBUG] [Thread-178242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:40.274 [DEBUG] [Thread-178243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:46.537 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:46.538 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:55:54.490 [DEBUG] [Thread-178244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:56:08.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:56:08.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:56:09.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 55, 34), -0.03489, 100.158, 0.0, 12.6338, 12.0844, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:56:09.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:55:34
2026-04-11T22:56:09.525 [DEBUG] [Thread-178245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:09.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:56:10.068 [DEBUG] [Thread-178246] [transport.py] [_log()] starting thread (client mode): 0xae5f21d0
2026-04-11T22:56:10.068 [DEBUG] [Thread-178246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:56:10.088 [DEBUG] [Thread-178246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:56:10.088 [INFO] [Thread-178246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:56:10.091 [DEBUG] [Thread-178246] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:56:10.091 [DEBUG] [Thread-178246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] client lang: <none>
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] server lang: <none>
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] kex follows: False
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:56:10.092 [DEBUG] [Thread-178246] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:56:10.093 [DEBUG] [Thread-178246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:56:10.093 [DEBUG] [Thread-178246] [transport.py] [_log()] Compression: none
2026-04-11T22:56:10.093 [DEBUG] [Thread-178246] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:56:10.111 [DEBUG] [Thread-178246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:56:10.112 [DEBUG] [Thread-178246] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:56:10.112 [DEBUG] [Thread-178246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:56:10.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:56:10.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:56:10.115 [DEBUG] [Thread-178246] [transport.py] [_log()] userauth is OK
2026-04-11T22:56:10.115 [DEBUG] [Thread-178246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:56:10.115 [DEBUG] [Thread-178246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:56:10.115 [DEBUG] [Thread-178246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:56:10.115 [DEBUG] [Thread-178246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:56:10.139 [INFO] [Thread-178246] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:56:10.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:56:10.801 [DEBUG] [Thread-178246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:56:10.801 [DEBUG] [Thread-178246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:56:10.802 [DEBUG] [Thread-178246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:56:10.842 [DEBUG] [Thread-178246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:56:10.842 [DEBUG] [Thread-178246] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:56:10.845 [DEBUG] [Thread-178246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:56:10.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:56:10.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:56:10.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:56:10.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:56:10.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:56:10.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:56:10.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:56:10.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:56:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:56:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.871988 -999.00  +11.70  10.03     97  +11.40 1 3 1 3 1     0    0 0.36 -1.20 ----- 10.0 10.0 298.2 12.1 13.1 -0.8 13.0 -0.3 12.6 -0.3 12.9 -0.6
2026-04-11T22:56:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:56:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:56:10.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.871988
2026-04-11T22:56:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:56:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:56:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:56:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:56:10.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:56:10.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:55:34', tmtdew=-0.03489, humidity=100.158, cloud=0.0, wind=12.6338, temperature=12.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:55:39.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:56:10.872 [DEBUG] [Thread-178246] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:56:10.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:56:10.962 [DEBUG] [Thread-178249] [transport.py] [_log()] starting thread (client mode): 0xb0fb7dc0
2026-04-11T22:56:10.962 [DEBUG] [Thread-178249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:56:10.978 [DEBUG] [Thread-178249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:56:10.978 [INFO] [Thread-178249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] client lang: <none>
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] server lang: <none>
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] kex follows: False
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:56:10.986 [DEBUG] [Thread-178249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:56:10.987 [DEBUG] [Thread-178249] [transport.py] [_log()] Compression: none
2026-04-11T22:56:10.987 [DEBUG] [Thread-178249] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:56:11.045 [DEBUG] [Thread-178249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:56:11.046 [DEBUG] [Thread-178249] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:56:11.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:56:11.046 [DEBUG] [Thread-178249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:56:11.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:56:11.101 [DEBUG] [Thread-178249] [transport.py] [_log()] userauth is OK
2026-04-11T22:56:11.101 [DEBUG] [Thread-178249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:56:11.101 [DEBUG] [Thread-178249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:56:11.101 [DEBUG] [Thread-178249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:56:11.101 [DEBUG] [Thread-178249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:56:11.114 [INFO] [Thread-178249] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:56:11.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:56:11.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:56:11.972 [DEBUG] [Thread-178249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:56:11.972 [DEBUG] [Thread-178249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:56:12.020 [DEBUG] [Thread-178249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:56:12.020 [DEBUG] [Thread-178249] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:56:12.030 [DEBUG] [Thread-178249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:56:12.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:56:12.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-04-11T22:56:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:56:12.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:56:12.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:56:12.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:56:12.066 [DEBUG] [Thread-178249] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:56:24.562 [DEBUG] [Thread-178251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:39.611 [DEBUG] [Thread-178252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:40.337 [DEBUG] [Thread-178253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:42.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:56:42.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:56:42.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-04-11T22:56:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 56, 10), -0.017385, 100.079, 0.0, 11.8404, 11.5924, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:56:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:56:10
2026-04-11T22:56:43.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:56:43.908 [DEBUG] [Thread-178254] [transport.py] [_log()] starting thread (client mode): 0xb0fb4100
2026-04-11T22:56:43.909 [DEBUG] [Thread-178254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:56:43.921 [DEBUG] [Thread-178254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:56:43.921 [INFO] [Thread-178254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] client lang: <none>
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] server lang: <none>
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] kex follows: False
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] Compression: none
2026-04-11T22:56:43.924 [DEBUG] [Thread-178254] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:56:43.940 [DEBUG] [Thread-178254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:56:43.940 [DEBUG] [Thread-178254] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:56:43.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:56:43.941 [DEBUG] [Thread-178254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:56:43.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:56:43.943 [DEBUG] [Thread-178254] [transport.py] [_log()] userauth is OK
2026-04-11T22:56:43.943 [DEBUG] [Thread-178254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:56:43.943 [DEBUG] [Thread-178254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:56:43.943 [DEBUG] [Thread-178254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:56:43.944 [DEBUG] [Thread-178254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:56:43.967 [INFO] [Thread-178254] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:56:43.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:56:44.586 [DEBUG] [Thread-178254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:56:44.586 [DEBUG] [Thread-178254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:56:44.587 [DEBUG] [Thread-178254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:56:44.628 [DEBUG] [Thread-178254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:56:44.628 [DEBUG] [Thread-178254] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:56:44.632 [DEBUG] [Thread-178254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:56:44.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:56:44.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:56:44.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:56:44.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:56:44.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:56:44.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:56:44.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:56:44.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:56:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:56:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.872335 -999.00  +11.70  12.35     97  +11.30 1 3 1 3 1     0    0 0.35 -1.45 ----- 12.3 12.3 298.2 13.0 13.2 -0.9 13.0 -0.4 12.7 -0.5 13.0 -0.5
2026-04-11T22:56:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:56:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:56:44.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.872335
2026-04-11T22:56:44.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:56:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:56:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:56:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:56:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:56:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:56:10', tmtdew=-0.017385, humidity=100.079, cloud=0.0, wind=11.8404, temperature=11.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:56:09.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:56:44.661 [DEBUG] [Thread-178254] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:56:44.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:56:44.752 [DEBUG] [Thread-178257] [transport.py] [_log()] starting thread (client mode): 0xb0fb5450
2026-04-11T22:56:44.752 [DEBUG] [Thread-178257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:56:44.768 [DEBUG] [Thread-178257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:56:44.768 [INFO] [Thread-178257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:56:44.776 [DEBUG] [Thread-178257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] client lang: <none>
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] server lang: <none>
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] kex follows: False
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] Compression: none
2026-04-11T22:56:44.777 [DEBUG] [Thread-178257] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:56:44.836 [DEBUG] [Thread-178257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:56:44.837 [DEBUG] [Thread-178257] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:56:44.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:56:44.838 [DEBUG] [Thread-178257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:56:44.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:56:44.896 [DEBUG] [Thread-178257] [transport.py] [_log()] userauth is OK
2026-04-11T22:56:44.896 [DEBUG] [Thread-178257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:56:44.896 [DEBUG] [Thread-178257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:56:44.897 [DEBUG] [Thread-178257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:56:44.897 [DEBUG] [Thread-178257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:56:44.919 [INFO] [Thread-178257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:56:44.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:56:44.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:56:45.751 [DEBUG] [Thread-178257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:56:45.752 [DEBUG] [Thread-178257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:56:45.800 [DEBUG] [Thread-178257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:56:45.800 [DEBUG] [Thread-178257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:56:45.810 [DEBUG] [Thread-178257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:56:45.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:56:45.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-04-11T22:56: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') -> 00000000
2026-04-11T22:56:45.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:56:45.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:56:45.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:56:45.846 [DEBUG] [Thread-178257] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:56:46.741 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:46.743 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:56:54.647 [DEBUG] [Thread-178259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:09.708 [DEBUG] [Thread-178260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:15.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:57:15.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:57:15.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:57:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 56, 45), -0.02975, 100.124, 0.0, 12.8808, 11.9849, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:57:17.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:56:45
2026-04-11T22:57:17.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:57:17.716 [DEBUG] [Thread-178261] [transport.py] [_log()] starting thread (client mode): 0xb0fcd180
2026-04-11T22:57:17.717 [DEBUG] [Thread-178261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:57:17.735 [DEBUG] [Thread-178261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:57:17.735 [INFO] [Thread-178261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] client lang: <none>
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] server lang: <none>
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] kex follows: False
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:57:17.739 [DEBUG] [Thread-178261] [transport.py] [_log()] Compression: none
2026-04-11T22:57:17.740 [DEBUG] [Thread-178261] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:57:17.756 [DEBUG] [Thread-178261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:57:17.757 [DEBUG] [Thread-178261] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:57:17.757 [DEBUG] [Thread-178261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:57:17.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:57:17.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:57:17.759 [DEBUG] [Thread-178261] [transport.py] [_log()] userauth is OK
2026-04-11T22:57:17.759 [DEBUG] [Thread-178261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:57:17.759 [DEBUG] [Thread-178261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:57:17.759 [DEBUG] [Thread-178261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:57:17.759 [DEBUG] [Thread-178261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:57:17.780 [INFO] [Thread-178261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:57:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:57:18.423 [DEBUG] [Thread-178261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:57:18.423 [DEBUG] [Thread-178261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:57:18.423 [DEBUG] [Thread-178261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:57:18.464 [DEBUG] [Thread-178261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:57:18.464 [DEBUG] [Thread-178261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:57:18.468 [DEBUG] [Thread-178261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:57:18.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:57:18.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:57:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:57:18.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:57:18.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:57:18.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:57:18.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:57:18.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:57:18.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:57:18.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.872682 -999.00  +11.70  10.18     97  +11.30 1 3 1 3 1     0    0 0.35 -1.46 ----- 10.2 10.2 298.0 12.8 13.2 -0.9 13.0 -0.3 12.7 -0.3 12.9 -0.5
2026-04-11T22:57:18.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:57:18.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:57:18.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.872682
2026-04-11T22:57:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:57:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:57:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:57:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:57:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:57:18.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:56:45', tmtdew=-0.02975, humidity=100.124, cloud=0.0, wind=12.8808, temperature=11.9849, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:56:39.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:57:18.501 [DEBUG] [Thread-178261] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:57:18.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:57:18.597 [DEBUG] [Thread-178264] [transport.py] [_log()] starting thread (client mode): 0xae516860
2026-04-11T22:57:18.597 [DEBUG] [Thread-178264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:57:18.612 [DEBUG] [Thread-178264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:57:18.612 [INFO] [Thread-178264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:18.620 [DEBUG] [Thread-178264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] client lang: <none>
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] server lang: <none>
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] kex follows: False
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] Compression: none
2026-04-11T22:57:18.621 [DEBUG] [Thread-178264] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:57:18.678 [DEBUG] [Thread-178264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:57:18.679 [DEBUG] [Thread-178264] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:57:18.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:57:18.680 [DEBUG] [Thread-178264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:57:18.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:57:18.734 [DEBUG] [Thread-178264] [transport.py] [_log()] userauth is OK
2026-04-11T22:57:18.734 [DEBUG] [Thread-178264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:57:18.735 [DEBUG] [Thread-178264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:57:18.735 [DEBUG] [Thread-178264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:57:18.735 [DEBUG] [Thread-178264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:57:18.754 [INFO] [Thread-178264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:57:18.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:57:18.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:57:19.597 [DEBUG] [Thread-178264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:57:19.597 [DEBUG] [Thread-178264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:57:19.645 [DEBUG] [Thread-178264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:57:19.645 [DEBUG] [Thread-178264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:57:19.655 [DEBUG] [Thread-178264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:57:19.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:57:19.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-04-11T22:57:19.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-04-11T22:57:19.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:57:19.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:57:19.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:57:19.692 [DEBUG] [Thread-178264] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:57:24.745 [DEBUG] [Thread-178266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:39.795 [DEBUG] [Thread-178267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:40.396 [DEBUG] [Thread-178268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:46.947 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:46.948 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:57:49.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:57:49.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:57:49.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-04-11T22:57:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 57, 21), 0.027525, 100.112, 0.0, 13.8521, 11.6922, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:57:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:57:21
2026-04-11T22:57:51.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:57:51.520 [DEBUG] [Thread-178269] [transport.py] [_log()] starting thread (client mode): 0xae5170d0
2026-04-11T22:57:51.520 [DEBUG] [Thread-178269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:57:51.540 [DEBUG] [Thread-178269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:57:51.541 [INFO] [Thread-178269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:57:51.543 [DEBUG] [Thread-178269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:57:51.543 [DEBUG] [Thread-178269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] client lang: <none>
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] server lang: <none>
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] kex follows: False
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:57:51.544 [DEBUG] [Thread-178269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:57:51.545 [DEBUG] [Thread-178269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:57:51.545 [DEBUG] [Thread-178269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:57:51.545 [DEBUG] [Thread-178269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:57:51.545 [DEBUG] [Thread-178269] [transport.py] [_log()] Compression: none
2026-04-11T22:57:51.545 [DEBUG] [Thread-178269] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:57:51.564 [DEBUG] [Thread-178269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:57:51.564 [DEBUG] [Thread-178269] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:57:51.565 [DEBUG] [Thread-178269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:57:51.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:57:51.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:57:51.575 [DEBUG] [Thread-178269] [transport.py] [_log()] userauth is OK
2026-04-11T22:57:51.575 [DEBUG] [Thread-178269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:57:51.575 [DEBUG] [Thread-178269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:57:51.576 [DEBUG] [Thread-178269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:57:51.576 [DEBUG] [Thread-178269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:57:51.600 [INFO] [Thread-178269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:57:51.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:57:52.161 [DEBUG] [Thread-178269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:57:52.161 [DEBUG] [Thread-178269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:57:52.162 [DEBUG] [Thread-178269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:57:52.202 [DEBUG] [Thread-178269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:57:52.202 [DEBUG] [Thread-178269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:57:52.206 [DEBUG] [Thread-178269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:57:52.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:57:52.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:57:52.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:57:52.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:57:52.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:57:52.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:57:52.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:57:52.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:57:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:57:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.873377 -999.00  +11.70  10.46     97  +11.40 1 3 1 3 1     0    0 0.33 -1.89 ----- 10.5 10.5 300.8 11.1 13.2 -0.9 13.1 -0.2 12.7 -0.3 13.1 -0.6
2026-04-11T22:57:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:57:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:57:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.873377
2026-04-11T22:57:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:57:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:57:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:57:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:57:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:57:52.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:57:21', tmtdew=0.027525, humidity=100.112, cloud=0.0, wind=13.8521, temperature=11.6922, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:57:39.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:57:52.231 [DEBUG] [Thread-178269] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:57:52.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:57:52.326 [DEBUG] [Thread-178272] [transport.py] [_log()] starting thread (client mode): 0xb0f55510
2026-04-11T22:57:52.326 [DEBUG] [Thread-178272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:57:52.343 [DEBUG] [Thread-178272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:57:52.343 [INFO] [Thread-178272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] client lang: <none>
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] server lang: <none>
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] kex follows: False
2026-04-11T22:57:52.351 [DEBUG] [Thread-178272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:57:52.352 [DEBUG] [Thread-178272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:57:52.352 [DEBUG] [Thread-178272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:57:52.352 [DEBUG] [Thread-178272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:57:52.352 [DEBUG] [Thread-178272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:57:52.352 [DEBUG] [Thread-178272] [transport.py] [_log()] Compression: none
2026-04-11T22:57:52.352 [DEBUG] [Thread-178272] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:57:52.411 [DEBUG] [Thread-178272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:57:52.411 [DEBUG] [Thread-178272] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:57:52.412 [DEBUG] [Thread-178272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:57:52.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:57:52.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:57:52.467 [DEBUG] [Thread-178272] [transport.py] [_log()] userauth is OK
2026-04-11T22:57:52.467 [DEBUG] [Thread-178272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:57:52.467 [DEBUG] [Thread-178272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:57:52.467 [DEBUG] [Thread-178272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:57:52.467 [DEBUG] [Thread-178272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:57:52.486 [INFO] [Thread-178272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:57:52.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:57:52.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:57:53.342 [DEBUG] [Thread-178272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:57:53.343 [DEBUG] [Thread-178272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:57:53.390 [DEBUG] [Thread-178272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:57:53.390 [DEBUG] [Thread-178272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:57:53.399 [DEBUG] [Thread-178272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:57:53.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:57:53.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-04-11T22:57:53.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T22:57:53.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:57:53.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:57:53.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:57:53.435 [DEBUG] [Thread-178272] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:57:54.830 [DEBUG] [Thread-178274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:09.881 [DEBUG] [Thread-178275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:23.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:58:23.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:58:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T22:58:24.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 57, 56), -0.02245, 100.112, 0.0, 10.9408, 11.6256, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:58:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:57:56
2026-04-11T22:58:24.922 [DEBUG] [Thread-178276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:25.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:58:25.255 [DEBUG] [Thread-178277] [transport.py] [_log()] starting thread (client mode): 0xb0fce5f0
2026-04-11T22:58:25.255 [DEBUG] [Thread-178277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:58:25.275 [DEBUG] [Thread-178277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:58:25.275 [INFO] [Thread-178277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:25.278 [DEBUG] [Thread-178277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] client lang: <none>
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] server lang: <none>
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] kex follows: False
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] Compression: none
2026-04-11T22:58:25.279 [DEBUG] [Thread-178277] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:58:25.298 [DEBUG] [Thread-178277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:58:25.299 [DEBUG] [Thread-178277] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:58:25.299 [DEBUG] [Thread-178277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:58:25.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:58:25.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:58:25.301 [DEBUG] [Thread-178277] [transport.py] [_log()] userauth is OK
2026-04-11T22:58:25.302 [DEBUG] [Thread-178277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:58:25.302 [DEBUG] [Thread-178277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:58:25.302 [DEBUG] [Thread-178277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:58:25.302 [DEBUG] [Thread-178277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:58:25.326 [INFO] [Thread-178277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:58:25.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:58:25.977 [DEBUG] [Thread-178277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:58:25.978 [DEBUG] [Thread-178277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:58:25.978 [DEBUG] [Thread-178277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:58:26.019 [DEBUG] [Thread-178277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:58:26.019 [DEBUG] [Thread-178277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:58:26.022 [DEBUG] [Thread-178277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:58:26.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:58:26.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:58:26.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:58:26.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:58:26.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:58:26.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:58:26.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:58:26.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:58:26.053 [DEBUG] [Thread-178277] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:58:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:58:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.873724 -999.00  +11.80   9.90     97  +11.40 1 3 1 3 1     0    0 0.32 -2.05 ----- 9.9 9.9 294.4 11.0 13.2 -0.9 13.1 -0.3 12.8 -0.5 13.1 -0.4
2026-04-11T22:58:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:58:26.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:58:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.873724
2026-04-11T22:58:26.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:58:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:58:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:58:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:58:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:58:26.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:57:56', tmtdew=-0.02245, humidity=100.112, cloud=0.0, wind=10.9408, temperature=11.6256, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:58:09.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:58:26.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:58:26.152 [DEBUG] [Thread-178280] [transport.py] [_log()] starting thread (client mode): 0xae50b2e0
2026-04-11T22:58:26.152 [DEBUG] [Thread-178280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:58:26.167 [DEBUG] [Thread-178280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:58:26.167 [INFO] [Thread-178280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:58:26.175 [DEBUG] [Thread-178280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:58:26.175 [DEBUG] [Thread-178280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] client lang: <none>
2026-04-11T22:58:26.176 [DEBUG] [Thread-178280] [transport.py] [_log()] server lang: <none>
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] kex follows: False
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] Compression: none
2026-04-11T22:58:26.177 [DEBUG] [Thread-178280] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:58:26.237 [DEBUG] [Thread-178280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:58:26.238 [DEBUG] [Thread-178280] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:58:26.239 [DEBUG] [Thread-178280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:58:26.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:58:26.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:58:26.295 [DEBUG] [Thread-178280] [transport.py] [_log()] userauth is OK
2026-04-11T22:58:26.296 [DEBUG] [Thread-178280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:58:26.296 [DEBUG] [Thread-178280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:58:26.296 [DEBUG] [Thread-178280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:58:26.296 [DEBUG] [Thread-178280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:58:26.314 [INFO] [Thread-178280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:58:26.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:58:26.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:58:27.157 [DEBUG] [Thread-178280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:58:27.158 [DEBUG] [Thread-178280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:58:27.206 [DEBUG] [Thread-178280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:58:27.206 [DEBUG] [Thread-178280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:58:27.216 [DEBUG] [Thread-178280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:58:27.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:58:27.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-04-11T22:58:27.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-04-11T22:58:27.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:58:27.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:58:27.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:58:27.253 [DEBUG] [Thread-178280] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:58:39.957 [DEBUG] [Thread-178282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:40.453 [DEBUG] [Thread-178283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:47.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:47.149 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:55.008 [DEBUG] [Thread-178284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:58:57.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:58:57.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:58:57.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-04-11T22:58:58.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 58, 31), -0.014875, 100.062, 0.0, 10.4821, 11.5924, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:58:58.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:58:31
2026-04-11T22:58:58.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:58:59.064 [DEBUG] [Thread-178285] [transport.py] [_log()] starting thread (client mode): 0xa7911060
2026-04-11T22:58:59.064 [DEBUG] [Thread-178285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:58:59.085 [DEBUG] [Thread-178285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:58:59.085 [INFO] [Thread-178285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] client lang: <none>
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] server lang: <none>
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] kex follows: False
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:58:59.088 [DEBUG] [Thread-178285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:58:59.089 [DEBUG] [Thread-178285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:58:59.089 [DEBUG] [Thread-178285] [transport.py] [_log()] Compression: none
2026-04-11T22:58:59.089 [DEBUG] [Thread-178285] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:58:59.104 [DEBUG] [Thread-178285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:58:59.104 [DEBUG] [Thread-178285] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:58:59.104 [DEBUG] [Thread-178285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:58:59.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:58:59.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:58:59.105 [DEBUG] [Thread-178285] [transport.py] [_log()] userauth is OK
2026-04-11T22:58:59.105 [DEBUG] [Thread-178285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:58:59.105 [DEBUG] [Thread-178285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:58:59.105 [DEBUG] [Thread-178285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:58:59.105 [DEBUG] [Thread-178285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:58:59.133 [INFO] [Thread-178285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:58:59.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:58:59.775 [DEBUG] [Thread-178285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:58:59.775 [DEBUG] [Thread-178285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:58:59.775 [DEBUG] [Thread-178285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:58:59.816 [DEBUG] [Thread-178285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:58:59.816 [DEBUG] [Thread-178285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:58:59.818 [DEBUG] [Thread-178285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:58:59.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:58:59.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:58:59.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:58:59.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:58:59.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:58:59.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:58:59.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:58:59.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:58:59.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:58:59.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.874071 -999.00  +11.80   7.06     97  +11.40 1 3 1 3 1     0    0 0.34 -1.93 ----- 7.1 7.1 285.2 11.1 13.2 -0.9 13.1 -0.4 12.7 -0.3 13.1 -0.5
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.874071
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:58:59.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:58:31', tmtdew=-0.014875, humidity=100.062, cloud=0.0, wind=10.4821, temperature=11.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:58:39.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:58:59.842 [DEBUG] [Thread-178285] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:58:59.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:58:59.921 [DEBUG] [Thread-178288] [transport.py] [_log()] starting thread (client mode): 0xa7910e20
2026-04-11T22:58:59.921 [DEBUG] [Thread-178288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:58:59.936 [DEBUG] [Thread-178288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:58:59.936 [INFO] [Thread-178288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:58:59.943 [DEBUG] [Thread-178288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:58:59.944 [DEBUG] [Thread-178288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] client lang: <none>
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] server lang: <none>
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] kex follows: False
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] Compression: none
2026-04-11T22:58:59.945 [DEBUG] [Thread-178288] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:59:00.003 [DEBUG] [Thread-178288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:59:00.003 [DEBUG] [Thread-178288] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:59:00.004 [DEBUG] [Thread-178288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:59:00.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:59:00.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:59:00.059 [DEBUG] [Thread-178288] [transport.py] [_log()] userauth is OK
2026-04-11T22:59:00.059 [DEBUG] [Thread-178288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:59:00.059 [DEBUG] [Thread-178288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:59:00.059 [DEBUG] [Thread-178288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:59:00.059 [DEBUG] [Thread-178288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:59:00.083 [INFO] [Thread-178288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:59: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-04-11T22:59:00.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:59:00.924 [DEBUG] [Thread-178288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:59:00.924 [DEBUG] [Thread-178288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:59:00.973 [DEBUG] [Thread-178288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:59:00.973 [DEBUG] [Thread-178288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:59:00.983 [DEBUG] [Thread-178288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:59:00.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:59:00.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-04-11T22:59:01.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-04-11T22:59:01.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:59:01.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:59:01.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:59:01.022 [DEBUG] [Thread-178288] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:59:10.045 [DEBUG] [Thread-178290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:59:25.104 [DEBUG] [Thread-178291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:59:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T22:59:31.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T22:59:31.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-04-11T22:59:32.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 59, 7), -0.01236, 100.046, 0.0, 10.3586, 11.5924, 2, 2, 0, 2, 0, 0),)
2026-04-11T22:59:32.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:59:07
2026-04-11T22:59:32.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T22:59:32.800 [DEBUG] [Thread-178292] [transport.py] [_log()] starting thread (client mode): 0xa7911930
2026-04-11T22:59:32.801 [DEBUG] [Thread-178292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:59:32.817 [DEBUG] [Thread-178292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T22:59:32.817 [INFO] [Thread-178292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T22:59:32.820 [DEBUG] [Thread-178292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:59:32.820 [DEBUG] [Thread-178292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T22:59:32.820 [DEBUG] [Thread-178292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:59:32.820 [DEBUG] [Thread-178292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:59:32.820 [DEBUG] [Thread-178292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] client lang: <none>
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] server lang: <none>
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] kex follows: False
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] Compression: none
2026-04-11T22:59:32.821 [DEBUG] [Thread-178292] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:59:32.838 [DEBUG] [Thread-178292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:59:32.839 [DEBUG] [Thread-178292] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:59:32.839 [DEBUG] [Thread-178292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T22:59:32.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T22:59:32.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:59:32.841 [DEBUG] [Thread-178292] [transport.py] [_log()] userauth is OK
2026-04-11T22:59:32.841 [DEBUG] [Thread-178292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:59:32.841 [DEBUG] [Thread-178292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:59:32.841 [DEBUG] [Thread-178292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T22:59:32.841 [DEBUG] [Thread-178292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:59:32.865 [INFO] [Thread-178292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:59:32.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:59:33.500 [DEBUG] [Thread-178292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:59:33.500 [DEBUG] [Thread-178292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:59:33.500 [DEBUG] [Thread-178292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T22:59:33.541 [DEBUG] [Thread-178292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:59:33.541 [DEBUG] [Thread-178292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:59:33.544 [DEBUG] [Thread-178292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:59:33.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:59:33.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T22:59:33.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T22:59:33.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T22:59:33.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:59:33.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T22:59:33.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:59:33.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:59:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T22:59:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.874419 -999.00  +11.80   9.63     97  +11.40 1 3 1 3 1     0    0 0.34 -1.64 ----- 9.6 9.6 298.6 10.9 13.2 -0.9 13.1 -0.4 12.8 -0.4 13.1 -0.6
2026-04-11T22:59:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T22:59:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T22:59:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.874419
2026-04-11T22:59:33.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T22:59:33.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T22:59:33.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T22:59:33.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T22:59:33.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T22:59:33.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:59:07', tmtdew=-0.01236, humidity=100.046, cloud=0.0, wind=10.3586, temperature=11.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:59:09.802', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T22:59:33.568 [DEBUG] [Thread-178292] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:59:33.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T22:59:33.666 [DEBUG] [Thread-178295] [transport.py] [_log()] starting thread (client mode): 0xae5173d0
2026-04-11T22:59:33.666 [DEBUG] [Thread-178295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T22:59:33.680 [DEBUG] [Thread-178295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T22:59:33.680 [INFO] [Thread-178295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T22:59:33.688 [DEBUG] [Thread-178295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T22:59:33.688 [DEBUG] [Thread-178295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T22:59:33.688 [DEBUG] [Thread-178295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T22:59:33.688 [DEBUG] [Thread-178295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:59:33.688 [DEBUG] [Thread-178295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] client lang: <none>
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] server lang: <none>
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] kex follows: False
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T22:59:33.689 [DEBUG] [Thread-178295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T22:59:33.690 [DEBUG] [Thread-178295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T22:59:33.690 [DEBUG] [Thread-178295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T22:59:33.690 [DEBUG] [Thread-178295] [transport.py] [_log()] Compression: none
2026-04-11T22:59:33.690 [DEBUG] [Thread-178295] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T22:59:33.747 [DEBUG] [Thread-178295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T22:59:33.748 [DEBUG] [Thread-178295] [transport.py] [_log()] Switch to new keys ...
2026-04-11T22:59:33.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T22:59:33.749 [DEBUG] [Thread-178295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T22:59:33.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T22:59:33.803 [DEBUG] [Thread-178295] [transport.py] [_log()] userauth is OK
2026-04-11T22:59:33.804 [DEBUG] [Thread-178295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T22:59:33.804 [DEBUG] [Thread-178295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T22:59:33.804 [DEBUG] [Thread-178295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T22:59:33.804 [DEBUG] [Thread-178295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T22:59:33.822 [INFO] [Thread-178295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T22:59:33.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T22:59:33.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T22:59:34.637 [DEBUG] [Thread-178295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T22:59:34.638 [DEBUG] [Thread-178295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T22:59:34.685 [DEBUG] [Thread-178295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T22:59:34.686 [DEBUG] [Thread-178295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T22:59:34.695 [DEBUG] [Thread-178295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T22:59:34.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T22:59:34.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T22:59:34.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-04-11T22:59:34.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T22:59:34.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T22:59:34.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T22:59:34.732 [DEBUG] [Thread-178295] [transport.py] [_log()] EOF in transport thread
2026-04-11T22:59:40.139 [DEBUG] [Thread-178297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:59:40.510 [DEBUG] [Thread-178298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:59:47.354 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:59:47.355 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T22:59:55.194 [DEBUG] [Thread-178299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:04.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:00:04.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:00:04.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-04-11T23:00:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 22, 59, 42), -0.04495, 100.224, 0.0, 9.0, 12.0844, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:00:06.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 22:59:42
2026-04-11T23:00:06.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:00:06.555 [DEBUG] [Thread-178300] [transport.py] [_log()] starting thread (client mode): 0xa7910c40
2026-04-11T23:00:06.555 [DEBUG] [Thread-178300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:00:06.575 [DEBUG] [Thread-178300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:00:06.576 [INFO] [Thread-178300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] client lang: <none>
2026-04-11T23:00:06.578 [DEBUG] [Thread-178300] [transport.py] [_log()] server lang: <none>
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] kex follows: False
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] Compression: none
2026-04-11T23:00:06.579 [DEBUG] [Thread-178300] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:00:06.596 [DEBUG] [Thread-178300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:00:06.596 [DEBUG] [Thread-178300] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:00:06.597 [DEBUG] [Thread-178300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:00:06.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:00:06.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:00:06.598 [DEBUG] [Thread-178300] [transport.py] [_log()] userauth is OK
2026-04-11T23:00:06.599 [DEBUG] [Thread-178300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:00:06.599 [DEBUG] [Thread-178300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:00:06.599 [DEBUG] [Thread-178300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:00:06.599 [DEBUG] [Thread-178300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:00:06.620 [INFO] [Thread-178300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:00:06.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:00:07.625 [DEBUG] [Thread-178300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:00:07.625 [DEBUG] [Thread-178300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:00:07.626 [DEBUG] [Thread-178300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:00:07.666 [DEBUG] [Thread-178300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:00:07.666 [DEBUG] [Thread-178300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:00:07.670 [DEBUG] [Thread-178300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:00:07.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:00:07.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:00:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:00:07.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:00:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:00:07.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:00:07.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.874766 -999.00  +11.70   9.35     97  +11.30 1 3 1 3 1     0    0 0.35 -1.56 ----- 9.3 9.3 287.2 11.2 13.2 -0.9 13.1 -0.3 12.8 -0.5 13.1 -0.6
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.874766
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:00:07.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:00:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:00:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:00:07.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T22:59:42', tmtdew=-0.04495, humidity=100.224, cloud=0.0, wind=9.0, temperature=12.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T20:59:39.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:00:07.691 [DEBUG] [Thread-178300] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:00:07.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:00:07.775 [DEBUG] [Thread-178303] [transport.py] [_log()] starting thread (client mode): 0xa79120b0
2026-04-11T23:00:07.775 [DEBUG] [Thread-178303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:00:07.789 [DEBUG] [Thread-178303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:00:07.789 [INFO] [Thread-178303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] client lang: <none>
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] server lang: <none>
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] kex follows: False
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:00:07.797 [DEBUG] [Thread-178303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:00:07.798 [DEBUG] [Thread-178303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:00:07.798 [DEBUG] [Thread-178303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:00:07.798 [DEBUG] [Thread-178303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:00:07.798 [DEBUG] [Thread-178303] [transport.py] [_log()] Compression: none
2026-04-11T23:00:07.798 [DEBUG] [Thread-178303] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:00:07.856 [DEBUG] [Thread-178303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:00:07.857 [DEBUG] [Thread-178303] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:00:07.857 [DEBUG] [Thread-178303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:00:07.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:00:07.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:00:07.912 [DEBUG] [Thread-178303] [transport.py] [_log()] userauth is OK
2026-04-11T23:00:07.912 [DEBUG] [Thread-178303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:00:07.912 [DEBUG] [Thread-178303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:00:07.912 [DEBUG] [Thread-178303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:00:07.912 [DEBUG] [Thread-178303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:00:07.934 [INFO] [Thread-178303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:00:07.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:00:07.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:00:08.749 [DEBUG] [Thread-178303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:00:08.749 [DEBUG] [Thread-178303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:00:08.797 [DEBUG] [Thread-178303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:00:08.797 [DEBUG] [Thread-178303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:00:08.806 [DEBUG] [Thread-178303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:00:08.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:00:08.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-04-11T23:00:08.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-04-11T23:00:08.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:00:08.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:00:08.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:00:08.842 [DEBUG] [Thread-178303] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:00:10.230 [DEBUG] [Thread-178305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:25.283 [DEBUG] [Thread-178306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:38.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:00:38.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:00:38.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-04-11T23:00:40.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 0, 18), 0.03002, 100.095, 0.0, 8.02944, 11.7088, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:00:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:00:18
2026-04-11T23:00:40.321 [DEBUG] [Thread-178307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:00:40.563 [DEBUG] [Thread-178308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:40.678 [DEBUG] [Thread-178309] [transport.py] [_log()] starting thread (client mode): 0xae50b2e0
2026-04-11T23:00:40.678 [DEBUG] [Thread-178309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:00:40.698 [DEBUG] [Thread-178309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:00:40.698 [INFO] [Thread-178309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] client lang: <none>
2026-04-11T23:00:40.701 [DEBUG] [Thread-178309] [transport.py] [_log()] server lang: <none>
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] kex follows: False
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] Compression: none
2026-04-11T23:00:40.702 [DEBUG] [Thread-178309] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:00:40.717 [DEBUG] [Thread-178309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:00:40.717 [DEBUG] [Thread-178309] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:00:40.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:00:40.718 [DEBUG] [Thread-178309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:00:40.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:00:40.719 [DEBUG] [Thread-178309] [transport.py] [_log()] userauth is OK
2026-04-11T23:00:40.720 [DEBUG] [Thread-178309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:00:40.720 [DEBUG] [Thread-178309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:00:40.720 [DEBUG] [Thread-178309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:00:40.720 [DEBUG] [Thread-178309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:00:40.739 [INFO] [Thread-178309] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:00:40.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:00:41.386 [DEBUG] [Thread-178309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:00:41.386 [DEBUG] [Thread-178309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:00:41.387 [DEBUG] [Thread-178309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:00:41.427 [DEBUG] [Thread-178309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:00:41.427 [DEBUG] [Thread-178309] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:00:41.430 [DEBUG] [Thread-178309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:00:41.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:00:41.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:00:41.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:00:41.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:00:41.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:00:41.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:00:41.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:00:41.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:00:41.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:00:41.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.875113 -999.00  +11.70   7.37     97  +11.30 1 3 1 3 1     0    0 0.35 -1.23 ----- 7.4 7.4 299.2 10.9 13.2 -0.9 13.2 -0.3 12.8 -0.4 13.1 -0.5
2026-04-11T23:00:41.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:00:41.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:00:41.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.875113
2026-04-11T23:00:41.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:00:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:00:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:00:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:00:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:00:41.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:00:18', tmtdew=0.03002, humidity=100.095, cloud=0.0, wind=8.02944, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:00:09.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:00:41.460 [DEBUG] [Thread-178309] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:00:41.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:00:41.550 [DEBUG] [Thread-178312] [transport.py] [_log()] starting thread (client mode): 0xa7911810
2026-04-11T23:00:41.550 [DEBUG] [Thread-178312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:00:41.565 [DEBUG] [Thread-178312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:00:41.565 [INFO] [Thread-178312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:00:41.573 [DEBUG] [Thread-178312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:00:41.574 [DEBUG] [Thread-178312] [transport.py] [_log()] client lang: <none>
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] server lang: <none>
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] kex follows: False
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:00:41.575 [DEBUG] [Thread-178312] [transport.py] [_log()] Compression: none
2026-04-11T23:00:41.576 [DEBUG] [Thread-178312] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:00:41.633 [DEBUG] [Thread-178312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:00:41.633 [DEBUG] [Thread-178312] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:00:41.634 [DEBUG] [Thread-178312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:00:41.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:00:41.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:00:41.688 [DEBUG] [Thread-178312] [transport.py] [_log()] userauth is OK
2026-04-11T23:00:41.689 [DEBUG] [Thread-178312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:00:41.689 [DEBUG] [Thread-178312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:00:41.689 [DEBUG] [Thread-178312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:00:41.689 [DEBUG] [Thread-178312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:00:41.708 [INFO] [Thread-178312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:00:41.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:00:41.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:00:42.552 [DEBUG] [Thread-178312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:00:42.553 [DEBUG] [Thread-178312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:00:42.600 [DEBUG] [Thread-178312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:00:42.600 [DEBUG] [Thread-178312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:00:42.611 [DEBUG] [Thread-178312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:00:42.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:00:42.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-04-11T23:00:42.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-04-11T23:00:42.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:00:42.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:00:42.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:00:42.647 [DEBUG] [Thread-178312] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:00:47.557 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:47.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:00:55.354 [DEBUG] [Thread-178314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:10.406 [DEBUG] [Thread-178315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:12.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:01:12.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:01:12.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-04-11T23:01:13.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 0, 53), -0.04495, 100.224, 0.0, 7.4124, 12.0844, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:01:13.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:00:53
2026-04-11T23:01:14.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:01:14.471 [DEBUG] [Thread-178316] [transport.py] [_log()] starting thread (client mode): 0xb0fb5cc0
2026-04-11T23:01:14.471 [DEBUG] [Thread-178316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:01:14.492 [DEBUG] [Thread-178316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:01:14.492 [INFO] [Thread-178316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:01:14.495 [DEBUG] [Thread-178316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] client lang: <none>
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] server lang: <none>
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] kex follows: False
2026-04-11T23:01:14.496 [DEBUG] [Thread-178316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:01:14.497 [DEBUG] [Thread-178316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:01:14.497 [DEBUG] [Thread-178316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:01:14.497 [DEBUG] [Thread-178316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:01:14.497 [DEBUG] [Thread-178316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:01:14.497 [DEBUG] [Thread-178316] [transport.py] [_log()] Compression: none
2026-04-11T23:01:14.497 [DEBUG] [Thread-178316] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:01:14.515 [DEBUG] [Thread-178316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:01:14.516 [DEBUG] [Thread-178316] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:01:14.516 [DEBUG] [Thread-178316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:01:14.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:01:14.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:01:14.518 [DEBUG] [Thread-178316] [transport.py] [_log()] userauth is OK
2026-04-11T23:01:14.518 [DEBUG] [Thread-178316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:01:14.518 [DEBUG] [Thread-178316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:01:14.518 [DEBUG] [Thread-178316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:01:14.519 [DEBUG] [Thread-178316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:01:14.543 [INFO] [Thread-178316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:01:14.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:01:15.176 [DEBUG] [Thread-178316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:01:15.176 [DEBUG] [Thread-178316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:01:15.176 [DEBUG] [Thread-178316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:01:15.217 [DEBUG] [Thread-178316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:01:15.217 [DEBUG] [Thread-178316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:01:15.220 [DEBUG] [Thread-178316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:01:15.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:01:15.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:01:15.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:01:15.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:01:15.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:01:15.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:01:15.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:01:15.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:01:15.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:01:15.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.875460 -999.00  +11.70  10.58     97  +11.40 1 3 1 3 1     0    0 0.35 -1.31 ----- 10.6 10.6 293.8 11.7 13.2 -0.8 13.2 -0.3 12.8 -0.3 13.1 -0.6
2026-04-11T23:01:15.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:01:15.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:01:15.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.875460
2026-04-11T23:01:15.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:01:15.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:01:15.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:01:15.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:01:15.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:01:15.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:00:53', tmtdew=-0.04495, humidity=100.224, cloud=0.0, wind=7.4124, temperature=12.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:00:39.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:01:15.248 [DEBUG] [Thread-178316] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:01:15.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:01:15.342 [DEBUG] [Thread-178319] [transport.py] [_log()] starting thread (client mode): 0xb0fb75e0
2026-04-11T23:01:15.342 [DEBUG] [Thread-178319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:01:15.357 [DEBUG] [Thread-178319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:01:15.357 [INFO] [Thread-178319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:01:15.364 [DEBUG] [Thread-178319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] client lang: <none>
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] server lang: <none>
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] kex follows: False
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] Compression: none
2026-04-11T23:01:15.365 [DEBUG] [Thread-178319] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:01:15.428 [DEBUG] [Thread-178319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:01:15.428 [DEBUG] [Thread-178319] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:01:15.429 [DEBUG] [Thread-178319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:01:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:01:15.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:01:15.492 [DEBUG] [Thread-178319] [transport.py] [_log()] userauth is OK
2026-04-11T23:01:15.493 [DEBUG] [Thread-178319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:01:15.493 [DEBUG] [Thread-178319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:01:15.493 [DEBUG] [Thread-178319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:01:15.493 [DEBUG] [Thread-178319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:01:15.518 [INFO] [Thread-178319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:01:15.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:01:15.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:01:16.329 [DEBUG] [Thread-178319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:01:16.330 [DEBUG] [Thread-178319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:01:16.378 [DEBUG] [Thread-178319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:01:16.378 [DEBUG] [Thread-178319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:01:16.387 [DEBUG] [Thread-178319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:01:16.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:01:16.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-04-11T23:01:16.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-04-11T23:01:16.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:01:16.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:01:16.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:01:16.424 [DEBUG] [Thread-178319] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:01:25.444 [DEBUG] [Thread-178321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:40.495 [DEBUG] [Thread-178322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:40.621 [DEBUG] [Thread-178323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:46.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:01:46.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:01: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-04-11T23:01:47.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 1, 28), -0.02253, 100.112, 0.0, 11.3641, 11.7419, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:01:47.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:01:28
2026-04-11T23:01:47.763 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:47.763 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:01:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:01:48.236 [DEBUG] [Thread-178324] [transport.py] [_log()] starting thread (client mode): 0xae5168c0
2026-04-11T23:01:48.236 [DEBUG] [Thread-178324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:01:48.255 [DEBUG] [Thread-178324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:01:48.255 [INFO] [Thread-178324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] client lang: <none>
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] server lang: <none>
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] kex follows: False
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:01:48.258 [DEBUG] [Thread-178324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:01:48.259 [DEBUG] [Thread-178324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:01:48.259 [DEBUG] [Thread-178324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:01:48.259 [DEBUG] [Thread-178324] [transport.py] [_log()] Compression: none
2026-04-11T23:01:48.259 [DEBUG] [Thread-178324] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:01:48.277 [DEBUG] [Thread-178324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:01:48.278 [DEBUG] [Thread-178324] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:01:48.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:01:48.279 [DEBUG] [Thread-178324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:01:48.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:01:48.282 [DEBUG] [Thread-178324] [transport.py] [_log()] userauth is OK
2026-04-11T23:01:48.282 [DEBUG] [Thread-178324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:01:48.282 [DEBUG] [Thread-178324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:01:48.282 [DEBUG] [Thread-178324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:01:48.282 [DEBUG] [Thread-178324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:01:48.308 [INFO] [Thread-178324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:01:48.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:01:48.962 [DEBUG] [Thread-178324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:01:48.962 [DEBUG] [Thread-178324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:01:48.963 [DEBUG] [Thread-178324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:01:49.003 [DEBUG] [Thread-178324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:01:49.003 [DEBUG] [Thread-178324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:01:49.007 [DEBUG] [Thread-178324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:01:49.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:01:49.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:01:49.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:01:49.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:01:49.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:01:49.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:01:49.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:01:49.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:01:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:01:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.875807 -999.00  +11.80   7.31     97  +11.40 1 3 1 3 1     0    0 0.36 -1.15 ----- 7.3 7.3 302.4 10.1 13.3 -0.8 13.1 -0.2 12.8 -0.5 13.1 -0.5
2026-04-11T23:01:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:01:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:01:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.875807
2026-04-11T23:01:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:01:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:01:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:01:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:01:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:01:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:01:28', tmtdew=-0.02253, humidity=100.112, cloud=0.0, wind=11.3641, temperature=11.7419, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:01:09.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:01:49.035 [DEBUG] [Thread-178324] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:01:49.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:01:49.126 [DEBUG] [Thread-178327] [transport.py] [_log()] starting thread (client mode): 0xae517580
2026-04-11T23:01:49.126 [DEBUG] [Thread-178327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:01:49.142 [DEBUG] [Thread-178327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:01:49.142 [INFO] [Thread-178327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:01:49.149 [DEBUG] [Thread-178327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:01:49.149 [DEBUG] [Thread-178327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:01:49.149 [DEBUG] [Thread-178327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:01:49.149 [DEBUG] [Thread-178327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] client lang: <none>
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] server lang: <none>
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] kex follows: False
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:01:49.150 [DEBUG] [Thread-178327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:01:49.151 [DEBUG] [Thread-178327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:01:49.151 [DEBUG] [Thread-178327] [transport.py] [_log()] Compression: none
2026-04-11T23:01:49.151 [DEBUG] [Thread-178327] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:01:49.211 [DEBUG] [Thread-178327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:01:49.211 [DEBUG] [Thread-178327] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:01:49.212 [DEBUG] [Thread-178327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:01:49.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:01:49.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:01:49.269 [DEBUG] [Thread-178327] [transport.py] [_log()] userauth is OK
2026-04-11T23:01:49.270 [DEBUG] [Thread-178327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:01:49.270 [DEBUG] [Thread-178327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:01:49.270 [DEBUG] [Thread-178327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:01:49.270 [DEBUG] [Thread-178327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:01:49.289 [INFO] [Thread-178327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:01:49.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:01:49.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:01:50.119 [DEBUG] [Thread-178327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:01:50.119 [DEBUG] [Thread-178327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:01:50.167 [DEBUG] [Thread-178327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:01:50.167 [DEBUG] [Thread-178327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:01:50.175 [DEBUG] [Thread-178327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:01:50.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:01:50.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:01:50.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-04-11T23:01:50.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:01:50.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:01:50.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:01:50.208 [DEBUG] [Thread-178327] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:01:55.532 [DEBUG] [Thread-178329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:10.585 [DEBUG] [Thread-178330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:02:20.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:02:20.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-04-11T23:02:21.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 2, 4), -0.01243, 100.046, 0.0, 11.6111, 11.7088, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:02:21.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:02:04
2026-04-11T23:02:21.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:02:21.976 [DEBUG] [Thread-178331] [transport.py] [_log()] starting thread (client mode): 0xa7955a50
2026-04-11T23:02:21.976 [DEBUG] [Thread-178331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:02:21.987 [DEBUG] [Thread-178331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:02:21.988 [INFO] [Thread-178331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] client lang: <none>
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] server lang: <none>
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] kex follows: False
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] Compression: none
2026-04-11T23:02:21.989 [DEBUG] [Thread-178331] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:02:22.000 [DEBUG] [Thread-178331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:02:22.000 [DEBUG] [Thread-178331] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:02:22.001 [DEBUG] [Thread-178331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:02:22.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:02:22.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:02:22.003 [DEBUG] [Thread-178331] [transport.py] [_log()] userauth is OK
2026-04-11T23:02:22.003 [DEBUG] [Thread-178331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:02:22.003 [DEBUG] [Thread-178331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:02:22.003 [DEBUG] [Thread-178331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:02:22.003 [DEBUG] [Thread-178331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:02:22.026 [INFO] [Thread-178331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:02:22.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:02:22.673 [DEBUG] [Thread-178331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:02:22.673 [DEBUG] [Thread-178331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:02:22.673 [DEBUG] [Thread-178331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:02:22.714 [DEBUG] [Thread-178331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:02:22.714 [DEBUG] [Thread-178331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:02:22.718 [DEBUG] [Thread-178331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:02:22.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:02:22.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:02:22.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:02:22.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:02:22.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:02:22.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:02:22.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:02:22.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:02:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:02:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.876155 -999.00  +11.80   8.47     97  +11.40 1 3 1 3 1     0    0 0.37 -1.04 ----- 8.5 8.5 291.4 10.0 13.3 -0.8 13.2 -0.3 12.9 -0.3 13.2 -0.5
2026-04-11T23:02:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:02:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:02:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.876155
2026-04-11T23:02:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:02:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:02:22.749 [DEBUG] [Thread-178331] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:02:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:02:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:02:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:02:22.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:02:04', tmtdew=-0.01243, humidity=100.046, cloud=0.0, wind=11.6111, temperature=11.7088, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:01:39.792', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:02:22.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:02:22.842 [DEBUG] [Thread-178334] [transport.py] [_log()] starting thread (client mode): 0xa7956e00
2026-04-11T23:02:22.842 [DEBUG] [Thread-178334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:02:22.857 [DEBUG] [Thread-178334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:02:22.857 [INFO] [Thread-178334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] client lang: <none>
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] server lang: <none>
2026-04-11T23:02:22.864 [DEBUG] [Thread-178334] [transport.py] [_log()] kex follows: False
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] Compression: none
2026-04-11T23:02:22.865 [DEBUG] [Thread-178334] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:02:22.921 [DEBUG] [Thread-178334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:02:22.922 [DEBUG] [Thread-178334] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:02:22.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:02:22.922 [DEBUG] [Thread-178334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:02:22.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:02:22.978 [DEBUG] [Thread-178334] [transport.py] [_log()] userauth is OK
2026-04-11T23:02:22.978 [DEBUG] [Thread-178334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:02:22.978 [DEBUG] [Thread-178334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:02:22.978 [DEBUG] [Thread-178334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:02:22.978 [DEBUG] [Thread-178334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:02:22.997 [INFO] [Thread-178334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:02:22.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:02:22.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:02:23.803 [DEBUG] [Thread-178334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:02:23.804 [DEBUG] [Thread-178334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:02:23.852 [DEBUG] [Thread-178334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:02:23.852 [DEBUG] [Thread-178334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:02:23.862 [DEBUG] [Thread-178334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:02:23.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:02: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-04-11T23:02: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-04-11T23:02:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:02:23.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:02:23.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:02:23.898 [DEBUG] [Thread-178334] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:02:25.624 [DEBUG] [Thread-178336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:40.666 [DEBUG] [Thread-178337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:40.688 [DEBUG] [Thread-178338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:47.964 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:47.965 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:53.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:02:53.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:02:53.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-04-11T23:02:55.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 2, 39), -0.02994, 100.124, 0.0, 10.9757, 12.1507, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:02:55.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:02:39
2026-04-11T23:02:55.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:02:55.698 [DEBUG] [Thread-178339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:02:55.707 [DEBUG] [Thread-178340] [transport.py] [_log()] starting thread (client mode): 0xae5082b0
2026-04-11T23:02:55.707 [DEBUG] [Thread-178340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:02:55.727 [DEBUG] [Thread-178340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:02:55.727 [INFO] [Thread-178340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:02:55.730 [DEBUG] [Thread-178340] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] client lang: <none>
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] server lang: <none>
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] kex follows: False
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] Compression: none
2026-04-11T23:02:55.731 [DEBUG] [Thread-178340] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:02:55.748 [DEBUG] [Thread-178340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:02:55.748 [DEBUG] [Thread-178340] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:02:55.748 [DEBUG] [Thread-178340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:02:55.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:02:55.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:02:55.752 [DEBUG] [Thread-178340] [transport.py] [_log()] userauth is OK
2026-04-11T23:02:55.752 [DEBUG] [Thread-178340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:02:55.752 [DEBUG] [Thread-178340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:02:55.752 [DEBUG] [Thread-178340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:02:55.752 [DEBUG] [Thread-178340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:02:55.785 [INFO] [Thread-178340] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:02:55.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:02:56.411 [DEBUG] [Thread-178340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:02:56.411 [DEBUG] [Thread-178340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:02:56.411 [DEBUG] [Thread-178340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:02:56.452 [DEBUG] [Thread-178340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:02:56.452 [DEBUG] [Thread-178340] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:02:56.455 [DEBUG] [Thread-178340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:02:56.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:02:56.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:02:56.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:02:56.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:02:56.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:02:56.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:02:56.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:02:56.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:02:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:02:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.876849 -999.00  +11.80   9.84     97  +11.40 1 3 1 3 1     0    0 0.37 -0.91 ----- 9.8 9.8 293.6 11.2 13.3 -1.0 13.2 -0.3 12.8 -0.3 13.2 -0.5
2026-04-11T23:02:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:02:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:02:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.876849
2026-04-11T23:02:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:02:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:02:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:02:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:02:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:02:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:02:39', tmtdew=-0.02994, humidity=100.124, cloud=0.0, wind=10.9757, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:02:39.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:02:56.479 [DEBUG] [Thread-178340] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:02:56.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:02:56.571 [DEBUG] [Thread-178343] [transport.py] [_log()] starting thread (client mode): 0xa79119f0
2026-04-11T23:02:56.571 [DEBUG] [Thread-178343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:02:56.585 [DEBUG] [Thread-178343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:02:56.585 [INFO] [Thread-178343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] client lang: <none>
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] server lang: <none>
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] kex follows: False
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:02:56.593 [DEBUG] [Thread-178343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:02:56.594 [DEBUG] [Thread-178343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:02:56.594 [DEBUG] [Thread-178343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:02:56.594 [DEBUG] [Thread-178343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:02:56.594 [DEBUG] [Thread-178343] [transport.py] [_log()] Compression: none
2026-04-11T23:02:56.594 [DEBUG] [Thread-178343] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:02:56.653 [DEBUG] [Thread-178343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:02:56.653 [DEBUG] [Thread-178343] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:02:56.654 [DEBUG] [Thread-178343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:02:56.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:02:56.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:02:56.709 [DEBUG] [Thread-178343] [transport.py] [_log()] userauth is OK
2026-04-11T23:02:56.709 [DEBUG] [Thread-178343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:02:56.710 [DEBUG] [Thread-178343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:02:56.710 [DEBUG] [Thread-178343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:02:56.710 [DEBUG] [Thread-178343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:02:56.729 [INFO] [Thread-178343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:02:56.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:02:56.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:02:57.565 [DEBUG] [Thread-178343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:02:57.566 [DEBUG] [Thread-178343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:02:57.613 [DEBUG] [Thread-178343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:02:57.614 [DEBUG] [Thread-178343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:02:57.622 [DEBUG] [Thread-178343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:02:57.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:02:57.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-04-11T23:02:57.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-04-11T23:02:57.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:02:57.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:02:57.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:02:57.657 [DEBUG] [Thread-178343] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:03:10.727 [DEBUG] [Thread-178345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:03:25.783 [DEBUG] [Thread-178346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:03:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:03:27.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:03:27.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-04-11T23:03:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 3, 15), 0.03762, 100.046, 0.0, 8.73504, 11.609, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:03:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:03:15
2026-04-11T23:03:29.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:03:29.488 [DEBUG] [Thread-178347] [transport.py] [_log()] starting thread (client mode): 0xae515960
2026-04-11T23:03:29.488 [DEBUG] [Thread-178347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:03:29.508 [DEBUG] [Thread-178347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:03:29.508 [INFO] [Thread-178347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:03:29.511 [DEBUG] [Thread-178347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] client lang: <none>
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] server lang: <none>
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] kex follows: False
2026-04-11T23:03:29.512 [DEBUG] [Thread-178347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:03:29.513 [DEBUG] [Thread-178347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:03:29.513 [DEBUG] [Thread-178347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:03:29.513 [DEBUG] [Thread-178347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:03:29.513 [DEBUG] [Thread-178347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:03:29.513 [DEBUG] [Thread-178347] [transport.py] [_log()] Compression: none
2026-04-11T23:03:29.513 [DEBUG] [Thread-178347] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:03:29.522 [DEBUG] [Thread-178347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:03:29.522 [DEBUG] [Thread-178347] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:03:29.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:03:29.523 [DEBUG] [Thread-178347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:03:29.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:03:29.525 [DEBUG] [Thread-178347] [transport.py] [_log()] userauth is OK
2026-04-11T23:03:29.525 [DEBUG] [Thread-178347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:03:29.525 [DEBUG] [Thread-178347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:03:29.525 [DEBUG] [Thread-178347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:03:29.525 [DEBUG] [Thread-178347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:03:29.550 [INFO] [Thread-178347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:03:29.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:03:30.170 [DEBUG] [Thread-178347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:03:30.170 [DEBUG] [Thread-178347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:03:30.171 [DEBUG] [Thread-178347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:03:30.211 [DEBUG] [Thread-178347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:03:30.211 [DEBUG] [Thread-178347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:03:30.215 [DEBUG] [Thread-178347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:03:30.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:03:30.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:03:30.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:03:30.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:03:30.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:03:30.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:03:30.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:03:30.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:03:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:03:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.877196 -999.00  +11.70  13.36     97  +11.30 1 3 1 3 1     0    0 0.36 -0.89 ----- 13.4 13.4 293.0 14.3 13.3 -1.0 13.2 -0.4 12.8 -0.4 13.2 -0.5
2026-04-11T23:03:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:03:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:03:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.877196
2026-04-11T23:03:30.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:03:30.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:03:30.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:03:30.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:03:30.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:03:30.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:03:15', tmtdew=0.03762, humidity=100.046, cloud=0.0, wind=8.73504, temperature=11.609, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:03:09.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:03:30.240 [DEBUG] [Thread-178347] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:03:30.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:03:30.334 [DEBUG] [Thread-178350] [transport.py] [_log()] starting thread (client mode): 0xb0fb5de0
2026-04-11T23:03:30.334 [DEBUG] [Thread-178350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:03:30.349 [DEBUG] [Thread-178350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:03:30.349 [INFO] [Thread-178350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:03:30.356 [DEBUG] [Thread-178350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:03:30.356 [DEBUG] [Thread-178350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:03:30.356 [DEBUG] [Thread-178350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] client lang: <none>
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] server lang: <none>
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] kex follows: False
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:03:30.357 [DEBUG] [Thread-178350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:03:30.358 [DEBUG] [Thread-178350] [transport.py] [_log()] Compression: none
2026-04-11T23:03:30.358 [DEBUG] [Thread-178350] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:03:30.414 [DEBUG] [Thread-178350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:03:30.415 [DEBUG] [Thread-178350] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:03:30.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:03:30.416 [DEBUG] [Thread-178350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:03:30.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:03:30.470 [DEBUG] [Thread-178350] [transport.py] [_log()] userauth is OK
2026-04-11T23:03:30.471 [DEBUG] [Thread-178350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:03:30.471 [DEBUG] [Thread-178350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:03:30.471 [DEBUG] [Thread-178350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:03:30.471 [DEBUG] [Thread-178350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:03:30.489 [INFO] [Thread-178350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:03:30.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:03:30.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:03:31.311 [DEBUG] [Thread-178350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:03:31.311 [DEBUG] [Thread-178350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:03:31.359 [DEBUG] [Thread-178350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:03:31.359 [DEBUG] [Thread-178350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:03:31.369 [DEBUG] [Thread-178350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:03:31.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:03:31.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-04-11T23:03:31.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-04-11T23:03:31.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:03:31.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:03:31.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:03:31.405 [DEBUG] [Thread-178350] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:03:40.745 [DEBUG] [Thread-178352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:03:40.818 [DEBUG] [Thread-178353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:03:48.168 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:03:48.169 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:03:55.868 [DEBUG] [Thread-178354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:01.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:04:01.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:04:01.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-04-11T23:04:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 3, 50), -0.04503, 100.224, 0.0, 11.3285, 12.1507, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:04:02.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:03:50
2026-04-11T23:04:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:04:03.243 [DEBUG] [Thread-178355] [transport.py] [_log()] starting thread (client mode): 0xae516560
2026-04-11T23:04:03.243 [DEBUG] [Thread-178355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:04:03.264 [DEBUG] [Thread-178355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:04:03.264 [INFO] [Thread-178355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] client lang: <none>
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] server lang: <none>
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] kex follows: False
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] Compression: none
2026-04-11T23:04:03.266 [DEBUG] [Thread-178355] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:04:03.276 [DEBUG] [Thread-178355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:04:03.277 [DEBUG] [Thread-178355] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:04:03.277 [DEBUG] [Thread-178355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:04:03.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:04:03.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:04:03.279 [DEBUG] [Thread-178355] [transport.py] [_log()] userauth is OK
2026-04-11T23:04:03.279 [DEBUG] [Thread-178355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:04:03.279 [DEBUG] [Thread-178355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:04:03.279 [DEBUG] [Thread-178355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:04:03.279 [DEBUG] [Thread-178355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:04:03.310 [INFO] [Thread-178355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:04:03.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:04:03.931 [DEBUG] [Thread-178355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:04:03.931 [DEBUG] [Thread-178355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:04:03.931 [DEBUG] [Thread-178355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:04:03.972 [DEBUG] [Thread-178355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:04:03.973 [DEBUG] [Thread-178355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:04:03.976 [DEBUG] [Thread-178355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:04:03.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:04:03.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:04:03.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:04:03.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:04:04.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:04:04.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:04:04.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:04:04.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:04:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:04:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.877543 -999.00  +11.70  10.21     97  +11.30 1 3 1 3 1     0    0 0.36 -0.78 ----- 10.2 10.2 285.6 14.0 13.3 -1.1 13.2 -0.4 12.8 -1.0 13.1 -0.7
2026-04-11T23:04:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:04:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:04:04.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.877543
2026-04-11T23:04:04.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:04:04.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:04:04.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:04:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:04:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:04:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:03:50', tmtdew=-0.04503, humidity=100.224, cloud=0.0, wind=11.3285, temperature=12.1507, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:03:39.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:04:04.009 [DEBUG] [Thread-178355] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:04:04.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:04:04.099 [DEBUG] [Thread-178358] [transport.py] [_log()] starting thread (client mode): 0xae51a140
2026-04-11T23:04:04.100 [DEBUG] [Thread-178358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:04:04.113 [DEBUG] [Thread-178358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:04:04.114 [INFO] [Thread-178358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:04:04.121 [DEBUG] [Thread-178358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] client lang: <none>
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] server lang: <none>
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] kex follows: False
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] Compression: none
2026-04-11T23:04:04.122 [DEBUG] [Thread-178358] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:04:04.184 [DEBUG] [Thread-178358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:04:04.184 [DEBUG] [Thread-178358] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:04:04.185 [DEBUG] [Thread-178358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:04:04.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:04:04.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:04:04.243 [DEBUG] [Thread-178358] [transport.py] [_log()] userauth is OK
2026-04-11T23:04:04.243 [DEBUG] [Thread-178358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:04:04.244 [DEBUG] [Thread-178358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:04:04.244 [DEBUG] [Thread-178358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:04:04.244 [DEBUG] [Thread-178358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:04:04.263 [INFO] [Thread-178358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:04:04.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:04:04.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:04:05.088 [DEBUG] [Thread-178358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:04:05.089 [DEBUG] [Thread-178358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:04:05.136 [DEBUG] [Thread-178358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:04:05.136 [DEBUG] [Thread-178358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:04:05.145 [DEBUG] [Thread-178358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:04:05.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:04:05.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-04-11T23:04:05.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-04-11T23:04:05.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:04:05.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:04:05.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:04:05.182 [DEBUG] [Thread-178358] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:04:10.904 [DEBUG] [Thread-178360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:25.952 [DEBUG] [Thread-178361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:35.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:04:35.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:04:35.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-04-11T23:04:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 4, 26), -0.022495, 100.112, 0.0, 11.0995, 11.6588, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:04:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:04:26
2026-04-11T23:04:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:04:37.140 [DEBUG] [Thread-178362] [transport.py] [_log()] starting thread (client mode): 0xae5156f0
2026-04-11T23:04:37.140 [DEBUG] [Thread-178362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:04:37.154 [DEBUG] [Thread-178362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:04:37.154 [INFO] [Thread-178362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:37.157 [DEBUG] [Thread-178362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] client lang: <none>
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] server lang: <none>
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] kex follows: False
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] Compression: none
2026-04-11T23:04:37.158 [DEBUG] [Thread-178362] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:04:37.178 [DEBUG] [Thread-178362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:04:37.179 [DEBUG] [Thread-178362] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:04:37.180 [DEBUG] [Thread-178362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:04:37.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:04:37.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:04:37.182 [DEBUG] [Thread-178362] [transport.py] [_log()] userauth is OK
2026-04-11T23:04:37.182 [DEBUG] [Thread-178362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:04:37.182 [DEBUG] [Thread-178362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:04:37.182 [DEBUG] [Thread-178362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:04:37.182 [DEBUG] [Thread-178362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:04:37.207 [INFO] [Thread-178362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:04:37.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:04:37.837 [DEBUG] [Thread-178362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:04:37.841 [DEBUG] [Thread-178362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:04:37.841 [DEBUG] [Thread-178362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:04:37.879 [DEBUG] [Thread-178362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:04:37.879 [DEBUG] [Thread-178362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:04:37.881 [DEBUG] [Thread-178362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:04:37.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:04:37.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:04:37.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:04:37.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:04:37.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:04:37.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:04:37.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:04:37.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:04:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:04:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.877891 -999.00  +11.70   9.04     97  +11.30 1 3 1 3 1     0    0 0.36 -0.70 ----- 9.0 9.0 296.8 9.8 13.3 -1.1 13.2 -0.4 12.8 -0.6 13.1 -0.6
2026-04-11T23:04:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:04:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:04:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.877891
2026-04-11T23:04:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:04:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:04:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:04:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:04:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:04:37.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:04:26', tmtdew=-0.022495, humidity=100.112, cloud=0.0, wind=11.0995, temperature=11.6588, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:04:09.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:04:37.896 [DEBUG] [Thread-178362] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:04:37.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:04:37.988 [DEBUG] [Thread-178365] [transport.py] [_log()] starting thread (client mode): 0xb0f56f80
2026-04-11T23:04:37.988 [DEBUG] [Thread-178365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:04:38.004 [DEBUG] [Thread-178365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:04:38.004 [INFO] [Thread-178365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:04:38.011 [DEBUG] [Thread-178365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] client lang: <none>
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] server lang: <none>
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] kex follows: False
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] Compression: none
2026-04-11T23:04:38.012 [DEBUG] [Thread-178365] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:04:38.074 [DEBUG] [Thread-178365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:04:38.075 [DEBUG] [Thread-178365] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:04:38.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:04:38.075 [DEBUG] [Thread-178365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:04:38.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:04:38.131 [DEBUG] [Thread-178365] [transport.py] [_log()] userauth is OK
2026-04-11T23:04:38.131 [DEBUG] [Thread-178365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:04:38.131 [DEBUG] [Thread-178365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:04:38.131 [DEBUG] [Thread-178365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:04:38.131 [DEBUG] [Thread-178365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:04:38.150 [INFO] [Thread-178365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:04:38.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:04:38.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:04:39.008 [DEBUG] [Thread-178365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:04:39.008 [DEBUG] [Thread-178365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:04:39.056 [DEBUG] [Thread-178365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:04:39.056 [DEBUG] [Thread-178365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:04:39.065 [DEBUG] [Thread-178365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:04:39.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:04:39.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:04:39.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:04:39.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:04:39.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:04:39.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:04:39.101 [DEBUG] [Thread-178365] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:04:40.803 [DEBUG] [Thread-178367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:40.994 [DEBUG] [Thread-178368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:48.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:48.377 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:04:56.049 [DEBUG] [Thread-178369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:09.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:05:09.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:05:09.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:05:10.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 5, 1), -0.01741, 100.079, 0.0, 11.8228, 11.609, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:05:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:05:01
2026-04-11T23:05:10.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:05:10.938 [DEBUG] [Thread-178370] [transport.py] [_log()] starting thread (client mode): 0xb0f55270
2026-04-11T23:05:10.938 [DEBUG] [Thread-178370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:05:10.958 [DEBUG] [Thread-178370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:05:10.958 [INFO] [Thread-178370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:05:10.961 [DEBUG] [Thread-178370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] client lang: <none>
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] server lang: <none>
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] kex follows: False
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] Compression: none
2026-04-11T23:05:10.962 [DEBUG] [Thread-178370] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:05:10.979 [DEBUG] [Thread-178370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:05:10.979 [DEBUG] [Thread-178370] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:05:10.979 [DEBUG] [Thread-178370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:05:10.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:05:10.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:05:10.981 [DEBUG] [Thread-178370] [transport.py] [_log()] userauth is OK
2026-04-11T23:05:10.981 [DEBUG] [Thread-178370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:05:10.982 [DEBUG] [Thread-178370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:05:10.982 [DEBUG] [Thread-178370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:05:10.982 [DEBUG] [Thread-178370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:05:10.999 [INFO] [Thread-178370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:05:11.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:05:11.084 [DEBUG] [Thread-178372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:11.986 [DEBUG] [Thread-178370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:05:11.987 [DEBUG] [Thread-178370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:05:11.987 [DEBUG] [Thread-178370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:05:12.028 [DEBUG] [Thread-178370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:05:12.028 [DEBUG] [Thread-178370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:05:12.031 [DEBUG] [Thread-178370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:05:12.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:05:12.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:05:12.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:05:12.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:05:12.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:05:12.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:05:12.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:05:12.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:05:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:05:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.878238 -999.00  +11.70  12.79     97  +11.30 1 3 1 3 1     0    0 0.37 -0.61 ----- 12.8 12.8 297.4 14.9 13.3 -1.0 13.2 -0.4 12.8 -0.6 13.2 -0.7
2026-04-11T23:05:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:05:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:05:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.878238
2026-04-11T23:05:12.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:05:12.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:05:12.066 [DEBUG] [Thread-178370] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:05:12.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:05:12.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:05:12.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:05:12.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:05:01', tmtdew=-0.01741, humidity=100.079, cloud=0.0, wind=11.8228, temperature=11.609, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:04:39.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:05:12.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:05:12.171 [DEBUG] [Thread-178374] [transport.py] [_log()] starting thread (client mode): 0xb0f8c220
2026-04-11T23:05:12.171 [DEBUG] [Thread-178374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:05:12.185 [DEBUG] [Thread-178374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:05:12.185 [INFO] [Thread-178374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] client lang: <none>
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] server lang: <none>
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] kex follows: False
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:05:12.193 [DEBUG] [Thread-178374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:05:12.194 [DEBUG] [Thread-178374] [transport.py] [_log()] Compression: none
2026-04-11T23:05:12.194 [DEBUG] [Thread-178374] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:05:12.250 [DEBUG] [Thread-178374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:05:12.251 [DEBUG] [Thread-178374] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:05:12.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:05:12.252 [DEBUG] [Thread-178374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:05:12.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:05:12.308 [DEBUG] [Thread-178374] [transport.py] [_log()] userauth is OK
2026-04-11T23:05:12.308 [DEBUG] [Thread-178374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:05:12.308 [DEBUG] [Thread-178374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:05:12.308 [DEBUG] [Thread-178374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:05:12.309 [DEBUG] [Thread-178374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:05:12.332 [INFO] [Thread-178374] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:05:12.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:05:12.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:05:13.176 [DEBUG] [Thread-178374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:05:13.176 [DEBUG] [Thread-178374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:05:13.223 [DEBUG] [Thread-178374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:05:13.224 [DEBUG] [Thread-178374] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:05:13.233 [DEBUG] [Thread-178374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:05:13.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:05:13.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-04-11T23:05:13.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-04-11T23:05:13.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:05:13.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:05:13.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:05:13.267 [DEBUG] [Thread-178374] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:05:26.123 [DEBUG] [Thread-178376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:40.870 [DEBUG] [Thread-178377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:41.180 [DEBUG] [Thread-178378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:43.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:05:43.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:05: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-04-11T23:05:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 5, 37), -0.03485, 100.158, 0.0, 12.6691, 12.0512, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:05:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:05:37
2026-04-11T23:05:44.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:05:45.093 [DEBUG] [Thread-178379] [transport.py] [_log()] starting thread (client mode): 0xb0f8db40
2026-04-11T23:05:45.093 [DEBUG] [Thread-178379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:05:45.107 [DEBUG] [Thread-178379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:05:45.107 [INFO] [Thread-178379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] client lang: <none>
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] server lang: <none>
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] kex follows: False
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:05:45.110 [DEBUG] [Thread-178379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:05:45.111 [DEBUG] [Thread-178379] [transport.py] [_log()] Compression: none
2026-04-11T23:05:45.111 [DEBUG] [Thread-178379] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:05:45.128 [DEBUG] [Thread-178379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:05:45.128 [DEBUG] [Thread-178379] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:05:45.129 [DEBUG] [Thread-178379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:05:45.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:05:45.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:05:45.131 [DEBUG] [Thread-178379] [transport.py] [_log()] userauth is OK
2026-04-11T23:05:45.131 [DEBUG] [Thread-178379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:05:45.131 [DEBUG] [Thread-178379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:05:45.131 [DEBUG] [Thread-178379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:05:45.131 [DEBUG] [Thread-178379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:05:45.150 [INFO] [Thread-178379] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:05:45.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:05:45.797 [DEBUG] [Thread-178379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:05:45.797 [DEBUG] [Thread-178379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:05:45.797 [DEBUG] [Thread-178379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:05:45.838 [DEBUG] [Thread-178379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:05:45.838 [DEBUG] [Thread-178379] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:05:45.842 [DEBUG] [Thread-178379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:05:45.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:05:45.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:05:45.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:05:45.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:05:45.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:05:45.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:05:45.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:05:45.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:05:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:05:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.878585 -999.00  +11.60  10.97     97  +11.20 1 3 1 3 1     0    0 0.38 -0.52 ----- 11.0 11.0 297.0 14.7 13.3 -1.1 13.2 -0.6 12.8 -1.0 13.1 -0.8
2026-04-11T23:05:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:05:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:05:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.878585
2026-04-11T23:05:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:05:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:05:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:05:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:05:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:05:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:05:37', tmtdew=-0.03485, humidity=100.158, cloud=0.0, wind=12.6691, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:05:09.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:05:45.869 [DEBUG] [Thread-178379] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:05:45.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:05:45.966 [DEBUG] [Thread-178382] [transport.py] [_log()] starting thread (client mode): 0xa7911300
2026-04-11T23:05:45.966 [DEBUG] [Thread-178382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:05:45.981 [DEBUG] [Thread-178382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:05:45.982 [INFO] [Thread-178382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:05:45.990 [DEBUG] [Thread-178382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:05:45.990 [DEBUG] [Thread-178382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:05:45.990 [DEBUG] [Thread-178382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:05:45.990 [DEBUG] [Thread-178382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:45.990 [DEBUG] [Thread-178382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:05:45.990 [DEBUG] [Thread-178382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] client lang: <none>
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] server lang: <none>
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] kex follows: False
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:05:45.991 [DEBUG] [Thread-178382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:05:45.992 [DEBUG] [Thread-178382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:05:45.992 [DEBUG] [Thread-178382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:05:45.992 [DEBUG] [Thread-178382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:05:45.992 [DEBUG] [Thread-178382] [transport.py] [_log()] Compression: none
2026-04-11T23:05:45.992 [DEBUG] [Thread-178382] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:05:46.048 [DEBUG] [Thread-178382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:05:46.049 [DEBUG] [Thread-178382] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:05:46.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:05:46.051 [DEBUG] [Thread-178382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:05:46.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:05:46.108 [DEBUG] [Thread-178382] [transport.py] [_log()] userauth is OK
2026-04-11T23:05:46.109 [DEBUG] [Thread-178382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:05:46.109 [DEBUG] [Thread-178382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:05:46.109 [DEBUG] [Thread-178382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:05:46.109 [DEBUG] [Thread-178382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:05:46.128 [INFO] [Thread-178382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:05:46.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:05:46.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:05:46.978 [DEBUG] [Thread-178382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:05:46.978 [DEBUG] [Thread-178382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:05:47.027 [DEBUG] [Thread-178382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:05:47.027 [DEBUG] [Thread-178382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:05:47.038 [DEBUG] [Thread-178382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:05:47.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:05:47.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-04-11T23:05:47.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-04-11T23:05:47.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:05:47.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:05:47.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:05:47.075 [DEBUG] [Thread-178382] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:05:48.582 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:48.583 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:05:56.221 [DEBUG] [Thread-178384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:11.271 [DEBUG] [Thread-178385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:17.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:06:17.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:06:17.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-04-11T23:06:18.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 5, 37), -0.03485, 100.158, 0.0, 12.6691, 12.0512, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:06:18.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:05:37
2026-04-11T23:06:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:06:18.908 [DEBUG] [Thread-178386] [transport.py] [_log()] starting thread (client mode): 0xb0fb4550
2026-04-11T23:06:18.908 [DEBUG] [Thread-178386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:06:18.929 [DEBUG] [Thread-178386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:06:18.930 [INFO] [Thread-178386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] client lang: <none>
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] server lang: <none>
2026-04-11T23:06:18.933 [DEBUG] [Thread-178386] [transport.py] [_log()] kex follows: False
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] Compression: none
2026-04-11T23:06:18.934 [DEBUG] [Thread-178386] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:06:18.951 [DEBUG] [Thread-178386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:06:18.952 [DEBUG] [Thread-178386] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:06:18.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:06:18.953 [DEBUG] [Thread-178386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:06:18.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:06:18.956 [DEBUG] [Thread-178386] [transport.py] [_log()] userauth is OK
2026-04-11T23:06:18.956 [DEBUG] [Thread-178386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:06:18.956 [DEBUG] [Thread-178386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:06:18.956 [DEBUG] [Thread-178386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:06:18.956 [DEBUG] [Thread-178386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:06:18.981 [INFO] [Thread-178386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:06:18.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:06:19.603 [DEBUG] [Thread-178386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:06:19.604 [DEBUG] [Thread-178386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:06:19.604 [DEBUG] [Thread-178386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:06:19.645 [DEBUG] [Thread-178386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:06:19.645 [DEBUG] [Thread-178386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:06:19.648 [DEBUG] [Thread-178386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:06:19.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:06:19.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:06:19.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:06:19.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:06:19.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:06:19.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:06:19.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:06:19.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:06:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:06:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.878932 -999.00  +11.70  10.44     97  +11.30 1 3 1 3 1     0    0 0.38 -0.48 ----- 10.4 10.4 302.2 13.0 13.3 -1.1 13.1 -0.5 12.8 -0.6 13.1 -0.6
2026-04-11T23:06:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:06:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:06:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.878932
2026-04-11T23:06:19.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:06:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:06:19.675 [DEBUG] [Thread-178386] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:06:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:06:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:06:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:06:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:05:37', tmtdew=-0.03485, humidity=100.158, cloud=0.0, wind=12.6691, temperature=12.0512, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:05:39.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:06:19.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:06:19.767 [DEBUG] [Thread-178389] [transport.py] [_log()] starting thread (client mode): 0xb0fb7bb0
2026-04-11T23:06:19.768 [DEBUG] [Thread-178389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:06:19.782 [DEBUG] [Thread-178389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:06:19.782 [INFO] [Thread-178389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] client lang: <none>
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] server lang: <none>
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] kex follows: False
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] Compression: none
2026-04-11T23:06:19.790 [DEBUG] [Thread-178389] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:06:19.847 [DEBUG] [Thread-178389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:06:19.847 [DEBUG] [Thread-178389] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:06:19.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:06:19.849 [DEBUG] [Thread-178389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:06:19.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:06:19.903 [DEBUG] [Thread-178389] [transport.py] [_log()] userauth is OK
2026-04-11T23:06:19.904 [DEBUG] [Thread-178389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:06:19.904 [DEBUG] [Thread-178389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:06:19.904 [DEBUG] [Thread-178389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:06:19.904 [DEBUG] [Thread-178389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:06:19.928 [INFO] [Thread-178389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:06:19.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:06:19.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:06:20.755 [DEBUG] [Thread-178389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:06:20.755 [DEBUG] [Thread-178389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:06:20.804 [DEBUG] [Thread-178389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:06:20.804 [DEBUG] [Thread-178389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:06:20.813 [DEBUG] [Thread-178389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:06:20.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:06:20.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:06:20.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:06:20.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:06:20.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:06:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:06:20.847 [DEBUG] [Thread-178389] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:06:26.308 [DEBUG] [Thread-178391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:40.937 [DEBUG] [Thread-178392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:41.361 [DEBUG] [Thread-178393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:48.788 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:48.789 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:06:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:06:50.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:06:50.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-04-11T23:06:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 6, 12), 0.035125, 100.062, 0.0, 11.9992, 11.5924, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:06:52.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:06:12
2026-04-11T23:06:52.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:06:52.668 [DEBUG] [Thread-178394] [transport.py] [_log()] starting thread (client mode): 0xb0f54250
2026-04-11T23:06:52.668 [DEBUG] [Thread-178394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:06:52.689 [DEBUG] [Thread-178394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:06:52.689 [INFO] [Thread-178394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:06:52.692 [DEBUG] [Thread-178394] [transport.py] [_log()] client lang: <none>
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] server lang: <none>
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] kex follows: False
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] Compression: none
2026-04-11T23:06:52.693 [DEBUG] [Thread-178394] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:06:52.710 [DEBUG] [Thread-178394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:06:52.710 [DEBUG] [Thread-178394] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:06:52.711 [DEBUG] [Thread-178394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:06:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:06:52.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:06:52.713 [DEBUG] [Thread-178394] [transport.py] [_log()] userauth is OK
2026-04-11T23:06:52.713 [DEBUG] [Thread-178394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:06:52.713 [DEBUG] [Thread-178394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:06:52.713 [DEBUG] [Thread-178394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:06:52.713 [DEBUG] [Thread-178394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:06:52.736 [INFO] [Thread-178394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:06:52.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:06:53.378 [DEBUG] [Thread-178394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:06:53.378 [DEBUG] [Thread-178394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:06:53.379 [DEBUG] [Thread-178394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:06:53.418 [DEBUG] [Thread-178394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:06:53.419 [DEBUG] [Thread-178394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:06:53.421 [DEBUG] [Thread-178394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:06:53.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:06:53.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:06:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:06:53.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:06:53.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:06:53.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:06:53.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:06:53.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:06:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:06:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.879279 -999.00  +11.70  14.26     97  +11.30 1 3 1 3 1     0    0 0.39 -0.38 ----- 14.3 14.3 299.4 16.5 13.2 -1.1 13.1 -0.6 12.8 -0.5 13.1 -0.7
2026-04-11T23:06:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:06:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:06:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.879279
2026-04-11T23:06:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:06:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:06:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:06:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:06:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:06:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:06:12', tmtdew=0.035125, humidity=100.062, cloud=0.0, wind=11.9992, temperature=11.5924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:06:09.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:06:53.444 [DEBUG] [Thread-178394] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:06:53.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:06:53.537 [DEBUG] [Thread-178397] [transport.py] [_log()] starting thread (client mode): 0xa7951f00
2026-04-11T23:06:53.537 [DEBUG] [Thread-178397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:06:53.552 [DEBUG] [Thread-178397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:06:53.552 [INFO] [Thread-178397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:06:53.559 [DEBUG] [Thread-178397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:06:53.559 [DEBUG] [Thread-178397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] client lang: <none>
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] server lang: <none>
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] kex follows: False
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] Compression: none
2026-04-11T23:06:53.560 [DEBUG] [Thread-178397] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:06:53.625 [DEBUG] [Thread-178397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:06:53.625 [DEBUG] [Thread-178397] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:06:53.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:06:53.627 [DEBUG] [Thread-178397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:06:53.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:06:53.684 [DEBUG] [Thread-178397] [transport.py] [_log()] userauth is OK
2026-04-11T23:06:53.684 [DEBUG] [Thread-178397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:06:53.684 [DEBUG] [Thread-178397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:06:53.685 [DEBUG] [Thread-178397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:06:53.685 [DEBUG] [Thread-178397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:06:53.703 [INFO] [Thread-178397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:06:53.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:06:53.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:06:54.554 [DEBUG] [Thread-178397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:06:54.554 [DEBUG] [Thread-178397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:06:54.602 [DEBUG] [Thread-178397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:06:54.602 [DEBUG] [Thread-178397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:06:54.611 [DEBUG] [Thread-178397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:06:54.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:06:54.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-04-11T23:06:54.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-04-11T23:06:54.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:06:54.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:06:54.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:06:54.648 [DEBUG] [Thread-178397] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:06:56.398 [DEBUG] [Thread-178399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:11.448 [DEBUG] [Thread-178400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:07:24.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:07:24.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-04-11T23:07:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 6, 48), -0.03473, 100.158, 0.0, 12.7397, 11.9517, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:07:26.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:06:48
2026-04-11T23:07:26.481 [DEBUG] [Thread-178401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:26.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:07:26.637 [DEBUG] [Thread-178402] [transport.py] [_log()] starting thread (client mode): 0xb0f8cd30
2026-04-11T23:07:26.637 [DEBUG] [Thread-178402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:07:26.656 [DEBUG] [Thread-178402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:07:26.656 [INFO] [Thread-178402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:07:26.659 [DEBUG] [Thread-178402] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:07:26.659 [DEBUG] [Thread-178402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:07:26.659 [DEBUG] [Thread-178402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:07:26.659 [DEBUG] [Thread-178402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:07:26.659 [DEBUG] [Thread-178402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] client lang: <none>
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] server lang: <none>
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] kex follows: False
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] Compression: none
2026-04-11T23:07:26.660 [DEBUG] [Thread-178402] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:07:26.678 [DEBUG] [Thread-178402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:07:26.679 [DEBUG] [Thread-178402] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:07:26.679 [DEBUG] [Thread-178402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:07:26.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:07:26.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:07:26.682 [DEBUG] [Thread-178402] [transport.py] [_log()] userauth is OK
2026-04-11T23:07:26.682 [DEBUG] [Thread-178402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:07:26.682 [DEBUG] [Thread-178402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:07:26.682 [DEBUG] [Thread-178402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:07:26.682 [DEBUG] [Thread-178402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:07:26.707 [INFO] [Thread-178402] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:07:26.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:07:27.466 [DEBUG] [Thread-178402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:07:27.466 [DEBUG] [Thread-178402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:07:27.467 [DEBUG] [Thread-178402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:07:27.507 [DEBUG] [Thread-178402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:07:27.507 [DEBUG] [Thread-178402] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:07:27.511 [DEBUG] [Thread-178402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:07:27.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:07:27.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:07:27.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:07:27.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:07:27.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:07:27.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:07:27.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:07:27.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:07:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:07:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.879974 -999.00  +11.60  11.66     97  +11.20 1 3 1 3 1     0    0 0.38 -0.17 ----- 11.7 11.7 297.0 14.7 13.3 -1.2 13.2 -0.5 12.7 -1.0 13.1 -0.7
2026-04-11T23:07:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:07:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:07:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.879974
2026-04-11T23:07:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:07:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:07:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:07:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:07:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:07:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:06:48', tmtdew=-0.03473, humidity=100.158, cloud=0.0, wind=12.7397, temperature=11.9517, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:07:09.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:07:27.541 [DEBUG] [Thread-178402] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:07:27.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:07:27.627 [DEBUG] [Thread-178405] [transport.py] [_log()] starting thread (client mode): 0xb0f8ea70
2026-04-11T23:07:27.627 [DEBUG] [Thread-178405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:07:27.642 [DEBUG] [Thread-178405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:07:27.642 [INFO] [Thread-178405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] client lang: <none>
2026-04-11T23:07:27.649 [DEBUG] [Thread-178405] [transport.py] [_log()] server lang: <none>
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] kex follows: False
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] Compression: none
2026-04-11T23:07:27.650 [DEBUG] [Thread-178405] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:07:27.708 [DEBUG] [Thread-178405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:07:27.708 [DEBUG] [Thread-178405] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:07:27.709 [DEBUG] [Thread-178405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:07:27.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:07:27.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:07:27.764 [DEBUG] [Thread-178405] [transport.py] [_log()] userauth is OK
2026-04-11T23:07:27.764 [DEBUG] [Thread-178405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:07:27.764 [DEBUG] [Thread-178405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:07:27.764 [DEBUG] [Thread-178405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:07:27.764 [DEBUG] [Thread-178405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:07:27.781 [INFO] [Thread-178405] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:07:27.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:07:27.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:07:28.621 [DEBUG] [Thread-178405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:07:28.622 [DEBUG] [Thread-178405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:07:28.669 [DEBUG] [Thread-178405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:07:28.669 [DEBUG] [Thread-178405] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:07:28.679 [DEBUG] [Thread-178405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:07:28.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:07: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')
2026-04-11T23:07:28.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:07:28.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:07:28.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:07:28.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:07:28.716 [DEBUG] [Thread-178405] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:07:41.004 [DEBUG] [Thread-178407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:41.523 [DEBUG] [Thread-178408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:48.995 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:48.996 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:56.583 [DEBUG] [Thread-178409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:07:58.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:07:58.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:07:58.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-04-11T23:08:00.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 7, 23), 0.035165, 100.062, 0.0, 12.1226, 11.5593, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:08:00.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:07:23
2026-04-11T23:08:00.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:08:00.691 [DEBUG] [Thread-178410] [transport.py] [_log()] starting thread (client mode): 0xb0fce6e0
2026-04-11T23:08:00.691 [DEBUG] [Thread-178410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:08:00.711 [DEBUG] [Thread-178410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:08:00.711 [INFO] [Thread-178410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] client lang: <none>
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] server lang: <none>
2026-04-11T23:08:00.715 [DEBUG] [Thread-178410] [transport.py] [_log()] kex follows: False
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] Compression: none
2026-04-11T23:08:00.716 [DEBUG] [Thread-178410] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:08:00.734 [DEBUG] [Thread-178410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:08:00.734 [DEBUG] [Thread-178410] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:08:00.735 [DEBUG] [Thread-178410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:08:00.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:08:00.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:08:00.777 [DEBUG] [Thread-178410] [transport.py] [_log()] userauth is OK
2026-04-11T23:08:00.777 [DEBUG] [Thread-178410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:08:00.777 [DEBUG] [Thread-178410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:08:00.778 [DEBUG] [Thread-178410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:08:00.778 [DEBUG] [Thread-178410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:08:00.803 [INFO] [Thread-178410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:08:00.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:08:01.608 [DEBUG] [Thread-178410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:08:01.608 [DEBUG] [Thread-178410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:08:01.609 [DEBUG] [Thread-178410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:08:01.650 [DEBUG] [Thread-178410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:08:01.650 [DEBUG] [Thread-178410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:08:01.653 [DEBUG] [Thread-178410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:08:01.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:08:01.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:08:01.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:08:01.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:08:01.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:08:01.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:08:01.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:08:01.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.880321 -999.00  +11.60  15.88     97  +11.20 1 3 1 3 1     0    0 0.39 -0.09 ----- 15.9 15.9 297.2 19.4 13.2 -0.9 13.1 -0.5 12.7 -0.8 13.1 -0.6
2026-04-11T23:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.880321
2026-04-11T23:08:01.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:08:01.686 [DEBUG] [Thread-178410] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:08:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:08:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:08:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:08:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:08:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:07:23', tmtdew=0.035165, humidity=100.062, cloud=0.0, wind=12.1226, temperature=11.5593, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:07:39.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:08:01.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:08:01.786 [DEBUG] [Thread-178413] [transport.py] [_log()] starting thread (client mode): 0xb0fcce50
2026-04-11T23:08:01.786 [DEBUG] [Thread-178413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:08:01.802 [DEBUG] [Thread-178413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:08:01.802 [INFO] [Thread-178413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:08:01.810 [DEBUG] [Thread-178413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:08:01.810 [DEBUG] [Thread-178413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:08:01.810 [DEBUG] [Thread-178413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] client lang: <none>
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] server lang: <none>
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] kex follows: False
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] Compression: none
2026-04-11T23:08:01.811 [DEBUG] [Thread-178413] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:08:01.868 [DEBUG] [Thread-178413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:08:01.869 [DEBUG] [Thread-178413] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:08:01.869 [DEBUG] [Thread-178413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:08:01.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:08:01.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:08:01.929 [DEBUG] [Thread-178413] [transport.py] [_log()] userauth is OK
2026-04-11T23:08:01.929 [DEBUG] [Thread-178413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:08:01.929 [DEBUG] [Thread-178413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:08:01.929 [DEBUG] [Thread-178413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:08:01.929 [DEBUG] [Thread-178413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:08:01.948 [INFO] [Thread-178413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:08:01.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:08:01.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:08:02.850 [DEBUG] [Thread-178413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:08:02.850 [DEBUG] [Thread-178413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:08:02.898 [DEBUG] [Thread-178413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:08:02.898 [DEBUG] [Thread-178413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:08:02.908 [DEBUG] [Thread-178413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:08:02.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:08:02.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-04-11T23:08:02.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-04-11T23:08:02.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:08:02.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:08:02.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:08:02.945 [DEBUG] [Thread-178413] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:08:11.619 [DEBUG] [Thread-178415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:08:26.672 [DEBUG] [Thread-178416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:08:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:08:32.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:08:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:08:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 7, 59), -0.01485, 100.062, 0.0, 13.6404, 11.5259, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:08:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:07:59
2026-04-11T23:08:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:08:34.777 [DEBUG] [Thread-178417] [transport.py] [_log()] starting thread (client mode): 0xb0f56890
2026-04-11T23:08:34.777 [DEBUG] [Thread-178417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:08:34.797 [DEBUG] [Thread-178417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:08:34.797 [INFO] [Thread-178417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:08:34.800 [DEBUG] [Thread-178417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] client lang: <none>
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] server lang: <none>
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] kex follows: False
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:08:34.801 [DEBUG] [Thread-178417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:08:34.802 [DEBUG] [Thread-178417] [transport.py] [_log()] Compression: none
2026-04-11T23:08:34.802 [DEBUG] [Thread-178417] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:08:34.818 [DEBUG] [Thread-178417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:08:34.818 [DEBUG] [Thread-178417] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:08:34.819 [DEBUG] [Thread-178417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:08:34.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:08:34.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:08:34.821 [DEBUG] [Thread-178417] [transport.py] [_log()] userauth is OK
2026-04-11T23:08:34.821 [DEBUG] [Thread-178417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:08:34.821 [DEBUG] [Thread-178417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:08:34.821 [DEBUG] [Thread-178417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:08:34.821 [DEBUG] [Thread-178417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:08:34.845 [INFO] [Thread-178417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:08:34.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:08:35.642 [DEBUG] [Thread-178417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:08:35.642 [DEBUG] [Thread-178417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:08:35.643 [DEBUG] [Thread-178417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:08:35.684 [DEBUG] [Thread-178417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:08:35.684 [DEBUG] [Thread-178417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:08:35.686 [DEBUG] [Thread-178417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:08:35.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:08:35.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:08:35.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:08:35.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:08:35.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:08:35.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:08:35.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:08:35.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:08:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:08:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.880668 -999.00  +11.60  14.88     97  +11.20 1 3 1 3 1     0    0 0.39 -0.00 ----- 14.9 14.9 292.6 17.4 13.2 -1.2 13.2 -0.6 12.8 -0.5 13.0 -0.6
2026-04-11T23:08:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:08:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:08:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.880668
2026-04-11T23:08:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:08:35.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:08:35.709 [DEBUG] [Thread-178417] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:08:35.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:08:35.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:08:35.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:08:35.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:07:59', tmtdew=-0.01485, humidity=100.062, cloud=0.0, wind=13.6404, temperature=11.5259, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:08:09.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:08:35.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:08:35.806 [DEBUG] [Thread-178420] [transport.py] [_log()] starting thread (client mode): 0xb0f8caf0
2026-04-11T23:08:35.806 [DEBUG] [Thread-178420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:08:35.821 [DEBUG] [Thread-178420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:08:35.822 [INFO] [Thread-178420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] client lang: <none>
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] server lang: <none>
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] kex follows: False
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:08:35.829 [DEBUG] [Thread-178420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:08:35.830 [DEBUG] [Thread-178420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:08:35.830 [DEBUG] [Thread-178420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:08:35.830 [DEBUG] [Thread-178420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:08:35.830 [DEBUG] [Thread-178420] [transport.py] [_log()] Compression: none
2026-04-11T23:08:35.830 [DEBUG] [Thread-178420] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:08:35.889 [DEBUG] [Thread-178420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:08:35.889 [DEBUG] [Thread-178420] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:08:35.890 [DEBUG] [Thread-178420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:08:35.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:08:35.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:08:35.945 [DEBUG] [Thread-178420] [transport.py] [_log()] userauth is OK
2026-04-11T23:08:35.945 [DEBUG] [Thread-178420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:08:35.945 [DEBUG] [Thread-178420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:08:35.946 [DEBUG] [Thread-178420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:08:35.946 [DEBUG] [Thread-178420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:08:35.969 [INFO] [Thread-178420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:08:35.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:08:35.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:08:36.790 [DEBUG] [Thread-178420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:08:36.790 [DEBUG] [Thread-178420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:08:36.838 [DEBUG] [Thread-178420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:08:36.838 [DEBUG] [Thread-178420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:08:36.847 [DEBUG] [Thread-178420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:08:36.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:08:36.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-04-11T23:08:36.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-04-11T23:08:36.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:08:36.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:08:36.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:08:36.882 [DEBUG] [Thread-178420] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:08:41.071 [DEBUG] [Thread-178422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:08:41.707 [DEBUG] [Thread-178423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:08:49.199 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:08:49.200 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:08:56.763 [DEBUG] [Thread-178424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:09:06.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:09:06.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-04-11T23:09:08.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 8, 34), -0.02967, 100.124, 0.0, 12.528, 11.9186, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:09:08.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:08:34
2026-04-11T23:09:08.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:09:08.779 [DEBUG] [Thread-178425] [transport.py] [_log()] starting thread (client mode): 0xb0f8e2c0
2026-04-11T23:09:08.779 [DEBUG] [Thread-178425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:09:08.800 [DEBUG] [Thread-178425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:09:08.800 [INFO] [Thread-178425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] client lang: <none>
2026-04-11T23:09:08.804 [DEBUG] [Thread-178425] [transport.py] [_log()] server lang: <none>
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] kex follows: False
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] Compression: none
2026-04-11T23:09:08.805 [DEBUG] [Thread-178425] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:09:08.822 [DEBUG] [Thread-178425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:09:08.822 [DEBUG] [Thread-178425] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:09:08.823 [DEBUG] [Thread-178425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:09:08.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:09:08.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:09:08.825 [DEBUG] [Thread-178425] [transport.py] [_log()] userauth is OK
2026-04-11T23:09:08.825 [DEBUG] [Thread-178425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:09:08.825 [DEBUG] [Thread-178425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:09:08.825 [DEBUG] [Thread-178425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:09:08.825 [DEBUG] [Thread-178425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:09:08.840 [INFO] [Thread-178425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:09:08.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:09:09.647 [DEBUG] [Thread-178425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:09:09.647 [DEBUG] [Thread-178425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:09:09.648 [DEBUG] [Thread-178425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:09:09.688 [DEBUG] [Thread-178425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:09:09.688 [DEBUG] [Thread-178425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:09:09.692 [DEBUG] [Thread-178425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:09:09.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:09:09.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:09:09.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:09:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:09:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:09:09.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:09:09.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:09:09.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:09:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:09:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.881016 -999.00  +11.60  14.41     97  +11.20 1 3 1 3 1     0    0 0.39 0.09 ----- 14.4 14.4 295.0 16.4 13.2 -1.1 13.1 -0.6 12.7 -0.8 13.0 -0.7
2026-04-11T23:09:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:09:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:09:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.881016
2026-04-11T23:09:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:09:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:09:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:09:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:09:09.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:09:09.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:08:34', tmtdew=-0.02967, humidity=100.124, cloud=0.0, wind=12.528, temperature=11.9186, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:08:39.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:09:09.720 [DEBUG] [Thread-178425] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:09:09.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:09:09.813 [DEBUG] [Thread-178428] [transport.py] [_log()] starting thread (client mode): 0xae517a60
2026-04-11T23:09:09.813 [DEBUG] [Thread-178428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:09:09.828 [DEBUG] [Thread-178428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:09:09.829 [INFO] [Thread-178428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:09.836 [DEBUG] [Thread-178428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] client lang: <none>
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] server lang: <none>
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] kex follows: False
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] Compression: none
2026-04-11T23:09:09.837 [DEBUG] [Thread-178428] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:09:09.897 [DEBUG] [Thread-178428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:09:09.898 [DEBUG] [Thread-178428] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:09:09.899 [DEBUG] [Thread-178428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:09:09.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:09:09.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:09:09.953 [DEBUG] [Thread-178428] [transport.py] [_log()] userauth is OK
2026-04-11T23:09:09.954 [DEBUG] [Thread-178428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:09:09.954 [DEBUG] [Thread-178428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:09:09.954 [DEBUG] [Thread-178428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:09:09.954 [DEBUG] [Thread-178428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:09:09.973 [INFO] [Thread-178428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:09:09.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:09:09.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:09:10.810 [DEBUG] [Thread-178428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:09:10.810 [DEBUG] [Thread-178428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:09:10.859 [DEBUG] [Thread-178428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:09:10.859 [DEBUG] [Thread-178428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:09:10.868 [DEBUG] [Thread-178428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:09:10.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:09:10.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-04-11T23:09:10.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-04-11T23:09:10.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:09:10.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:09:10.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:09:10.904 [DEBUG] [Thread-178428] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:09:11.799 [DEBUG] [Thread-178430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:26.851 [DEBUG] [Thread-178431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:40.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:09:40.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:09:40.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:09:41.162 [DEBUG] [Thread-178432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:41.890 [DEBUG] [Thread-178433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 9, 10), 0.035105, 100.062, 0.0, 14.2578, 11.559, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:09:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:09:10
2026-04-11T23:09:42.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:09:42.807 [DEBUG] [Thread-178434] [transport.py] [_log()] starting thread (client mode): 0xb0f8c9d0
2026-04-11T23:09:42.807 [DEBUG] [Thread-178434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:09:42.828 [DEBUG] [Thread-178434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:09:42.828 [INFO] [Thread-178434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:09:42.831 [DEBUG] [Thread-178434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:09:42.831 [DEBUG] [Thread-178434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:09:42.831 [DEBUG] [Thread-178434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:09:42.831 [DEBUG] [Thread-178434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] client lang: <none>
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] server lang: <none>
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] kex follows: False
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:09:42.832 [DEBUG] [Thread-178434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:09:42.841 [DEBUG] [Thread-178434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:09:42.842 [DEBUG] [Thread-178434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:09:42.842 [DEBUG] [Thread-178434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:09:42.842 [DEBUG] [Thread-178434] [transport.py] [_log()] Compression: none
2026-04-11T23:09:42.842 [DEBUG] [Thread-178434] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:09:42.862 [DEBUG] [Thread-178434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:09:42.862 [DEBUG] [Thread-178434] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:09:42.863 [DEBUG] [Thread-178434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:09:42.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:09:42.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:09:42.909 [DEBUG] [Thread-178434] [transport.py] [_log()] userauth is OK
2026-04-11T23:09:42.909 [DEBUG] [Thread-178434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:09:42.910 [DEBUG] [Thread-178434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:09:42.910 [DEBUG] [Thread-178434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:09:42.910 [DEBUG] [Thread-178434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:09:42.942 [INFO] [Thread-178434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:09:42.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:09:43.717 [DEBUG] [Thread-178434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:09:43.717 [DEBUG] [Thread-178434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:09:43.717 [DEBUG] [Thread-178434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:09:43.758 [DEBUG] [Thread-178434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:09:43.758 [DEBUG] [Thread-178434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:09:43.762 [DEBUG] [Thread-178434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:09:43.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:09:43.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:09:43.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:09:43.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:09:43.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:09:43.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:09:43.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:09:43.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:09:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:09:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.881363 -999.00  +11.50  11.77     97  +11.10 1 3 1 3 1     0    0 0.40 0.09 ----- 11.8 11.8 293.4 14.2 13.2 -1.1 13.1 -0.5 12.8 -0.8 13.0 -0.6
2026-04-11T23:09:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:09:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:09:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.881363
2026-04-11T23:09:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:09:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:09:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:09:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:09:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:09:43.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:09:10', tmtdew=0.035105, humidity=100.062, cloud=0.0, wind=14.2578, temperature=11.559, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:09:09.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:09:43.789 [DEBUG] [Thread-178434] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:09:43.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:09:43.883 [DEBUG] [Thread-178437] [transport.py] [_log()] starting thread (client mode): 0xa7956140
2026-04-11T23:09:43.883 [DEBUG] [Thread-178437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:09:43.898 [DEBUG] [Thread-178437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:09:43.898 [INFO] [Thread-178437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:09:43.905 [DEBUG] [Thread-178437] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:09:43.905 [DEBUG] [Thread-178437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:09:43.905 [DEBUG] [Thread-178437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:09:43.905 [DEBUG] [Thread-178437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:43.905 [DEBUG] [Thread-178437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] client lang: <none>
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] server lang: <none>
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] kex follows: False
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] Compression: none
2026-04-11T23:09:43.906 [DEBUG] [Thread-178437] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:09:43.966 [DEBUG] [Thread-178437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:09:43.966 [DEBUG] [Thread-178437] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:09:43.967 [DEBUG] [Thread-178437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:09:43.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:09:43.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:09:44.027 [DEBUG] [Thread-178437] [transport.py] [_log()] userauth is OK
2026-04-11T23:09:44.027 [DEBUG] [Thread-178437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:09:44.028 [DEBUG] [Thread-178437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:09:44.028 [DEBUG] [Thread-178437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:09:44.028 [DEBUG] [Thread-178437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:09:44.047 [INFO] [Thread-178437] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:09:44.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:09:44.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:09:44.849 [DEBUG] [Thread-178437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:09:44.849 [DEBUG] [Thread-178437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:09:44.898 [DEBUG] [Thread-178437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:09:44.898 [DEBUG] [Thread-178437] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:09:44.908 [DEBUG] [Thread-178437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:09:44.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:09:44.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-04-11T23:09:44.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-04-11T23:09:44.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:09:44.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:09:44.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:09:44.945 [DEBUG] [Thread-178437] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:09:49.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:49.404 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:09:56.927 [DEBUG] [Thread-178439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:11.982 [DEBUG] [Thread-178440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:10:14.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:10:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:10:16.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 9, 46), -0.03477, 100.158, 0.0, 14.292, 11.9849, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:10:16.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:09:46
2026-04-11T23:10:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:10:16.825 [DEBUG] [Thread-178441] [transport.py] [_log()] starting thread (client mode): 0xae5f3430
2026-04-11T23:10:16.825 [DEBUG] [Thread-178441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:10:16.847 [DEBUG] [Thread-178441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:10:16.848 [INFO] [Thread-178441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:10:16.851 [DEBUG] [Thread-178441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:10:16.851 [DEBUG] [Thread-178441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:10:16.851 [DEBUG] [Thread-178441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] client lang: <none>
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] server lang: <none>
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] kex follows: False
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] Compression: none
2026-04-11T23:10:16.852 [DEBUG] [Thread-178441] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:10:16.874 [DEBUG] [Thread-178441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:10:16.874 [DEBUG] [Thread-178441] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:10:16.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:10:16.875 [DEBUG] [Thread-178441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:10:16.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:10:16.879 [DEBUG] [Thread-178441] [transport.py] [_log()] userauth is OK
2026-04-11T23:10:16.880 [DEBUG] [Thread-178441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:10:16.880 [DEBUG] [Thread-178441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:10:16.880 [DEBUG] [Thread-178441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:10:16.880 [DEBUG] [Thread-178441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:10:16.905 [INFO] [Thread-178441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:10:16.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:10:18.087 [DEBUG] [Thread-178441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:10:18.087 [DEBUG] [Thread-178441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:10:18.087 [DEBUG] [Thread-178441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:10:18.130 [DEBUG] [Thread-178441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:10:18.130 [DEBUG] [Thread-178441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:10:18.136 [DEBUG] [Thread-178441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:10:18.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:10:18.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:10:18.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:10:18.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:10:18.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:10:18.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:10:18.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:10:18.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:10:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:10:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.881710 -999.00  +11.60  11.09     97  +11.20 1 3 1 3 1     0    0 0.40 0.17 ----- 11.1 11.1 299.2 14.0 13.2 -1.1 13.1 -0.4 12.7 -0.7 13.0 -0.6
2026-04-11T23:10:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:10:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:10:18.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.881710
2026-04-11T23:10:18.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:10:18.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:10:18.166 [DEBUG] [Thread-178441] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:10:18.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:10:18.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:10:18.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:10:18.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:09:46', tmtdew=-0.03477, humidity=100.158, cloud=0.0, wind=14.292, temperature=11.9849, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:09:39.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:10:18.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:10:18.257 [DEBUG] [Thread-178444] [transport.py] [_log()] starting thread (client mode): 0xae5f3c40
2026-04-11T23:10:18.257 [DEBUG] [Thread-178444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:10:18.271 [DEBUG] [Thread-178444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:10:18.271 [INFO] [Thread-178444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:10:18.278 [DEBUG] [Thread-178444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] client lang: <none>
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] server lang: <none>
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] kex follows: False
2026-04-11T23:10:18.279 [DEBUG] [Thread-178444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:10:18.280 [DEBUG] [Thread-178444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:10:18.280 [DEBUG] [Thread-178444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:10:18.280 [DEBUG] [Thread-178444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:10:18.280 [DEBUG] [Thread-178444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:10:18.280 [DEBUG] [Thread-178444] [transport.py] [_log()] Compression: none
2026-04-11T23:10:18.280 [DEBUG] [Thread-178444] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:10:18.337 [DEBUG] [Thread-178444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:10:18.337 [DEBUG] [Thread-178444] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:10:18.338 [DEBUG] [Thread-178444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:10:18.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:10:18.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:10:18.397 [DEBUG] [Thread-178444] [transport.py] [_log()] userauth is OK
2026-04-11T23:10:18.397 [DEBUG] [Thread-178444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:10:18.398 [DEBUG] [Thread-178444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:10:18.398 [DEBUG] [Thread-178444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:10:18.398 [DEBUG] [Thread-178444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:10:18.417 [INFO] [Thread-178444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:10:18.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:10:18.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:10:19.286 [DEBUG] [Thread-178444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:10:19.286 [DEBUG] [Thread-178444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:10:19.334 [DEBUG] [Thread-178444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:10:19.334 [DEBUG] [Thread-178444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:10:19.347 [DEBUG] [Thread-178444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:10:19.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:10:19.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:10:19.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-04-11T23:10:19.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:10:19.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:10:19.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:10:19.385 [DEBUG] [Thread-178444] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:10:27.021 [DEBUG] [Thread-178446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:41.221 [DEBUG] [Thread-178447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:42.085 [DEBUG] [Thread-178448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:10:49.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:10:49.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-04-11T23:10:49.607 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:49.609 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:10:50.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 10, 21), 0.032615, 100.079, 0.0, 13.2516, 11.5424, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:10:50.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:10:21
2026-04-11T23:10:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:10:51.548 [DEBUG] [Thread-178449] [transport.py] [_log()] starting thread (client mode): 0xb0fcc880
2026-04-11T23:10:51.548 [DEBUG] [Thread-178449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:10:51.548 [DEBUG] [Thread-178449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:10:51.548 [INFO] [Thread-178449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:10:51.555 [DEBUG] [Thread-178449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:10:51.555 [DEBUG] [Thread-178449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:10:51.555 [DEBUG] [Thread-178449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:10:51.555 [DEBUG] [Thread-178449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:51.555 [DEBUG] [Thread-178449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:51.555 [DEBUG] [Thread-178449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] client lang: <none>
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] server lang: <none>
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] kex follows: False
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] Compression: none
2026-04-11T23:10:51.556 [DEBUG] [Thread-178449] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:10:51.579 [DEBUG] [Thread-178449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:10:51.580 [DEBUG] [Thread-178449] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:10:51.580 [DEBUG] [Thread-178449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:10:51.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:10:51.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:10:51.582 [DEBUG] [Thread-178449] [transport.py] [_log()] userauth is OK
2026-04-11T23:10:51.582 [DEBUG] [Thread-178449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:10:51.583 [DEBUG] [Thread-178449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:10:51.583 [DEBUG] [Thread-178449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:10:51.583 [DEBUG] [Thread-178449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:10:51.619 [INFO] [Thread-178449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:10:51.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:10:52.386 [DEBUG] [Thread-178449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:10:52.386 [DEBUG] [Thread-178449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:10:52.386 [DEBUG] [Thread-178449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:10:52.428 [DEBUG] [Thread-178449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:10:52.428 [DEBUG] [Thread-178449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:10:52.431 [DEBUG] [Thread-178449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:10:52.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:10:52.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:10:52.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:10:52.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:10:52.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:10:52.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:10:52.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:10:52.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:10:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:10:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.882057 -999.00  +11.60  13.03     97  +11.20 1 3 1 3 1     0    0 0.40 0.25 ----- 13.0 13.0 296.6 15.3 13.2 -0.9 13.1 -0.5 12.7 -0.6 13.1 -0.7
2026-04-11T23:10:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:10:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:10:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.882057
2026-04-11T23:10:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:10:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:10:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:10:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:10:52.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:10:52.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:10:21', tmtdew=0.032615, humidity=100.079, cloud=0.0, wind=13.2516, temperature=11.5424, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:10:09.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:10:52.460 [DEBUG] [Thread-178449] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:10:52.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:10:52.557 [DEBUG] [Thread-178452] [transport.py] [_log()] starting thread (client mode): 0xa7957a30
2026-04-11T23:10:52.557 [DEBUG] [Thread-178452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:10:52.571 [DEBUG] [Thread-178452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:10:52.572 [INFO] [Thread-178452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:10:52.579 [DEBUG] [Thread-178452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] client lang: <none>
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] server lang: <none>
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] kex follows: False
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:10:52.580 [DEBUG] [Thread-178452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:10:52.581 [DEBUG] [Thread-178452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:10:52.581 [DEBUG] [Thread-178452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:10:52.581 [DEBUG] [Thread-178452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:10:52.581 [DEBUG] [Thread-178452] [transport.py] [_log()] Compression: none
2026-04-11T23:10:52.581 [DEBUG] [Thread-178452] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:10:52.638 [DEBUG] [Thread-178452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:10:52.639 [DEBUG] [Thread-178452] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:10:52.639 [DEBUG] [Thread-178452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:10:52.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:10:52.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:10:52.699 [DEBUG] [Thread-178452] [transport.py] [_log()] userauth is OK
2026-04-11T23:10:52.699 [DEBUG] [Thread-178452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:10:52.699 [DEBUG] [Thread-178452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:10:52.700 [DEBUG] [Thread-178452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:10:52.700 [DEBUG] [Thread-178452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:10:52.719 [INFO] [Thread-178452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:10:52.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:10:52.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:10:53.552 [DEBUG] [Thread-178452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:10:53.552 [DEBUG] [Thread-178452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:10:53.600 [DEBUG] [Thread-178452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:10:53.600 [DEBUG] [Thread-178452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:10:53.610 [DEBUG] [Thread-178452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:10:53.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:10:53.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-04-11T23:10:53.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:10:53.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:10:53.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:10:53.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:10:53.646 [DEBUG] [Thread-178452] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:10:57.120 [DEBUG] [Thread-178454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:12.185 [DEBUG] [Thread-178455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:11:23.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:11:23.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-04-11T23:11:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 10, 57), -0.00979, 100.029, 0.0, 14.346, 11.4927, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:11:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:10:57
2026-04-11T23:11:25.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:11:25.670 [DEBUG] [Thread-178456] [transport.py] [_log()] starting thread (client mode): 0xa7954a00
2026-04-11T23:11:25.670 [DEBUG] [Thread-178456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:11:25.691 [DEBUG] [Thread-178456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:11:25.691 [INFO] [Thread-178456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:11:25.694 [DEBUG] [Thread-178456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] client lang: <none>
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] server lang: <none>
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] kex follows: False
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] Compression: none
2026-04-11T23:11:25.695 [DEBUG] [Thread-178456] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:11:25.713 [DEBUG] [Thread-178456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:11:25.714 [DEBUG] [Thread-178456] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:11:25.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:11:25.715 [DEBUG] [Thread-178456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:11:25.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:11:25.717 [DEBUG] [Thread-178456] [transport.py] [_log()] userauth is OK
2026-04-11T23:11:25.718 [DEBUG] [Thread-178456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:11:25.718 [DEBUG] [Thread-178456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:11:25.718 [DEBUG] [Thread-178456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:11:25.718 [DEBUG] [Thread-178456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:11:25.744 [INFO] [Thread-178456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:11:25.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:11:26.532 [DEBUG] [Thread-178456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:11:26.532 [DEBUG] [Thread-178456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:11:26.533 [DEBUG] [Thread-178456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:11:26.574 [DEBUG] [Thread-178456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:11:26.574 [DEBUG] [Thread-178456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:11:26.578 [DEBUG] [Thread-178456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:11:26.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:11:26.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:11:26.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:11:26.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:11:26.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:11:26.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:11:26.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:11:26.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:11:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:11:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.882404 -999.00  +11.60  16.55     97  +11.20 1 3 1 3 1     0    0 0.40 0.33 ----- 16.6 16.6 285.2 17.8 13.2 -1.0 13.1 -0.6 12.7 -0.8 13.1 -0.7
2026-04-11T23:11:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:11:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:11:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.882404
2026-04-11T23:11:26.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:11:26.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:11:26.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:11:26.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:11:26.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:11:26.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:10:57', tmtdew=-0.00979, humidity=100.029, cloud=0.0, wind=14.346, temperature=11.4927, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:10:39.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:11:26.604 [DEBUG] [Thread-178456] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:11:26.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:11:26.705 [DEBUG] [Thread-178459] [transport.py] [_log()] starting thread (client mode): 0xa79565f0
2026-04-11T23:11:26.705 [DEBUG] [Thread-178459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:11:26.723 [DEBUG] [Thread-178459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:11:26.723 [INFO] [Thread-178459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] client lang: <none>
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] server lang: <none>
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] kex follows: False
2026-04-11T23:11:26.733 [DEBUG] [Thread-178459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:11:26.734 [DEBUG] [Thread-178459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:11:26.734 [DEBUG] [Thread-178459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:11:26.734 [DEBUG] [Thread-178459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:11:26.734 [DEBUG] [Thread-178459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:11:26.734 [DEBUG] [Thread-178459] [transport.py] [_log()] Compression: none
2026-04-11T23:11:26.734 [DEBUG] [Thread-178459] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:11:26.792 [DEBUG] [Thread-178459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:11:26.792 [DEBUG] [Thread-178459] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:11:26.793 [DEBUG] [Thread-178459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:11:26.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:11:26.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:11:26.853 [DEBUG] [Thread-178459] [transport.py] [_log()] userauth is OK
2026-04-11T23:11:26.853 [DEBUG] [Thread-178459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:11:26.853 [DEBUG] [Thread-178459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:11:26.853 [DEBUG] [Thread-178459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:11:26.853 [DEBUG] [Thread-178459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:11:26.871 [INFO] [Thread-178459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:11:26.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:11:26.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:11:27.220 [DEBUG] [Thread-178461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:27.722 [DEBUG] [Thread-178459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:11:27.722 [DEBUG] [Thread-178459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:11:27.772 [DEBUG] [Thread-178459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:11:27.772 [DEBUG] [Thread-178459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:11:27.780 [DEBUG] [Thread-178459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:11:27.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:11:27.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-04-11T23:11:27.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-04-11T23:11:27.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:11:27.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:11:27.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:11:27.815 [DEBUG] [Thread-178459] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:11:41.304 [DEBUG] [Thread-178462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:42.272 [DEBUG] [Thread-178463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:49.815 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:49.817 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:57.308 [DEBUG] [Thread-178464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:11:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:11:57.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:11:57.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-04-11T23:11:59.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 11, 33), -0.0249, 100.129, 0.0, 13.8344, 11.5259, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:11:59.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:11:33
2026-04-11T23:11:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:11:59.671 [DEBUG] [Thread-178465] [transport.py] [_log()] starting thread (client mode): 0xa7955bd0
2026-04-11T23:11:59.672 [DEBUG] [Thread-178465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:11:59.691 [DEBUG] [Thread-178465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:11:59.692 [INFO] [Thread-178465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] client lang: <none>
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] server lang: <none>
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] kex follows: False
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] Compression: none
2026-04-11T23:11:59.695 [DEBUG] [Thread-178465] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:11:59.710 [DEBUG] [Thread-178465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:11:59.710 [DEBUG] [Thread-178465] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:11:59.710 [DEBUG] [Thread-178465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:11:59.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:11:59.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:11:59.711 [DEBUG] [Thread-178465] [transport.py] [_log()] userauth is OK
2026-04-11T23:11:59.711 [DEBUG] [Thread-178465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:11:59.711 [DEBUG] [Thread-178465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:11:59.711 [DEBUG] [Thread-178465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:11:59.711 [DEBUG] [Thread-178465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:11:59.721 [INFO] [Thread-178465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:11:59.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:12:00.487 [DEBUG] [Thread-178465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:12:00.487 [DEBUG] [Thread-178465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:12:00.488 [DEBUG] [Thread-178465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:12:00.528 [DEBUG] [Thread-178465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:12:00.529 [DEBUG] [Thread-178465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:12:00.531 [DEBUG] [Thread-178465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:12:00.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:12:00.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:12:00.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:12:00.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:12:00.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:12:00.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:12:00.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:12:00.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:12:00.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:12:00.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.882752 -999.00  +11.50  15.05     97  +11.10 1 3 1 3 1     0    0 0.40 0.44 ----- 15.1 15.1 296.6 18.8 13.2 -1.2 13.1 -0.6 12.7 -0.7 13.0 -0.6
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.882752
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:12:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:12:00.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:11:33', tmtdew=-0.0249, humidity=100.129, cloud=0.0, wind=13.8344, temperature=11.5259, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:11:09.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:12:00.557 [DEBUG] [Thread-178465] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:12:00.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:12:00.666 [DEBUG] [Thread-178468] [transport.py] [_log()] starting thread (client mode): 0xa7955ff0
2026-04-11T23:12:00.666 [DEBUG] [Thread-178468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:12:00.685 [DEBUG] [Thread-178468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:12:00.685 [INFO] [Thread-178468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] client lang: <none>
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] server lang: <none>
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] kex follows: False
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] Compression: none
2026-04-11T23:12:00.694 [DEBUG] [Thread-178468] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:12:00.754 [DEBUG] [Thread-178468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:12:00.754 [DEBUG] [Thread-178468] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:12:00.754 [DEBUG] [Thread-178468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:12:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:12:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:12:00.810 [DEBUG] [Thread-178468] [transport.py] [_log()] userauth is OK
2026-04-11T23:12:00.810 [DEBUG] [Thread-178468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:12:00.810 [DEBUG] [Thread-178468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:12:00.810 [DEBUG] [Thread-178468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:12:00.811 [DEBUG] [Thread-178468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:12:00.829 [INFO] [Thread-178468] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:12:00.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:12:00.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:12:01.662 [DEBUG] [Thread-178468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:12:01.663 [DEBUG] [Thread-178468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:12:01.711 [DEBUG] [Thread-178468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:12:01.712 [DEBUG] [Thread-178468] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:12:01.721 [DEBUG] [Thread-178468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:12:01.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:12:01.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:12:01.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:12:01.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:12:01.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:12:01.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:12:01.758 [DEBUG] [Thread-178468] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:12:12.347 [DEBUG] [Thread-178470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:12:27.400 [DEBUG] [Thread-178471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:12:31.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:12:31.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:12:31.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-04-11T23:12:33.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 12, 8), -0.017365, 100.079, 0.0, 14.6106, 11.5259, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:12:33.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:12:08
2026-04-11T23:12:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:12:33.587 [DEBUG] [Thread-178472] [transport.py] [_log()] starting thread (client mode): 0xa7954ca0
2026-04-11T23:12:33.587 [DEBUG] [Thread-178472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:12:33.608 [DEBUG] [Thread-178472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:12:33.608 [INFO] [Thread-178472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] client lang: <none>
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] server lang: <none>
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] kex follows: False
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:12:33.611 [DEBUG] [Thread-178472] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:12:33.612 [DEBUG] [Thread-178472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:12:33.612 [DEBUG] [Thread-178472] [transport.py] [_log()] Compression: none
2026-04-11T23:12:33.612 [DEBUG] [Thread-178472] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:12:33.628 [DEBUG] [Thread-178472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:12:33.629 [DEBUG] [Thread-178472] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:12:33.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:12:33.629 [DEBUG] [Thread-178472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:12:33.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:12:33.631 [DEBUG] [Thread-178472] [transport.py] [_log()] userauth is OK
2026-04-11T23:12:33.632 [DEBUG] [Thread-178472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:12:33.632 [DEBUG] [Thread-178472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:12:33.632 [DEBUG] [Thread-178472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:12:33.632 [DEBUG] [Thread-178472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:12:33.667 [INFO] [Thread-178472] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:12:33.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:12:34.430 [DEBUG] [Thread-178472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:12:34.431 [DEBUG] [Thread-178472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:12:34.431 [DEBUG] [Thread-178472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:12:34.472 [DEBUG] [Thread-178472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:12:34.472 [DEBUG] [Thread-178472] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:12:34.476 [DEBUG] [Thread-178472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:12:34.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:12:34.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:12:34.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:12:34.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:12:34.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:12:34.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:12:34.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:12:34.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:12:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:12:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.883446 -999.00  +11.50  11.96     97  +11.20 1 3 1 3 1     0    0 0.40 0.29 ----- 12.0 12.0 299.8 15.3 13.2 -1.2 13.1 -0.4 12.6 -1.0 12.9 -0.7
2026-04-11T23:12:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:12:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:12:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.883446
2026-04-11T23:12:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:12:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:12:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:12:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:12:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:12:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:12:08', tmtdew=-0.017365, humidity=100.079, cloud=0.0, wind=14.6106, temperature=11.5259, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:12:09.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:12:34.502 [DEBUG] [Thread-178472] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:12:34.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:12:34.597 [DEBUG] [Thread-178475] [transport.py] [_log()] starting thread (client mode): 0xa7954af0
2026-04-11T23:12:34.598 [DEBUG] [Thread-178475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:12:34.612 [DEBUG] [Thread-178475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:12:34.612 [INFO] [Thread-178475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] client lang: <none>
2026-04-11T23:12:34.620 [DEBUG] [Thread-178475] [transport.py] [_log()] server lang: <none>
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] kex follows: False
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] Compression: none
2026-04-11T23:12:34.621 [DEBUG] [Thread-178475] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:12:34.677 [DEBUG] [Thread-178475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:12:34.678 [DEBUG] [Thread-178475] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:12:34.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:12:34.679 [DEBUG] [Thread-178475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:12:34.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:12:34.735 [DEBUG] [Thread-178475] [transport.py] [_log()] userauth is OK
2026-04-11T23:12:34.735 [DEBUG] [Thread-178475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:12:34.735 [DEBUG] [Thread-178475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:12:34.735 [DEBUG] [Thread-178475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:12:34.735 [DEBUG] [Thread-178475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:12:34.754 [INFO] [Thread-178475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:12:34.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:12:34.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:12:35.578 [DEBUG] [Thread-178475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:12:35.578 [DEBUG] [Thread-178475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:12:35.626 [DEBUG] [Thread-178475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:12:35.626 [DEBUG] [Thread-178475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:12:35.635 [DEBUG] [Thread-178475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:12:35.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:12:35.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-04-11T23:12:35.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-04-11T23:12:35.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:12:35.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:12:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:12:35.670 [DEBUG] [Thread-178475] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:12:41.370 [DEBUG] [Thread-178477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:12:42.436 [DEBUG] [Thread-178478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:12:50.021 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:12:50.023 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:12:57.489 [DEBUG] [Thread-178479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:13:05.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:13:05.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:13:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 12, 44), -0.03473, 100.158, 0.0, 17.7847, 11.9517, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:13:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:12:44
2026-04-11T23:13:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:13:07.520 [DEBUG] [Thread-178480] [transport.py] [_log()] starting thread (client mode): 0xa79563b0
2026-04-11T23:13:07.520 [DEBUG] [Thread-178480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:13:07.542 [DEBUG] [Thread-178480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:13:07.542 [INFO] [Thread-178480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:13:07.544 [DEBUG] [Thread-178480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:13:07.544 [DEBUG] [Thread-178480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:13:07.544 [DEBUG] [Thread-178480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:13:07.544 [DEBUG] [Thread-178480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:07.544 [DEBUG] [Thread-178480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:07.544 [DEBUG] [Thread-178480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] client lang: <none>
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] server lang: <none>
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] kex follows: False
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] Compression: none
2026-04-11T23:13:07.545 [DEBUG] [Thread-178480] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:13:07.565 [DEBUG] [Thread-178480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:13:07.566 [DEBUG] [Thread-178480] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:13:07.566 [DEBUG] [Thread-178480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:13:07.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:13:07.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:13:07.568 [DEBUG] [Thread-178480] [transport.py] [_log()] userauth is OK
2026-04-11T23:13:07.568 [DEBUG] [Thread-178480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:13:07.569 [DEBUG] [Thread-178480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:13:07.569 [DEBUG] [Thread-178480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:13:07.569 [DEBUG] [Thread-178480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:13:07.593 [INFO] [Thread-178480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:13:07.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:13:08.364 [DEBUG] [Thread-178480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:13:08.364 [DEBUG] [Thread-178480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:13:08.364 [DEBUG] [Thread-178480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:13:08.406 [DEBUG] [Thread-178480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:13:08.406 [DEBUG] [Thread-178480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:13:08.409 [DEBUG] [Thread-178480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:13:08.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:13:08.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:13:08.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:13:08.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:13:08.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:13:08.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:13:08.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:13:08.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:13:08.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:13:08.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.883793 -999.00  +11.50  15.57     97  +11.20 1 3 1 3 1     0    0 0.39 -0.03 ----- 15.6 15.6 284.6 17.2 13.1 -1.2 13.0 -0.6 12.7 -1.4 12.9 -0.6
2026-04-11T23:13:08.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:13:08.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:13:08.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.883793
2026-04-11T23:13:08.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:13:08.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:13:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:13:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:13:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:13:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:12:44', tmtdew=-0.03473, humidity=100.158, cloud=0.0, wind=17.7847, temperature=11.9517, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:12:39.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:13:08.451 [DEBUG] [Thread-178480] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:13:08.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:13:08.543 [DEBUG] [Thread-178483] [transport.py] [_log()] starting thread (client mode): 0xa7955b70
2026-04-11T23:13:08.543 [DEBUG] [Thread-178483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:13:08.559 [DEBUG] [Thread-178483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:13:08.560 [INFO] [Thread-178483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:13:08.567 [DEBUG] [Thread-178483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:13:08.567 [DEBUG] [Thread-178483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:13:08.567 [DEBUG] [Thread-178483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:13:08.567 [DEBUG] [Thread-178483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] client lang: <none>
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] server lang: <none>
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] kex follows: False
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] Compression: none
2026-04-11T23:13:08.568 [DEBUG] [Thread-178483] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:13:08.627 [DEBUG] [Thread-178483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:13:08.628 [DEBUG] [Thread-178483] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:13:08.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:13:08.629 [DEBUG] [Thread-178483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:13:08.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:13:08.687 [DEBUG] [Thread-178483] [transport.py] [_log()] userauth is OK
2026-04-11T23:13:08.688 [DEBUG] [Thread-178483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:13:08.688 [DEBUG] [Thread-178483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:13:08.688 [DEBUG] [Thread-178483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:13:08.688 [DEBUG] [Thread-178483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:13:08.707 [INFO] [Thread-178483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:13:08.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:13:08.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:13:09.567 [DEBUG] [Thread-178483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:13:09.567 [DEBUG] [Thread-178483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:13:09.615 [DEBUG] [Thread-178483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:13:09.615 [DEBUG] [Thread-178483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:13:09.625 [DEBUG] [Thread-178483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:13:09.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:13:09.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-04-11T23:13:09.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-04-11T23:13:09.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:13:09.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:13:09.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:13:09.662 [DEBUG] [Thread-178483] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:13:12.527 [DEBUG] [Thread-178485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:27.577 [DEBUG] [Thread-178486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:13:39.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:13:39.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:13:40.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 13, 20), -0.0148, 100.062, 0.0, 14.5753, 11.4261, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:13:40.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:13:20
2026-04-11T23:13:41.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:13:41.424 [DEBUG] [Thread-178487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:41.474 [DEBUG] [Thread-178488] [transport.py] [_log()] starting thread (client mode): 0xa7957700
2026-04-11T23:13:41.474 [DEBUG] [Thread-178488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:13:41.491 [DEBUG] [Thread-178488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:13:41.491 [INFO] [Thread-178488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:41.494 [DEBUG] [Thread-178488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] client lang: <none>
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] server lang: <none>
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] kex follows: False
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] Compression: none
2026-04-11T23:13:41.495 [DEBUG] [Thread-178488] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:13:41.514 [DEBUG] [Thread-178488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:13:41.515 [DEBUG] [Thread-178488] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:13:41.515 [DEBUG] [Thread-178488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:13:41.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:13:41.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:13:41.517 [DEBUG] [Thread-178488] [transport.py] [_log()] userauth is OK
2026-04-11T23:13:41.517 [DEBUG] [Thread-178488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:13:41.518 [DEBUG] [Thread-178488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:13:41.518 [DEBUG] [Thread-178488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:13:41.518 [DEBUG] [Thread-178488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:13:41.540 [INFO] [Thread-178488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:13:41.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:13:42.284 [DEBUG] [Thread-178488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:13:42.284 [DEBUG] [Thread-178488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:13:42.284 [DEBUG] [Thread-178488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:13:42.326 [DEBUG] [Thread-178488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:13:42.326 [DEBUG] [Thread-178488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:13:42.329 [DEBUG] [Thread-178488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:13:42.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:13:42.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:13:42.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:13:42.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:13:42.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:13:42.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:13:42.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:13:42.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:13:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:13:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.884141 -999.00  +11.50  10.87     97  +11.20 1 3 1 3 1     0    0 0.38 -0.08 ----- 10.9 10.9 298.0 14.5 13.1 -1.1 13.1 -0.4 12.6 -0.7 12.9 -0.6
2026-04-11T23:13:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:13:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:13:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.884141
2026-04-11T23:13:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:13:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:13:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:13:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:13:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:13:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:13:20', tmtdew=-0.0148, humidity=100.062, cloud=0.0, wind=14.5753, temperature=11.4261, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:13:09.782', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:13:42.353 [DEBUG] [Thread-178488] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:13:42.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:13:42.441 [DEBUG] [Thread-178491] [transport.py] [_log()] starting thread (client mode): 0xa79558d0
2026-04-11T23:13:42.441 [DEBUG] [Thread-178491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:13:42.456 [DEBUG] [Thread-178491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:13:42.456 [INFO] [Thread-178491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] client lang: <none>
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] server lang: <none>
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] kex follows: False
2026-04-11T23:13:42.464 [DEBUG] [Thread-178491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:13:42.465 [DEBUG] [Thread-178491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:13:42.465 [DEBUG] [Thread-178491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:13:42.465 [DEBUG] [Thread-178491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:13:42.465 [DEBUG] [Thread-178491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:13:42.465 [DEBUG] [Thread-178491] [transport.py] [_log()] Compression: none
2026-04-11T23:13:42.465 [DEBUG] [Thread-178491] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:13:42.524 [DEBUG] [Thread-178491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:13:42.525 [DEBUG] [Thread-178491] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:13:42.525 [DEBUG] [Thread-178491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:13:42.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:13:42.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:13:42.580 [DEBUG] [Thread-178491] [transport.py] [_log()] userauth is OK
2026-04-11T23:13:42.580 [DEBUG] [Thread-178491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:13:42.581 [DEBUG] [Thread-178491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:13:42.581 [DEBUG] [Thread-178491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:13:42.581 [DEBUG] [Thread-178491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:13:42.599 [INFO] [Thread-178491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:13:42.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:13:42.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:13:42.611 [DEBUG] [Thread-178493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:43.401 [DEBUG] [Thread-178491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:13:43.401 [DEBUG] [Thread-178491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:13:43.449 [DEBUG] [Thread-178491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:13:43.449 [DEBUG] [Thread-178491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:13:43.459 [DEBUG] [Thread-178491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:13:43.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:13:43.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-04-11T23:13:43.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:13:43.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:13:43.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:13:43.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:13:43.503 [DEBUG] [Thread-178491] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:13:50.234 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:50.235 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:13:57.663 [DEBUG] [Thread-178494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:12.701 [DEBUG] [Thread-178495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:14:13.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:14:13.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-04-11T23:14:14.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 13, 55), 0.03269, 100.079, 0.0, 16.7987, 11.4761, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:14:14.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:13:55
2026-04-11T23:14:15.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:14:15.354 [DEBUG] [Thread-178496] [transport.py] [_log()] starting thread (client mode): 0xb0fcf970
2026-04-11T23:14:15.354 [DEBUG] [Thread-178496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:14:15.375 [DEBUG] [Thread-178496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:14:15.375 [INFO] [Thread-178496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:15.378 [DEBUG] [Thread-178496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] client lang: <none>
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] server lang: <none>
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] kex follows: False
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] Compression: none
2026-04-11T23:14:15.379 [DEBUG] [Thread-178496] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:14:15.389 [DEBUG] [Thread-178496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:14:15.390 [DEBUG] [Thread-178496] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:14:15.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:14:15.391 [DEBUG] [Thread-178496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:14:15.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:14:15.393 [DEBUG] [Thread-178496] [transport.py] [_log()] userauth is OK
2026-04-11T23:14:15.393 [DEBUG] [Thread-178496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:14:15.393 [DEBUG] [Thread-178496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:14:15.394 [DEBUG] [Thread-178496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:14:15.394 [DEBUG] [Thread-178496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:14:15.418 [INFO] [Thread-178496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:14:15.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:14:16.199 [DEBUG] [Thread-178496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:14:16.199 [DEBUG] [Thread-178496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:14:16.199 [DEBUG] [Thread-178496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:14:16.240 [DEBUG] [Thread-178496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:14:16.240 [DEBUG] [Thread-178496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:14:16.244 [DEBUG] [Thread-178496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:14:16.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:14:16.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:14:16.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:14:16.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:14:16.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:14:16.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:14:16.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:14:16.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:14:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:14:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.884488 -999.00  +11.50  15.13     97  +11.10 1 3 1 3 1     0    0 0.37 -0.12 ----- 15.1 15.1 304.8 17.7 13.1 -0.9 13.0 -0.5 12.7 -0.5 12.9 -0.5
2026-04-11T23:14:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:14:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:14:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.884488
2026-04-11T23:14:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:14:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:14:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:14:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:14:16.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:14:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:13:55', tmtdew=0.03269, humidity=100.079, cloud=0.0, wind=16.7987, temperature=11.4761, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:13:39.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:14:16.274 [DEBUG] [Thread-178496] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:14:16.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:14:16.364 [DEBUG] [Thread-178499] [transport.py] [_log()] starting thread (client mode): 0xb0fce5f0
2026-04-11T23:14:16.365 [DEBUG] [Thread-178499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:14:16.379 [DEBUG] [Thread-178499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:14:16.379 [INFO] [Thread-178499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:16.387 [DEBUG] [Thread-178499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] client lang: <none>
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] server lang: <none>
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] kex follows: False
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:14:16.388 [DEBUG] [Thread-178499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:14:16.389 [DEBUG] [Thread-178499] [transport.py] [_log()] Compression: none
2026-04-11T23:14:16.389 [DEBUG] [Thread-178499] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:14:16.448 [DEBUG] [Thread-178499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:14:16.448 [DEBUG] [Thread-178499] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:14:16.449 [DEBUG] [Thread-178499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:14:16.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:14:16.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:14:16.506 [DEBUG] [Thread-178499] [transport.py] [_log()] userauth is OK
2026-04-11T23:14:16.506 [DEBUG] [Thread-178499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:14:16.506 [DEBUG] [Thread-178499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:14:16.506 [DEBUG] [Thread-178499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:14:16.506 [DEBUG] [Thread-178499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:14:16.531 [INFO] [Thread-178499] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:14:16.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:14:16.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:14:17.412 [DEBUG] [Thread-178499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:14:17.412 [DEBUG] [Thread-178499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:14:17.460 [DEBUG] [Thread-178499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:14:17.460 [DEBUG] [Thread-178499] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:14:17.469 [DEBUG] [Thread-178499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:14:17.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:14:17.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-04-11T23:14:17.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:14:17.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:14:17.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:14:17.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:14:17.508 [DEBUG] [Thread-178499] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:14:27.736 [DEBUG] [Thread-178501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:41.481 [DEBUG] [Thread-178502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:42.790 [DEBUG] [Thread-178503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:47.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:14:47.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:14:47.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-04-11T23:14:48.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 14, 30), 0.03775, 100.046, 0.0, 17.1868, 11.443, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:14:48.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:14:30
2026-04-11T23:14:49.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:14:49.331 [DEBUG] [Thread-178504] [transport.py] [_log()] starting thread (client mode): 0xa79577c0
2026-04-11T23:14:49.332 [DEBUG] [Thread-178504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:14:49.348 [DEBUG] [Thread-178504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:14:49.348 [INFO] [Thread-178504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] client lang: <none>
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] server lang: <none>
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] kex follows: False
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] Compression: none
2026-04-11T23:14:49.350 [DEBUG] [Thread-178504] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:14:49.367 [DEBUG] [Thread-178504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:14:49.367 [DEBUG] [Thread-178504] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:14:49.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:14:49.368 [DEBUG] [Thread-178504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:14:49.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:14:49.370 [DEBUG] [Thread-178504] [transport.py] [_log()] userauth is OK
2026-04-11T23:14:49.370 [DEBUG] [Thread-178504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:14:49.371 [DEBUG] [Thread-178504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:14:49.371 [DEBUG] [Thread-178504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:14:49.371 [DEBUG] [Thread-178504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:14:49.394 [INFO] [Thread-178504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:14:49.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:14:50.210 [DEBUG] [Thread-178504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:14:50.210 [DEBUG] [Thread-178504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:14:50.211 [DEBUG] [Thread-178504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:14:50.251 [DEBUG] [Thread-178504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:14:50.251 [DEBUG] [Thread-178504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:14:50.255 [DEBUG] [Thread-178504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:14:50.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:14:50.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:14:50.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:14:50.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:14:50.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:14:50.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:14:50.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:14:50.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:14:50.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:14:50.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.884835 -999.00  +11.50  15.23     97  +11.10 1 3 1 3 1     0    0 0.39 -0.01 ----- 15.2 15.2 296.4 17.0 13.1 -1.0 13.0 -0.5 12.7 -0.6 12.9 -0.6
2026-04-11T23:14:50.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:14:50.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:14:50.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.884835
2026-04-11T23:14:50.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:14:50.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:14:50.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:14:50.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:14:50.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:14:50.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:14:30', tmtdew=0.03775, humidity=100.046, cloud=0.0, wind=17.1868, temperature=11.443, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:14:09.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:14:50.284 [DEBUG] [Thread-178504] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:14:50.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:14:50.377 [DEBUG] [Thread-178507] [transport.py] [_log()] starting thread (client mode): 0xa79554b0
2026-04-11T23:14:50.377 [DEBUG] [Thread-178507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:14:50.394 [DEBUG] [Thread-178507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:14:50.394 [INFO] [Thread-178507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:14:50.401 [DEBUG] [Thread-178507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] client lang: <none>
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] server lang: <none>
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] kex follows: False
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] Compression: none
2026-04-11T23:14:50.402 [DEBUG] [Thread-178507] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:14:50.448 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:50.449 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:14:50.459 [DEBUG] [Thread-178507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:14:50.459 [DEBUG] [Thread-178507] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:14:50.459 [DEBUG] [Thread-178507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:14:50.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:14:50.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:14:50.515 [DEBUG] [Thread-178507] [transport.py] [_log()] userauth is OK
2026-04-11T23:14:50.515 [DEBUG] [Thread-178507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:14:50.515 [DEBUG] [Thread-178507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:14:50.515 [DEBUG] [Thread-178507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:14:50.515 [DEBUG] [Thread-178507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:14:50.535 [INFO] [Thread-178507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:14:50.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:14:50.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:14:51.356 [DEBUG] [Thread-178507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:14:51.357 [DEBUG] [Thread-178507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:14:51.405 [DEBUG] [Thread-178507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:14:51.405 [DEBUG] [Thread-178507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:14:51.415 [DEBUG] [Thread-178507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:14:51.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:14: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')
2026-04-11T23:14:51.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:14:51.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:14:51.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:14:51.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:14:51.453 [DEBUG] [Thread-178507] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:14:57.825 [DEBUG] [Thread-178509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:12.881 [DEBUG] [Thread-178510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:15:21.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:15:21.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-04-11T23:15:22.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 15, 7), 0.0352, 100.062, 0.0, 16.393, 11.4761, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:15:22.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:15:07
2026-04-11T23:15:23.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:15:23.290 [DEBUG] [Thread-178511] [transport.py] [_log()] starting thread (client mode): 0xa7955270
2026-04-11T23:15:23.291 [DEBUG] [Thread-178511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:15:23.312 [DEBUG] [Thread-178511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:15:23.312 [INFO] [Thread-178511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] client lang: <none>
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] server lang: <none>
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] kex follows: False
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] Compression: none
2026-04-11T23:15:23.315 [DEBUG] [Thread-178511] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:15:23.336 [DEBUG] [Thread-178511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:15:23.337 [DEBUG] [Thread-178511] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:15:23.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:15:23.338 [DEBUG] [Thread-178511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:15:23.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:15:23.341 [DEBUG] [Thread-178511] [transport.py] [_log()] userauth is OK
2026-04-11T23:15:23.341 [DEBUG] [Thread-178511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:15:23.341 [DEBUG] [Thread-178511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:15:23.341 [DEBUG] [Thread-178511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:15:23.341 [DEBUG] [Thread-178511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:15:23.373 [INFO] [Thread-178511] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:15:23.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:15:24.469 [DEBUG] [Thread-178511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:15:24.470 [DEBUG] [Thread-178511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:15:24.470 [DEBUG] [Thread-178511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:15:24.511 [DEBUG] [Thread-178511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:15:24.511 [DEBUG] [Thread-178511] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:15:24.515 [DEBUG] [Thread-178511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:15:24.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:15:24.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:15:24.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:15:24.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:15:24.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:15:24.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:15:24.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:15:24.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:15:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:15:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.885182 -999.00  +11.50  12.99     97  +11.10 1 3 1 3 1     0    0 0.39 0.09 ----- 13.0 13.0 298.4 18.4 13.1 -1.1 13.0 -0.3 12.6 -1.0 12.9 -0.6
2026-04-11T23:15:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:15:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:15:24.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.885182
2026-04-11T23:15:24.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:15:24.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:15:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:15:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:15:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:15:24.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:15:07', tmtdew=0.0352, humidity=100.062, cloud=0.0, wind=16.393, temperature=11.4761, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:14:39.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:15:24.549 [DEBUG] [Thread-178511] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:15:24.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:15:24.643 [DEBUG] [Thread-178514] [transport.py] [_log()] starting thread (client mode): 0xb0fcd810
2026-04-11T23:15:24.643 [DEBUG] [Thread-178514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:15:24.658 [DEBUG] [Thread-178514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:15:24.658 [INFO] [Thread-178514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:15:24.666 [DEBUG] [Thread-178514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:15:24.666 [DEBUG] [Thread-178514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] client lang: <none>
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] server lang: <none>
2026-04-11T23:15:24.667 [DEBUG] [Thread-178514] [transport.py] [_log()] kex follows: False
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] Compression: none
2026-04-11T23:15:24.668 [DEBUG] [Thread-178514] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:15:24.726 [DEBUG] [Thread-178514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:15:24.726 [DEBUG] [Thread-178514] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:15:24.727 [DEBUG] [Thread-178514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:15:24.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:15:24.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:15:24.785 [DEBUG] [Thread-178514] [transport.py] [_log()] userauth is OK
2026-04-11T23:15:24.785 [DEBUG] [Thread-178514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:15:24.785 [DEBUG] [Thread-178514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:15:24.786 [DEBUG] [Thread-178514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:15:24.786 [DEBUG] [Thread-178514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:15:24.805 [INFO] [Thread-178514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:15:24.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:15:24.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:15:25.657 [DEBUG] [Thread-178514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:15:25.657 [DEBUG] [Thread-178514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:15:25.705 [DEBUG] [Thread-178514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:15:25.705 [DEBUG] [Thread-178514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:15:25.715 [DEBUG] [Thread-178514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:15:25.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:15:25.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:15:25.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:15:25.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:15:25.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:15:25.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:15:25.751 [DEBUG] [Thread-178514] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:15:27.918 [DEBUG] [Thread-178516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:41.548 [DEBUG] [Thread-178517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:42.964 [DEBUG] [Thread-178518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:50.653 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:50.654 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:55.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:15:55.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:15:55.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-04-11T23:15:57.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 15, 42), -0.04474, 100.224, 0.0, 15.4915, 11.9186, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:15:57.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:15:42
2026-04-11T23:15:57.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:15:57.554 [DEBUG] [Thread-178519] [transport.py] [_log()] starting thread (client mode): 0xb0fce0b0
2026-04-11T23:15:57.554 [DEBUG] [Thread-178519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:15:57.576 [DEBUG] [Thread-178519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:15:57.577 [INFO] [Thread-178519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:15:57.580 [DEBUG] [Thread-178519] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:15:57.580 [DEBUG] [Thread-178519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:15:57.580 [DEBUG] [Thread-178519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] client lang: <none>
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] server lang: <none>
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] kex follows: False
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:15:57.581 [DEBUG] [Thread-178519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:15:57.582 [DEBUG] [Thread-178519] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:15:57.582 [DEBUG] [Thread-178519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:15:57.582 [DEBUG] [Thread-178519] [transport.py] [_log()] Compression: none
2026-04-11T23:15:57.582 [DEBUG] [Thread-178519] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:15:57.602 [DEBUG] [Thread-178519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:15:57.603 [DEBUG] [Thread-178519] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:15:57.603 [DEBUG] [Thread-178519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:15:57.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:15:57.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:15:57.606 [DEBUG] [Thread-178519] [transport.py] [_log()] userauth is OK
2026-04-11T23:15:57.606 [DEBUG] [Thread-178519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:15:57.606 [DEBUG] [Thread-178519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:15:57.606 [DEBUG] [Thread-178519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:15:57.606 [DEBUG] [Thread-178519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:15:57.641 [INFO] [Thread-178519] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:15:57.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:15:57.997 [DEBUG] [Thread-178521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:15:58.451 [DEBUG] [Thread-178519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:15:58.451 [DEBUG] [Thread-178519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:15:58.452 [DEBUG] [Thread-178519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:15:58.494 [DEBUG] [Thread-178519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:15:58.494 [DEBUG] [Thread-178519] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:15:58.500 [DEBUG] [Thread-178519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:15:58.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:15:58.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:15:58.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:15:58.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:15:58.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:15:58.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:15:58.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:15:58.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:15:58.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:15:58.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.885529 -999.00  +11.50  13.14     97  +11.10 1 3 1 3 1     0    0 0.39 0.19 ----- 13.1 13.1 297.8 15.8 13.1 -1.1 13.0 -0.5 12.6 -0.6 13.0 -0.7
2026-04-11T23:15:58.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:15:58.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:15:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.885529
2026-04-11T23:15:58.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:15:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:15:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:15:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:15:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:15:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:15:42', tmtdew=-0.04474, humidity=100.224, cloud=0.0, wind=15.4915, temperature=11.9186, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:15:09.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:15:58.532 [DEBUG] [Thread-178519] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:15:58.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:15:58.627 [DEBUG] [Thread-178523] [transport.py] [_log()] starting thread (client mode): 0xb0fccf10
2026-04-11T23:15:58.627 [DEBUG] [Thread-178523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:15:58.641 [DEBUG] [Thread-178523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:15:58.641 [INFO] [Thread-178523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:15:58.649 [DEBUG] [Thread-178523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:15:58.649 [DEBUG] [Thread-178523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:15:58.649 [DEBUG] [Thread-178523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:15:58.649 [DEBUG] [Thread-178523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:58.649 [DEBUG] [Thread-178523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] client lang: <none>
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] server lang: <none>
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] kex follows: False
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] Compression: none
2026-04-11T23:15:58.650 [DEBUG] [Thread-178523] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:15:58.707 [DEBUG] [Thread-178523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:15:58.707 [DEBUG] [Thread-178523] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:15:58.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:15:58.708 [DEBUG] [Thread-178523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:15:58.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:15:58.762 [DEBUG] [Thread-178523] [transport.py] [_log()] userauth is OK
2026-04-11T23:15:58.763 [DEBUG] [Thread-178523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:15:58.763 [DEBUG] [Thread-178523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:15:58.763 [DEBUG] [Thread-178523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:15:58.763 [DEBUG] [Thread-178523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:15:58.788 [INFO] [Thread-178523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:15:58.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:15:58.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:15:59.631 [DEBUG] [Thread-178523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:15:59.631 [DEBUG] [Thread-178523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:15:59.679 [DEBUG] [Thread-178523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:15:59.680 [DEBUG] [Thread-178523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:15:59.689 [DEBUG] [Thread-178523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:15:59.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:15:59.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:15:59.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-04-11T23:15:59.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:15:59.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:15:59.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:15:59.724 [DEBUG] [Thread-178523] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:16:13.040 [DEBUG] [Thread-178525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:16:28.088 [DEBUG] [Thread-178526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:16:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:16:29.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:16:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:16:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 16, 17), 0.032615, 100.079, 0.0, 16.551, 11.4924, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:16:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:16:17
2026-04-11T23:16:31.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:16:31.652 [DEBUG] [Thread-178527] [transport.py] [_log()] starting thread (client mode): 0xa7956800
2026-04-11T23:16:31.652 [DEBUG] [Thread-178527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:16:31.672 [DEBUG] [Thread-178527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:16:31.673 [INFO] [Thread-178527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] client lang: <none>
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] server lang: <none>
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] kex follows: False
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:16:31.676 [DEBUG] [Thread-178527] [transport.py] [_log()] Compression: none
2026-04-11T23:16:31.677 [DEBUG] [Thread-178527] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:16:31.693 [DEBUG] [Thread-178527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:16:31.694 [DEBUG] [Thread-178527] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:16:31.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:16:31.695 [DEBUG] [Thread-178527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:16:31.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:16:31.697 [DEBUG] [Thread-178527] [transport.py] [_log()] userauth is OK
2026-04-11T23:16:31.697 [DEBUG] [Thread-178527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:16:31.697 [DEBUG] [Thread-178527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:16:31.697 [DEBUG] [Thread-178527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:16:31.697 [DEBUG] [Thread-178527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:16:31.714 [INFO] [Thread-178527] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:16:31.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:16:32.511 [DEBUG] [Thread-178527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:16:32.511 [DEBUG] [Thread-178527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:16:32.511 [DEBUG] [Thread-178527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:16:32.552 [DEBUG] [Thread-178527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:16:32.552 [DEBUG] [Thread-178527] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:16:32.555 [DEBUG] [Thread-178527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:16:32.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:16:32.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:16:32.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:16:32.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:16:32.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:16:32.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:16:32.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:16:32.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:16:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:16:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.885877 -999.00  +11.50  13.91     97  +11.10 1 3 1 3 1     0    0 0.40 0.29 ----- 13.9 13.9 299.0 17.3 13.1 -1.2 12.9 -0.6 12.6 -1.1 12.9 -0.7
2026-04-11T23:16:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:16:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:16:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.885877
2026-04-11T23:16:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:16:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:16:32.578 [DEBUG] [Thread-178527] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:16:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:16:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:16:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:16:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:16:17', tmtdew=0.032615, humidity=100.079, cloud=0.0, wind=16.551, temperature=11.4924, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:15:39.773', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:16:32.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:16:32.674 [DEBUG] [Thread-178530] [transport.py] [_log()] starting thread (client mode): 0xa7954be0
2026-04-11T23:16:32.674 [DEBUG] [Thread-178530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:16:32.689 [DEBUG] [Thread-178530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:16:32.689 [INFO] [Thread-178530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:16:32.697 [DEBUG] [Thread-178530] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:16:32.697 [DEBUG] [Thread-178530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] client lang: <none>
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] server lang: <none>
2026-04-11T23:16:32.698 [DEBUG] [Thread-178530] [transport.py] [_log()] kex follows: False
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] Compression: none
2026-04-11T23:16:32.699 [DEBUG] [Thread-178530] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:16:32.761 [DEBUG] [Thread-178530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:16:32.762 [DEBUG] [Thread-178530] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:16:32.762 [DEBUG] [Thread-178530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:16:32.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:16:32.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:16:32.822 [DEBUG] [Thread-178530] [transport.py] [_log()] userauth is OK
2026-04-11T23:16:32.822 [DEBUG] [Thread-178530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:16:32.822 [DEBUG] [Thread-178530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:16:32.822 [DEBUG] [Thread-178530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:16:32.823 [DEBUG] [Thread-178530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:16:32.847 [INFO] [Thread-178530] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:16: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-04-11T23:16:32.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:16:33.706 [DEBUG] [Thread-178530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:16:33.706 [DEBUG] [Thread-178530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:16:33.758 [DEBUG] [Thread-178530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:16:33.759 [DEBUG] [Thread-178530] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:16:33.772 [DEBUG] [Thread-178530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:16:33.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:16:33.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-04-11T23:16:33.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:16:33.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:16:33.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:16:33.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:16:33.808 [DEBUG] [Thread-178530] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:16:41.604 [DEBUG] [Thread-178532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:16:43.123 [DEBUG] [Thread-178533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:16:50.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:16:50.861 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:16:58.189 [DEBUG] [Thread-178534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:17:03.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:17: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-04-11T23:17:05.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 16, 52), -0.04466, 100.224, 0.0, 18.2434, 11.8522, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:17:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:16:52
2026-04-11T23:17:05.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:17:05.619 [DEBUG] [Thread-178535] [transport.py] [_log()] starting thread (client mode): 0xb0fcd6c0
2026-04-11T23:17:05.619 [DEBUG] [Thread-178535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:17:05.641 [DEBUG] [Thread-178535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:17:05.642 [INFO] [Thread-178535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] client lang: <none>
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] server lang: <none>
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] kex follows: False
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:17:05.645 [DEBUG] [Thread-178535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:17:05.646 [DEBUG] [Thread-178535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:17:05.646 [DEBUG] [Thread-178535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:17:05.646 [DEBUG] [Thread-178535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:17:05.646 [DEBUG] [Thread-178535] [transport.py] [_log()] Compression: none
2026-04-11T23:17:05.646 [DEBUG] [Thread-178535] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:17:05.665 [DEBUG] [Thread-178535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:17:05.665 [DEBUG] [Thread-178535] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:17:05.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:17:05.666 [DEBUG] [Thread-178535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:17:05.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:17:05.668 [DEBUG] [Thread-178535] [transport.py] [_log()] userauth is OK
2026-04-11T23:17:05.669 [DEBUG] [Thread-178535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:17:05.669 [DEBUG] [Thread-178535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:17:05.669 [DEBUG] [Thread-178535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:17:05.669 [DEBUG] [Thread-178535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:17:05.705 [INFO] [Thread-178535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:17:05.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:17:06.486 [DEBUG] [Thread-178535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:17:06.486 [DEBUG] [Thread-178535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:17:06.486 [DEBUG] [Thread-178535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:17:06.527 [DEBUG] [Thread-178535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:17:06.527 [DEBUG] [Thread-178535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:17:06.530 [DEBUG] [Thread-178535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:17:06.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:17:06.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:17:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:17:06.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:17:06.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:17:06.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:17:06.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:17:06.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:17:06.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:17:06.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.886224 -999.00  +11.50  13.54     97  +11.10 1 3 1 3 1     0    0 0.40 0.41 ----- 13.5 13.5 289.4 16.0 13.1 -1.1 12.9 -0.6 12.6 -0.6 12.9 -0.7
2026-04-11T23:17:06.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:17:06.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:17:06.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.886224
2026-04-11T23:17:06.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:17:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:17:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:17:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:17:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:17:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:16:52', tmtdew=-0.04466, humidity=100.224, cloud=0.0, wind=18.2434, temperature=11.8522, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:16:09.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:17:06.572 [DEBUG] [Thread-178535] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:17:06.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:17:06.665 [DEBUG] [Thread-178538] [transport.py] [_log()] starting thread (client mode): 0xb0fce740
2026-04-11T23:17:06.665 [DEBUG] [Thread-178538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:17:06.680 [DEBUG] [Thread-178538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:17:06.680 [INFO] [Thread-178538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:17:06.687 [DEBUG] [Thread-178538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] client lang: <none>
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] server lang: <none>
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] kex follows: False
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] Compression: none
2026-04-11T23:17:06.688 [DEBUG] [Thread-178538] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:17:06.747 [DEBUG] [Thread-178538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:17:06.748 [DEBUG] [Thread-178538] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:17:06.748 [DEBUG] [Thread-178538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:17:06.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:17:06.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:17:06.807 [DEBUG] [Thread-178538] [transport.py] [_log()] userauth is OK
2026-04-11T23:17:06.807 [DEBUG] [Thread-178538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:17:06.807 [DEBUG] [Thread-178538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:17:06.808 [DEBUG] [Thread-178538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:17:06.808 [DEBUG] [Thread-178538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:17:06.826 [INFO] [Thread-178538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:17:06.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:17:06.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:17:07.745 [DEBUG] [Thread-178538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:17:07.745 [DEBUG] [Thread-178538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:17:07.792 [DEBUG] [Thread-178538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:17:07.792 [DEBUG] [Thread-178538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:17:07.801 [DEBUG] [Thread-178538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:17:07.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:17:07.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:17:07.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:17:07.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:17:07.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:17:07.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:17:07.834 [DEBUG] [Thread-178538] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:17:13.228 [DEBUG] [Thread-178540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:28.282 [DEBUG] [Thread-178541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:17:37.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:17:37.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-04-11T23:17:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 17, 28), -0.01729, 100.079, 0.0, 15.8454, 11.3595, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:17:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:17:28
2026-04-11T23:17:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:17:39.703 [DEBUG] [Thread-178542] [transport.py] [_log()] starting thread (client mode): 0xb0fcc250
2026-04-11T23:17:39.703 [DEBUG] [Thread-178542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:17:39.722 [DEBUG] [Thread-178542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:17:39.722 [INFO] [Thread-178542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] client lang: <none>
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] server lang: <none>
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] kex follows: False
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] Compression: none
2026-04-11T23:17:39.724 [DEBUG] [Thread-178542] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:17:39.736 [DEBUG] [Thread-178542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:17:39.737 [DEBUG] [Thread-178542] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:17:39.737 [DEBUG] [Thread-178542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:17:39.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:17:39.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:17:39.739 [DEBUG] [Thread-178542] [transport.py] [_log()] userauth is OK
2026-04-11T23:17:39.739 [DEBUG] [Thread-178542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:17:39.739 [DEBUG] [Thread-178542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:17:39.739 [DEBUG] [Thread-178542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:17:39.739 [DEBUG] [Thread-178542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:17:39.757 [INFO] [Thread-178542] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:17:39.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:17:40.519 [DEBUG] [Thread-178542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:17:40.519 [DEBUG] [Thread-178542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:17:40.520 [DEBUG] [Thread-178542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:17:40.560 [DEBUG] [Thread-178542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:17:40.560 [DEBUG] [Thread-178542] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:17:40.564 [DEBUG] [Thread-178542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:17:40.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:17:40.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:17:40.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:17:40.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:17:40.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:17:40.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:17:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:17:40.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:17:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:17:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.886918 -999.00  +11.40  13.93     97  +11.10 1 3 1 3 1     0    0 0.40 0.45 ----- 13.9 13.9 289.8 17.7 13.0 -1.3 12.9 -0.6 12.6 -1.2 12.9 -0.8
2026-04-11T23:17:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:17:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:17:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.886918
2026-04-11T23:17:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:17:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:17:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:17:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:17:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:17:40.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:17:28', tmtdew=-0.01729, humidity=100.079, cloud=0.0, wind=15.8454, temperature=11.3595, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:17:09.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:17:40.592 [DEBUG] [Thread-178542] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:17:40.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:17:40.691 [DEBUG] [Thread-178545] [transport.py] [_log()] starting thread (client mode): 0xb0fcca60
2026-04-11T23:17:40.691 [DEBUG] [Thread-178545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:17:40.706 [DEBUG] [Thread-178545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:17:40.706 [INFO] [Thread-178545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] client lang: <none>
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] server lang: <none>
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] kex follows: False
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:17:40.714 [DEBUG] [Thread-178545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:17:40.715 [DEBUG] [Thread-178545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:17:40.715 [DEBUG] [Thread-178545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:17:40.715 [DEBUG] [Thread-178545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:17:40.715 [DEBUG] [Thread-178545] [transport.py] [_log()] Compression: none
2026-04-11T23:17:40.715 [DEBUG] [Thread-178545] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:17:40.772 [DEBUG] [Thread-178545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:17:40.773 [DEBUG] [Thread-178545] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:17:40.773 [DEBUG] [Thread-178545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:17:40.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:17:40.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:17:40.828 [DEBUG] [Thread-178545] [transport.py] [_log()] userauth is OK
2026-04-11T23:17:40.828 [DEBUG] [Thread-178545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:17:40.829 [DEBUG] [Thread-178545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:17:40.829 [DEBUG] [Thread-178545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:17:40.829 [DEBUG] [Thread-178545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:17:40.850 [INFO] [Thread-178545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:17:40.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:17:40.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:17:41.669 [DEBUG] [Thread-178547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:41.688 [DEBUG] [Thread-178545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:17:41.688 [DEBUG] [Thread-178545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:17:41.736 [DEBUG] [Thread-178545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:17:41.736 [DEBUG] [Thread-178545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:17:41.746 [DEBUG] [Thread-178545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:17:41.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:17:41.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:17:41.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-04-11T23:17:41.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:17:41.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:17:41.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:17:41.782 [DEBUG] [Thread-178545] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:17:43.318 [DEBUG] [Thread-178548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:51.066 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:51.067 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:17:58.370 [DEBUG] [Thread-178549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:11.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:18:11.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:18:11.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:18:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 18, 3), -0.01478, 100.062, 0.0, 16.3922, 11.3595, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:18:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:18:03
2026-04-11T23:18:13.408 [DEBUG] [Thread-178550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:18:13.629 [DEBUG] [Thread-178551] [transport.py] [_log()] starting thread (client mode): 0xb0fceda0
2026-04-11T23:18:13.629 [DEBUG] [Thread-178551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:18:13.650 [DEBUG] [Thread-178551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:18:13.650 [INFO] [Thread-178551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:18:13.654 [DEBUG] [Thread-178551] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:18:13.654 [DEBUG] [Thread-178551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:18:13.654 [DEBUG] [Thread-178551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:18:13.654 [DEBUG] [Thread-178551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] client lang: <none>
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] server lang: <none>
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] kex follows: False
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:18:13.655 [DEBUG] [Thread-178551] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:18:13.656 [DEBUG] [Thread-178551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:18:13.656 [DEBUG] [Thread-178551] [transport.py] [_log()] Compression: none
2026-04-11T23:18:13.656 [DEBUG] [Thread-178551] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:18:13.680 [DEBUG] [Thread-178551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:18:13.680 [DEBUG] [Thread-178551] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:18:13.681 [DEBUG] [Thread-178551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:18:13.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:18:13.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:18:13.685 [DEBUG] [Thread-178551] [transport.py] [_log()] userauth is OK
2026-04-11T23:18:13.685 [DEBUG] [Thread-178551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:18:13.685 [DEBUG] [Thread-178551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:18:13.685 [DEBUG] [Thread-178551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:18:13.685 [DEBUG] [Thread-178551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:18:13.721 [INFO] [Thread-178551] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:18:13.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:18:14.518 [DEBUG] [Thread-178551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:18:14.519 [DEBUG] [Thread-178551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:18:14.519 [DEBUG] [Thread-178551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:18:14.561 [DEBUG] [Thread-178551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:18:14.561 [DEBUG] [Thread-178551] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:18:14.564 [DEBUG] [Thread-178551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:18:14.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:18:14.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:18:14.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:18:14.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:18:14.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:18:14.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:18:14.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:18:14.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:18:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:18:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.887265 -999.00  +11.40  13.82     97  +11.00 1 3 1 3 1     0    0 0.40 0.47 ----- 13.8 13.8 297.6 17.7 13.0 -1.2 12.9 -0.6 12.6 -0.9 12.9 -0.7
2026-04-11T23:18:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:18:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:18:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.887265
2026-04-11T23:18:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:18:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:18:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:18:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:18:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:18:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:18:03', tmtdew=-0.01478, humidity=100.062, cloud=0.0, wind=16.3922, temperature=11.3595, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:17:39.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:18:14.590 [DEBUG] [Thread-178551] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:18:14.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:18:14.682 [DEBUG] [Thread-178554] [transport.py] [_log()] starting thread (client mode): 0xb0f6c6d0
2026-04-11T23:18:14.682 [DEBUG] [Thread-178554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:18:14.696 [DEBUG] [Thread-178554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:18:14.696 [INFO] [Thread-178554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] client lang: <none>
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] server lang: <none>
2026-04-11T23:18:14.704 [DEBUG] [Thread-178554] [transport.py] [_log()] kex follows: False
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] Compression: none
2026-04-11T23:18:14.705 [DEBUG] [Thread-178554] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:18:14.763 [DEBUG] [Thread-178554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:18:14.763 [DEBUG] [Thread-178554] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:18:14.764 [DEBUG] [Thread-178554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:18:14.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:18:14.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:18:14.819 [DEBUG] [Thread-178554] [transport.py] [_log()] userauth is OK
2026-04-11T23:18:14.820 [DEBUG] [Thread-178554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:18:14.820 [DEBUG] [Thread-178554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:18:14.820 [DEBUG] [Thread-178554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:18:14.820 [DEBUG] [Thread-178554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:18:14.839 [INFO] [Thread-178554] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:18:14.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:18:14.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:18:15.680 [DEBUG] [Thread-178554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:18:15.680 [DEBUG] [Thread-178554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:18:15.728 [DEBUG] [Thread-178554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:18:15.728 [DEBUG] [Thread-178554] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:18:15.738 [DEBUG] [Thread-178554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:18:15.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:18:15.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-04-11T23:18:15.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-04-11T23:18:15.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:18:15.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:18:15.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:18:15.775 [DEBUG] [Thread-178554] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:18:28.443 [DEBUG] [Thread-178556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:41.734 [DEBUG] [Thread-178557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:43.494 [DEBUG] [Thread-178558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:18:45.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:18:45.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-04-11T23:18:47.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 18, 39), -0.0245, 100.091, 0.0, 19.4076, 11.7859, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:18:47.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:18:39
2026-04-11T23:18:47.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:18:47.614 [DEBUG] [Thread-178559] [transport.py] [_log()] starting thread (client mode): 0xa7956050
2026-04-11T23:18:47.614 [DEBUG] [Thread-178559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:18:47.635 [DEBUG] [Thread-178559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:18:47.635 [INFO] [Thread-178559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:18:47.637 [DEBUG] [Thread-178559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] client lang: <none>
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] server lang: <none>
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] kex follows: False
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] Compression: none
2026-04-11T23:18:47.638 [DEBUG] [Thread-178559] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:18:47.653 [DEBUG] [Thread-178559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:18:47.653 [DEBUG] [Thread-178559] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:18:47.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:18:47.655 [DEBUG] [Thread-178559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:18:47.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:18:47.656 [DEBUG] [Thread-178559] [transport.py] [_log()] userauth is OK
2026-04-11T23:18:47.657 [DEBUG] [Thread-178559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:18:47.657 [DEBUG] [Thread-178559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:18:47.657 [DEBUG] [Thread-178559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:18:47.657 [DEBUG] [Thread-178559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:18:47.682 [INFO] [Thread-178559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:18:47.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:18:48.429 [DEBUG] [Thread-178559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:18:48.430 [DEBUG] [Thread-178559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:18:48.430 [DEBUG] [Thread-178559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:18:48.471 [DEBUG] [Thread-178559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:18:48.471 [DEBUG] [Thread-178559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:18:48.474 [DEBUG] [Thread-178559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:18:48.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:18:48.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:18:48.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:18:48.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:18:48.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:18:48.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:18:48.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:18:48.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:18:48.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:18:48.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.887613 -999.00  +11.50  15.79     97  +11.10 1 3 1 3 1     0    0 0.41 0.55 ----- 15.8 15.8 293.2 18.4 13.0 -1.4 12.9 -0.6 12.5 -1.3 12.9 -0.6
2026-04-11T23:18:48.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:18:48.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:18:48.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.887613
2026-04-11T23:18:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:18:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:18:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:18:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:18:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:18:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:18:39', tmtdew=-0.0245, humidity=100.091, cloud=0.0, wind=19.4076, temperature=11.7859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:18:09.763', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:18:48.495 [DEBUG] [Thread-178559] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:18:48.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:18:48.588 [DEBUG] [Thread-178562] [transport.py] [_log()] starting thread (client mode): 0xa7954ee0
2026-04-11T23:18:48.588 [DEBUG] [Thread-178562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:18:48.602 [DEBUG] [Thread-178562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:18:48.602 [INFO] [Thread-178562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:48.610 [DEBUG] [Thread-178562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] client lang: <none>
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] server lang: <none>
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] kex follows: False
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:18:48.611 [DEBUG] [Thread-178562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:18:48.612 [DEBUG] [Thread-178562] [transport.py] [_log()] Compression: none
2026-04-11T23:18:48.612 [DEBUG] [Thread-178562] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:18:48.670 [DEBUG] [Thread-178562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:18:48.670 [DEBUG] [Thread-178562] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:18:48.671 [DEBUG] [Thread-178562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:18:48.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:18:48.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:18:48.726 [DEBUG] [Thread-178562] [transport.py] [_log()] userauth is OK
2026-04-11T23:18:48.726 [DEBUG] [Thread-178562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:18:48.726 [DEBUG] [Thread-178562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:18:48.727 [DEBUG] [Thread-178562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:18:48.727 [DEBUG] [Thread-178562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:18:48.748 [INFO] [Thread-178562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:18:48.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:18:48.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:18:49.663 [DEBUG] [Thread-178562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:18:49.663 [DEBUG] [Thread-178562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:18:49.711 [DEBUG] [Thread-178562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:18:49.712 [DEBUG] [Thread-178562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:18:49.721 [DEBUG] [Thread-178562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:18:49.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:18:49.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-04-11T23:18:49.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:18:49.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:18:49.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:18:49.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:18:49.758 [DEBUG] [Thread-178562] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:18:51.272 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:51.274 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:18:58.530 [DEBUG] [Thread-178564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:13.581 [DEBUG] [Thread-178565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:19:19.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:19:19.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-04-11T23:19:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 18, 39), -0.0245, 100.091, 0.0, 19.4076, 11.7859, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:19:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:18:39
2026-04-11T23:19:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:19:21.579 [DEBUG] [Thread-178566] [transport.py] [_log()] starting thread (client mode): 0xb0fcec50
2026-04-11T23:19:21.579 [DEBUG] [Thread-178566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:19:21.602 [DEBUG] [Thread-178566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:19:21.602 [INFO] [Thread-178566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:19:21.603 [DEBUG] [Thread-178566] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] client lang: <none>
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] server lang: <none>
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] kex follows: False
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] Compression: none
2026-04-11T23:19:21.604 [DEBUG] [Thread-178566] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:19:21.621 [DEBUG] [Thread-178566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:19:21.621 [DEBUG] [Thread-178566] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:19:21.622 [DEBUG] [Thread-178566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:19:21.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:19:21.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:19:21.625 [DEBUG] [Thread-178566] [transport.py] [_log()] userauth is OK
2026-04-11T23:19:21.626 [DEBUG] [Thread-178566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:19:21.626 [DEBUG] [Thread-178566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:19:21.626 [DEBUG] [Thread-178566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:19:21.626 [DEBUG] [Thread-178566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:19:21.651 [INFO] [Thread-178566] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:19:21.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:19:22.429 [DEBUG] [Thread-178566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:19:22.429 [DEBUG] [Thread-178566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:19:22.430 [DEBUG] [Thread-178566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:19:22.471 [DEBUG] [Thread-178566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:19:22.471 [DEBUG] [Thread-178566] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:19:22.475 [DEBUG] [Thread-178566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:19:22.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:19:22.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:19:22.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:19:22.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:19:22.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:19:22.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:19:22.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:19:22.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:19:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:19:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.887960 -999.00  +11.50  14.26     97  +11.10 1 3 1 3 1     0    0 0.40 0.40 ----- 14.3 14.3 297.0 16.6 13.0 -1.1 12.9 -0.5 12.6 -0.9 12.9 -0.7
2026-04-11T23:19:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:19:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:19:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.887960
2026-04-11T23:19:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:19:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:19:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:19:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:19:22.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:19:22.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:18:39', tmtdew=-0.0245, humidity=100.091, cloud=0.0, wind=19.4076, temperature=11.7859, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:18:39.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:19:22.496 [DEBUG] [Thread-178566] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:19:22.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:19:22.597 [DEBUG] [Thread-178569] [transport.py] [_log()] starting thread (client mode): 0xb0fcd3f0
2026-04-11T23:19:22.597 [DEBUG] [Thread-178569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:19:22.613 [DEBUG] [Thread-178569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:19:22.613 [INFO] [Thread-178569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] client lang: <none>
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] server lang: <none>
2026-04-11T23:19:22.621 [DEBUG] [Thread-178569] [transport.py] [_log()] kex follows: False
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] Compression: none
2026-04-11T23:19:22.622 [DEBUG] [Thread-178569] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:19:22.679 [DEBUG] [Thread-178569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:19:22.680 [DEBUG] [Thread-178569] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:19:22.681 [DEBUG] [Thread-178569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:19:22.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:19:22.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:19:22.736 [DEBUG] [Thread-178569] [transport.py] [_log()] userauth is OK
2026-04-11T23:19:22.736 [DEBUG] [Thread-178569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:19:22.737 [DEBUG] [Thread-178569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:19:22.737 [DEBUG] [Thread-178569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:19:22.737 [DEBUG] [Thread-178569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:19:22.755 [INFO] [Thread-178569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:19:22.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:19:22.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:19:23.565 [DEBUG] [Thread-178569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:19:23.565 [DEBUG] [Thread-178569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:19:23.613 [DEBUG] [Thread-178569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:19:23.613 [DEBUG] [Thread-178569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:19:23.622 [DEBUG] [Thread-178569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:19:23.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:19:23.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:19:23.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-04-11T23:19:23.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:19:23.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:19:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:19:23.662 [DEBUG] [Thread-178569] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:19:28.615 [DEBUG] [Thread-178571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:41.790 [DEBUG] [Thread-178572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:43.673 [DEBUG] [Thread-178573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:51.477 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:51.479 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:19:53.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:19:53.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:19:53.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-04-11T23:19:54.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 19, 14), 0.03526, 100.062, 0.0, 18.0158, 11.3764, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:19:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:19:14
2026-04-11T23:19:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:19:55.565 [DEBUG] [Thread-178574] [transport.py] [_log()] starting thread (client mode): 0xb0f6c310
2026-04-11T23:19:55.565 [DEBUG] [Thread-178574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:19:55.584 [DEBUG] [Thread-178574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:19:55.584 [INFO] [Thread-178574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:19:55.587 [DEBUG] [Thread-178574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] client lang: <none>
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] server lang: <none>
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] kex follows: False
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] Compression: none
2026-04-11T23:19:55.588 [DEBUG] [Thread-178574] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:19:55.604 [DEBUG] [Thread-178574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:19:55.605 [DEBUG] [Thread-178574] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:19:55.605 [DEBUG] [Thread-178574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:19:55.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:19:55.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:19:55.607 [DEBUG] [Thread-178574] [transport.py] [_log()] userauth is OK
2026-04-11T23:19:55.608 [DEBUG] [Thread-178574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:19:55.608 [DEBUG] [Thread-178574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:19:55.608 [DEBUG] [Thread-178574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:19:55.608 [DEBUG] [Thread-178574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:19:55.632 [INFO] [Thread-178574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:19:55.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:19:56.452 [DEBUG] [Thread-178574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:19:56.452 [DEBUG] [Thread-178574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:19:56.453 [DEBUG] [Thread-178574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:19:56.495 [DEBUG] [Thread-178574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:19:56.495 [DEBUG] [Thread-178574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:19:56.500 [DEBUG] [Thread-178574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:19:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:19:56.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:19:56.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:19:56.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:19:56.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:19:56.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:19:56.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:19:56.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:19:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:19:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.888307 -999.00  +11.40  14.88     97  +11.10 1 3 1 3 1     0    0 0.39 0.14 ----- 14.9 14.9 291.6 18.3 13.0 -1.1 12.9 -0.6 12.6 -1.0 12.9 -0.6
2026-04-11T23:19:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:19:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:19:56.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.888307
2026-04-11T23:19:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:19:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:19:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:19:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:19:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:19:56.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:19:14', tmtdew=0.03526, humidity=100.062, cloud=0.0, wind=18.0158, temperature=11.3764, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:19:09.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:19:56.539 [DEBUG] [Thread-178574] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:19:56.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:19:56.634 [DEBUG] [Thread-178577] [transport.py] [_log()] starting thread (client mode): 0xb0f6e170
2026-04-11T23:19:56.634 [DEBUG] [Thread-178577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:19:56.648 [DEBUG] [Thread-178577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:19:56.649 [INFO] [Thread-178577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:19:56.656 [DEBUG] [Thread-178577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:19:56.656 [DEBUG] [Thread-178577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] client lang: <none>
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] server lang: <none>
2026-04-11T23:19:56.657 [DEBUG] [Thread-178577] [transport.py] [_log()] kex follows: False
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] Compression: none
2026-04-11T23:19:56.658 [DEBUG] [Thread-178577] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:19:56.715 [DEBUG] [Thread-178577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:19:56.715 [DEBUG] [Thread-178577] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:19:56.716 [DEBUG] [Thread-178577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:19:56.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:19:56.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:19:56.770 [DEBUG] [Thread-178577] [transport.py] [_log()] userauth is OK
2026-04-11T23:19:56.771 [DEBUG] [Thread-178577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:19:56.771 [DEBUG] [Thread-178577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:19:56.771 [DEBUG] [Thread-178577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:19:56.771 [DEBUG] [Thread-178577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:19:56.790 [INFO] [Thread-178577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:19:56.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:19:56.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:19:57.597 [DEBUG] [Thread-178577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:19:57.598 [DEBUG] [Thread-178577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:19:57.646 [DEBUG] [Thread-178577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:19:57.647 [DEBUG] [Thread-178577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:19:57.657 [DEBUG] [Thread-178577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:19:57.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:19:57.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:19:57.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:19:57.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:19:57.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:19:57.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:19:57.693 [DEBUG] [Thread-178577] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:19:58.714 [DEBUG] [Thread-178579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:13.765 [DEBUG] [Thread-178580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:27.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:20:27.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:20:27.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-04-11T23:20:28.802 [DEBUG] [Thread-178581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 19, 50), -0.03964, 100.191, 0.0, 19.4076, 11.8522, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:20:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:19:50
2026-04-11T23:20:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:20:29.584 [DEBUG] [Thread-178582] [transport.py] [_log()] starting thread (client mode): 0xa7955210
2026-04-11T23:20:29.584 [DEBUG] [Thread-178582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:20:29.604 [DEBUG] [Thread-178582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:20:29.605 [INFO] [Thread-178582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] client lang: <none>
2026-04-11T23:20:29.607 [DEBUG] [Thread-178582] [transport.py] [_log()] server lang: <none>
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] kex follows: False
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] Compression: none
2026-04-11T23:20:29.608 [DEBUG] [Thread-178582] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:20:29.627 [DEBUG] [Thread-178582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:20:29.628 [DEBUG] [Thread-178582] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:20:29.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:20:29.629 [DEBUG] [Thread-178582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:20:29.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:20:29.632 [DEBUG] [Thread-178582] [transport.py] [_log()] userauth is OK
2026-04-11T23:20:29.632 [DEBUG] [Thread-178582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:20:29.632 [DEBUG] [Thread-178582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:20:29.632 [DEBUG] [Thread-178582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:20:29.632 [DEBUG] [Thread-178582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:20:29.655 [INFO] [Thread-178582] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:20:29.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:20:30.956 [DEBUG] [Thread-178582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:20:30.956 [DEBUG] [Thread-178582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:20:30.957 [DEBUG] [Thread-178582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:20:30.997 [DEBUG] [Thread-178582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:20:30.997 [DEBUG] [Thread-178582] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:20:31.001 [DEBUG] [Thread-178582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:20:31.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:20:31.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:20:31.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:20:31.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:20:31.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:20:31.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:20:31.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:20:31.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:20:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:20:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.888654 -999.00  +11.50  14.95     97  +11.10 1 3 1 3 1     0    0 0.38 -0.05 ----- 14.9 14.9 292.6 16.9 13.0 -1.0 12.9 -0.4 12.6 -1.0 12.8 -0.7
2026-04-11T23:20:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:20:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:20:31.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.888654
2026-04-11T23:20:31.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:20:31.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:20:31.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:20:31.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:20:31.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:20:31.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:19:50', tmtdew=-0.03964, humidity=100.191, cloud=0.0, wind=19.4076, temperature=11.8522, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:19:39.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:20:31.029 [DEBUG] [Thread-178582] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:20:31.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:20:31.122 [DEBUG] [Thread-178585] [transport.py] [_log()] starting thread (client mode): 0xa79563e0
2026-04-11T23:20:31.122 [DEBUG] [Thread-178585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:20:31.137 [DEBUG] [Thread-178585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:20:31.138 [INFO] [Thread-178585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] client lang: <none>
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] server lang: <none>
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] kex follows: False
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:20:31.147 [DEBUG] [Thread-178585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:20:31.148 [DEBUG] [Thread-178585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:20:31.148 [DEBUG] [Thread-178585] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:20:31.148 [DEBUG] [Thread-178585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:20:31.148 [DEBUG] [Thread-178585] [transport.py] [_log()] Compression: none
2026-04-11T23:20:31.148 [DEBUG] [Thread-178585] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:20:31.205 [DEBUG] [Thread-178585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:20:31.205 [DEBUG] [Thread-178585] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:20:31.206 [DEBUG] [Thread-178585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:20:31.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:20:31.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:20:31.261 [DEBUG] [Thread-178585] [transport.py] [_log()] userauth is OK
2026-04-11T23:20:31.262 [DEBUG] [Thread-178585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:20:31.262 [DEBUG] [Thread-178585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:20:31.262 [DEBUG] [Thread-178585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:20:31.262 [DEBUG] [Thread-178585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:20:31.283 [INFO] [Thread-178585] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:20:31.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:20:31.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:20:32.162 [DEBUG] [Thread-178585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:20:32.162 [DEBUG] [Thread-178585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:20:32.210 [DEBUG] [Thread-178585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:20:32.210 [DEBUG] [Thread-178585] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:20:32.218 [DEBUG] [Thread-178585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:20:32.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:20:32.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-04-11T23:20:32.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-04-11T23:20:32.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:20:32.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:20:32.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:20:32.252 [DEBUG] [Thread-178585] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:20:41.846 [DEBUG] [Thread-178587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:43.838 [DEBUG] [Thread-178588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:51.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:51.685 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:20:58.901 [DEBUG] [Thread-178589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:21:02.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:21:02.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-04-11T23:21:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 20, 25), 0.03271, 100.079, 0.0, 15.8278, 11.4095, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:21:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:20:25
2026-04-11T23:21:04.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:21:04.183 [DEBUG] [Thread-178590] [transport.py] [_log()] starting thread (client mode): 0xb39c7d60
2026-04-11T23:21:04.183 [DEBUG] [Thread-178590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:21:04.204 [DEBUG] [Thread-178590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:21:04.204 [INFO] [Thread-178590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:21:04.208 [DEBUG] [Thread-178590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:21:04.208 [DEBUG] [Thread-178590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:21:04.208 [DEBUG] [Thread-178590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:21:04.208 [DEBUG] [Thread-178590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:04.208 [DEBUG] [Thread-178590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:04.208 [DEBUG] [Thread-178590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] client lang: <none>
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] server lang: <none>
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] kex follows: False
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] Compression: none
2026-04-11T23:21:04.209 [DEBUG] [Thread-178590] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:21:04.231 [DEBUG] [Thread-178590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:21:04.231 [DEBUG] [Thread-178590] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:21:04.232 [DEBUG] [Thread-178590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:21:04.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:21:04.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:21:04.276 [DEBUG] [Thread-178590] [transport.py] [_log()] userauth is OK
2026-04-11T23:21:04.277 [DEBUG] [Thread-178590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:21:04.277 [DEBUG] [Thread-178590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:21:04.277 [DEBUG] [Thread-178590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:21:04.277 [DEBUG] [Thread-178590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:21:04.300 [INFO] [Thread-178590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:21:04.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:21:05.103 [DEBUG] [Thread-178590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:21:05.103 [DEBUG] [Thread-178590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:21:05.103 [DEBUG] [Thread-178590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:21:05.144 [DEBUG] [Thread-178590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:21:05.144 [DEBUG] [Thread-178590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:21:05.147 [DEBUG] [Thread-178590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:21:05.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:21:05.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:21:05.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:21:05.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:21:05.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:21:05.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:21:05.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:21:05.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:21:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:21:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.889001 -999.00  +11.50  18.73     97  +11.10 1 3 1 3 1     0    0 0.38 -0.20 ----- 18.7 18.7 274.6 21.4 13.0 -1.0 12.9 -0.8 12.6 -0.5 12.9 -0.6
2026-04-11T23:21:05.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:21:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:21:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.889001
2026-04-11T23:21:05.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:21:05.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:21:05.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:21:05.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:21:05.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:21:05.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:20:25', tmtdew=0.03271, humidity=100.079, cloud=0.0, wind=15.8278, temperature=11.4095, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:20:09.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:21:05.177 [DEBUG] [Thread-178590] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:21:05.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:21:05.276 [DEBUG] [Thread-178593] [transport.py] [_log()] starting thread (client mode): 0xb39c6bf0
2026-04-11T23:21:05.276 [DEBUG] [Thread-178593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:21:05.292 [DEBUG] [Thread-178593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:21:05.292 [INFO] [Thread-178593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:21:05.299 [DEBUG] [Thread-178593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] client lang: <none>
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] server lang: <none>
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] kex follows: False
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] Compression: none
2026-04-11T23:21:05.300 [DEBUG] [Thread-178593] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:21:05.362 [DEBUG] [Thread-178593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:21:05.363 [DEBUG] [Thread-178593] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:21:05.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:21:05.364 [DEBUG] [Thread-178593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:21:05.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:21:05.419 [DEBUG] [Thread-178593] [transport.py] [_log()] userauth is OK
2026-04-11T23:21:05.420 [DEBUG] [Thread-178593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:21:05.420 [DEBUG] [Thread-178593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:21:05.420 [DEBUG] [Thread-178593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:21:05.420 [DEBUG] [Thread-178593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:21:05.438 [INFO] [Thread-178593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:21:05.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:21:05.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:21:06.290 [DEBUG] [Thread-178593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:21:06.290 [DEBUG] [Thread-178593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:21:06.338 [DEBUG] [Thread-178593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:21:06.338 [DEBUG] [Thread-178593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:21:06.348 [DEBUG] [Thread-178593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:21:06.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:21:06.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-04-11T23:21:06.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:21:06.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:21:06.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:21:06.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:21:06.385 [DEBUG] [Thread-178593] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:21:13.937 [DEBUG] [Thread-178595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:28.996 [DEBUG] [Thread-178596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:21:36.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:21:36.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-04-11T23:21:37.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 21, 1), 0.03273, 100.079, 0.0, 16.9751, 11.3429, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:21:37.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:21:01
2026-04-11T23:21:38.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:21:38.295 [DEBUG] [Thread-178597] [transport.py] [_log()] starting thread (client mode): 0xb39c6a10
2026-04-11T23:21:38.295 [DEBUG] [Thread-178597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:21:38.314 [DEBUG] [Thread-178597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:21:38.315 [INFO] [Thread-178597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:38.318 [DEBUG] [Thread-178597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] client lang: <none>
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] server lang: <none>
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] kex follows: False
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] Compression: none
2026-04-11T23:21:38.319 [DEBUG] [Thread-178597] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:21:38.337 [DEBUG] [Thread-178597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:21:38.338 [DEBUG] [Thread-178597] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:21:38.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:21:38.339 [DEBUG] [Thread-178597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:21:38.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:21:38.381 [DEBUG] [Thread-178597] [transport.py] [_log()] userauth is OK
2026-04-11T23:21:38.381 [DEBUG] [Thread-178597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:21:38.381 [DEBUG] [Thread-178597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:21:38.381 [DEBUG] [Thread-178597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:21:38.382 [DEBUG] [Thread-178597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:21:38.420 [INFO] [Thread-178597] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:21:38.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:21:39.221 [DEBUG] [Thread-178597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:21:39.221 [DEBUG] [Thread-178597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:21:39.221 [DEBUG] [Thread-178597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:21:39.262 [DEBUG] [Thread-178597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:21:39.262 [DEBUG] [Thread-178597] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:21:39.266 [DEBUG] [Thread-178597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:21:39.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:21:39.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:21:39.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:21:39.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:21:39.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:21:39.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:21:39.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:21:39.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:21:39.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:21:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.889349 -999.00  +11.40  15.40     97  +11.00 1 3 1 3 1     0    0 0.38 -0.15 ----- 15.4 15.4 300.0 20.8 12.9 -1.5 12.8 -0.7 12.4 -1.9 12.8 -0.9
2026-04-11T23:21:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:21:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:21:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.889349
2026-04-11T23:21:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:21:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:21:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:21:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:21:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:21:39.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:21:01', tmtdew=0.03273, humidity=100.079, cloud=0.0, wind=16.9751, temperature=11.3429, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:20:39.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:21:39.290 [DEBUG] [Thread-178597] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:21:39.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:21:39.384 [DEBUG] [Thread-178600] [transport.py] [_log()] starting thread (client mode): 0xb39c45b0
2026-04-11T23:21:39.384 [DEBUG] [Thread-178600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:21:39.398 [DEBUG] [Thread-178600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:21:39.398 [INFO] [Thread-178600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] client lang: <none>
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] server lang: <none>
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] kex follows: False
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] Compression: none
2026-04-11T23:21:39.406 [DEBUG] [Thread-178600] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:21:39.466 [DEBUG] [Thread-178600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:21:39.466 [DEBUG] [Thread-178600] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:21:39.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:21:39.467 [DEBUG] [Thread-178600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:21:39.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:21:39.522 [DEBUG] [Thread-178600] [transport.py] [_log()] userauth is OK
2026-04-11T23:21:39.522 [DEBUG] [Thread-178600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:21:39.522 [DEBUG] [Thread-178600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:21:39.522 [DEBUG] [Thread-178600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:21:39.522 [DEBUG] [Thread-178600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:21:39.545 [INFO] [Thread-178600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:21:39.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:21:39.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:21:40.360 [DEBUG] [Thread-178600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:21:40.360 [DEBUG] [Thread-178600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:21:40.409 [DEBUG] [Thread-178600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:21:40.410 [DEBUG] [Thread-178600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:21:40.419 [DEBUG] [Thread-178600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:21:40.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:21:40.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-04-11T23:21:40.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-04-11T23:21:40.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:21:40.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:21:40.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:21:40.457 [DEBUG] [Thread-178600] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:21:41.911 [DEBUG] [Thread-178602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:44.034 [DEBUG] [Thread-178603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:51.889 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:51.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:21:59.088 [DEBUG] [Thread-178604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:22:10.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:22:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:22:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 21, 36), -0.0345, 100.158, 0.0, 18.9842, 11.7527, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:22:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:21:36
2026-04-11T23:22:12.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:22:12.330 [DEBUG] [Thread-178605] [transport.py] [_log()] starting thread (client mode): 0xb39c70a0
2026-04-11T23:22:12.330 [DEBUG] [Thread-178605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:22:12.352 [DEBUG] [Thread-178605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:22:12.352 [INFO] [Thread-178605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:22:12.356 [DEBUG] [Thread-178605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] client lang: <none>
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] server lang: <none>
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] kex follows: False
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] Compression: none
2026-04-11T23:22:12.357 [DEBUG] [Thread-178605] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:22:12.375 [DEBUG] [Thread-178605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:22:12.376 [DEBUG] [Thread-178605] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:22:12.376 [DEBUG] [Thread-178605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:22:12.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:22:12.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:22:12.378 [DEBUG] [Thread-178605] [transport.py] [_log()] userauth is OK
2026-04-11T23:22:12.378 [DEBUG] [Thread-178605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:22:12.379 [DEBUG] [Thread-178605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:22:12.379 [DEBUG] [Thread-178605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:22:12.379 [DEBUG] [Thread-178605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:22:12.395 [INFO] [Thread-178605] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:22:12.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:22:13.159 [DEBUG] [Thread-178605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:22:13.159 [DEBUG] [Thread-178605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:22:13.159 [DEBUG] [Thread-178605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:22:13.200 [DEBUG] [Thread-178605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:22:13.200 [DEBUG] [Thread-178605] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:22:13.202 [DEBUG] [Thread-178605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:22:13.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:22:13.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:22:13.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:22:13.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:22:13.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:22:13.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:22:13.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:22:13.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:22:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:22:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.889696 -999.00  +11.50  15.13     97  +11.10 1 3 1 3 1     0    0 0.38 -0.19 ----- 16.2 15.1 301.0 18.1 13.0 -1.0 13.0 -0.7 12.5 -0.7 12.8 -0.6
2026-04-11T23:22:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:22:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:22:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.889696
2026-04-11T23:22:13.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:22:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:22:13.219 [DEBUG] [Thread-178605] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:22:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:22:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:22:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:22:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:21:36', tmtdew=-0.0345, humidity=100.158, cloud=0.0, wind=18.9842, temperature=11.7527, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:21:09.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:22:13.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:22:13.311 [DEBUG] [Thread-178608] [transport.py] [_log()] starting thread (client mode): 0xb39c7f40
2026-04-11T23:22:13.311 [DEBUG] [Thread-178608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:22:13.331 [DEBUG] [Thread-178608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:22:13.332 [INFO] [Thread-178608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:22:13.341 [DEBUG] [Thread-178608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] client lang: <none>
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] server lang: <none>
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] kex follows: False
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:22:13.342 [DEBUG] [Thread-178608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:22:13.343 [DEBUG] [Thread-178608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:22:13.343 [DEBUG] [Thread-178608] [transport.py] [_log()] Compression: none
2026-04-11T23:22:13.343 [DEBUG] [Thread-178608] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:22:13.403 [DEBUG] [Thread-178608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:22:13.404 [DEBUG] [Thread-178608] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:22:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:22:13.405 [DEBUG] [Thread-178608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:22:13.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:22:13.463 [DEBUG] [Thread-178608] [transport.py] [_log()] userauth is OK
2026-04-11T23:22:13.463 [DEBUG] [Thread-178608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:22:13.463 [DEBUG] [Thread-178608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:22:13.463 [DEBUG] [Thread-178608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:22:13.463 [DEBUG] [Thread-178608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:22:13.485 [INFO] [Thread-178608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:22:13.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:22:13.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:22:14.122 [DEBUG] [Thread-178610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:14.325 [DEBUG] [Thread-178608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:22:14.325 [DEBUG] [Thread-178608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:22:14.373 [DEBUG] [Thread-178608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:22:14.373 [DEBUG] [Thread-178608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:22:14.382 [DEBUG] [Thread-178608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:22:14.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:22:14.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:22:14.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:22:14.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:22:14.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:22:14.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:22:14.420 [DEBUG] [Thread-178608] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:22:29.183 [DEBUG] [Thread-178611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:41.981 [DEBUG] [Thread-178612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:44.222 [DEBUG] [Thread-178613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:22:44.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:22:44.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-04-11T23:22:45.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 22, 12), 0.04028, 100.029, 0.0, 18.8626, 11.3764, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:22:45.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:22:12
2026-04-11T23:22:46.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:22:46.255 [DEBUG] [Thread-178614] [transport.py] [_log()] starting thread (client mode): 0xb39c6350
2026-04-11T23:22:46.255 [DEBUG] [Thread-178614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:22:46.278 [DEBUG] [Thread-178614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:22:46.278 [INFO] [Thread-178614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:22:46.281 [DEBUG] [Thread-178614] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] client lang: <none>
2026-04-11T23:22:46.282 [DEBUG] [Thread-178614] [transport.py] [_log()] server lang: <none>
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] kex follows: False
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] Compression: none
2026-04-11T23:22:46.283 [DEBUG] [Thread-178614] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:22:46.303 [DEBUG] [Thread-178614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:22:46.303 [DEBUG] [Thread-178614] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:22:46.304 [DEBUG] [Thread-178614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:22:46.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:22:46.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:22:46.306 [DEBUG] [Thread-178614] [transport.py] [_log()] userauth is OK
2026-04-11T23:22:46.306 [DEBUG] [Thread-178614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:22:46.306 [DEBUG] [Thread-178614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:22:46.306 [DEBUG] [Thread-178614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:22:46.307 [DEBUG] [Thread-178614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:22:46.330 [INFO] [Thread-178614] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:22:46.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:22:46.969 [DEBUG] [Thread-178614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:22:46.969 [DEBUG] [Thread-178614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:22:46.970 [DEBUG] [Thread-178614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:22:47.013 [DEBUG] [Thread-178614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:22:47.013 [DEBUG] [Thread-178614] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:22:47.018 [DEBUG] [Thread-178614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:22:47.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:22:47.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:22:47.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:22:47.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:22:47.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:22:47.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:22:47.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:22:47.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:22:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:22:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.890737 -999.00  +11.50  12.08     97  +11.10 1 3 1 3 1     0    0 0.39 -0.33 ----- 13.4 12.1 280.4 15.8 13.0 -1.0 12.9 -0.5 12.5 -0.6 12.8 -0.7
2026-04-11T23:22:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:22:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:22:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.890737
2026-04-11T23:22:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:22:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:22:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:22:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:22:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:22:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:22:12', tmtdew=0.04028, humidity=100.029, cloud=0.0, wind=18.8626, temperature=11.3764, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:22:39.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:22:47.066 [DEBUG] [Thread-178614] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:22:47.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:22:47.166 [DEBUG] [Thread-178617] [transport.py] [_log()] starting thread (client mode): 0xb39c72e0
2026-04-11T23:22:47.166 [DEBUG] [Thread-178617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:22:47.180 [DEBUG] [Thread-178617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:22:47.180 [INFO] [Thread-178617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:22:47.188 [DEBUG] [Thread-178617] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:22:47.188 [DEBUG] [Thread-178617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:22:47.188 [DEBUG] [Thread-178617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:22:47.188 [DEBUG] [Thread-178617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:47.188 [DEBUG] [Thread-178617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:22:47.188 [DEBUG] [Thread-178617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] client lang: <none>
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] server lang: <none>
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] kex follows: False
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] Compression: none
2026-04-11T23:22:47.189 [DEBUG] [Thread-178617] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:22:47.249 [DEBUG] [Thread-178617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:22:47.250 [DEBUG] [Thread-178617] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:22:47.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:22:47.251 [DEBUG] [Thread-178617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:22:47.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:22:47.309 [DEBUG] [Thread-178617] [transport.py] [_log()] userauth is OK
2026-04-11T23:22:47.310 [DEBUG] [Thread-178617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:22:47.310 [DEBUG] [Thread-178617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:22:47.310 [DEBUG] [Thread-178617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:22:47.310 [DEBUG] [Thread-178617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:22:47.329 [INFO] [Thread-178617] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:22:47.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:22:47.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:22:48.212 [DEBUG] [Thread-178617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:22:48.212 [DEBUG] [Thread-178617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:22:48.260 [DEBUG] [Thread-178617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:22:48.261 [DEBUG] [Thread-178617] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:22:48.273 [DEBUG] [Thread-178617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:22:48.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:22:48.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:22:48.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:22:48.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:22:48.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:22:48.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:22:48.314 [DEBUG] [Thread-178617] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:22:52.092 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:52.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:22:59.259 [DEBUG] [Thread-178619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:14.312 [DEBUG] [Thread-178620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:18.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:23:18.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:23:18.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-04-11T23:23:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 22, 48), -0.0396, 100.191, 0.0, 16.3382, 11.8191, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:23:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:22:48
2026-04-11T23:23:19.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:23:20.134 [DEBUG] [Thread-178621] [transport.py] [_log()] starting thread (client mode): 0xb0f6fa60
2026-04-11T23:23:20.134 [DEBUG] [Thread-178621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:23:20.156 [DEBUG] [Thread-178621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:23:20.157 [INFO] [Thread-178621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:23:20.158 [DEBUG] [Thread-178621] [transport.py] [_log()] client lang: <none>
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] server lang: <none>
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] kex follows: False
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] Compression: none
2026-04-11T23:23:20.159 [DEBUG] [Thread-178621] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:23:20.171 [DEBUG] [Thread-178621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:23:20.171 [DEBUG] [Thread-178621] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:23:20.172 [DEBUG] [Thread-178621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:23:20.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:23:20.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:23:20.173 [DEBUG] [Thread-178621] [transport.py] [_log()] userauth is OK
2026-04-11T23:23:20.174 [DEBUG] [Thread-178621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:23:20.174 [DEBUG] [Thread-178621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:23:20.174 [DEBUG] [Thread-178621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:23:20.174 [DEBUG] [Thread-178621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:23:20.191 [INFO] [Thread-178621] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:23:20.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:23:20.807 [DEBUG] [Thread-178621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:23:20.808 [DEBUG] [Thread-178621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:23:20.808 [DEBUG] [Thread-178621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:23:20.849 [DEBUG] [Thread-178621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:23:20.849 [DEBUG] [Thread-178621] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:23:20.852 [DEBUG] [Thread-178621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:23:20.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:23:20.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:23:20.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:23:20.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:23:20.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:23:20.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:23:20.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:23:20.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:23:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:23:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.891085 -999.00  +11.40  16.73     97  +11.00 1 3 1 3 1     0    0 0.38 -0.28 ----- 16.3 16.7 294.0 20.8 13.0 -1.2 12.9 -0.7 12.5 -0.9 12.8 -0.7
2026-04-11T23:23:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:23:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:23:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.891085
2026-04-11T23:23:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:23:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:23:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:23:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:23:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:23:20.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:22:48', tmtdew=-0.0396, humidity=100.191, cloud=0.0, wind=16.3382, temperature=11.8191, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:23:09.744', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:23:20.878 [DEBUG] [Thread-178621] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:23:20.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:23:20.971 [DEBUG] [Thread-178624] [transport.py] [_log()] starting thread (client mode): 0xb0f6ee00
2026-04-11T23:23:20.971 [DEBUG] [Thread-178624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:23:20.993 [DEBUG] [Thread-178624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:23:20.993 [INFO] [Thread-178624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:21.001 [DEBUG] [Thread-178624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] client lang: <none>
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] server lang: <none>
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] kex follows: False
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] Compression: none
2026-04-11T23:23:21.002 [DEBUG] [Thread-178624] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:23:21.059 [DEBUG] [Thread-178624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:23:21.059 [DEBUG] [Thread-178624] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:23:21.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:23:21.061 [DEBUG] [Thread-178624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:23:21.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:23:21.116 [DEBUG] [Thread-178624] [transport.py] [_log()] userauth is OK
2026-04-11T23:23:21.117 [DEBUG] [Thread-178624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:23:21.117 [DEBUG] [Thread-178624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:23:21.117 [DEBUG] [Thread-178624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:23:21.117 [DEBUG] [Thread-178624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:23:21.136 [INFO] [Thread-178624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:23:21.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:23:21.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:23:21.975 [DEBUG] [Thread-178624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:23:21.975 [DEBUG] [Thread-178624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:23:22.023 [DEBUG] [Thread-178624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:23:22.023 [DEBUG] [Thread-178624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:23:22.033 [DEBUG] [Thread-178624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:23:22.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:23:22.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-04-11T23:23:22.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:23:22.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:23:22.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:23:22.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:23:22.069 [DEBUG] [Thread-178624] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:23:29.351 [DEBUG] [Thread-178626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:42.037 [DEBUG] [Thread-178627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:44.403 [DEBUG] [Thread-178628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:23:52.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:23:52.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-04-11T23:23:52.297 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:52.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:23:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 23, 23), 0.03018, 100.095, 0.0, 19.3741, 11.3761, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:23:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:23:23
2026-04-11T23:23:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:23:54.036 [DEBUG] [Thread-178629] [transport.py] [_log()] starting thread (client mode): 0xb39c7cd0
2026-04-11T23:23:54.036 [DEBUG] [Thread-178629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:23:54.055 [DEBUG] [Thread-178629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:23:54.056 [INFO] [Thread-178629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:23:54.058 [DEBUG] [Thread-178629] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:23:54.058 [DEBUG] [Thread-178629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:23:54.058 [DEBUG] [Thread-178629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:23:54.058 [DEBUG] [Thread-178629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:54.058 [DEBUG] [Thread-178629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] client lang: <none>
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] server lang: <none>
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] kex follows: False
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] Compression: none
2026-04-11T23:23:54.059 [DEBUG] [Thread-178629] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:23:54.068 [DEBUG] [Thread-178629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:23:54.069 [DEBUG] [Thread-178629] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:23:54.069 [DEBUG] [Thread-178629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:23:54.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:23:54.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:23:54.071 [DEBUG] [Thread-178629] [transport.py] [_log()] userauth is OK
2026-04-11T23:23:54.071 [DEBUG] [Thread-178629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:23:54.071 [DEBUG] [Thread-178629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:23:54.071 [DEBUG] [Thread-178629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:23:54.071 [DEBUG] [Thread-178629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:23:54.095 [INFO] [Thread-178629] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:23:54.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:23:54.724 [DEBUG] [Thread-178629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:23:54.724 [DEBUG] [Thread-178629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:23:54.725 [DEBUG] [Thread-178629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:23:54.765 [DEBUG] [Thread-178629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:23:54.765 [DEBUG] [Thread-178629] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:23:54.769 [DEBUG] [Thread-178629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:23:54.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:23:54.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:23:54.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:23:54.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:23:54.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:23:54.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:23:54.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:23:54.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:23:54.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:23:54.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.891432 -999.00  +11.40  16.57     97  +11.00 1 3 1 3 1     0    0 0.38 -0.14 ----- 15.3 16.6 291.2 19.0 12.9 -1.2 12.8 -0.6 12.5 -1.1 12.8 -0.6
2026-04-11T23:23:54.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:23:54.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:23:54.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.891432
2026-04-11T23:23:54.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:23:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:23:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:23:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:23:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:23:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:23:23', tmtdew=0.03018, humidity=100.095, cloud=0.0, wind=19.3741, temperature=11.3761, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:23:39.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:23:54.793 [DEBUG] [Thread-178629] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:23:54.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:23:54.898 [DEBUG] [Thread-178632] [transport.py] [_log()] starting thread (client mode): 0xb39c5ae0
2026-04-11T23:23:54.898 [DEBUG] [Thread-178632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:23:54.912 [DEBUG] [Thread-178632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:23:54.912 [INFO] [Thread-178632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:23:54.920 [DEBUG] [Thread-178632] [transport.py] [_log()] client lang: <none>
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] server lang: <none>
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] kex follows: False
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] Compression: none
2026-04-11T23:23:54.921 [DEBUG] [Thread-178632] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:23:54.978 [DEBUG] [Thread-178632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:23:54.978 [DEBUG] [Thread-178632] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:23:54.979 [DEBUG] [Thread-178632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:23:54.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:23:54.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:23:55.034 [DEBUG] [Thread-178632] [transport.py] [_log()] userauth is OK
2026-04-11T23:23:55.035 [DEBUG] [Thread-178632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:23:55.035 [DEBUG] [Thread-178632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:23:55.035 [DEBUG] [Thread-178632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:23:55.035 [DEBUG] [Thread-178632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:23:55.053 [INFO] [Thread-178632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:23:55.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:23:55.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:23:55.892 [DEBUG] [Thread-178632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:23:55.892 [DEBUG] [Thread-178632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:23:55.941 [DEBUG] [Thread-178632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:23:55.941 [DEBUG] [Thread-178632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:23:55.950 [DEBUG] [Thread-178632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:23:55.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:23:55.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:23:55.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:23:55.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:23:55.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:23:55.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:23:55.982 [DEBUG] [Thread-178632] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:23:59.438 [DEBUG] [Thread-178634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:14.484 [DEBUG] [Thread-178635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:25.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:24:25.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:24:25.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-04-11T23:24:27.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 23, 59), -0.017235, 100.079, 0.0, 16.9214, 11.3098, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:24:27.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:23:59
2026-04-11T23:24:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:24:27.854 [DEBUG] [Thread-178636] [transport.py] [_log()] starting thread (client mode): 0xb0f6e4a0
2026-04-11T23:24:27.854 [DEBUG] [Thread-178636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:24:27.871 [DEBUG] [Thread-178636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:24:27.871 [INFO] [Thread-178636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:24:27.874 [DEBUG] [Thread-178636] [transport.py] [_log()] client lang: <none>
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] server lang: <none>
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] kex follows: False
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] Compression: none
2026-04-11T23:24:27.875 [DEBUG] [Thread-178636] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:24:27.894 [DEBUG] [Thread-178636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:24:27.895 [DEBUG] [Thread-178636] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:24:27.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:24:27.896 [DEBUG] [Thread-178636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:24:27.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:24:27.898 [DEBUG] [Thread-178636] [transport.py] [_log()] userauth is OK
2026-04-11T23:24:27.898 [DEBUG] [Thread-178636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:24:27.898 [DEBUG] [Thread-178636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:24:27.898 [DEBUG] [Thread-178636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:24:27.898 [DEBUG] [Thread-178636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:24:27.924 [INFO] [Thread-178636] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:24:27.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:24:28.493 [DEBUG] [Thread-178636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:24:28.493 [DEBUG] [Thread-178636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:24:28.494 [DEBUG] [Thread-178636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:24:28.534 [DEBUG] [Thread-178636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:24:28.535 [DEBUG] [Thread-178636] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:24:28.537 [DEBUG] [Thread-178636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:24:28.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:24:28.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:24:28.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:24:28.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:24:28.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:24:28.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:24:28.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:24:28.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:24:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:24:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.891779 -999.00  +11.40  15.85     97  +11.00 1 3 1 3 1     0    0 0.38 -0.17 ----- 16.7 15.8 294.5 21.6 12.9 -1.1 12.8 -0.4 12.4 -1.4 12.8 -0.9
2026-04-11T23:24:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:24:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:24:28.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.891779
2026-04-11T23:24:28.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:24:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:24:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:24:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:24:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:24:28.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:23:59', tmtdew=-0.017235, humidity=100.079, cloud=0.0, wind=16.9214, temperature=11.3098, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:24:09.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:24:28.558 [DEBUG] [Thread-178636] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:24:28.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:24:28.654 [DEBUG] [Thread-178639] [transport.py] [_log()] starting thread (client mode): 0xb39c70d0
2026-04-11T23:24:28.654 [DEBUG] [Thread-178639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:24:28.672 [DEBUG] [Thread-178639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:24:28.672 [INFO] [Thread-178639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:24:28.682 [DEBUG] [Thread-178639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] client lang: <none>
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] server lang: <none>
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] kex follows: False
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] Compression: none
2026-04-11T23:24:28.683 [DEBUG] [Thread-178639] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:24:28.741 [DEBUG] [Thread-178639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:24:28.741 [DEBUG] [Thread-178639] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:24:28.742 [DEBUG] [Thread-178639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:24:28.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:24:28.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:24:28.797 [DEBUG] [Thread-178639] [transport.py] [_log()] userauth is OK
2026-04-11T23:24:28.797 [DEBUG] [Thread-178639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:24:28.797 [DEBUG] [Thread-178639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:24:28.798 [DEBUG] [Thread-178639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:24:28.798 [DEBUG] [Thread-178639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:24:28.817 [INFO] [Thread-178639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:24:28.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:24:28.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:24:29.520 [DEBUG] [Thread-178641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:29.699 [DEBUG] [Thread-178639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:24:29.700 [DEBUG] [Thread-178639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:24:29.748 [DEBUG] [Thread-178639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:24:29.748 [DEBUG] [Thread-178639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:24:29.760 [DEBUG] [Thread-178639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:24:29.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:24:29.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:24: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') -> 00000000
2026-04-11T23:24:29.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:24:29.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:24:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:24:29.800 [DEBUG] [Thread-178639] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:24:42.089 [DEBUG] [Thread-178642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:44.576 [DEBUG] [Thread-178643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:52.502 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:52.504 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:59.612 [DEBUG] [Thread-178644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:24:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:24:59.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:24:59.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-04-11T23:25:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 24, 34), -0.02941, 100.124, 0.0, 20.7835, 11.6864, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:25:01.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:24:34
2026-04-11T23:25:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:25:01.697 [DEBUG] [Thread-178645] [transport.py] [_log()] starting thread (client mode): 0xb0f6e1d0
2026-04-11T23:25:01.697 [DEBUG] [Thread-178645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:25:01.709 [DEBUG] [Thread-178645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:25:01.709 [INFO] [Thread-178645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] client lang: <none>
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] server lang: <none>
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] kex follows: False
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] Compression: none
2026-04-11T23:25:01.711 [DEBUG] [Thread-178645] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:25:01.722 [DEBUG] [Thread-178645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:25:01.722 [DEBUG] [Thread-178645] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:25:01.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:25:01.722 [DEBUG] [Thread-178645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:25:01.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:25:01.725 [DEBUG] [Thread-178645] [transport.py] [_log()] userauth is OK
2026-04-11T23:25:01.726 [DEBUG] [Thread-178645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:25:01.726 [DEBUG] [Thread-178645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:25:01.726 [DEBUG] [Thread-178645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:25:01.726 [DEBUG] [Thread-178645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:25:01.741 [INFO] [Thread-178645] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:25:01.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:25:02.297 [DEBUG] [Thread-178645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:25:02.297 [DEBUG] [Thread-178645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:25:02.298 [DEBUG] [Thread-178645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:25:02.341 [DEBUG] [Thread-178645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:25:02.341 [DEBUG] [Thread-178645] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:25:02.345 [DEBUG] [Thread-178645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:25:02.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:25:02.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:25:02.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:25:02.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:25:02.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:25:02.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:25:02.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:25:02.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:25:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:25:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.892126 -999.00  +11.30  18.41     97  +10.90 1 3 1 3 1     0    0 0.39 -0.14 ----- 18.9 18.4 297.6 23.5 12.9 -1.4 12.8 -0.7 12.4 -1.3 12.8 -0.8
2026-04-11T23:25:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:25:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:25:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.892126
2026-04-11T23:25:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:25:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:25:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:25:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:25:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:25:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:24:34', tmtdew=-0.02941, humidity=100.124, cloud=0.0, wind=20.7835, temperature=11.6864, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:24:39.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:25:02.391 [DEBUG] [Thread-178645] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:25:02.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:25:02.474 [DEBUG] [Thread-178648] [transport.py] [_log()] starting thread (client mode): 0xb0f6ddb0
2026-04-11T23:25:02.474 [DEBUG] [Thread-178648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:25:02.488 [DEBUG] [Thread-178648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:25:02.488 [INFO] [Thread-178648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:25:02.495 [DEBUG] [Thread-178648] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] client lang: <none>
2026-04-11T23:25:02.496 [DEBUG] [Thread-178648] [transport.py] [_log()] server lang: <none>
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] kex follows: False
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] Compression: none
2026-04-11T23:25:02.497 [DEBUG] [Thread-178648] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:25:02.560 [DEBUG] [Thread-178648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:25:02.561 [DEBUG] [Thread-178648] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:25:02.561 [DEBUG] [Thread-178648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:25:02.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:25:02.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:25:02.620 [DEBUG] [Thread-178648] [transport.py] [_log()] userauth is OK
2026-04-11T23:25:02.620 [DEBUG] [Thread-178648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:25:02.621 [DEBUG] [Thread-178648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:25:02.621 [DEBUG] [Thread-178648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:25:02.621 [DEBUG] [Thread-178648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:25:02.640 [INFO] [Thread-178648] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:25:02.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:25:02.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:25:03.530 [DEBUG] [Thread-178648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:25:03.530 [DEBUG] [Thread-178648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:25:03.577 [DEBUG] [Thread-178648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:25:03.577 [DEBUG] [Thread-178648] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:25:03.586 [DEBUG] [Thread-178648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:25:03.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:25:03.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-04-11T23:25:03.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-04-11T23:25:03.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:25:03.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:25:03.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:25:03.620 [DEBUG] [Thread-178648] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:25:14.652 [DEBUG] [Thread-178650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:25:29.709 [DEBUG] [Thread-178651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:25:33.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:25:33.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:25:33.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-04-11T23:25:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 25, 10), -0.01721, 100.079, 0.0, 16.6921, 11.2932, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:25:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:25:10
2026-04-11T23:25:35.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:25:35.537 [DEBUG] [Thread-178652] [transport.py] [_log()] starting thread (client mode): 0xb0f6f550
2026-04-11T23:25:35.537 [DEBUG] [Thread-178652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:25:35.558 [DEBUG] [Thread-178652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:25:35.558 [INFO] [Thread-178652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:25:35.560 [DEBUG] [Thread-178652] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:25:35.560 [DEBUG] [Thread-178652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:25:35.560 [DEBUG] [Thread-178652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:25:35.560 [DEBUG] [Thread-178652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:35.560 [DEBUG] [Thread-178652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:35.560 [DEBUG] [Thread-178652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] client lang: <none>
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] server lang: <none>
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] kex follows: False
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] Compression: none
2026-04-11T23:25:35.561 [DEBUG] [Thread-178652] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:25:35.573 [DEBUG] [Thread-178652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:25:35.573 [DEBUG] [Thread-178652] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:25:35.573 [DEBUG] [Thread-178652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:25:35.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:25:35.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:25:35.574 [DEBUG] [Thread-178652] [transport.py] [_log()] userauth is OK
2026-04-11T23:25:35.574 [DEBUG] [Thread-178652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:25:35.574 [DEBUG] [Thread-178652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:25:35.574 [DEBUG] [Thread-178652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:25:35.574 [DEBUG] [Thread-178652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:25:35.583 [INFO] [Thread-178652] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:25:35.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:25:36.171 [DEBUG] [Thread-178652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:25:36.171 [DEBUG] [Thread-178652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:25:36.171 [DEBUG] [Thread-178652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:25:36.212 [DEBUG] [Thread-178652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:25:36.212 [DEBUG] [Thread-178652] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:25:36.215 [DEBUG] [Thread-178652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:25:36.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:25:36.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:25:36.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:25:36.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:25:36.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:25:36.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:25:36.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:25:36.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:25:36.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:25:36.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.892473 -999.00  +11.40  15.37     97  +11.00 1 3 1 3 1     0    0 0.39 -0.11 ----- 15.9 15.4 298.4 21.4 12.9 -1.1 12.8 -0.4 12.4 -0.6 12.7 -0.7
2026-04-11T23:25:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:25:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:25:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.892473
2026-04-11T23:25:36.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:25:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:25:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:25:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:25:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:25:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:25:10', tmtdew=-0.01721, humidity=100.079, cloud=0.0, wind=16.6921, temperature=11.2932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:25:09.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:25:36.236 [DEBUG] [Thread-178652] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:25:36.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:25:36.330 [DEBUG] [Thread-178655] [transport.py] [_log()] starting thread (client mode): 0xb0f6d960
2026-04-11T23:25:36.330 [DEBUG] [Thread-178655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:25:36.345 [DEBUG] [Thread-178655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:25:36.345 [INFO] [Thread-178655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:36.354 [DEBUG] [Thread-178655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] client lang: <none>
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] server lang: <none>
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] kex follows: False
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:25:36.355 [DEBUG] [Thread-178655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:25:36.356 [DEBUG] [Thread-178655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:25:36.356 [DEBUG] [Thread-178655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:25:36.356 [DEBUG] [Thread-178655] [transport.py] [_log()] Compression: none
2026-04-11T23:25:36.356 [DEBUG] [Thread-178655] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:25:36.411 [DEBUG] [Thread-178655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:25:36.411 [DEBUG] [Thread-178655] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:25:36.412 [DEBUG] [Thread-178655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:25:36.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:25:36.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:25:36.468 [DEBUG] [Thread-178655] [transport.py] [_log()] userauth is OK
2026-04-11T23:25:36.468 [DEBUG] [Thread-178655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:25:36.468 [DEBUG] [Thread-178655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:25:36.468 [DEBUG] [Thread-178655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:25:36.468 [DEBUG] [Thread-178655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:25:36.487 [INFO] [Thread-178655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:25:36.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:25:36.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:25:37.294 [DEBUG] [Thread-178655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:25:37.295 [DEBUG] [Thread-178655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:25:37.343 [DEBUG] [Thread-178655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:25:37.343 [DEBUG] [Thread-178655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:25:37.353 [DEBUG] [Thread-178655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:25:37.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:25:37.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:25:37.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-04-11T23:25:37.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:25:37.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:25:37.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:25:37.391 [DEBUG] [Thread-178655] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:25:42.157 [DEBUG] [Thread-178657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:25:44.746 [DEBUG] [Thread-178658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:25:52.705 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:25:52.706 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:25:59.799 [DEBUG] [Thread-178659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:07.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:26:07.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:26:07.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-04-11T23:26:08.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 25, 46), -0.02938, 100.124, 0.0, 21.4538, 11.6532, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:26:08.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:25:46
2026-04-11T23:26:09.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:26:09.314 [DEBUG] [Thread-178660] [transport.py] [_log()] starting thread (client mode): 0xb39c7cd0
2026-04-11T23:26:09.314 [DEBUG] [Thread-178660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:26:09.329 [DEBUG] [Thread-178660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:26:09.330 [INFO] [Thread-178660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] client lang: <none>
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] server lang: <none>
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] kex follows: False
2026-04-11T23:26:09.333 [DEBUG] [Thread-178660] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:26:09.334 [DEBUG] [Thread-178660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:26:09.334 [DEBUG] [Thread-178660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:26:09.334 [DEBUG] [Thread-178660] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:26:09.334 [DEBUG] [Thread-178660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:26:09.334 [DEBUG] [Thread-178660] [transport.py] [_log()] Compression: none
2026-04-11T23:26:09.334 [DEBUG] [Thread-178660] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:26:09.356 [DEBUG] [Thread-178660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:26:09.357 [DEBUG] [Thread-178660] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:26:09.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:26:09.358 [DEBUG] [Thread-178660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:26:09.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:26:09.360 [DEBUG] [Thread-178660] [transport.py] [_log()] userauth is OK
2026-04-11T23:26:09.360 [DEBUG] [Thread-178660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:26:09.360 [DEBUG] [Thread-178660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:26:09.360 [DEBUG] [Thread-178660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:26:09.360 [DEBUG] [Thread-178660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:26:09.384 [INFO] [Thread-178660] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:26:09.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:26:09.998 [DEBUG] [Thread-178660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:26:09.998 [DEBUG] [Thread-178660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:26:09.999 [DEBUG] [Thread-178660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:26:10.039 [DEBUG] [Thread-178660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:26:10.039 [DEBUG] [Thread-178660] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:26:10.043 [DEBUG] [Thread-178660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:26:10.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:26:10.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:26:10.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:26:10.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:26:10.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:26:10.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:26:10.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:26:10.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:26:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:26:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.892821 -999.00  +11.30  17.45     97  +10.90 1 3 1 3 1     0    0 0.38 -0.07 ----- 14.2 17.4 292.4 21.5 12.9 -1.3 12.8 -0.4 12.4 -0.9 12.8 -0.8
2026-04-11T23:26:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:26:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:26:10.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.892821
2026-04-11T23:26:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:26:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:26:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:26:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:26:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:26:10.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:25:46', tmtdew=-0.02938, humidity=100.124, cloud=0.0, wind=21.4538, temperature=11.6532, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:25:39.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:26:10.073 [DEBUG] [Thread-178660] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:26:10.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:26:10.166 [DEBUG] [Thread-178663] [transport.py] [_log()] starting thread (client mode): 0xb39c6380
2026-04-11T23:26:10.166 [DEBUG] [Thread-178663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:26:10.181 [DEBUG] [Thread-178663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:26:10.181 [INFO] [Thread-178663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:26:10.189 [DEBUG] [Thread-178663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] client lang: <none>
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] server lang: <none>
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] kex follows: False
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:26:10.190 [DEBUG] [Thread-178663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:26:10.191 [DEBUG] [Thread-178663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:26:10.191 [DEBUG] [Thread-178663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:26:10.191 [DEBUG] [Thread-178663] [transport.py] [_log()] Compression: none
2026-04-11T23:26:10.191 [DEBUG] [Thread-178663] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:26:10.247 [DEBUG] [Thread-178663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:26:10.248 [DEBUG] [Thread-178663] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:26:10.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:26:10.250 [DEBUG] [Thread-178663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:26:10.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:26:10.306 [DEBUG] [Thread-178663] [transport.py] [_log()] userauth is OK
2026-04-11T23:26:10.307 [DEBUG] [Thread-178663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:26:10.307 [DEBUG] [Thread-178663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:26:10.308 [DEBUG] [Thread-178663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:26:10.308 [DEBUG] [Thread-178663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:26:10.327 [INFO] [Thread-178663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:26:10.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:26:10.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:26:11.145 [DEBUG] [Thread-178663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:26:11.145 [DEBUG] [Thread-178663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:26:11.198 [DEBUG] [Thread-178663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:26:11.198 [DEBUG] [Thread-178663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:26:11.211 [DEBUG] [Thread-178663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:26:11.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:26:11.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:26:11.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:26:11.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:26:11.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:26:11.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:26:11.248 [DEBUG] [Thread-178663] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:26:14.828 [DEBUG] [Thread-178665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:29.865 [DEBUG] [Thread-178666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:41.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:26:41.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:26:41.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-04-11T23:26:42.213 [DEBUG] [Thread-178667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 26, 21), 0.03026, 100.095, 0.0, 19.5152, 11.3098, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:26:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:26:21
2026-04-11T23:26:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:26:43.065 [DEBUG] [Thread-178668] [transport.py] [_log()] starting thread (client mode): 0xb0f6d690
2026-04-11T23:26:43.065 [DEBUG] [Thread-178668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:26:43.085 [DEBUG] [Thread-178668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:26:43.085 [INFO] [Thread-178668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:26:43.088 [DEBUG] [Thread-178668] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:26:43.088 [DEBUG] [Thread-178668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:26:43.088 [DEBUG] [Thread-178668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:26:43.088 [DEBUG] [Thread-178668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:26:43.088 [DEBUG] [Thread-178668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] client lang: <none>
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] server lang: <none>
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] kex follows: False
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] Compression: none
2026-04-11T23:26:43.089 [DEBUG] [Thread-178668] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:26:43.099 [DEBUG] [Thread-178668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:26:43.100 [DEBUG] [Thread-178668] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:26:43.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:26:43.101 [DEBUG] [Thread-178668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:26:43.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:26:43.102 [DEBUG] [Thread-178668] [transport.py] [_log()] userauth is OK
2026-04-11T23:26:43.102 [DEBUG] [Thread-178668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:26:43.102 [DEBUG] [Thread-178668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:26:43.102 [DEBUG] [Thread-178668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:26:43.102 [DEBUG] [Thread-178668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:26:43.119 [INFO] [Thread-178668] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:26:43.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:26:43.763 [DEBUG] [Thread-178668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:26:43.763 [DEBUG] [Thread-178668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:26:43.764 [DEBUG] [Thread-178668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:26:43.804 [DEBUG] [Thread-178668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:26:43.804 [DEBUG] [Thread-178668] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:26:43.808 [DEBUG] [Thread-178668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:26:43.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:26:43.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:26:43.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:26:43.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:26:43.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:26:43.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:26:43.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:26:43.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:26:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:26:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.893168 -999.00  +11.40  17.78     97  +11.00 1 3 1 3 1     0    0 0.37 -0.46 ----- 19.0 17.8 303.4 20.0 12.9 -1.1 12.8 -0.7 12.4 -0.8 12.7 -0.6
2026-04-11T23:26:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:26:43.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:26:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.893168
2026-04-11T23:26:43.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:26:43.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:26:43.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:26:43.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:26:43.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:26:43.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:26:21', tmtdew=0.03026, humidity=100.095, cloud=0.0, wind=19.5152, temperature=11.3098, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:26:09.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:26:43.832 [DEBUG] [Thread-178668] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:26:43.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:26:44.901 [DEBUG] [Thread-178671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:52.909 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:52.910 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:26:59.953 [DEBUG] [Thread-178672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:27:14.991 [DEBUG] [Thread-178673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:27:30.026 [DEBUG] [Thread-178674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:27:42.271 [DEBUG] [Thread-178675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:27:45.065 [DEBUG] [Thread-178676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:27:53.113 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:27:53.114 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:00.103 [DEBUG] [Thread-178677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:15.143 [DEBUG] [Thread-178678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:30.178 [DEBUG] [Thread-178679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:42.334 [DEBUG] [Thread-178680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:45.212 [DEBUG] [Thread-178681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:53.318 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:53.319 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:28:58.239 [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-04-11T23:29:00.246 [DEBUG] [Thread-178682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:29:15.283 [DEBUG] [Thread-178683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:29:28.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:29:28.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:29:28.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-04-11T23:29:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 29, 18), -0.039675, 100.228, 0.0, 20.7155, 11.1935, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:29:29.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:29:18
2026-04-11T23:29:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:29:30.138 [DEBUG] [Thread-178684] [transport.py] [_log()] starting thread (client mode): 0xb0f6c3a0
2026-04-11T23:29:30.138 [DEBUG] [Thread-178684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:29:30.156 [DEBUG] [Thread-178684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:29:30.157 [INFO] [Thread-178684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:29:30.158 [DEBUG] [Thread-178684] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:29:30.158 [DEBUG] [Thread-178684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:29:30.158 [DEBUG] [Thread-178684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] client lang: <none>
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] server lang: <none>
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] kex follows: False
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] Compression: none
2026-04-11T23:29:30.159 [DEBUG] [Thread-178684] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:29:30.167 [DEBUG] [Thread-178684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:29:30.168 [DEBUG] [Thread-178684] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:29:30.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:29:30.168 [DEBUG] [Thread-178684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:29:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:29:30.170 [DEBUG] [Thread-178684] [transport.py] [_log()] userauth is OK
2026-04-11T23:29:30.170 [DEBUG] [Thread-178684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:29:30.170 [DEBUG] [Thread-178684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:29:30.170 [DEBUG] [Thread-178684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:29:30.170 [DEBUG] [Thread-178684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:29:30.188 [INFO] [Thread-178684] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:29:30.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:29:30.319 [DEBUG] [Thread-178686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:29:30.843 [DEBUG] [Thread-178684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:29:30.843 [DEBUG] [Thread-178684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:29:30.844 [DEBUG] [Thread-178684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:29:30.886 [DEBUG] [Thread-178684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:29:30.886 [DEBUG] [Thread-178684] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:29:30.891 [DEBUG] [Thread-178684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:29:30.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:29:30.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:29:30.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:29:30.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:29:30.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:29:30.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:29:30.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:29:30.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:29:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:29:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.895251 -999.00  +11.20  17.08     97  +10.80 1 3 1 3 1     0    0 0.36 -0.56 ----- 17.5 17.1 271.4 20.3 12.8 -1.5 12.7 -0.7 12.3 -1.0 12.7 -1.3
2026-04-11T23:29:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:29:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:29:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.895251
2026-04-11T23:29:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:29:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:29:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:29:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:29:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:29:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:29:18', tmtdew=-0.039675, humidity=100.228, cloud=0.0, wind=20.7155, temperature=11.1935, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:29:09.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:29:30.921 [DEBUG] [Thread-178684] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:29:31.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:29:31.031 [DEBUG] [Thread-178688] [transport.py] [_log()] starting thread (client mode): 0xb0fccd30
2026-04-11T23:29:31.031 [DEBUG] [Thread-178688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:29:31.048 [DEBUG] [Thread-178688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:29:31.048 [INFO] [Thread-178688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:29:31.055 [DEBUG] [Thread-178688] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] client lang: <none>
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] server lang: <none>
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] kex follows: False
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:29:31.056 [DEBUG] [Thread-178688] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:29:31.057 [DEBUG] [Thread-178688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:29:31.057 [DEBUG] [Thread-178688] [transport.py] [_log()] Compression: none
2026-04-11T23:29:31.057 [DEBUG] [Thread-178688] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:29:31.123 [DEBUG] [Thread-178688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:29:31.124 [DEBUG] [Thread-178688] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:29:31.124 [DEBUG] [Thread-178688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:29:31.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:29:31.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:29:31.186 [DEBUG] [Thread-178688] [transport.py] [_log()] userauth is OK
2026-04-11T23:29:31.186 [DEBUG] [Thread-178688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:29:31.187 [DEBUG] [Thread-178688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:29:31.187 [DEBUG] [Thread-178688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:29:31.187 [DEBUG] [Thread-178688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:29:31.209 [INFO] [Thread-178688] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:29:31.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:29:31.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:29:32.066 [DEBUG] [Thread-178688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:29:32.066 [DEBUG] [Thread-178688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:29:32.116 [DEBUG] [Thread-178688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:29:32.117 [DEBUG] [Thread-178688] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:29:32.129 [DEBUG] [Thread-178688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:29:32.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:29:32.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-04-11T23:29:32.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:29:32.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:29:32.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:29:32.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:29:32.179 [DEBUG] [Thread-178688] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:29:42.404 [DEBUG] [Thread-178690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:29:45.359 [DEBUG] [Thread-178691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:29:53.526 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:29:53.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:00.414 [DEBUG] [Thread-178692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:02.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:30:02.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:30: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-04-11T23:30:03.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 29, 54), 0.035295, 100.062, 0.0, 18.545, 11.1932, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:30:03.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:29:54
2026-04-11T23:30:03.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:30:04.022 [DEBUG] [Thread-178693] [transport.py] [_log()] starting thread (client mode): 0xb0fcefe0
2026-04-11T23:30:04.022 [DEBUG] [Thread-178693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:30:04.042 [DEBUG] [Thread-178693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:30:04.042 [INFO] [Thread-178693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:30:04.046 [DEBUG] [Thread-178693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] client lang: <none>
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] server lang: <none>
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] kex follows: False
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] Compression: none
2026-04-11T23:30:04.047 [DEBUG] [Thread-178693] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:30:04.067 [DEBUG] [Thread-178693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:30:04.067 [DEBUG] [Thread-178693] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:30:04.068 [DEBUG] [Thread-178693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:30:04.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:30:04.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:30:04.070 [DEBUG] [Thread-178693] [transport.py] [_log()] userauth is OK
2026-04-11T23:30:04.070 [DEBUG] [Thread-178693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:30:04.070 [DEBUG] [Thread-178693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:30:04.071 [DEBUG] [Thread-178693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:30:04.071 [DEBUG] [Thread-178693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:30:04.093 [INFO] [Thread-178693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:30:04.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:30:04.814 [DEBUG] [Thread-178693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:30:04.814 [DEBUG] [Thread-178693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:30:04.815 [DEBUG] [Thread-178693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:30:04.857 [DEBUG] [Thread-178693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:30:04.858 [DEBUG] [Thread-178693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:30:04.863 [DEBUG] [Thread-178693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:30:04.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:30:04.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:30:04.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:30:04.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:30:04.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:30:04.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:30:04.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:30:04.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:30:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:30:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.895599 -999.00  +11.30  13.37     97  +10.90 1 3 1 3 1     0    0 0.38 -0.57 ----- 15.2 13.4 297.7 19.6 12.8 -1.6 12.7 -0.6 12.3 -0.6 12.7 -1.0
2026-04-11T23:30:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:30:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:30:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.895599
2026-04-11T23:30:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:30:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:30:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:30:04.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:30:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:30:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:29:54', tmtdew=0.035295, humidity=100.062, cloud=0.0, wind=18.545, temperature=11.1932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:29:39.754', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:30:04.889 [DEBUG] [Thread-178693] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:30:04.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:30:04.982 [DEBUG] [Thread-178696] [transport.py] [_log()] starting thread (client mode): 0xb0f6c220
2026-04-11T23:30:04.982 [DEBUG] [Thread-178696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:30:04.997 [DEBUG] [Thread-178696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:30:04.997 [INFO] [Thread-178696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:30:05.004 [DEBUG] [Thread-178696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] client lang: <none>
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] server lang: <none>
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] kex follows: False
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] Compression: none
2026-04-11T23:30:05.005 [DEBUG] [Thread-178696] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:30:05.061 [DEBUG] [Thread-178696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:30:05.061 [DEBUG] [Thread-178696] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:30:05.062 [DEBUG] [Thread-178696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:30:05.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:30:05.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:30:05.117 [DEBUG] [Thread-178696] [transport.py] [_log()] userauth is OK
2026-04-11T23:30:05.118 [DEBUG] [Thread-178696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:30:05.118 [DEBUG] [Thread-178696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:30:05.118 [DEBUG] [Thread-178696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:30:05.118 [DEBUG] [Thread-178696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:30:05.136 [INFO] [Thread-178696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:30:05.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:30:05.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:30:05.964 [DEBUG] [Thread-178696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:30:05.964 [DEBUG] [Thread-178696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:30:06.012 [DEBUG] [Thread-178696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:30:06.012 [DEBUG] [Thread-178696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:30:06.022 [DEBUG] [Thread-178696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:30:06.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:30:06.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-04-11T23:30:06.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:30:06.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:30:06.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:30:06.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:30:06.060 [DEBUG] [Thread-178696] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:30:15.447 [DEBUG] [Thread-178698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:30.500 [DEBUG] [Thread-178699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:36.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:30:36.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:30:36.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-04-11T23:30:37.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 29, 54), 0.035295, 100.062, 0.0, 18.545, 11.1932, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:30:37.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:29:54
2026-04-11T23:30:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:30:37.914 [DEBUG] [Thread-178700] [transport.py] [_log()] starting thread (client mode): 0xb39c6aa0
2026-04-11T23:30:37.914 [DEBUG] [Thread-178700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:30:37.935 [DEBUG] [Thread-178700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:30:37.935 [INFO] [Thread-178700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:30:37.938 [DEBUG] [Thread-178700] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:30:37.938 [DEBUG] [Thread-178700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:30:37.938 [DEBUG] [Thread-178700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] client lang: <none>
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] server lang: <none>
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] kex follows: False
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:30:37.939 [DEBUG] [Thread-178700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:30:37.940 [DEBUG] [Thread-178700] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:30:37.940 [DEBUG] [Thread-178700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:30:37.940 [DEBUG] [Thread-178700] [transport.py] [_log()] Compression: none
2026-04-11T23:30:37.940 [DEBUG] [Thread-178700] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:30:37.957 [DEBUG] [Thread-178700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:30:37.958 [DEBUG] [Thread-178700] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:30:37.958 [DEBUG] [Thread-178700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:30:37.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:30:37.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:30:37.962 [DEBUG] [Thread-178700] [transport.py] [_log()] userauth is OK
2026-04-11T23:30:37.962 [DEBUG] [Thread-178700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:30:37.962 [DEBUG] [Thread-178700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:30:37.962 [DEBUG] [Thread-178700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:30:37.962 [DEBUG] [Thread-178700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:30:37.985 [INFO] [Thread-178700] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:30:37.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:30:38.656 [DEBUG] [Thread-178700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:30:38.657 [DEBUG] [Thread-178700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:30:38.657 [DEBUG] [Thread-178700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:30:38.697 [DEBUG] [Thread-178700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:30:38.698 [DEBUG] [Thread-178700] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:30:38.700 [DEBUG] [Thread-178700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:30:38.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:30:38.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:30:38.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:30:38.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:30:38.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:30:38.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:30:38.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:30:38.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:30:38.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:30:38.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.895945 -999.00  +11.30  18.37     97  +10.90 1 3 1 3 1     0    0 0.37 -0.62 ----- 17.5 18.4 296.6 19.3 12.8 -1.1 12.6 -0.5 12.3 -1.0 12.6 -0.9
2026-04-11T23:30:38.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:30:38.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:30:38.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.895945
2026-04-11T23:30:38.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:30:38.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:30:38.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:30:38.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:30:38.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:30:38.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:29:54', tmtdew=0.035295, humidity=100.062, cloud=0.0, wind=18.545, temperature=11.1932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:30:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:30:38.737 [DEBUG] [Thread-178700] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:30:38.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:30:38.831 [DEBUG] [Thread-178703] [transport.py] [_log()] starting thread (client mode): 0xb39c7880
2026-04-11T23:30:38.831 [DEBUG] [Thread-178703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:30:38.846 [DEBUG] [Thread-178703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:30:38.846 [INFO] [Thread-178703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:30:38.853 [DEBUG] [Thread-178703] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:30:38.853 [DEBUG] [Thread-178703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:30:38.853 [DEBUG] [Thread-178703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:30:38.853 [DEBUG] [Thread-178703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:38.853 [DEBUG] [Thread-178703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] client lang: <none>
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] server lang: <none>
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] kex follows: False
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] Compression: none
2026-04-11T23:30:38.854 [DEBUG] [Thread-178703] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:30:38.915 [DEBUG] [Thread-178703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:30:38.916 [DEBUG] [Thread-178703] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:30:38.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:30:38.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:30:38.917 [DEBUG] [Thread-178703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:30:38.972 [DEBUG] [Thread-178703] [transport.py] [_log()] userauth is OK
2026-04-11T23:30:38.972 [DEBUG] [Thread-178703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:30:38.972 [DEBUG] [Thread-178703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:30:38.973 [DEBUG] [Thread-178703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:30:38.973 [DEBUG] [Thread-178703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:30:38.990 [INFO] [Thread-178703] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:30:38.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:30:38.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:30:39.828 [DEBUG] [Thread-178703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:30:39.829 [DEBUG] [Thread-178703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:30:39.877 [DEBUG] [Thread-178703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:30:39.877 [DEBUG] [Thread-178703] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:30:39.885 [DEBUG] [Thread-178703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:30:39.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:30:39.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-04-11T23:30:39.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-04-11T23:30:39.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:30:39.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:30:39.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:30:39.919 [DEBUG] [Thread-178703] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:30:42.474 [DEBUG] [Thread-178705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:45.534 [DEBUG] [Thread-178706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:53.733 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:30:53.734 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:00.592 [DEBUG] [Thread-178707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:09.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:31:09.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:31:09.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-04-11T23:31:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 30, 30), 0.03531, 100.062, 0.0, 18.5098, 11.1766, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:31:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:30:30
2026-04-11T23:31:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:31:11.795 [DEBUG] [Thread-178708] [transport.py] [_log()] starting thread (client mode): 0xb0fcc2e0
2026-04-11T23:31:11.795 [DEBUG] [Thread-178708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:31:11.815 [DEBUG] [Thread-178708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:31:11.816 [INFO] [Thread-178708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:31:11.818 [DEBUG] [Thread-178708] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:31:11.818 [DEBUG] [Thread-178708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:31:11.818 [DEBUG] [Thread-178708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:31:11.818 [DEBUG] [Thread-178708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:11.818 [DEBUG] [Thread-178708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:11.818 [DEBUG] [Thread-178708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] client lang: <none>
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] server lang: <none>
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] kex follows: False
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] Compression: none
2026-04-11T23:31:11.819 [DEBUG] [Thread-178708] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:31:11.835 [DEBUG] [Thread-178708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:31:11.835 [DEBUG] [Thread-178708] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:31:11.836 [DEBUG] [Thread-178708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:31:11.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:31:11.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:31:11.838 [DEBUG] [Thread-178708] [transport.py] [_log()] userauth is OK
2026-04-11T23:31:11.839 [DEBUG] [Thread-178708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:31:11.839 [DEBUG] [Thread-178708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:31:11.839 [DEBUG] [Thread-178708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:31:11.839 [DEBUG] [Thread-178708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:31:11.857 [INFO] [Thread-178708] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:31:11.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:31:12.505 [DEBUG] [Thread-178708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:31:12.505 [DEBUG] [Thread-178708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:31:12.505 [DEBUG] [Thread-178708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:31:12.548 [DEBUG] [Thread-178708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:31:12.548 [DEBUG] [Thread-178708] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:31:12.552 [DEBUG] [Thread-178708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:31:12.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:31:12.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:31:12.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:31:12.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:31:12.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:31:12.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:31:12.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:31:12.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:31:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:31:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.896293 -999.00  +11.20  16.84     97  +10.80 1 3 1 3 1     0    0 0.37 -0.69 ----- 14.1 16.8 284.0 20.4 12.8 -1.5 12.6 -0.4 12.3 -1.0 12.7 -1.1
2026-04-11T23:31:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:31:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:31:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.896293
2026-04-11T23:31:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:31:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:31:12.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:31:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:31:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:31:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:30:30', tmtdew=0.03531, humidity=100.062, cloud=0.0, wind=18.5098, temperature=11.1766, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:30:39.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:31:12.596 [DEBUG] [Thread-178708] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:31:12.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:31:12.695 [DEBUG] [Thread-178711] [transport.py] [_log()] starting thread (client mode): 0xb0fcc190
2026-04-11T23:31:12.695 [DEBUG] [Thread-178711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:31:12.709 [DEBUG] [Thread-178711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:31:12.709 [INFO] [Thread-178711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] client lang: <none>
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] server lang: <none>
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] kex follows: False
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:31:12.717 [DEBUG] [Thread-178711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:31:12.718 [DEBUG] [Thread-178711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:31:12.718 [DEBUG] [Thread-178711] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:31:12.718 [DEBUG] [Thread-178711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:31:12.718 [DEBUG] [Thread-178711] [transport.py] [_log()] Compression: none
2026-04-11T23:31:12.718 [DEBUG] [Thread-178711] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:31:12.776 [DEBUG] [Thread-178711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:31:12.777 [DEBUG] [Thread-178711] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:31:12.777 [DEBUG] [Thread-178711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:31:12.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:31:12.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:31:12.832 [DEBUG] [Thread-178711] [transport.py] [_log()] userauth is OK
2026-04-11T23:31:12.832 [DEBUG] [Thread-178711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:31:12.832 [DEBUG] [Thread-178711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:31:12.832 [DEBUG] [Thread-178711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:31:12.832 [DEBUG] [Thread-178711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:31:12.851 [INFO] [Thread-178711] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:31:12.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:31:12.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:31:13.672 [DEBUG] [Thread-178711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:31:13.673 [DEBUG] [Thread-178711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:31:13.722 [DEBUG] [Thread-178711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:31:13.722 [DEBUG] [Thread-178711] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:31:13.732 [DEBUG] [Thread-178711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:31:13.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:31:13.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:31:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:31:13.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:31:13.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:31:13.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:31:13.770 [DEBUG] [Thread-178711] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:31:15.625 [DEBUG] [Thread-178713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:30.676 [DEBUG] [Thread-178714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:42.530 [DEBUG] [Thread-178715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:31:43.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:31:43.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-04-11T23:31:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 31, 6), 0.032825, 100.079, 0.0, 18.7391, 11.16, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:31:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:31:06
2026-04-11T23:31:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:31:45.688 [DEBUG] [Thread-178716] [transport.py] [_log()] starting thread (client mode): 0xb39c73d0
2026-04-11T23:31:45.688 [DEBUG] [Thread-178716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:31:45.709 [DEBUG] [Thread-178716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:31:45.709 [INFO] [Thread-178716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:31:45.710 [DEBUG] [Thread-178718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:45.712 [DEBUG] [Thread-178716] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] client lang: <none>
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] server lang: <none>
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] kex follows: False
2026-04-11T23:31:45.713 [DEBUG] [Thread-178716] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:31:45.714 [DEBUG] [Thread-178716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:31:45.714 [DEBUG] [Thread-178716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:31:45.714 [DEBUG] [Thread-178716] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:31:45.714 [DEBUG] [Thread-178716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:31:45.714 [DEBUG] [Thread-178716] [transport.py] [_log()] Compression: none
2026-04-11T23:31:45.714 [DEBUG] [Thread-178716] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:31:45.732 [DEBUG] [Thread-178716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:31:45.733 [DEBUG] [Thread-178716] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:31:45.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:31:45.734 [DEBUG] [Thread-178716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:31:45.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:31:45.736 [DEBUG] [Thread-178716] [transport.py] [_log()] userauth is OK
2026-04-11T23:31:45.736 [DEBUG] [Thread-178716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:31:45.736 [DEBUG] [Thread-178716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:31:45.736 [DEBUG] [Thread-178716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:31:45.736 [DEBUG] [Thread-178716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:31:45.770 [INFO] [Thread-178716] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:31:45.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:31:46.441 [DEBUG] [Thread-178716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:31:46.442 [DEBUG] [Thread-178716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:31:46.442 [DEBUG] [Thread-178716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:31:46.482 [DEBUG] [Thread-178716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:31:46.482 [DEBUG] [Thread-178716] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:31:46.486 [DEBUG] [Thread-178716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:31:46.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:31:46.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:31:46.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:31:46.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:31:46.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:31:46.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:31:46.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:31:46.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:31:46.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:31:46.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.896640 -999.00  +11.20  13.80     97  +10.80 1 3 1 3 1     0    0 0.36 -0.77 ----- 15.4 13.8 289.0 20.8 12.8 -1.3 12.7 -0.6 12.3 -0.5 12.6 -0.9
2026-04-11T23:31:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:31:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:31:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.896640
2026-04-11T23:31:46.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:31:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:31:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:31:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:31:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:31:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:31:06', tmtdew=0.032825, humidity=100.079, cloud=0.0, wind=18.7391, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:31:09.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:31:46.510 [DEBUG] [Thread-178716] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:31:46.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:31:46.603 [DEBUG] [Thread-178720] [transport.py] [_log()] starting thread (client mode): 0xb0f6faf0
2026-04-11T23:31:46.604 [DEBUG] [Thread-178720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:31:46.618 [DEBUG] [Thread-178720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:31:46.618 [INFO] [Thread-178720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:31:46.626 [DEBUG] [Thread-178720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:31:46.626 [DEBUG] [Thread-178720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:31:46.626 [DEBUG] [Thread-178720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] client lang: <none>
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] server lang: <none>
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] kex follows: False
2026-04-11T23:31:46.627 [DEBUG] [Thread-178720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:31:46.628 [DEBUG] [Thread-178720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:31:46.628 [DEBUG] [Thread-178720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:31:46.628 [DEBUG] [Thread-178720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:31:46.628 [DEBUG] [Thread-178720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:31:46.628 [DEBUG] [Thread-178720] [transport.py] [_log()] Compression: none
2026-04-11T23:31:46.628 [DEBUG] [Thread-178720] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:31:46.683 [DEBUG] [Thread-178720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:31:46.683 [DEBUG] [Thread-178720] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:31:46.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:31:46.685 [DEBUG] [Thread-178720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:31:46.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:31:46.740 [DEBUG] [Thread-178720] [transport.py] [_log()] userauth is OK
2026-04-11T23:31:46.740 [DEBUG] [Thread-178720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:31:46.740 [DEBUG] [Thread-178720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:31:46.740 [DEBUG] [Thread-178720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:31:46.740 [DEBUG] [Thread-178720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:31:46.763 [INFO] [Thread-178720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:31:46.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:31:46.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:31:47.667 [DEBUG] [Thread-178720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:31:47.667 [DEBUG] [Thread-178720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:31:47.715 [DEBUG] [Thread-178720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:31:47.715 [DEBUG] [Thread-178720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:31:47.724 [DEBUG] [Thread-178720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:31:47.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:31:47.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-04-11T23:31:47.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:31:47.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:31:47.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:31:47.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:31:47.757 [DEBUG] [Thread-178720] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:31:53.938 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:31:53.939 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:00.748 [DEBUG] [Thread-178722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:15.803 [DEBUG] [Thread-178723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:17.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:32:17.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:32:17.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-04-11T23:32:19.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 31, 41), -0.0394, 100.191, 0.0, 17.573, 11.6532, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:32:19.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:31:41
2026-04-11T23:32:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:32:19.705 [DEBUG] [Thread-178724] [transport.py] [_log()] starting thread (client mode): 0xa7956110
2026-04-11T23:32:19.705 [DEBUG] [Thread-178724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:32:19.720 [DEBUG] [Thread-178724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:32:19.720 [INFO] [Thread-178724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:32:19.723 [DEBUG] [Thread-178724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] client lang: <none>
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] server lang: <none>
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] kex follows: False
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] Compression: none
2026-04-11T23:32:19.724 [DEBUG] [Thread-178724] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:32:19.740 [DEBUG] [Thread-178724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:32:19.741 [DEBUG] [Thread-178724] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:32:19.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:32:19.743 [DEBUG] [Thread-178724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:32:19.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:32:19.745 [DEBUG] [Thread-178724] [transport.py] [_log()] userauth is OK
2026-04-11T23:32:19.745 [DEBUG] [Thread-178724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:32:19.745 [DEBUG] [Thread-178724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:32:19.746 [DEBUG] [Thread-178724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:32:19.746 [DEBUG] [Thread-178724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:32:19.782 [INFO] [Thread-178724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:32:19.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:32:20.435 [DEBUG] [Thread-178724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:32:20.436 [DEBUG] [Thread-178724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:32:20.436 [DEBUG] [Thread-178724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:32:20.476 [DEBUG] [Thread-178724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:32:20.476 [DEBUG] [Thread-178724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:32:20.480 [DEBUG] [Thread-178724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:32:20.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:32:20.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:32:20.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:32:20.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:32:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:32:20.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:32:20.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:32:20.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:32:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:32:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.897334 -999.00  +11.20  16.00     97  +10.80 1 3 1 3 1     0    0 0.37 -0.54 ----- 16.8 16.0 280.8 22.0 12.8 -1.7 12.6 -0.6 12.3 -1.1 12.5 -1.3
2026-04-11T23:32:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:32:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:32:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.897334
2026-04-11T23:32:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:32:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:32:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:32:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:32:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:32:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:31:41', tmtdew=-0.0394, humidity=100.191, cloud=0.0, wind=17.573, temperature=11.6532, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:32:09.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:32:20.508 [DEBUG] [Thread-178724] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:32:20.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:32:20.601 [DEBUG] [Thread-178727] [transport.py] [_log()] starting thread (client mode): 0xa7956ad0
2026-04-11T23:32:20.601 [DEBUG] [Thread-178727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:32:20.616 [DEBUG] [Thread-178727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:32:20.616 [INFO] [Thread-178727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:32:20.623 [DEBUG] [Thread-178727] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] client lang: <none>
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] server lang: <none>
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] kex follows: False
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] Compression: none
2026-04-11T23:32:20.624 [DEBUG] [Thread-178727] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:32:20.683 [DEBUG] [Thread-178727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:32:20.684 [DEBUG] [Thread-178727] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:32:20.685 [DEBUG] [Thread-178727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:32:20.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:32:20.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:32:20.747 [DEBUG] [Thread-178727] [transport.py] [_log()] userauth is OK
2026-04-11T23:32:20.747 [DEBUG] [Thread-178727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:32:20.747 [DEBUG] [Thread-178727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:32:20.747 [DEBUG] [Thread-178727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:32:20.747 [DEBUG] [Thread-178727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:32:20.766 [INFO] [Thread-178727] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:32:20.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:32:20.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:32:21.590 [DEBUG] [Thread-178727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:32:21.591 [DEBUG] [Thread-178727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:32:21.639 [DEBUG] [Thread-178727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:32:21.639 [DEBUG] [Thread-178727] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:32:21.648 [DEBUG] [Thread-178727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:32:21.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:32:21.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-04-11T23:32:21.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-04-11T23:32:21.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:32:21.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:32:21.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:32:21.685 [DEBUG] [Thread-178727] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:32:30.840 [DEBUG] [Thread-178729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:42.598 [DEBUG] [Thread-178730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:45.893 [DEBUG] [Thread-178731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:32:51.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:32:51.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-04-11T23:32:52.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 32, 17), -0.022205, 100.112, 0.0, 18.598, 11.1766, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:32:52.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:32:17
2026-04-11T23:32:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:32:53.496 [DEBUG] [Thread-178732] [transport.py] [_log()] starting thread (client mode): 0xa7956aa0
2026-04-11T23:32:53.497 [DEBUG] [Thread-178732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:32:53.516 [DEBUG] [Thread-178732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:32:53.516 [INFO] [Thread-178732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:32:53.519 [DEBUG] [Thread-178732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] client lang: <none>
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] server lang: <none>
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] kex follows: False
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:32:53.520 [DEBUG] [Thread-178732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:32:53.521 [DEBUG] [Thread-178732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:32:53.521 [DEBUG] [Thread-178732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:32:53.521 [DEBUG] [Thread-178732] [transport.py] [_log()] Compression: none
2026-04-11T23:32:53.521 [DEBUG] [Thread-178732] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:32:53.540 [DEBUG] [Thread-178732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:32:53.540 [DEBUG] [Thread-178732] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:32:53.541 [DEBUG] [Thread-178732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:32:53.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:32:53.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:32:53.543 [DEBUG] [Thread-178732] [transport.py] [_log()] userauth is OK
2026-04-11T23:32:53.544 [DEBUG] [Thread-178732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:32:53.544 [DEBUG] [Thread-178732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:32:53.544 [DEBUG] [Thread-178732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:32:53.544 [DEBUG] [Thread-178732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:32:53.577 [INFO] [Thread-178732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:32:53.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:32:54.142 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:54.144 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:32:54.239 [DEBUG] [Thread-178732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:32:54.240 [DEBUG] [Thread-178732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:32:54.240 [DEBUG] [Thread-178732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:32:54.281 [DEBUG] [Thread-178732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:32:54.281 [DEBUG] [Thread-178732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:32:54.283 [DEBUG] [Thread-178732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:32:54.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:32:54.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:32:54.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:32:54.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:32:54.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:32:54.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:32:54.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:32:54.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:32:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:32:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.897682 -999.00  +11.20  12.30     97  +10.80 1 3 1 3 1     0    0 0.37 -0.44 ----- 11.3 12.3 284.8 19.6 12.7 -1.2 12.6 -0.5 12.2 -1.2 12.6 -0.7
2026-04-11T23:32:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:32:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:32:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.897682
2026-04-11T23:32:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:32:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:32:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:32:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:32:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:32:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:32:17', tmtdew=-0.022205, humidity=100.112, cloud=0.0, wind=18.598, temperature=11.1766, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:32:39.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:32:54.307 [DEBUG] [Thread-178732] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:32:54.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:32:54.400 [DEBUG] [Thread-178735] [transport.py] [_log()] starting thread (client mode): 0xb0fcf6a0
2026-04-11T23:32:54.400 [DEBUG] [Thread-178735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:32:54.414 [DEBUG] [Thread-178735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:32:54.415 [INFO] [Thread-178735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:32:54.422 [DEBUG] [Thread-178735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:32:54.423 [DEBUG] [Thread-178735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] client lang: <none>
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] server lang: <none>
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] kex follows: False
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:32:54.424 [DEBUG] [Thread-178735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:32:54.425 [DEBUG] [Thread-178735] [transport.py] [_log()] Compression: none
2026-04-11T23:32:54.425 [DEBUG] [Thread-178735] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:32:54.483 [DEBUG] [Thread-178735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:32:54.483 [DEBUG] [Thread-178735] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:32:54.484 [DEBUG] [Thread-178735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:32:54.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:32:54.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:32:54.543 [DEBUG] [Thread-178735] [transport.py] [_log()] userauth is OK
2026-04-11T23:32:54.543 [DEBUG] [Thread-178735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:32:54.543 [DEBUG] [Thread-178735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:32:54.543 [DEBUG] [Thread-178735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:32:54.543 [DEBUG] [Thread-178735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:32:54.561 [INFO] [Thread-178735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:32: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-04-11T23:32:54.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:32:55.398 [DEBUG] [Thread-178735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:32:55.398 [DEBUG] [Thread-178735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:32:55.447 [DEBUG] [Thread-178735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:32:55.448 [DEBUG] [Thread-178735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:32:55.458 [DEBUG] [Thread-178735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:32:55.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:32:55.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-04-11T23:32:55.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:32:55.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:32:55.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:32:55.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:32:55.495 [DEBUG] [Thread-178735] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:33:00.925 [DEBUG] [Thread-178737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:15.977 [DEBUG] [Thread-178738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:33:25.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:33:25.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-04-11T23:33:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 32, 52), -0.02425, 100.091, 0.0, 15.421, 11.5538, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:33:26.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:32:52
2026-04-11T23:33:27.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:33:27.302 [DEBUG] [Thread-178739] [transport.py] [_log()] starting thread (client mode): 0xa79577f0
2026-04-11T23:33:27.302 [DEBUG] [Thread-178739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:33:27.322 [DEBUG] [Thread-178739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:33:27.322 [INFO] [Thread-178739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:33:27.325 [DEBUG] [Thread-178739] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] client lang: <none>
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] server lang: <none>
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] kex follows: False
2026-04-11T23:33:27.326 [DEBUG] [Thread-178739] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:33:27.327 [DEBUG] [Thread-178739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:33:27.327 [DEBUG] [Thread-178739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:33:27.327 [DEBUG] [Thread-178739] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:33:27.327 [DEBUG] [Thread-178739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:33:27.327 [DEBUG] [Thread-178739] [transport.py] [_log()] Compression: none
2026-04-11T23:33:27.327 [DEBUG] [Thread-178739] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:33:27.344 [DEBUG] [Thread-178739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:33:27.345 [DEBUG] [Thread-178739] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:33:27.345 [DEBUG] [Thread-178739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:33:27.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:33:27.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:33:27.347 [DEBUG] [Thread-178739] [transport.py] [_log()] userauth is OK
2026-04-11T23:33:27.347 [DEBUG] [Thread-178739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:33:27.347 [DEBUG] [Thread-178739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:33:27.347 [DEBUG] [Thread-178739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:33:27.347 [DEBUG] [Thread-178739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:33:27.371 [INFO] [Thread-178739] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:33:27.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:33:27.951 [DEBUG] [Thread-178739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:33:27.951 [DEBUG] [Thread-178739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:33:27.951 [DEBUG] [Thread-178739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:33:27.991 [DEBUG] [Thread-178739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:33:27.992 [DEBUG] [Thread-178739] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:33:27.994 [DEBUG] [Thread-178739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:33:28.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:33:28.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:33:28.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:33:28.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:33:28.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:33:28.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:33:28.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:33:28.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.898029 -999.00  +11.20  16.72     97  +10.80 1 3 1 3 1     0    0 0.38 -0.32 ----- 15.8 16.7 287.0 24.3 12.7 -1.2 12.6 -0.8 12.3 -0.8 12.6 -1.1
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.898029
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:33:28.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:32:52', tmtdew=-0.02425, humidity=100.091, cloud=0.0, wind=15.421, temperature=11.5538, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:33:09.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:33:28.011 [DEBUG] [Thread-178739] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:33:28.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:33:28.103 [DEBUG] [Thread-178742] [transport.py] [_log()] starting thread (client mode): 0xa7954190
2026-04-11T23:33:28.103 [DEBUG] [Thread-178742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:33:28.118 [DEBUG] [Thread-178742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:33:28.118 [INFO] [Thread-178742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:33:28.126 [DEBUG] [Thread-178742] [transport.py] [_log()] client lang: <none>
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] server lang: <none>
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] kex follows: False
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] Compression: none
2026-04-11T23:33:28.127 [DEBUG] [Thread-178742] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:33:28.190 [DEBUG] [Thread-178742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:33:28.190 [DEBUG] [Thread-178742] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:33:28.191 [DEBUG] [Thread-178742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:33:28.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:33:28.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:33:28.249 [DEBUG] [Thread-178742] [transport.py] [_log()] userauth is OK
2026-04-11T23:33:28.250 [DEBUG] [Thread-178742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:33:28.250 [DEBUG] [Thread-178742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:33:28.250 [DEBUG] [Thread-178742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:33:28.250 [DEBUG] [Thread-178742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:33:28.269 [INFO] [Thread-178742] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:33:28.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:33:28.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:33:29.069 [DEBUG] [Thread-178742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:33:29.069 [DEBUG] [Thread-178742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:33:29.117 [DEBUG] [Thread-178742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:33:29.117 [DEBUG] [Thread-178742] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:33:29.127 [DEBUG] [Thread-178742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:33:29.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:33:29.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-04-11T23:33:29.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:33:29.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:33:29.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:33:29.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:33:29.165 [DEBUG] [Thread-178742] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:33:31.013 [DEBUG] [Thread-178744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:42.665 [DEBUG] [Thread-178745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:46.062 [DEBUG] [Thread-178746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:54.349 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:54.350 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:33:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:33:59.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:33:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:34:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 33, 29), -0.022245, 100.112, 0.0, 19.0566, 11.2098, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:34:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:33:29
2026-04-11T23:34:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:34:01.045 [DEBUG] [Thread-178747] [transport.py] [_log()] starting thread (client mode): 0xa7955d50
2026-04-11T23:34:01.045 [DEBUG] [Thread-178747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:34:01.064 [DEBUG] [Thread-178747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:34:01.065 [INFO] [Thread-178747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:34:01.068 [DEBUG] [Thread-178747] [transport.py] [_log()] client lang: <none>
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] server lang: <none>
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] kex follows: False
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] Compression: none
2026-04-11T23:34:01.069 [DEBUG] [Thread-178747] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:34:01.086 [DEBUG] [Thread-178747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:34:01.087 [DEBUG] [Thread-178747] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:34:01.088 [DEBUG] [Thread-178747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:34:01.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:34:01.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:34:01.090 [DEBUG] [Thread-178747] [transport.py] [_log()] userauth is OK
2026-04-11T23:34:01.091 [DEBUG] [Thread-178747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:34:01.091 [DEBUG] [Thread-178747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:34:01.091 [DEBUG] [Thread-178747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:34:01.091 [DEBUG] [Thread-178747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:34:01.097 [DEBUG] [Thread-178749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:34:01.111 [INFO] [Thread-178747] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:34:01.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:34:01.743 [DEBUG] [Thread-178747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:34:01.744 [DEBUG] [Thread-178747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:34:01.744 [DEBUG] [Thread-178747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:34:01.785 [DEBUG] [Thread-178747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:34:01.785 [DEBUG] [Thread-178747] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:34:01.789 [DEBUG] [Thread-178747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:34:01.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:34:01.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:34:01.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:34:01.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:34:01.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:34:01.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:34:01.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:34:01.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:34:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:34:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.898376 -999.00  +11.10  19.79     97  +10.70 1 3 1 3 1     0    0 0.38 -0.27 ----- 15.9 19.8 295.2 21.6 12.7 -1.2 12.6 -0.4 12.2 -0.6 12.5 -0.8
2026-04-11T23:34:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:34:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:34:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.898376
2026-04-11T23:34:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:34:01.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:34:01.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:34:01.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:34:01.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:34:01.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:33:29', tmtdew=-0.022245, humidity=100.112, cloud=0.0, wind=19.0566, temperature=11.2098, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:33:39.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:34:01.817 [DEBUG] [Thread-178747] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:34:01.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:34:01.910 [DEBUG] [Thread-178751] [transport.py] [_log()] starting thread (client mode): 0xa79552d0
2026-04-11T23:34:01.910 [DEBUG] [Thread-178751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:34:01.925 [DEBUG] [Thread-178751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:34:01.925 [INFO] [Thread-178751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:34:01.932 [DEBUG] [Thread-178751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:34:01.932 [DEBUG] [Thread-178751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:34:01.932 [DEBUG] [Thread-178751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:34:01.932 [DEBUG] [Thread-178751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:01.932 [DEBUG] [Thread-178751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:01.932 [DEBUG] [Thread-178751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] client lang: <none>
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] server lang: <none>
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] kex follows: False
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] Compression: none
2026-04-11T23:34:01.933 [DEBUG] [Thread-178751] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:34:01.989 [DEBUG] [Thread-178751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:34:01.989 [DEBUG] [Thread-178751] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:34:01.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:34:01.990 [DEBUG] [Thread-178751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:34:01.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:34:02.045 [DEBUG] [Thread-178751] [transport.py] [_log()] userauth is OK
2026-04-11T23:34:02.046 [DEBUG] [Thread-178751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:34:02.046 [DEBUG] [Thread-178751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:34:02.046 [DEBUG] [Thread-178751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:34:02.046 [DEBUG] [Thread-178751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:34:02.064 [INFO] [Thread-178751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:34:02.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:34:02.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:34:02.925 [DEBUG] [Thread-178751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:34:02.925 [DEBUG] [Thread-178751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:34:02.973 [DEBUG] [Thread-178751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:34:02.973 [DEBUG] [Thread-178751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:34:02.982 [DEBUG] [Thread-178751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:34:02.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:34:02.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:34:02.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:34:03.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:34:03.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:34:03.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:34:03.017 [DEBUG] [Thread-178751] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:34:16.132 [DEBUG] [Thread-178753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:34:31.185 [DEBUG] [Thread-178754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:34:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:34:33.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:34:33.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-04-11T23:34:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 34, 4), -0.0197, 100.095, 0.0, 18.3686, 11.1766, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:34:34.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:34:04
2026-04-11T23:34:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:34:35.146 [DEBUG] [Thread-178755] [transport.py] [_log()] starting thread (client mode): 0xa7955540
2026-04-11T23:34:35.146 [DEBUG] [Thread-178755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:34:35.165 [DEBUG] [Thread-178755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:34:35.165 [INFO] [Thread-178755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] client lang: <none>
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] server lang: <none>
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] kex follows: False
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] Compression: none
2026-04-11T23:34:35.169 [DEBUG] [Thread-178755] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:34:35.184 [DEBUG] [Thread-178755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:34:35.184 [DEBUG] [Thread-178755] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:34:35.184 [DEBUG] [Thread-178755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:34:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:34:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:34:35.185 [DEBUG] [Thread-178755] [transport.py] [_log()] userauth is OK
2026-04-11T23:34:35.185 [DEBUG] [Thread-178755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:34:35.185 [DEBUG] [Thread-178755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:34:35.185 [DEBUG] [Thread-178755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:34:35.185 [DEBUG] [Thread-178755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:34:35.203 [INFO] [Thread-178755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:34:35.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:34:35.857 [DEBUG] [Thread-178755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:34:35.857 [DEBUG] [Thread-178755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:34:35.858 [DEBUG] [Thread-178755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:34:35.898 [DEBUG] [Thread-178755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:34:35.898 [DEBUG] [Thread-178755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:34:35.902 [DEBUG] [Thread-178755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:34:35.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:34:35.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:34:35.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:34:35.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:34:35.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:34:35.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:34:35.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:34:35.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:34:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:34:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.898723 -999.00  +11.20  12.51     97  +10.80 1 3 1 3 1     0    0 0.37 -0.24 ----- 16.2 12.5 279.0 17.1 12.7 -1.5 12.5 -0.4 12.2 -1.6 12.5 -0.8
2026-04-11T23:34:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:34:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:34:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.898723
2026-04-11T23:34:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:34:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:34:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:34:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:34:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:34:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:34:04', tmtdew=-0.0197, humidity=100.095, cloud=0.0, wind=18.3686, temperature=11.1766, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:34:09.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:34:35.923 [DEBUG] [Thread-178755] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:34:36.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:34:36.017 [DEBUG] [Thread-178758] [transport.py] [_log()] starting thread (client mode): 0xa7956b00
2026-04-11T23:34:36.017 [DEBUG] [Thread-178758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:34:36.032 [DEBUG] [Thread-178758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:34:36.032 [INFO] [Thread-178758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] client lang: <none>
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] server lang: <none>
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] kex follows: False
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:34:36.040 [DEBUG] [Thread-178758] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:34:36.041 [DEBUG] [Thread-178758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:34:36.041 [DEBUG] [Thread-178758] [transport.py] [_log()] Compression: none
2026-04-11T23:34:36.041 [DEBUG] [Thread-178758] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:34:36.101 [DEBUG] [Thread-178758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:34:36.102 [DEBUG] [Thread-178758] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:34:36.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:34:36.103 [DEBUG] [Thread-178758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:34:36.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:34:36.157 [DEBUG] [Thread-178758] [transport.py] [_log()] userauth is OK
2026-04-11T23:34:36.158 [DEBUG] [Thread-178758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:34:36.158 [DEBUG] [Thread-178758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:34:36.158 [DEBUG] [Thread-178758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:34:36.158 [DEBUG] [Thread-178758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:34:36.176 [INFO] [Thread-178758] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:34:36.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:34:36.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:34:36.990 [DEBUG] [Thread-178758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:34:36.990 [DEBUG] [Thread-178758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:34:37.038 [DEBUG] [Thread-178758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:34:37.038 [DEBUG] [Thread-178758] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:34:37.047 [DEBUG] [Thread-178758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:34:37.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:34:37.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-04-11T23:34: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') -> 00000000
2026-04-11T23:34:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:34:37.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:34:37.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:34:37.085 [DEBUG] [Thread-178758] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:34:42.723 [DEBUG] [Thread-178760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:34:46.223 [DEBUG] [Thread-178761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:34:54.553 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:34:54.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:01.274 [DEBUG] [Thread-178762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:07.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:35:07.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:35:07.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-04-11T23:35:08.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 34, 39), -0.04437, 100.224, 0.0, 18.6667, 11.6201, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:35:08.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:34:39
2026-04-11T23:35:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:35:08.915 [DEBUG] [Thread-178763] [transport.py] [_log()] starting thread (client mode): 0xa7955840
2026-04-11T23:35:08.915 [DEBUG] [Thread-178763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:35:08.936 [DEBUG] [Thread-178763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:35:08.936 [INFO] [Thread-178763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] client lang: <none>
2026-04-11T23:35:08.939 [DEBUG] [Thread-178763] [transport.py] [_log()] server lang: <none>
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] kex follows: False
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] Compression: none
2026-04-11T23:35:08.940 [DEBUG] [Thread-178763] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:35:08.957 [DEBUG] [Thread-178763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:35:08.958 [DEBUG] [Thread-178763] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:35:08.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:35:08.958 [DEBUG] [Thread-178763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:35:08.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:35:08.959 [DEBUG] [Thread-178763] [transport.py] [_log()] userauth is OK
2026-04-11T23:35:08.959 [DEBUG] [Thread-178763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:35:08.959 [DEBUG] [Thread-178763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:35:08.960 [DEBUG] [Thread-178763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:35:08.960 [DEBUG] [Thread-178763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:35:08.973 [INFO] [Thread-178763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:35:08.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:35:09.948 [DEBUG] [Thread-178763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:35:09.948 [DEBUG] [Thread-178763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:35:09.949 [DEBUG] [Thread-178763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:35:09.989 [DEBUG] [Thread-178763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:35:09.989 [DEBUG] [Thread-178763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:35:09.993 [DEBUG] [Thread-178763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:35:10.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:35:10.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:35:10.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:35:10.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:35:10.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:35:10.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:35:10.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:35:10.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:35:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:35:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.899070 -999.00  +11.10  18.40     97  +10.80 1 3 1 3 1     0    0 0.38 -0.28 ----- 18.4 18.4 279.9 26.5 12.7 -1.6 12.5 -0.8 12.1 -1.4 12.5 -1.0
2026-04-11T23:35:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:35:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:35:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.899070
2026-04-11T23:35:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:35:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:35:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:35:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:35:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:35:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:34:39', tmtdew=-0.04437, humidity=100.224, cloud=0.0, wind=18.6667, temperature=11.6201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:34:39.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:35:10.020 [DEBUG] [Thread-178763] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:35:10.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:35:10.123 [DEBUG] [Thread-178766] [transport.py] [_log()] starting thread (client mode): 0xa7954d60
2026-04-11T23:35:10.123 [DEBUG] [Thread-178766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:35:10.139 [DEBUG] [Thread-178766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:35:10.139 [INFO] [Thread-178766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:35:10.147 [DEBUG] [Thread-178766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:35:10.147 [DEBUG] [Thread-178766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] client lang: <none>
2026-04-11T23:35:10.148 [DEBUG] [Thread-178766] [transport.py] [_log()] server lang: <none>
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] kex follows: False
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] Compression: none
2026-04-11T23:35:10.149 [DEBUG] [Thread-178766] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:35:10.205 [DEBUG] [Thread-178766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:35:10.206 [DEBUG] [Thread-178766] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:35:10.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:35:10.208 [DEBUG] [Thread-178766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:35:10.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:35:10.268 [DEBUG] [Thread-178766] [transport.py] [_log()] userauth is OK
2026-04-11T23:35:10.268 [DEBUG] [Thread-178766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:35:10.268 [DEBUG] [Thread-178766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:35:10.268 [DEBUG] [Thread-178766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:35:10.268 [DEBUG] [Thread-178766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:35:10.288 [INFO] [Thread-178766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:35:10.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:35:10.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:35:11.113 [DEBUG] [Thread-178766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:35:11.114 [DEBUG] [Thread-178766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:35:11.161 [DEBUG] [Thread-178766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:35:11.161 [DEBUG] [Thread-178766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:35:11.171 [DEBUG] [Thread-178766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:35:11.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:35:11.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-04-11T23:35:11.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:35:11.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:35:11.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:35:11.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:35:11.213 [DEBUG] [Thread-178766] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:35:16.315 [DEBUG] [Thread-178768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:31.371 [DEBUG] [Thread-178769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:41.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:35:41.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:35:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:35:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 35, 15), 0.03279, 100.079, 0.0, 17.9806, 11.1932, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:35:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:35:15
2026-04-11T23:35:42.775 [DEBUG] [Thread-178770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:42.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:35:43.083 [DEBUG] [Thread-178771] [transport.py] [_log()] starting thread (client mode): 0xb0fcd1b0
2026-04-11T23:35:43.083 [DEBUG] [Thread-178771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:35:43.096 [DEBUG] [Thread-178771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:35:43.096 [INFO] [Thread-178771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] client lang: <none>
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] server lang: <none>
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] kex follows: False
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] Compression: none
2026-04-11T23:35:43.099 [DEBUG] [Thread-178771] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:35:43.116 [DEBUG] [Thread-178771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:35:43.117 [DEBUG] [Thread-178771] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:35:43.117 [DEBUG] [Thread-178771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:35:43.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:35:43.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:35:43.119 [DEBUG] [Thread-178771] [transport.py] [_log()] userauth is OK
2026-04-11T23:35:43.119 [DEBUG] [Thread-178771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:35:43.119 [DEBUG] [Thread-178771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:35:43.120 [DEBUG] [Thread-178771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:35:43.120 [DEBUG] [Thread-178771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:35:43.144 [INFO] [Thread-178771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:35:43.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:35:43.774 [DEBUG] [Thread-178771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:35:43.775 [DEBUG] [Thread-178771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:35:43.775 [DEBUG] [Thread-178771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:35:43.815 [DEBUG] [Thread-178771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:35:43.815 [DEBUG] [Thread-178771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:35:43.818 [DEBUG] [Thread-178771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:35:43.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:35:43.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:35:43.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:35:43.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:35:43.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:35:43.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:35:43.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:35:43.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:35:43.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:35:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.899418 -999.00  +11.10  16.20     97  +10.70 1 3 1 3 1     0    0 0.38 -0.21 ----- 14.8 16.2 286.2 21.8 12.6 -1.7 12.5 -0.6 12.1 -1.7 12.4 -0.8
2026-04-11T23:35:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:35:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:35:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.899418
2026-04-11T23:35:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:35:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:35:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:35:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:35:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:35:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:35:15', tmtdew=0.03279, humidity=100.079, cloud=0.0, wind=17.9806, temperature=11.1932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:35:09.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:35:43.847 [DEBUG] [Thread-178771] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:35:43.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:35:43.941 [DEBUG] [Thread-178774] [transport.py] [_log()] starting thread (client mode): 0xb0fce350
2026-04-11T23:35:43.941 [DEBUG] [Thread-178774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:35:43.956 [DEBUG] [Thread-178774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:35:43.956 [INFO] [Thread-178774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] client lang: <none>
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] server lang: <none>
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] kex follows: False
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] Compression: none
2026-04-11T23:35:43.964 [DEBUG] [Thread-178774] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:35:44.026 [DEBUG] [Thread-178774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:35:44.026 [DEBUG] [Thread-178774] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:35:44.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:35:44.027 [DEBUG] [Thread-178774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:35:44.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:35:44.084 [DEBUG] [Thread-178774] [transport.py] [_log()] userauth is OK
2026-04-11T23:35:44.084 [DEBUG] [Thread-178774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:35:44.085 [DEBUG] [Thread-178774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:35:44.085 [DEBUG] [Thread-178774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:35:44.085 [DEBUG] [Thread-178774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:35:44.104 [INFO] [Thread-178774] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:35:44.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:35:44.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:35:44.933 [DEBUG] [Thread-178774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:35:44.933 [DEBUG] [Thread-178774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:35:44.982 [DEBUG] [Thread-178774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:35:44.982 [DEBUG] [Thread-178774] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:35:44.992 [DEBUG] [Thread-178774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:35:45.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:35:45.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-04-11T23:35:45.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-04-11T23:35:45.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:35:45.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:35:45.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:35:45.036 [DEBUG] [Thread-178774] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:35:46.408 [DEBUG] [Thread-178776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:54.785 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:35:54.786 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:01.460 [DEBUG] [Thread-178777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:15.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:36:15.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:36:15.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-04-11T23:36:16.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 35, 51), -0.02934, 100.124, 0.0, 20.1132, 11.6201, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:36:16.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:35:51
2026-04-11T23:36:16.495 [DEBUG] [Thread-178778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:36:16.815 [DEBUG] [Thread-178779] [transport.py] [_log()] starting thread (client mode): 0xb0fcef80
2026-04-11T23:36:16.815 [DEBUG] [Thread-178779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:36:16.835 [DEBUG] [Thread-178779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:36:16.835 [INFO] [Thread-178779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:16.840 [DEBUG] [Thread-178779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] client lang: <none>
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] server lang: <none>
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] kex follows: False
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] Compression: none
2026-04-11T23:36:16.841 [DEBUG] [Thread-178779] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:36:16.861 [DEBUG] [Thread-178779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:36:16.862 [DEBUG] [Thread-178779] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:36:16.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:36:16.863 [DEBUG] [Thread-178779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:36:16.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:36:16.905 [DEBUG] [Thread-178779] [transport.py] [_log()] userauth is OK
2026-04-11T23:36:16.906 [DEBUG] [Thread-178779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:36:16.906 [DEBUG] [Thread-178779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:36:16.906 [DEBUG] [Thread-178779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:36:16.906 [DEBUG] [Thread-178779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:36:16.944 [INFO] [Thread-178779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:36:16.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:36:17.599 [DEBUG] [Thread-178779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:36:17.600 [DEBUG] [Thread-178779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:36:17.600 [DEBUG] [Thread-178779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:36:17.641 [DEBUG] [Thread-178779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:36:17.642 [DEBUG] [Thread-178779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:36:17.647 [DEBUG] [Thread-178779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:36:17.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:36:17.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:36:17.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:36:17.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:36:17.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:36:17.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:36:17.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:36:17.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:36:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:36:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.899765 -999.00  +11.20  11.32     97  +10.80 1 3 1 3 1     0    0 0.39 -0.18 ----- 10.8 11.3 299.6 18.7 12.6 -1.2 12.5 -0.2 12.2 -0.6 12.5 -0.7
2026-04-11T23:36:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:36:17.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:36:17.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.899765
2026-04-11T23:36:17.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:36:17.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:36:17.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:36:17.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:36:17.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:36:17.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:35:51', tmtdew=-0.02934, humidity=100.124, cloud=0.0, wind=20.1132, temperature=11.6201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:35:39.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:36:17.686 [DEBUG] [Thread-178779] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:36:17.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:36:17.783 [DEBUG] [Thread-178782] [transport.py] [_log()] starting thread (client mode): 0xa7956770
2026-04-11T23:36:17.783 [DEBUG] [Thread-178782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:36:17.798 [DEBUG] [Thread-178782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:36:17.798 [INFO] [Thread-178782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:36:17.805 [DEBUG] [Thread-178782] [transport.py] [_log()] client lang: <none>
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] server lang: <none>
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] kex follows: False
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] Compression: none
2026-04-11T23:36:17.806 [DEBUG] [Thread-178782] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:36:17.862 [DEBUG] [Thread-178782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:36:17.863 [DEBUG] [Thread-178782] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:36:17.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:36:17.864 [DEBUG] [Thread-178782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:36:17.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:36:17.919 [DEBUG] [Thread-178782] [transport.py] [_log()] userauth is OK
2026-04-11T23:36:17.919 [DEBUG] [Thread-178782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:36:17.919 [DEBUG] [Thread-178782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:36:17.919 [DEBUG] [Thread-178782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:36:17.919 [DEBUG] [Thread-178782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:36:17.941 [INFO] [Thread-178782] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:36:17.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:36:17.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:36:18.772 [DEBUG] [Thread-178782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:36:18.772 [DEBUG] [Thread-178782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:36:18.820 [DEBUG] [Thread-178782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:36:18.821 [DEBUG] [Thread-178782] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:36:18.830 [DEBUG] [Thread-178782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:36:18.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:36:18.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-04-11T23:36:18.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-04-11T23:36:18.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:36:18.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:36:18.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:36:18.869 [DEBUG] [Thread-178782] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:36:31.529 [DEBUG] [Thread-178784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:42.854 [DEBUG] [Thread-178785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:46.584 [DEBUG] [Thread-178786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:48.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:36:48.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:36:48.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-04-11T23:36:50.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 36, 27), 0.040395, 100.029, 0.0, 23.679, 11.1103, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:36:50.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:36:27
2026-04-11T23:36:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:36:50.714 [DEBUG] [Thread-178787] [transport.py] [_log()] starting thread (client mode): 0xa7954b20
2026-04-11T23:36:50.714 [DEBUG] [Thread-178787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:36:50.729 [DEBUG] [Thread-178787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:36:50.729 [INFO] [Thread-178787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:36:50.732 [DEBUG] [Thread-178787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] client lang: <none>
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] server lang: <none>
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] kex follows: False
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] Compression: none
2026-04-11T23:36:50.733 [DEBUG] [Thread-178787] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:36:50.750 [DEBUG] [Thread-178787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:36:50.751 [DEBUG] [Thread-178787] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:36:50.751 [DEBUG] [Thread-178787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:36:50.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:36:50.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:36:50.753 [DEBUG] [Thread-178787] [transport.py] [_log()] userauth is OK
2026-04-11T23:36:50.753 [DEBUG] [Thread-178787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:36:50.753 [DEBUG] [Thread-178787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:36:50.754 [DEBUG] [Thread-178787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:36:50.754 [DEBUG] [Thread-178787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:36:50.777 [INFO] [Thread-178787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:36:50.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:36:51.460 [DEBUG] [Thread-178787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:36:51.461 [DEBUG] [Thread-178787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:36:51.461 [DEBUG] [Thread-178787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:36:51.502 [DEBUG] [Thread-178787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:36:51.502 [DEBUG] [Thread-178787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:36:51.506 [DEBUG] [Thread-178787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:36:51.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:36:51.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:36:51.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:36:51.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:36:51.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:36:51.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:36:51.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:36:51.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:36:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:36:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.900112 -999.00  +11.20  16.39     97  +10.90 1 3 1 3 1     0    0 0.36 -0.53 ----- 20.0 16.4 301.4 18.2 12.7 -1.2 12.5 -0.6 12.2 -1.0 12.5 -0.6
2026-04-11T23:36:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:36:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:36:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.900112
2026-04-11T23:36:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:36:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:36:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:36:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:36:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:36:51.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:36:27', tmtdew=0.040395, humidity=100.029, cloud=0.0, wind=23.679, temperature=11.1103, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:36:09.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:36:51.533 [DEBUG] [Thread-178787] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:36:51.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:36:51.626 [DEBUG] [Thread-178790] [transport.py] [_log()] starting thread (client mode): 0xa7955cc0
2026-04-11T23:36:51.626 [DEBUG] [Thread-178790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:36:51.641 [DEBUG] [Thread-178790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:36:51.641 [INFO] [Thread-178790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] client lang: <none>
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] server lang: <none>
2026-04-11T23:36:51.649 [DEBUG] [Thread-178790] [transport.py] [_log()] kex follows: False
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] Compression: none
2026-04-11T23:36:51.650 [DEBUG] [Thread-178790] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:36:51.710 [DEBUG] [Thread-178790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:36:51.711 [DEBUG] [Thread-178790] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:36:51.711 [DEBUG] [Thread-178790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:36:51.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:36:51.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:36:51.767 [DEBUG] [Thread-178790] [transport.py] [_log()] userauth is OK
2026-04-11T23:36:51.767 [DEBUG] [Thread-178790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:36:51.767 [DEBUG] [Thread-178790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:36:51.767 [DEBUG] [Thread-178790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:36:51.767 [DEBUG] [Thread-178790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:36:51.786 [INFO] [Thread-178790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:36:51.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:36:51.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:36:52.596 [DEBUG] [Thread-178790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:36:52.596 [DEBUG] [Thread-178790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:36:52.644 [DEBUG] [Thread-178790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:36:52.645 [DEBUG] [Thread-178790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:36:52.654 [DEBUG] [Thread-178790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:36:52.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:36:52.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-04-11T23:36:52.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-04-11T23:36:52.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:36:52.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:36:52.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:36:52.691 [DEBUG] [Thread-178790] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:36:54.989 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:36:54.990 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:01.617 [DEBUG] [Thread-178792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:16.655 [DEBUG] [Thread-178793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:37:22.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:37:22.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-04-11T23:37:23.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 37, 2), 0.03032, 100.095, 0.0, 23.044, 11.16, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:37:23.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:37:02
2026-04-11T23:37:24.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:37:24.552 [DEBUG] [Thread-178794] [transport.py] [_log()] starting thread (client mode): 0xb39c46d0
2026-04-11T23:37:24.553 [DEBUG] [Thread-178794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:37:24.573 [DEBUG] [Thread-178794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:37:24.573 [INFO] [Thread-178794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] client lang: <none>
2026-04-11T23:37:24.576 [DEBUG] [Thread-178794] [transport.py] [_log()] server lang: <none>
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] kex follows: False
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] Compression: none
2026-04-11T23:37:24.577 [DEBUG] [Thread-178794] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:37:24.594 [DEBUG] [Thread-178794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:37:24.595 [DEBUG] [Thread-178794] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:37:24.595 [DEBUG] [Thread-178794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:37:24.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:37:24.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:37:24.597 [DEBUG] [Thread-178794] [transport.py] [_log()] userauth is OK
2026-04-11T23:37:24.597 [DEBUG] [Thread-178794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:37:24.598 [DEBUG] [Thread-178794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:37:24.598 [DEBUG] [Thread-178794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:37:24.598 [DEBUG] [Thread-178794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:37:24.622 [INFO] [Thread-178794] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:37:24.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:37:25.278 [DEBUG] [Thread-178794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:37:25.279 [DEBUG] [Thread-178794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:37:25.279 [DEBUG] [Thread-178794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:37:25.320 [DEBUG] [Thread-178794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:37:25.320 [DEBUG] [Thread-178794] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:37:25.323 [DEBUG] [Thread-178794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:37:25.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:37:25.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:37:25.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:37:25.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:37:25.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:37:25.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:37:25.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:37:25.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:37:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:37:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.900807 -999.00  +11.20  15.47     97  +10.80 1 3 1 3 1     0    0 0.38 -0.32 ----- 16.4 15.5 299.8 25.1 12.7 -1.0 12.5 -0.9 12.2 -0.5 12.5 -0.5
2026-04-11T23:37:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:37:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:37:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.900807
2026-04-11T23:37:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:37:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:37:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:37:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:37:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:37:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:37:02', tmtdew=0.03032, humidity=100.095, cloud=0.0, wind=23.044, temperature=11.16, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:37:09.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:37:25.351 [DEBUG] [Thread-178794] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:37: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-04-11T23:37:25.447 [DEBUG] [Thread-178797] [transport.py] [_log()] starting thread (client mode): 0xb39c5360
2026-04-11T23:37:25.447 [DEBUG] [Thread-178797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:37:25.466 [DEBUG] [Thread-178797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:37:25.466 [INFO] [Thread-178797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:37:25.477 [DEBUG] [Thread-178797] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] client lang: <none>
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] server lang: <none>
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] kex follows: False
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:37:25.478 [DEBUG] [Thread-178797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:37:25.479 [DEBUG] [Thread-178797] [transport.py] [_log()] Compression: none
2026-04-11T23:37:25.479 [DEBUG] [Thread-178797] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:37:25.541 [DEBUG] [Thread-178797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:37:25.542 [DEBUG] [Thread-178797] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:37:25.542 [DEBUG] [Thread-178797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:37:25.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:37:25.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:37:25.605 [DEBUG] [Thread-178797] [transport.py] [_log()] userauth is OK
2026-04-11T23:37:25.605 [DEBUG] [Thread-178797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:37:25.605 [DEBUG] [Thread-178797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:37:25.605 [DEBUG] [Thread-178797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:37:25.606 [DEBUG] [Thread-178797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:37:25.629 [INFO] [Thread-178797] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:37:25.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:37:25.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:37:26.461 [DEBUG] [Thread-178797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:37:26.461 [DEBUG] [Thread-178797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:37:26.512 [DEBUG] [Thread-178797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:37:26.513 [DEBUG] [Thread-178797] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:37:26.523 [DEBUG] [Thread-178797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:37:26.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:37: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-04-11T23: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-04-11T23:37:26.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:37:26.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:37:26.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:37:26.571 [DEBUG] [Thread-178797] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:37:31.689 [DEBUG] [Thread-178799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:42.912 [DEBUG] [Thread-178800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:46.738 [DEBUG] [Thread-178801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:55.195 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:55.196 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:37:56.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:37:56.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:37:56.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-04-11T23:37:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 37, 38), -0.0342, 100.158, 0.0, 24.2057, 11.4874, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:37:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:37:38
2026-04-11T23:37:58.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:37:58.421 [DEBUG] [Thread-178802] [transport.py] [_log()] starting thread (client mode): 0xa7957130
2026-04-11T23:37:58.421 [DEBUG] [Thread-178802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:37:58.441 [DEBUG] [Thread-178802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:37:58.441 [INFO] [Thread-178802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] client lang: <none>
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] server lang: <none>
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] kex follows: False
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] Compression: none
2026-04-11T23:37:58.444 [DEBUG] [Thread-178802] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:37:58.461 [DEBUG] [Thread-178802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:37:58.462 [DEBUG] [Thread-178802] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:37:58.462 [DEBUG] [Thread-178802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:37:58.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:37:58.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:37:58.464 [DEBUG] [Thread-178802] [transport.py] [_log()] userauth is OK
2026-04-11T23:37:58.464 [DEBUG] [Thread-178802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:37:58.464 [DEBUG] [Thread-178802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:37:58.464 [DEBUG] [Thread-178802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:37:58.465 [DEBUG] [Thread-178802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:37:58.487 [INFO] [Thread-178802] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:37:58.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:37:59.121 [DEBUG] [Thread-178802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:37:59.121 [DEBUG] [Thread-178802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:37:59.121 [DEBUG] [Thread-178802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:37:59.162 [DEBUG] [Thread-178802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:37:59.162 [DEBUG] [Thread-178802] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:37:59.165 [DEBUG] [Thread-178802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:37:59.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:37:59.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:37:59.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:37:59.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:37:59.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:37:59.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:37:59.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:37:59.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:37:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:37:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.901154 -999.00  +11.20  14.29     97  +10.80 1 3 1 3 1     0    0 0.37 -0.42 ----- 14.7 14.3 289.0 22.1 12.6 -1.5 12.5 -0.4 12.2 -1.7 12.5 -0.8
2026-04-11T23:37:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:37:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:37:59.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.901154
2026-04-11T23:37:59.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:37:59.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:37:59.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:37:59.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:37:59.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:37:59.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:37:38', tmtdew=-0.0342, humidity=100.158, cloud=0.0, wind=24.2057, temperature=11.4874, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:37:39.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:37:59.192 [DEBUG] [Thread-178802] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:37:59.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:37:59.286 [DEBUG] [Thread-178805] [transport.py] [_log()] starting thread (client mode): 0xa7954370
2026-04-11T23:37:59.286 [DEBUG] [Thread-178805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:37:59.300 [DEBUG] [Thread-178805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:37:59.301 [INFO] [Thread-178805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:37:59.308 [DEBUG] [Thread-178805] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] client lang: <none>
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] server lang: <none>
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] kex follows: False
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] Compression: none
2026-04-11T23:37:59.309 [DEBUG] [Thread-178805] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:37:59.369 [DEBUG] [Thread-178805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:37:59.370 [DEBUG] [Thread-178805] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:37:59.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:37:59.371 [DEBUG] [Thread-178805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:37:59.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:37:59.426 [DEBUG] [Thread-178805] [transport.py] [_log()] userauth is OK
2026-04-11T23:37:59.426 [DEBUG] [Thread-178805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:37:59.427 [DEBUG] [Thread-178805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:37:59.427 [DEBUG] [Thread-178805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:37:59.427 [DEBUG] [Thread-178805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:37:59.447 [INFO] [Thread-178805] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:37:59.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:37:59.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:38:00.275 [DEBUG] [Thread-178805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:38:00.275 [DEBUG] [Thread-178805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:38:00.322 [DEBUG] [Thread-178805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:38:00.323 [DEBUG] [Thread-178805] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:38:00.331 [DEBUG] [Thread-178805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:38:00.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:38:00.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:38:00.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-04-11T23:38:00.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:38:00.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:38:00.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:38:00.367 [DEBUG] [Thread-178805] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:38:01.777 [DEBUG] [Thread-178807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:38:16.829 [DEBUG] [Thread-178808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:38:30.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:38:30.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:38:30.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-04-11T23:38:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 38, 14), 0.035405, 100.062, 0.0, 22.9205, 11.0937, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:38:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:38:14
2026-04-11T23:38:31.867 [DEBUG] [Thread-178809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:38:32.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:38:32.221 [DEBUG] [Thread-178810] [transport.py] [_log()] starting thread (client mode): 0xb39c7c70
2026-04-11T23:38:32.221 [DEBUG] [Thread-178810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:38:32.242 [DEBUG] [Thread-178810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:38:32.242 [INFO] [Thread-178810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] client lang: <none>
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] server lang: <none>
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] kex follows: False
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] Compression: none
2026-04-11T23:38:32.246 [DEBUG] [Thread-178810] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:38:32.263 [DEBUG] [Thread-178810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:38:32.264 [DEBUG] [Thread-178810] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:38:32.264 [DEBUG] [Thread-178810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:38:32.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:38:32.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:38:32.266 [DEBUG] [Thread-178810] [transport.py] [_log()] userauth is OK
2026-04-11T23:38:32.267 [DEBUG] [Thread-178810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:38:32.267 [DEBUG] [Thread-178810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:38:32.267 [DEBUG] [Thread-178810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:38:32.267 [DEBUG] [Thread-178810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:38:32.282 [INFO] [Thread-178810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:38:32.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:38:32.911 [DEBUG] [Thread-178810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:38:32.912 [DEBUG] [Thread-178810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:38:32.912 [DEBUG] [Thread-178810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:38:32.953 [DEBUG] [Thread-178810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:38:32.953 [DEBUG] [Thread-178810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:38:32.956 [DEBUG] [Thread-178810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:38:32.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:38:32.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:38:32.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:38:32.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:38:32.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:38:32.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:38:32.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:38:32.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:38:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:38:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.901501 -999.00  +11.20  17.32     97  +10.80 1 3 1 3 1     0    0 0.38 -0.27 ----- 15.7 17.3 273.4 20.7 12.6 -1.1 12.5 -0.6 12.1 -0.6 12.5 -1.1
2026-04-11T23:38:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:38:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:38:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.901501
2026-04-11T23:38:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:38:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:38:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:38:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:38:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:38:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:38:14', tmtdew=0.035405, humidity=100.062, cloud=0.0, wind=22.9205, temperature=11.0937, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:38:09.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:38:32.983 [DEBUG] [Thread-178810] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:38:33.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:38:33.077 [DEBUG] [Thread-178813] [transport.py] [_log()] starting thread (client mode): 0xa7955420
2026-04-11T23:38:33.077 [DEBUG] [Thread-178813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:38:33.093 [DEBUG] [Thread-178813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:38:33.093 [INFO] [Thread-178813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:38:33.101 [DEBUG] [Thread-178813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] client lang: <none>
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] server lang: <none>
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] kex follows: False
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] Compression: none
2026-04-11T23:38:33.102 [DEBUG] [Thread-178813] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:38:33.161 [DEBUG] [Thread-178813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:38:33.162 [DEBUG] [Thread-178813] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:38:33.162 [DEBUG] [Thread-178813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:38:33.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:38:33.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:38:33.223 [DEBUG] [Thread-178813] [transport.py] [_log()] userauth is OK
2026-04-11T23:38:33.224 [DEBUG] [Thread-178813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:38:33.224 [DEBUG] [Thread-178813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:38:33.224 [DEBUG] [Thread-178813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:38:33.224 [DEBUG] [Thread-178813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:38:33.245 [INFO] [Thread-178813] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:38:33.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:38:33.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:38:34.045 [DEBUG] [Thread-178813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:38:34.045 [DEBUG] [Thread-178813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:38:34.093 [DEBUG] [Thread-178813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:38:34.093 [DEBUG] [Thread-178813] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:38:34.101 [DEBUG] [Thread-178813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:38:34.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:38:34.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-04-11T23:38:34.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-04-11T23:38:34.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:38:34.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:38:34.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:38:34.135 [DEBUG] [Thread-178813] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:38:42.971 [DEBUG] [Thread-178815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:38:46.908 [DEBUG] [Thread-178816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:38:55.401 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:38:55.403 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:01.973 [DEBUG] [Thread-178817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:04.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:39:04.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:39:04.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-04-11T23:39:05.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 38, 50), -0.03412, 100.158, 0.0, 22.6886, 11.4211, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:39:05.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:38:50
2026-04-11T23:39:05.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:39:05.926 [DEBUG] [Thread-178818] [transport.py] [_log()] starting thread (client mode): 0xb39c6d10
2026-04-11T23:39:05.926 [DEBUG] [Thread-178818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:39:05.946 [DEBUG] [Thread-178818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:39:05.946 [INFO] [Thread-178818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:39:05.949 [DEBUG] [Thread-178818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:39:05.949 [DEBUG] [Thread-178818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] client lang: <none>
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] server lang: <none>
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] kex follows: False
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] Compression: none
2026-04-11T23:39:05.950 [DEBUG] [Thread-178818] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:39:05.966 [DEBUG] [Thread-178818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:39:05.967 [DEBUG] [Thread-178818] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:39:05.967 [DEBUG] [Thread-178818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:39:05.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:39:05.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:39:05.969 [DEBUG] [Thread-178818] [transport.py] [_log()] userauth is OK
2026-04-11T23:39:05.970 [DEBUG] [Thread-178818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:39:05.970 [DEBUG] [Thread-178818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:39:05.970 [DEBUG] [Thread-178818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:39:05.970 [DEBUG] [Thread-178818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:39:05.994 [INFO] [Thread-178818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:39:05.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:39:06.622 [DEBUG] [Thread-178818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:39:06.623 [DEBUG] [Thread-178818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:39:06.623 [DEBUG] [Thread-178818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:39:06.664 [DEBUG] [Thread-178818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:39:06.664 [DEBUG] [Thread-178818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:39:06.667 [DEBUG] [Thread-178818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:39:06.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:39:06.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:39:06.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:39:06.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:39:06.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:39:06.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:39:06.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:39:06.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:39:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:39:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.901848 -999.00  +11.10  18.40     97  +10.80 1 3 1 3 1     0    0 0.37 -0.20 ----- 21.1 18.4 287.0 23.9 12.6 -1.5 12.4 -0.6 12.1 -1.4 12.5 -0.8
2026-04-11T23:39:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:39:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:39:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.901848
2026-04-11T23:39:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:39:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:39:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:39:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:39:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:39:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:38:50', tmtdew=-0.03412, humidity=100.158, cloud=0.0, wind=22.6886, temperature=11.4211, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:38:39.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:39:06.692 [DEBUG] [Thread-178818] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:39:06.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:39:06.784 [DEBUG] [Thread-178821] [transport.py] [_log()] starting thread (client mode): 0xb39c5ea0
2026-04-11T23:39:06.784 [DEBUG] [Thread-178821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:39:06.799 [DEBUG] [Thread-178821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:39:06.800 [INFO] [Thread-178821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:39:06.807 [DEBUG] [Thread-178821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:39:06.807 [DEBUG] [Thread-178821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:39:06.807 [DEBUG] [Thread-178821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:39:06.807 [DEBUG] [Thread-178821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:06.807 [DEBUG] [Thread-178821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:06.807 [DEBUG] [Thread-178821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] client lang: <none>
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] server lang: <none>
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] kex follows: False
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] Compression: none
2026-04-11T23:39:06.808 [DEBUG] [Thread-178821] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:39:06.865 [DEBUG] [Thread-178821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:39:06.865 [DEBUG] [Thread-178821] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:39:06.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:39:06.866 [DEBUG] [Thread-178821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:39:06.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:39:06.921 [DEBUG] [Thread-178821] [transport.py] [_log()] userauth is OK
2026-04-11T23:39:06.922 [DEBUG] [Thread-178821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:39:06.922 [DEBUG] [Thread-178821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:39:06.922 [DEBUG] [Thread-178821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:39:06.922 [DEBUG] [Thread-178821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:39:06.941 [INFO] [Thread-178821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:39:06.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:39:06.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:39:07.765 [DEBUG] [Thread-178821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:39:07.765 [DEBUG] [Thread-178821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:39:07.812 [DEBUG] [Thread-178821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:39:07.812 [DEBUG] [Thread-178821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:39:07.821 [DEBUG] [Thread-178821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:39:07.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:39:07.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-04-11T23:39:07.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-04-11T23:39:07.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:39:07.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:39:07.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:39:07.854 [DEBUG] [Thread-178821] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:39:17.007 [DEBUG] [Thread-178823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:32.059 [DEBUG] [Thread-178824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:37.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:39:37.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:39:37.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-04-11T23:39:39.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 39, 25), 0.037925, 100.046, 0.0, 21.3152, 11.0271, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:39:39.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:39:25
2026-04-11T23:39:39.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:39:39.682 [DEBUG] [Thread-178825] [transport.py] [_log()] starting thread (client mode): 0xa79550c0
2026-04-11T23:39:39.682 [DEBUG] [Thread-178825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:39:39.701 [DEBUG] [Thread-178825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:39:39.701 [INFO] [Thread-178825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:39:39.704 [DEBUG] [Thread-178825] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] client lang: <none>
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] server lang: <none>
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] kex follows: False
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] Compression: none
2026-04-11T23:39:39.705 [DEBUG] [Thread-178825] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:39:39.723 [DEBUG] [Thread-178825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:39:39.723 [DEBUG] [Thread-178825] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:39:39.724 [DEBUG] [Thread-178825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:39:39.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:39:39.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:39:39.726 [DEBUG] [Thread-178825] [transport.py] [_log()] userauth is OK
2026-04-11T23:39:39.726 [DEBUG] [Thread-178825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:39:39.726 [DEBUG] [Thread-178825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:39:39.727 [DEBUG] [Thread-178825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:39:39.727 [DEBUG] [Thread-178825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:39:39.750 [INFO] [Thread-178825] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:39:39.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:39:40.359 [DEBUG] [Thread-178825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:39:40.360 [DEBUG] [Thread-178825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:39:40.360 [DEBUG] [Thread-178825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:39:40.401 [DEBUG] [Thread-178825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:39:40.401 [DEBUG] [Thread-178825] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:39:40.405 [DEBUG] [Thread-178825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:39:40.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:39:40.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:39:40.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:39:40.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:39:40.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:39:40.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:39:40.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:39:40.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:39:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:39:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.902195 -999.00  +11.10  18.02     97  +10.70 1 3 1 3 1     0    0 0.37 -0.37 ----- 23.8 18.0 276.2 23.8 12.6 -1.3 12.4 -0.9 12.1 -1.6 12.5 -1.0
2026-04-11T23:39:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:39:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:39:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.902195
2026-04-11T23:39:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:39:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:39:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:39:40.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:39:40.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:39:40.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:39:25', tmtdew=0.037925, humidity=100.046, cloud=0.0, wind=21.3152, temperature=11.0271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:39:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:39:40.429 [DEBUG] [Thread-178825] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:39:40.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:39:40.523 [DEBUG] [Thread-178828] [transport.py] [_log()] starting thread (client mode): 0xb0fcc280
2026-04-11T23:39:40.523 [DEBUG] [Thread-178828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:39:40.538 [DEBUG] [Thread-178828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:39:40.538 [INFO] [Thread-178828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:39:40.546 [DEBUG] [Thread-178828] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] client lang: <none>
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] server lang: <none>
2026-04-11T23:39:40.547 [DEBUG] [Thread-178828] [transport.py] [_log()] kex follows: False
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] Compression: none
2026-04-11T23:39:40.548 [DEBUG] [Thread-178828] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:39:40.604 [DEBUG] [Thread-178828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:39:40.605 [DEBUG] [Thread-178828] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:39:40.606 [DEBUG] [Thread-178828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:39:40.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:39:40.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:39:40.661 [DEBUG] [Thread-178828] [transport.py] [_log()] userauth is OK
2026-04-11T23:39:40.661 [DEBUG] [Thread-178828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:39:40.661 [DEBUG] [Thread-178828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:39:40.661 [DEBUG] [Thread-178828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:39:40.662 [DEBUG] [Thread-178828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:39:40.680 [INFO] [Thread-178828] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:39:40.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:39:40.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:39:41.507 [DEBUG] [Thread-178828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:39:41.508 [DEBUG] [Thread-178828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:39:41.556 [DEBUG] [Thread-178828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:39:41.556 [DEBUG] [Thread-178828] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:39:41.566 [DEBUG] [Thread-178828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:39:41.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:39:41.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-04-11T23:39:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:39:41.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:39:41.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:39:41.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:39:41.600 [DEBUG] [Thread-178828] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:39:43.048 [DEBUG] [Thread-178830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:47.096 [DEBUG] [Thread-178831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:55.607 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:39:55.608 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:02.147 [DEBUG] [Thread-178832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:40:11.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:40:11.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-04-11T23:40:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 40), 0.030415, 100.095, 0.0, 17.91, 11.0271, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:40:12.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:40:00
2026-04-11T23:40:13.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:40:13.423 [DEBUG] [Thread-178833] [transport.py] [_log()] starting thread (client mode): 0xb0fcead0
2026-04-11T23:40:13.423 [DEBUG] [Thread-178833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:40:13.444 [DEBUG] [Thread-178833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:40:13.444 [INFO] [Thread-178833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:13.448 [DEBUG] [Thread-178833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] client lang: <none>
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] server lang: <none>
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] kex follows: False
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:40:13.449 [DEBUG] [Thread-178833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:40:13.450 [DEBUG] [Thread-178833] [transport.py] [_log()] Compression: none
2026-04-11T23:40:13.450 [DEBUG] [Thread-178833] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:40:13.470 [DEBUG] [Thread-178833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:40:13.471 [DEBUG] [Thread-178833] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:40:13.471 [DEBUG] [Thread-178833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:40:13.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:40:13.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:40:13.475 [DEBUG] [Thread-178833] [transport.py] [_log()] userauth is OK
2026-04-11T23:40:13.475 [DEBUG] [Thread-178833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:40:13.475 [DEBUG] [Thread-178833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:40:13.476 [DEBUG] [Thread-178833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:40:13.476 [DEBUG] [Thread-178833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:40:13.513 [INFO] [Thread-178833] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:40:13.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:40:14.443 [DEBUG] [Thread-178833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:40:14.443 [DEBUG] [Thread-178833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:40:14.443 [DEBUG] [Thread-178833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:40:14.484 [DEBUG] [Thread-178833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:40:14.484 [DEBUG] [Thread-178833] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:40:14.488 [DEBUG] [Thread-178833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:40:14.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:40:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:40:14.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:40:14.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:40:14.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:40:14.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:40:14.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:40:14.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:40:14.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:40:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.902543 -999.00  +11.00  21.97     97  +10.60 1 3 1 3 1     0    0 0.38 -0.28 ----- 15.0 22.0 278.0 25.7 12.5 -1.7 12.3 -0.5 12.1 -1.2 12.4 -0.8
2026-04-11T23:40:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:40:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:40:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.902543
2026-04-11T23:40:14.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:40:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:40:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:40:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:40:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:40:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:40:00', tmtdew=0.030415, humidity=100.095, cloud=0.0, wind=17.91, temperature=11.0271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:39:39.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:40:14.516 [DEBUG] [Thread-178833] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:40:14.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:40:14.610 [DEBUG] [Thread-178836] [transport.py] [_log()] starting thread (client mode): 0xb39c7910
2026-04-11T23:40:14.610 [DEBUG] [Thread-178836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:40:14.624 [DEBUG] [Thread-178836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:40:14.624 [INFO] [Thread-178836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:14.632 [DEBUG] [Thread-178836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] client lang: <none>
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] server lang: <none>
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] kex follows: False
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:40:14.633 [DEBUG] [Thread-178836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:40:14.634 [DEBUG] [Thread-178836] [transport.py] [_log()] Compression: none
2026-04-11T23:40:14.634 [DEBUG] [Thread-178836] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:40:14.693 [DEBUG] [Thread-178836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:40:14.694 [DEBUG] [Thread-178836] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:40:14.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:40:14.696 [DEBUG] [Thread-178836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:40:14.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:40:14.752 [DEBUG] [Thread-178836] [transport.py] [_log()] userauth is OK
2026-04-11T23:40:14.752 [DEBUG] [Thread-178836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:40:14.752 [DEBUG] [Thread-178836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:40:14.752 [DEBUG] [Thread-178836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:40:14.752 [DEBUG] [Thread-178836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:40:14.771 [INFO] [Thread-178836] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:40:14.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:40:14.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:40:15.608 [DEBUG] [Thread-178836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:40:15.608 [DEBUG] [Thread-178836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:40:15.656 [DEBUG] [Thread-178836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:40:15.656 [DEBUG] [Thread-178836] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:40:15.666 [DEBUG] [Thread-178836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:40:15.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:40:15.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-04-11T23:40:15.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-04-11T23:40:15.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:40:15.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:40:15.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:40:15.703 [DEBUG] [Thread-178836] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:40:17.184 [DEBUG] [Thread-178838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:32.235 [DEBUG] [Thread-178839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:43.115 [DEBUG] [Thread-178840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:45.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:40:45.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:40:45.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:40:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 40, 36), -0.03933, 100.191, 0.0, 21.1716, 11.5869, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:40:46.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:40:36
2026-04-11T23:40:47.267 [DEBUG] [Thread-178841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:47.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:40:47.487 [DEBUG] [Thread-178842] [transport.py] [_log()] starting thread (client mode): 0xb39c7ac0
2026-04-11T23:40:47.487 [DEBUG] [Thread-178842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:40:47.507 [DEBUG] [Thread-178842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:40:47.507 [INFO] [Thread-178842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] client lang: <none>
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] server lang: <none>
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] kex follows: False
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:40:47.510 [DEBUG] [Thread-178842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:40:47.511 [DEBUG] [Thread-178842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:40:47.511 [DEBUG] [Thread-178842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:40:47.511 [DEBUG] [Thread-178842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:40:47.511 [DEBUG] [Thread-178842] [transport.py] [_log()] Compression: none
2026-04-11T23:40:47.511 [DEBUG] [Thread-178842] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:40:47.527 [DEBUG] [Thread-178842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:40:47.527 [DEBUG] [Thread-178842] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:40:47.528 [DEBUG] [Thread-178842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:40:47.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:40:47.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:40:47.530 [DEBUG] [Thread-178842] [transport.py] [_log()] userauth is OK
2026-04-11T23:40:47.530 [DEBUG] [Thread-178842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:40:47.530 [DEBUG] [Thread-178842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:40:47.530 [DEBUG] [Thread-178842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:40:47.530 [DEBUG] [Thread-178842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:40:47.555 [INFO] [Thread-178842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:40:47.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:40:48.200 [DEBUG] [Thread-178842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:40:48.200 [DEBUG] [Thread-178842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:40:48.200 [DEBUG] [Thread-178842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:40:48.242 [DEBUG] [Thread-178842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:40:48.242 [DEBUG] [Thread-178842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:40:48.244 [DEBUG] [Thread-178842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:40:48.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:40:48.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:40:48.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:40:48.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:40:48.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:40:48.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:40:48.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:40:48.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.902890 -999.00  +11.00  18.99     97  +10.70 1 3 1 3 1     0    0 0.37 -0.30 ----- 14.7 19.0 287.4 21.9 12.5 -1.2 12.4 -0.5 12.0 -0.9 12.4 -0.7
2026-04-11T23:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:40:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:40:48.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.902890
2026-04-11T23:40:48.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:40:48.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:40:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:40:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:40:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:40:48.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:40:36', tmtdew=-0.03933, humidity=100.191, cloud=0.0, wind=21.1716, temperature=11.5869, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:40:09.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:40:48.269 [DEBUG] [Thread-178842] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:40:48.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:40:48.362 [DEBUG] [Thread-178845] [transport.py] [_log()] starting thread (client mode): 0xb0fcd090
2026-04-11T23:40:48.362 [DEBUG] [Thread-178845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:40:48.376 [DEBUG] [Thread-178845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:40:48.377 [INFO] [Thread-178845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:40:48.384 [DEBUG] [Thread-178845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] client lang: <none>
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] server lang: <none>
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] kex follows: False
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] Compression: none
2026-04-11T23:40:48.385 [DEBUG] [Thread-178845] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:40:48.443 [DEBUG] [Thread-178845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:40:48.444 [DEBUG] [Thread-178845] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:40:48.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:40:48.445 [DEBUG] [Thread-178845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:40:48.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:40:48.500 [DEBUG] [Thread-178845] [transport.py] [_log()] userauth is OK
2026-04-11T23:40:48.500 [DEBUG] [Thread-178845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:40:48.500 [DEBUG] [Thread-178845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:40:48.501 [DEBUG] [Thread-178845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:40:48.501 [DEBUG] [Thread-178845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:40:48.520 [INFO] [Thread-178845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:40:48.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:40:48.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:40:49.320 [DEBUG] [Thread-178845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:40:49.320 [DEBUG] [Thread-178845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:40:49.368 [DEBUG] [Thread-178845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:40:49.368 [DEBUG] [Thread-178845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:40:49.378 [DEBUG] [Thread-178845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:40:49.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:40:49.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-04-11T23:40:49.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-04-11T23:40:49.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:40:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:40:49.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:40:49.415 [DEBUG] [Thread-178845] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:40:55.813 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:40:55.814 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:02.303 [DEBUG] [Thread-178847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:17.364 [DEBUG] [Thread-178848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:41:19.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:41:19.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-04-11T23:41:20.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 41, 11), -0.022185, 100.112, 0.0, 21.4042, 11.11, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:41:20.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:41:11
2026-04-11T23:41:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:41:21.292 [DEBUG] [Thread-178849] [transport.py] [_log()] starting thread (client mode): 0xb0fccfd0
2026-04-11T23:41:21.292 [DEBUG] [Thread-178849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:41:21.306 [DEBUG] [Thread-178849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:41:21.306 [INFO] [Thread-178849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:41:21.309 [DEBUG] [Thread-178849] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] client lang: <none>
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] server lang: <none>
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] kex follows: False
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] Compression: none
2026-04-11T23:41:21.310 [DEBUG] [Thread-178849] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:41:21.327 [DEBUG] [Thread-178849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:41:21.328 [DEBUG] [Thread-178849] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:41:21.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:41:21.329 [DEBUG] [Thread-178849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:41:21.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:41:21.331 [DEBUG] [Thread-178849] [transport.py] [_log()] userauth is OK
2026-04-11T23:41:21.331 [DEBUG] [Thread-178849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:41:21.331 [DEBUG] [Thread-178849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:41:21.331 [DEBUG] [Thread-178849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:41:21.331 [DEBUG] [Thread-178849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:41:21.348 [INFO] [Thread-178849] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:41:21.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:41:21.993 [DEBUG] [Thread-178849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:41:21.993 [DEBUG] [Thread-178849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:41:21.994 [DEBUG] [Thread-178849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:41:22.034 [DEBUG] [Thread-178849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:41:22.034 [DEBUG] [Thread-178849] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:41:22.037 [DEBUG] [Thread-178849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:41:22.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:41:22.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:41:22.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:41:22.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:41:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:41:22.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:41:22.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:41:22.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:41:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:41:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.903237 -999.00  +11.10  19.79     97  +10.70 1 3 1 3 1     0    0 0.37 -0.12 ----- 21.4 19.8 286.4 23.0 12.5 -1.5 12.3 -0.7 12.0 -1.2 12.4 -0.8
2026-04-11T23:41:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:41:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:41:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.903237
2026-04-11T23:41:22.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:41:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:41:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:41:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:41:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:41:22.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:41:11', tmtdew=-0.022185, humidity=100.112, cloud=0.0, wind=21.4042, temperature=11.11, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:40:39.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:41:22.061 [DEBUG] [Thread-178849] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:41:22.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:41:22.159 [DEBUG] [Thread-178852] [transport.py] [_log()] starting thread (client mode): 0xb0f6c6d0
2026-04-11T23:41:22.159 [DEBUG] [Thread-178852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:41:22.177 [DEBUG] [Thread-178852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:41:22.177 [INFO] [Thread-178852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:41:22.185 [DEBUG] [Thread-178852] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:41:22.185 [DEBUG] [Thread-178852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:41:22.185 [DEBUG] [Thread-178852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:41:22.185 [DEBUG] [Thread-178852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:22.185 [DEBUG] [Thread-178852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:22.185 [DEBUG] [Thread-178852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] client lang: <none>
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] server lang: <none>
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] kex follows: False
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:41:22.186 [DEBUG] [Thread-178852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:41:22.187 [DEBUG] [Thread-178852] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:41:22.187 [DEBUG] [Thread-178852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:41:22.187 [DEBUG] [Thread-178852] [transport.py] [_log()] Compression: none
2026-04-11T23:41:22.187 [DEBUG] [Thread-178852] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:41:22.242 [DEBUG] [Thread-178852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:41:22.243 [DEBUG] [Thread-178852] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:41:22.243 [DEBUG] [Thread-178852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:41:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:41:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:41:22.303 [DEBUG] [Thread-178852] [transport.py] [_log()] userauth is OK
2026-04-11T23:41:22.303 [DEBUG] [Thread-178852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:41:22.303 [DEBUG] [Thread-178852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:41:22.303 [DEBUG] [Thread-178852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:41:22.304 [DEBUG] [Thread-178852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:41:22.325 [INFO] [Thread-178852] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:41:22.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:41:22.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:41:23.184 [DEBUG] [Thread-178852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:41:23.184 [DEBUG] [Thread-178852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:41:23.236 [DEBUG] [Thread-178852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:41:23.236 [DEBUG] [Thread-178852] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:41:23.248 [DEBUG] [Thread-178852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:41:23.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:41:23.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-04-11T23:41:23.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-04-11T23:41:23.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:41:23.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:41:23.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:41:23.282 [DEBUG] [Thread-178852] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:41:32.399 [DEBUG] [Thread-178854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:43.171 [DEBUG] [Thread-178855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:47.446 [DEBUG] [Thread-178856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:41:53.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:41:53.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-04-11T23:41:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 41, 47), -0.04437, 100.224, 0.0, 19.7604, 11.6201, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:41:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:41:47
2026-04-11T23:41:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:41:55.115 [DEBUG] [Thread-178857] [transport.py] [_log()] starting thread (client mode): 0xb0f6e380
2026-04-11T23:41:55.115 [DEBUG] [Thread-178857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:41:55.138 [DEBUG] [Thread-178857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:41:55.138 [INFO] [Thread-178857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:41:55.142 [DEBUG] [Thread-178857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:41:55.142 [DEBUG] [Thread-178857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] client lang: <none>
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] server lang: <none>
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] kex follows: False
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] Compression: none
2026-04-11T23:41:55.143 [DEBUG] [Thread-178857] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:41:55.162 [DEBUG] [Thread-178857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:41:55.163 [DEBUG] [Thread-178857] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:41:55.163 [DEBUG] [Thread-178857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:41:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:41:55.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:41:55.209 [DEBUG] [Thread-178857] [transport.py] [_log()] userauth is OK
2026-04-11T23:41:55.209 [DEBUG] [Thread-178857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:41:55.209 [DEBUG] [Thread-178857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:41:55.209 [DEBUG] [Thread-178857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:41:55.209 [DEBUG] [Thread-178857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:41:55.243 [INFO] [Thread-178857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:41:55.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:41:55.862 [DEBUG] [Thread-178857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:41:55.863 [DEBUG] [Thread-178857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:41:55.863 [DEBUG] [Thread-178857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:41:55.906 [DEBUG] [Thread-178857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:41:55.907 [DEBUG] [Thread-178857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:41:55.912 [DEBUG] [Thread-178857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:41:55.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:41:55.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:41:55.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:41:55.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:41:55.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:41:55.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:41:55.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:41:55.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:41:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:41:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.903932 -999.00  +11.00  16.41     97  +10.60 1 3 1 3 1     0    0 0.38 -0.01 ----- 23.1 16.4 280.4 24.0 12.4 -1.7 12.3 -0.7 11.9 -1.4 12.3 -0.8
2026-04-11T23:41:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:41:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:41:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.903932
2026-04-11T23:41:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:41:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:41:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:41:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:41:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:41:55.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:41:47', tmtdew=-0.04437, humidity=100.224, cloud=0.0, wind=19.7604, temperature=11.6201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:41:39.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:41:55.957 [DEBUG] [Thread-178857] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:41:56.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:56.019 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:41:56.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:41:56.041 [DEBUG] [Thread-178860] [transport.py] [_log()] starting thread (client mode): 0xb0f6dea0
2026-04-11T23:41:56.041 [DEBUG] [Thread-178860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:41:56.055 [DEBUG] [Thread-178860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:41:56.055 [INFO] [Thread-178860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:41:56.063 [DEBUG] [Thread-178860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] client lang: <none>
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] server lang: <none>
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] kex follows: False
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] Compression: none
2026-04-11T23:41:56.064 [DEBUG] [Thread-178860] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:41:56.123 [DEBUG] [Thread-178860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:41:56.124 [DEBUG] [Thread-178860] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:41:56.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:41:56.125 [DEBUG] [Thread-178860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:41:56.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:41:56.179 [DEBUG] [Thread-178860] [transport.py] [_log()] userauth is OK
2026-04-11T23:41:56.179 [DEBUG] [Thread-178860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:41:56.180 [DEBUG] [Thread-178860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:41:56.180 [DEBUG] [Thread-178860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:41:56.180 [DEBUG] [Thread-178860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:41:56.198 [INFO] [Thread-178860] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:41:56.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:41:56.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:41:57.008 [DEBUG] [Thread-178860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:41:57.008 [DEBUG] [Thread-178860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:41:57.056 [DEBUG] [Thread-178860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:41:57.056 [DEBUG] [Thread-178860] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:41:57.066 [DEBUG] [Thread-178860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:41:57.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:41:57.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:41:57.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:41:57.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:41:57.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:41:57.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:41:57.103 [DEBUG] [Thread-178860] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:42:02.483 [DEBUG] [Thread-178862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:42:17.535 [DEBUG] [Thread-178863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:42:27.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:42:27.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:42:27.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-04-11T23:42:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 41, 47), -0.04437, 100.224, 0.0, 19.7604, 11.6201, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:42:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:41:47
2026-04-11T23:42:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:42:28.996 [DEBUG] [Thread-178864] [transport.py] [_log()] starting thread (client mode): 0xb39c6020
2026-04-11T23:42:28.997 [DEBUG] [Thread-178864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:42:29.017 [DEBUG] [Thread-178864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:42:29.017 [INFO] [Thread-178864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] client lang: <none>
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] server lang: <none>
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] kex follows: False
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] Compression: none
2026-04-11T23:42:29.019 [DEBUG] [Thread-178864] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:42:29.030 [DEBUG] [Thread-178864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:42:29.031 [DEBUG] [Thread-178864] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:42:29.032 [DEBUG] [Thread-178864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:42:29.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:42:29.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:42:29.034 [DEBUG] [Thread-178864] [transport.py] [_log()] userauth is OK
2026-04-11T23:42:29.034 [DEBUG] [Thread-178864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:42:29.034 [DEBUG] [Thread-178864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:42:29.034 [DEBUG] [Thread-178864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:42:29.034 [DEBUG] [Thread-178864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:42:29.061 [INFO] [Thread-178864] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:42:29.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:42:29.718 [DEBUG] [Thread-178864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:42:29.719 [DEBUG] [Thread-178864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:42:29.719 [DEBUG] [Thread-178864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:42:29.760 [DEBUG] [Thread-178864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:42:29.760 [DEBUG] [Thread-178864] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:42:29.764 [DEBUG] [Thread-178864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:42:29.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:42:29.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:42:29.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:42:29.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:42:29.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:42:29.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:42:29.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:42:29.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:42:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:42:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.904278 -999.00  +11.00  18.06     97  +10.60 1 3 1 3 1     0    0 0.39 0.01 ----- 20.4 18.1 288.6 27.6 12.3 -1.5 12.3 -0.5 11.8 -1.9 12.2 -0.7
2026-04-11T23:42:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:42:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:42:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.904278
2026-04-11T23:42:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:42:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:42:29.789 [DEBUG] [Thread-178864] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:42:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:42:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:42:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:42:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:41:47', tmtdew=-0.04437, humidity=100.224, cloud=0.0, wind=19.7604, temperature=11.6201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:42:09.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:42: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-04-11T23:42:29.883 [DEBUG] [Thread-178867] [transport.py] [_log()] starting thread (client mode): 0xb0fcf850
2026-04-11T23:42:29.883 [DEBUG] [Thread-178867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:42:29.898 [DEBUG] [Thread-178867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:42:29.898 [INFO] [Thread-178867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:42:29.906 [DEBUG] [Thread-178867] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:42:29.906 [DEBUG] [Thread-178867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] client lang: <none>
2026-04-11T23:42:29.907 [DEBUG] [Thread-178867] [transport.py] [_log()] server lang: <none>
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] kex follows: False
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:42:29.908 [DEBUG] [Thread-178867] [transport.py] [_log()] Compression: none
2026-04-11T23:42:29.909 [DEBUG] [Thread-178867] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:42:29.967 [DEBUG] [Thread-178867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:42:29.968 [DEBUG] [Thread-178867] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:42:29.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:42:29.969 [DEBUG] [Thread-178867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:42:29.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:42:30.023 [DEBUG] [Thread-178867] [transport.py] [_log()] userauth is OK
2026-04-11T23:42:30.023 [DEBUG] [Thread-178867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:42:30.023 [DEBUG] [Thread-178867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:42:30.023 [DEBUG] [Thread-178867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:42:30.024 [DEBUG] [Thread-178867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:42:30.043 [INFO] [Thread-178867] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:42: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-04-11T23:42:30.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:42:30.861 [DEBUG] [Thread-178867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:42:30.862 [DEBUG] [Thread-178867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:42:30.910 [DEBUG] [Thread-178867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:42:30.911 [DEBUG] [Thread-178867] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:42:30.920 [DEBUG] [Thread-178867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:42:30.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:42:30.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-04-11T23:42:30.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-04-11T23:42:30.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:42:30.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:42:30.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:42:30.956 [DEBUG] [Thread-178867] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:42:32.569 [DEBUG] [Thread-178869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:42:43.229 [DEBUG] [Thread-178870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:42:47.619 [DEBUG] [Thread-178871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:42:56.224 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:42:56.225 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:00.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:43:00.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:43:00.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-04-11T23:43:02.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 42, 22), -0.017155, 100.079, 0.0, 19.5865, 11.0435, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:43:02.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:42:22
2026-04-11T23:43:02.655 [DEBUG] [Thread-178872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:02.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:43:03.038 [DEBUG] [Thread-178873] [transport.py] [_log()] starting thread (client mode): 0xb39c6410
2026-04-11T23:43:03.038 [DEBUG] [Thread-178873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:43:03.060 [DEBUG] [Thread-178873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:43:03.061 [INFO] [Thread-178873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] client lang: <none>
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] server lang: <none>
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] kex follows: False
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:43:03.064 [DEBUG] [Thread-178873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:43:03.065 [DEBUG] [Thread-178873] [transport.py] [_log()] Compression: none
2026-04-11T23:43:03.065 [DEBUG] [Thread-178873] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:43:03.082 [DEBUG] [Thread-178873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:43:03.082 [DEBUG] [Thread-178873] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:43:03.083 [DEBUG] [Thread-178873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:43:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:43:03.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:43:03.087 [DEBUG] [Thread-178873] [transport.py] [_log()] userauth is OK
2026-04-11T23:43:03.087 [DEBUG] [Thread-178873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:43:03.088 [DEBUG] [Thread-178873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:43:03.088 [DEBUG] [Thread-178873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:43:03.088 [DEBUG] [Thread-178873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:43:03.114 [INFO] [Thread-178873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:43:03.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:43:03.862 [DEBUG] [Thread-178873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:43:03.863 [DEBUG] [Thread-178873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:43:03.863 [DEBUG] [Thread-178873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:43:03.903 [DEBUG] [Thread-178873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:43:03.904 [DEBUG] [Thread-178873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:43:03.907 [DEBUG] [Thread-178873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:43:03.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:43:03.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:43:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:43:03.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:43:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:43:03.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:43:03.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:43:03.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:43:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:43:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.904626 -999.00  +11.00  19.38     97  +10.70 1 3 1 3 1     0    0 0.37 -0.54 ----- 20.1 19.4 280.4 23.2 12.4 -1.2 12.2 -0.6 12.0 -1.3 12.3 -0.6
2026-04-11T23:43:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:43:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:43:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.904626
2026-04-11T23:43:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:43:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:43:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:43:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:43:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:43:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:42:22', tmtdew=-0.017155, humidity=100.079, cloud=0.0, wind=19.5865, temperature=11.0435, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:42:39.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:43:03.953 [DEBUG] [Thread-178873] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:43:04.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:43:04.046 [DEBUG] [Thread-178876] [transport.py] [_log()] starting thread (client mode): 0xb39c7f10
2026-04-11T23:43:04.046 [DEBUG] [Thread-178876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:43:04.061 [DEBUG] [Thread-178876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:43:04.061 [INFO] [Thread-178876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:43:04.069 [DEBUG] [Thread-178876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:43:04.069 [DEBUG] [Thread-178876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:43:04.069 [DEBUG] [Thread-178876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:43:04.069 [DEBUG] [Thread-178876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:04.069 [DEBUG] [Thread-178876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:04.069 [DEBUG] [Thread-178876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] client lang: <none>
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] server lang: <none>
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] kex follows: False
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:43:04.070 [DEBUG] [Thread-178876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:43:04.071 [DEBUG] [Thread-178876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:43:04.071 [DEBUG] [Thread-178876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:43:04.071 [DEBUG] [Thread-178876] [transport.py] [_log()] Compression: none
2026-04-11T23:43:04.071 [DEBUG] [Thread-178876] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:43:04.125 [DEBUG] [Thread-178876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:43:04.126 [DEBUG] [Thread-178876] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:43:04.126 [DEBUG] [Thread-178876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:43:04.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:43:04.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:43:04.183 [DEBUG] [Thread-178876] [transport.py] [_log()] userauth is OK
2026-04-11T23:43:04.184 [DEBUG] [Thread-178876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:43:04.184 [DEBUG] [Thread-178876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:43:04.184 [DEBUG] [Thread-178876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:43:04.184 [DEBUG] [Thread-178876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:43:04.202 [INFO] [Thread-178876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:43:04.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:43:04.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:43:05.022 [DEBUG] [Thread-178876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:43:05.022 [DEBUG] [Thread-178876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:43:05.071 [DEBUG] [Thread-178876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:43:05.071 [DEBUG] [Thread-178876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:43:05.081 [DEBUG] [Thread-178876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:43:05.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:43:05.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-04-11T23:43:05.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-04-11T23:43:05.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:43:05.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:43:05.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:43:05.119 [DEBUG] [Thread-178876] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:43:17.691 [DEBUG] [Thread-178878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:32.741 [DEBUG] [Thread-178879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:43:35.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:43:35.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-04-11T23:43:36.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 42, 57), 0.03531, 100.062, 0.0, 20.9272, 11.1266, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:43:36.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:42:57
2026-04-11T23:43:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:43:37.089 [DEBUG] [Thread-178880] [transport.py] [_log()] starting thread (client mode): 0xb0f6ef50
2026-04-11T23:43:37.090 [DEBUG] [Thread-178880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:43:37.112 [DEBUG] [Thread-178880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:43:37.112 [INFO] [Thread-178880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:43:37.115 [DEBUG] [Thread-178880] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:43:37.115 [DEBUG] [Thread-178880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:43:37.115 [DEBUG] [Thread-178880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:43:37.115 [DEBUG] [Thread-178880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] client lang: <none>
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] server lang: <none>
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] kex follows: False
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:43:37.116 [DEBUG] [Thread-178880] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:43:37.117 [DEBUG] [Thread-178880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:43:37.117 [DEBUG] [Thread-178880] [transport.py] [_log()] Compression: none
2026-04-11T23:43:37.117 [DEBUG] [Thread-178880] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:43:37.132 [DEBUG] [Thread-178880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:43:37.133 [DEBUG] [Thread-178880] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:43:37.133 [DEBUG] [Thread-178880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:43:37.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:43:37.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:43:37.138 [DEBUG] [Thread-178880] [transport.py] [_log()] userauth is OK
2026-04-11T23:43:37.138 [DEBUG] [Thread-178880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:43:37.139 [DEBUG] [Thread-178880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:43:37.139 [DEBUG] [Thread-178880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:43:37.139 [DEBUG] [Thread-178880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:43:37.166 [INFO] [Thread-178880] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:43:37.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:43:37.965 [DEBUG] [Thread-178880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:43:37.965 [DEBUG] [Thread-178880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:43:37.966 [DEBUG] [Thread-178880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:43:38.008 [DEBUG] [Thread-178880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:43:38.008 [DEBUG] [Thread-178880] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:43:38.012 [DEBUG] [Thread-178880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:43:38.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:43:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:43:38.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:43:38.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:43:38.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:43:38.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:43:38.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:43:38.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:43:38.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:43:38.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.904973 -999.00  +11.10  17.57     97  +10.70 1 3 1 3 1     0    0 0.36 -0.66 ----- 19.6 17.6 284.9 22.2 12.4 -1.2 12.3 -0.6 12.0 -0.9 12.3 -0.6
2026-04-11T23:43:38.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:43:38.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:43:38.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.904973
2026-04-11T23:43:38.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:43:38.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:43:38.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:43:38.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:43:38.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:43:38.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:42:57', tmtdew=0.03531, humidity=100.062, cloud=0.0, wind=20.9272, temperature=11.1266, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:43:09.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:43:38.051 [DEBUG] [Thread-178880] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:43:38.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:43:38.152 [DEBUG] [Thread-178883] [transport.py] [_log()] starting thread (client mode): 0xb0f6dea0
2026-04-11T23:43:38.152 [DEBUG] [Thread-178883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:43:38.169 [DEBUG] [Thread-178883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:43:38.169 [INFO] [Thread-178883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:43:38.177 [DEBUG] [Thread-178883] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:43:38.177 [DEBUG] [Thread-178883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:43:38.177 [DEBUG] [Thread-178883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:43:38.177 [DEBUG] [Thread-178883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:38.177 [DEBUG] [Thread-178883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:43:38.177 [DEBUG] [Thread-178883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] client lang: <none>
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] server lang: <none>
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] kex follows: False
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] Compression: none
2026-04-11T23:43:38.178 [DEBUG] [Thread-178883] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:43:38.239 [DEBUG] [Thread-178883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:43:38.240 [DEBUG] [Thread-178883] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:43:38.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:43:38.242 [DEBUG] [Thread-178883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:43:38.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:43:38.300 [DEBUG] [Thread-178883] [transport.py] [_log()] userauth is OK
2026-04-11T23:43:38.300 [DEBUG] [Thread-178883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:43:38.301 [DEBUG] [Thread-178883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:43:38.301 [DEBUG] [Thread-178883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:43:38.301 [DEBUG] [Thread-178883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:43:38.323 [INFO] [Thread-178883] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:43:38.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:43:38.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:43:39.128 [DEBUG] [Thread-178883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:43:39.128 [DEBUG] [Thread-178883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:43:39.181 [DEBUG] [Thread-178883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:43:39.181 [DEBUG] [Thread-178883] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:43:39.191 [DEBUG] [Thread-178883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:43:39.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:43:39.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-04-11T23:43:39.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-04-11T23:43:39.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:43:39.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:43:39.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:43:39.234 [DEBUG] [Thread-178883] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:43:43.286 [DEBUG] [Thread-178885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:47.775 [DEBUG] [Thread-178886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:56.427 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:43:56.429 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:02.830 [DEBUG] [Thread-178887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:09.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:44:09.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:44:09.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-04-11T23:44:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 43, 33), -0.04938, 100.257, 0.0, 20.2543, 11.6201, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:44:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:43:33
2026-04-11T23:44:11.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:44:11.295 [DEBUG] [Thread-178888] [transport.py] [_log()] starting thread (client mode): 0xb0f6f7c0
2026-04-11T23:44:11.295 [DEBUG] [Thread-178888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:44:11.317 [DEBUG] [Thread-178888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:44:11.317 [INFO] [Thread-178888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] client lang: <none>
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] server lang: <none>
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] kex follows: False
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:44:11.320 [DEBUG] [Thread-178888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:44:11.321 [DEBUG] [Thread-178888] [transport.py] [_log()] Compression: none
2026-04-11T23:44:11.321 [DEBUG] [Thread-178888] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:44:11.339 [DEBUG] [Thread-178888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:44:11.339 [DEBUG] [Thread-178888] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:44:11.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:44:11.340 [DEBUG] [Thread-178888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:44:11.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:44:11.342 [DEBUG] [Thread-178888] [transport.py] [_log()] userauth is OK
2026-04-11T23:44:11.343 [DEBUG] [Thread-178888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:44:11.343 [DEBUG] [Thread-178888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:44:11.343 [DEBUG] [Thread-178888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:44:11.343 [DEBUG] [Thread-178888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:44:11.366 [INFO] [Thread-178888] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:44:11.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:44:12.141 [DEBUG] [Thread-178888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:44:12.142 [DEBUG] [Thread-178888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:44:12.142 [DEBUG] [Thread-178888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:44:12.183 [DEBUG] [Thread-178888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:44:12.183 [DEBUG] [Thread-178888] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:44:12.187 [DEBUG] [Thread-178888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:44:12.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:44:12.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:44:12.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:44:12.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:44:12.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:44:12.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:44:12.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:44:12.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:44:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:44:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.905321 -999.00  +11.10  13.92     97  +10.70 1 3 1 3 1     0    0 0.36 -0.76 ----- 14.2 13.9 290.6 21.8 12.4 -1.1 12.2 -0.5 11.9 -1.1 12.3 -0.5
2026-04-11T23:44:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:44:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:44:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.905321
2026-04-11T23:44:12.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:44:12.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:44:12.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:44:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:44:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:44:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:43:33', tmtdew=-0.04938, humidity=100.257, cloud=0.0, wind=20.2543, temperature=11.6201, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:43:39.734', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:44:12.212 [DEBUG] [Thread-178888] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:44:12.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:44:12.308 [DEBUG] [Thread-178891] [transport.py] [_log()] starting thread (client mode): 0xb0f6dcc0
2026-04-11T23:44:12.308 [DEBUG] [Thread-178891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:44:12.323 [DEBUG] [Thread-178891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:44:12.323 [INFO] [Thread-178891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:12.331 [DEBUG] [Thread-178891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] client lang: <none>
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] server lang: <none>
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] kex follows: False
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:44:12.332 [DEBUG] [Thread-178891] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:44:12.333 [DEBUG] [Thread-178891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:44:12.333 [DEBUG] [Thread-178891] [transport.py] [_log()] Compression: none
2026-04-11T23:44:12.333 [DEBUG] [Thread-178891] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:44:12.390 [DEBUG] [Thread-178891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:44:12.390 [DEBUG] [Thread-178891] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:44:12.391 [DEBUG] [Thread-178891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:44:12.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:44:12.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:44:12.445 [DEBUG] [Thread-178891] [transport.py] [_log()] userauth is OK
2026-04-11T23:44:12.445 [DEBUG] [Thread-178891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:44:12.445 [DEBUG] [Thread-178891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:44:12.445 [DEBUG] [Thread-178891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:44:12.446 [DEBUG] [Thread-178891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:44:12.468 [INFO] [Thread-178891] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:44:12.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:44:12.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:44:13.321 [DEBUG] [Thread-178891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:44:13.321 [DEBUG] [Thread-178891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:44:13.369 [DEBUG] [Thread-178891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:44:13.369 [DEBUG] [Thread-178891] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:44:13.378 [DEBUG] [Thread-178891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:44:13.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:44:13.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-04-11T23:44:13.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-04-11T23:44:13.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:44:13.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:44:13.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:44:13.413 [DEBUG] [Thread-178891] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:44:17.868 [DEBUG] [Thread-178893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:32.928 [DEBUG] [Thread-178894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:43.345 [DEBUG] [Thread-178895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:43.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:44:43.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:44:43.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-04-11T23:44:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 44, 9), 0.030215, 100.096, 0.0, 21.8444, 11.094, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:44:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:44:09
2026-04-11T23:44:45.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:44:45.259 [DEBUG] [Thread-178896] [transport.py] [_log()] starting thread (client mode): 0xb0f6e1a0
2026-04-11T23:44:45.259 [DEBUG] [Thread-178896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:44:45.280 [DEBUG] [Thread-178896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:44:45.280 [INFO] [Thread-178896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] client lang: <none>
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] server lang: <none>
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] kex follows: False
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:44:45.283 [DEBUG] [Thread-178896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:44:45.284 [DEBUG] [Thread-178896] [transport.py] [_log()] Compression: none
2026-04-11T23:44:45.284 [DEBUG] [Thread-178896] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:44:45.302 [DEBUG] [Thread-178896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:44:45.302 [DEBUG] [Thread-178896] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:44:45.303 [DEBUG] [Thread-178896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:44:45.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:44:45.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:44:45.305 [DEBUG] [Thread-178896] [transport.py] [_log()] userauth is OK
2026-04-11T23:44:45.305 [DEBUG] [Thread-178896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:44:45.305 [DEBUG] [Thread-178896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:44:45.306 [DEBUG] [Thread-178896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:44:45.306 [DEBUG] [Thread-178896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:44:45.330 [INFO] [Thread-178896] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:44:45.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:44:46.105 [DEBUG] [Thread-178896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:44:46.105 [DEBUG] [Thread-178896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:44:46.106 [DEBUG] [Thread-178896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:44:46.146 [DEBUG] [Thread-178896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:44:46.146 [DEBUG] [Thread-178896] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:44:46.149 [DEBUG] [Thread-178896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:44:46.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:44:46.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:44:46.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:44:46.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:44:46.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:44:46.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:44:46.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:44:46.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:44:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:44:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.905668 -999.00  +11.00  16.04     97  +10.70 1 3 1 3 1     0    0 0.35 -0.93 ----- 20.6 16.0 280.4 19.4 12.4 -1.0 12.3 -0.6 11.9 -1.2 12.3 -0.8
2026-04-11T23:44:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:44:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:44:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.905668
2026-04-11T23:44:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:44:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:44:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:44:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:44:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:44:46.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:44:09', tmtdew=0.030215, humidity=100.096, cloud=0.0, wind=21.8444, temperature=11.094, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:44:09.715', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:44:46.176 [DEBUG] [Thread-178896] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:44:46.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:44:46.268 [DEBUG] [Thread-178899] [transport.py] [_log()] starting thread (client mode): 0xb0f6c400
2026-04-11T23:44:46.269 [DEBUG] [Thread-178899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:44:46.285 [DEBUG] [Thread-178899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:44:46.285 [INFO] [Thread-178899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:44:46.294 [DEBUG] [Thread-178899] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:44:46.294 [DEBUG] [Thread-178899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:44:46.295 [DEBUG] [Thread-178899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:44:46.295 [DEBUG] [Thread-178899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:46.295 [DEBUG] [Thread-178899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:44:46.295 [DEBUG] [Thread-178899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:46.295 [DEBUG] [Thread-178899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] client lang: <none>
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] server lang: <none>
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] kex follows: False
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] Compression: none
2026-04-11T23:44:46.296 [DEBUG] [Thread-178899] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:44:46.354 [DEBUG] [Thread-178899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:44:46.355 [DEBUG] [Thread-178899] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:44:46.355 [DEBUG] [Thread-178899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:44:46.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:44:46.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:44:46.415 [DEBUG] [Thread-178899] [transport.py] [_log()] userauth is OK
2026-04-11T23:44:46.415 [DEBUG] [Thread-178899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:44:46.415 [DEBUG] [Thread-178899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:44:46.416 [DEBUG] [Thread-178899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:44:46.416 [DEBUG] [Thread-178899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:44:46.436 [INFO] [Thread-178899] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:44:46.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:44:46.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:44:47.273 [DEBUG] [Thread-178899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:44:47.274 [DEBUG] [Thread-178899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:44:47.322 [DEBUG] [Thread-178899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:44:47.322 [DEBUG] [Thread-178899] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:44:47.332 [DEBUG] [Thread-178899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:44:47.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:44:47.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-04-11T23:44:47.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-04-11T23:44:47.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:44:47.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:44:47.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:44:47.372 [DEBUG] [Thread-178899] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:44:47.961 [DEBUG] [Thread-178901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:56.631 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:44:56.633 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:03.012 [DEBUG] [Thread-178902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:17.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:45:17.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:45:17.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-04-11T23:45:18.047 [DEBUG] [Thread-178903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 44, 45), -0.04949, 100.258, 0.0, 20.3602, 11.5546, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:45:18.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:44:45
2026-04-11T23:45:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:45:19.402 [DEBUG] [Thread-178904] [transport.py] [_log()] starting thread (client mode): 0xb39c7880
2026-04-11T23:45:19.402 [DEBUG] [Thread-178904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:45:19.427 [DEBUG] [Thread-178904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:45:19.427 [INFO] [Thread-178904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:45:19.430 [DEBUG] [Thread-178904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:45:19.430 [DEBUG] [Thread-178904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:45:19.430 [DEBUG] [Thread-178904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] client lang: <none>
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] server lang: <none>
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] kex follows: False
2026-04-11T23:45:19.431 [DEBUG] [Thread-178904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:45:19.432 [DEBUG] [Thread-178904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:45:19.432 [DEBUG] [Thread-178904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:45:19.432 [DEBUG] [Thread-178904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:45:19.432 [DEBUG] [Thread-178904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:45:19.432 [DEBUG] [Thread-178904] [transport.py] [_log()] Compression: none
2026-04-11T23:45:19.432 [DEBUG] [Thread-178904] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:45:19.452 [DEBUG] [Thread-178904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:45:19.452 [DEBUG] [Thread-178904] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:45:19.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:45:19.453 [DEBUG] [Thread-178904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:45:19.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:45:19.455 [DEBUG] [Thread-178904] [transport.py] [_log()] userauth is OK
2026-04-11T23:45:19.455 [DEBUG] [Thread-178904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:45:19.455 [DEBUG] [Thread-178904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:45:19.456 [DEBUG] [Thread-178904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:45:19.456 [DEBUG] [Thread-178904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:45:19.492 [INFO] [Thread-178904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:45:19.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:45:20.439 [DEBUG] [Thread-178904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:45:20.440 [DEBUG] [Thread-178904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:45:20.440 [DEBUG] [Thread-178904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:45:20.481 [DEBUG] [Thread-178904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:45:20.481 [DEBUG] [Thread-178904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:45:20.484 [DEBUG] [Thread-178904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:45:20.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:45:20.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:45:20.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:45:20.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:45:20.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:45:20.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:45:20.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:45:20.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:45:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:45:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.906015 -999.00  +11.00  19.30     97  +10.60 1 3 1 3 1     0    0 0.34 -0.95 ----- 16.6 19.3 289.6 25.2 12.4 -1.0 12.2 -0.6 11.9 -0.5 12.3 -0.6
2026-04-11T23:45:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:45:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:45:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.906015
2026-04-11T23:45:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:45:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:45:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:45:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:45:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:45:20.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:44:45', tmtdew=-0.04949, humidity=100.258, cloud=0.0, wind=20.3602, temperature=11.5546, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:44:39.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:45:20.526 [DEBUG] [Thread-178904] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:45:20.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:45:20.637 [DEBUG] [Thread-178907] [transport.py] [_log()] starting thread (client mode): 0xb39c73a0
2026-04-11T23:45:20.637 [DEBUG] [Thread-178907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:45:20.655 [DEBUG] [Thread-178907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:45:20.655 [INFO] [Thread-178907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:20.663 [DEBUG] [Thread-178907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] client lang: <none>
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] server lang: <none>
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] kex follows: False
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:45:20.664 [DEBUG] [Thread-178907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:45:20.665 [DEBUG] [Thread-178907] [transport.py] [_log()] Compression: none
2026-04-11T23:45:20.665 [DEBUG] [Thread-178907] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:45:20.721 [DEBUG] [Thread-178907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:45:20.722 [DEBUG] [Thread-178907] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:45:20.722 [DEBUG] [Thread-178907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:45:20.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:45:20.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:45:20.777 [DEBUG] [Thread-178907] [transport.py] [_log()] userauth is OK
2026-04-11T23:45:20.777 [DEBUG] [Thread-178907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:45:20.777 [DEBUG] [Thread-178907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:45:20.777 [DEBUG] [Thread-178907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:45:20.778 [DEBUG] [Thread-178907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:45:20.796 [INFO] [Thread-178907] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:45:20.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:45:20.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:45:21.674 [DEBUG] [Thread-178907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:45:21.674 [DEBUG] [Thread-178907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:45:21.722 [DEBUG] [Thread-178907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:45:21.723 [DEBUG] [Thread-178907] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:45:21.732 [DEBUG] [Thread-178907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:45:21.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:45:21.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:45:21.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:45:21.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:45:21.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:45:21.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:45:21.769 [DEBUG] [Thread-178907] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:45:33.085 [DEBUG] [Thread-178909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:43.411 [DEBUG] [Thread-178910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:48.139 [DEBUG] [Thread-178911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:51.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:45:51.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:45:51.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-04-11T23:45:53.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 45, 20), 0.03028, 100.096, 0.0, 21.3851, 11.1107, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:45:53.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:45:20
2026-04-11T23:45:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:45:53.616 [DEBUG] [Thread-178912] [transport.py] [_log()] starting thread (client mode): 0xb0f6c2e0
2026-04-11T23:45:53.616 [DEBUG] [Thread-178912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:45:53.636 [DEBUG] [Thread-178912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:45:53.636 [INFO] [Thread-178912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] client lang: <none>
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] server lang: <none>
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] kex follows: False
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] Compression: none
2026-04-11T23:45:53.639 [DEBUG] [Thread-178912] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:45:53.657 [DEBUG] [Thread-178912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:45:53.657 [DEBUG] [Thread-178912] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:45:53.658 [DEBUG] [Thread-178912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:45:53.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:45:53.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:45:53.659 [DEBUG] [Thread-178912] [transport.py] [_log()] userauth is OK
2026-04-11T23:45:53.660 [DEBUG] [Thread-178912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:45:53.660 [DEBUG] [Thread-178912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:45:53.660 [DEBUG] [Thread-178912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:45:53.660 [DEBUG] [Thread-178912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:45:53.692 [INFO] [Thread-178912] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:45:53.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:45:54.452 [DEBUG] [Thread-178912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:45:54.453 [DEBUG] [Thread-178912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:45:54.453 [DEBUG] [Thread-178912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:45:54.494 [DEBUG] [Thread-178912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:45:54.494 [DEBUG] [Thread-178912] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:45:54.498 [DEBUG] [Thread-178912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:45:54.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:45:54.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:45:54.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:45:54.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:45:54.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:45:54.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:45:54.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:45:54.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:45:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:45:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.906362 -999.00  +11.00  20.78     97  +10.60 1 3 1 3 1     0    0 0.35 -0.90 ----- 21.5 20.8 282.4 28.7 12.3 -1.5 12.2 -0.6 11.9 -1.5 12.3 -0.8
2026-04-11T23:45:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:45:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:45:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.906362
2026-04-11T23:45:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:45:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:45:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:45:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:45:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:45:54.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:45:20', tmtdew=0.03028, humidity=100.096, cloud=0.0, wind=21.3851, temperature=11.1107, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:45:09.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:45:54.528 [DEBUG] [Thread-178912] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:45:54.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:45:54.624 [DEBUG] [Thread-178915] [transport.py] [_log()] starting thread (client mode): 0xb0f6fb80
2026-04-11T23:45:54.624 [DEBUG] [Thread-178915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:45:54.639 [DEBUG] [Thread-178915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:45:54.640 [INFO] [Thread-178915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:45:54.647 [DEBUG] [Thread-178915] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:45:54.648 [DEBUG] [Thread-178915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] client lang: <none>
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] server lang: <none>
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] kex follows: False
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:45:54.649 [DEBUG] [Thread-178915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:45:54.650 [DEBUG] [Thread-178915] [transport.py] [_log()] Compression: none
2026-04-11T23:45:54.650 [DEBUG] [Thread-178915] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:45:54.709 [DEBUG] [Thread-178915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:45:54.709 [DEBUG] [Thread-178915] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:45:54.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:45:54.711 [DEBUG] [Thread-178915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:45:54.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:45:54.765 [DEBUG] [Thread-178915] [transport.py] [_log()] userauth is OK
2026-04-11T23:45:54.765 [DEBUG] [Thread-178915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:45:54.765 [DEBUG] [Thread-178915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:45:54.765 [DEBUG] [Thread-178915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:45:54.765 [DEBUG] [Thread-178915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:45:54.784 [INFO] [Thread-178915] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:45:54.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:45:54.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:45:55.614 [DEBUG] [Thread-178915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:45:55.615 [DEBUG] [Thread-178915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:45:55.663 [DEBUG] [Thread-178915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:45:55.664 [DEBUG] [Thread-178915] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:45:55.673 [DEBUG] [Thread-178915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:45:55.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:45:55.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-04-11T23:45:55.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:45:55.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:45:55.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:45:55.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:45:55.710 [DEBUG] [Thread-178915] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:45:56.835 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:45:56.836 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:03.174 [DEBUG] [Thread-178917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:18.221 [DEBUG] [Thread-178918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:25.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:46:25.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:46:25.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:46:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 45, 56), 0.03028, 100.096, 0.0, 22.356, 11.0607, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:46:26.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:45:56
2026-04-11T23:46:27.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:46:27.543 [DEBUG] [Thread-178919] [transport.py] [_log()] starting thread (client mode): 0xb0f6e3e0
2026-04-11T23:46:27.543 [DEBUG] [Thread-178919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:46:27.563 [DEBUG] [Thread-178919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:46:27.563 [INFO] [Thread-178919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:46:27.566 [DEBUG] [Thread-178919] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:46:27.566 [DEBUG] [Thread-178919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:46:27.566 [DEBUG] [Thread-178919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:46:27.566 [DEBUG] [Thread-178919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] client lang: <none>
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] server lang: <none>
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] kex follows: False
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] Compression: none
2026-04-11T23:46:27.567 [DEBUG] [Thread-178919] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:46:27.585 [DEBUG] [Thread-178919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:46:27.586 [DEBUG] [Thread-178919] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:46:27.586 [DEBUG] [Thread-178919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:46:27.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:46:27.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:46:27.628 [DEBUG] [Thread-178919] [transport.py] [_log()] userauth is OK
2026-04-11T23:46:27.628 [DEBUG] [Thread-178919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:46:27.628 [DEBUG] [Thread-178919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:46:27.628 [DEBUG] [Thread-178919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:46:27.628 [DEBUG] [Thread-178919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:46:27.655 [INFO] [Thread-178919] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:46:27.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:46:28.445 [DEBUG] [Thread-178919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:46:28.446 [DEBUG] [Thread-178919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:46:28.446 [DEBUG] [Thread-178919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:46:28.487 [DEBUG] [Thread-178919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:46:28.487 [DEBUG] [Thread-178919] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:46:28.491 [DEBUG] [Thread-178919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:46:28.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:46:28.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:46:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:46:28.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:46:28.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:46:28.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:46:28.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:46:28.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:46:28.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:46:28.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.906709 -999.00  +11.00  15.70     97  +10.60 1 3 1 3 1     0    0 0.36 -0.75 ----- 18.2 15.7 303.8 24.3 12.3 -1.0 12.2 -0.4 11.9 -0.8 12.3 -0.4
2026-04-11T23:46:28.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:46:28.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:46:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.906709
2026-04-11T23:46:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:46:28.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:46:28.518 [DEBUG] [Thread-178919] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:46:28.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:46:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:46:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:46:28.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:45:56', tmtdew=0.03028, humidity=100.096, cloud=0.0, wind=22.356, temperature=11.0607, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:45:39.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:46:28.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:46:28.611 [DEBUG] [Thread-178922] [transport.py] [_log()] starting thread (client mode): 0xb0f6d3f0
2026-04-11T23:46:28.611 [DEBUG] [Thread-178922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:46:28.626 [DEBUG] [Thread-178922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:46:28.626 [INFO] [Thread-178922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:46:28.633 [DEBUG] [Thread-178922] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] client lang: <none>
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] server lang: <none>
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] kex follows: False
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] Compression: none
2026-04-11T23:46:28.634 [DEBUG] [Thread-178922] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:46:28.694 [DEBUG] [Thread-178922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:46:28.694 [DEBUG] [Thread-178922] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:46:28.694 [DEBUG] [Thread-178922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:46:28.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:46:28.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:46:28.752 [DEBUG] [Thread-178922] [transport.py] [_log()] userauth is OK
2026-04-11T23:46:28.752 [DEBUG] [Thread-178922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:46:28.753 [DEBUG] [Thread-178922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:46:28.753 [DEBUG] [Thread-178922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:46:28.753 [DEBUG] [Thread-178922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:46:28.772 [INFO] [Thread-178922] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:46:28.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:46:28.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:46:29.642 [DEBUG] [Thread-178922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:46:29.642 [DEBUG] [Thread-178922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:46:29.690 [DEBUG] [Thread-178922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:46:29.691 [DEBUG] [Thread-178922] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:46:29.700 [DEBUG] [Thread-178922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:46:29.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:46:29.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-04-11T23:46:29.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-04-11T23:46:29.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:46:29.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:46:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:46:29.736 [DEBUG] [Thread-178922] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:46:33.258 [DEBUG] [Thread-178924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:43.494 [DEBUG] [Thread-178925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:48.307 [DEBUG] [Thread-178926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:57.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:57.043 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:46:59.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:46:59.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:46:59.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-04-11T23:47:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 46, 31), 0.037865, 100.046, 0.0, 22.0738, 11.0109, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:47:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:46:31
2026-04-11T23:47:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:47:01.649 [DEBUG] [Thread-178927] [transport.py] [_log()] starting thread (client mode): 0xb39c64a0
2026-04-11T23:47:01.649 [DEBUG] [Thread-178927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:47:01.670 [DEBUG] [Thread-178927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:47:01.670 [INFO] [Thread-178927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:47:01.673 [DEBUG] [Thread-178927] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:47:01.673 [DEBUG] [Thread-178927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] client lang: <none>
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] server lang: <none>
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] kex follows: False
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:47:01.674 [DEBUG] [Thread-178927] [transport.py] [_log()] Compression: none
2026-04-11T23:47:01.675 [DEBUG] [Thread-178927] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:47:01.693 [DEBUG] [Thread-178927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:47:01.693 [DEBUG] [Thread-178927] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:47:01.694 [DEBUG] [Thread-178927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:47:01.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:47:01.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:47:01.696 [DEBUG] [Thread-178927] [transport.py] [_log()] userauth is OK
2026-04-11T23:47:01.696 [DEBUG] [Thread-178927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:47:01.696 [DEBUG] [Thread-178927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:47:01.696 [DEBUG] [Thread-178927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:47:01.696 [DEBUG] [Thread-178927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:47:01.720 [INFO] [Thread-178927] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:47:01.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:47:02.444 [DEBUG] [Thread-178927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:47:02.444 [DEBUG] [Thread-178927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:47:02.444 [DEBUG] [Thread-178927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:47:02.485 [DEBUG] [Thread-178927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:47:02.485 [DEBUG] [Thread-178927] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:47:02.487 [DEBUG] [Thread-178927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:47:02.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:47:02.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:47:02.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:47:02.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:47:02.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:47:02.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:47:02.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.907404 -999.00  +11.10  17.30     97  +10.70 1 3 1 3 1     0    0 0.35 -0.80 ----- 19.7 17.3 296.6 19.4 12.4 -1.0 12.2 -0.4 12.0 -0.3 12.3 -0.5
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.907404
2026-04-11T23:47:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:47:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:47:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:47:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:47:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:47:02.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:46:31', tmtdew=0.037865, humidity=100.046, cloud=0.0, wind=22.0738, temperature=11.0109, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:46:39.706', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:47:02.507 [DEBUG] [Thread-178927] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:47:02.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:47:02.589 [DEBUG] [Thread-178930] [transport.py] [_log()] starting thread (client mode): 0xb39c6ec0
2026-04-11T23:47:02.589 [DEBUG] [Thread-178930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:47:02.604 [DEBUG] [Thread-178930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:47:02.604 [INFO] [Thread-178930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:47:02.611 [DEBUG] [Thread-178930] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] client lang: <none>
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] server lang: <none>
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] kex follows: False
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] Compression: none
2026-04-11T23:47:02.612 [DEBUG] [Thread-178930] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:47:02.670 [DEBUG] [Thread-178930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:47:02.670 [DEBUG] [Thread-178930] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:47:02.670 [DEBUG] [Thread-178930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:47:02.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:47:02.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:47:02.727 [DEBUG] [Thread-178930] [transport.py] [_log()] userauth is OK
2026-04-11T23:47:02.727 [DEBUG] [Thread-178930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:47:02.727 [DEBUG] [Thread-178930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:47:02.727 [DEBUG] [Thread-178930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:47:02.727 [DEBUG] [Thread-178930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:47:02.744 [INFO] [Thread-178930] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:47:02.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:47:02.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:47:03.346 [DEBUG] [Thread-178932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:47:03.563 [DEBUG] [Thread-178930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:47:03.563 [DEBUG] [Thread-178930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:47:03.611 [DEBUG] [Thread-178930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:47:03.611 [DEBUG] [Thread-178930] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:47:03.621 [DEBUG] [Thread-178930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:47:03.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:47: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')
2026-04-11T23:47:03.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-04-11T23:47:03.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:47:03.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:47:03.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:47:03.657 [DEBUG] [Thread-178930] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:47:18.399 [DEBUG] [Thread-178933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:47:33.431 [DEBUG] [Thread-178934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:47:33.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:47:33.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:47:33.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-04-11T23:47:35.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 47, 7), 0.032795, 100.08, 0.0, 22.0032, 11.0276, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:47:35.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:47:07
2026-04-11T23:47:35.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:47:35.534 [DEBUG] [Thread-178935] [transport.py] [_log()] starting thread (client mode): 0xb0f6ce20
2026-04-11T23:47:35.534 [DEBUG] [Thread-178935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:47:35.555 [DEBUG] [Thread-178935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:47:35.555 [INFO] [Thread-178935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:47:35.560 [DEBUG] [Thread-178935] [transport.py] [_log()] client lang: <none>
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] server lang: <none>
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] kex follows: False
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] Compression: none
2026-04-11T23:47:35.561 [DEBUG] [Thread-178935] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:47:35.580 [DEBUG] [Thread-178935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:47:35.581 [DEBUG] [Thread-178935] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:47:35.581 [DEBUG] [Thread-178935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:47:35.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:47:35.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:47:35.586 [DEBUG] [Thread-178935] [transport.py] [_log()] userauth is OK
2026-04-11T23:47:35.587 [DEBUG] [Thread-178935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:47:35.587 [DEBUG] [Thread-178935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:47:35.587 [DEBUG] [Thread-178935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:47:35.587 [DEBUG] [Thread-178935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:47:35.609 [INFO] [Thread-178935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:47:35.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:47:36.372 [DEBUG] [Thread-178935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:47:36.372 [DEBUG] [Thread-178935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:47:36.372 [DEBUG] [Thread-178935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:47:36.415 [DEBUG] [Thread-178935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:47:36.415 [DEBUG] [Thread-178935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:47:36.420 [DEBUG] [Thread-178935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:47:36.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:47:36.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:47:36.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:47:36.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:47:36.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:47:36.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:47:36.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:47:36.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:47:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:47:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.907751 -999.00  +11.00  20.02     97  +10.60 1 3 1 3 1     0    0 0.34 -1.03 ----- 18.9 20.0 287.8 23.4 12.5 -0.9 12.3 -0.4 11.9 -0.5 12.3 -0.6
2026-04-11T23:47:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:47:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:47:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.907751
2026-04-11T23:47:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:47:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:47:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:47:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:47:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:47:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:47:07', tmtdew=0.032795, humidity=100.08, cloud=0.0, wind=22.0032, temperature=11.0276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:47:09.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:47:36.464 [DEBUG] [Thread-178935] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:47:36.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:47:36.557 [DEBUG] [Thread-178938] [transport.py] [_log()] starting thread (client mode): 0xb0f6cfd0
2026-04-11T23:47:36.557 [DEBUG] [Thread-178938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:47:36.576 [DEBUG] [Thread-178938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:47:36.576 [INFO] [Thread-178938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] client lang: <none>
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] server lang: <none>
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] kex follows: False
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:47:36.584 [DEBUG] [Thread-178938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:47:36.585 [DEBUG] [Thread-178938] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:47:36.585 [DEBUG] [Thread-178938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:47:36.585 [DEBUG] [Thread-178938] [transport.py] [_log()] Compression: none
2026-04-11T23:47:36.585 [DEBUG] [Thread-178938] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:47:36.640 [DEBUG] [Thread-178938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:47:36.641 [DEBUG] [Thread-178938] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:47:36.642 [DEBUG] [Thread-178938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:47:36.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:47:36.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:47:36.697 [DEBUG] [Thread-178938] [transport.py] [_log()] userauth is OK
2026-04-11T23:47:36.697 [DEBUG] [Thread-178938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:47:36.697 [DEBUG] [Thread-178938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:47:36.697 [DEBUG] [Thread-178938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:47:36.697 [DEBUG] [Thread-178938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:47:36.716 [INFO] [Thread-178938] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:47:36.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:47:36.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:47:37.528 [DEBUG] [Thread-178938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:47:37.528 [DEBUG] [Thread-178938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:47:37.577 [DEBUG] [Thread-178938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:47:37.577 [DEBUG] [Thread-178938] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:47:37.586 [DEBUG] [Thread-178938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:47:37.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:47:37.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-04-11T23:47:37.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-04-11T23:47:37.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:47:37.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:47:37.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:47:37.623 [DEBUG] [Thread-178938] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:47:43.555 [DEBUG] [Thread-178940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:47:48.458 [DEBUG] [Thread-178941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:47:57.248 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:47:57.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:03.499 [DEBUG] [Thread-178942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:48:07.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:48:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:48:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 47, 42), -0.03449, 100.159, 0.0, 20.6071, 11.5216, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:48:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:47:42
2026-04-11T23:48:09.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:48:09.427 [DEBUG] [Thread-178943] [transport.py] [_log()] starting thread (client mode): 0xb39c5420
2026-04-11T23:48:09.427 [DEBUG] [Thread-178943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:48:09.447 [DEBUG] [Thread-178943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:48:09.447 [INFO] [Thread-178943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:48:09.448 [DEBUG] [Thread-178943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:48:09.448 [DEBUG] [Thread-178943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] client lang: <none>
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] server lang: <none>
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] kex follows: False
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] Compression: none
2026-04-11T23:48:09.449 [DEBUG] [Thread-178943] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:48:09.458 [DEBUG] [Thread-178943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:48:09.458 [DEBUG] [Thread-178943] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:48:09.458 [DEBUG] [Thread-178943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:48:09.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:48:09.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:48:09.460 [DEBUG] [Thread-178943] [transport.py] [_log()] userauth is OK
2026-04-11T23:48:09.460 [DEBUG] [Thread-178943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:48:09.460 [DEBUG] [Thread-178943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:48:09.460 [DEBUG] [Thread-178943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:48:09.460 [DEBUG] [Thread-178943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:48:09.477 [INFO] [Thread-178943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:48:09.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:48:10.269 [DEBUG] [Thread-178943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:48:10.270 [DEBUG] [Thread-178943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:48:10.270 [DEBUG] [Thread-178943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:48:10.314 [DEBUG] [Thread-178943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:48:10.314 [DEBUG] [Thread-178943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:48:10.320 [DEBUG] [Thread-178943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:48:10.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:48:10.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:48:10.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:48:10.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:48:10.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:48:10.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:48:10.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:48:10.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:48:10.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:48:10.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.908098 -999.00  +11.00  16.94     97  +10.60 1 3 1 3 1     0    0 0.34 -1.04 ----- 17.2 16.9 297.6 21.5 12.4 -1.0 12.3 -0.3 11.9 -0.6 12.3 -0.7
2026-04-11T23:48:10.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:48:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:48:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.908098
2026-04-11T23:48:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:48:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:48:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:48:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:48:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:48:10.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:47:42', tmtdew=-0.03449, humidity=100.159, cloud=0.0, wind=20.6071, temperature=11.5216, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:47:39.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:48:10.358 [DEBUG] [Thread-178943] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:48:10.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:48:10.450 [DEBUG] [Thread-178946] [transport.py] [_log()] starting thread (client mode): 0xb39c7e80
2026-04-11T23:48:10.450 [DEBUG] [Thread-178946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:48:10.464 [DEBUG] [Thread-178946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:48:10.465 [INFO] [Thread-178946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:48:10.472 [DEBUG] [Thread-178946] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:10.473 [DEBUG] [Thread-178946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] client lang: <none>
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] server lang: <none>
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] kex follows: False
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:48:10.474 [DEBUG] [Thread-178946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:48:10.475 [DEBUG] [Thread-178946] [transport.py] [_log()] Compression: none
2026-04-11T23:48:10.475 [DEBUG] [Thread-178946] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:48:10.533 [DEBUG] [Thread-178946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:48:10.534 [DEBUG] [Thread-178946] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:48:10.534 [DEBUG] [Thread-178946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:48:10.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:48:10.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:48:10.592 [DEBUG] [Thread-178946] [transport.py] [_log()] userauth is OK
2026-04-11T23:48:10.593 [DEBUG] [Thread-178946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:48:10.593 [DEBUG] [Thread-178946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:48:10.593 [DEBUG] [Thread-178946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:48:10.593 [DEBUG] [Thread-178946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:48:10.612 [INFO] [Thread-178946] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:48:10.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:48:10.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:48:11.433 [DEBUG] [Thread-178946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:48:11.433 [DEBUG] [Thread-178946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:48:11.481 [DEBUG] [Thread-178946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:48:11.481 [DEBUG] [Thread-178946] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:48:11.491 [DEBUG] [Thread-178946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:48:11.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:48:11.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-04-11T23:48:11.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-04-11T23:48:11.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:48:11.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:48:11.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:48:11.528 [DEBUG] [Thread-178946] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:48:18.536 [DEBUG] [Thread-178948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:33.597 [DEBUG] [Thread-178949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:48:41.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:48:41.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-04-11T23:48:42.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 48, 19), -0.01474, 100.063, 0.0, 18.7214, 11.0278, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:48:42.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:48:19
2026-04-11T23:48:43.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:48:43.319 [DEBUG] [Thread-178950] [transport.py] [_log()] starting thread (client mode): 0xa7956a10
2026-04-11T23:48:43.319 [DEBUG] [Thread-178950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:48:43.340 [DEBUG] [Thread-178950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:48:43.340 [INFO] [Thread-178950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] client lang: <none>
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] server lang: <none>
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] kex follows: False
2026-04-11T23:48:43.343 [DEBUG] [Thread-178950] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:48:43.344 [DEBUG] [Thread-178950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:48:43.344 [DEBUG] [Thread-178950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:48:43.344 [DEBUG] [Thread-178950] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:48:43.344 [DEBUG] [Thread-178950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:48:43.344 [DEBUG] [Thread-178950] [transport.py] [_log()] Compression: none
2026-04-11T23:48:43.344 [DEBUG] [Thread-178950] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:48:43.360 [DEBUG] [Thread-178950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:48:43.360 [DEBUG] [Thread-178950] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:48:43.361 [DEBUG] [Thread-178950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:48:43.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:48:43.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:48:43.363 [DEBUG] [Thread-178950] [transport.py] [_log()] userauth is OK
2026-04-11T23:48:43.363 [DEBUG] [Thread-178950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:48:43.363 [DEBUG] [Thread-178950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:48:43.363 [DEBUG] [Thread-178950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:48:43.363 [DEBUG] [Thread-178950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:48:43.381 [INFO] [Thread-178950] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:48:43.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:48:43.623 [DEBUG] [Thread-178952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:44.146 [DEBUG] [Thread-178950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:48:44.146 [DEBUG] [Thread-178950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:48:44.146 [DEBUG] [Thread-178950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:48:44.187 [DEBUG] [Thread-178950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:48:44.187 [DEBUG] [Thread-178950] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:48:44.191 [DEBUG] [Thread-178950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:48:44.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:48:44.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:48:44.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:48:44.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:48:44.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:48:44.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:48:44.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:48:44.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:48:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:48:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.908445 -999.00  +11.00  24.43     97  +10.60 1 3 1 3 1     0    0 0.35 -0.92 ----- 17.9 24.4 297.4 26.9 12.4 -1.0 12.2 -0.4 12.0 -0.9 12.3 -0.6
2026-04-11T23:48:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:48:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:48:44.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.908445
2026-04-11T23:48:44.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:48:44.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:48:44.219 [DEBUG] [Thread-178950] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:48:44.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:48:44.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:48:44.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:48:44.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:48:19', tmtdew=-0.01474, humidity=100.063, cloud=0.0, wind=18.7214, temperature=11.0278, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:48:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:48:44.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:48:44.314 [DEBUG] [Thread-178954] [transport.py] [_log()] starting thread (client mode): 0xb39c5210
2026-04-11T23:48:44.314 [DEBUG] [Thread-178954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:48:44.328 [DEBUG] [Thread-178954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:48:44.328 [INFO] [Thread-178954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:48:44.336 [DEBUG] [Thread-178954] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:48:44.336 [DEBUG] [Thread-178954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:48:44.336 [DEBUG] [Thread-178954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] client lang: <none>
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] server lang: <none>
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] kex follows: False
2026-04-11T23:48:44.337 [DEBUG] [Thread-178954] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:48:44.338 [DEBUG] [Thread-178954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:48:44.338 [DEBUG] [Thread-178954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:48:44.338 [DEBUG] [Thread-178954] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:48:44.338 [DEBUG] [Thread-178954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:48:44.338 [DEBUG] [Thread-178954] [transport.py] [_log()] Compression: none
2026-04-11T23:48:44.338 [DEBUG] [Thread-178954] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:48:44.395 [DEBUG] [Thread-178954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:48:44.396 [DEBUG] [Thread-178954] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:48:44.397 [DEBUG] [Thread-178954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:48:44.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:48:44.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:48:44.455 [DEBUG] [Thread-178954] [transport.py] [_log()] userauth is OK
2026-04-11T23:48:44.455 [DEBUG] [Thread-178954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:48:44.456 [DEBUG] [Thread-178954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:48:44.456 [DEBUG] [Thread-178954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:48:44.456 [DEBUG] [Thread-178954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:48:44.475 [INFO] [Thread-178954] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:48:44.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:48:44.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:48:45.302 [DEBUG] [Thread-178954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:48:45.302 [DEBUG] [Thread-178954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:48:45.350 [DEBUG] [Thread-178954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:48:45.350 [DEBUG] [Thread-178954] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:48:45.359 [DEBUG] [Thread-178954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:48:45.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:48:45.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-04-11T23:48:45.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:48:45.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:48:45.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:48:45.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:48:45.399 [DEBUG] [Thread-178954] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:48:48.632 [DEBUG] [Thread-178956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:57.451 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:48:57.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:03.682 [DEBUG] [Thread-178957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:15.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:49:15.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:49:15.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-04-11T23:49:16.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 48, 54), -0.03958, 100.193, 0.0, 19.9015, 11.5219, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:49:16.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:48:54
2026-04-11T23:49:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:49:17.296 [DEBUG] [Thread-178958] [transport.py] [_log()] starting thread (client mode): 0xb39c6e30
2026-04-11T23:49:17.296 [DEBUG] [Thread-178958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:49:17.317 [DEBUG] [Thread-178958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:49:17.317 [INFO] [Thread-178958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] client lang: <none>
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] server lang: <none>
2026-04-11T23:49:17.320 [DEBUG] [Thread-178958] [transport.py] [_log()] kex follows: False
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] Compression: none
2026-04-11T23:49:17.321 [DEBUG] [Thread-178958] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:49:17.337 [DEBUG] [Thread-178958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:49:17.338 [DEBUG] [Thread-178958] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:49:17.338 [DEBUG] [Thread-178958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:49:17.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:49:17.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:49:17.340 [DEBUG] [Thread-178958] [transport.py] [_log()] userauth is OK
2026-04-11T23:49:17.340 [DEBUG] [Thread-178958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:49:17.340 [DEBUG] [Thread-178958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:49:17.341 [DEBUG] [Thread-178958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:49:17.341 [DEBUG] [Thread-178958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:49:17.363 [INFO] [Thread-178958] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:49:17.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:49:18.173 [DEBUG] [Thread-178958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:49:18.173 [DEBUG] [Thread-178958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:49:18.173 [DEBUG] [Thread-178958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:49:18.214 [DEBUG] [Thread-178958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:49:18.214 [DEBUG] [Thread-178958] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:49:18.217 [DEBUG] [Thread-178958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:49:18.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:49:18.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:49:18.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:49:18.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:49:18.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:49:18.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:49:18.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:49:18.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:49:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:49:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.908792 -999.00  +11.00  19.75     97  +10.70 1 3 1 3 1     0    0 0.36 -0.94 ----- 14.7 19.8 290.0 21.6 12.3 -1.1 12.3 -0.4 12.0 -0.8 12.3 -0.6
2026-04-11T23:49:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:49:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:49:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.908792
2026-04-11T23:49:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:49:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:49:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:49:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:49:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:49:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:48:54', tmtdew=-0.03958, humidity=100.193, cloud=0.0, wind=19.9015, temperature=11.5219, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:48:39.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:49:18.241 [DEBUG] [Thread-178958] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:49:18.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:49:18.334 [DEBUG] [Thread-178961] [transport.py] [_log()] starting thread (client mode): 0xb0f6dc60
2026-04-11T23:49:18.334 [DEBUG] [Thread-178961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:49:18.349 [DEBUG] [Thread-178961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:49:18.349 [INFO] [Thread-178961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:49:18.357 [DEBUG] [Thread-178961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] client lang: <none>
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] server lang: <none>
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] kex follows: False
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] Compression: none
2026-04-11T23:49:18.358 [DEBUG] [Thread-178961] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:49:18.417 [DEBUG] [Thread-178961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:49:18.418 [DEBUG] [Thread-178961] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:49:18.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:49:18.419 [DEBUG] [Thread-178961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:49:18.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:49:18.481 [DEBUG] [Thread-178961] [transport.py] [_log()] userauth is OK
2026-04-11T23:49:18.482 [DEBUG] [Thread-178961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:49:18.482 [DEBUG] [Thread-178961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:49:18.482 [DEBUG] [Thread-178961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:49:18.482 [DEBUG] [Thread-178961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:49:18.501 [INFO] [Thread-178961] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:49:18.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:49:18.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:49:18.723 [DEBUG] [Thread-178963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:19.333 [DEBUG] [Thread-178961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:49:19.333 [DEBUG] [Thread-178961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:49:19.386 [DEBUG] [Thread-178961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:49:19.386 [DEBUG] [Thread-178961] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:49:19.398 [DEBUG] [Thread-178961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:49:19.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:49:19.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:49:19.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-04-11T23:49:19.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:49:19.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:49:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:49:19.441 [DEBUG] [Thread-178961] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:49:33.769 [DEBUG] [Thread-178964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:43.693 [DEBUG] [Thread-178965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:48.803 [DEBUG] [Thread-178966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:49:49.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:49:49.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-04-11T23:49:50.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 49, 30), 0.03783, 100.046, 0.0, 18.4921, 11.0445, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:49:50.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:49:30
2026-04-11T23:49:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:49:51.270 [DEBUG] [Thread-178967] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-11T23:49:51.270 [DEBUG] [Thread-178967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:49:51.288 [DEBUG] [Thread-178967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:49:51.288 [INFO] [Thread-178967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] client lang: <none>
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] server lang: <none>
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] kex follows: False
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:49:51.291 [DEBUG] [Thread-178967] [transport.py] [_log()] Compression: none
2026-04-11T23:49:51.292 [DEBUG] [Thread-178967] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:49:51.308 [DEBUG] [Thread-178967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:49:51.309 [DEBUG] [Thread-178967] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:49:51.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:49:51.309 [DEBUG] [Thread-178967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:49:51.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:49:51.311 [DEBUG] [Thread-178967] [transport.py] [_log()] userauth is OK
2026-04-11T23:49:51.311 [DEBUG] [Thread-178967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:49:51.311 [DEBUG] [Thread-178967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:49:51.311 [DEBUG] [Thread-178967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:49:51.312 [DEBUG] [Thread-178967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:49:51.335 [INFO] [Thread-178967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:49:51.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:49:52.047 [DEBUG] [Thread-178967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:49:52.047 [DEBUG] [Thread-178967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:49:52.048 [DEBUG] [Thread-178967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:49:52.088 [DEBUG] [Thread-178967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:49:52.089 [DEBUG] [Thread-178967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:49:52.091 [DEBUG] [Thread-178967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:49:52.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:49:52.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:49:52.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:49:52.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:49:52.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:49:52.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:49:52.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:49:52.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:49:52.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:49:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.909140 -999.00  +11.00  14.09     97  +10.70 1 3 1 3 1     0    0 0.33 -1.60 ----- 19.2 14.1 279.1 22.5 12.4 -1.1 12.3 -0.4 12.0 -0.7 12.3 -0.8
2026-04-11T23:49:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:49:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:49:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.909140
2026-04-11T23:49:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:49:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:49:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:49:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:49:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:49:52.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:49:30', tmtdew=0.03783, humidity=100.046, cloud=0.0, wind=18.4921, temperature=11.0445, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:49:09.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:49:52.113 [DEBUG] [Thread-178967] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:49:52.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:49:52.218 [DEBUG] [Thread-178970] [transport.py] [_log()] starting thread (client mode): 0xb0fcea10
2026-04-11T23:49:52.218 [DEBUG] [Thread-178970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:49:52.232 [DEBUG] [Thread-178970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:49:52.232 [INFO] [Thread-178970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:49:52.239 [DEBUG] [Thread-178970] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] client lang: <none>
2026-04-11T23:49:52.240 [DEBUG] [Thread-178970] [transport.py] [_log()] server lang: <none>
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] kex follows: False
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] Compression: none
2026-04-11T23:49:52.241 [DEBUG] [Thread-178970] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:49:52.299 [DEBUG] [Thread-178970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:49:52.300 [DEBUG] [Thread-178970] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:49:52.300 [DEBUG] [Thread-178970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:49:52.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:49:52.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:49:52.355 [DEBUG] [Thread-178970] [transport.py] [_log()] userauth is OK
2026-04-11T23:49:52.355 [DEBUG] [Thread-178970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:49:52.355 [DEBUG] [Thread-178970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:49:52.355 [DEBUG] [Thread-178970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:49:52.355 [DEBUG] [Thread-178970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:49:52.377 [INFO] [Thread-178970] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:49:52.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:49:52.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:49:53.189 [DEBUG] [Thread-178970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:49:53.189 [DEBUG] [Thread-178970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:49:53.237 [DEBUG] [Thread-178970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:49:53.237 [DEBUG] [Thread-178970] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:49:53.246 [DEBUG] [Thread-178970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:49:53.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:49:53.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-04-11T23:49:53.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-04-11T23:49:53.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:49:53.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:49:53.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:49:53.280 [DEBUG] [Thread-178970] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:49:57.657 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:49:57.658 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:03.835 [DEBUG] [Thread-178972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:18.899 [DEBUG] [Thread-178973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:50:23.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:50:23.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:50:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 50, 5), 0.030225, 100.096, 0.0, 19.3741, 11.1274, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:50:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:50:05
2026-04-11T23:50:24.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:50:25.145 [DEBUG] [Thread-178974] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-11T23:50:25.145 [DEBUG] [Thread-178974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:50:25.166 [DEBUG] [Thread-178974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:50:25.166 [INFO] [Thread-178974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] client lang: <none>
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] server lang: <none>
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] kex follows: False
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:50:25.169 [DEBUG] [Thread-178974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:50:25.170 [DEBUG] [Thread-178974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:50:25.170 [DEBUG] [Thread-178974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:50:25.170 [DEBUG] [Thread-178974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:50:25.170 [DEBUG] [Thread-178974] [transport.py] [_log()] Compression: none
2026-04-11T23:50:25.170 [DEBUG] [Thread-178974] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:50:25.186 [DEBUG] [Thread-178974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:50:25.187 [DEBUG] [Thread-178974] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:50:25.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:50:25.188 [DEBUG] [Thread-178974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:50:25.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:50:25.190 [DEBUG] [Thread-178974] [transport.py] [_log()] userauth is OK
2026-04-11T23:50:25.190 [DEBUG] [Thread-178974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:50:25.190 [DEBUG] [Thread-178974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:50:25.190 [DEBUG] [Thread-178974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:50:25.190 [DEBUG] [Thread-178974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:50:25.213 [INFO] [Thread-178974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:50:25.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:50:26.106 [DEBUG] [Thread-178974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:50:26.106 [DEBUG] [Thread-178974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:50:26.107 [DEBUG] [Thread-178974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:50:26.147 [DEBUG] [Thread-178974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:50:26.147 [DEBUG] [Thread-178974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:50:26.150 [DEBUG] [Thread-178974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:50:26.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:50:26.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:50:26.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:50:26.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:50:26.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:50:26.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:50:26.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:50:26.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:50:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:50:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.909487 -999.00  +11.00  17.21     97  +10.70 1 3 1 3 1     0    0 0.32 -2.03 ----- 17.9 17.2 282.4 22.0 12.4 -1.1 12.2 -0.5 12.0 -1.1 12.3 -0.9
2026-04-11T23:50:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:50:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:50:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.909487
2026-04-11T23:50:26.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:50:26.175 [DEBUG] [Thread-178974] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:50:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:50:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:50:26.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:50:26.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:50:26.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:50:05', tmtdew=0.030225, humidity=100.096, cloud=0.0, wind=19.3741, temperature=11.1274, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:49:39.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:50:26.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:50:26.270 [DEBUG] [Thread-178977] [transport.py] [_log()] starting thread (client mode): 0xa7954190
2026-04-11T23:50:26.270 [DEBUG] [Thread-178977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:50:26.284 [DEBUG] [Thread-178977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:50:26.285 [INFO] [Thread-178977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:50:26.292 [DEBUG] [Thread-178977] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:50:26.293 [DEBUG] [Thread-178977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] client lang: <none>
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] server lang: <none>
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] kex follows: False
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] Compression: none
2026-04-11T23:50:26.294 [DEBUG] [Thread-178977] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:50:26.350 [DEBUG] [Thread-178977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:50:26.351 [DEBUG] [Thread-178977] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:50:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:50:26.352 [DEBUG] [Thread-178977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:50:26.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:50:26.406 [DEBUG] [Thread-178977] [transport.py] [_log()] userauth is OK
2026-04-11T23:50:26.406 [DEBUG] [Thread-178977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:50:26.407 [DEBUG] [Thread-178977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:50:26.407 [DEBUG] [Thread-178977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:50:26.407 [DEBUG] [Thread-178977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:50:26.426 [INFO] [Thread-178977] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:50:26.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:50:26.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:50:27.263 [DEBUG] [Thread-178977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:50:27.263 [DEBUG] [Thread-178977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:50:27.311 [DEBUG] [Thread-178977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:50:27.311 [DEBUG] [Thread-178977] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:50:27.320 [DEBUG] [Thread-178977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:50:27.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:50:27.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-04-11T23:50:27.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:50:27.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:50:27.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:50:27.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:50:27.357 [DEBUG] [Thread-178977] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:50:33.935 [DEBUG] [Thread-178979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:43.749 [DEBUG] [Thread-178980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:48.995 [DEBUG] [Thread-178981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:57.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:50:57.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:50:57.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-04-11T23:50:57.862 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:57.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:50:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 50, 40), -0.04946, 100.258, 0.0, 25.2641, 11.5215, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:50:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:50:40
2026-04-11T23:50:59.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:50:59.166 [DEBUG] [Thread-178982] [transport.py] [_log()] starting thread (client mode): 0xb0f6f010
2026-04-11T23:50:59.166 [DEBUG] [Thread-178982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:50:59.190 [DEBUG] [Thread-178982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:50:59.190 [INFO] [Thread-178982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] client lang: <none>
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] server lang: <none>
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] kex follows: False
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] Compression: none
2026-04-11T23:50:59.193 [DEBUG] [Thread-178982] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:50:59.213 [DEBUG] [Thread-178982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:50:59.213 [DEBUG] [Thread-178982] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:50:59.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:50:59.214 [DEBUG] [Thread-178982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:50:59.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:50:59.219 [DEBUG] [Thread-178982] [transport.py] [_log()] userauth is OK
2026-04-11T23:50:59.220 [DEBUG] [Thread-178982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:50:59.220 [DEBUG] [Thread-178982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:50:59.220 [DEBUG] [Thread-178982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:50:59.220 [DEBUG] [Thread-178982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:50:59.246 [INFO] [Thread-178982] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:50:59.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:51:00.048 [DEBUG] [Thread-178982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:51:00.049 [DEBUG] [Thread-178982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:51:00.049 [DEBUG] [Thread-178982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:51:00.091 [DEBUG] [Thread-178982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:51:00.091 [DEBUG] [Thread-178982] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:51:00.094 [DEBUG] [Thread-178982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:51:00.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:51:00.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:51:00.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:51:00.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:51:00.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:51:00.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:51:00.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:51:00.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:51:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:51:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.909834 -999.00  +11.00  18.24     97  +10.60 1 3 1 3 1     0    0 0.32 -1.85 ----- 21.2 18.2 303.8 22.7 12.4 -1.1 12.3 -0.5 12.0 -0.8 12.3 -0.7
2026-04-11T23:51:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:51:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:51:00.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.909834
2026-04-11T23:51:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:51:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:51:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:51:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:51:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:51:00.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:50:40', tmtdew=-0.04946, humidity=100.258, cloud=0.0, wind=25.2641, temperature=11.5215, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:50:09.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:51:00.122 [DEBUG] [Thread-178982] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:51:00.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:51:00.225 [DEBUG] [Thread-178985] [transport.py] [_log()] starting thread (client mode): 0xb0f6cd90
2026-04-11T23:51:00.225 [DEBUG] [Thread-178985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:51:00.239 [DEBUG] [Thread-178985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:51:00.239 [INFO] [Thread-178985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] client lang: <none>
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] server lang: <none>
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] kex follows: False
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:51:00.247 [DEBUG] [Thread-178985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:51:00.248 [DEBUG] [Thread-178985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:51:00.248 [DEBUG] [Thread-178985] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:51:00.248 [DEBUG] [Thread-178985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:51:00.248 [DEBUG] [Thread-178985] [transport.py] [_log()] Compression: none
2026-04-11T23:51:00.248 [DEBUG] [Thread-178985] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:51:00.306 [DEBUG] [Thread-178985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:51:00.307 [DEBUG] [Thread-178985] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:51:00.307 [DEBUG] [Thread-178985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:51:00.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:51:00.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:51:00.370 [DEBUG] [Thread-178985] [transport.py] [_log()] userauth is OK
2026-04-11T23:51:00.371 [DEBUG] [Thread-178985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:51:00.371 [DEBUG] [Thread-178985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:51:00.371 [DEBUG] [Thread-178985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:51:00.371 [DEBUG] [Thread-178985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:51:00.392 [INFO] [Thread-178985] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:51:00.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:51:00.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:51:01.246 [DEBUG] [Thread-178985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:51:01.247 [DEBUG] [Thread-178985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:51:01.294 [DEBUG] [Thread-178985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:51:01.294 [DEBUG] [Thread-178985] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:51:01.304 [DEBUG] [Thread-178985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:51:01.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:51:01.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:51:01.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:51:01.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:51:01.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:51:01.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:51:01.341 [DEBUG] [Thread-178985] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:51:04.033 [DEBUG] [Thread-178987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:51:19.081 [DEBUG] [Thread-178988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:51:31.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:51:31.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:51:31.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-04-11T23:51:32.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 51, 17), 0.03532, 100.063, 0.0, 23.2564, 11.0276, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:51:32.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:51:17
2026-04-11T23:51:33.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:51:33.230 [DEBUG] [Thread-178989] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-11T23:51:33.230 [DEBUG] [Thread-178989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:51:33.253 [DEBUG] [Thread-178989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:51:33.253 [INFO] [Thread-178989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] client lang: <none>
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] server lang: <none>
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] kex follows: False
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] Compression: none
2026-04-11T23:51:33.256 [DEBUG] [Thread-178989] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:51:33.274 [DEBUG] [Thread-178989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:51:33.274 [DEBUG] [Thread-178989] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:51:33.274 [DEBUG] [Thread-178989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:51:33.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:51:33.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:51:33.278 [DEBUG] [Thread-178989] [transport.py] [_log()] userauth is OK
2026-04-11T23:51:33.278 [DEBUG] [Thread-178989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:51:33.278 [DEBUG] [Thread-178989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:51:33.278 [DEBUG] [Thread-178989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:51:33.278 [DEBUG] [Thread-178989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:51:33.296 [INFO] [Thread-178989] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:51:33.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:51:34.079 [DEBUG] [Thread-178989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:51:34.079 [DEBUG] [Thread-178989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:51:34.079 [DEBUG] [Thread-178989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:51:34.117 [DEBUG] [Thread-178991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:51:34.120 [DEBUG] [Thread-178989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:51:34.121 [DEBUG] [Thread-178989] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:51:34.124 [DEBUG] [Thread-178989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:51:34.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:51:34.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:51:34.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:51:34.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:51:34.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:51:34.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:51:34.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:51:34.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:51:34.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:51:34.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.910181 -999.00  +11.00  21.95     97  +10.60 1 3 1 3 1     0    0 0.33 -1.70 ----- 17.3 21.9 286.2 24.3 12.4 -1.1 12.2 -0.4 12.0 -0.5 12.3 -0.6
2026-04-11T23:51:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:51:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:51:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.910181
2026-04-11T23:51:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:51:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:51:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:51:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:51:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:51:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:51:17', tmtdew=0.03532, humidity=100.063, cloud=0.0, wind=23.2564, temperature=11.0276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:50:39.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:51:34.144 [DEBUG] [Thread-178989] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:51:34.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:51:34.239 [DEBUG] [Thread-178993] [transport.py] [_log()] starting thread (client mode): 0xb0fcce50
2026-04-11T23:51:34.239 [DEBUG] [Thread-178993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:51:34.254 [DEBUG] [Thread-178993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:51:34.254 [INFO] [Thread-178993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:51:34.262 [DEBUG] [Thread-178993] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:51:34.262 [DEBUG] [Thread-178993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] client lang: <none>
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] server lang: <none>
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] kex follows: False
2026-04-11T23:51:34.263 [DEBUG] [Thread-178993] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:51:34.264 [DEBUG] [Thread-178993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:51:34.264 [DEBUG] [Thread-178993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:51:34.264 [DEBUG] [Thread-178993] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:51:34.264 [DEBUG] [Thread-178993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:51:34.264 [DEBUG] [Thread-178993] [transport.py] [_log()] Compression: none
2026-04-11T23:51:34.264 [DEBUG] [Thread-178993] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:51:34.323 [DEBUG] [Thread-178993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:51:34.323 [DEBUG] [Thread-178993] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:51:34.324 [DEBUG] [Thread-178993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:51:34.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:51:34.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:51:34.382 [DEBUG] [Thread-178993] [transport.py] [_log()] userauth is OK
2026-04-11T23:51:34.383 [DEBUG] [Thread-178993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:51:34.383 [DEBUG] [Thread-178993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:51:34.383 [DEBUG] [Thread-178993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:51:34.383 [DEBUG] [Thread-178993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:51:34.402 [INFO] [Thread-178993] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:51:34.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:51:34.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:51:35.216 [DEBUG] [Thread-178993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:51:35.216 [DEBUG] [Thread-178993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:51:35.264 [DEBUG] [Thread-178993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:51:35.265 [DEBUG] [Thread-178993] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:51:35.274 [DEBUG] [Thread-178993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:51:35.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:51:35.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:51:35.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:51:35.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:51:35.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:51:35.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:51:35.313 [DEBUG] [Thread-178993] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:51:43.826 [DEBUG] [Thread-178995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:51:49.157 [DEBUG] [Thread-178996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:51:58.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:51:58.065 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:04.205 [DEBUG] [Thread-178997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:52:05.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:52:05.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-04-11T23:52:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 51, 52), -0.02932, 100.125, 0.0, 20.713, 11.4549, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:52:06.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:51:52
2026-04-11T23:52:07.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:52:07.173 [DEBUG] [Thread-178998] [transport.py] [_log()] starting thread (client mode): 0xa7954520
2026-04-11T23:52:07.173 [DEBUG] [Thread-178998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:52:07.193 [DEBUG] [Thread-178998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:52:07.193 [INFO] [Thread-178998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] client lang: <none>
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] server lang: <none>
2026-04-11T23:52:07.197 [DEBUG] [Thread-178998] [transport.py] [_log()] kex follows: False
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] Compression: none
2026-04-11T23:52:07.198 [DEBUG] [Thread-178998] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:52:07.216 [DEBUG] [Thread-178998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:52:07.216 [DEBUG] [Thread-178998] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:52:07.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:52:07.217 [DEBUG] [Thread-178998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:52:07.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:52:07.219 [DEBUG] [Thread-178998] [transport.py] [_log()] userauth is OK
2026-04-11T23:52:07.219 [DEBUG] [Thread-178998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:52:07.219 [DEBUG] [Thread-178998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:52:07.219 [DEBUG] [Thread-178998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:52:07.219 [DEBUG] [Thread-178998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:52:07.255 [INFO] [Thread-178998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:52:07.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:52:08.045 [DEBUG] [Thread-178998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:52:08.045 [DEBUG] [Thread-178998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:52:08.046 [DEBUG] [Thread-178998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:52:08.086 [DEBUG] [Thread-178998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:52:08.086 [DEBUG] [Thread-178998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:52:08.089 [DEBUG] [Thread-178998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:52:08.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:52:08.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:52:08.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:52:08.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:52:08.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:52:08.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:52:08.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:52:08.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:52:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:52:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.910876 -999.00  +10.90  22.25     97  +10.60 1 3 1 3 1     0    0 0.32 -1.79 ----- 20.1 22.2 282.8 26.4 12.3 -1.4 12.2 -0.6 11.9 -0.5 12.3 -0.9
2026-04-11T23:52:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:52:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:52:08.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.910876
2026-04-11T23:52:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:52:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:52:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:52:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:52:08.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:52:08.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:51:52', tmtdew=-0.02932, humidity=100.125, cloud=0.0, wind=20.713, temperature=11.4549, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:51:39.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:52:08.112 [DEBUG] [Thread-178998] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:52:08.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:52:08.209 [DEBUG] [Thread-179001] [transport.py] [_log()] starting thread (client mode): 0xa7954310
2026-04-11T23:52:08.209 [DEBUG] [Thread-179001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:52:08.225 [DEBUG] [Thread-179001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:52:08.225 [INFO] [Thread-179001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:52:08.232 [DEBUG] [Thread-179001] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:52:08.233 [DEBUG] [Thread-179001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] client lang: <none>
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] server lang: <none>
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] kex follows: False
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:52:08.234 [DEBUG] [Thread-179001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:52:08.235 [DEBUG] [Thread-179001] [transport.py] [_log()] Compression: none
2026-04-11T23:52:08.235 [DEBUG] [Thread-179001] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:52:08.292 [DEBUG] [Thread-179001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:52:08.292 [DEBUG] [Thread-179001] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:52:08.293 [DEBUG] [Thread-179001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:52:08.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:52:08.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:52:08.348 [DEBUG] [Thread-179001] [transport.py] [_log()] userauth is OK
2026-04-11T23:52:08.348 [DEBUG] [Thread-179001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:52:08.349 [DEBUG] [Thread-179001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:52:08.349 [DEBUG] [Thread-179001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:52:08.349 [DEBUG] [Thread-179001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:52:08.366 [INFO] [Thread-179001] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:52:08.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:52:08.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:52:09.200 [DEBUG] [Thread-179001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:52:09.201 [DEBUG] [Thread-179001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:52:09.249 [DEBUG] [Thread-179001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:52:09.249 [DEBUG] [Thread-179001] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:52:09.259 [DEBUG] [Thread-179001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:52:09.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:52:09.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-04-11T23:52:09.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:52:09.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:52:09.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:52:09.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:52:09.298 [DEBUG] [Thread-179001] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:52:19.242 [DEBUG] [Thread-179003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:34.295 [DEBUG] [Thread-179004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:52:39.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:52:39.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:52:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 52, 28), 0.03033, 100.096, 0.0, 22.0914, 11.0275, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:52:40.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:52:28
2026-04-11T23:52:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:52:41.150 [DEBUG] [Thread-179005] [transport.py] [_log()] starting thread (client mode): 0xb0f6f190
2026-04-11T23:52:41.150 [DEBUG] [Thread-179005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:52:41.172 [DEBUG] [Thread-179005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:52:41.173 [INFO] [Thread-179005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:52:41.176 [DEBUG] [Thread-179005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:52:41.176 [DEBUG] [Thread-179005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:52:41.176 [DEBUG] [Thread-179005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:52:41.176 [DEBUG] [Thread-179005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:41.176 [DEBUG] [Thread-179005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:41.176 [DEBUG] [Thread-179005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] client lang: <none>
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] server lang: <none>
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] kex follows: False
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:52:41.177 [DEBUG] [Thread-179005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:52:41.178 [DEBUG] [Thread-179005] [transport.py] [_log()] Compression: none
2026-04-11T23:52:41.178 [DEBUG] [Thread-179005] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:52:41.197 [DEBUG] [Thread-179005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:52:41.197 [DEBUG] [Thread-179005] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:52:41.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:52:41.198 [DEBUG] [Thread-179005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:52:41.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:52:41.201 [DEBUG] [Thread-179005] [transport.py] [_log()] userauth is OK
2026-04-11T23:52:41.201 [DEBUG] [Thread-179005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:52:41.201 [DEBUG] [Thread-179005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:52:41.201 [DEBUG] [Thread-179005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:52:41.201 [DEBUG] [Thread-179005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:52:41.224 [INFO] [Thread-179005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:52:41.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:52:42.024 [DEBUG] [Thread-179005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:52:42.024 [DEBUG] [Thread-179005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:52:42.025 [DEBUG] [Thread-179005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:52:42.065 [DEBUG] [Thread-179005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:52:42.065 [DEBUG] [Thread-179005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:52:42.069 [DEBUG] [Thread-179005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:52:42.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:52:42.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:52:42.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:52:42.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:52:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:52:42.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:52:42.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:52:42.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:52:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:52:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.911223 -999.00  +11.00  16.11     97  +10.70 1 3 1 3 1     0    0 0.32 -1.73 ----- 14.5 16.1 299.4 24.9 12.4 -1.2 12.2 -0.5 11.9 -0.3 12.2 -0.9
2026-04-11T23:52:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:52:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:52:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.911223
2026-04-11T23:52:42.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:52:42.096 [DEBUG] [Thread-179005] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:52:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:52:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:52:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:52:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:52:42.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:52:28', tmtdew=0.03033, humidity=100.096, cloud=0.0, wind=22.0914, temperature=11.0275, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:52:09.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:52:42.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:52:42.200 [DEBUG] [Thread-179008] [transport.py] [_log()] starting thread (client mode): 0xb0fcdb10
2026-04-11T23:52:42.200 [DEBUG] [Thread-179008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:52:42.215 [DEBUG] [Thread-179008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:52:42.215 [INFO] [Thread-179008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:52:42.222 [DEBUG] [Thread-179008] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:52:42.223 [DEBUG] [Thread-179008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:52:42.224 [DEBUG] [Thread-179008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:52:42.224 [DEBUG] [Thread-179008] [transport.py] [_log()] client lang: <none>
2026-04-11T23:52:42.224 [DEBUG] [Thread-179008] [transport.py] [_log()] server lang: <none>
2026-04-11T23:52:42.224 [DEBUG] [Thread-179008] [transport.py] [_log()] kex follows: False
2026-04-11T23:52:42.224 [DEBUG] [Thread-179008] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:52:42.224 [DEBUG] [Thread-179008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:52:42.225 [DEBUG] [Thread-179008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:52:42.225 [DEBUG] [Thread-179008] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:52:42.225 [DEBUG] [Thread-179008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:52:42.225 [DEBUG] [Thread-179008] [transport.py] [_log()] Compression: none
2026-04-11T23:52:42.225 [DEBUG] [Thread-179008] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:52:42.282 [DEBUG] [Thread-179008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:52:42.282 [DEBUG] [Thread-179008] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:52:42.283 [DEBUG] [Thread-179008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:52:42.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:52:42.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:52:42.338 [DEBUG] [Thread-179008] [transport.py] [_log()] userauth is OK
2026-04-11T23:52:42.338 [DEBUG] [Thread-179008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:52:42.338 [DEBUG] [Thread-179008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:52:42.338 [DEBUG] [Thread-179008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:52:42.338 [DEBUG] [Thread-179008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:52:42.357 [INFO] [Thread-179008] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:52:42.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:52:42.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:52:43.175 [DEBUG] [Thread-179008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:52:43.175 [DEBUG] [Thread-179008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:52:43.223 [DEBUG] [Thread-179008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:52:43.223 [DEBUG] [Thread-179008] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:52:43.232 [DEBUG] [Thread-179008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:52:43.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:52:43.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-04-11T23:52:43.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-04-11T23:52:43.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:52:43.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:52:43.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:52:43.270 [DEBUG] [Thread-179008] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:52:43.884 [DEBUG] [Thread-179010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:49.335 [DEBUG] [Thread-179011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:58.270 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:52:58.271 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:04.394 [DEBUG] [Thread-179012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:13.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:53:13.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:53:13.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-04-11T23:53:14.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 53, 3), 0.03541, 100.063, 0.0, 23.5026, 10.9777, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:53:14.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:53:03
2026-04-11T23:53:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:53:15.147 [DEBUG] [Thread-179013] [transport.py] [_log()] starting thread (client mode): 0xae5f1690
2026-04-11T23:53:15.148 [DEBUG] [Thread-179013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:53:15.162 [DEBUG] [Thread-179013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:53:15.162 [INFO] [Thread-179013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] client lang: <none>
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] server lang: <none>
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] kex follows: False
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] Compression: none
2026-04-11T23:53:15.164 [DEBUG] [Thread-179013] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:53:15.175 [DEBUG] [Thread-179013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:53:15.176 [DEBUG] [Thread-179013] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:53:15.176 [DEBUG] [Thread-179013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:53:15.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:53:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:53:15.177 [DEBUG] [Thread-179013] [transport.py] [_log()] userauth is OK
2026-04-11T23:53:15.177 [DEBUG] [Thread-179013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:53:15.178 [DEBUG] [Thread-179013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:53:15.178 [DEBUG] [Thread-179013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:53:15.178 [DEBUG] [Thread-179013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:53:15.213 [INFO] [Thread-179013] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:53:15.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:53:15.989 [DEBUG] [Thread-179013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:53:15.989 [DEBUG] [Thread-179013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:53:15.990 [DEBUG] [Thread-179013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:53:16.030 [DEBUG] [Thread-179013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:53:16.030 [DEBUG] [Thread-179013] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:53:16.033 [DEBUG] [Thread-179013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:53:16.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:53:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:53:16.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:53:16.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:53:16.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:53:16.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:53:16.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:53:16.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:53:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:53:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.911570 -999.00  +11.00  15.54     97  +10.70 1 3 1 3 1     0    0 0.30 -2.17 ----- 16.0 15.5 294.2 17.8 12.4 -1.3 12.2 -0.4 11.9 -1.0 12.3 -0.8
2026-04-11T23:53:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:53:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:53:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.911570
2026-04-11T23:53:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:53:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:53:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:53:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:53:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:53:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:53:03', tmtdew=0.03541, humidity=100.063, cloud=0.0, wind=23.5026, temperature=10.9777, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:52:39.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:53:16.060 [DEBUG] [Thread-179013] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:53:16.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:53:16.159 [DEBUG] [Thread-179016] [transport.py] [_log()] starting thread (client mode): 0xae5f1c60
2026-04-11T23:53:16.159 [DEBUG] [Thread-179016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:53:16.179 [DEBUG] [Thread-179016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:53:16.179 [INFO] [Thread-179016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:16.187 [DEBUG] [Thread-179016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] client lang: <none>
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] server lang: <none>
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] kex follows: False
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] Compression: none
2026-04-11T23:53:16.188 [DEBUG] [Thread-179016] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:53:16.247 [DEBUG] [Thread-179016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:53:16.247 [DEBUG] [Thread-179016] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:53:16.248 [DEBUG] [Thread-179016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:53:16.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:53:16.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:53:16.308 [DEBUG] [Thread-179016] [transport.py] [_log()] userauth is OK
2026-04-11T23:53:16.308 [DEBUG] [Thread-179016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:53:16.308 [DEBUG] [Thread-179016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:53:16.309 [DEBUG] [Thread-179016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:53:16.309 [DEBUG] [Thread-179016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:53:16.333 [INFO] [Thread-179016] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:53:16.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:53:16.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:53:17.190 [DEBUG] [Thread-179016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:53:17.190 [DEBUG] [Thread-179016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:53:17.241 [DEBUG] [Thread-179016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:53:17.241 [DEBUG] [Thread-179016] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:53:17.252 [DEBUG] [Thread-179016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:53:17.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:53:17.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-04-11T23:53:17.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-04-11T23:53:17.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:53:17.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:53:17.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:53:17.290 [DEBUG] [Thread-179016] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:53:19.429 [DEBUG] [Thread-179018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:34.492 [DEBUG] [Thread-179019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:43.951 [DEBUG] [Thread-179020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:47.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:53:47.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:53: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-04-11T23:53:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 53, 39), -0.03926, 100.192, 0.0, 20.8541, 11.4216, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:53:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:53:39
2026-04-11T23:53:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:53:49.178 [DEBUG] [Thread-179021] [transport.py] [_log()] starting thread (client mode): 0xb0f6c8b0
2026-04-11T23:53:49.178 [DEBUG] [Thread-179021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:53:49.200 [DEBUG] [Thread-179021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:53:49.200 [INFO] [Thread-179021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:53:49.204 [DEBUG] [Thread-179021] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:53:49.204 [DEBUG] [Thread-179021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:53:49.204 [DEBUG] [Thread-179021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:53:49.204 [DEBUG] [Thread-179021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:49.204 [DEBUG] [Thread-179021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:49.204 [DEBUG] [Thread-179021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] client lang: <none>
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] server lang: <none>
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] kex follows: False
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:53:49.205 [DEBUG] [Thread-179021] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:53:49.206 [DEBUG] [Thread-179021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:53:49.206 [DEBUG] [Thread-179021] [transport.py] [_log()] Compression: none
2026-04-11T23:53:49.206 [DEBUG] [Thread-179021] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:53:49.225 [DEBUG] [Thread-179021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:53:49.226 [DEBUG] [Thread-179021] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:53:49.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:53:49.227 [DEBUG] [Thread-179021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:53:49.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:53:49.230 [DEBUG] [Thread-179021] [transport.py] [_log()] userauth is OK
2026-04-11T23:53:49.230 [DEBUG] [Thread-179021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:53:49.231 [DEBUG] [Thread-179021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:53:49.231 [DEBUG] [Thread-179021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:53:49.231 [DEBUG] [Thread-179021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:53:49.255 [INFO] [Thread-179021] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:53:49.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:53:49.527 [DEBUG] [Thread-179023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:50.050 [DEBUG] [Thread-179021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:53:50.051 [DEBUG] [Thread-179021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:53:50.051 [DEBUG] [Thread-179021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:53:50.093 [DEBUG] [Thread-179021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:53:50.093 [DEBUG] [Thread-179021] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:53:50.098 [DEBUG] [Thread-179021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:53:50.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:53:50.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:53:50.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:53:50.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:53:50.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:53:50.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:53:50.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:53:50.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:53:50.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:53:50.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.911917 -999.00  +11.00  14.31     97  +10.70 1 3 1 3 1     0    0 0.30 -2.36 ----- 15.4 14.3 298.4 18.2 12.4 -1.2 12.3 -0.4 12.0 -0.3 12.3 -0.9
2026-04-11T23:53:50.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:53:50.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:53:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.911917
2026-04-11T23:53:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:53:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:53:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:53:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:53:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:53:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:53:39', tmtdew=-0.03926, humidity=100.192, cloud=0.0, wind=20.8541, temperature=11.4216, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:53:09.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:53:50.133 [DEBUG] [Thread-179021] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:53:50.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:53:50.229 [DEBUG] [Thread-179025] [transport.py] [_log()] starting thread (client mode): 0xb0f6f610
2026-04-11T23:53:50.229 [DEBUG] [Thread-179025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:53:50.245 [DEBUG] [Thread-179025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:53:50.245 [INFO] [Thread-179025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:53:50.253 [DEBUG] [Thread-179025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:53:50.253 [DEBUG] [Thread-179025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:53:50.253 [DEBUG] [Thread-179025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:53:50.253 [DEBUG] [Thread-179025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] client lang: <none>
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] server lang: <none>
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] kex follows: False
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] Compression: none
2026-04-11T23:53:50.254 [DEBUG] [Thread-179025] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:53:50.315 [DEBUG] [Thread-179025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:53:50.315 [DEBUG] [Thread-179025] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:53:50.316 [DEBUG] [Thread-179025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:53:50.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:53:50.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:53:50.376 [DEBUG] [Thread-179025] [transport.py] [_log()] userauth is OK
2026-04-11T23:53:50.377 [DEBUG] [Thread-179025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:53:50.377 [DEBUG] [Thread-179025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:53:50.377 [DEBUG] [Thread-179025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:53:50.377 [DEBUG] [Thread-179025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:53:50.396 [INFO] [Thread-179025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:53:50.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:53:50.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:53:51.221 [DEBUG] [Thread-179025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:53:51.222 [DEBUG] [Thread-179025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:53:51.270 [DEBUG] [Thread-179025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:53:51.270 [DEBUG] [Thread-179025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:53:51.280 [DEBUG] [Thread-179025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:53:51.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:53: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')
2026-04-11T23:53:51.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:53:51.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:53:51.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:53:51.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:53:51.319 [DEBUG] [Thread-179025] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:53:58.474 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:53:58.475 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:04.560 [DEBUG] [Thread-179027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:19.609 [DEBUG] [Thread-179028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:21.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:54:21.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:54:21.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-04-11T23:54:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 54, 15), 0.03284, 100.08, 0.0, 19.0912, 11.0444, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:54:22.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:54:15
2026-04-11T23:54:22.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:54:23.141 [DEBUG] [Thread-179029] [transport.py] [_log()] starting thread (client mode): 0xb0f6d5d0
2026-04-11T23:54:23.142 [DEBUG] [Thread-179029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:54:23.162 [DEBUG] [Thread-179029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:54:23.162 [INFO] [Thread-179029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:54:23.165 [DEBUG] [Thread-179029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:54:23.165 [DEBUG] [Thread-179029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:54:23.165 [DEBUG] [Thread-179029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] client lang: <none>
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] server lang: <none>
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] kex follows: False
2026-04-11T23:54:23.166 [DEBUG] [Thread-179029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:54:23.167 [DEBUG] [Thread-179029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:54:23.167 [DEBUG] [Thread-179029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:54:23.167 [DEBUG] [Thread-179029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:54:23.167 [DEBUG] [Thread-179029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:54:23.167 [DEBUG] [Thread-179029] [transport.py] [_log()] Compression: none
2026-04-11T23:54:23.167 [DEBUG] [Thread-179029] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:54:23.191 [DEBUG] [Thread-179029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:54:23.192 [DEBUG] [Thread-179029] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:54:23.192 [DEBUG] [Thread-179029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:54:23.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:54:23.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:54:23.197 [DEBUG] [Thread-179029] [transport.py] [_log()] userauth is OK
2026-04-11T23:54:23.198 [DEBUG] [Thread-179029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:54:23.198 [DEBUG] [Thread-179029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:54:23.198 [DEBUG] [Thread-179029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:54:23.198 [DEBUG] [Thread-179029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:54:23.236 [INFO] [Thread-179029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:54:23.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:54:24.008 [DEBUG] [Thread-179029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:54:24.008 [DEBUG] [Thread-179029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:54:24.009 [DEBUG] [Thread-179029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:54:24.050 [DEBUG] [Thread-179029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:54:24.051 [DEBUG] [Thread-179029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:54:24.056 [DEBUG] [Thread-179029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:54:24.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:54:24.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:54:24.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:54:24.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:54:24.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:54:24.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:54:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:54:24.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:54:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:54:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.912265 -999.00  +11.00  13.75     97  +10.70 1 3 1 3 1     0    0 0.29 -2.41 ----- 12.9 13.8 296.0 21.9 12.4 -1.5 12.2 -0.3 12.0 -0.4 12.3 -1.0
2026-04-11T23:54:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:54:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:54:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.912265
2026-04-11T23:54:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:54:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:54:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:54:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:54:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:54:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:54:15', tmtdew=0.03284, humidity=100.08, cloud=0.0, wind=19.0912, temperature=11.0444, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:53:39.696', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:54:24.093 [DEBUG] [Thread-179029] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:54:24.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:54:24.187 [DEBUG] [Thread-179032] [transport.py] [_log()] starting thread (client mode): 0xb0fcea70
2026-04-11T23:54:24.187 [DEBUG] [Thread-179032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:54:24.202 [DEBUG] [Thread-179032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:54:24.202 [INFO] [Thread-179032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:24.210 [DEBUG] [Thread-179032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] client lang: <none>
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] server lang: <none>
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] kex follows: False
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] Compression: none
2026-04-11T23:54:24.211 [DEBUG] [Thread-179032] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:54:24.269 [DEBUG] [Thread-179032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:54:24.270 [DEBUG] [Thread-179032] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:54:24.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:54:24.271 [DEBUG] [Thread-179032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:54:24.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:54:24.326 [DEBUG] [Thread-179032] [transport.py] [_log()] userauth is OK
2026-04-11T23:54:24.326 [DEBUG] [Thread-179032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:54:24.327 [DEBUG] [Thread-179032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:54:24.327 [DEBUG] [Thread-179032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:54:24.327 [DEBUG] [Thread-179032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:54:24.350 [INFO] [Thread-179032] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:54:24.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:54:24.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:54:25.165 [DEBUG] [Thread-179032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:54:25.165 [DEBUG] [Thread-179032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:54:25.213 [DEBUG] [Thread-179032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:54:25.214 [DEBUG] [Thread-179032] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:54:25.224 [DEBUG] [Thread-179032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:54:25.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:54:25.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-04-11T23:54:25.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:54:25.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:54:25.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:54:25.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:54:25.266 [DEBUG] [Thread-179032] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:54:34.643 [DEBUG] [Thread-179034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:44.004 [DEBUG] [Thread-179035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:49.705 [DEBUG] [Thread-179036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:55.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:54:55.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:54:55.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-04-11T23:54:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 54, 15), 0.03284, 100.08, 0.0, 19.0912, 11.0444, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:54:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:54:15
2026-04-11T23:54:56.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:54:57.071 [DEBUG] [Thread-179037] [transport.py] [_log()] starting thread (client mode): 0xb0f6caf0
2026-04-11T23:54:57.071 [DEBUG] [Thread-179037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:54:57.091 [DEBUG] [Thread-179037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:54:57.091 [INFO] [Thread-179037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:54:57.094 [DEBUG] [Thread-179037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:54:57.094 [DEBUG] [Thread-179037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] client lang: <none>
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] server lang: <none>
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] kex follows: False
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] Compression: none
2026-04-11T23:54:57.095 [DEBUG] [Thread-179037] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:54:57.114 [DEBUG] [Thread-179037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:54:57.115 [DEBUG] [Thread-179037] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:54:57.115 [DEBUG] [Thread-179037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:54:57.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:54:57.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:54:57.157 [DEBUG] [Thread-179037] [transport.py] [_log()] userauth is OK
2026-04-11T23:54:57.157 [DEBUG] [Thread-179037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:54:57.157 [DEBUG] [Thread-179037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:54:57.157 [DEBUG] [Thread-179037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:54:57.157 [DEBUG] [Thread-179037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:54:57.193 [INFO] [Thread-179037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:54:57.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:54:57.967 [DEBUG] [Thread-179037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:54:57.967 [DEBUG] [Thread-179037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:54:57.967 [DEBUG] [Thread-179037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:54:58.008 [DEBUG] [Thread-179037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:54:58.008 [DEBUG] [Thread-179037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:54:58.011 [DEBUG] [Thread-179037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:54:58.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:54:58.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:54:58.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:54:58.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:54:58.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:54:58.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:54:58.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:54:58.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:54:58.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:54:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.912612 -999.00  +11.00  19.79     97  +10.70 1 3 1 3 1     0    0 0.29 -2.53 ----- 22.4 19.8 291.5 22.2 12.4 -1.1 12.3 -0.5 12.0 -0.9 12.3 -1.0
2026-04-11T23:54:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:54:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:54:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.912612
2026-04-11T23:54:58.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:54:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:54:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:54:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:54:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:54:58.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:54:15', tmtdew=0.03284, humidity=100.08, cloud=0.0, wind=19.0912, temperature=11.0444, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:54:09.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:54:58.035 [DEBUG] [Thread-179037] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:54:58.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:54:58.131 [DEBUG] [Thread-179040] [transport.py] [_log()] starting thread (client mode): 0xae5f3370
2026-04-11T23:54:58.131 [DEBUG] [Thread-179040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:54:58.145 [DEBUG] [Thread-179040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:54:58.146 [INFO] [Thread-179040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] client lang: <none>
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] server lang: <none>
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] kex follows: False
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:54:58.154 [DEBUG] [Thread-179040] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:54:58.155 [DEBUG] [Thread-179040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:54:58.155 [DEBUG] [Thread-179040] [transport.py] [_log()] Compression: none
2026-04-11T23:54:58.155 [DEBUG] [Thread-179040] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:54:58.210 [DEBUG] [Thread-179040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:54:58.210 [DEBUG] [Thread-179040] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:54:58.210 [DEBUG] [Thread-179040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:54:58.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:54:58.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:54:58.267 [DEBUG] [Thread-179040] [transport.py] [_log()] userauth is OK
2026-04-11T23:54:58.267 [DEBUG] [Thread-179040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:54:58.268 [DEBUG] [Thread-179040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:54:58.268 [DEBUG] [Thread-179040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:54:58.268 [DEBUG] [Thread-179040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:54:58.291 [INFO] [Thread-179040] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:54:58.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:54:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:54:58.678 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:58.680 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:54:59.110 [DEBUG] [Thread-179040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:54:59.111 [DEBUG] [Thread-179040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:54:59.159 [DEBUG] [Thread-179040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:54:59.159 [DEBUG] [Thread-179040] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:54:59.168 [DEBUG] [Thread-179040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:54:59.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:54:59.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-04-11T23:54:59.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-04-11T23:54:59.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:54:59.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:54:59.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:54:59.207 [DEBUG] [Thread-179040] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:55:04.740 [DEBUG] [Thread-179042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:55:19.791 [DEBUG] [Thread-179043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:55:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:55:29.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:55:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:55:30.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 54, 50), -0.02924, 100.126, 0.0, 18.455, 11.3225, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:55:30.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:54:50
2026-04-11T23:55:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:55:31.207 [DEBUG] [Thread-179044] [transport.py] [_log()] starting thread (client mode): 0xae5f1120
2026-04-11T23:55:31.207 [DEBUG] [Thread-179044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:55:31.227 [DEBUG] [Thread-179044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:55:31.227 [INFO] [Thread-179044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:55:31.231 [DEBUG] [Thread-179044] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:55:31.231 [DEBUG] [Thread-179044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] client lang: <none>
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] server lang: <none>
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] kex follows: False
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:55:31.232 [DEBUG] [Thread-179044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:55:31.233 [DEBUG] [Thread-179044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:55:31.233 [DEBUG] [Thread-179044] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:55:31.233 [DEBUG] [Thread-179044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:55:31.233 [DEBUG] [Thread-179044] [transport.py] [_log()] Compression: none
2026-04-11T23:55:31.233 [DEBUG] [Thread-179044] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:55:31.243 [DEBUG] [Thread-179044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:55:31.244 [DEBUG] [Thread-179044] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:55:31.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:55:31.245 [DEBUG] [Thread-179044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:55:31.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:55:31.285 [DEBUG] [Thread-179044] [transport.py] [_log()] userauth is OK
2026-04-11T23:55:31.285 [DEBUG] [Thread-179044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:55:31.285 [DEBUG] [Thread-179044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:55:31.285 [DEBUG] [Thread-179044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:55:31.285 [DEBUG] [Thread-179044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:55:31.306 [INFO] [Thread-179044] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:55:31.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:55:32.255 [DEBUG] [Thread-179044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:55:32.256 [DEBUG] [Thread-179044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:55:32.256 [DEBUG] [Thread-179044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:55:32.299 [DEBUG] [Thread-179044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:55:32.300 [DEBUG] [Thread-179044] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:55:32.306 [DEBUG] [Thread-179044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:55:32.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:55:32.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:55:32.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:55:32.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:55:32.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:55:32.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:55:32.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:55:32.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:55:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:55:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.912959 -999.00  +11.00  15.36     97  +10.60 1 3 1 3 1     0    0 0.28 -2.71 ----- 20.8 15.4 298.8 23.3 12.3 -1.3 12.2 -0.4 12.0 -0.5 12.3 -1.0
2026-04-11T23:55:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:55:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:55:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.912959
2026-04-11T23:55:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:55:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:55:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:55:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:55:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:55:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:54:50', tmtdew=-0.02924, humidity=100.126, cloud=0.0, wind=18.455, temperature=11.3225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:54:39.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:55:32.343 [DEBUG] [Thread-179044] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:55:32.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:55:32.437 [DEBUG] [Thread-179047] [transport.py] [_log()] starting thread (client mode): 0xae5f2350
2026-04-11T23:55:32.437 [DEBUG] [Thread-179047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:55:32.452 [DEBUG] [Thread-179047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:55:32.452 [INFO] [Thread-179047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:55:32.462 [DEBUG] [Thread-179047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] client lang: <none>
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] server lang: <none>
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] kex follows: False
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] Compression: none
2026-04-11T23:55:32.463 [DEBUG] [Thread-179047] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:55:32.520 [DEBUG] [Thread-179047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:55:32.521 [DEBUG] [Thread-179047] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:55:32.521 [DEBUG] [Thread-179047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:55:32.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:55:32.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:55:32.576 [DEBUG] [Thread-179047] [transport.py] [_log()] userauth is OK
2026-04-11T23:55:32.577 [DEBUG] [Thread-179047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:55:32.577 [DEBUG] [Thread-179047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:55:32.577 [DEBUG] [Thread-179047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:55:32.577 [DEBUG] [Thread-179047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:55:32.595 [INFO] [Thread-179047] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:55:32.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:55:32.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:55:33.416 [DEBUG] [Thread-179047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:55:33.417 [DEBUG] [Thread-179047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:55:33.465 [DEBUG] [Thread-179047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:55:33.465 [DEBUG] [Thread-179047] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:55:33.477 [DEBUG] [Thread-179047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:55:33.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:55:33.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:55:33.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:55:33.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:55:33.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:55:33.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:55:33.526 [DEBUG] [Thread-179047] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:55:34.826 [DEBUG] [Thread-179049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:55:44.061 [DEBUG] [Thread-179050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:55:49.883 [DEBUG] [Thread-179051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:55:58.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:55:58.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:03.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:56:03.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:56:03.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-04-11T23:56:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 55, 25), -0.019715, 100.096, 0.0, 19.3219, 11.0112, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:56:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:55:25
2026-04-11T23:56:04.921 [DEBUG] [Thread-179052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:05.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:56:05.570 [DEBUG] [Thread-179053] [transport.py] [_log()] starting thread (client mode): 0xb0fcee00
2026-04-11T23:56:05.570 [DEBUG] [Thread-179053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:56:05.591 [DEBUG] [Thread-179053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:56:05.591 [INFO] [Thread-179053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] client lang: <none>
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] server lang: <none>
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] kex follows: False
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:56:05.595 [DEBUG] [Thread-179053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:56:05.596 [DEBUG] [Thread-179053] [transport.py] [_log()] Compression: none
2026-04-11T23:56:05.596 [DEBUG] [Thread-179053] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:56:05.612 [DEBUG] [Thread-179053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:56:05.612 [DEBUG] [Thread-179053] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:56:05.613 [DEBUG] [Thread-179053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:56:05.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:56:05.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:56:05.615 [DEBUG] [Thread-179053] [transport.py] [_log()] userauth is OK
2026-04-11T23:56:05.615 [DEBUG] [Thread-179053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:56:05.616 [DEBUG] [Thread-179053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:56:05.616 [DEBUG] [Thread-179053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:56:05.616 [DEBUG] [Thread-179053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:56:05.629 [INFO] [Thread-179053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:56:05.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:56:06.396 [DEBUG] [Thread-179053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:56:06.396 [DEBUG] [Thread-179053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:56:06.397 [DEBUG] [Thread-179053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:56:06.436 [DEBUG] [Thread-179053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:56:06.437 [DEBUG] [Thread-179053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:56:06.439 [DEBUG] [Thread-179053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:56:06.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:56:06.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:56:06.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:56:06.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:56:06.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:56:06.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:56:06.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:56:06.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:56:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:56:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.913306 -999.00  +11.00  11.87     97  +10.70 1 3 1 3 1     0    0 0.28 -2.74 ----- 12.4 11.9 286.0 25.1 12.4 -1.7 12.3 -0.4 12.0 -0.9 12.3 -0.9
2026-04-11T23:56:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:56:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:56:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.913306
2026-04-11T23:56:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:56:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:56:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:56:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:56:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:56:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:55:25', tmtdew=-0.019715, humidity=100.096, cloud=0.0, wind=19.3219, temperature=11.0112, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:55:09.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:56:06.459 [DEBUG] [Thread-179053] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:56:06.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:56:06.538 [DEBUG] [Thread-179056] [transport.py] [_log()] starting thread (client mode): 0xb0fcc430
2026-04-11T23:56:06.538 [DEBUG] [Thread-179056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:56:06.553 [DEBUG] [Thread-179056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:56:06.553 [INFO] [Thread-179056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:56:06.560 [DEBUG] [Thread-179056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] client lang: <none>
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] server lang: <none>
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] kex follows: False
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] Compression: none
2026-04-11T23:56:06.561 [DEBUG] [Thread-179056] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:56:06.618 [DEBUG] [Thread-179056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:56:06.619 [DEBUG] [Thread-179056] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:56:06.619 [DEBUG] [Thread-179056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:56:06.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:56:06.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:56:06.674 [DEBUG] [Thread-179056] [transport.py] [_log()] userauth is OK
2026-04-11T23:56:06.674 [DEBUG] [Thread-179056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:56:06.675 [DEBUG] [Thread-179056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:56:06.675 [DEBUG] [Thread-179056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:56:06.675 [DEBUG] [Thread-179056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:56:06.694 [INFO] [Thread-179056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:56:06.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:56:06.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:56:07.527 [DEBUG] [Thread-179056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:56:07.527 [DEBUG] [Thread-179056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:56:07.575 [DEBUG] [Thread-179056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:56:07.575 [DEBUG] [Thread-179056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:56:07.584 [DEBUG] [Thread-179056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:56:07.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:56:07.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:56:07.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-04-11T23:56:07.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:56:07.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:56:07.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:56:07.622 [DEBUG] [Thread-179056] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:56:19.956 [DEBUG] [Thread-179058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:35.006 [DEBUG] [Thread-179059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:56:37.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:56:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:56:38.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 56, 1), 0.035265, 100.063, 0.0, 19.0037, 11.0778, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:56:38.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:56:01
2026-04-11T23:56:39.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:56:39.511 [DEBUG] [Thread-179060] [transport.py] [_log()] starting thread (client mode): 0xb0fcd780
2026-04-11T23:56:39.511 [DEBUG] [Thread-179060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:56:39.533 [DEBUG] [Thread-179060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:56:39.533 [INFO] [Thread-179060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:39.536 [DEBUG] [Thread-179060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] client lang: <none>
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] server lang: <none>
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] kex follows: False
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] Compression: none
2026-04-11T23:56:39.537 [DEBUG] [Thread-179060] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:56:39.555 [DEBUG] [Thread-179060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:56:39.555 [DEBUG] [Thread-179060] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:56:39.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:56:39.556 [DEBUG] [Thread-179060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:56:39.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:56:39.558 [DEBUG] [Thread-179060] [transport.py] [_log()] userauth is OK
2026-04-11T23:56:39.558 [DEBUG] [Thread-179060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:56:39.559 [DEBUG] [Thread-179060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:56:39.559 [DEBUG] [Thread-179060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:56:39.559 [DEBUG] [Thread-179060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:56:39.574 [INFO] [Thread-179060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:56:39.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:56:40.356 [DEBUG] [Thread-179060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:56:40.357 [DEBUG] [Thread-179060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:56:40.357 [DEBUG] [Thread-179060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:56:40.398 [DEBUG] [Thread-179060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:56:40.399 [DEBUG] [Thread-179060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:56:40.402 [DEBUG] [Thread-179060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:56:40.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:56:40.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:56:40.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:56:40.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:56:40.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:56:40.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:56:40.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:56:40.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:56:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:56:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.914001 -999.00  +11.00  15.47     97  +10.70 1 3 1 3 1     0    0 0.28 -2.55 ----- 19.7 15.5 274.8 19.1 12.4 -1.6 12.3 -0.5 11.9 -0.6 12.3 -1.2
2026-04-11T23:56:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:56:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:56:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.914001
2026-04-11T23:56:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:56:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:56:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:56:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:56:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:56:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:56:01', tmtdew=0.035265, humidity=100.063, cloud=0.0, wind=19.0037, temperature=11.0778, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:56:09.686', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:56:40.427 [DEBUG] [Thread-179060] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:56:40.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:56:40.520 [DEBUG] [Thread-179063] [transport.py] [_log()] starting thread (client mode): 0xae5f2da0
2026-04-11T23:56:40.520 [DEBUG] [Thread-179063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:56:40.535 [DEBUG] [Thread-179063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:56:40.535 [INFO] [Thread-179063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:56:40.543 [DEBUG] [Thread-179063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] client lang: <none>
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] server lang: <none>
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] kex follows: False
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:56:40.544 [DEBUG] [Thread-179063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:56:40.545 [DEBUG] [Thread-179063] [transport.py] [_log()] Compression: none
2026-04-11T23:56:40.545 [DEBUG] [Thread-179063] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:56:40.604 [DEBUG] [Thread-179063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:56:40.604 [DEBUG] [Thread-179063] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:56:40.605 [DEBUG] [Thread-179063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:56:40.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:56:40.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:56:40.660 [DEBUG] [Thread-179063] [transport.py] [_log()] userauth is OK
2026-04-11T23:56:40.660 [DEBUG] [Thread-179063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:56:40.660 [DEBUG] [Thread-179063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:56:40.661 [DEBUG] [Thread-179063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:56:40.661 [DEBUG] [Thread-179063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:56:40.680 [INFO] [Thread-179063] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:56:40.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:56:40.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:56:41.505 [DEBUG] [Thread-179063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:56:41.505 [DEBUG] [Thread-179063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:56:41.553 [DEBUG] [Thread-179063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:56:41.554 [DEBUG] [Thread-179063] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:56:41.563 [DEBUG] [Thread-179063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:56:41.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:56:41.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:56:41.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-04-11T23:56:41.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:56:41.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:56:41.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:56:41.599 [DEBUG] [Thread-179063] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:56:44.132 [DEBUG] [Thread-179065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:50.039 [DEBUG] [Thread-179066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:59.092 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:56:59.093 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:05.092 [DEBUG] [Thread-179067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:57:11.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:57:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:57:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 56, 37), -0.04462, 100.226, 0.0, 19.5487, 11.5221, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:57:12.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:56:37
2026-04-11T23:57:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:57:13.457 [DEBUG] [Thread-179068] [transport.py] [_log()] starting thread (client mode): 0xae5f0af0
2026-04-11T23:57:13.457 [DEBUG] [Thread-179068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:57:13.476 [DEBUG] [Thread-179068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:57:13.477 [INFO] [Thread-179068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] client lang: <none>
2026-04-11T23:57:13.480 [DEBUG] [Thread-179068] [transport.py] [_log()] server lang: <none>
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] kex follows: False
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] Compression: none
2026-04-11T23:57:13.481 [DEBUG] [Thread-179068] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:57:13.491 [DEBUG] [Thread-179068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:57:13.491 [DEBUG] [Thread-179068] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:57:13.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:57:13.492 [DEBUG] [Thread-179068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:57:13.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:57:13.494 [DEBUG] [Thread-179068] [transport.py] [_log()] userauth is OK
2026-04-11T23:57:13.495 [DEBUG] [Thread-179068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:57:13.495 [DEBUG] [Thread-179068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:57:13.495 [DEBUG] [Thread-179068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:57:13.495 [DEBUG] [Thread-179068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:57:13.520 [INFO] [Thread-179068] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:57:13.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:57:14.295 [DEBUG] [Thread-179068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:57:14.296 [DEBUG] [Thread-179068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:57:14.296 [DEBUG] [Thread-179068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:57:14.337 [DEBUG] [Thread-179068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:57:14.337 [DEBUG] [Thread-179068] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:57:14.340 [DEBUG] [Thread-179068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:57:14.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:57:14.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:57:14.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:57:14.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:57:14.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:57:14.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:57:14.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:57:14.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:57:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:57:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.914348 -999.00  +11.00  14.46     97  +10.70 1 3 1 3 1     0    0 0.29 -2.60 ----- 16.8 14.5 300.8 21.8 12.4 -1.2 12.3 -0.5 12.0 -0.4 12.3 -0.9
2026-04-11T23:57:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:57:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:57:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.914348
2026-04-11T23:57:14.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:57:14.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:57:14.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:57:14.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:57:14.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:57:14.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:56:37', tmtdew=-0.04462, humidity=100.226, cloud=0.0, wind=19.5487, temperature=11.5221, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:56:39.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:57:14.361 [DEBUG] [Thread-179068] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:57:14.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:57:14.463 [DEBUG] [Thread-179071] [transport.py] [_log()] starting thread (client mode): 0xae5f1d20
2026-04-11T23:57:14.463 [DEBUG] [Thread-179071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:57:14.479 [DEBUG] [Thread-179071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:57:14.479 [INFO] [Thread-179071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] client lang: <none>
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] server lang: <none>
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] kex follows: False
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] Compression: none
2026-04-11T23:57:14.487 [DEBUG] [Thread-179071] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:57:14.544 [DEBUG] [Thread-179071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:57:14.545 [DEBUG] [Thread-179071] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:57:14.546 [DEBUG] [Thread-179071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:57:14.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:57:14.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:57:14.600 [DEBUG] [Thread-179071] [transport.py] [_log()] userauth is OK
2026-04-11T23:57:14.600 [DEBUG] [Thread-179071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:57:14.601 [DEBUG] [Thread-179071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:57:14.601 [DEBUG] [Thread-179071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:57:14.601 [DEBUG] [Thread-179071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:57:14.620 [INFO] [Thread-179071] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:57:14.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:57:14.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:57:15.444 [DEBUG] [Thread-179071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:57:15.445 [DEBUG] [Thread-179071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:57:15.492 [DEBUG] [Thread-179071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:57:15.492 [DEBUG] [Thread-179071] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:57:15.501 [DEBUG] [Thread-179071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:57:15.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:57:15.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:57:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-11T23:57:15.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:57:15.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:57:15.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:57:15.537 [DEBUG] [Thread-179071] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:57:20.130 [DEBUG] [Thread-179073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:35.182 [DEBUG] [Thread-179074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:44.189 [DEBUG] [Thread-179075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:57:45.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:57:45.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-11T23:57:46.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 57, 12), 0.032755, 100.08, 0.0, 22.7088, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:57:46.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:57:12
2026-04-11T23:57:47.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:57:47.359 [DEBUG] [Thread-179076] [transport.py] [_log()] starting thread (client mode): 0xb0fcc6d0
2026-04-11T23:57:47.359 [DEBUG] [Thread-179076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:57:47.379 [DEBUG] [Thread-179076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:57:47.379 [INFO] [Thread-179076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] client lang: <none>
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] server lang: <none>
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] kex follows: False
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] Compression: none
2026-04-11T23:57:47.382 [DEBUG] [Thread-179076] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:57:47.398 [DEBUG] [Thread-179076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:57:47.399 [DEBUG] [Thread-179076] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:57:47.399 [DEBUG] [Thread-179076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:57:47.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:57:47.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:57:47.401 [DEBUG] [Thread-179076] [transport.py] [_log()] userauth is OK
2026-04-11T23:57:47.401 [DEBUG] [Thread-179076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:57:47.402 [DEBUG] [Thread-179076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:57:47.402 [DEBUG] [Thread-179076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:57:47.402 [DEBUG] [Thread-179076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:57:47.423 [INFO] [Thread-179076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:57:47.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:57:48.213 [DEBUG] [Thread-179076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:57:48.213 [DEBUG] [Thread-179076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:57:48.213 [DEBUG] [Thread-179076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:57:48.255 [DEBUG] [Thread-179076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:57:48.255 [DEBUG] [Thread-179076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:57:48.259 [DEBUG] [Thread-179076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:57:48.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:57:48.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:57:48.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:57:48.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:57:48.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:57:48.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:57:48.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:57:48.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:57:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:57:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.914695 -999.00  +10.90  22.96     97  +10.60 1 3 1 3 1     0    0 0.28 -2.82 ----- 18.8 23.0 277.6 25.7 12.3 -2.0 12.2 -0.7 11.9 -1.5 12.2 -1.2
2026-04-11T23:57:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:57:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:57:48.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.914695
2026-04-11T23:57:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:57:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:57:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:57:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:57:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:57:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:57:12', tmtdew=0.032755, humidity=100.08, cloud=0.0, wind=22.7088, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:57:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:57:48.283 [DEBUG] [Thread-179076] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:57:48.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:57:48.379 [DEBUG] [Thread-179079] [transport.py] [_log()] starting thread (client mode): 0xb0fce0b0
2026-04-11T23:57:48.379 [DEBUG] [Thread-179079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:57:48.396 [DEBUG] [Thread-179079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:57:48.396 [INFO] [Thread-179079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:57:48.404 [DEBUG] [Thread-179079] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:57:48.404 [DEBUG] [Thread-179079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] client lang: <none>
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] server lang: <none>
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] kex follows: False
2026-04-11T23:57:48.405 [DEBUG] [Thread-179079] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:57:48.406 [DEBUG] [Thread-179079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:57:48.406 [DEBUG] [Thread-179079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:57:48.406 [DEBUG] [Thread-179079] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:57:48.406 [DEBUG] [Thread-179079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:57:48.406 [DEBUG] [Thread-179079] [transport.py] [_log()] Compression: none
2026-04-11T23:57:48.406 [DEBUG] [Thread-179079] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:57:48.462 [DEBUG] [Thread-179079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:57:48.463 [DEBUG] [Thread-179079] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:57:48.464 [DEBUG] [Thread-179079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:57:48.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:57:48.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:57:48.522 [DEBUG] [Thread-179079] [transport.py] [_log()] userauth is OK
2026-04-11T23:57:48.522 [DEBUG] [Thread-179079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:57:48.522 [DEBUG] [Thread-179079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:57:48.522 [DEBUG] [Thread-179079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:57:48.523 [DEBUG] [Thread-179079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:57:48.542 [INFO] [Thread-179079] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:57:48.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:57:48.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:57:49.456 [DEBUG] [Thread-179079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:57:49.456 [DEBUG] [Thread-179079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:57:49.506 [DEBUG] [Thread-179079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:57:49.507 [DEBUG] [Thread-179079] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:57:49.516 [DEBUG] [Thread-179079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:57:49.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:57:49.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-04-11T23:57:49.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-04-11T23:57:49.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:57:49.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:57:49.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:57:49.554 [DEBUG] [Thread-179079] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:57:50.217 [DEBUG] [Thread-179081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:59.298 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:57:59.299 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:05.270 [DEBUG] [Thread-179082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:19.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:58:19.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:58:19.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-04-11T23:58:20.306 [DEBUG] [Thread-179083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:20.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 57, 47), -0.03446, 100.159, 0.0, 19.5487, 11.4555, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:58:20.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:57:47
2026-04-11T23:58:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:58:21.451 [DEBUG] [Thread-179084] [transport.py] [_log()] starting thread (client mode): 0xae5f1510
2026-04-11T23:58:21.451 [DEBUG] [Thread-179084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:58:21.473 [DEBUG] [Thread-179084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:58:21.473 [INFO] [Thread-179084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] client lang: <none>
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] server lang: <none>
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] kex follows: False
2026-04-11T23:58:21.476 [DEBUG] [Thread-179084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:58:21.477 [DEBUG] [Thread-179084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:58:21.477 [DEBUG] [Thread-179084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:58:21.477 [DEBUG] [Thread-179084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:58:21.477 [DEBUG] [Thread-179084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:58:21.477 [DEBUG] [Thread-179084] [transport.py] [_log()] Compression: none
2026-04-11T23:58:21.477 [DEBUG] [Thread-179084] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:58:21.492 [DEBUG] [Thread-179084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:58:21.493 [DEBUG] [Thread-179084] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:58:21.493 [DEBUG] [Thread-179084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:58:21.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:58:21.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:58:21.498 [DEBUG] [Thread-179084] [transport.py] [_log()] userauth is OK
2026-04-11T23:58:21.498 [DEBUG] [Thread-179084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:58:21.498 [DEBUG] [Thread-179084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:58:21.498 [DEBUG] [Thread-179084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:58:21.498 [DEBUG] [Thread-179084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:58:21.518 [INFO] [Thread-179084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:58:21.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:58:22.291 [DEBUG] [Thread-179084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:58:22.292 [DEBUG] [Thread-179084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:58:22.292 [DEBUG] [Thread-179084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:58:22.334 [DEBUG] [Thread-179084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:58:22.335 [DEBUG] [Thread-179084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:58:22.339 [DEBUG] [Thread-179084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:58:22.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:58:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:58:22.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:58:22.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:58:22.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:58:22.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:58:22.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:58:22.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:58:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:58:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.915042 -999.00  +11.00  17.64     97  +10.60 1 3 1 3 1     0    0 0.28 -2.90 ----- 16.2 17.6 284.9 22.1 12.3 -1.3 12.2 -0.4 11.9 -1.3 12.3 -0.7
2026-04-11T23:58:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:58:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:58:22.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.915042
2026-04-11T23:58:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:58:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:58:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:58:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:58:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:58:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:57:47', tmtdew=-0.03446, humidity=100.159, cloud=0.0, wind=19.5487, temperature=11.4555, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:57:39.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:58:22.377 [DEBUG] [Thread-179084] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:58:22.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:58:22.480 [DEBUG] [Thread-179087] [transport.py] [_log()] starting thread (client mode): 0xae5f0700
2026-04-11T23:58:22.480 [DEBUG] [Thread-179087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:58:22.494 [DEBUG] [Thread-179087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:58:22.494 [INFO] [Thread-179087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] client lang: <none>
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] server lang: <none>
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] kex follows: False
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] Compression: none
2026-04-11T23:58:22.502 [DEBUG] [Thread-179087] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:58:22.562 [DEBUG] [Thread-179087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:58:22.562 [DEBUG] [Thread-179087] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:58:22.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:58:22.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:58:22.564 [DEBUG] [Thread-179087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:58:22.618 [DEBUG] [Thread-179087] [transport.py] [_log()] userauth is OK
2026-04-11T23:58:22.618 [DEBUG] [Thread-179087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:58:22.618 [DEBUG] [Thread-179087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:58:22.618 [DEBUG] [Thread-179087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:58:22.618 [DEBUG] [Thread-179087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:58:22.631 [INFO] [Thread-179087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:58:22.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:58:22.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:58:23.471 [DEBUG] [Thread-179087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:58:23.472 [DEBUG] [Thread-179087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:58:23.520 [DEBUG] [Thread-179087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:58:23.520 [DEBUG] [Thread-179087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:58:23.528 [DEBUG] [Thread-179087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:58:23.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:58:23.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-04-11T23:58:23.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-04-11T23:58:23.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:58:23.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:58:23.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:58:23.561 [DEBUG] [Thread-179087] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:58:35.338 [DEBUG] [Thread-179089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:44.251 [DEBUG] [Thread-179090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:50.389 [DEBUG] [Thread-179091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:53.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:58:53.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:58:53.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-04-11T23:58:54.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 58, 23), 0.030225, 100.096, 0.0, 21.3505, 11.0609, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:58:54.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:58:23
2026-04-11T23:58:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:58:55.507 [DEBUG] [Thread-179092] [transport.py] [_log()] starting thread (client mode): 0xae5f0040
2026-04-11T23:58:55.507 [DEBUG] [Thread-179092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:58:55.528 [DEBUG] [Thread-179092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:58:55.528 [INFO] [Thread-179092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] client lang: <none>
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] server lang: <none>
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] kex follows: False
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] Compression: none
2026-04-11T23:58:55.531 [DEBUG] [Thread-179092] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:58:55.540 [DEBUG] [Thread-179092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:58:55.540 [DEBUG] [Thread-179092] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:58:55.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:58:55.541 [DEBUG] [Thread-179092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:58:55.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:58:55.585 [DEBUG] [Thread-179092] [transport.py] [_log()] userauth is OK
2026-04-11T23:58:55.586 [DEBUG] [Thread-179092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:58:55.586 [DEBUG] [Thread-179092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:58:55.586 [DEBUG] [Thread-179092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:58:55.586 [DEBUG] [Thread-179092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:58:55.623 [INFO] [Thread-179092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:58:55.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:58:56.386 [DEBUG] [Thread-179092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:58:56.387 [DEBUG] [Thread-179092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:58:56.387 [DEBUG] [Thread-179092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:58:56.428 [DEBUG] [Thread-179092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:58:56.428 [DEBUG] [Thread-179092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:58:56.431 [DEBUG] [Thread-179092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:58:56.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:58:56.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:58:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:58:56.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:58:56.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:58:56.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:58:56.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:58:56.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:58:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:58:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.915389 -999.00  +11.00  13.46     97  +10.70 1 3 1 3 1     0    0 0.28 -2.70 ----- 16.4 13.5 293.6 19.0 12.4 -1.2 12.2 -0.4 11.9 -0.6 12.3 -0.6
2026-04-11T23:58:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:58:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:58:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.915389
2026-04-11T23:58:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:58:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:58:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:58:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:58:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:58:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:58:23', tmtdew=0.030225, humidity=100.096, cloud=0.0, wind=21.3505, temperature=11.0609, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:58:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:58:56.457 [DEBUG] [Thread-179092] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:58:56.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:58:56.547 [DEBUG] [Thread-179095] [transport.py] [_log()] starting thread (client mode): 0xae5f38b0
2026-04-11T23:58:56.547 [DEBUG] [Thread-179095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:58:56.562 [DEBUG] [Thread-179095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:58:56.562 [INFO] [Thread-179095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:58:56.569 [DEBUG] [Thread-179095] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] client lang: <none>
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] server lang: <none>
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] kex follows: False
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] Compression: none
2026-04-11T23:58:56.570 [DEBUG] [Thread-179095] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:58:56.627 [DEBUG] [Thread-179095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:58:56.628 [DEBUG] [Thread-179095] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:58:56.628 [DEBUG] [Thread-179095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:58:56.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:58:56.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:58:56.684 [DEBUG] [Thread-179095] [transport.py] [_log()] userauth is OK
2026-04-11T23:58:56.684 [DEBUG] [Thread-179095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:58:56.684 [DEBUG] [Thread-179095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:58:56.684 [DEBUG] [Thread-179095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:58:56.684 [DEBUG] [Thread-179095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:58:56.697 [INFO] [Thread-179095] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:58:56.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:58:56.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:58:57.514 [DEBUG] [Thread-179095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:58:57.515 [DEBUG] [Thread-179095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:58:57.562 [DEBUG] [Thread-179095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:58:57.562 [DEBUG] [Thread-179095] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:58:57.571 [DEBUG] [Thread-179095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:58:57.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:58: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')
2026-04-11T23:58:57.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-04-11T23:58:57.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:58:57.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:58:57.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:58:57.608 [DEBUG] [Thread-179095] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:58:59.503 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:58:59.505 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:05.426 [DEBUG] [Thread-179097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:20.477 [DEBUG] [Thread-179098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:27.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-11T23:59:27.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-11T23:59:27.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-04-11T23:59:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 58, 58), 0.030235, 100.097, 0.0, 17.9093, 11.0779, 2, 2, 0, 2, 0, 0),)
2026-04-11T23:59:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:58:58
2026-04-11T23:59:29.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-11T23:59:29.468 [DEBUG] [Thread-179099] [transport.py] [_log()] starting thread (client mode): 0xa7954190
2026-04-11T23:59:29.468 [DEBUG] [Thread-179099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:59:29.485 [DEBUG] [Thread-179099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-11T23:59:29.485 [INFO] [Thread-179099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] client lang: <none>
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] server lang: <none>
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] kex follows: False
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] Compression: none
2026-04-11T23:59:29.488 [DEBUG] [Thread-179099] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:59:29.504 [DEBUG] [Thread-179099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:59:29.504 [DEBUG] [Thread-179099] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:59:29.504 [DEBUG] [Thread-179099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-11T23:59:29.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-11T23:59:29.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:59:29.506 [DEBUG] [Thread-179099] [transport.py] [_log()] userauth is OK
2026-04-11T23:59:29.506 [DEBUG] [Thread-179099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:59:29.506 [DEBUG] [Thread-179099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:59:29.506 [DEBUG] [Thread-179099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-11T23:59:29.507 [DEBUG] [Thread-179099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:59:29.531 [INFO] [Thread-179099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:59:29.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:59:30.276 [DEBUG] [Thread-179099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:59:30.276 [DEBUG] [Thread-179099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:59:30.276 [DEBUG] [Thread-179099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-11T23:59:30.318 [DEBUG] [Thread-179099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:59:30.318 [DEBUG] [Thread-179099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:59:30.321 [DEBUG] [Thread-179099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:59:30.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:59:30.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-11T23:59:30.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-11T23:59:30.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-11T23:59:30.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:59:30.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-11T23:59:30.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:59:30.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:59:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-11T23:59:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.915737 -999.00  +11.00  15.54     97  +10.60 1 3 1 3 1     0    0 0.29 -2.69 ----- 20.7 15.5 296.2 26.2 12.4 -1.2 12.2 -0.4 12.0 -0.5 12.3 -0.8
2026-04-11T23:59:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-11T23:59:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-11T23:59:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.915737
2026-04-11T23:59:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-11T23:59:30.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-11T23:59:30.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-11T23:59:30.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-11T23:59:30.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-11T23:59:30.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:58:58', tmtdew=0.030235, humidity=100.097, cloud=0.0, wind=17.9093, temperature=11.0779, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:58:39.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-11T23:59:30.345 [DEBUG] [Thread-179099] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:59:30.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-11T23:59:30.435 [DEBUG] [Thread-179102] [transport.py] [_log()] starting thread (client mode): 0xa7954940
2026-04-11T23:59:30.435 [DEBUG] [Thread-179102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-11T23:59:30.455 [DEBUG] [Thread-179102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-11T23:59:30.455 [INFO] [Thread-179102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-11T23:59:30.462 [DEBUG] [Thread-179102] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-11T23:59:30.462 [DEBUG] [Thread-179102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-11T23:59:30.462 [DEBUG] [Thread-179102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-11T23:59:30.462 [DEBUG] [Thread-179102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] client lang: <none>
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] server lang: <none>
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] kex follows: False
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] === Key exchange agreements ===
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] Compression: none
2026-04-11T23:59:30.463 [DEBUG] [Thread-179102] [transport.py] [_log()] === End of kex handshake ===
2026-04-11T23:59:30.525 [DEBUG] [Thread-179102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-11T23:59:30.525 [DEBUG] [Thread-179102] [transport.py] [_log()] Switch to new keys ...
2026-04-11T23:59:30.526 [DEBUG] [Thread-179102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-11T23:59:30.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-11T23:59:30.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-11T23:59:30.585 [DEBUG] [Thread-179102] [transport.py] [_log()] userauth is OK
2026-04-11T23:59:30.585 [DEBUG] [Thread-179102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-11T23:59:30.585 [DEBUG] [Thread-179102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-11T23:59:30.585 [DEBUG] [Thread-179102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-11T23:59:30.585 [DEBUG] [Thread-179102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-11T23:59:30.604 [INFO] [Thread-179102] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-11T23:59:30.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-11T23:59:30.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-11T23:59:31.458 [DEBUG] [Thread-179102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-11T23:59:31.458 [DEBUG] [Thread-179102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-11T23:59:31.507 [DEBUG] [Thread-179102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-11T23:59:31.507 [DEBUG] [Thread-179102] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-11T23:59:31.517 [DEBUG] [Thread-179102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-11T23:59:31.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-11T23:59:31.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-11T23:59:31.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-04-11T23:59:31.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-11T23:59:31.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-11T23:59:31.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-11T23:59:31.555 [DEBUG] [Thread-179102] [transport.py] [_log()] EOF in transport thread
2026-04-11T23:59:35.513 [DEBUG] [Thread-179104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:44.319 [DEBUG] [Thread-179105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:50.566 [DEBUG] [Thread-179106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:59.707 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-11T23:59:59.708 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:00:01.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:00:01.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-04-12T00:00:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 11, 23, 59, 34), -0.02942, 100.127, 0.0, 21.3127, 11.3233, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:00:02.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-11 23:59:34
2026-04-12T00:00:03.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:00:03.517 [DEBUG] [Thread-179107] [transport.py] [_log()] starting thread (client mode): 0xae5f0760
2026-04-12T00:00:03.518 [DEBUG] [Thread-179107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:00:03.537 [DEBUG] [Thread-179107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:00:03.537 [INFO] [Thread-179107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] client lang: <none>
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] server lang: <none>
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] kex follows: False
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] Compression: none
2026-04-12T00:00:03.541 [DEBUG] [Thread-179107] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:00:03.555 [DEBUG] [Thread-179107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:00:03.555 [DEBUG] [Thread-179107] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:00:03.555 [DEBUG] [Thread-179107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:00:03.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:00:03.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:00:03.556 [DEBUG] [Thread-179107] [transport.py] [_log()] userauth is OK
2026-04-12T00:00:03.556 [DEBUG] [Thread-179107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:00:03.556 [DEBUG] [Thread-179107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:00:03.556 [DEBUG] [Thread-179107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:00:03.556 [DEBUG] [Thread-179107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:00:03.584 [INFO] [Thread-179107] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:00:03.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:00:05.600 [DEBUG] [Thread-179109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:13.028 [DEBUG] [Thread-179107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:00:13.028 [DEBUG] [Thread-179107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:00:13.028 [DEBUG] [Thread-179107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:00:13.069 [DEBUG] [Thread-179107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:00:13.069 [DEBUG] [Thread-179107] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:00:13.071 [DEBUG] [Thread-179107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:00:13.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:00:13.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:00:13.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:00:13.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:00:13.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:00:13.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:00:13.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.916084 -999.00  +11.00  15.53     97  +10.60 1 3 1 3 1     0    0 0.29 -2.56 ----- 17.9 15.5 280.4 23.6 12.4 -1.6 12.2 -0.6 12.0 -0.4 12.3 -1.0
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.916084
2026-04-12T00:00:13.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:00:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:00:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:00:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:00:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:00:13.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-11T23:59:34', tmtdew=-0.02942, humidity=100.127, cloud=0.0, wind=21.3127, temperature=11.3233, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T21:59:09.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:00:13.177 [DEBUG] [Thread-179107] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:00:13.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:00:13.274 [DEBUG] [Thread-179111] [transport.py] [_log()] starting thread (client mode): 0xae5f0220
2026-04-12T00:00:13.274 [DEBUG] [Thread-179111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:00:13.288 [DEBUG] [Thread-179111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:00:13.288 [INFO] [Thread-179111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] client lang: <none>
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] server lang: <none>
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] kex follows: False
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] Compression: none
2026-04-12T00:00:13.296 [DEBUG] [Thread-179111] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:00:13.352 [DEBUG] [Thread-179111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:00:13.352 [DEBUG] [Thread-179111] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:00:13.352 [DEBUG] [Thread-179111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:00:13.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:00:13.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:00:13.409 [DEBUG] [Thread-179111] [transport.py] [_log()] userauth is OK
2026-04-12T00:00:13.409 [DEBUG] [Thread-179111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:00:13.409 [DEBUG] [Thread-179111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:00:13.409 [DEBUG] [Thread-179111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:00:13.409 [DEBUG] [Thread-179111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:00:13.423 [INFO] [Thread-179111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:00:13.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:00:13.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:00:14.237 [DEBUG] [Thread-179111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:00:14.237 [DEBUG] [Thread-179111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:00:14.285 [DEBUG] [Thread-179111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:00:14.285 [DEBUG] [Thread-179111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:00:14.293 [DEBUG] [Thread-179111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:00:14.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:00:14.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-04-12T00:00:14.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:00:14.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:00:14.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:00:14.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:00:14.326 [DEBUG] [Thread-179111] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:00:20.630 [DEBUG] [Thread-179113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:35.681 [DEBUG] [Thread-179114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:00:44.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:00:44.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-04-12T00:00:44.375 [DEBUG] [Thread-179115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:45.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 0, 9), -0.01979, 100.097, 0.0, 23.6092, 10.978, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:00:45.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:00:09
2026-04-12T00:00:46.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:00:46.295 [DEBUG] [Thread-179116] [transport.py] [_log()] starting thread (client mode): 0xa79566e0
2026-04-12T00:00:46.295 [DEBUG] [Thread-179116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:00:46.317 [DEBUG] [Thread-179116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:00:46.318 [INFO] [Thread-179116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] client lang: <none>
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] server lang: <none>
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] kex follows: False
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:00:46.319 [DEBUG] [Thread-179116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:00:46.320 [DEBUG] [Thread-179116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:00:46.320 [DEBUG] [Thread-179116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:00:46.320 [DEBUG] [Thread-179116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:00:46.320 [DEBUG] [Thread-179116] [transport.py] [_log()] Compression: none
2026-04-12T00:00:46.320 [DEBUG] [Thread-179116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:00:46.329 [DEBUG] [Thread-179116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:00:46.330 [DEBUG] [Thread-179116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:00:46.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:00:46.331 [DEBUG] [Thread-179116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:00:46.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:00:46.334 [DEBUG] [Thread-179116] [transport.py] [_log()] userauth is OK
2026-04-12T00:00:46.335 [DEBUG] [Thread-179116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:00:46.335 [DEBUG] [Thread-179116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:00:46.335 [DEBUG] [Thread-179116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:00:46.335 [DEBUG] [Thread-179116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:00:46.356 [INFO] [Thread-179116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:00:46.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:00:47.072 [DEBUG] [Thread-179116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:00:47.073 [DEBUG] [Thread-179116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:00:47.073 [DEBUG] [Thread-179116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:00:47.114 [DEBUG] [Thread-179116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:00:47.114 [DEBUG] [Thread-179116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:00:47.119 [DEBUG] [Thread-179116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:00:47.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:00:47.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:00:47.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:00:47.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:00:47.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:00:47.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:00:47.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:00:47.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:00:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:00:47.151 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T00:00:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:00:09', tmtdew=-0.01979, humidity=100.097, cloud=0.0, wind=23.6092, temperature=10.978, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:00:47.156 [DEBUG] [Thread-179116] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:00:47.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:00:47.246 [DEBUG] [Thread-179119] [transport.py] [_log()] starting thread (client mode): 0xb0f6cb80
2026-04-12T00:00:47.246 [DEBUG] [Thread-179119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:00:47.261 [DEBUG] [Thread-179119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:00:47.261 [INFO] [Thread-179119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] client lang: <none>
2026-04-12T00:00:47.269 [DEBUG] [Thread-179119] [transport.py] [_log()] server lang: <none>
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] kex follows: False
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] Compression: none
2026-04-12T00:00:47.270 [DEBUG] [Thread-179119] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:00:47.330 [DEBUG] [Thread-179119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:00:47.331 [DEBUG] [Thread-179119] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:00:47.331 [DEBUG] [Thread-179119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:00:47.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:00:47.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:00:47.386 [DEBUG] [Thread-179119] [transport.py] [_log()] userauth is OK
2026-04-12T00:00:47.386 [DEBUG] [Thread-179119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:00:47.387 [DEBUG] [Thread-179119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:00:47.387 [DEBUG] [Thread-179119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:00:47.387 [DEBUG] [Thread-179119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:00:47.405 [INFO] [Thread-179119] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:00:47.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:00:47.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:00:48.245 [DEBUG] [Thread-179119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:00:48.245 [DEBUG] [Thread-179119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:00:48.293 [DEBUG] [Thread-179119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:00:48.293 [DEBUG] [Thread-179119] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:00:48.302 [DEBUG] [Thread-179119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:00:48.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:00:48.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:00: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') -> 00000000
2026-04-12T00:00:48.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:00:48.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:00:48.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:00:48.340 [DEBUG] [Thread-179119] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:00:50.717 [DEBUG] [Thread-179121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:59.912 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:00:59.913 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:01:05.773 [DEBUG] [Thread-179122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:01:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:01:18.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:01:18.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-04-12T00:01:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 0, 45), -0.03946, 100.193, 0.0, 19.9368, 11.4225, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:01:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:00:45
2026-04-12T00:01:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:01:20.181 [DEBUG] [Thread-179123] [transport.py] [_log()] starting thread (client mode): 0xa79573a0
2026-04-12T00:01:20.181 [DEBUG] [Thread-179123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:01:20.198 [DEBUG] [Thread-179123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:01:20.198 [INFO] [Thread-179123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] client lang: <none>
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] server lang: <none>
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] kex follows: False
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:01:20.200 [DEBUG] [Thread-179123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:01:20.201 [DEBUG] [Thread-179123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:01:20.201 [DEBUG] [Thread-179123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:01:20.201 [DEBUG] [Thread-179123] [transport.py] [_log()] Compression: none
2026-04-12T00:01:20.201 [DEBUG] [Thread-179123] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:01:20.212 [DEBUG] [Thread-179123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:01:20.212 [DEBUG] [Thread-179123] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:01:20.213 [DEBUG] [Thread-179123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:01:20.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:01:20.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:01:20.213 [DEBUG] [Thread-179123] [transport.py] [_log()] userauth is OK
2026-04-12T00:01:20.213 [DEBUG] [Thread-179123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:01:20.214 [DEBUG] [Thread-179123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:01:20.214 [DEBUG] [Thread-179123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:01:20.214 [DEBUG] [Thread-179123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:01:20.224 [INFO] [Thread-179123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:01:20.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:01:20.810 [DEBUG] [Thread-179125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:01:20.831 [DEBUG] [Thread-179123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:01:20.832 [DEBUG] [Thread-179123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:01:20.832 [DEBUG] [Thread-179123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:01:20.873 [DEBUG] [Thread-179123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:01:20.873 [DEBUG] [Thread-179123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:01:20.876 [DEBUG] [Thread-179123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:01:20.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:01:20.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:01:20.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:01:20.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:01:20.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:01:20.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:01:20.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:01:20.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:01:20.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:01:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.917473 -999.00  +11.00  19.14     97  +10.60 1 3 1 3 1     0    0 0.28 -2.77 ----- 14.2 19.1 290.4 22.4 12.3 -1.1 12.2 -0.4 11.9 -0.6 12.2 -0.8
2026-04-12T00:01:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:01:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:01:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.917473
2026-04-12T00:01:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:01:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:01:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:01:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:01:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:01:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:00:45', tmtdew=-0.03946, humidity=100.193, cloud=0.0, wind=19.9368, temperature=11.4225, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:01:09.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:01:20.897 [DEBUG] [Thread-179123] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:01:20.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:01:20.997 [DEBUG] [Thread-179127] [transport.py] [_log()] starting thread (client mode): 0xb0fcebf0
2026-04-12T00:01:20.997 [DEBUG] [Thread-179127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:01:21.012 [DEBUG] [Thread-179127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:01:21.012 [INFO] [Thread-179127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] client lang: <none>
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] server lang: <none>
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] kex follows: False
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] Compression: none
2026-04-12T00:01:21.020 [DEBUG] [Thread-179127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:01:21.081 [DEBUG] [Thread-179127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:01:21.081 [DEBUG] [Thread-179127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:01:21.082 [DEBUG] [Thread-179127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:01:21.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:01:21.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:01:21.138 [DEBUG] [Thread-179127] [transport.py] [_log()] userauth is OK
2026-04-12T00:01:21.139 [DEBUG] [Thread-179127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:01:21.139 [DEBUG] [Thread-179127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:01:21.139 [DEBUG] [Thread-179127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:01:21.139 [DEBUG] [Thread-179127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:01:21.164 [INFO] [Thread-179127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:01:21.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:01:21.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:01:22.023 [DEBUG] [Thread-179127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:01:22.023 [DEBUG] [Thread-179127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:01:22.073 [DEBUG] [Thread-179127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:01:22.073 [DEBUG] [Thread-179127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:01:22.082 [DEBUG] [Thread-179127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:01:22.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:01:22.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-04-12T00:01:22.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:01:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:01:22.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:01:22.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:01:22.119 [DEBUG] [Thread-179127] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:01:35.846 [DEBUG] [Thread-179129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:01:44.433 [DEBUG] [Thread-179130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:01:50.900 [DEBUG] [Thread-179131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:01:52.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:01:52.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:01:52.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-04-12T00:01:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 1, 21), 0.025225, 100.13, 0.0, 20.8742, 10.9944, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:01:53.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:01:21
2026-04-12T00:01:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:01:53.941 [DEBUG] [Thread-179132] [transport.py] [_log()] starting thread (client mode): 0xb0f6ecb0
2026-04-12T00:01:53.941 [DEBUG] [Thread-179132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:01:53.955 [DEBUG] [Thread-179132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:01:53.955 [INFO] [Thread-179132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:01:53.958 [DEBUG] [Thread-179132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] client lang: <none>
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] server lang: <none>
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] kex follows: False
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] Compression: none
2026-04-12T00:01:53.959 [DEBUG] [Thread-179132] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:01:53.977 [DEBUG] [Thread-179132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:01:53.978 [DEBUG] [Thread-179132] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:01:53.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:01:53.979 [DEBUG] [Thread-179132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:01:53.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:01:53.981 [DEBUG] [Thread-179132] [transport.py] [_log()] userauth is OK
2026-04-12T00:01:53.981 [DEBUG] [Thread-179132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:01:53.981 [DEBUG] [Thread-179132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:01:53.981 [DEBUG] [Thread-179132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:01:53.981 [DEBUG] [Thread-179132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:01:54.000 [INFO] [Thread-179132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:01:54.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:01:54.621 [DEBUG] [Thread-179132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:01:54.622 [DEBUG] [Thread-179132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:01:54.622 [DEBUG] [Thread-179132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:01:54.662 [DEBUG] [Thread-179132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:01:54.662 [DEBUG] [Thread-179132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:01:54.666 [DEBUG] [Thread-179132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:01:54.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:01:54.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:01:54.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:01:54.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:01:54.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:01:54.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:01:54.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:01:54.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:01:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:01:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.917820 -999.00  +11.00  13.59     97  +10.70 1 3 1 3 1     0    0 0.28 -2.51 ----- 14.2 13.6 296.2 21.7 12.3 -1.1 12.2 -0.4 11.8 -0.7 12.2 -0.8
2026-04-12T00:01:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:01:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:01:54.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.917820
2026-04-12T00:01:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:01:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:01:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:01:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:01:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:01:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:01:21', tmtdew=0.025225, humidity=100.13, cloud=0.0, wind=20.8742, temperature=10.9944, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:01:39.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:01:54.692 [DEBUG] [Thread-179132] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:01:54.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:01:54.785 [DEBUG] [Thread-179135] [transport.py] [_log()] starting thread (client mode): 0xb0f6e0e0
2026-04-12T00:01:54.785 [DEBUG] [Thread-179135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:01:54.800 [DEBUG] [Thread-179135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:01:54.800 [INFO] [Thread-179135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:01:54.808 [DEBUG] [Thread-179135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:01:54.808 [DEBUG] [Thread-179135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:01:54.808 [DEBUG] [Thread-179135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:01:54.808 [DEBUG] [Thread-179135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] client lang: <none>
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] server lang: <none>
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] kex follows: False
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:01:54.809 [DEBUG] [Thread-179135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:01:54.810 [DEBUG] [Thread-179135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:01:54.810 [DEBUG] [Thread-179135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:01:54.810 [DEBUG] [Thread-179135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:01:54.810 [DEBUG] [Thread-179135] [transport.py] [_log()] Compression: none
2026-04-12T00:01:54.810 [DEBUG] [Thread-179135] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:01:54.868 [DEBUG] [Thread-179135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:01:54.868 [DEBUG] [Thread-179135] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:01:54.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:01:54.869 [DEBUG] [Thread-179135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:01:54.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:01:54.924 [DEBUG] [Thread-179135] [transport.py] [_log()] userauth is OK
2026-04-12T00:01:54.924 [DEBUG] [Thread-179135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:01:54.924 [DEBUG] [Thread-179135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:01:54.924 [DEBUG] [Thread-179135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:01:54.924 [DEBUG] [Thread-179135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:01:54.943 [INFO] [Thread-179135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:01:54.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:01:54.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:01:55.777 [DEBUG] [Thread-179135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:01:55.777 [DEBUG] [Thread-179135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:01:55.825 [DEBUG] [Thread-179135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:01:55.825 [DEBUG] [Thread-179135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:01:55.835 [DEBUG] [Thread-179135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:01:55.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:01: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-04-12T00:01:55.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-04-12T00:01:55.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:01:55.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:01:55.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:01:55.872 [DEBUG] [Thread-179135] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:02:00.117 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:00.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:05.937 [DEBUG] [Thread-179137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:20.998 [DEBUG] [Thread-179138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:25.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:02:25.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:02:25.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-04-12T00:02:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 1, 56), 0.02766, 100.114, 0.0, 20.3274, 10.9782, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:02:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:01:56
2026-04-12T00:02:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:02:27.655 [DEBUG] [Thread-179139] [transport.py] [_log()] starting thread (client mode): 0xae5f0e20
2026-04-12T00:02:27.656 [DEBUG] [Thread-179139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:02:27.668 [DEBUG] [Thread-179139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:02:27.668 [INFO] [Thread-179139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:02:27.670 [DEBUG] [Thread-179139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] client lang: <none>
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] server lang: <none>
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] kex follows: False
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] Compression: none
2026-04-12T00:02:27.671 [DEBUG] [Thread-179139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:02:27.682 [DEBUG] [Thread-179139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:02:27.683 [DEBUG] [Thread-179139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:02:27.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:02:27.683 [DEBUG] [Thread-179139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:02:27.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:02:27.684 [DEBUG] [Thread-179139] [transport.py] [_log()] userauth is OK
2026-04-12T00:02:27.684 [DEBUG] [Thread-179139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:02:27.684 [DEBUG] [Thread-179139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:02:27.684 [DEBUG] [Thread-179139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:02:27.684 [DEBUG] [Thread-179139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:02:27.693 [INFO] [Thread-179139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:02:27.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:02:28.285 [DEBUG] [Thread-179139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:02:28.285 [DEBUG] [Thread-179139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:02:28.286 [DEBUG] [Thread-179139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:02:28.326 [DEBUG] [Thread-179139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:02:28.326 [DEBUG] [Thread-179139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:02:28.330 [DEBUG] [Thread-179139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:02:28.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:02:28.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:02:28.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:02:28.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:02:28.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:02:28.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:02:28.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:02:28.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:02:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:02:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.918167 -999.00  +11.00  13.93     97  +10.70 1 3 1 3 1     0    0 0.29 -2.64 ----- 16.7 13.9 274.0 18.7 12.3 -1.4 12.2 -0.4 11.9 -0.9 12.3 -1.0
2026-04-12T00:02:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:02:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:02:28.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.918167
2026-04-12T00:02:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:02:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:02:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:02:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:02:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:02:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:01:56', tmtdew=0.02766, humidity=100.114, cloud=0.0, wind=20.3274, temperature=10.9782, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:02:09.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:02:28.356 [DEBUG] [Thread-179139] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:02:28.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:02:28.450 [DEBUG] [Thread-179142] [transport.py] [_log()] starting thread (client mode): 0xb0fcc250
2026-04-12T00:02:28.450 [DEBUG] [Thread-179142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:02:28.467 [DEBUG] [Thread-179142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:02:28.468 [INFO] [Thread-179142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:02:28.475 [DEBUG] [Thread-179142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] client lang: <none>
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] server lang: <none>
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] kex follows: False
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:02:28.476 [DEBUG] [Thread-179142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:02:28.477 [DEBUG] [Thread-179142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:02:28.477 [DEBUG] [Thread-179142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:02:28.477 [DEBUG] [Thread-179142] [transport.py] [_log()] Compression: none
2026-04-12T00:02:28.477 [DEBUG] [Thread-179142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:02:28.535 [DEBUG] [Thread-179142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:02:28.536 [DEBUG] [Thread-179142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:02:28.536 [DEBUG] [Thread-179142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:02:28.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:02:28.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:02:28.592 [DEBUG] [Thread-179142] [transport.py] [_log()] userauth is OK
2026-04-12T00:02:28.592 [DEBUG] [Thread-179142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:02:28.593 [DEBUG] [Thread-179142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:02:28.593 [DEBUG] [Thread-179142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:02:28.593 [DEBUG] [Thread-179142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:02:28.611 [INFO] [Thread-179142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:02:28.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:02:28.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:02:29.468 [DEBUG] [Thread-179142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:02:29.468 [DEBUG] [Thread-179142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:02:29.516 [DEBUG] [Thread-179142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:02:29.516 [DEBUG] [Thread-179142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:02:29.530 [DEBUG] [Thread-179142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:02:29.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:02:29.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-04-12T00:02:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:02:29.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:02:29.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:02:29.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:02:29.573 [DEBUG] [Thread-179142] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:02:36.033 [DEBUG] [Thread-179144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:44.491 [DEBUG] [Thread-179145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:51.084 [DEBUG] [Thread-179146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:02:59.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:02:59.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:02:59.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-04-12T00:03:00.319 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:03:00.321 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:03:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 2, 31), 0.015185, 100.197, 0.0, 20.0275, 10.9616, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:03:00.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:02:31
2026-04-12T00:03:01.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:03:01.561 [DEBUG] [Thread-179147] [transport.py] [_log()] starting thread (client mode): 0xa7954310
2026-04-12T00:03:01.561 [DEBUG] [Thread-179147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:03:01.579 [DEBUG] [Thread-179147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:03:01.579 [INFO] [Thread-179147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:03:01.581 [DEBUG] [Thread-179147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:03:01.581 [DEBUG] [Thread-179147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:03:01.581 [DEBUG] [Thread-179147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:03:01.581 [DEBUG] [Thread-179147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:01.581 [DEBUG] [Thread-179147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] client lang: <none>
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] server lang: <none>
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] kex follows: False
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] Compression: none
2026-04-12T00:03:01.582 [DEBUG] [Thread-179147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:03:01.590 [DEBUG] [Thread-179147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:03:01.591 [DEBUG] [Thread-179147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:03:01.591 [DEBUG] [Thread-179147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:03:01.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:03:01.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:03:01.592 [DEBUG] [Thread-179147] [transport.py] [_log()] userauth is OK
2026-04-12T00:03:01.592 [DEBUG] [Thread-179147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:03:01.593 [DEBUG] [Thread-179147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:03:01.593 [DEBUG] [Thread-179147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:03:01.593 [DEBUG] [Thread-179147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:03:01.609 [INFO] [Thread-179147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:03:01.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:03:02.201 [DEBUG] [Thread-179147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:03:02.202 [DEBUG] [Thread-179147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:03:02.202 [DEBUG] [Thread-179147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:03:02.244 [DEBUG] [Thread-179147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:03:02.244 [DEBUG] [Thread-179147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:03:02.248 [DEBUG] [Thread-179147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:03:02.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:03:02.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:03:02.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:03:02.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:03:02.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:03:02.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:03:02.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:03:02.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:03:02.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:03:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.918514 -999.00  +11.00  13.67     97  +10.70 1 3 1 3 1     0    0 0.28 -2.49 ----- 13.1 13.7 290.8 18.7 12.3 -1.1 12.2 -0.3 11.8 -0.8 12.2 -0.8
2026-04-12T00:03:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:03:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:03:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.918514
2026-04-12T00:03:02.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:03:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:03:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:03:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:03:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:03:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:02:31', tmtdew=0.015185, humidity=100.197, cloud=0.0, wind=20.0275, temperature=10.9616, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:02:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:03:02.271 [DEBUG] [Thread-179147] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:03:02.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:03:02.367 [DEBUG] [Thread-179150] [transport.py] [_log()] starting thread (client mode): 0xb0fcef20
2026-04-12T00:03:02.367 [DEBUG] [Thread-179150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:03:02.381 [DEBUG] [Thread-179150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:03:02.381 [INFO] [Thread-179150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] client lang: <none>
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] server lang: <none>
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] kex follows: False
2026-04-12T00:03:02.389 [DEBUG] [Thread-179150] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:03:02.390 [DEBUG] [Thread-179150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:03:02.390 [DEBUG] [Thread-179150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:03:02.390 [DEBUG] [Thread-179150] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:03:02.390 [DEBUG] [Thread-179150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:03:02.390 [DEBUG] [Thread-179150] [transport.py] [_log()] Compression: none
2026-04-12T00:03:02.390 [DEBUG] [Thread-179150] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:03:02.449 [DEBUG] [Thread-179150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:03:02.450 [DEBUG] [Thread-179150] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:03:02.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:03:02.451 [DEBUG] [Thread-179150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:03:02.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:03:02.509 [DEBUG] [Thread-179150] [transport.py] [_log()] userauth is OK
2026-04-12T00:03:02.509 [DEBUG] [Thread-179150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:03:02.509 [DEBUG] [Thread-179150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:03:02.509 [DEBUG] [Thread-179150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:03:02.509 [DEBUG] [Thread-179150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:03:02.528 [INFO] [Thread-179150] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:03:02.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:03:02.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:03:03.351 [DEBUG] [Thread-179150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:03:03.351 [DEBUG] [Thread-179150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:03:03.399 [DEBUG] [Thread-179150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:03:03.400 [DEBUG] [Thread-179150] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:03:03.408 [DEBUG] [Thread-179150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:03:03.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:03:03.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-04-12T00:03:03.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-04-12T00:03:03.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:03:03.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:03:03.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:03:03.447 [DEBUG] [Thread-179150] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:03:06.119 [DEBUG] [Thread-179152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:03:21.173 [DEBUG] [Thread-179153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:03:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:03:33.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:03:33.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-04-12T00:03:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 3, 7), 0.03019, 100.097, 0.0, 20.2039, 10.9451, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:03:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:03:07
2026-04-12T00:03:35.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:03:35.268 [DEBUG] [Thread-179154] [transport.py] [_log()] starting thread (client mode): 0xae5f2200
2026-04-12T00:03:35.268 [DEBUG] [Thread-179154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:03:35.287 [DEBUG] [Thread-179154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:03:35.287 [INFO] [Thread-179154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:03:35.288 [DEBUG] [Thread-179154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] client lang: <none>
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] server lang: <none>
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] kex follows: False
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] Compression: none
2026-04-12T00:03:35.289 [DEBUG] [Thread-179154] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:03:35.297 [DEBUG] [Thread-179154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:03:35.298 [DEBUG] [Thread-179154] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:03:35.298 [DEBUG] [Thread-179154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:03:35.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:03:35.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:03:35.299 [DEBUG] [Thread-179154] [transport.py] [_log()] userauth is OK
2026-04-12T00:03:35.299 [DEBUG] [Thread-179154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:03:35.300 [DEBUG] [Thread-179154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:03:35.300 [DEBUG] [Thread-179154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:03:35.300 [DEBUG] [Thread-179154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:03:35.323 [INFO] [Thread-179154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:03:35.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:03:35.865 [DEBUG] [Thread-179154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:03:35.865 [DEBUG] [Thread-179154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:03:35.866 [DEBUG] [Thread-179154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:03:35.906 [DEBUG] [Thread-179154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:03:35.906 [DEBUG] [Thread-179154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:03:35.909 [DEBUG] [Thread-179154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:03:35.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:03:35.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:03:35.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:03:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:03:35.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:03:35.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:03:35.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:03:35.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:03:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:03:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.918862 -999.00  +11.00  19.35     97  +10.60 1 3 1 3 1     0    0 0.28 -2.46 ----- 17.9 19.4 296.4 21.7 12.4 -1.2 12.2 -0.5 11.9 -0.6 12.3 -0.8
2026-04-12T00:03:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:03:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:03:35.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.918862
2026-04-12T00:03:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:03:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:03:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:03:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:03:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:03:35.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:03:07', tmtdew=0.03019, humidity=100.097, cloud=0.0, wind=20.2039, temperature=10.9451, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:03:09.677', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:03:35.936 [DEBUG] [Thread-179154] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:03:36.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:03:36.028 [DEBUG] [Thread-179157] [transport.py] [_log()] starting thread (client mode): 0xb0f6f970
2026-04-12T00:03:36.029 [DEBUG] [Thread-179157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:03:36.044 [DEBUG] [Thread-179157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:03:36.044 [INFO] [Thread-179157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] client lang: <none>
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] server lang: <none>
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] kex follows: False
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:03:36.052 [DEBUG] [Thread-179157] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:03:36.053 [DEBUG] [Thread-179157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:03:36.053 [DEBUG] [Thread-179157] [transport.py] [_log()] Compression: none
2026-04-12T00:03:36.053 [DEBUG] [Thread-179157] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:03:36.113 [DEBUG] [Thread-179157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:03:36.114 [DEBUG] [Thread-179157] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:03:36.114 [DEBUG] [Thread-179157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:03:36.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:03:36.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:03:36.173 [DEBUG] [Thread-179157] [transport.py] [_log()] userauth is OK
2026-04-12T00:03:36.174 [DEBUG] [Thread-179157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:03:36.174 [DEBUG] [Thread-179157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:03:36.174 [DEBUG] [Thread-179157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:03:36.174 [DEBUG] [Thread-179157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:03:36.195 [INFO] [Thread-179157] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:03:36.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:03:36.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:03:36.209 [DEBUG] [Thread-179159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:03:37.015 [DEBUG] [Thread-179157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:03:37.015 [DEBUG] [Thread-179157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:03:37.063 [DEBUG] [Thread-179157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:03:37.063 [DEBUG] [Thread-179157] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:03:37.073 [DEBUG] [Thread-179157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:03:37.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:03:37.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:03:37.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:03:37.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:03:37.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:03:37.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:03:37.110 [DEBUG] [Thread-179157] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:03:44.556 [DEBUG] [Thread-179160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:03:51.261 [DEBUG] [Thread-179161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:00.525 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:00.526 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:06.297 [DEBUG] [Thread-179162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:07.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:04:07.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:04:07.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:04:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 3, 42), -0.03974, 100.194, 0.0, 18.5962, 11.4896, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:04:08.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:03:42
2026-04-12T00:04:08.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:04:08.936 [DEBUG] [Thread-179163] [transport.py] [_log()] starting thread (client mode): 0xb0fcd7b0
2026-04-12T00:04:08.937 [DEBUG] [Thread-179163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:04:08.956 [DEBUG] [Thread-179163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:04:08.956 [INFO] [Thread-179163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:04:08.958 [DEBUG] [Thread-179163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:04:08.958 [DEBUG] [Thread-179163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:04:08.958 [DEBUG] [Thread-179163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:04:08.958 [DEBUG] [Thread-179163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] client lang: <none>
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] server lang: <none>
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] kex follows: False
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] Compression: none
2026-04-12T00:04:08.959 [DEBUG] [Thread-179163] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:04:08.969 [DEBUG] [Thread-179163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:04:08.970 [DEBUG] [Thread-179163] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:04:08.970 [DEBUG] [Thread-179163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:04:08.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:04:08.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:04:08.971 [DEBUG] [Thread-179163] [transport.py] [_log()] userauth is OK
2026-04-12T00:04:08.971 [DEBUG] [Thread-179163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:04:08.971 [DEBUG] [Thread-179163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:04:08.971 [DEBUG] [Thread-179163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:04:08.971 [DEBUG] [Thread-179163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:04:08.989 [INFO] [Thread-179163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:04:08.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:04:09.654 [DEBUG] [Thread-179163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:04:09.655 [DEBUG] [Thread-179163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:04:09.655 [DEBUG] [Thread-179163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:04:09.695 [DEBUG] [Thread-179163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:04:09.695 [DEBUG] [Thread-179163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:04:09.698 [DEBUG] [Thread-179163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:04:09.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:04:09.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:04:09.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:04:09.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:04:09.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:04:09.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:04:09.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:04:09.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:04:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:04:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.919209 -999.00  +11.00  17.23     97  +10.70 1 3 1 3 1     0    0 0.29 -2.34 ----- 18.9 17.2 290.3 21.2 12.4 -1.3 12.2 -0.4 11.9 -0.7 12.3 -0.8
2026-04-12T00:04:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:04:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:04:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.919209
2026-04-12T00:04:09.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:04:09.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:04:09.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:04:09.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:04:09.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:04:09.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:03:42', tmtdew=-0.03974, humidity=100.194, cloud=0.0, wind=18.5962, temperature=11.4896, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:03:39.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:04:09.727 [DEBUG] [Thread-179163] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:04:09.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:04:09.820 [DEBUG] [Thread-179166] [transport.py] [_log()] starting thread (client mode): 0xb0fce0e0
2026-04-12T00:04:09.820 [DEBUG] [Thread-179166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:04:09.835 [DEBUG] [Thread-179166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:04:09.835 [INFO] [Thread-179166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] client lang: <none>
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] server lang: <none>
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] kex follows: False
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:04:09.843 [DEBUG] [Thread-179166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:04:09.844 [DEBUG] [Thread-179166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:04:09.844 [DEBUG] [Thread-179166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:04:09.844 [DEBUG] [Thread-179166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:04:09.844 [DEBUG] [Thread-179166] [transport.py] [_log()] Compression: none
2026-04-12T00:04:09.844 [DEBUG] [Thread-179166] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:04:09.902 [DEBUG] [Thread-179166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:04:09.902 [DEBUG] [Thread-179166] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:04:09.903 [DEBUG] [Thread-179166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:04:09.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:04:09.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:04:09.958 [DEBUG] [Thread-179166] [transport.py] [_log()] userauth is OK
2026-04-12T00:04:09.959 [DEBUG] [Thread-179166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:04:09.959 [DEBUG] [Thread-179166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:04:09.959 [DEBUG] [Thread-179166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:04:09.959 [DEBUG] [Thread-179166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:04:09.977 [INFO] [Thread-179166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:04:09.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:04:09.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:04:10.793 [DEBUG] [Thread-179166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:04:10.794 [DEBUG] [Thread-179166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:04:10.841 [DEBUG] [Thread-179166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:04:10.842 [DEBUG] [Thread-179166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:04:10.851 [DEBUG] [Thread-179166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:04:10.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:04:10.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-04-12T00:04:10.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-04-12T00:04:10.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:04:10.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:04:10.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:04:10.888 [DEBUG] [Thread-179166] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:04:21.335 [DEBUG] [Thread-179168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:36.393 [DEBUG] [Thread-179169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:40.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:04:40.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:04: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-04-12T00:04:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 4, 18), 0.03008, 100.098, 0.0, 20.0444, 11.0285, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:04:42.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:04:18
2026-04-12T00:04:42.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:04:42.737 [DEBUG] [Thread-179170] [transport.py] [_log()] starting thread (client mode): 0xb0fce230
2026-04-12T00:04:42.737 [DEBUG] [Thread-179170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:04:42.757 [DEBUG] [Thread-179170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:04:42.757 [INFO] [Thread-179170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] client lang: <none>
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] server lang: <none>
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] kex follows: False
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:04:42.760 [DEBUG] [Thread-179170] [transport.py] [_log()] Compression: none
2026-04-12T00:04:42.761 [DEBUG] [Thread-179170] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:04:42.778 [DEBUG] [Thread-179170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:04:42.779 [DEBUG] [Thread-179170] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:04:42.779 [DEBUG] [Thread-179170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:04:42.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:04:42.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:04:42.781 [DEBUG] [Thread-179170] [transport.py] [_log()] userauth is OK
2026-04-12T00:04:42.781 [DEBUG] [Thread-179170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:04:42.781 [DEBUG] [Thread-179170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:04:42.781 [DEBUG] [Thread-179170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:04:42.781 [DEBUG] [Thread-179170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:04:42.801 [INFO] [Thread-179170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:04:42.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:04:43.465 [DEBUG] [Thread-179170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:04:43.466 [DEBUG] [Thread-179170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:04:43.466 [DEBUG] [Thread-179170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:04:43.507 [DEBUG] [Thread-179170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:04:43.507 [DEBUG] [Thread-179170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:04:43.510 [DEBUG] [Thread-179170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:04:43.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:04:43.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:04:43.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:04:43.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:04:43.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:04:43.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:04:43.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:04:43.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:04:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:04:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.919557 -999.00  +11.00  17.65     97  +10.60 1 3 1 3 1     0    0 0.30 -1.94 ----- 16.9 17.6 294.8 20.9 12.4 -1.4 12.2 -0.4 11.9 -0.9 12.3 -1.1
2026-04-12T00:04:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:04:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:04:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.919557
2026-04-12T00:04:43.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:04:43.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:04:43.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:04:43.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:04:43.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:04:43.533 [DEBUG] [Thread-179170] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:04:43.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:04:18', tmtdew=0.03008, humidity=100.098, cloud=0.0, wind=20.0444, temperature=11.0285, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:04:09.725', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:04:43.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:04:43.627 [DEBUG] [Thread-179173] [transport.py] [_log()] starting thread (client mode): 0xb0fcea70
2026-04-12T00:04:43.627 [DEBUG] [Thread-179173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:04:43.641 [DEBUG] [Thread-179173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:04:43.641 [INFO] [Thread-179173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] client lang: <none>
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] server lang: <none>
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] kex follows: False
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:04:43.649 [DEBUG] [Thread-179173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:04:43.650 [DEBUG] [Thread-179173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:04:43.650 [DEBUG] [Thread-179173] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:04:43.650 [DEBUG] [Thread-179173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:04:43.650 [DEBUG] [Thread-179173] [transport.py] [_log()] Compression: none
2026-04-12T00:04:43.650 [DEBUG] [Thread-179173] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:04:43.705 [DEBUG] [Thread-179173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:04:43.705 [DEBUG] [Thread-179173] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:04:43.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:04:43.706 [DEBUG] [Thread-179173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:04:43.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:04:43.761 [DEBUG] [Thread-179173] [transport.py] [_log()] userauth is OK
2026-04-12T00:04:43.762 [DEBUG] [Thread-179173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:04:43.762 [DEBUG] [Thread-179173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:04:43.762 [DEBUG] [Thread-179173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:04:43.762 [DEBUG] [Thread-179173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:04:43.784 [INFO] [Thread-179173] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:04:43.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:04:43.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:04:44.617 [DEBUG] [Thread-179175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:04:44.621 [DEBUG] [Thread-179173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:04:44.621 [DEBUG] [Thread-179173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:04:44.670 [DEBUG] [Thread-179173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:04:44.670 [DEBUG] [Thread-179173] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:04:44.679 [DEBUG] [Thread-179173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:04:44.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:04:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:04:44.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:04:44.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:04:44.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:04:44.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:04:44.712 [DEBUG] [Thread-179173] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:04:51.426 [DEBUG] [Thread-179176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:00.727 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:00.729 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:06.481 [DEBUG] [Thread-179177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:14.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:05:14.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:05:14.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:05:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 4, 53), -0.04485, 100.228, 0.0, 20.2896, 11.457, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:05:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:04:53
2026-04-12T00:05:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:05:16.675 [DEBUG] [Thread-179178] [transport.py] [_log()] starting thread (client mode): 0xb0fce9e0
2026-04-12T00:05:16.675 [DEBUG] [Thread-179178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:05:16.695 [DEBUG] [Thread-179178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:05:16.695 [INFO] [Thread-179178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:05:16.698 [DEBUG] [Thread-179178] [transport.py] [_log()] client lang: <none>
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] server lang: <none>
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] kex follows: False
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] Compression: none
2026-04-12T00:05:16.699 [DEBUG] [Thread-179178] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:05:16.717 [DEBUG] [Thread-179178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:05:16.717 [DEBUG] [Thread-179178] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:05:16.718 [DEBUG] [Thread-179178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:05:16.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:05:16.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:05:16.761 [DEBUG] [Thread-179178] [transport.py] [_log()] userauth is OK
2026-04-12T00:05:16.762 [DEBUG] [Thread-179178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:05:16.762 [DEBUG] [Thread-179178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:05:16.762 [DEBUG] [Thread-179178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:05:16.762 [DEBUG] [Thread-179178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:05:16.782 [INFO] [Thread-179178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:05:16.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:05:17.398 [DEBUG] [Thread-179178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:05:17.398 [DEBUG] [Thread-179178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:05:17.399 [DEBUG] [Thread-179178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:05:17.439 [DEBUG] [Thread-179178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:05:17.440 [DEBUG] [Thread-179178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:05:17.442 [DEBUG] [Thread-179178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:05:17.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:05:17.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:05:17.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:05:17.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:05:17.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:05:17.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:05:17.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:05:17.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:05:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:05:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.920250 -999.00  +10.90  20.50     97  +10.50 1 3 1 3 1     0    0 0.30 -1.71 ----- 19.9 20.5 286.6 24.3 12.3 -1.8 12.2 -0.7 11.9 -1.5 12.3 -1.4
2026-04-12T00:05:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:05:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:05:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.920250
2026-04-12T00:05:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:05:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:05:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:05:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:05:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:05:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:04:53', tmtdew=-0.04485, humidity=100.228, cloud=0.0, wind=20.2896, temperature=11.457, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:05:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:05:17.469 [DEBUG] [Thread-179178] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:05:17.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:05:17.563 [DEBUG] [Thread-179181] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa30
2026-04-12T00:05:17.563 [DEBUG] [Thread-179181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:05:17.577 [DEBUG] [Thread-179181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:05:17.578 [INFO] [Thread-179181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:05:17.586 [DEBUG] [Thread-179181] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] client lang: <none>
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] server lang: <none>
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] kex follows: False
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:05:17.587 [DEBUG] [Thread-179181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:05:17.588 [DEBUG] [Thread-179181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:05:17.588 [DEBUG] [Thread-179181] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:05:17.588 [DEBUG] [Thread-179181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:05:17.588 [DEBUG] [Thread-179181] [transport.py] [_log()] Compression: none
2026-04-12T00:05:17.588 [DEBUG] [Thread-179181] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:05:17.647 [DEBUG] [Thread-179181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:05:17.648 [DEBUG] [Thread-179181] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:05:17.648 [DEBUG] [Thread-179181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:05:17.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:05:17.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:05:17.706 [DEBUG] [Thread-179181] [transport.py] [_log()] userauth is OK
2026-04-12T00:05:17.706 [DEBUG] [Thread-179181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:05:17.706 [DEBUG] [Thread-179181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:05:17.706 [DEBUG] [Thread-179181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:05:17.706 [DEBUG] [Thread-179181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:05:17.728 [INFO] [Thread-179181] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:05:17.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:05:17.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:05:18.543 [DEBUG] [Thread-179181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:05:18.544 [DEBUG] [Thread-179181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:05:18.592 [DEBUG] [Thread-179181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:05:18.592 [DEBUG] [Thread-179181] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:05:18.601 [DEBUG] [Thread-179181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:05:18.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:05:18.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-04-12T00:05:18.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:05:18.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:05:18.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:05:18.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:05:18.633 [DEBUG] [Thread-179181] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:05:21.518 [DEBUG] [Thread-179183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:36.575 [DEBUG] [Thread-179184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:44.685 [DEBUG] [Thread-179185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:05:48.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:05:48.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:05:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 5, 29), -0.017395, 100.081, 0.0, 22.5853, 10.9619, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:05:49.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:05:29
2026-04-12T00:05:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:05:50.416 [DEBUG] [Thread-179186] [transport.py] [_log()] starting thread (client mode): 0xae5a6e60
2026-04-12T00:05:50.416 [DEBUG] [Thread-179186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:05:50.436 [DEBUG] [Thread-179186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:05:50.436 [INFO] [Thread-179186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] client lang: <none>
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] server lang: <none>
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] kex follows: False
2026-04-12T00:05:50.439 [DEBUG] [Thread-179186] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:05:50.440 [DEBUG] [Thread-179186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:05:50.440 [DEBUG] [Thread-179186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:05:50.440 [DEBUG] [Thread-179186] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:05:50.440 [DEBUG] [Thread-179186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:05:50.440 [DEBUG] [Thread-179186] [transport.py] [_log()] Compression: none
2026-04-12T00:05:50.440 [DEBUG] [Thread-179186] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:05:50.449 [DEBUG] [Thread-179186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:05:50.450 [DEBUG] [Thread-179186] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:05:50.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:05:50.452 [DEBUG] [Thread-179186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:05:50.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:05:50.453 [DEBUG] [Thread-179186] [transport.py] [_log()] userauth is OK
2026-04-12T00:05:50.454 [DEBUG] [Thread-179186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:05:50.454 [DEBUG] [Thread-179186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:05:50.454 [DEBUG] [Thread-179186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:05:50.454 [DEBUG] [Thread-179186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:05:50.479 [INFO] [Thread-179186] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:05:50.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:05:51.096 [DEBUG] [Thread-179186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:05:51.096 [DEBUG] [Thread-179186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:05:51.097 [DEBUG] [Thread-179186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:05:51.137 [DEBUG] [Thread-179186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:05:51.137 [DEBUG] [Thread-179186] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:05:51.141 [DEBUG] [Thread-179186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:05:51.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:05:51.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:05:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:05:51.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:05:51.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:05:51.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:05:51.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:05:51.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:05:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:05:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.920598 -999.00  +10.90  16.01     97  +10.60 1 3 1 3 1     0    0 0.31 -1.47 ----- 13.0 16.0 300.6 25.3 12.3 -1.4 12.2 -0.3 11.9 -0.8 12.2 -1.2
2026-04-12T00:05:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:05:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:05:51.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.920598
2026-04-12T00:05:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:05:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:05:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:05:29', tmtdew=-0.017395, humidity=100.081, cloud=0.0, wind=22.5853, temperature=10.9619, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:05:39.667', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:05:51.165 [DEBUG] [Thread-179186] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:05:51.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:05:51.257 [DEBUG] [Thread-179189] [transport.py] [_log()] starting thread (client mode): 0xae5a68f0
2026-04-12T00:05:51.257 [DEBUG] [Thread-179189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:05:51.271 [DEBUG] [Thread-179189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:05:51.271 [INFO] [Thread-179189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:51.279 [DEBUG] [Thread-179189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] client lang: <none>
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] server lang: <none>
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] kex follows: False
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:05:51.280 [DEBUG] [Thread-179189] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:05:51.281 [DEBUG] [Thread-179189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:05:51.281 [DEBUG] [Thread-179189] [transport.py] [_log()] Compression: none
2026-04-12T00:05:51.281 [DEBUG] [Thread-179189] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:05:51.347 [DEBUG] [Thread-179189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:05:51.348 [DEBUG] [Thread-179189] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:05:51.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:05:51.349 [DEBUG] [Thread-179189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:05:51.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:05:51.407 [DEBUG] [Thread-179189] [transport.py] [_log()] userauth is OK
2026-04-12T00:05:51.407 [DEBUG] [Thread-179189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:05:51.407 [DEBUG] [Thread-179189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:05:51.407 [DEBUG] [Thread-179189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:05:51.408 [DEBUG] [Thread-179189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:05:51.426 [INFO] [Thread-179189] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:05:51.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:05:51.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:05:51.615 [DEBUG] [Thread-179191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:05:52.283 [DEBUG] [Thread-179189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:05:52.283 [DEBUG] [Thread-179189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:05:52.331 [DEBUG] [Thread-179189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:05:52.331 [DEBUG] [Thread-179189] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:05:52.340 [DEBUG] [Thread-179189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:05:52.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:05:52.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-04-12T00:05:52.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-04-12T00:05:52.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:05:52.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:05:52.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:05:52.378 [DEBUG] [Thread-179189] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:06:00.932 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:00.933 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:06.670 [DEBUG] [Thread-179192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:21.708 [DEBUG] [Thread-179193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:22.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:06:22.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:06:22.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:06:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 6, 4), -0.024835, 100.131, 0.0, 23.3615, 10.9122, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:06:23.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:06:04
2026-04-12T00:06:24.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:06:24.179 [DEBUG] [Thread-179194] [transport.py] [_log()] starting thread (client mode): 0xae5a6bf0
2026-04-12T00:06:24.179 [DEBUG] [Thread-179194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:06:24.190 [DEBUG] [Thread-179194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:06:24.190 [INFO] [Thread-179194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:06:24.193 [DEBUG] [Thread-179194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:06:24.193 [DEBUG] [Thread-179194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:06:24.193 [DEBUG] [Thread-179194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:06:24.193 [DEBUG] [Thread-179194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:24.193 [DEBUG] [Thread-179194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:24.193 [DEBUG] [Thread-179194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] client lang: <none>
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] server lang: <none>
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] kex follows: False
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] Compression: none
2026-04-12T00:06:24.194 [DEBUG] [Thread-179194] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:06:24.212 [DEBUG] [Thread-179194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:06:24.212 [DEBUG] [Thread-179194] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:06:24.213 [DEBUG] [Thread-179194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:06:24.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:06:24.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:06:24.215 [DEBUG] [Thread-179194] [transport.py] [_log()] userauth is OK
2026-04-12T00:06:24.215 [DEBUG] [Thread-179194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:06:24.215 [DEBUG] [Thread-179194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:06:24.215 [DEBUG] [Thread-179194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:06:24.215 [DEBUG] [Thread-179194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:06:24.239 [INFO] [Thread-179194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:06:24.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:06:24.856 [DEBUG] [Thread-179194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:06:24.856 [DEBUG] [Thread-179194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:06:24.856 [DEBUG] [Thread-179194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:06:24.897 [DEBUG] [Thread-179194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:06:24.897 [DEBUG] [Thread-179194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:06:24.900 [DEBUG] [Thread-179194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:06:24.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:06:24.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:06:24.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:06:24.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:06:24.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:06:24.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:06:24.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:06:24.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:06:24.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:06:24.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.920945 -999.00  +10.90  17.19     97  +10.60 1 3 1 3 1     0    0 0.30 -1.68 ----- 17.8 17.2 299.7 22.9 12.3 -2.0 12.2 -0.6 11.9 -0.6 12.2 -1.8
2026-04-12T00:06:24.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:06:24.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:06:24.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.920945
2026-04-12T00:06:24.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:06:24.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:06:24.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:06:24.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:06:24.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:06:24.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:06:04', tmtdew=-0.024835, humidity=100.131, cloud=0.0, wind=23.3615, temperature=10.9122, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:06:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:06:24.928 [DEBUG] [Thread-179194] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:06:25.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:06:25.024 [DEBUG] [Thread-179197] [transport.py] [_log()] starting thread (client mode): 0xae5a5d20
2026-04-12T00:06:25.024 [DEBUG] [Thread-179197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:06:25.040 [DEBUG] [Thread-179197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:06:25.041 [INFO] [Thread-179197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:06:25.048 [DEBUG] [Thread-179197] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] client lang: <none>
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] server lang: <none>
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] kex follows: False
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:06:25.049 [DEBUG] [Thread-179197] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:06:25.050 [DEBUG] [Thread-179197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:06:25.050 [DEBUG] [Thread-179197] [transport.py] [_log()] Compression: none
2026-04-12T00:06:25.050 [DEBUG] [Thread-179197] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:06:25.112 [DEBUG] [Thread-179197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:06:25.113 [DEBUG] [Thread-179197] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:06:25.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:06:25.114 [DEBUG] [Thread-179197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:06:25.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:06:25.171 [DEBUG] [Thread-179197] [transport.py] [_log()] userauth is OK
2026-04-12T00:06:25.172 [DEBUG] [Thread-179197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:06:25.172 [DEBUG] [Thread-179197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:06:25.172 [DEBUG] [Thread-179197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:06:25.172 [DEBUG] [Thread-179197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:06:25.192 [INFO] [Thread-179197] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:06:25.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:06:25.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:06:26.037 [DEBUG] [Thread-179197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:06:26.038 [DEBUG] [Thread-179197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:06:26.086 [DEBUG] [Thread-179197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:06:26.087 [DEBUG] [Thread-179197] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:06:26.096 [DEBUG] [Thread-179197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:06:26.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:06:26.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:06:26.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:06:26.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:06:26.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:06:26.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:06:26.134 [DEBUG] [Thread-179197] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:06:36.746 [DEBUG] [Thread-179199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:44.762 [DEBUG] [Thread-179200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:51.798 [DEBUG] [Thread-179201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:06:56.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:06:56.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:06:56.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-04-12T00:06:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 6, 40), -0.04491, 100.229, 0.0, 21.3833, 11.4243, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:06:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:06:40
2026-04-12T00:06:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:06:57.974 [DEBUG] [Thread-179202] [transport.py] [_log()] starting thread (client mode): 0xae5a5cc0
2026-04-12T00:06:57.974 [DEBUG] [Thread-179202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:06:57.993 [DEBUG] [Thread-179202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:06:57.993 [INFO] [Thread-179202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:06:57.996 [DEBUG] [Thread-179202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:06:57.996 [DEBUG] [Thread-179202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] client lang: <none>
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] server lang: <none>
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] kex follows: False
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] Compression: none
2026-04-12T00:06:57.997 [DEBUG] [Thread-179202] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:06:58.007 [DEBUG] [Thread-179202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:06:58.007 [DEBUG] [Thread-179202] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:06:58.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:06:58.008 [DEBUG] [Thread-179202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:06:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:06:58.010 [DEBUG] [Thread-179202] [transport.py] [_log()] userauth is OK
2026-04-12T00:06:58.010 [DEBUG] [Thread-179202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:06:58.010 [DEBUG] [Thread-179202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:06:58.011 [DEBUG] [Thread-179202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:06:58.011 [DEBUG] [Thread-179202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:06:58.034 [INFO] [Thread-179202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:06:58.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:06:58.636 [DEBUG] [Thread-179202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:06:58.636 [DEBUG] [Thread-179202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:06:58.637 [DEBUG] [Thread-179202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:06:58.677 [DEBUG] [Thread-179202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:06:58.677 [DEBUG] [Thread-179202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:06:58.681 [DEBUG] [Thread-179202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:06:58.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:06:58.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:06:58.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:06:58.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:06:58.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:06:58.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:06:58.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:06:58.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:06:58.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:06:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.921292 -999.00  +10.90  17.38     97  +10.50 1 3 1 3 1     0    0 0.31 -1.56 ----- 19.9 17.4 289.4 23.1 12.3 -1.6 12.2 -0.6 11.9 -0.8 12.2 -1.4
2026-04-12T00:06:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:06:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:06:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.921292
2026-04-12T00:06:58.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:06:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:06:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:06:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:06:58.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:06:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:06:40', tmtdew=-0.04491, humidity=100.229, cloud=0.0, wind=21.3833, temperature=11.4243, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:06:39.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:06:58.708 [DEBUG] [Thread-179202] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:06:58.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:06:58.800 [DEBUG] [Thread-179205] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa90
2026-04-12T00:06:58.801 [DEBUG] [Thread-179205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:06:58.815 [DEBUG] [Thread-179205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:06:58.816 [INFO] [Thread-179205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:06:58.823 [DEBUG] [Thread-179205] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:06:58.823 [DEBUG] [Thread-179205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] client lang: <none>
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] server lang: <none>
2026-04-12T00:06:58.824 [DEBUG] [Thread-179205] [transport.py] [_log()] kex follows: False
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] Compression: none
2026-04-12T00:06:58.825 [DEBUG] [Thread-179205] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:06:58.882 [DEBUG] [Thread-179205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:06:58.882 [DEBUG] [Thread-179205] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:06:58.883 [DEBUG] [Thread-179205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:06:58.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:06:58.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:06:58.939 [DEBUG] [Thread-179205] [transport.py] [_log()] userauth is OK
2026-04-12T00:06:58.940 [DEBUG] [Thread-179205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:06:58.940 [DEBUG] [Thread-179205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:06:58.940 [DEBUG] [Thread-179205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:06:58.941 [DEBUG] [Thread-179205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:06:58.963 [INFO] [Thread-179205] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:06:58.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:06:58.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:06:59.772 [DEBUG] [Thread-179205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:06:59.772 [DEBUG] [Thread-179205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:06:59.819 [DEBUG] [Thread-179205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:06:59.820 [DEBUG] [Thread-179205] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:06:59.828 [DEBUG] [Thread-179205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:06:59.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:06:59.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-04-12T00:06:59.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:06:59.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:06:59.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:06:59.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:06:59.860 [DEBUG] [Thread-179205] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:07:01.138 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:07:01.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:07:06.832 [DEBUG] [Thread-179207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:07:21.884 [DEBUG] [Thread-179208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:07:29.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:07:29.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:07:29.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-04-12T00:07:31.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 7, 15), 0.02756, 100.115, 0.0, 22.109, 10.9456, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:07:31.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:07:15
2026-04-12T00:07:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:07:31.682 [DEBUG] [Thread-179209] [transport.py] [_log()] starting thread (client mode): 0xae5a7c10
2026-04-12T00:07:31.682 [DEBUG] [Thread-179209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:07:31.704 [DEBUG] [Thread-179209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:07:31.704 [INFO] [Thread-179209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] client lang: <none>
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] server lang: <none>
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] kex follows: False
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] Compression: none
2026-04-12T00:07:31.706 [DEBUG] [Thread-179209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:07:31.716 [DEBUG] [Thread-179209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:07:31.717 [DEBUG] [Thread-179209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:07:31.717 [DEBUG] [Thread-179209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:07:31.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:07:31.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:07:31.719 [DEBUG] [Thread-179209] [transport.py] [_log()] userauth is OK
2026-04-12T00:07:31.720 [DEBUG] [Thread-179209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:07:31.720 [DEBUG] [Thread-179209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:07:31.720 [DEBUG] [Thread-179209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:07:31.720 [DEBUG] [Thread-179209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:07:31.744 [INFO] [Thread-179209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:07:31.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:07:32.325 [DEBUG] [Thread-179209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:07:32.326 [DEBUG] [Thread-179209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:07:32.326 [DEBUG] [Thread-179209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:07:32.367 [DEBUG] [Thread-179209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:07:32.367 [DEBUG] [Thread-179209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:07:32.369 [DEBUG] [Thread-179209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:07:32.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:07:32.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:07:32.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:07:32.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:07:32.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:07:32.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:07:32.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:07:32.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:07:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:07:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.921639 -999.00  +10.90  21.06     97  +10.50 1 3 1 3 1     0    0 0.31 -1.32 ----- 19.9 21.1 295.2 24.9 12.3 -2.7 12.1 -0.5 11.8 -0.6 12.1 -2.1
2026-04-12T00:07:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:07:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:07:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.921639
2026-04-12T00:07:32.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:07:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:07:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:07:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:07:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:07:32.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:07:15', tmtdew=0.02756, humidity=100.115, cloud=0.0, wind=22.109, temperature=10.9456, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:07:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:07:32.387 [DEBUG] [Thread-179209] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:07:32.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:07:32.481 [DEBUG] [Thread-179212] [transport.py] [_log()] starting thread (client mode): 0xae5a4dc0
2026-04-12T00:07:32.481 [DEBUG] [Thread-179212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:07:32.496 [DEBUG] [Thread-179212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:07:32.496 [INFO] [Thread-179212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:07:32.504 [DEBUG] [Thread-179212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] client lang: <none>
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] server lang: <none>
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] kex follows: False
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] Compression: none
2026-04-12T00:07:32.505 [DEBUG] [Thread-179212] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:07:32.563 [DEBUG] [Thread-179212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:07:32.564 [DEBUG] [Thread-179212] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:07:32.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:07:32.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:07:32.565 [DEBUG] [Thread-179212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:07:32.620 [DEBUG] [Thread-179212] [transport.py] [_log()] userauth is OK
2026-04-12T00:07:32.620 [DEBUG] [Thread-179212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:07:32.620 [DEBUG] [Thread-179212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:07:32.621 [DEBUG] [Thread-179212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:07:32.621 [DEBUG] [Thread-179212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:07:32.639 [INFO] [Thread-179212] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:07:32.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:07:32.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:07:33.484 [DEBUG] [Thread-179212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:07:33.484 [DEBUG] [Thread-179212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:07:33.532 [DEBUG] [Thread-179212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:07:33.532 [DEBUG] [Thread-179212] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:07:33.541 [DEBUG] [Thread-179212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:07:33.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:07:33.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-04-12T00:07:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:07:33.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:07:33.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:07:33.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:07:33.578 [DEBUG] [Thread-179212] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:07:36.925 [DEBUG] [Thread-179214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:07:44.817 [DEBUG] [Thread-179215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:07:51.979 [DEBUG] [Thread-179216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:01.344 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:01.346 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:08:03.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:08:03.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-04-12T00:08:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 7, 51), -0.04488, 100.229, 0.0, 26.0402, 11.4242, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:08:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:07:51
2026-04-12T00:08:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:08:05.423 [DEBUG] [Thread-179217] [transport.py] [_log()] starting thread (client mode): 0xb0f6e7a0
2026-04-12T00:08:05.423 [DEBUG] [Thread-179217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:08:05.436 [DEBUG] [Thread-179217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:08:05.436 [INFO] [Thread-179217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] client lang: <none>
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] server lang: <none>
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] kex follows: False
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] Compression: none
2026-04-12T00:08:05.438 [DEBUG] [Thread-179217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:08:05.446 [DEBUG] [Thread-179217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:08:05.447 [DEBUG] [Thread-179217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:08:05.447 [DEBUG] [Thread-179217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:08:05.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:08:05.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:08:05.449 [DEBUG] [Thread-179217] [transport.py] [_log()] userauth is OK
2026-04-12T00:08:05.449 [DEBUG] [Thread-179217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:08:05.449 [DEBUG] [Thread-179217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:08:05.449 [DEBUG] [Thread-179217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:08:05.449 [DEBUG] [Thread-179217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:08:05.470 [INFO] [Thread-179217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:08:05.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:08:06.075 [DEBUG] [Thread-179217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:08:06.075 [DEBUG] [Thread-179217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:08:06.076 [DEBUG] [Thread-179217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:08:06.116 [DEBUG] [Thread-179217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:08:06.116 [DEBUG] [Thread-179217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:08:06.120 [DEBUG] [Thread-179217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:08:06.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:08:06.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:08:06.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:08:06.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:08:06.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:08:06.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:08:06.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:08:06.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:08:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:08:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.921986 -999.00  +10.80  17.92     97  +10.50 1 3 1 3 1     0    0 0.32 -1.18 ----- 19.9 17.9 280.6 21.4 12.2 -2.2 12.2 -0.6 11.8 -1.3 12.2 -1.5
2026-04-12T00:08:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:08:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:08:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.921986
2026-04-12T00:08:06.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:08:06.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:08:06.146 [DEBUG] [Thread-179217] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:08:06.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:08:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:08:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:08:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:07:51', tmtdew=-0.04488, humidity=100.229, cloud=0.0, wind=26.0402, temperature=11.4242, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:07:39.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:08:06.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:08:06.239 [DEBUG] [Thread-179220] [transport.py] [_log()] starting thread (client mode): 0xb0f6c040
2026-04-12T00:08:06.240 [DEBUG] [Thread-179220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:08:06.254 [DEBUG] [Thread-179220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:08:06.254 [INFO] [Thread-179220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:08:06.262 [DEBUG] [Thread-179220] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:08:06.262 [DEBUG] [Thread-179220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] client lang: <none>
2026-04-12T00:08:06.263 [DEBUG] [Thread-179220] [transport.py] [_log()] server lang: <none>
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] kex follows: False
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] Compression: none
2026-04-12T00:08:06.264 [DEBUG] [Thread-179220] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:08:06.325 [DEBUG] [Thread-179220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:08:06.326 [DEBUG] [Thread-179220] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:08:06.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:08:06.327 [DEBUG] [Thread-179220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:08:06.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:08:06.389 [DEBUG] [Thread-179220] [transport.py] [_log()] userauth is OK
2026-04-12T00:08:06.389 [DEBUG] [Thread-179220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:08:06.389 [DEBUG] [Thread-179220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:08:06.389 [DEBUG] [Thread-179220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:08:06.390 [DEBUG] [Thread-179220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:08:06.408 [INFO] [Thread-179220] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:08:06.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:08:06.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:08:07.014 [DEBUG] [Thread-179222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:07.218 [DEBUG] [Thread-179220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:08:07.218 [DEBUG] [Thread-179220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:08:07.266 [DEBUG] [Thread-179220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:08:07.266 [DEBUG] [Thread-179220] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:08:07.275 [DEBUG] [Thread-179220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:08:07.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:08:07.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-04-12T00:08:07.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:08:07.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:08:07.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:08:07.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:08:07.311 [DEBUG] [Thread-179220] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:08:22.074 [DEBUG] [Thread-179223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:37.110 [DEBUG] [Thread-179224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:37.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:08:37.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:08:37.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-04-12T00:08:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 8, 26), 0.032635, 100.081, 0.0, 22.8323, 10.8457, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:08:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:08:26
2026-04-12T00:08:39.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:08:39.187 [DEBUG] [Thread-179225] [transport.py] [_log()] starting thread (client mode): 0xae5a7430
2026-04-12T00:08:39.187 [DEBUG] [Thread-179225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:08:39.208 [DEBUG] [Thread-179225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:08:39.208 [INFO] [Thread-179225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:08:39.209 [DEBUG] [Thread-179225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] client lang: <none>
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] server lang: <none>
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] kex follows: False
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] Compression: none
2026-04-12T00:08:39.210 [DEBUG] [Thread-179225] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:08:39.222 [DEBUG] [Thread-179225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:08:39.222 [DEBUG] [Thread-179225] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:08:39.223 [DEBUG] [Thread-179225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:08:39.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:08:39.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:08:39.225 [DEBUG] [Thread-179225] [transport.py] [_log()] userauth is OK
2026-04-12T00:08:39.225 [DEBUG] [Thread-179225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:08:39.225 [DEBUG] [Thread-179225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:08:39.225 [DEBUG] [Thread-179225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:08:39.225 [DEBUG] [Thread-179225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:08:39.249 [INFO] [Thread-179225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:08:39.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:08:39.918 [DEBUG] [Thread-179225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:08:39.918 [DEBUG] [Thread-179225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:08:39.918 [DEBUG] [Thread-179225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:08:39.959 [DEBUG] [Thread-179225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:08:39.959 [DEBUG] [Thread-179225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:08:39.963 [DEBUG] [Thread-179225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:08:39.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:08:39.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:08:39.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:08:39.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:08:39.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:08:39.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:08:39.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:08:39.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:08:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:08:39.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.922334 -999.00  +10.80  21.99     97  +10.50 1 3 1 3 1     0    0 0.32 -1.26 ----- 18.4 22.0 271.4 25.1 12.2 -1.4 12.1 -0.5 11.7 -1.4 12.1 -0.9
2026-04-12T00:08:39.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:08:39.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:08:39.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.922334
2026-04-12T00:08:39.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:08:39.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:08:39.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:08:39.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:08:39.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:08:39.989 [DEBUG] [Thread-179225] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:08:39.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:08:26', tmtdew=0.032635, humidity=100.081, cloud=0.0, wind=22.8323, temperature=10.8457, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:08:09.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:08:40.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:08:40.083 [DEBUG] [Thread-179228] [transport.py] [_log()] starting thread (client mode): 0xb0f6fa60
2026-04-12T00:08:40.083 [DEBUG] [Thread-179228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:08:40.098 [DEBUG] [Thread-179228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:08:40.098 [INFO] [Thread-179228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:08:40.105 [DEBUG] [Thread-179228] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:08:40.106 [DEBUG] [Thread-179228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] client lang: <none>
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] server lang: <none>
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] kex follows: False
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:08:40.107 [DEBUG] [Thread-179228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:08:40.108 [DEBUG] [Thread-179228] [transport.py] [_log()] Compression: none
2026-04-12T00:08:40.108 [DEBUG] [Thread-179228] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:08:40.166 [DEBUG] [Thread-179228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:08:40.167 [DEBUG] [Thread-179228] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:08:40.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:08:40.168 [DEBUG] [Thread-179228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:08:40.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:08:40.225 [DEBUG] [Thread-179228] [transport.py] [_log()] userauth is OK
2026-04-12T00:08:40.225 [DEBUG] [Thread-179228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:08:40.225 [DEBUG] [Thread-179228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:08:40.226 [DEBUG] [Thread-179228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:08:40.226 [DEBUG] [Thread-179228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:08:40.245 [INFO] [Thread-179228] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:08:40.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:08:40.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:08:41.084 [DEBUG] [Thread-179228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:08:41.084 [DEBUG] [Thread-179228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:08:41.132 [DEBUG] [Thread-179228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:08:41.133 [DEBUG] [Thread-179228] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:08:41.142 [DEBUG] [Thread-179228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:08:41.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:08:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:08:41.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-04-12T00:08:41.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:08:41.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:08:41.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:08:41.180 [DEBUG] [Thread-179228] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:08:44.895 [DEBUG] [Thread-179230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:08:52.146 [DEBUG] [Thread-179231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:01.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:01.551 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:07.196 [DEBUG] [Thread-179232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:09:11.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:09:11.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:09:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 9, 2), 0.035215, 100.064, 0.0, 23.5732, 10.8454, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:09:12.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:09:02
2026-04-12T00:09:12.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:09:13.057 [DEBUG] [Thread-179233] [transport.py] [_log()] starting thread (client mode): 0xae5a6a40
2026-04-12T00:09:13.057 [DEBUG] [Thread-179233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:09:13.069 [DEBUG] [Thread-179233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:09:13.069 [INFO] [Thread-179233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] client lang: <none>
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] server lang: <none>
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] kex follows: False
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] Compression: none
2026-04-12T00:09:13.071 [DEBUG] [Thread-179233] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:09:13.088 [DEBUG] [Thread-179233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:09:13.088 [DEBUG] [Thread-179233] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:09:13.089 [DEBUG] [Thread-179233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:09:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:09:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:09:13.090 [DEBUG] [Thread-179233] [transport.py] [_log()] userauth is OK
2026-04-12T00:09:13.090 [DEBUG] [Thread-179233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:09:13.090 [DEBUG] [Thread-179233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:09:13.090 [DEBUG] [Thread-179233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:09:13.091 [DEBUG] [Thread-179233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:09:13.104 [INFO] [Thread-179233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:09:13.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:09:13.725 [DEBUG] [Thread-179233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:09:13.725 [DEBUG] [Thread-179233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:09:13.725 [DEBUG] [Thread-179233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:09:13.766 [DEBUG] [Thread-179233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:09:13.766 [DEBUG] [Thread-179233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:09:13.770 [DEBUG] [Thread-179233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:09:13.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:09:13.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:09:13.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:09:13.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:09:13.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:09:13.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:09:13.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:09:13.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:09:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:09:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.922681 -999.00  +10.90  14.44     97  +10.60 1 3 1 3 1     0    0 0.32 -1.22 ----- 16.1 14.4 286.0 21.2 12.3 -1.2 12.1 -0.5 11.7 -0.8 12.1 -0.8
2026-04-12T00:09:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:09:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:09:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.922681
2026-04-12T00:09:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:09:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:09:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:09:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:09:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:09:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:09:02', tmtdew=0.035215, humidity=100.064, cloud=0.0, wind=23.5732, temperature=10.8454, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:08:39.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:09:13.798 [DEBUG] [Thread-179233] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:09:13.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:09:13.900 [DEBUG] [Thread-179236] [transport.py] [_log()] starting thread (client mode): 0xae5a5db0
2026-04-12T00:09:13.900 [DEBUG] [Thread-179236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:09:13.915 [DEBUG] [Thread-179236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:09:13.915 [INFO] [Thread-179236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] client lang: <none>
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] server lang: <none>
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] kex follows: False
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:09:13.922 [DEBUG] [Thread-179236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:09:13.923 [DEBUG] [Thread-179236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:09:13.923 [DEBUG] [Thread-179236] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:09:13.923 [DEBUG] [Thread-179236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:09:13.923 [DEBUG] [Thread-179236] [transport.py] [_log()] Compression: none
2026-04-12T00:09:13.923 [DEBUG] [Thread-179236] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:09:13.981 [DEBUG] [Thread-179236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:09:13.982 [DEBUG] [Thread-179236] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:09:13.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:09:13.983 [DEBUG] [Thread-179236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:09:13.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:09:14.037 [DEBUG] [Thread-179236] [transport.py] [_log()] userauth is OK
2026-04-12T00:09:14.037 [DEBUG] [Thread-179236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:09:14.038 [DEBUG] [Thread-179236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:09:14.038 [DEBUG] [Thread-179236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:09:14.038 [DEBUG] [Thread-179236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:09:14.056 [INFO] [Thread-179236] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:09:14.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:09:14.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:09:14.938 [DEBUG] [Thread-179236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:09:14.939 [DEBUG] [Thread-179236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:09:14.987 [DEBUG] [Thread-179236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:09:14.987 [DEBUG] [Thread-179236] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:09:14.996 [DEBUG] [Thread-179236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:09:15.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:09:15.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-04-12T00:09:15.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-04-12T00:09:15.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:09:15.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:09:15.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:09:15.033 [DEBUG] [Thread-179236] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:09:22.233 [DEBUG] [Thread-179238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:37.289 [DEBUG] [Thread-179239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:44.976 [DEBUG] [Thread-179240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:09:45.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:09:45.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:09:45.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-04-12T00:09:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 9, 37), -0.03457, 100.162, 0.0, 25.2994, 11.2909, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:09:46.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:09:37
2026-04-12T00:09:46.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:09:46.910 [DEBUG] [Thread-179241] [transport.py] [_log()] starting thread (client mode): 0xa79544c0
2026-04-12T00:09:46.910 [DEBUG] [Thread-179241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:09:46.930 [DEBUG] [Thread-179241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:09:46.930 [INFO] [Thread-179241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:09:46.934 [DEBUG] [Thread-179241] [transport.py] [_log()] client lang: <none>
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] server lang: <none>
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] kex follows: False
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] Compression: none
2026-04-12T00:09:46.935 [DEBUG] [Thread-179241] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:09:46.952 [DEBUG] [Thread-179241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:09:46.952 [DEBUG] [Thread-179241] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:09:46.953 [DEBUG] [Thread-179241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:09:46.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:09:46.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:09:46.955 [DEBUG] [Thread-179241] [transport.py] [_log()] userauth is OK
2026-04-12T00:09:46.955 [DEBUG] [Thread-179241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:09:46.955 [DEBUG] [Thread-179241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:09:46.955 [DEBUG] [Thread-179241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:09:46.956 [DEBUG] [Thread-179241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:09:46.973 [INFO] [Thread-179241] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:09:46.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:09:47.612 [DEBUG] [Thread-179241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:09:47.613 [DEBUG] [Thread-179241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:09:47.613 [DEBUG] [Thread-179241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:09:47.653 [DEBUG] [Thread-179241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:09:47.653 [DEBUG] [Thread-179241] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:09:47.657 [DEBUG] [Thread-179241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:09:47.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:09:47.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:09:47.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:09:47.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:09:47.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:09:47.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:09:47.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:09:47.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:09:47.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:09:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.923375 -999.00  +11.00  13.93     97  +10.70 1 3 1 3 1     0    0 0.30 -1.47 ----- 13.6 13.9 292.1 19.1 12.3 -1.2 12.2 -0.5 11.8 -0.5 12.2 -0.8
2026-04-12T00:09:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:09:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:09:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.923375
2026-04-12T00:09:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:09:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:09:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:09:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:09:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:09:47.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:09:37', tmtdew=-0.03457, humidity=100.162, cloud=0.0, wind=25.2994, temperature=11.2909, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:09:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:09:47.680 [DEBUG] [Thread-179241] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:09:47.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:09:47.776 [DEBUG] [Thread-179244] [transport.py] [_log()] starting thread (client mode): 0xa7955210
2026-04-12T00:09:47.776 [DEBUG] [Thread-179244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:09:47.791 [DEBUG] [Thread-179244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:09:47.791 [INFO] [Thread-179244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:09:47.798 [DEBUG] [Thread-179244] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] client lang: <none>
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] server lang: <none>
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] kex follows: False
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:09:47.799 [DEBUG] [Thread-179244] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:09:47.800 [DEBUG] [Thread-179244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:09:47.800 [DEBUG] [Thread-179244] [transport.py] [_log()] Compression: none
2026-04-12T00:09:47.800 [DEBUG] [Thread-179244] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:09:47.857 [DEBUG] [Thread-179244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:09:47.858 [DEBUG] [Thread-179244] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:09:47.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:09:47.859 [DEBUG] [Thread-179244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:09:47.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:09:47.913 [DEBUG] [Thread-179244] [transport.py] [_log()] userauth is OK
2026-04-12T00:09:47.913 [DEBUG] [Thread-179244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:09:47.914 [DEBUG] [Thread-179244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:09:47.914 [DEBUG] [Thread-179244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:09:47.914 [DEBUG] [Thread-179244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:09:47.939 [INFO] [Thread-179244] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:09:47.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:09:47.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:09:48.759 [DEBUG] [Thread-179244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:09:48.760 [DEBUG] [Thread-179244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:09:48.807 [DEBUG] [Thread-179244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:09:48.808 [DEBUG] [Thread-179244] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:09:48.818 [DEBUG] [Thread-179244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:09:48.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:09:48.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-04-12T00:09:48.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:09:48.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:09:48.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:09:48.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:09:48.860 [DEBUG] [Thread-179244] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:09:52.328 [DEBUG] [Thread-179246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:01.765 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:01.766 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:07.380 [DEBUG] [Thread-179247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:18.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:10:18.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:10:18.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-04-12T00:10:20.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 10, 12), -0.024845, 100.131, 0.0, 21.4909, 10.8957, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:10:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:10:12
2026-04-12T00:10:20.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:10:20.799 [DEBUG] [Thread-179248] [transport.py] [_log()] starting thread (client mode): 0xa7957910
2026-04-12T00:10:20.799 [DEBUG] [Thread-179248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:10:20.820 [DEBUG] [Thread-179248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:10:20.820 [INFO] [Thread-179248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:10:20.823 [DEBUG] [Thread-179248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:10:20.823 [DEBUG] [Thread-179248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:10:20.823 [DEBUG] [Thread-179248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:10:20.823 [DEBUG] [Thread-179248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:20.823 [DEBUG] [Thread-179248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:20.823 [DEBUG] [Thread-179248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] client lang: <none>
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] server lang: <none>
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] kex follows: False
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] Compression: none
2026-04-12T00:10:20.824 [DEBUG] [Thread-179248] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:10:20.841 [DEBUG] [Thread-179248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:10:20.842 [DEBUG] [Thread-179248] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:10:20.842 [DEBUG] [Thread-179248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:10:20.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:10:20.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:10:20.844 [DEBUG] [Thread-179248] [transport.py] [_log()] userauth is OK
2026-04-12T00:10:20.844 [DEBUG] [Thread-179248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:10:20.844 [DEBUG] [Thread-179248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:10:20.844 [DEBUG] [Thread-179248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:10:20.845 [DEBUG] [Thread-179248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:10:20.862 [INFO] [Thread-179248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:10:20.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:10:21.451 [DEBUG] [Thread-179248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:10:21.452 [DEBUG] [Thread-179248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:10:21.452 [DEBUG] [Thread-179248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:10:21.493 [DEBUG] [Thread-179248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:10:21.493 [DEBUG] [Thread-179248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:10:21.495 [DEBUG] [Thread-179248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:10:21.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:10:21.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:10:21.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:10:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:10:21.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:10:21.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:10:21.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:10:21.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:10:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:10:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.923722 -999.00  +10.90  20.52     97  +10.60 1 3 1 3 1     0    0 0.30 -1.55 ----- 19.7 20.5 280.4 23.9 12.2 -1.4 12.2 -0.7 11.8 -1.0 12.1 -0.9
2026-04-12T00:10:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:10:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:10:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.923722
2026-04-12T00:10:21.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:10:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:10:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:10:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:10:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:10:21.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:10:12', tmtdew=-0.024845, humidity=100.131, cloud=0.0, wind=21.4909, temperature=10.8957, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:10:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:10:21.522 [DEBUG] [Thread-179248] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:10:21.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:10:21.626 [DEBUG] [Thread-179251] [transport.py] [_log()] starting thread (client mode): 0xae5a4cd0
2026-04-12T00:10:21.626 [DEBUG] [Thread-179251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:10:21.641 [DEBUG] [Thread-179251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:10:21.641 [INFO] [Thread-179251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:21.649 [DEBUG] [Thread-179251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] client lang: <none>
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] server lang: <none>
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] kex follows: False
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] Compression: none
2026-04-12T00:10:21.650 [DEBUG] [Thread-179251] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:10:21.705 [DEBUG] [Thread-179251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:10:21.706 [DEBUG] [Thread-179251] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:10:21.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:10:21.707 [DEBUG] [Thread-179251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:10:21.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:10:21.762 [DEBUG] [Thread-179251] [transport.py] [_log()] userauth is OK
2026-04-12T00:10:21.762 [DEBUG] [Thread-179251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:10:21.762 [DEBUG] [Thread-179251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:10:21.762 [DEBUG] [Thread-179251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:10:21.763 [DEBUG] [Thread-179251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:10:21.782 [INFO] [Thread-179251] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:10:21.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:10:21.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:10:22.417 [DEBUG] [Thread-179253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:22.607 [DEBUG] [Thread-179251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:10:22.607 [DEBUG] [Thread-179251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:10:22.655 [DEBUG] [Thread-179251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:10:22.656 [DEBUG] [Thread-179251] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:10:22.664 [DEBUG] [Thread-179251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:10:22.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:10:22.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-04-12T00:10:22.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-04-12T00:10:22.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:10:22.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:10:22.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:10:22.702 [DEBUG] [Thread-179251] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:10:37.472 [DEBUG] [Thread-179254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:45.040 [DEBUG] [Thread-179255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:52.508 [DEBUG] [Thread-179256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:10:52.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:10:52.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:10:52.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-04-12T00:10:54.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 10, 12), -0.024845, 100.131, 0.0, 21.4909, 10.8957, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:10:54.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:10:12
2026-04-12T00:10:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:10:54.592 [DEBUG] [Thread-179257] [transport.py] [_log()] starting thread (client mode): 0xae5a7280
2026-04-12T00:10:54.592 [DEBUG] [Thread-179257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:10:54.607 [DEBUG] [Thread-179257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:10:54.607 [INFO] [Thread-179257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] client lang: <none>
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] server lang: <none>
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] kex follows: False
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:10:54.609 [DEBUG] [Thread-179257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:10:54.610 [DEBUG] [Thread-179257] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:10:54.610 [DEBUG] [Thread-179257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:10:54.610 [DEBUG] [Thread-179257] [transport.py] [_log()] Compression: none
2026-04-12T00:10:54.610 [DEBUG] [Thread-179257] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:10:54.624 [DEBUG] [Thread-179257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:10:54.625 [DEBUG] [Thread-179257] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:10:54.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:10:54.627 [DEBUG] [Thread-179257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:10:54.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:10:54.629 [DEBUG] [Thread-179257] [transport.py] [_log()] userauth is OK
2026-04-12T00:10:54.629 [DEBUG] [Thread-179257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:10:54.630 [DEBUG] [Thread-179257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:10:54.630 [DEBUG] [Thread-179257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:10:54.630 [DEBUG] [Thread-179257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:10:54.656 [INFO] [Thread-179257] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:10:54.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:10:55.300 [DEBUG] [Thread-179257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:10:55.300 [DEBUG] [Thread-179257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:10:55.301 [DEBUG] [Thread-179257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:10:55.341 [DEBUG] [Thread-179257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:10:55.341 [DEBUG] [Thread-179257] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:10:55.345 [DEBUG] [Thread-179257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:10:55.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:10:55.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:10:55.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:10:55.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:10:55.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:10:55.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:10:55.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:10:55.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:10:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:10:55.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.924070 -999.00  +10.90  21.71     97  +10.50 1 3 1 3 1     0    0 0.31 -1.37 ----- 20.2 21.7 290.2 28.3 12.2 -1.3 12.1 -0.5 11.8 -0.9 12.1 -0.8
2026-04-12T00:10:55.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:10:55.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:10:55.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.924070
2026-04-12T00:10:55.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:10:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:10:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:10:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:10:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:10:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:10:12', tmtdew=-0.024845, humidity=100.131, cloud=0.0, wind=21.4909, temperature=10.8957, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:10:39.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:10:55.374 [DEBUG] [Thread-179257] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:10:55.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:10:55.467 [DEBUG] [Thread-179260] [transport.py] [_log()] starting thread (client mode): 0xae5a5c90
2026-04-12T00:10:55.467 [DEBUG] [Thread-179260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:10:55.481 [DEBUG] [Thread-179260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:10:55.481 [INFO] [Thread-179260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:10:55.489 [DEBUG] [Thread-179260] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:10:55.489 [DEBUG] [Thread-179260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:10:55.489 [DEBUG] [Thread-179260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] client lang: <none>
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] server lang: <none>
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] kex follows: False
2026-04-12T00:10:55.490 [DEBUG] [Thread-179260] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:10:55.491 [DEBUG] [Thread-179260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:10:55.491 [DEBUG] [Thread-179260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:10:55.491 [DEBUG] [Thread-179260] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:10:55.491 [DEBUG] [Thread-179260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:10:55.491 [DEBUG] [Thread-179260] [transport.py] [_log()] Compression: none
2026-04-12T00:10:55.491 [DEBUG] [Thread-179260] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:10:55.551 [DEBUG] [Thread-179260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:10:55.552 [DEBUG] [Thread-179260] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:10:55.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:10:55.554 [DEBUG] [Thread-179260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:10:55.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:10:55.610 [DEBUG] [Thread-179260] [transport.py] [_log()] userauth is OK
2026-04-12T00:10:55.611 [DEBUG] [Thread-179260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:10:55.611 [DEBUG] [Thread-179260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:10:55.611 [DEBUG] [Thread-179260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:10:55.611 [DEBUG] [Thread-179260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:10:55.630 [INFO] [Thread-179260] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:10:55.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:10:55.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:10:56.469 [DEBUG] [Thread-179260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:10:56.469 [DEBUG] [Thread-179260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:10:56.517 [DEBUG] [Thread-179260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:10:56.518 [DEBUG] [Thread-179260] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:10:56.527 [DEBUG] [Thread-179260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:10:56.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:10:56.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-04-12T00:10:56.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:10:56.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:10:56.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:10:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:10:56.564 [DEBUG] [Thread-179260] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:11:01.969 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:11:01.970 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:11:07.541 [DEBUG] [Thread-179262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:11:22.590 [DEBUG] [Thread-179263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:11:26.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:11:26.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:11:26.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-04-12T00:11:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 10, 48), -0.03977, 100.196, 0.0, 22.8298, 11.3577, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:11:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:10:48
2026-04-12T00:11:28.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:11:28.441 [DEBUG] [Thread-179264] [transport.py] [_log()] starting thread (client mode): 0xb39c7a30
2026-04-12T00:11:28.441 [DEBUG] [Thread-179264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:11:28.462 [DEBUG] [Thread-179264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:11:28.462 [INFO] [Thread-179264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] client lang: <none>
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] server lang: <none>
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] kex follows: False
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] Compression: none
2026-04-12T00:11:28.464 [DEBUG] [Thread-179264] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:11:28.477 [DEBUG] [Thread-179264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:11:28.477 [DEBUG] [Thread-179264] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:11:28.478 [DEBUG] [Thread-179264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:11:28.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:11:28.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:11:28.480 [DEBUG] [Thread-179264] [transport.py] [_log()] userauth is OK
2026-04-12T00:11:28.480 [DEBUG] [Thread-179264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:11:28.480 [DEBUG] [Thread-179264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:11:28.480 [DEBUG] [Thread-179264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:11:28.480 [DEBUG] [Thread-179264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:11:28.499 [INFO] [Thread-179264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:11:28.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:11:29.125 [DEBUG] [Thread-179264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:11:29.126 [DEBUG] [Thread-179264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:11:29.126 [DEBUG] [Thread-179264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:11:29.166 [DEBUG] [Thread-179264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:11:29.166 [DEBUG] [Thread-179264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:11:29.169 [DEBUG] [Thread-179264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:11:29.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:11:29.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:11:29.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:11:29.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:11:29.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:11:29.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:11:29.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.924417 -999.00  +10.90  18.74     97  +10.50 1 3 1 3 1     0    0 0.31 -1.14 ----- 16.9 18.7 284.1 25.6 12.2 -1.3 12.1 -0.5 11.8 -1.3 12.1 -0.8
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.924417
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:11:29.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:10:48', tmtdew=-0.03977, humidity=100.196, cloud=0.0, wind=22.8298, temperature=11.3577, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:11:09.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:11:29.187 [DEBUG] [Thread-179264] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:11:29.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:11:29.267 [DEBUG] [Thread-179267] [transport.py] [_log()] starting thread (client mode): 0xb39c5ba0
2026-04-12T00:11:29.267 [DEBUG] [Thread-179267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:11:29.282 [DEBUG] [Thread-179267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:11:29.282 [INFO] [Thread-179267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:11:29.289 [DEBUG] [Thread-179267] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:11:29.289 [DEBUG] [Thread-179267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:11:29.289 [DEBUG] [Thread-179267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] client lang: <none>
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] server lang: <none>
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] kex follows: False
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] Compression: none
2026-04-12T00:11:29.290 [DEBUG] [Thread-179267] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:11:29.350 [DEBUG] [Thread-179267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:11:29.351 [DEBUG] [Thread-179267] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:11:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:11:29.352 [DEBUG] [Thread-179267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:11:29.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:11:29.406 [DEBUG] [Thread-179267] [transport.py] [_log()] userauth is OK
2026-04-12T00:11:29.407 [DEBUG] [Thread-179267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:11:29.407 [DEBUG] [Thread-179267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:11:29.407 [DEBUG] [Thread-179267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:11:29.407 [DEBUG] [Thread-179267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:11:29.430 [INFO] [Thread-179267] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:11:29.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:11:29.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:11:30.272 [DEBUG] [Thread-179267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:11:30.272 [DEBUG] [Thread-179267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:11:30.320 [DEBUG] [Thread-179267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:11:30.320 [DEBUG] [Thread-179267] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:11:30.329 [DEBUG] [Thread-179267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:11:30.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:11:30.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-04-12T00:11:30.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-04-12T00:11:30.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:11:30.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:11:30.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:11:30.366 [DEBUG] [Thread-179267] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:11:37.630 [DEBUG] [Thread-179269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:11:45.097 [DEBUG] [Thread-179270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:11:52.682 [DEBUG] [Thread-179271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:12:00.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:12:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:12:01.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 11, 23), -0.01986, 100.098, 0.0, 25.673, 10.8622, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:12:01.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:11:23
2026-04-12T00:12:02.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:12:02.171 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:02.172 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:02.257 [DEBUG] [Thread-179272] [transport.py] [_log()] starting thread (client mode): 0xae5a4ee0
2026-04-12T00:12:02.257 [DEBUG] [Thread-179272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:12:02.275 [DEBUG] [Thread-179272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:12:02.275 [INFO] [Thread-179272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] client lang: <none>
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] server lang: <none>
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] kex follows: False
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] Compression: none
2026-04-12T00:12:02.279 [DEBUG] [Thread-179272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:12:02.290 [DEBUG] [Thread-179272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:12:02.290 [DEBUG] [Thread-179272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:12:02.290 [DEBUG] [Thread-179272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:12:02.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:12:02.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:12:02.292 [DEBUG] [Thread-179272] [transport.py] [_log()] userauth is OK
2026-04-12T00:12:02.292 [DEBUG] [Thread-179272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:12:02.292 [DEBUG] [Thread-179272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:12:02.292 [DEBUG] [Thread-179272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:12:02.292 [DEBUG] [Thread-179272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:12:02.316 [INFO] [Thread-179272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:12:02.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:12:02.957 [DEBUG] [Thread-179272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:12:02.957 [DEBUG] [Thread-179272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:12:02.958 [DEBUG] [Thread-179272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:12:02.998 [DEBUG] [Thread-179272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:12:02.998 [DEBUG] [Thread-179272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:12:03.002 [DEBUG] [Thread-179272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:12:03.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:12:03.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:12:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:12:03.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:12:03.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:12:03.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:12:03.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:12:03.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:12:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:12:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.924764 -999.00  +10.80  23.06     97  +10.50 1 3 1 3 1     0    0 0.32 -0.93 ----- 25.7 23.1 290.2 29.4 12.2 -1.4 12.1 -0.5 11.8 -0.7 12.1 -0.8
2026-04-12T00:12:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:12:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:12:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.924764
2026-04-12T00:12:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:12:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:12:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:12:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:12:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:12:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:11:23', tmtdew=-0.01986, humidity=100.098, cloud=0.0, wind=25.673, temperature=10.8622, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:11:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:12:03.029 [DEBUG] [Thread-179272] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:12:03.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:12:03.121 [DEBUG] [Thread-179275] [transport.py] [_log()] starting thread (client mode): 0xae5a7970
2026-04-12T00:12:03.121 [DEBUG] [Thread-179275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:12:03.137 [DEBUG] [Thread-179275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:12:03.137 [INFO] [Thread-179275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:12:03.145 [DEBUG] [Thread-179275] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:12:03.145 [DEBUG] [Thread-179275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:12:03.145 [DEBUG] [Thread-179275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:12:03.145 [DEBUG] [Thread-179275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:03.145 [DEBUG] [Thread-179275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] client lang: <none>
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] server lang: <none>
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] kex follows: False
2026-04-12T00:12:03.146 [DEBUG] [Thread-179275] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:12:03.147 [DEBUG] [Thread-179275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:12:03.147 [DEBUG] [Thread-179275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:12:03.147 [DEBUG] [Thread-179275] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:12:03.147 [DEBUG] [Thread-179275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:12:03.147 [DEBUG] [Thread-179275] [transport.py] [_log()] Compression: none
2026-04-12T00:12:03.147 [DEBUG] [Thread-179275] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:12:03.203 [DEBUG] [Thread-179275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:12:03.204 [DEBUG] [Thread-179275] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:12:03.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:12:03.205 [DEBUG] [Thread-179275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:12:03.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:12:03.262 [DEBUG] [Thread-179275] [transport.py] [_log()] userauth is OK
2026-04-12T00:12:03.263 [DEBUG] [Thread-179275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:12:03.263 [DEBUG] [Thread-179275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:12:03.263 [DEBUG] [Thread-179275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:12:03.263 [DEBUG] [Thread-179275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:12:03.283 [INFO] [Thread-179275] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:12:03.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:12:03.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:12:04.088 [DEBUG] [Thread-179275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:12:04.089 [DEBUG] [Thread-179275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:12:04.137 [DEBUG] [Thread-179275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:12:04.138 [DEBUG] [Thread-179275] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:12:04.147 [DEBUG] [Thread-179275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:12:04.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:12:04.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-04-12T00:12:04.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-04-12T00:12:04.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:12:04.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:12:04.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:12:04.184 [DEBUG] [Thread-179275] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:12:07.716 [DEBUG] [Thread-179277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:22.765 [DEBUG] [Thread-179278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:34.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:12:34.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:12:34.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-04-12T00:12:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 11, 59), -0.01736, 100.081, 0.0, 25.5143, 10.8122, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:12:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:11:59
2026-04-12T00:12:35.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:12:36.141 [DEBUG] [Thread-179279] [transport.py] [_log()] starting thread (client mode): 0xa7954ac0
2026-04-12T00:12:36.141 [DEBUG] [Thread-179279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:12:36.162 [DEBUG] [Thread-179279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:12:36.162 [INFO] [Thread-179279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:12:36.165 [DEBUG] [Thread-179279] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:12:36.165 [DEBUG] [Thread-179279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:12:36.165 [DEBUG] [Thread-179279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:12:36.165 [DEBUG] [Thread-179279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:36.165 [DEBUG] [Thread-179279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] client lang: <none>
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] server lang: <none>
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] kex follows: False
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] Compression: none
2026-04-12T00:12:36.166 [DEBUG] [Thread-179279] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:12:36.183 [DEBUG] [Thread-179279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:12:36.184 [DEBUG] [Thread-179279] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:12:36.184 [DEBUG] [Thread-179279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:12:36.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:12:36.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:12:36.186 [DEBUG] [Thread-179279] [transport.py] [_log()] userauth is OK
2026-04-12T00:12:36.187 [DEBUG] [Thread-179279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:12:36.187 [DEBUG] [Thread-179279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:12:36.187 [DEBUG] [Thread-179279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:12:36.187 [DEBUG] [Thread-179279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:12:36.211 [INFO] [Thread-179279] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:12:36.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:12:36.823 [DEBUG] [Thread-179279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:12:36.824 [DEBUG] [Thread-179279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:12:36.824 [DEBUG] [Thread-179279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:12:36.865 [DEBUG] [Thread-179279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:12:36.865 [DEBUG] [Thread-179279] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:12:36.869 [DEBUG] [Thread-179279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:12:36.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:12:36.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:12:36.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:12:36.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:12:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:12:36.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:12:36.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:12:36.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:12:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:12:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.925111 -999.00  +10.80  23.46     97  +10.40 1 3 1 3 1     0    0 0.32 -0.79 ----- 24.8 23.5 278.1 31.4 12.1 -1.4 12.0 -0.7 11.7 -0.9 12.0 -0.6
2026-04-12T00:12:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:12:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:12:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.925111
2026-04-12T00:12:36.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:12:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:12:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:12:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:12:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:12:36.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:11:59', tmtdew=-0.01736, humidity=100.081, cloud=0.0, wind=25.5143, temperature=10.8122, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:12:09.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:12:36.899 [DEBUG] [Thread-179279] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:12:36.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:12:36.991 [DEBUG] [Thread-179282] [transport.py] [_log()] starting thread (client mode): 0xb39c64d0
2026-04-12T00:12:36.992 [DEBUG] [Thread-179282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:12:37.005 [DEBUG] [Thread-179282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:12:37.006 [INFO] [Thread-179282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] client lang: <none>
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] server lang: <none>
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] kex follows: False
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:12:37.016 [DEBUG] [Thread-179282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:12:37.017 [DEBUG] [Thread-179282] [transport.py] [_log()] Compression: none
2026-04-12T00:12:37.017 [DEBUG] [Thread-179282] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:12:37.077 [DEBUG] [Thread-179282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:12:37.078 [DEBUG] [Thread-179282] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:12:37.079 [DEBUG] [Thread-179282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:12:37.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:12:37.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:12:37.141 [DEBUG] [Thread-179282] [transport.py] [_log()] userauth is OK
2026-04-12T00:12:37.142 [DEBUG] [Thread-179282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:12:37.142 [DEBUG] [Thread-179282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:12:37.142 [DEBUG] [Thread-179282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:12:37.142 [DEBUG] [Thread-179282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:12:37.163 [INFO] [Thread-179282] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:12:37.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:12:37.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:12:37.800 [DEBUG] [Thread-179284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:37.965 [DEBUG] [Thread-179282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:12:37.965 [DEBUG] [Thread-179282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:12:38.014 [DEBUG] [Thread-179282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:12:38.014 [DEBUG] [Thread-179282] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:12:38.023 [DEBUG] [Thread-179282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:12:38.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:12:38.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-04-12T00:12:38.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-04-12T00:12:38.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:12:38.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:12:38.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:12:38.056 [DEBUG] [Thread-179282] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:12:45.153 [DEBUG] [Thread-179285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:12:52.851 [DEBUG] [Thread-179286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:02.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:02.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:07.885 [DEBUG] [Thread-179287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:08.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:13:08.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:13:08.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-04-12T00:13:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 12, 34), -0.03965, 100.194, 0.0, 27.522, 11.3902, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:13:09.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:12:34
2026-04-12T00:13:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:13:09.935 [DEBUG] [Thread-179288] [transport.py] [_log()] starting thread (client mode): 0xae5a58d0
2026-04-12T00:13:09.935 [DEBUG] [Thread-179288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:13:09.955 [DEBUG] [Thread-179288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:13:09.955 [INFO] [Thread-179288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] client lang: <none>
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] server lang: <none>
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] kex follows: False
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] Compression: none
2026-04-12T00:13:09.957 [DEBUG] [Thread-179288] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:13:09.976 [DEBUG] [Thread-179288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:13:09.977 [DEBUG] [Thread-179288] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:13:09.977 [DEBUG] [Thread-179288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:13:09.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:13:09.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:13:09.979 [DEBUG] [Thread-179288] [transport.py] [_log()] userauth is OK
2026-04-12T00:13:09.980 [DEBUG] [Thread-179288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:13:09.980 [DEBUG] [Thread-179288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:13:09.980 [DEBUG] [Thread-179288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:13:09.980 [DEBUG] [Thread-179288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:13:10.004 [INFO] [Thread-179288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:13:10.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:13:10.655 [DEBUG] [Thread-179288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:13:10.656 [DEBUG] [Thread-179288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:13:10.656 [DEBUG] [Thread-179288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:13:10.696 [DEBUG] [Thread-179288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:13:10.696 [DEBUG] [Thread-179288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:13:10.700 [DEBUG] [Thread-179288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:13:10.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:13:10.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:13:10.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:13:10.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:13:10.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:13:10.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:13:10.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:13:10.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:13:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:13:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.925459 -999.00  +10.80  23.67     97  +10.50 1 3 1 3 1     0    0 0.34 -0.54 ----- 22.1 23.7 297.0 28.5 12.2 -1.0 12.0 -0.5 11.6 -0.7 12.1 -0.7
2026-04-12T00:13:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:13:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:13:10.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.925459
2026-04-12T00:13:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:13:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:13:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:13:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:13:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:13:10.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:12:34', tmtdew=-0.03965, humidity=100.194, cloud=0.0, wind=27.522, temperature=11.3902, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:12:39.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:13:10.726 [DEBUG] [Thread-179288] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:13:10.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:13:10.819 [DEBUG] [Thread-179291] [transport.py] [_log()] starting thread (client mode): 0xa7955810
2026-04-12T00:13:10.819 [DEBUG] [Thread-179291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:13:10.833 [DEBUG] [Thread-179291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:13:10.833 [INFO] [Thread-179291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] client lang: <none>
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] server lang: <none>
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] kex follows: False
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] Compression: none
2026-04-12T00:13:10.841 [DEBUG] [Thread-179291] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:13:10.899 [DEBUG] [Thread-179291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:13:10.899 [DEBUG] [Thread-179291] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:13:10.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:13:10.900 [DEBUG] [Thread-179291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:13:10.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:13:10.955 [DEBUG] [Thread-179291] [transport.py] [_log()] userauth is OK
2026-04-12T00:13:10.955 [DEBUG] [Thread-179291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:13:10.956 [DEBUG] [Thread-179291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:13:10.956 [DEBUG] [Thread-179291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:13:10.956 [DEBUG] [Thread-179291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:13:10.974 [INFO] [Thread-179291] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:13:10.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:13:10.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:13:11.817 [DEBUG] [Thread-179291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:13:11.817 [DEBUG] [Thread-179291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:13:11.865 [DEBUG] [Thread-179291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:13:11.866 [DEBUG] [Thread-179291] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:13:11.875 [DEBUG] [Thread-179291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:13:11.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:13:11.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:13:11.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-04-12T00:13:11.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:13:11.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:13:11.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:13:11.909 [DEBUG] [Thread-179291] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:13:22.920 [DEBUG] [Thread-179293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:37.982 [DEBUG] [Thread-179294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:41.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:13:41.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:13:41.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-04-12T00:13:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 13, 10), 0.027645, 100.114, 0.0, 26.9784, 10.8622, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:13:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:13:10
2026-04-12T00:13:43.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:13:43.766 [DEBUG] [Thread-179295] [transport.py] [_log()] starting thread (client mode): 0xae5a5d80
2026-04-12T00:13:43.766 [DEBUG] [Thread-179295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:13:43.786 [DEBUG] [Thread-179295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:13:43.787 [INFO] [Thread-179295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:13:43.788 [DEBUG] [Thread-179295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] client lang: <none>
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] server lang: <none>
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] kex follows: False
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] Compression: none
2026-04-12T00:13:43.789 [DEBUG] [Thread-179295] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:13:43.800 [DEBUG] [Thread-179295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:13:43.801 [DEBUG] [Thread-179295] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:13:43.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:13:43.802 [DEBUG] [Thread-179295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:13:43.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:13:43.805 [DEBUG] [Thread-179295] [transport.py] [_log()] userauth is OK
2026-04-12T00:13:43.805 [DEBUG] [Thread-179295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:13:43.805 [DEBUG] [Thread-179295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:13:43.805 [DEBUG] [Thread-179295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:13:43.805 [DEBUG] [Thread-179295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:13:43.829 [INFO] [Thread-179295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:13:43.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:13:44.466 [DEBUG] [Thread-179295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:13:44.466 [DEBUG] [Thread-179295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:13:44.467 [DEBUG] [Thread-179295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:13:44.507 [DEBUG] [Thread-179295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:13:44.508 [DEBUG] [Thread-179295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:13:44.511 [DEBUG] [Thread-179295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:13:44.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:13:44.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:13:44.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:13:44.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:13:44.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:13:44.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:13:44.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:13:44.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:13:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:13:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.925806 -999.00  +10.80  24.15     97  +10.50 1 3 1 3 1     0    0 0.32 -0.84 ----- 23.7 24.1 291.8 30.6 12.1 -1.1 12.0 -0.6 11.7 -1.2 12.0 -0.6
2026-04-12T00:13:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:13:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:13:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.925806
2026-04-12T00:13:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:13:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:13:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:13:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:13:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:13:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:13:10', tmtdew=0.027645, humidity=100.114, cloud=0.0, wind=26.9784, temperature=10.8622, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:13:09.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:13:44.541 [DEBUG] [Thread-179295] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:13:44.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:13:44.630 [DEBUG] [Thread-179298] [transport.py] [_log()] starting thread (client mode): 0xae5a55a0
2026-04-12T00:13:44.630 [DEBUG] [Thread-179298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:13:44.649 [DEBUG] [Thread-179298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:13:44.649 [INFO] [Thread-179298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:13:44.657 [DEBUG] [Thread-179298] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:13:44.657 [DEBUG] [Thread-179298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:13:44.657 [DEBUG] [Thread-179298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:13:44.657 [DEBUG] [Thread-179298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:44.657 [DEBUG] [Thread-179298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] client lang: <none>
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] server lang: <none>
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] kex follows: False
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] Compression: none
2026-04-12T00:13:44.658 [DEBUG] [Thread-179298] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:13:44.715 [DEBUG] [Thread-179298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:13:44.715 [DEBUG] [Thread-179298] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:13:44.716 [DEBUG] [Thread-179298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:13:44.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:13:44.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:13:44.771 [DEBUG] [Thread-179298] [transport.py] [_log()] userauth is OK
2026-04-12T00:13:44.772 [DEBUG] [Thread-179298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:13:44.772 [DEBUG] [Thread-179298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:13:44.772 [DEBUG] [Thread-179298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:13:44.772 [DEBUG] [Thread-179298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:13:44.792 [INFO] [Thread-179298] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:13:44.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:13:44.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:13:45.211 [DEBUG] [Thread-179300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:13:45.603 [DEBUG] [Thread-179298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:13:45.603 [DEBUG] [Thread-179298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:13:45.651 [DEBUG] [Thread-179298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:13:45.651 [DEBUG] [Thread-179298] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:13:45.661 [DEBUG] [Thread-179298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:13:45.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:13:45.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-04-12T00:13:45.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-04-12T00:13:45.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:13:45.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:13:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:13:45.697 [DEBUG] [Thread-179298] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:13:53.020 [DEBUG] [Thread-179301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:02.576 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:02.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:08.072 [DEBUG] [Thread-179302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:14:15.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:14:15.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-04-12T00:14:17.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 13, 45), -0.04471, 100.229, 0.0, 25.511, 11.3245, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:14:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:13:45
2026-04-12T00:14:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:14:17.581 [DEBUG] [Thread-179303] [transport.py] [_log()] starting thread (client mode): 0xae5f0fa0
2026-04-12T00:14:17.581 [DEBUG] [Thread-179303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:14:17.602 [DEBUG] [Thread-179303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:14:17.602 [INFO] [Thread-179303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] client lang: <none>
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] server lang: <none>
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] kex follows: False
2026-04-12T00:14:17.606 [DEBUG] [Thread-179303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:14:17.607 [DEBUG] [Thread-179303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:14:17.607 [DEBUG] [Thread-179303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:14:17.607 [DEBUG] [Thread-179303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:14:17.607 [DEBUG] [Thread-179303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:14:17.607 [DEBUG] [Thread-179303] [transport.py] [_log()] Compression: none
2026-04-12T00:14:17.607 [DEBUG] [Thread-179303] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:14:17.618 [DEBUG] [Thread-179303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:14:17.618 [DEBUG] [Thread-179303] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:14:17.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:14:17.619 [DEBUG] [Thread-179303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:14:17.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:14:17.621 [DEBUG] [Thread-179303] [transport.py] [_log()] userauth is OK
2026-04-12T00:14:17.621 [DEBUG] [Thread-179303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:14:17.621 [DEBUG] [Thread-179303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:14:17.622 [DEBUG] [Thread-179303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:14:17.622 [DEBUG] [Thread-179303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:14:17.645 [INFO] [Thread-179303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:14:17.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:14:18.268 [DEBUG] [Thread-179303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:14:18.269 [DEBUG] [Thread-179303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:14:18.269 [DEBUG] [Thread-179303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:14:18.310 [DEBUG] [Thread-179303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:14:18.310 [DEBUG] [Thread-179303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:14:18.314 [DEBUG] [Thread-179303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:14:18.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:14:18.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:14:18.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:14:18.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:14:18.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:14:18.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:14:18.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:14:18.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:14:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:14:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.926153 -999.00  +10.80  22.48     97  +10.40 1 3 1 3 1     0    0 0.33 -0.76 ----- 25.9 22.5 280.1 32.4 12.1 -1.4 12.0 -0.5 11.6 -0.8 12.0 -0.7
2026-04-12T00:14:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:14:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:14:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.926153
2026-04-12T00:14:18.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:14:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:14:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:14:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:14:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:14:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:13:45', tmtdew=-0.04471, humidity=100.229, cloud=0.0, wind=25.511, temperature=11.3245, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:13:39.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:14:18.338 [DEBUG] [Thread-179303] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:14:18.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:14:18.432 [DEBUG] [Thread-179306] [transport.py] [_log()] starting thread (client mode): 0xae5f0dc0
2026-04-12T00:14:18.432 [DEBUG] [Thread-179306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:14:18.447 [DEBUG] [Thread-179306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:14:18.448 [INFO] [Thread-179306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:14:18.455 [DEBUG] [Thread-179306] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:14:18.455 [DEBUG] [Thread-179306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] client lang: <none>
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] server lang: <none>
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] kex follows: False
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] Compression: none
2026-04-12T00:14:18.456 [DEBUG] [Thread-179306] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:14:18.515 [DEBUG] [Thread-179306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:14:18.515 [DEBUG] [Thread-179306] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:14:18.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:14:18.516 [DEBUG] [Thread-179306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:14:18.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:14:18.571 [DEBUG] [Thread-179306] [transport.py] [_log()] userauth is OK
2026-04-12T00:14:18.571 [DEBUG] [Thread-179306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:14:18.571 [DEBUG] [Thread-179306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:14:18.571 [DEBUG] [Thread-179306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:14:18.571 [DEBUG] [Thread-179306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:14:18.595 [INFO] [Thread-179306] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:14:18.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:14:18.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:14:19.468 [DEBUG] [Thread-179306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:14:19.468 [DEBUG] [Thread-179306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:14:19.517 [DEBUG] [Thread-179306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:14:19.517 [DEBUG] [Thread-179306] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:14:19.526 [DEBUG] [Thread-179306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:14:19.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:14:19.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:14:19.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-04-12T00:14:19.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:14:19.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:14:19.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:14:19.563 [DEBUG] [Thread-179306] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:14:23.111 [DEBUG] [Thread-179308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:38.161 [DEBUG] [Thread-179309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:45.265 [DEBUG] [Thread-179310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:49.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:14:49.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:14:49.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-04-12T00:14:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 14, 21), 0.03016, 100.098, 0.0, 26.167, 10.8456, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:14:50.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:14:21
2026-04-12T00:14:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:14:51.452 [DEBUG] [Thread-179311] [transport.py] [_log()] starting thread (client mode): 0xa7954b20
2026-04-12T00:14:51.452 [DEBUG] [Thread-179311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:14:51.471 [DEBUG] [Thread-179311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:14:51.472 [INFO] [Thread-179311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] client lang: <none>
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] server lang: <none>
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] kex follows: False
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] Compression: none
2026-04-12T00:14:51.475 [DEBUG] [Thread-179311] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:14:51.494 [DEBUG] [Thread-179311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:14:51.494 [DEBUG] [Thread-179311] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:14:51.495 [DEBUG] [Thread-179311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:14:51.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:14:51.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:14:51.497 [DEBUG] [Thread-179311] [transport.py] [_log()] userauth is OK
2026-04-12T00:14:51.497 [DEBUG] [Thread-179311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:14:51.497 [DEBUG] [Thread-179311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:14:51.497 [DEBUG] [Thread-179311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:14:51.497 [DEBUG] [Thread-179311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:14:51.521 [INFO] [Thread-179311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:14:51.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:14:52.116 [DEBUG] [Thread-179311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:14:52.116 [DEBUG] [Thread-179311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:14:52.117 [DEBUG] [Thread-179311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:14:52.158 [DEBUG] [Thread-179311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:14:52.158 [DEBUG] [Thread-179311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:14:52.160 [DEBUG] [Thread-179311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:14:52.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:14:52.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:14:52.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:14:52.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:14:52.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:14:52.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:14:52.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:14:52.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.926847 -999.00  +10.80  19.83     97  +10.40 1 3 1 3 1     0    0 0.34 -0.36 ----- 21.0 19.8 290.6 28.6 12.1 -1.0 11.9 -0.4 11.6 -0.5 12.0 -0.6
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.926847
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:14:52.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:14:21', tmtdew=0.03016, humidity=100.098, cloud=0.0, wind=26.167, temperature=10.8456, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:14:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:14:52.179 [DEBUG] [Thread-179311] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:14:52.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:14:52.262 [DEBUG] [Thread-179314] [transport.py] [_log()] starting thread (client mode): 0xb0f6ffd0
2026-04-12T00:14:52.262 [DEBUG] [Thread-179314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:14:52.276 [DEBUG] [Thread-179314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:14:52.276 [INFO] [Thread-179314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] client lang: <none>
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] server lang: <none>
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] kex follows: False
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:14:52.284 [DEBUG] [Thread-179314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:14:52.285 [DEBUG] [Thread-179314] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:14:52.285 [DEBUG] [Thread-179314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:14:52.285 [DEBUG] [Thread-179314] [transport.py] [_log()] Compression: none
2026-04-12T00:14:52.285 [DEBUG] [Thread-179314] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:14:52.343 [DEBUG] [Thread-179314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:14:52.343 [DEBUG] [Thread-179314] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:14:52.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:14:52.344 [DEBUG] [Thread-179314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:14:52.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:14:52.400 [DEBUG] [Thread-179314] [transport.py] [_log()] userauth is OK
2026-04-12T00:14:52.400 [DEBUG] [Thread-179314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:14:52.400 [DEBUG] [Thread-179314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:14:52.400 [DEBUG] [Thread-179314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:14:52.401 [DEBUG] [Thread-179314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:14:52.420 [INFO] [Thread-179314] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:14:52.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:14:52.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:14:53.199 [DEBUG] [Thread-179316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:14:53.262 [DEBUG] [Thread-179314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:14:53.263 [DEBUG] [Thread-179314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:14:53.311 [DEBUG] [Thread-179314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:14:53.311 [DEBUG] [Thread-179314] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:14:53.320 [DEBUG] [Thread-179314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:14:53.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:14:53.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-04-12T00:14:53.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:14:53.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:14:53.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:14:53.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:14:53.357 [DEBUG] [Thread-179314] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:15:02.784 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:02.785 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:08.258 [DEBUG] [Thread-179317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:23.295 [DEBUG] [Thread-179318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:23.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:15:23.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:15:23.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:15:24.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 14, 57), -0.019895, 100.098, 0.0, 23.8378, 10.7959, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:15:24.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:14:57
2026-04-12T00:15:25.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:15:25.440 [DEBUG] [Thread-179319] [transport.py] [_log()] starting thread (client mode): 0xae5f1240
2026-04-12T00:15:25.440 [DEBUG] [Thread-179319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:15:25.461 [DEBUG] [Thread-179319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:15:25.461 [INFO] [Thread-179319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] client lang: <none>
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] server lang: <none>
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] kex follows: False
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] Compression: none
2026-04-12T00:15:25.464 [DEBUG] [Thread-179319] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:15:25.479 [DEBUG] [Thread-179319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:15:25.479 [DEBUG] [Thread-179319] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:15:25.480 [DEBUG] [Thread-179319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:15:25.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:15:25.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:15:25.482 [DEBUG] [Thread-179319] [transport.py] [_log()] userauth is OK
2026-04-12T00:15:25.482 [DEBUG] [Thread-179319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:15:25.482 [DEBUG] [Thread-179319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:15:25.482 [DEBUG] [Thread-179319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:15:25.482 [DEBUG] [Thread-179319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:15:25.505 [INFO] [Thread-179319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:15:25.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:15:26.133 [DEBUG] [Thread-179319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:15:26.133 [DEBUG] [Thread-179319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:15:26.133 [DEBUG] [Thread-179319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:15:26.174 [DEBUG] [Thread-179319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:15:26.174 [DEBUG] [Thread-179319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:15:26.177 [DEBUG] [Thread-179319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:15:26.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:15:26.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:15:26.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:15:26.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:15:26.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:15:26.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:15:26.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:15:26.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:15:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:15:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.927195 -999.00  +10.80  23.66     97  +10.40 1 3 1 3 1     0    0 0.34 -0.32 ----- 25.7 23.7 282.2 27.2 12.0 -1.2 11.9 -0.6 11.5 -1.6 12.0 -0.9
2026-04-12T00:15:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:15:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:15:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.927195
2026-04-12T00:15:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:15:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:15:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:15:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:15:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:15:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:14:57', tmtdew=-0.019895, humidity=100.098, cloud=0.0, wind=23.8378, temperature=10.7959, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:15:09.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:15:26.201 [DEBUG] [Thread-179319] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:15:26.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:15:26.298 [DEBUG] [Thread-179322] [transport.py] [_log()] starting thread (client mode): 0xae5a6950
2026-04-12T00:15:26.298 [DEBUG] [Thread-179322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:15:26.312 [DEBUG] [Thread-179322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:15:26.312 [INFO] [Thread-179322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:15:26.321 [DEBUG] [Thread-179322] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] client lang: <none>
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] server lang: <none>
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] kex follows: False
2026-04-12T00:15:26.322 [DEBUG] [Thread-179322] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:15:26.323 [DEBUG] [Thread-179322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:15:26.323 [DEBUG] [Thread-179322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:15:26.323 [DEBUG] [Thread-179322] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:15:26.323 [DEBUG] [Thread-179322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:15:26.323 [DEBUG] [Thread-179322] [transport.py] [_log()] Compression: none
2026-04-12T00:15:26.323 [DEBUG] [Thread-179322] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:15:26.378 [DEBUG] [Thread-179322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:15:26.379 [DEBUG] [Thread-179322] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:15:26.379 [DEBUG] [Thread-179322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:15:26.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:15:26.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:15:26.435 [DEBUG] [Thread-179322] [transport.py] [_log()] userauth is OK
2026-04-12T00:15:26.435 [DEBUG] [Thread-179322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:15:26.435 [DEBUG] [Thread-179322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:15:26.435 [DEBUG] [Thread-179322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:15:26.435 [DEBUG] [Thread-179322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:15:26.454 [INFO] [Thread-179322] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:15:26.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:15:26.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:15:27.327 [DEBUG] [Thread-179322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:15:27.327 [DEBUG] [Thread-179322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:15:27.375 [DEBUG] [Thread-179322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:15:27.375 [DEBUG] [Thread-179322] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:15:27.385 [DEBUG] [Thread-179322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:15:27.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:15:27.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:15:27.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-04-12T00:15:27.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:15:27.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:15:27.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:15:27.423 [DEBUG] [Thread-179322] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:15:38.331 [DEBUG] [Thread-179324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:45.338 [DEBUG] [Thread-179325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:53.393 [DEBUG] [Thread-179326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:15:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:15:57.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:15:57.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-04-12T00:15:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 15, 32), -0.01735, 100.081, 0.0, 23.6437, 10.7792, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:15:58.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:15:32
2026-04-12T00:15:59.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:15:59.269 [DEBUG] [Thread-179327] [transport.py] [_log()] starting thread (client mode): 0xae5f1f60
2026-04-12T00:15:59.269 [DEBUG] [Thread-179327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:15:59.289 [DEBUG] [Thread-179327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:15:59.289 [INFO] [Thread-179327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] client lang: <none>
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] server lang: <none>
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] kex follows: False
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:15:59.292 [DEBUG] [Thread-179327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:15:59.293 [DEBUG] [Thread-179327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:15:59.293 [DEBUG] [Thread-179327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:15:59.293 [DEBUG] [Thread-179327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:15:59.293 [DEBUG] [Thread-179327] [transport.py] [_log()] Compression: none
2026-04-12T00:15:59.293 [DEBUG] [Thread-179327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:15:59.311 [DEBUG] [Thread-179327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:15:59.311 [DEBUG] [Thread-179327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:15:59.312 [DEBUG] [Thread-179327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:15:59.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:15:59.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:15:59.314 [DEBUG] [Thread-179327] [transport.py] [_log()] userauth is OK
2026-04-12T00:15:59.314 [DEBUG] [Thread-179327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:15:59.314 [DEBUG] [Thread-179327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:15:59.314 [DEBUG] [Thread-179327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:15:59.314 [DEBUG] [Thread-179327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:15:59.339 [INFO] [Thread-179327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:15:59.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:15:59.986 [DEBUG] [Thread-179327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:15:59.986 [DEBUG] [Thread-179327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:15:59.987 [DEBUG] [Thread-179327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:16:00.027 [DEBUG] [Thread-179327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:16:00.027 [DEBUG] [Thread-179327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:16:00.029 [DEBUG] [Thread-179327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:16:00.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:16:00.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:16:00.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:16:00.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:16:00.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:16:00.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:16:00.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:16:00.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:16:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:16:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.927542 -999.00  +10.80  18.78     97  +10.40 1 3 1 3 1     0    0 0.34 -0.12 ----- 23.0 18.8 286.0 28.8 12.1 -1.0 11.9 -0.4 11.6 -1.3 11.9 -0.6
2026-04-12T00:16:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:16:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:16:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.927542
2026-04-12T00:16:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:16:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:16:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:16:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:16:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:16:00.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:15:32', tmtdew=-0.01735, humidity=100.081, cloud=0.0, wind=23.6437, temperature=10.7792, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:15:39.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:16:00.058 [DEBUG] [Thread-179327] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:16:00.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:16:00.157 [DEBUG] [Thread-179330] [transport.py] [_log()] starting thread (client mode): 0xae5f3e80
2026-04-12T00:16:00.157 [DEBUG] [Thread-179330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:16:00.171 [DEBUG] [Thread-179330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:16:00.171 [INFO] [Thread-179330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:16:00.178 [DEBUG] [Thread-179330] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] client lang: <none>
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] server lang: <none>
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] kex follows: False
2026-04-12T00:16:00.179 [DEBUG] [Thread-179330] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:16:00.180 [DEBUG] [Thread-179330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:16:00.180 [DEBUG] [Thread-179330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:16:00.180 [DEBUG] [Thread-179330] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:16:00.180 [DEBUG] [Thread-179330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:16:00.180 [DEBUG] [Thread-179330] [transport.py] [_log()] Compression: none
2026-04-12T00:16:00.180 [DEBUG] [Thread-179330] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:16:00.235 [DEBUG] [Thread-179330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:16:00.235 [DEBUG] [Thread-179330] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:16:00.236 [DEBUG] [Thread-179330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:16:00.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:16:00.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:16:00.295 [DEBUG] [Thread-179330] [transport.py] [_log()] userauth is OK
2026-04-12T00:16:00.295 [DEBUG] [Thread-179330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:16:00.295 [DEBUG] [Thread-179330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:16:00.295 [DEBUG] [Thread-179330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:16:00.295 [DEBUG] [Thread-179330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:16:00.310 [INFO] [Thread-179330] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:16:00.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:16:00.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:16:01.152 [DEBUG] [Thread-179330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:16:01.152 [DEBUG] [Thread-179330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:16:01.200 [DEBUG] [Thread-179330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:16:01.200 [DEBUG] [Thread-179330] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:16:01.209 [DEBUG] [Thread-179330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:16:01.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:16:01.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-04-12T00:16:01.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:16:01.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:16:01.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:16:01.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:16:01.245 [DEBUG] [Thread-179330] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:16:02.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:16:02.990 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:16:08.429 [DEBUG] [Thread-179332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:16:23.483 [DEBUG] [Thread-179333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:16:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:16:31.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:16:31.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:16:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 16, 7), -0.01741, 100.081, 0.0, 23.7672, 10.829, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:16:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:16:07
2026-04-12T00:16:32.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:16:33.107 [DEBUG] [Thread-179334] [transport.py] [_log()] starting thread (client mode): 0xae5f06d0
2026-04-12T00:16:33.107 [DEBUG] [Thread-179334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:16:33.127 [DEBUG] [Thread-179334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:16:33.127 [INFO] [Thread-179334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] client lang: <none>
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] server lang: <none>
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] kex follows: False
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] Compression: none
2026-04-12T00:16:33.129 [DEBUG] [Thread-179334] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:16:33.143 [DEBUG] [Thread-179334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:16:33.143 [DEBUG] [Thread-179334] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:16:33.144 [DEBUG] [Thread-179334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:16:33.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:16:33.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:16:33.146 [DEBUG] [Thread-179334] [transport.py] [_log()] userauth is OK
2026-04-12T00:16:33.146 [DEBUG] [Thread-179334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:16:33.146 [DEBUG] [Thread-179334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:16:33.146 [DEBUG] [Thread-179334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:16:33.147 [DEBUG] [Thread-179334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:16:33.171 [INFO] [Thread-179334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:16:33.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:16:33.818 [DEBUG] [Thread-179334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:16:33.818 [DEBUG] [Thread-179334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:16:33.818 [DEBUG] [Thread-179334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:16:33.859 [DEBUG] [Thread-179334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:16:33.859 [DEBUG] [Thread-179334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:16:33.861 [DEBUG] [Thread-179334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:16:33.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:16:33.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:16:33.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:16:33.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:16:33.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:16:33.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:16:33.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:16:33.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:16:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:16:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.927889 -999.00  +10.70  25.60     97  +10.40 1 3 1 3 1     0    0 0.35 -0.02 ----- 26.6 25.6 285.8 33.3 12.0 -1.0 11.8 -0.7 11.5 -1.5 11.9 -0.8
2026-04-12T00:16:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.927889
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:16:33.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:16:07', tmtdew=-0.01741, humidity=100.081, cloud=0.0, wind=23.7672, temperature=10.829, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:16:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:16:33.880 [DEBUG] [Thread-179334] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:16:33.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:16:33.963 [DEBUG] [Thread-179337] [transport.py] [_log()] starting thread (client mode): 0xae5a5b40
2026-04-12T00:16:33.963 [DEBUG] [Thread-179337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:16:33.978 [DEBUG] [Thread-179337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:16:33.978 [INFO] [Thread-179337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] client lang: <none>
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] server lang: <none>
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] kex follows: False
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:16:33.986 [DEBUG] [Thread-179337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:16:33.987 [DEBUG] [Thread-179337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:16:33.987 [DEBUG] [Thread-179337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:16:33.987 [DEBUG] [Thread-179337] [transport.py] [_log()] Compression: none
2026-04-12T00:16:33.987 [DEBUG] [Thread-179337] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:16:34.044 [DEBUG] [Thread-179337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:16:34.045 [DEBUG] [Thread-179337] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:16:34.045 [DEBUG] [Thread-179337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:16:34.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:16:34.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:16:34.100 [DEBUG] [Thread-179337] [transport.py] [_log()] userauth is OK
2026-04-12T00:16:34.100 [DEBUG] [Thread-179337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:16:34.101 [DEBUG] [Thread-179337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:16:34.101 [DEBUG] [Thread-179337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:16:34.101 [DEBUG] [Thread-179337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:16:34.120 [INFO] [Thread-179337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:16:34.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:16:34.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:16:34.930 [DEBUG] [Thread-179337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:16:34.931 [DEBUG] [Thread-179337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:16:34.979 [DEBUG] [Thread-179337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:16:34.979 [DEBUG] [Thread-179337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:16:34.988 [DEBUG] [Thread-179337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:16:34.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:16:34.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-04-12T00:16:35.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-04-12T00:16:35.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:16:35.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:16:35.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:16:35.025 [DEBUG] [Thread-179337] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:16:38.522 [DEBUG] [Thread-179339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:16:45.393 [DEBUG] [Thread-179340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:16:53.583 [DEBUG] [Thread-179341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:03.193 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:03.194 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:17:05.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:17:05.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-04-12T00:17:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 16, 43), -0.03982, 100.196, 0.0, 26.8517, 11.3579, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:17:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:16:43
2026-04-12T00:17:06.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:17:06.844 [DEBUG] [Thread-179342] [transport.py] [_log()] starting thread (client mode): 0xb39c7b50
2026-04-12T00:17:06.844 [DEBUG] [Thread-179342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:17:06.865 [DEBUG] [Thread-179342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:17:06.865 [INFO] [Thread-179342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:17:06.869 [DEBUG] [Thread-179342] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] client lang: <none>
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] server lang: <none>
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] kex follows: False
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:17:06.870 [DEBUG] [Thread-179342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:17:06.871 [DEBUG] [Thread-179342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:17:06.871 [DEBUG] [Thread-179342] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:17:06.871 [DEBUG] [Thread-179342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:17:06.871 [DEBUG] [Thread-179342] [transport.py] [_log()] Compression: none
2026-04-12T00:17:06.871 [DEBUG] [Thread-179342] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:17:06.885 [DEBUG] [Thread-179342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:17:06.886 [DEBUG] [Thread-179342] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:17:06.886 [DEBUG] [Thread-179342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:17:06.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:17:06.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:17:06.888 [DEBUG] [Thread-179342] [transport.py] [_log()] userauth is OK
2026-04-12T00:17:06.889 [DEBUG] [Thread-179342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:17:06.889 [DEBUG] [Thread-179342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:17:06.889 [DEBUG] [Thread-179342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:17:06.889 [DEBUG] [Thread-179342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:17:06.912 [INFO] [Thread-179342] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:17:06.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:17:07.541 [DEBUG] [Thread-179342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:17:07.541 [DEBUG] [Thread-179342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:17:07.541 [DEBUG] [Thread-179342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:17:07.582 [DEBUG] [Thread-179342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:17:07.582 [DEBUG] [Thread-179342] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:17:07.585 [DEBUG] [Thread-179342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:17:07.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:17:07.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:17:07.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:17:07.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:17:07.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:17:07.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:17:07.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:17:07.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:17:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:17:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.928236 -999.00  +10.70  21.83     97  +10.40 1 3 1 3 1     0    0 0.34 -0.19 ----- 25.3 21.8 281.0 36.3 12.0 -1.3 11.8 -0.6 11.5 -0.8 11.9 -0.7
2026-04-12T00:17:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:17:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:17:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.928236
2026-04-12T00:17:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:17:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:17:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:17:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:17:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:17:07.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:16:43', tmtdew=-0.03982, humidity=100.196, cloud=0.0, wind=26.8517, temperature=11.3579, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:16:39.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:17:07.612 [DEBUG] [Thread-179342] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:17:07.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:17:07.707 [DEBUG] [Thread-179345] [transport.py] [_log()] starting thread (client mode): 0xb39c7cd0
2026-04-12T00:17:07.707 [DEBUG] [Thread-179345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:17:07.721 [DEBUG] [Thread-179345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:17:07.721 [INFO] [Thread-179345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:17:07.729 [DEBUG] [Thread-179345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:17:07.729 [DEBUG] [Thread-179345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:17:07.729 [DEBUG] [Thread-179345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:17:07.729 [DEBUG] [Thread-179345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:07.729 [DEBUG] [Thread-179345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:07.729 [DEBUG] [Thread-179345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] client lang: <none>
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] server lang: <none>
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] kex follows: False
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:17:07.730 [DEBUG] [Thread-179345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:17:07.731 [DEBUG] [Thread-179345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:17:07.731 [DEBUG] [Thread-179345] [transport.py] [_log()] Compression: none
2026-04-12T00:17:07.731 [DEBUG] [Thread-179345] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:17:07.787 [DEBUG] [Thread-179345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:17:07.788 [DEBUG] [Thread-179345] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:17:07.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:17:07.788 [DEBUG] [Thread-179345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:17:07.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:17:07.844 [DEBUG] [Thread-179345] [transport.py] [_log()] userauth is OK
2026-04-12T00:17:07.844 [DEBUG] [Thread-179345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:17:07.844 [DEBUG] [Thread-179345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:17:07.844 [DEBUG] [Thread-179345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:17:07.844 [DEBUG] [Thread-179345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:17:07.865 [INFO] [Thread-179345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:17:07.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:17:07.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:17:08.619 [DEBUG] [Thread-179347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:08.708 [DEBUG] [Thread-179345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:17:08.709 [DEBUG] [Thread-179345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:17:08.757 [DEBUG] [Thread-179345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:17:08.757 [DEBUG] [Thread-179345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:17:08.767 [DEBUG] [Thread-179345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:17:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:17:08.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-04-12T00:17:08.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-04-12T00:17:08.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:17:08.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:17:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:17:08.808 [DEBUG] [Thread-179345] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:17:23.673 [DEBUG] [Thread-179348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:38.705 [DEBUG] [Thread-179349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:17:38.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:17:38.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:17:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 17, 19), 0.030125, 100.098, 0.0, 26.4323, 10.8123, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:17:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:17:19
2026-04-12T00:17:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:17:40.795 [DEBUG] [Thread-179350] [transport.py] [_log()] starting thread (client mode): 0xb39c7c40
2026-04-12T00:17:40.795 [DEBUG] [Thread-179350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:17:40.810 [DEBUG] [Thread-179350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:17:40.810 [INFO] [Thread-179350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] client lang: <none>
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] server lang: <none>
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] kex follows: False
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] Compression: none
2026-04-12T00:17:40.813 [DEBUG] [Thread-179350] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:17:40.831 [DEBUG] [Thread-179350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:17:40.831 [DEBUG] [Thread-179350] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:17:40.832 [DEBUG] [Thread-179350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:17:40.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:17:40.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:17:40.834 [DEBUG] [Thread-179350] [transport.py] [_log()] userauth is OK
2026-04-12T00:17:40.834 [DEBUG] [Thread-179350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:17:40.834 [DEBUG] [Thread-179350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:17:40.834 [DEBUG] [Thread-179350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:17:40.834 [DEBUG] [Thread-179350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:17:40.852 [INFO] [Thread-179350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:17:40.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:17:41.442 [DEBUG] [Thread-179350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:17:41.442 [DEBUG] [Thread-179350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:17:41.443 [DEBUG] [Thread-179350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:17:41.483 [DEBUG] [Thread-179350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:17:41.483 [DEBUG] [Thread-179350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:17:41.487 [DEBUG] [Thread-179350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:17:41.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:17:41.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:17:41.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:17:41.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:17:41.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:17:41.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:17:41.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:17:41.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:17:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:17:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.928584 -999.00  +10.70  21.42     97  +10.40 1 3 1 3 1     0    0 0.32 -0.52 ----- 19.6 21.4 294.4 31.6 12.0 -0.8 11.8 -0.3 11.5 -0.4 11.8 -0.5
2026-04-12T00:17:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:17:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:17:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.928584
2026-04-12T00:17:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:17:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:17:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:17:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:17:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:17:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:17:19', tmtdew=0.030125, humidity=100.098, cloud=0.0, wind=26.4323, temperature=10.8123, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:17:09.658', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:17:41.509 [DEBUG] [Thread-179350] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:17:41.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:17:41.601 [DEBUG] [Thread-179353] [transport.py] [_log()] starting thread (client mode): 0xae5f32e0
2026-04-12T00:17:41.601 [DEBUG] [Thread-179353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:17:41.615 [DEBUG] [Thread-179353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:17:41.615 [INFO] [Thread-179353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:17:41.623 [DEBUG] [Thread-179353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:17:41.623 [DEBUG] [Thread-179353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:17:41.623 [DEBUG] [Thread-179353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] client lang: <none>
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] server lang: <none>
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] kex follows: False
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:17:41.624 [DEBUG] [Thread-179353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:17:41.625 [DEBUG] [Thread-179353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:17:41.625 [DEBUG] [Thread-179353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:17:41.625 [DEBUG] [Thread-179353] [transport.py] [_log()] Compression: none
2026-04-12T00:17:41.625 [DEBUG] [Thread-179353] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:17:41.680 [DEBUG] [Thread-179353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:17:41.681 [DEBUG] [Thread-179353] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:17:41.681 [DEBUG] [Thread-179353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:17:41.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:17:41.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:17:41.736 [DEBUG] [Thread-179353] [transport.py] [_log()] userauth is OK
2026-04-12T00:17:41.737 [DEBUG] [Thread-179353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:17:41.737 [DEBUG] [Thread-179353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:17:41.737 [DEBUG] [Thread-179353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:17:41.737 [DEBUG] [Thread-179353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:17:41.755 [INFO] [Thread-179353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:17:41.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:17:41.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:17:42.552 [DEBUG] [Thread-179353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:17:42.553 [DEBUG] [Thread-179353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:17:42.601 [DEBUG] [Thread-179353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:17:42.602 [DEBUG] [Thread-179353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:17:42.611 [DEBUG] [Thread-179353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:17:42.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:17:42.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-04-12T00:17:42.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-04-12T00:17:42.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:17:42.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:17:42.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:17:42.648 [DEBUG] [Thread-179353] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:17:45.479 [DEBUG] [Thread-179355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:17:53.747 [DEBUG] [Thread-179356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:03.399 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:03.400 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:08.800 [DEBUG] [Thread-179357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:12.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:18:12.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:18:12.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-04-12T00:18:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 17, 54), -0.03486, 100.163, 0.0, 25.4405, 11.325, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:18:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:17:54
2026-04-12T00:18:14.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:18:14.485 [DEBUG] [Thread-179358] [transport.py] [_log()] starting thread (client mode): 0xae5a6f50
2026-04-12T00:18:14.486 [DEBUG] [Thread-179358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:18:14.506 [DEBUG] [Thread-179358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:18:14.506 [INFO] [Thread-179358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] client lang: <none>
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] server lang: <none>
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] kex follows: False
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] Compression: none
2026-04-12T00:18:14.509 [DEBUG] [Thread-179358] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:18:14.528 [DEBUG] [Thread-179358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:18:14.529 [DEBUG] [Thread-179358] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:18:14.529 [DEBUG] [Thread-179358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:18:14.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:18:14.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:18:14.531 [DEBUG] [Thread-179358] [transport.py] [_log()] userauth is OK
2026-04-12T00:18:14.531 [DEBUG] [Thread-179358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:18:14.531 [DEBUG] [Thread-179358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:18:14.531 [DEBUG] [Thread-179358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:18:14.532 [DEBUG] [Thread-179358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:18:14.555 [INFO] [Thread-179358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:18:14.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:18:15.212 [DEBUG] [Thread-179358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:18:15.213 [DEBUG] [Thread-179358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:18:15.213 [DEBUG] [Thread-179358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:18:15.254 [DEBUG] [Thread-179358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:18:15.254 [DEBUG] [Thread-179358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:18:15.258 [DEBUG] [Thread-179358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:18:15.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:18:15.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:18:15.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:18:15.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:18:15.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:18:15.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:18:15.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:18:15.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:18:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:18:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.928931 -999.00  +10.70  22.28     97  +10.40 1 3 1 3 1     0    0 0.33 -0.34 ----- 22.4 22.3 284.2 29.2 11.9 -1.1 11.8 -0.4 11.5 -1.2 11.8 -0.6
2026-04-12T00:18:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:18:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:18:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.928931
2026-04-12T00:18:15.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:18:15.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:18:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:18:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:18:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:18:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:17:54', tmtdew=-0.03486, humidity=100.163, cloud=0.0, wind=25.4405, temperature=11.325, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:17:39.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:18:15.287 [DEBUG] [Thread-179358] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:18:15.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:18:15.380 [DEBUG] [Thread-179361] [transport.py] [_log()] starting thread (client mode): 0xae5a5960
2026-04-12T00:18:15.381 [DEBUG] [Thread-179361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:18:15.394 [DEBUG] [Thread-179361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:18:15.395 [INFO] [Thread-179361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:18:15.402 [DEBUG] [Thread-179361] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:18:15.402 [DEBUG] [Thread-179361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] client lang: <none>
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] server lang: <none>
2026-04-12T00:18:15.403 [DEBUG] [Thread-179361] [transport.py] [_log()] kex follows: False
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] Compression: none
2026-04-12T00:18:15.404 [DEBUG] [Thread-179361] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:18:15.461 [DEBUG] [Thread-179361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:18:15.461 [DEBUG] [Thread-179361] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:18:15.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:18:15.463 [DEBUG] [Thread-179361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:18:15.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:18:15.517 [DEBUG] [Thread-179361] [transport.py] [_log()] userauth is OK
2026-04-12T00:18:15.517 [DEBUG] [Thread-179361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:18:15.517 [DEBUG] [Thread-179361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:18:15.517 [DEBUG] [Thread-179361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:18:15.518 [DEBUG] [Thread-179361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:18:15.538 [INFO] [Thread-179361] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:18:15.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:18:15.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:18:16.368 [DEBUG] [Thread-179361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:18:16.368 [DEBUG] [Thread-179361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:18:16.416 [DEBUG] [Thread-179361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:18:16.416 [DEBUG] [Thread-179361] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:18:16.426 [DEBUG] [Thread-179361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:18:16.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:18:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:18:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:18:16.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:18:16.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:18:16.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:18:16.462 [DEBUG] [Thread-179361] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:18:23.838 [DEBUG] [Thread-179363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:38.890 [DEBUG] [Thread-179364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:45.536 [DEBUG] [Thread-179365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:18:46.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:18:46.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:18:46.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:18:47.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 18, 30), -0.01232, 100.048, 0.0, 25.673, 10.713, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:18:47.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:18:30
2026-04-12T00:18:48.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:18:48.286 [DEBUG] [Thread-179366] [transport.py] [_log()] starting thread (client mode): 0xb39c7c10
2026-04-12T00:18:48.286 [DEBUG] [Thread-179366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:18:48.302 [DEBUG] [Thread-179366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:18:48.302 [INFO] [Thread-179366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] client lang: <none>
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] server lang: <none>
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] kex follows: False
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] Compression: none
2026-04-12T00:18:48.305 [DEBUG] [Thread-179366] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:18:48.319 [DEBUG] [Thread-179366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:18:48.319 [DEBUG] [Thread-179366] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:18:48.320 [DEBUG] [Thread-179366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:18:48.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:18:48.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:18:48.321 [DEBUG] [Thread-179366] [transport.py] [_log()] userauth is OK
2026-04-12T00:18:48.322 [DEBUG] [Thread-179366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:18:48.322 [DEBUG] [Thread-179366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:18:48.322 [DEBUG] [Thread-179366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:18:48.322 [DEBUG] [Thread-179366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:18:48.346 [INFO] [Thread-179366] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:18:48.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:18:48.967 [DEBUG] [Thread-179366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:18:48.968 [DEBUG] [Thread-179366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:18:48.968 [DEBUG] [Thread-179366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:18:49.008 [DEBUG] [Thread-179366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:18:49.008 [DEBUG] [Thread-179366] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:18:49.012 [DEBUG] [Thread-179366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:18:49.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:18:49.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:18:49.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:18:49.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:18:49.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:18:49.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:18:49.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:18:49.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:18:49.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:18:49.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.929278 -999.00  +10.70  22.33     97  +10.40 1 3 1 3 1     0    0 0.33 -0.29 ----- 21.5 22.3 278.4 26.1 11.9 -1.0 11.8 -0.4 11.5 -0.8 11.8 -0.6
2026-04-12T00:18:49.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:18:49.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:18:49.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.929278
2026-04-12T00:18:49.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:18:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:18:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:18:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:18:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:18:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:18:30', tmtdew=-0.01232, humidity=100.048, cloud=0.0, wind=25.673, temperature=10.713, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:18:09.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:18:49.040 [DEBUG] [Thread-179366] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:18:49.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:18:49.134 [DEBUG] [Thread-179369] [transport.py] [_log()] starting thread (client mode): 0xae5f2e60
2026-04-12T00:18:49.135 [DEBUG] [Thread-179369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:18:49.150 [DEBUG] [Thread-179369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:18:49.150 [INFO] [Thread-179369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:18:49.157 [DEBUG] [Thread-179369] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] client lang: <none>
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] server lang: <none>
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] kex follows: False
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:18:49.158 [DEBUG] [Thread-179369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:18:49.159 [DEBUG] [Thread-179369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:18:49.159 [DEBUG] [Thread-179369] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:18:49.159 [DEBUG] [Thread-179369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:18:49.159 [DEBUG] [Thread-179369] [transport.py] [_log()] Compression: none
2026-04-12T00:18:49.159 [DEBUG] [Thread-179369] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:18:49.217 [DEBUG] [Thread-179369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:18:49.218 [DEBUG] [Thread-179369] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:18:49.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:18:49.219 [DEBUG] [Thread-179369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:18:49.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:18:49.273 [DEBUG] [Thread-179369] [transport.py] [_log()] userauth is OK
2026-04-12T00:18:49.273 [DEBUG] [Thread-179369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:18:49.273 [DEBUG] [Thread-179369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:18:49.273 [DEBUG] [Thread-179369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:18:49.273 [DEBUG] [Thread-179369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:18:49.292 [INFO] [Thread-179369] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:18:49.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:18:49.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:18:50.156 [DEBUG] [Thread-179369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:18:50.156 [DEBUG] [Thread-179369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:18:50.203 [DEBUG] [Thread-179369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:18:50.204 [DEBUG] [Thread-179369] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:18:50.212 [DEBUG] [Thread-179369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:18:50.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:18:50.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-04-12T00:18:50.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:18:50.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:18:50.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:18:50.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:18:50.246 [DEBUG] [Thread-179369] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:18:53.929 [DEBUG] [Thread-179371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:03.604 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:03.605 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:08.981 [DEBUG] [Thread-179372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:20.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:19:20.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:19:20.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-04-12T00:19:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 19, 5), -0.01741, 100.082, 0.0, 27.6134, 10.7629, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:19:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:19:05
2026-04-12T00:19:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:19:22.118 [DEBUG] [Thread-179373] [transport.py] [_log()] starting thread (client mode): 0xae5f11e0
2026-04-12T00:19:22.118 [DEBUG] [Thread-179373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:19:22.139 [DEBUG] [Thread-179373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:19:22.139 [INFO] [Thread-179373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] client lang: <none>
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] server lang: <none>
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] kex follows: False
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:19:22.142 [DEBUG] [Thread-179373] [transport.py] [_log()] Compression: none
2026-04-12T00:19:22.143 [DEBUG] [Thread-179373] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:19:22.160 [DEBUG] [Thread-179373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:19:22.161 [DEBUG] [Thread-179373] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:19:22.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:19:22.162 [DEBUG] [Thread-179373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:19:22.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:19:22.164 [DEBUG] [Thread-179373] [transport.py] [_log()] userauth is OK
2026-04-12T00:19:22.164 [DEBUG] [Thread-179373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:19:22.164 [DEBUG] [Thread-179373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:19:22.164 [DEBUG] [Thread-179373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:19:22.164 [DEBUG] [Thread-179373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:19:22.188 [INFO] [Thread-179373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:19:22.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:19:22.850 [DEBUG] [Thread-179373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:19:22.850 [DEBUG] [Thread-179373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:19:22.850 [DEBUG] [Thread-179373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:19:22.891 [DEBUG] [Thread-179373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:19:22.891 [DEBUG] [Thread-179373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:19:22.895 [DEBUG] [Thread-179373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:19:22.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:19:22.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:19:22.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:19:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:19:22.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:19:22.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:19:22.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:19:22.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:19:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:19:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.929972 -999.00  +10.70  25.47     97  +10.40 1 3 1 3 1     0    0 0.31 -0.75 ----- 23.1 25.5 281.4 27.6 11.9 -0.9 11.8 -0.4 11.4 -1.0 11.8 -0.6
2026-04-12T00:19:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:19:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:19:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.929972
2026-04-12T00:19:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:19:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:19:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:19:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:19:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:19:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:19:05', tmtdew=-0.01741, humidity=100.082, cloud=0.0, wind=27.6134, temperature=10.7629, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:19:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:19:22.922 [DEBUG] [Thread-179373] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:19:23.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:19:23.015 [DEBUG] [Thread-179376] [transport.py] [_log()] starting thread (client mode): 0xae5a71c0
2026-04-12T00:19:23.015 [DEBUG] [Thread-179376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:19:23.030 [DEBUG] [Thread-179376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:19:23.030 [INFO] [Thread-179376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:19:23.038 [DEBUG] [Thread-179376] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:19:23.038 [DEBUG] [Thread-179376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:19:23.038 [DEBUG] [Thread-179376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:19:23.038 [DEBUG] [Thread-179376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:23.038 [DEBUG] [Thread-179376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] client lang: <none>
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] server lang: <none>
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] kex follows: False
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:19:23.039 [DEBUG] [Thread-179376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:19:23.040 [DEBUG] [Thread-179376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:19:23.040 [DEBUG] [Thread-179376] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:19:23.040 [DEBUG] [Thread-179376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:19:23.040 [DEBUG] [Thread-179376] [transport.py] [_log()] Compression: none
2026-04-12T00:19:23.040 [DEBUG] [Thread-179376] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:19:23.097 [DEBUG] [Thread-179376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:19:23.098 [DEBUG] [Thread-179376] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:19:23.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:19:23.099 [DEBUG] [Thread-179376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:19:23.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:19:23.153 [DEBUG] [Thread-179376] [transport.py] [_log()] userauth is OK
2026-04-12T00:19:23.153 [DEBUG] [Thread-179376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:19:23.154 [DEBUG] [Thread-179376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:19:23.154 [DEBUG] [Thread-179376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:19:23.154 [DEBUG] [Thread-179376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:19:23.172 [INFO] [Thread-179376] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:19:23.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:19:23.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:19:23.979 [DEBUG] [Thread-179376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:19:23.979 [DEBUG] [Thread-179376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:19:24.017 [DEBUG] [Thread-179378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:24.027 [DEBUG] [Thread-179376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:19:24.027 [DEBUG] [Thread-179376] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:19:24.036 [DEBUG] [Thread-179376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:19:24.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:19:24.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-04-12T00:19:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:19:24.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:19:24.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:19:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:19:24.072 [DEBUG] [Thread-179376] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:19:39.075 [DEBUG] [Thread-179379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:45.600 [DEBUG] [Thread-179380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:54.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:19:54.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:19:54.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-04-12T00:19:54.114 [DEBUG] [Thread-179381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:19:55.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 19, 41), -0.02971, 100.13, 0.0, 29.1096, 11.1264, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:19:55.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:19:41
2026-04-12T00:19:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:19:55.909 [DEBUG] [Thread-179382] [transport.py] [_log()] starting thread (client mode): 0xae5a46a0
2026-04-12T00:19:55.909 [DEBUG] [Thread-179382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:19:55.928 [DEBUG] [Thread-179382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:19:55.928 [INFO] [Thread-179382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:19:55.931 [DEBUG] [Thread-179382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] client lang: <none>
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] server lang: <none>
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] kex follows: False
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] Compression: none
2026-04-12T00:19:55.932 [DEBUG] [Thread-179382] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:19:55.946 [DEBUG] [Thread-179382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:19:55.947 [DEBUG] [Thread-179382] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:19:55.947 [DEBUG] [Thread-179382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:19:55.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:19:55.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:19:55.947 [DEBUG] [Thread-179382] [transport.py] [_log()] userauth is OK
2026-04-12T00:19:55.948 [DEBUG] [Thread-179382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:19:55.948 [DEBUG] [Thread-179382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:19:55.948 [DEBUG] [Thread-179382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:19:55.948 [DEBUG] [Thread-179382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:19:55.957 [INFO] [Thread-179382] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:19:55.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:19:56.566 [DEBUG] [Thread-179382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:19:56.567 [DEBUG] [Thread-179382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:19:56.567 [DEBUG] [Thread-179382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:19:56.608 [DEBUG] [Thread-179382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:19:56.608 [DEBUG] [Thread-179382] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:19:56.611 [DEBUG] [Thread-179382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:19:56.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:19:56.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:19:56.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:19:56.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:19:56.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:19:56.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:19:56.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:19:56.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:19:56.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:19:56.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.930320 -999.00  +10.70  16.94     97  +10.40 1 3 1 3 1     0    0 0.31 -1.15 ----- 18.0 16.9 293.8 29.2 12.0 -1.0 11.8 -0.4 11.5 -0.5 11.8 -0.6
2026-04-12T00:19:56.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:19:56.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:19:56.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.930320
2026-04-12T00:19:56.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:19:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:19:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:19:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:19:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:19:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:19:41', tmtdew=-0.02971, humidity=100.13, cloud=0.0, wind=29.1096, temperature=11.1264, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:19:39.648', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:19:56.641 [DEBUG] [Thread-179382] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:19:56.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:19:56.733 [DEBUG] [Thread-179385] [transport.py] [_log()] starting thread (client mode): 0xae5a4040
2026-04-12T00:19:56.733 [DEBUG] [Thread-179385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:19:56.747 [DEBUG] [Thread-179385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:19:56.748 [INFO] [Thread-179385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:19:56.755 [DEBUG] [Thread-179385] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] client lang: <none>
2026-04-12T00:19:56.756 [DEBUG] [Thread-179385] [transport.py] [_log()] server lang: <none>
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] kex follows: False
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] Compression: none
2026-04-12T00:19:56.757 [DEBUG] [Thread-179385] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:19:56.814 [DEBUG] [Thread-179385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:19:56.814 [DEBUG] [Thread-179385] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:19:56.815 [DEBUG] [Thread-179385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:19:56.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:19:56.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:19:56.877 [DEBUG] [Thread-179385] [transport.py] [_log()] userauth is OK
2026-04-12T00:19:56.877 [DEBUG] [Thread-179385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:19:56.877 [DEBUG] [Thread-179385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:19:56.877 [DEBUG] [Thread-179385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:19:56.878 [DEBUG] [Thread-179385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:19:56.896 [INFO] [Thread-179385] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:19:56.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:19:56.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:19:57.697 [DEBUG] [Thread-179385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:19:57.697 [DEBUG] [Thread-179385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:19:57.745 [DEBUG] [Thread-179385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:19:57.745 [DEBUG] [Thread-179385] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:19:57.754 [DEBUG] [Thread-179385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:19:57.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:19:57.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-04-12T00:19: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') -> 00000000
2026-04-12T00:19:57.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:19:57.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:19:57.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:19:57.786 [DEBUG] [Thread-179385] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:20:03.810 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:20:03.811 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:20:09.154 [DEBUG] [Thread-179387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:20:24.207 [DEBUG] [Thread-179388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:20:27.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:20:27.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:20:27.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-04-12T00:20:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 20, 16), -0.017385, 100.082, 0.0, 27.6487, 10.7133, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:20:29.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:20:16
2026-04-12T00:20:29.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:20:29.673 [DEBUG] [Thread-179389] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-12T00:20:29.673 [DEBUG] [Thread-179389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:20:29.694 [DEBUG] [Thread-179389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:20:29.694 [INFO] [Thread-179389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:20:29.697 [DEBUG] [Thread-179389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] client lang: <none>
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] server lang: <none>
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] kex follows: False
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] Compression: none
2026-04-12T00:20:29.698 [DEBUG] [Thread-179389] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:20:29.716 [DEBUG] [Thread-179389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:20:29.716 [DEBUG] [Thread-179389] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:20:29.717 [DEBUG] [Thread-179389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:20:29.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:20:29.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:20:29.719 [DEBUG] [Thread-179389] [transport.py] [_log()] userauth is OK
2026-04-12T00:20:29.719 [DEBUG] [Thread-179389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:20:29.719 [DEBUG] [Thread-179389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:20:29.719 [DEBUG] [Thread-179389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:20:29.720 [DEBUG] [Thread-179389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:20:29.738 [INFO] [Thread-179389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:20:29.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:20:30.329 [DEBUG] [Thread-179389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:20:30.329 [DEBUG] [Thread-179389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:20:30.330 [DEBUG] [Thread-179389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:20:30.370 [DEBUG] [Thread-179389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:20:30.370 [DEBUG] [Thread-179389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:20:30.374 [DEBUG] [Thread-179389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:20:30.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:20:30.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:20:30.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:20:30.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:20:30.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:20:30.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:20:30.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:20:30.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:20:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:20:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.930667 -999.00  +10.70  21.02     97  +10.40 1 3 1 3 1     0    0 0.30 -1.26 ----- 17.0 21.0 285.4 26.9 11.9 -1.1 11.8 -0.4 11.5 -0.7 11.8 -0.5
2026-04-12T00:20:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:20:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:20:30.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.930667
2026-04-12T00:20:30.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:20:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:20:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:20:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:20:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:20:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:20:16', tmtdew=-0.017385, humidity=100.082, cloud=0.0, wind=27.6487, temperature=10.7133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:20:09.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:20:30.401 [DEBUG] [Thread-179389] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:20:30.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:20:30.495 [DEBUG] [Thread-179392] [transport.py] [_log()] starting thread (client mode): 0xb0f6c7f0
2026-04-12T00:20:30.495 [DEBUG] [Thread-179392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:20:30.509 [DEBUG] [Thread-179392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:20:30.509 [INFO] [Thread-179392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:20:30.517 [DEBUG] [Thread-179392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:20:30.517 [DEBUG] [Thread-179392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:20:30.517 [DEBUG] [Thread-179392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] client lang: <none>
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] server lang: <none>
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] kex follows: False
2026-04-12T00:20:30.518 [DEBUG] [Thread-179392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:20:30.519 [DEBUG] [Thread-179392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:20:30.519 [DEBUG] [Thread-179392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:20:30.519 [DEBUG] [Thread-179392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:20:30.519 [DEBUG] [Thread-179392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:20:30.519 [DEBUG] [Thread-179392] [transport.py] [_log()] Compression: none
2026-04-12T00:20:30.519 [DEBUG] [Thread-179392] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:20:30.578 [DEBUG] [Thread-179392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:20:30.578 [DEBUG] [Thread-179392] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:20:30.579 [DEBUG] [Thread-179392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:20:30.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:20:30.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:20:30.637 [DEBUG] [Thread-179392] [transport.py] [_log()] userauth is OK
2026-04-12T00:20:30.637 [DEBUG] [Thread-179392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:20:30.638 [DEBUG] [Thread-179392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:20:30.638 [DEBUG] [Thread-179392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:20:30.638 [DEBUG] [Thread-179392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:20:30.656 [INFO] [Thread-179392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:20:30.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:20:30.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:20:31.487 [DEBUG] [Thread-179392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:20:31.487 [DEBUG] [Thread-179392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:20:31.535 [DEBUG] [Thread-179392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:20:31.535 [DEBUG] [Thread-179392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:20:31.545 [DEBUG] [Thread-179392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:20:31.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:20:31.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-04-12T00:20:31.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:20:31.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:20:31.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:20:31.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:20:31.581 [DEBUG] [Thread-179392] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:20:39.242 [DEBUG] [Thread-179394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:20:45.656 [DEBUG] [Thread-179395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:20:54.301 [DEBUG] [Thread-179396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:01.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:21:01.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:21:01.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-04-12T00:21:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 20, 51), -0.02981, 100.131, 0.0, 26.4636, 11.1598, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:21:02.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:20:51
2026-04-12T00:21:03.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:21:03.420 [DEBUG] [Thread-179397] [transport.py] [_log()] starting thread (client mode): 0xae5f1240
2026-04-12T00:21:03.420 [DEBUG] [Thread-179397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:21:03.440 [DEBUG] [Thread-179397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:21:03.440 [INFO] [Thread-179397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] client lang: <none>
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] server lang: <none>
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] kex follows: False
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:21:03.443 [DEBUG] [Thread-179397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:21:03.444 [DEBUG] [Thread-179397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:21:03.444 [DEBUG] [Thread-179397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:21:03.444 [DEBUG] [Thread-179397] [transport.py] [_log()] Compression: none
2026-04-12T00:21:03.444 [DEBUG] [Thread-179397] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:21:03.461 [DEBUG] [Thread-179397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:21:03.462 [DEBUG] [Thread-179397] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:21:03.462 [DEBUG] [Thread-179397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:21:03.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:21:03.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:21:03.464 [DEBUG] [Thread-179397] [transport.py] [_log()] userauth is OK
2026-04-12T00:21:03.465 [DEBUG] [Thread-179397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:21:03.465 [DEBUG] [Thread-179397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:21:03.465 [DEBUG] [Thread-179397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:21:03.465 [DEBUG] [Thread-179397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:21:03.489 [INFO] [Thread-179397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:21:03.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:21:04.013 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:04.014 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:04.145 [DEBUG] [Thread-179397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:21:04.146 [DEBUG] [Thread-179397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:21:04.146 [DEBUG] [Thread-179397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:21:04.186 [DEBUG] [Thread-179397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:21:04.186 [DEBUG] [Thread-179397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:21:04.190 [DEBUG] [Thread-179397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:21:04.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:21:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:21:04.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:21:04.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:21:04.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:21:04.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:21:04.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:21:04.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:21:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:21:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.931014 -999.00  +10.70  18.80     97  +10.40 1 3 1 3 1     0    0 0.30 -1.21 ----- 19.9 18.8 280.9 27.2 11.9 -1.1 11.8 -0.3 11.4 -0.8 11.8 -0.6
2026-04-12T00:21:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:21:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:21:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.931014
2026-04-12T00:21:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:21:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:21:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:21:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:21:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:21:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:20:51', tmtdew=-0.02981, humidity=100.131, cloud=0.0, wind=26.4636, temperature=11.1598, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:20:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:21:04.219 [DEBUG] [Thread-179397] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:21:04.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:21:04.311 [DEBUG] [Thread-179400] [transport.py] [_log()] starting thread (client mode): 0xa79545b0
2026-04-12T00:21:04.312 [DEBUG] [Thread-179400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:21:04.327 [DEBUG] [Thread-179400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:21:04.327 [INFO] [Thread-179400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:21:04.334 [DEBUG] [Thread-179400] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] client lang: <none>
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] server lang: <none>
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] kex follows: False
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:21:04.335 [DEBUG] [Thread-179400] [transport.py] [_log()] Compression: none
2026-04-12T00:21:04.336 [DEBUG] [Thread-179400] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:21:04.397 [DEBUG] [Thread-179400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:21:04.398 [DEBUG] [Thread-179400] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:21:04.398 [DEBUG] [Thread-179400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:21:04.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:21:04.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:21:04.454 [DEBUG] [Thread-179400] [transport.py] [_log()] userauth is OK
2026-04-12T00:21:04.454 [DEBUG] [Thread-179400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:21:04.454 [DEBUG] [Thread-179400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:21:04.454 [DEBUG] [Thread-179400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:21:04.454 [DEBUG] [Thread-179400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:21:04.472 [INFO] [Thread-179400] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:21:04.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:21:04.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:21:05.284 [DEBUG] [Thread-179400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:21:05.284 [DEBUG] [Thread-179400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:21:05.332 [DEBUG] [Thread-179400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:21:05.332 [DEBUG] [Thread-179400] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:21:05.341 [DEBUG] [Thread-179400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:21:05.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:21:05.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-04-12T00:21:05.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-04-12T00:21:05.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:21:05.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:21:05.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:21:05.379 [DEBUG] [Thread-179400] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:21:09.336 [DEBUG] [Thread-179402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:24.395 [DEBUG] [Thread-179403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:35.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:21:35.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:21:35.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-04-12T00:21:36.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 21, 27), 0.0376, 100.049, 0.0, 26.555, 10.6968, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:21:36.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:21:27
2026-04-12T00:21:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:21:37.355 [DEBUG] [Thread-179404] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-12T00:21:37.355 [DEBUG] [Thread-179404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:21:37.376 [DEBUG] [Thread-179404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:21:37.376 [INFO] [Thread-179404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] client lang: <none>
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] server lang: <none>
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] kex follows: False
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] Compression: none
2026-04-12T00:21:37.380 [DEBUG] [Thread-179404] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:21:37.398 [DEBUG] [Thread-179404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:21:37.398 [DEBUG] [Thread-179404] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:21:37.399 [DEBUG] [Thread-179404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:21:37.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:21:37.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:21:37.401 [DEBUG] [Thread-179404] [transport.py] [_log()] userauth is OK
2026-04-12T00:21:37.401 [DEBUG] [Thread-179404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:21:37.401 [DEBUG] [Thread-179404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:21:37.401 [DEBUG] [Thread-179404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:21:37.401 [DEBUG] [Thread-179404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:21:37.421 [INFO] [Thread-179404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:21:37.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:21:38.075 [DEBUG] [Thread-179404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:21:38.075 [DEBUG] [Thread-179404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:21:38.075 [DEBUG] [Thread-179404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:21:38.116 [DEBUG] [Thread-179404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:21:38.116 [DEBUG] [Thread-179404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:21:38.119 [DEBUG] [Thread-179404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:21:38.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:21:38.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:21:38.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:21:38.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:21:38.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:21:38.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:21:38.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.931361 -999.00  +10.70  22.51     98  +10.40 1 3 1 3 1     0    0 0.29 -1.35 ----- 20.1 22.5 289.8 24.3 11.9 -1.0 11.8 -0.4 11.5 -1.2 11.8 -0.5
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.931361
2026-04-12T00:21:38.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:21:38.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:21:38.140 [DEBUG] [Thread-179404] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:21:38.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:21:38.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:21:38.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:21:38.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:21:27', tmtdew=0.0376, humidity=100.049, cloud=0.0, wind=26.555, temperature=10.6968, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:21:09.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:21:38.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:21:38.232 [DEBUG] [Thread-179407] [transport.py] [_log()] starting thread (client mode): 0xa7955d80
2026-04-12T00:21:38.232 [DEBUG] [Thread-179407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:21:38.246 [DEBUG] [Thread-179407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:21:38.246 [INFO] [Thread-179407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:21:38.254 [DEBUG] [Thread-179407] [transport.py] [_log()] client lang: <none>
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] server lang: <none>
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] kex follows: False
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] Compression: none
2026-04-12T00:21:38.255 [DEBUG] [Thread-179407] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:21:38.315 [DEBUG] [Thread-179407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:21:38.316 [DEBUG] [Thread-179407] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:21:38.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:21:38.317 [DEBUG] [Thread-179407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:21:38.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:21:38.372 [DEBUG] [Thread-179407] [transport.py] [_log()] userauth is OK
2026-04-12T00:21:38.373 [DEBUG] [Thread-179407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:21:38.373 [DEBUG] [Thread-179407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:21:38.373 [DEBUG] [Thread-179407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:21:38.373 [DEBUG] [Thread-179407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:21:38.398 [INFO] [Thread-179407] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:21:38.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:21:38.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:21:39.228 [DEBUG] [Thread-179407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:21:39.229 [DEBUG] [Thread-179407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:21:39.277 [DEBUG] [Thread-179407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:21:39.277 [DEBUG] [Thread-179407] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:21:39.286 [DEBUG] [Thread-179407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:21:39.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:21:39.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-04-12T00:21:39.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-04-12T00:21:39.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:21:39.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:21:39.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:21:39.323 [DEBUG] [Thread-179407] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:21:39.432 [DEBUG] [Thread-179409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:45.720 [DEBUG] [Thread-179410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:21:54.482 [DEBUG] [Thread-179411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:04.215 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:04.216 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:09.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:22:09.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:22:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:22:09.519 [DEBUG] [Thread-179412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 22, 3), 0.027555, 100.115, 0.0, 26.3434, 10.7466, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:22:10.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:22:03
2026-04-12T00:22:10.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:22:11.158 [DEBUG] [Thread-179413] [transport.py] [_log()] starting thread (client mode): 0xa7954c40
2026-04-12T00:22:11.158 [DEBUG] [Thread-179413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:22:11.177 [DEBUG] [Thread-179413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:22:11.178 [INFO] [Thread-179413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] client lang: <none>
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] server lang: <none>
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] kex follows: False
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] Compression: none
2026-04-12T00:22:11.181 [DEBUG] [Thread-179413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:22:11.199 [DEBUG] [Thread-179413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:22:11.199 [DEBUG] [Thread-179413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:22:11.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:22:11.201 [DEBUG] [Thread-179413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:22:11.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:22:11.203 [DEBUG] [Thread-179413] [transport.py] [_log()] userauth is OK
2026-04-12T00:22:11.203 [DEBUG] [Thread-179413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:22:11.203 [DEBUG] [Thread-179413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:22:11.203 [DEBUG] [Thread-179413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:22:11.203 [DEBUG] [Thread-179413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:22:11.228 [INFO] [Thread-179413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:22:11.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:22:11.846 [DEBUG] [Thread-179413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:22:11.846 [DEBUG] [Thread-179413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:22:11.846 [DEBUG] [Thread-179413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:22:11.888 [DEBUG] [Thread-179413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:22:11.888 [DEBUG] [Thread-179413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:22:11.890 [DEBUG] [Thread-179413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:22:11.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:22:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:22:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:22:11.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:22:11.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:22:11.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:22:11.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:22:11.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:22:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:22:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.931708 -999.00  +10.70  19.48     97  +10.40 1 3 1 3 1     0    0 0.30 -1.41 ----- 19.2 19.5 278.4 24.8 11.9 -0.8 11.8 -0.3 11.4 -0.3 11.8 -0.5
2026-04-12T00:22:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:22:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:22:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.931708
2026-04-12T00:22:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:22:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:22:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:22:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:22:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:22:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:22:03', tmtdew=0.027555, humidity=100.115, cloud=0.0, wind=26.3434, temperature=10.7466, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:21:39.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:22:11.914 [DEBUG] [Thread-179413] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:22:11.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:22:12.008 [DEBUG] [Thread-179416] [transport.py] [_log()] starting thread (client mode): 0xae5a77f0
2026-04-12T00:22:12.008 [DEBUG] [Thread-179416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:22:12.023 [DEBUG] [Thread-179416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:22:12.023 [INFO] [Thread-179416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:22:12.031 [DEBUG] [Thread-179416] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:22:12.031 [DEBUG] [Thread-179416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:22:12.031 [DEBUG] [Thread-179416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] client lang: <none>
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] server lang: <none>
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] kex follows: False
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] Compression: none
2026-04-12T00:22:12.032 [DEBUG] [Thread-179416] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:22:12.090 [DEBUG] [Thread-179416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:22:12.091 [DEBUG] [Thread-179416] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:22:12.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:22:12.092 [DEBUG] [Thread-179416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:22:12.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:22:12.146 [DEBUG] [Thread-179416] [transport.py] [_log()] userauth is OK
2026-04-12T00:22:12.147 [DEBUG] [Thread-179416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:22:12.147 [DEBUG] [Thread-179416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:22:12.147 [DEBUG] [Thread-179416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:22:12.147 [DEBUG] [Thread-179416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:22:12.167 [INFO] [Thread-179416] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:22:12.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:22:12.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:22:12.985 [DEBUG] [Thread-179416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:22:12.986 [DEBUG] [Thread-179416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:22:13.033 [DEBUG] [Thread-179416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:22:13.033 [DEBUG] [Thread-179416] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:22:13.041 [DEBUG] [Thread-179416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:22:13.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:22:13.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-04-12T00:22: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') -> 00000000
2026-04-12T00:22:13.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:22:13.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:22:13.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:22:13.074 [DEBUG] [Thread-179416] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:22:24.557 [DEBUG] [Thread-179418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:39.606 [DEBUG] [Thread-179419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:43.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:22:43.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:22:43.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:22:44.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 22, 3), 0.027555, 100.115, 0.0, 26.3434, 10.7466, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:22:44.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:22:03
2026-04-12T00:22:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:22:44.871 [DEBUG] [Thread-179420] [transport.py] [_log()] starting thread (client mode): 0xae5f31f0
2026-04-12T00:22:44.871 [DEBUG] [Thread-179420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:22:44.892 [DEBUG] [Thread-179420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:22:44.892 [INFO] [Thread-179420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] client lang: <none>
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] server lang: <none>
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] kex follows: False
2026-04-12T00:22:44.895 [DEBUG] [Thread-179420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:22:44.896 [DEBUG] [Thread-179420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:22:44.896 [DEBUG] [Thread-179420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:22:44.896 [DEBUG] [Thread-179420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:22:44.896 [DEBUG] [Thread-179420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:22:44.896 [DEBUG] [Thread-179420] [transport.py] [_log()] Compression: none
2026-04-12T00:22:44.896 [DEBUG] [Thread-179420] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:22:44.914 [DEBUG] [Thread-179420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:22:44.915 [DEBUG] [Thread-179420] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:22:44.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:22:44.916 [DEBUG] [Thread-179420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:22:44.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:22:44.919 [DEBUG] [Thread-179420] [transport.py] [_log()] userauth is OK
2026-04-12T00:22:44.919 [DEBUG] [Thread-179420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:22:44.919 [DEBUG] [Thread-179420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:22:44.919 [DEBUG] [Thread-179420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:22:44.919 [DEBUG] [Thread-179420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:22:44.937 [INFO] [Thread-179420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:22:44.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:22:45.573 [DEBUG] [Thread-179420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:22:45.574 [DEBUG] [Thread-179420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:22:45.574 [DEBUG] [Thread-179420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:22:45.614 [DEBUG] [Thread-179420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:22:45.614 [DEBUG] [Thread-179420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:22:45.618 [DEBUG] [Thread-179420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:22:45.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:22:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:22:45.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:22:45.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:22:45.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:22:45.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:22:45.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:22:45.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:22:45.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:22:45.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.932056 -999.00  +10.80  18.90     98  +10.40 1 3 1 3 1     0    0 0.31 -1.04 ----- 21.2 18.9 290.2 23.1 11.9 -1.1 11.8 -0.3 11.6 -0.4 11.8 -0.8
2026-04-12T00:22:45.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:22:45.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:22:45.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.932056
2026-04-12T00:22:45.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:22:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:22:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:22:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:22:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:22:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:22:03', tmtdew=0.027555, humidity=100.115, cloud=0.0, wind=26.3434, temperature=10.7466, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:22:09.638', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:22:45.646 [DEBUG] [Thread-179420] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:22:45.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:22:45.738 [DEBUG] [Thread-179423] [transport.py] [_log()] starting thread (client mode): 0xb0f6c220
2026-04-12T00:22:45.738 [DEBUG] [Thread-179423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:22:45.752 [DEBUG] [Thread-179423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:22:45.753 [INFO] [Thread-179423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] client lang: <none>
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] server lang: <none>
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] kex follows: False
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:22:45.760 [DEBUG] [Thread-179423] [transport.py] [_log()] Compression: none
2026-04-12T00:22:45.761 [DEBUG] [Thread-179423] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:22:45.770 [DEBUG] [Thread-179425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:22:45.820 [DEBUG] [Thread-179423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:22:45.821 [DEBUG] [Thread-179423] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:22:45.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:22:45.822 [DEBUG] [Thread-179423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:22:45.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:22:45.876 [DEBUG] [Thread-179423] [transport.py] [_log()] userauth is OK
2026-04-12T00:22:45.877 [DEBUG] [Thread-179423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:22:45.877 [DEBUG] [Thread-179423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:22:45.877 [DEBUG] [Thread-179423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:22:45.877 [DEBUG] [Thread-179423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:22:45.895 [INFO] [Thread-179423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:22:45.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:22:45.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:22:46.725 [DEBUG] [Thread-179423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:22:46.726 [DEBUG] [Thread-179423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:22:46.774 [DEBUG] [Thread-179423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:22:46.774 [DEBUG] [Thread-179423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:22:46.783 [DEBUG] [Thread-179423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:22:46.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:22:46.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-04-12T00:22:46.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-04-12T00:22:46.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:22:46.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:22:46.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:22:46.820 [DEBUG] [Thread-179423] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:22:54.646 [DEBUG] [Thread-179426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:04.419 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:04.420 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:09.696 [DEBUG] [Thread-179427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:16.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:23:16.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:23:16.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-04-12T00:23:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 22, 38), -0.0349, 100.165, 0.0, 27.4162, 11.1602, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:23:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:22:38
2026-04-12T00:23:18.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:23:18.690 [DEBUG] [Thread-179428] [transport.py] [_log()] starting thread (client mode): 0xb0f6c2e0
2026-04-12T00:23:18.690 [DEBUG] [Thread-179428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:23:18.711 [DEBUG] [Thread-179428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:23:18.711 [INFO] [Thread-179428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:23:18.715 [DEBUG] [Thread-179428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:23:18.715 [DEBUG] [Thread-179428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:23:18.715 [DEBUG] [Thread-179428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:23:18.715 [DEBUG] [Thread-179428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] client lang: <none>
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] server lang: <none>
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] kex follows: False
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:23:18.716 [DEBUG] [Thread-179428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:23:18.717 [DEBUG] [Thread-179428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:23:18.717 [DEBUG] [Thread-179428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:23:18.717 [DEBUG] [Thread-179428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:23:18.717 [DEBUG] [Thread-179428] [transport.py] [_log()] Compression: none
2026-04-12T00:23:18.717 [DEBUG] [Thread-179428] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:23:18.735 [DEBUG] [Thread-179428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:23:18.736 [DEBUG] [Thread-179428] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:23:18.737 [DEBUG] [Thread-179428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:23:18.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:23:18.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:23:18.738 [DEBUG] [Thread-179428] [transport.py] [_log()] userauth is OK
2026-04-12T00:23:18.739 [DEBUG] [Thread-179428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:23:18.739 [DEBUG] [Thread-179428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:23:18.739 [DEBUG] [Thread-179428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:23:18.739 [DEBUG] [Thread-179428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:23:18.774 [INFO] [Thread-179428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:23:18.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:23:19.409 [DEBUG] [Thread-179428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:23:19.410 [DEBUG] [Thread-179428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:23:19.411 [DEBUG] [Thread-179428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:23:19.451 [DEBUG] [Thread-179428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:23:19.451 [DEBUG] [Thread-179428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:23:19.455 [DEBUG] [Thread-179428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:23:19.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:23:19.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:23:19.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:23:19.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:23:19.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:23:19.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:23:19.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:23:19.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:23:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:23:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.932403 -999.00  +10.70  19.95     98  +10.40 1 3 1 3 1     0    0 0.29 -1.56 ----- 15.5 19.9 295.8 26.0 11.9 -1.1 11.8 -0.4 11.5 -0.7 11.8 -0.8
2026-04-12T00:23:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:23:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:23:19.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.932403
2026-04-12T00:23:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:23:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:23:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:23:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:23:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:23:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:22:38', tmtdew=-0.0349, humidity=100.165, cloud=0.0, wind=27.4162, temperature=11.1602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:22:39.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:23:19.484 [DEBUG] [Thread-179428] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:23:19.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:23:19.577 [DEBUG] [Thread-179431] [transport.py] [_log()] starting thread (client mode): 0xb0f6cfd0
2026-04-12T00:23:19.577 [DEBUG] [Thread-179431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:23:19.593 [DEBUG] [Thread-179431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:23:19.593 [INFO] [Thread-179431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] client lang: <none>
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] server lang: <none>
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] kex follows: False
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] Compression: none
2026-04-12T00:23:19.601 [DEBUG] [Thread-179431] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:23:19.660 [DEBUG] [Thread-179431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:23:19.661 [DEBUG] [Thread-179431] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:23:19.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:23:19.662 [DEBUG] [Thread-179431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:23:19.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:23:19.718 [DEBUG] [Thread-179431] [transport.py] [_log()] userauth is OK
2026-04-12T00:23:19.719 [DEBUG] [Thread-179431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:23:19.719 [DEBUG] [Thread-179431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:23:19.719 [DEBUG] [Thread-179431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:23:19.719 [DEBUG] [Thread-179431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:23:19.738 [INFO] [Thread-179431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:23:19.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:23:19.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:23:20.587 [DEBUG] [Thread-179431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:23:20.587 [DEBUG] [Thread-179431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:23:20.635 [DEBUG] [Thread-179431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:23:20.636 [DEBUG] [Thread-179431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:23:20.645 [DEBUG] [Thread-179431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:23:20.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:23:20.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-04-12T00:23:20.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-04-12T00:23:20.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:23:20.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:23:20.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:23:20.686 [DEBUG] [Thread-179431] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:23:24.733 [DEBUG] [Thread-179433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:39.787 [DEBUG] [Thread-179434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:45.830 [DEBUG] [Thread-179435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:23:50.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:23:50.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:23:50.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-04-12T00:23:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 23, 13), 0.03255, 100.082, 0.0, 21.9143, 10.7801, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:23:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:23:13
2026-04-12T00:23:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:23:52.627 [DEBUG] [Thread-179436] [transport.py] [_log()] starting thread (client mode): 0xae5f1b40
2026-04-12T00:23:52.627 [DEBUG] [Thread-179436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:23:52.647 [DEBUG] [Thread-179436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:23:52.647 [INFO] [Thread-179436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] client lang: <none>
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] server lang: <none>
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] kex follows: False
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:23:52.650 [DEBUG] [Thread-179436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:23:52.651 [DEBUG] [Thread-179436] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:23:52.651 [DEBUG] [Thread-179436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:23:52.651 [DEBUG] [Thread-179436] [transport.py] [_log()] Compression: none
2026-04-12T00:23:52.651 [DEBUG] [Thread-179436] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:23:52.671 [DEBUG] [Thread-179436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:23:52.671 [DEBUG] [Thread-179436] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:23:52.672 [DEBUG] [Thread-179436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:23:52.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:23:52.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:23:52.674 [DEBUG] [Thread-179436] [transport.py] [_log()] userauth is OK
2026-04-12T00:23:52.674 [DEBUG] [Thread-179436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:23:52.674 [DEBUG] [Thread-179436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:23:52.674 [DEBUG] [Thread-179436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:23:52.674 [DEBUG] [Thread-179436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:23:52.709 [INFO] [Thread-179436] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:23:52.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:23:53.355 [DEBUG] [Thread-179436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:23:53.355 [DEBUG] [Thread-179436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:23:53.355 [DEBUG] [Thread-179436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:23:53.396 [DEBUG] [Thread-179436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:23:53.396 [DEBUG] [Thread-179436] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:23:53.399 [DEBUG] [Thread-179436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:23:53.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:23:53.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:23:53.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:23:53.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:23:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:23:53.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:23:53.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:23:53.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:23:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:23:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.932750 -999.00  +10.70  17.94     98  +10.40 1 3 1 3 1     0    0 0.28 -1.75 ----- 19.9 17.9 275.0 21.4 11.9 -1.1 11.8 -0.5 11.5 -0.9 11.8 -0.5
2026-04-12T00:23:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:23:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:23:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.932750
2026-04-12T00:23:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:23:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:23:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:23:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:23:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:23:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:23:13', tmtdew=0.03255, humidity=100.082, cloud=0.0, wind=21.9143, temperature=10.7801, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:23:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:23:53.423 [DEBUG] [Thread-179436] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:23:53.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:23:53.524 [DEBUG] [Thread-179439] [transport.py] [_log()] starting thread (client mode): 0xae5f16c0
2026-04-12T00:23:53.524 [DEBUG] [Thread-179439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:23:53.539 [DEBUG] [Thread-179439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:23:53.539 [INFO] [Thread-179439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:53.547 [DEBUG] [Thread-179439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] client lang: <none>
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] server lang: <none>
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] kex follows: False
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:23:53.548 [DEBUG] [Thread-179439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:23:53.549 [DEBUG] [Thread-179439] [transport.py] [_log()] Compression: none
2026-04-12T00:23:53.549 [DEBUG] [Thread-179439] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:23:53.606 [DEBUG] [Thread-179439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:23:53.607 [DEBUG] [Thread-179439] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:23:53.607 [DEBUG] [Thread-179439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:23:53.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:23:53.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:23:53.664 [DEBUG] [Thread-179439] [transport.py] [_log()] userauth is OK
2026-04-12T00:23:53.665 [DEBUG] [Thread-179439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:23:53.665 [DEBUG] [Thread-179439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:23:53.665 [DEBUG] [Thread-179439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:23:53.665 [DEBUG] [Thread-179439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:23:53.687 [INFO] [Thread-179439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:23:53.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:23:53.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:23:54.522 [DEBUG] [Thread-179439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:23:54.523 [DEBUG] [Thread-179439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:23:54.571 [DEBUG] [Thread-179439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:23:54.571 [DEBUG] [Thread-179439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:23:54.580 [DEBUG] [Thread-179439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:23:54.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:23:54.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-04-12T00:23:54.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-04-12T00:23:54.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:23:54.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:23:54.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:23:54.618 [DEBUG] [Thread-179439] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:23:54.822 [DEBUG] [Thread-179441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:04.623 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:04.624 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:09.880 [DEBUG] [Thread-179442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:24.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:24:24.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:24:24.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-04-12T00:24:24.920 [DEBUG] [Thread-179443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 23, 49), -0.02997, 100.132, 0.0, 26.6047, 11.1935, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:24:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:23:49
2026-04-12T00:24:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:24:26.462 [DEBUG] [Thread-179444] [transport.py] [_log()] starting thread (client mode): 0xb39c5d80
2026-04-12T00:24:26.462 [DEBUG] [Thread-179444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:24:26.483 [DEBUG] [Thread-179444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:24:26.483 [INFO] [Thread-179444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:24:26.486 [DEBUG] [Thread-179444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] client lang: <none>
2026-04-12T00:24:26.487 [DEBUG] [Thread-179444] [transport.py] [_log()] server lang: <none>
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] kex follows: False
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] Compression: none
2026-04-12T00:24:26.488 [DEBUG] [Thread-179444] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:24:26.508 [DEBUG] [Thread-179444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:24:26.508 [DEBUG] [Thread-179444] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:24:26.509 [DEBUG] [Thread-179444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:24:26.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:24:26.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:24:26.511 [DEBUG] [Thread-179444] [transport.py] [_log()] userauth is OK
2026-04-12T00:24:26.511 [DEBUG] [Thread-179444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:24:26.511 [DEBUG] [Thread-179444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:24:26.511 [DEBUG] [Thread-179444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:24:26.511 [DEBUG] [Thread-179444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:24:26.534 [INFO] [Thread-179444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:24:26.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:24:27.148 [DEBUG] [Thread-179444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:24:27.148 [DEBUG] [Thread-179444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:24:27.149 [DEBUG] [Thread-179444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:24:27.189 [DEBUG] [Thread-179444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:24:27.189 [DEBUG] [Thread-179444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:24:27.192 [DEBUG] [Thread-179444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:24:27.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:24:27.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:24:27.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:24:27.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:24:27.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:24:27.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:24:27.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:24:27.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:24:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:24:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.933444 -999.00  +10.70  19.84     98  +10.40 1 3 1 3 1     0    0 0.25 -2.55 ----- 22.4 19.8 283.2 23.8 12.0 -1.1 11.8 -0.4 11.4 -1.3 11.8 -0.9
2026-04-12T00:24:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:24:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:24:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.933444
2026-04-12T00:24:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:24:27.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:24:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:24:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:24:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:24:27.216 [DEBUG] [Thread-179444] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:24:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:23:49', tmtdew=-0.02997, humidity=100.132, cloud=0.0, wind=26.6047, temperature=11.1935, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:24:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:24:27.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:24:27.311 [DEBUG] [Thread-179447] [transport.py] [_log()] starting thread (client mode): 0xa7954310
2026-04-12T00:24:27.311 [DEBUG] [Thread-179447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:24:27.327 [DEBUG] [Thread-179447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:24:27.327 [INFO] [Thread-179447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:24:27.334 [DEBUG] [Thread-179447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] client lang: <none>
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] server lang: <none>
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] kex follows: False
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] Compression: none
2026-04-12T00:24:27.335 [DEBUG] [Thread-179447] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:24:27.396 [DEBUG] [Thread-179447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:24:27.396 [DEBUG] [Thread-179447] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:24:27.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:24:27.397 [DEBUG] [Thread-179447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:24:27.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:24:27.456 [DEBUG] [Thread-179447] [transport.py] [_log()] userauth is OK
2026-04-12T00:24:27.457 [DEBUG] [Thread-179447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:24:27.457 [DEBUG] [Thread-179447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:24:27.457 [DEBUG] [Thread-179447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:24:27.457 [DEBUG] [Thread-179447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:24:27.476 [INFO] [Thread-179447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:24:27.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:24:27.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:24:28.331 [DEBUG] [Thread-179447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:24:28.332 [DEBUG] [Thread-179447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:24:28.380 [DEBUG] [Thread-179447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:24:28.380 [DEBUG] [Thread-179447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:24:28.391 [DEBUG] [Thread-179447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:24:28.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:24:28.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-04-12T00:24:28.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-04-12T00:24:28.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:24:28.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:24:28.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:24:28.428 [DEBUG] [Thread-179447] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:24:39.956 [DEBUG] [Thread-179449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:45.882 [DEBUG] [Thread-179450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:55.019 [DEBUG] [Thread-179451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:24:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:24:58.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:24:58.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-04-12T00:24:59.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 24, 24), 0.03503, 100.066, 0.0, 23.6084, 10.7302, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:24:59.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:24:24
2026-04-12T00:25:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:25:00.289 [DEBUG] [Thread-179452] [transport.py] [_log()] starting thread (client mode): 0xae5f1b40
2026-04-12T00:25:00.289 [DEBUG] [Thread-179452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:25:00.310 [DEBUG] [Thread-179452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:25:00.311 [INFO] [Thread-179452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:00.312 [DEBUG] [Thread-179452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] client lang: <none>
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] server lang: <none>
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] kex follows: False
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] Compression: none
2026-04-12T00:25:00.313 [DEBUG] [Thread-179452] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:25:00.327 [DEBUG] [Thread-179452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:25:00.327 [DEBUG] [Thread-179452] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:25:00.327 [DEBUG] [Thread-179452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:25:00.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:25:00.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:25:00.329 [DEBUG] [Thread-179452] [transport.py] [_log()] userauth is OK
2026-04-12T00:25:00.329 [DEBUG] [Thread-179452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:25:00.329 [DEBUG] [Thread-179452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:25:00.330 [DEBUG] [Thread-179452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:25:00.330 [DEBUG] [Thread-179452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:25:00.365 [INFO] [Thread-179452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:25:00.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:25:00.992 [DEBUG] [Thread-179452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:25:00.992 [DEBUG] [Thread-179452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:25:00.993 [DEBUG] [Thread-179452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:25:01.033 [DEBUG] [Thread-179452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:25:01.033 [DEBUG] [Thread-179452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:25:01.036 [DEBUG] [Thread-179452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:25:01.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:25:01.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:25:01.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:25:01.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:25:01.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:25:01.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:25:01.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:25:01.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:25:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:25:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.933792 -999.00  +10.70  20.58     97  +10.40 1 3 1 3 1     0    0 0.25 -2.43 ----- 21.0 20.6 274.0 26.9 11.9 -1.2 11.8 -0.4 11.4 -1.0 11.8 -0.8
2026-04-12T00:25:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:25:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:25:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.933792
2026-04-12T00:25:01.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:25:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:25:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:25:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:25:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:25:01.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:24:24', tmtdew=0.03503, humidity=100.066, cloud=0.0, wind=23.6084, temperature=10.7302, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:24:39.629', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:25:01.056 [DEBUG] [Thread-179452] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:25:01.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:25:01.155 [DEBUG] [Thread-179455] [transport.py] [_log()] starting thread (client mode): 0xae5f2b60
2026-04-12T00:25:01.155 [DEBUG] [Thread-179455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:25:01.170 [DEBUG] [Thread-179455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:25:01.170 [INFO] [Thread-179455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] client lang: <none>
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] server lang: <none>
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] kex follows: False
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:25:01.178 [DEBUG] [Thread-179455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:25:01.179 [DEBUG] [Thread-179455] [transport.py] [_log()] Compression: none
2026-04-12T00:25:01.179 [DEBUG] [Thread-179455] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:25:01.237 [DEBUG] [Thread-179455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:25:01.238 [DEBUG] [Thread-179455] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:25:01.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:25:01.239 [DEBUG] [Thread-179455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:25:01.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:25:01.293 [DEBUG] [Thread-179455] [transport.py] [_log()] userauth is OK
2026-04-12T00:25:01.293 [DEBUG] [Thread-179455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:25:01.294 [DEBUG] [Thread-179455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:25:01.294 [DEBUG] [Thread-179455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:25:01.294 [DEBUG] [Thread-179455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:25:01.312 [INFO] [Thread-179455] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:25:01.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:25:01.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:25:02.148 [DEBUG] [Thread-179455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:25:02.148 [DEBUG] [Thread-179455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:25:02.196 [DEBUG] [Thread-179455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:25:02.196 [DEBUG] [Thread-179455] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:25:02.205 [DEBUG] [Thread-179455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:25:02.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:25:02.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:25: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') -> 00000000
2026-04-12T00:25:02.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:25:02.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:25:02.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:25:02.242 [DEBUG] [Thread-179455] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:25:04.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:25:04.828 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:25:10.052 [DEBUG] [Thread-179457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:25:25.111 [DEBUG] [Thread-179458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:25:32.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:25:32.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:25:32.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-04-12T00:25:33.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 24, 24), 0.03503, 100.066, 0.0, 23.6084, 10.7302, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:25:33.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:24:24
2026-04-12T00:25:33.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:25:34.064 [DEBUG] [Thread-179459] [transport.py] [_log()] starting thread (client mode): 0xae508c40
2026-04-12T00:25:34.064 [DEBUG] [Thread-179459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:25:34.084 [DEBUG] [Thread-179459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:25:34.084 [INFO] [Thread-179459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:25:34.087 [DEBUG] [Thread-179459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:25:34.087 [DEBUG] [Thread-179459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] client lang: <none>
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] server lang: <none>
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] kex follows: False
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:25:34.088 [DEBUG] [Thread-179459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:25:34.089 [DEBUG] [Thread-179459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:25:34.089 [DEBUG] [Thread-179459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:25:34.089 [DEBUG] [Thread-179459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:25:34.089 [DEBUG] [Thread-179459] [transport.py] [_log()] Compression: none
2026-04-12T00:25:34.089 [DEBUG] [Thread-179459] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:25:34.108 [DEBUG] [Thread-179459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:25:34.109 [DEBUG] [Thread-179459] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:25:34.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:25:34.110 [DEBUG] [Thread-179459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:25:34.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:25:34.112 [DEBUG] [Thread-179459] [transport.py] [_log()] userauth is OK
2026-04-12T00:25:34.112 [DEBUG] [Thread-179459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:25:34.112 [DEBUG] [Thread-179459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:25:34.112 [DEBUG] [Thread-179459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:25:34.112 [DEBUG] [Thread-179459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:25:34.136 [INFO] [Thread-179459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:25:34.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:25:34.776 [DEBUG] [Thread-179459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:25:34.776 [DEBUG] [Thread-179459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:25:34.777 [DEBUG] [Thread-179459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:25:34.817 [DEBUG] [Thread-179459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:25:34.817 [DEBUG] [Thread-179459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:25:34.820 [DEBUG] [Thread-179459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:25:34.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:25:34.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:25:34.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:25:34.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:25:34.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:25:34.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:25:34.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:25:34.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:25:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:25:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.934139 -999.00  +10.70  18.82     98  +10.40 1 3 1 3 1     0    0 0.26 -2.45 ----- 17.3 18.8 281.2 25.6 11.9 -1.1 11.7 -0.4 11.5 -0.9 11.8 -0.7
2026-04-12T00:25:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:25:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:25:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.934139
2026-04-12T00:25:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:25:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:25:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:25:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:25:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:25:34.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:24:24', tmtdew=0.03503, humidity=100.066, cloud=0.0, wind=23.6084, temperature=10.7302, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:25:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:25:34.844 [DEBUG] [Thread-179459] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:25:34.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:25:34.937 [DEBUG] [Thread-179462] [transport.py] [_log()] starting thread (client mode): 0xae5098d0
2026-04-12T00:25:34.938 [DEBUG] [Thread-179462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:25:34.956 [DEBUG] [Thread-179462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:25:34.956 [INFO] [Thread-179462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:25:34.964 [DEBUG] [Thread-179462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:25:34.964 [DEBUG] [Thread-179462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:25:34.964 [DEBUG] [Thread-179462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:25:34.964 [DEBUG] [Thread-179462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] client lang: <none>
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] server lang: <none>
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] kex follows: False
2026-04-12T00:25:34.965 [DEBUG] [Thread-179462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:25:34.966 [DEBUG] [Thread-179462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:25:34.966 [DEBUG] [Thread-179462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:25:34.966 [DEBUG] [Thread-179462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:25:34.966 [DEBUG] [Thread-179462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:25:34.966 [DEBUG] [Thread-179462] [transport.py] [_log()] Compression: none
2026-04-12T00:25:34.966 [DEBUG] [Thread-179462] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:25:35.024 [DEBUG] [Thread-179462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:25:35.025 [DEBUG] [Thread-179462] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:25:35.026 [DEBUG] [Thread-179462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:25:35.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:25:35.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:25:35.084 [DEBUG] [Thread-179462] [transport.py] [_log()] userauth is OK
2026-04-12T00:25:35.085 [DEBUG] [Thread-179462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:25:35.085 [DEBUG] [Thread-179462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:25:35.085 [DEBUG] [Thread-179462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:25:35.085 [DEBUG] [Thread-179462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:25:35.105 [INFO] [Thread-179462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:25:35.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:25:35.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:25:35.933 [DEBUG] [Thread-179462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:25:35.933 [DEBUG] [Thread-179462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:25:35.981 [DEBUG] [Thread-179462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:25:35.981 [DEBUG] [Thread-179462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:25:35.990 [DEBUG] [Thread-179462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:25:36.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:25:36.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-04-12T00:25:36.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:25:36.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:25:36.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:25:36.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:25:36.027 [DEBUG] [Thread-179462] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:25:40.146 [DEBUG] [Thread-179464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:25:45.939 [DEBUG] [Thread-179465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:25:55.200 [DEBUG] [Thread-179466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:05.034 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:05.035 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:06.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:26:06.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:26:06.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:26:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 25, 35), -0.03995, 100.198, 0.0, 21.9125, 11.1604, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:26:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:25:35
2026-04-12T00:26:07.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:26:08.022 [DEBUG] [Thread-179467] [transport.py] [_log()] starting thread (client mode): 0xae50aec0
2026-04-12T00:26:08.022 [DEBUG] [Thread-179467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:26:08.042 [DEBUG] [Thread-179467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:26:08.043 [INFO] [Thread-179467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:26:08.045 [DEBUG] [Thread-179467] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] client lang: <none>
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] server lang: <none>
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] kex follows: False
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:26:08.046 [DEBUG] [Thread-179467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:26:08.047 [DEBUG] [Thread-179467] [transport.py] [_log()] Compression: none
2026-04-12T00:26:08.047 [DEBUG] [Thread-179467] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:26:08.055 [DEBUG] [Thread-179467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:26:08.056 [DEBUG] [Thread-179467] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:26:08.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:26:08.056 [DEBUG] [Thread-179467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:26:08.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:26:08.058 [DEBUG] [Thread-179467] [transport.py] [_log()] userauth is OK
2026-04-12T00:26:08.058 [DEBUG] [Thread-179467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:26:08.058 [DEBUG] [Thread-179467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:26:08.058 [DEBUG] [Thread-179467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:26:08.058 [DEBUG] [Thread-179467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:26:08.093 [INFO] [Thread-179467] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:26:08.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:26:08.743 [DEBUG] [Thread-179467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:26:08.744 [DEBUG] [Thread-179467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:26:08.744 [DEBUG] [Thread-179467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:26:08.785 [DEBUG] [Thread-179467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:26:08.785 [DEBUG] [Thread-179467] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:26:08.788 [DEBUG] [Thread-179467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:26:08.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:26:08.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:26:08.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:26:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:26:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:26:08.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:26:08.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:26:08.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:26:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:26:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.934486 -999.00  +10.70  16.76     98  +10.50 1 3 1 3 1     0    0 0.24 -2.72 ----- 17.3 16.8 287.2 20.4 11.9 -1.2 11.8 -0.4 11.5 -0.9 11.8 -0.7
2026-04-12T00:26:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:26:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:26:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.934486
2026-04-12T00:26:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:26:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:26:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:26:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:26:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:26:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:25:35', tmtdew=-0.03995, humidity=100.198, cloud=0.0, wind=21.9125, temperature=11.1604, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:25:39.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:26:08.810 [DEBUG] [Thread-179467] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:26: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-04-12T00:26:08.901 [DEBUG] [Thread-179470] [transport.py] [_log()] starting thread (client mode): 0xa79567a0
2026-04-12T00:26:08.901 [DEBUG] [Thread-179470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:26:08.918 [DEBUG] [Thread-179470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:26:08.918 [INFO] [Thread-179470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] client lang: <none>
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] server lang: <none>
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] kex follows: False
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:26:08.926 [DEBUG] [Thread-179470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:26:08.927 [DEBUG] [Thread-179470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:26:08.927 [DEBUG] [Thread-179470] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:26:08.927 [DEBUG] [Thread-179470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:26:08.927 [DEBUG] [Thread-179470] [transport.py] [_log()] Compression: none
2026-04-12T00:26:08.927 [DEBUG] [Thread-179470] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:26:08.988 [DEBUG] [Thread-179470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:26:08.988 [DEBUG] [Thread-179470] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:26:08.988 [DEBUG] [Thread-179470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:26:08.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:26:08.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:26:09.046 [DEBUG] [Thread-179470] [transport.py] [_log()] userauth is OK
2026-04-12T00:26:09.047 [DEBUG] [Thread-179470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:26:09.047 [DEBUG] [Thread-179470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:26:09.047 [DEBUG] [Thread-179470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:26:09.047 [DEBUG] [Thread-179470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:26:09.071 [INFO] [Thread-179470] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:26:09.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:26:09.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:26:09.930 [DEBUG] [Thread-179470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:26:09.930 [DEBUG] [Thread-179470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:26:09.982 [DEBUG] [Thread-179470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:26:09.982 [DEBUG] [Thread-179470] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:26:09.996 [DEBUG] [Thread-179470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:26:10.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:26:10.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-04-12T00:26: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-04-12T00:26:10.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:26:10.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:26:10.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:26:10.041 [DEBUG] [Thread-179470] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:26:10.234 [DEBUG] [Thread-179472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:25.292 [DEBUG] [Thread-179473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:40.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:26:40.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:26:40.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-04-12T00:26:40.329 [DEBUG] [Thread-179474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:41.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 26, 10), -0.022505, 100.116, 0.0, 25.3908, 10.7468, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:26:41.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:26:10
2026-04-12T00:26:41.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:26:41.877 [DEBUG] [Thread-179475] [transport.py] [_log()] starting thread (client mode): 0xae5f08b0
2026-04-12T00:26:41.877 [DEBUG] [Thread-179475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:26:41.898 [DEBUG] [Thread-179475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:26:41.898 [INFO] [Thread-179475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] client lang: <none>
2026-04-12T00:26:41.902 [DEBUG] [Thread-179475] [transport.py] [_log()] server lang: <none>
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] kex follows: False
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] Compression: none
2026-04-12T00:26:41.903 [DEBUG] [Thread-179475] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:26:41.921 [DEBUG] [Thread-179475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:26:41.922 [DEBUG] [Thread-179475] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:26:41.922 [DEBUG] [Thread-179475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:26:41.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:26:41.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:26:41.924 [DEBUG] [Thread-179475] [transport.py] [_log()] userauth is OK
2026-04-12T00:26:41.924 [DEBUG] [Thread-179475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:26:41.924 [DEBUG] [Thread-179475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:26:41.925 [DEBUG] [Thread-179475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:26:41.925 [DEBUG] [Thread-179475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:26:41.948 [INFO] [Thread-179475] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:26:41.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:26:42.756 [DEBUG] [Thread-179475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:26:42.756 [DEBUG] [Thread-179475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:26:42.757 [DEBUG] [Thread-179475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:26:42.797 [DEBUG] [Thread-179475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:26:42.797 [DEBUG] [Thread-179475] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:26:42.801 [DEBUG] [Thread-179475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:26:42.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:26:42.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:26:42.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:26:42.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:26:42.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:26:42.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:26:42.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:26:42.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:26:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:26:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.934833 -999.00  +10.70  15.61     98  +10.40 1 3 1 3 1     0    0 0.25 -2.79 ----- 17.0 15.6 289.4 22.8 11.9 -1.1 11.8 -0.5 11.5 -0.7 11.8 -0.7
2026-04-12T00:26:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:26:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:26:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.934833
2026-04-12T00:26:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:26:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:26:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:26:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:26:42.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:26:42.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:26:10', tmtdew=-0.022505, humidity=100.116, cloud=0.0, wind=25.3908, temperature=10.7468, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:26:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:26:42.826 [DEBUG] [Thread-179475] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:26:42.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:26:42.916 [DEBUG] [Thread-179478] [transport.py] [_log()] starting thread (client mode): 0xae5a6f50
2026-04-12T00:26:42.916 [DEBUG] [Thread-179478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:26:42.930 [DEBUG] [Thread-179478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:26:42.930 [INFO] [Thread-179478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:26:42.938 [DEBUG] [Thread-179478] [transport.py] [_log()] client lang: <none>
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] server lang: <none>
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] kex follows: False
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] Compression: none
2026-04-12T00:26:42.939 [DEBUG] [Thread-179478] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:26:42.998 [DEBUG] [Thread-179478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:26:42.999 [DEBUG] [Thread-179478] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:26:42.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:26:43.000 [DEBUG] [Thread-179478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:26:43.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:26:43.057 [DEBUG] [Thread-179478] [transport.py] [_log()] userauth is OK
2026-04-12T00:26:43.066 [DEBUG] [Thread-179478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:26:43.066 [DEBUG] [Thread-179478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:26:43.066 [DEBUG] [Thread-179478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:26:43.066 [DEBUG] [Thread-179478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:26:43.084 [INFO] [Thread-179478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:26:43.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:26:43.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:26:43.947 [DEBUG] [Thread-179478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:26:43.948 [DEBUG] [Thread-179478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:26:43.995 [DEBUG] [Thread-179478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:26:43.995 [DEBUG] [Thread-179478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:26:44.004 [DEBUG] [Thread-179478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:26:44.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:26:44.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-04-12T00:26:44.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-04-12T00:26:44.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:26:44.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:26:44.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:26:44.041 [DEBUG] [Thread-179478] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:26:45.997 [DEBUG] [Thread-179480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:26:55.371 [DEBUG] [Thread-179481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:05.237 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:05.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:10.424 [DEBUG] [Thread-179482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:14.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:27:14.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:27:14.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-04-12T00:27:15.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 26, 46), -0.03491, 100.165, 0.0, 20.3602, 11.1932, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:27:15.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:26:46
2026-04-12T00:27:15.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:27:15.877 [DEBUG] [Thread-179483] [transport.py] [_log()] starting thread (client mode): 0xae508430
2026-04-12T00:27:15.878 [DEBUG] [Thread-179483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:27:15.898 [DEBUG] [Thread-179483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:27:15.899 [INFO] [Thread-179483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:27:15.901 [DEBUG] [Thread-179483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] client lang: <none>
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] server lang: <none>
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] kex follows: False
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] Compression: none
2026-04-12T00:27:15.902 [DEBUG] [Thread-179483] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:27:15.919 [DEBUG] [Thread-179483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:27:15.920 [DEBUG] [Thread-179483] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:27:15.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:27:15.921 [DEBUG] [Thread-179483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:27:15.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:27:15.923 [DEBUG] [Thread-179483] [transport.py] [_log()] userauth is OK
2026-04-12T00:27:15.923 [DEBUG] [Thread-179483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:27:15.923 [DEBUG] [Thread-179483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:27:15.923 [DEBUG] [Thread-179483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:27:15.924 [DEBUG] [Thread-179483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:27:15.947 [INFO] [Thread-179483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:27:15.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:27:16.728 [DEBUG] [Thread-179483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:27:16.728 [DEBUG] [Thread-179483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:27:16.729 [DEBUG] [Thread-179483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:27:16.769 [DEBUG] [Thread-179483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:27:16.769 [DEBUG] [Thread-179483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:27:16.773 [DEBUG] [Thread-179483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:27:16.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:27:16.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:27:16.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:27:16.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:27:16.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:27:16.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:27:16.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:27:16.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:27:16.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:27:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.935180 -999.00  +10.70  20.03     98  +10.40 1 3 1 3 1     0    0 0.21 -3.43 ----- 18.1 20.0 279.8 23.3 11.9 -1.1 11.9 -0.4 11.5 -0.6 11.8 -0.6
2026-04-12T00:27:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:27:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:27:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.935180
2026-04-12T00:27:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:27:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:27:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:27:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:27:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:27:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:26:46', tmtdew=-0.03491, humidity=100.165, cloud=0.0, wind=20.3602, temperature=11.1932, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:26:39.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:27:16.800 [DEBUG] [Thread-179483] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:27:16.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:27:16.890 [DEBUG] [Thread-179486] [transport.py] [_log()] starting thread (client mode): 0xae508490
2026-04-12T00:27:16.890 [DEBUG] [Thread-179486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:27:16.904 [DEBUG] [Thread-179486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:27:16.904 [INFO] [Thread-179486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:16.912 [DEBUG] [Thread-179486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] client lang: <none>
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] server lang: <none>
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] kex follows: False
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] Compression: none
2026-04-12T00:27:16.913 [DEBUG] [Thread-179486] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:27:16.971 [DEBUG] [Thread-179486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:27:16.972 [DEBUG] [Thread-179486] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:27:16.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:27:16.973 [DEBUG] [Thread-179486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:27:16.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:27:17.029 [DEBUG] [Thread-179486] [transport.py] [_log()] userauth is OK
2026-04-12T00:27:17.029 [DEBUG] [Thread-179486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:27:17.029 [DEBUG] [Thread-179486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:27:17.029 [DEBUG] [Thread-179486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:27:17.030 [DEBUG] [Thread-179486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:27:17.049 [INFO] [Thread-179486] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:27:17.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:27:17.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:27:17.886 [DEBUG] [Thread-179486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:27:17.886 [DEBUG] [Thread-179486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:27:17.934 [DEBUG] [Thread-179486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:27:17.935 [DEBUG] [Thread-179486] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:27:17.943 [DEBUG] [Thread-179486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:27:17.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:27:17.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-04-12T00:27:17.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-04-12T00:27:17.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:27:17.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:27:17.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:27:17.976 [DEBUG] [Thread-179486] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:27:25.459 [DEBUG] [Thread-179488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:40.509 [DEBUG] [Thread-179489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:46.050 [DEBUG] [Thread-179490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:27:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:27:47.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:27:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:27:49.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 27, 21), -0.017435, 100.082, 0.0, 20.3627, 10.73, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:27:49.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:27:21
2026-04-12T00:27:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:27:49.845 [DEBUG] [Thread-179491] [transport.py] [_log()] starting thread (client mode): 0xae50bb20
2026-04-12T00:27:49.845 [DEBUG] [Thread-179491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:27:49.864 [DEBUG] [Thread-179491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:27:49.864 [INFO] [Thread-179491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] client lang: <none>
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] server lang: <none>
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] kex follows: False
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:27:49.867 [DEBUG] [Thread-179491] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:27:49.868 [DEBUG] [Thread-179491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:27:49.868 [DEBUG] [Thread-179491] [transport.py] [_log()] Compression: none
2026-04-12T00:27:49.868 [DEBUG] [Thread-179491] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:27:49.886 [DEBUG] [Thread-179491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:27:49.887 [DEBUG] [Thread-179491] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:27:49.887 [DEBUG] [Thread-179491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:27:49.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:27:49.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:27:49.890 [DEBUG] [Thread-179491] [transport.py] [_log()] userauth is OK
2026-04-12T00:27:49.890 [DEBUG] [Thread-179491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:27:49.890 [DEBUG] [Thread-179491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:27:49.890 [DEBUG] [Thread-179491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:27:49.890 [DEBUG] [Thread-179491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:27:49.915 [INFO] [Thread-179491] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:27:49.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:27:50.705 [DEBUG] [Thread-179491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:27:50.705 [DEBUG] [Thread-179491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:27:50.705 [DEBUG] [Thread-179491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:27:50.746 [DEBUG] [Thread-179491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:27:50.746 [DEBUG] [Thread-179491] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:27:50.749 [DEBUG] [Thread-179491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:27:50.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:27:50.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:27:50.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:27:50.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:27:50.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:27:50.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:27:50.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.935528 -999.00  +10.70  16.15     98  +10.50 1 3 1 3 1     0    0 0.22 -3.54 ----- 16.7 16.1 277.0 21.9 11.9 -1.4 11.8 -0.3 11.5 -0.4 11.8 -0.6
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.935528
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:27:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:27:21', tmtdew=-0.017435, humidity=100.082, cloud=0.0, wind=20.3627, temperature=10.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:27:09.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:27:50.763 [DEBUG] [Thread-179491] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:27: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-04-12T00:27:50.845 [DEBUG] [Thread-179494] [transport.py] [_log()] starting thread (client mode): 0xae5f1f00
2026-04-12T00:27:50.845 [DEBUG] [Thread-179494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:27:50.860 [DEBUG] [Thread-179494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:27:50.860 [INFO] [Thread-179494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:27:50.869 [DEBUG] [Thread-179494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] client lang: <none>
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] server lang: <none>
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] kex follows: False
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:27:50.870 [DEBUG] [Thread-179494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:27:50.871 [DEBUG] [Thread-179494] [transport.py] [_log()] Compression: none
2026-04-12T00:27:50.871 [DEBUG] [Thread-179494] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:27:50.929 [DEBUG] [Thread-179494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:27:50.930 [DEBUG] [Thread-179494] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:27:50.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:27:50.932 [DEBUG] [Thread-179494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:27:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:27:50.987 [DEBUG] [Thread-179494] [transport.py] [_log()] userauth is OK
2026-04-12T00:27:50.987 [DEBUG] [Thread-179494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:27:50.988 [DEBUG] [Thread-179494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:27:50.988 [DEBUG] [Thread-179494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:27:50.988 [DEBUG] [Thread-179494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:27:51.014 [INFO] [Thread-179494] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:27: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-04-12T00:27:51.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:27:51.939 [DEBUG] [Thread-179494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:27:51.940 [DEBUG] [Thread-179494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:27:51.988 [DEBUG] [Thread-179494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:27:51.988 [DEBUG] [Thread-179494] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:27:51.997 [DEBUG] [Thread-179494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:27:52.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:27:52.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:27:52.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:27:52.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:27:52.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:27:52.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:27:52.034 [DEBUG] [Thread-179494] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:27:55.546 [DEBUG] [Thread-179496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:05.446 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:05.447 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:10.595 [DEBUG] [Thread-179497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:28:22.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:28:22.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-04-12T00:28:23.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 27, 57), -0.019995, 100.099, 0.0, 20.4678, 10.7798, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:28:23.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:27:57
2026-04-12T00:28:23.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:28:23.930 [DEBUG] [Thread-179498] [transport.py] [_log()] starting thread (client mode): 0xae5081f0
2026-04-12T00:28:23.930 [DEBUG] [Thread-179498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:28:23.947 [DEBUG] [Thread-179498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:28:23.947 [INFO] [Thread-179498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] client lang: <none>
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] server lang: <none>
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] kex follows: False
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] Compression: none
2026-04-12T00:28:23.950 [DEBUG] [Thread-179498] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:28:23.966 [DEBUG] [Thread-179498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:28:23.966 [DEBUG] [Thread-179498] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:28:23.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:28:23.967 [DEBUG] [Thread-179498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:28:23.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:28:23.969 [DEBUG] [Thread-179498] [transport.py] [_log()] userauth is OK
2026-04-12T00:28:23.969 [DEBUG] [Thread-179498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:28:23.969 [DEBUG] [Thread-179498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:28:23.969 [DEBUG] [Thread-179498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:28:23.969 [DEBUG] [Thread-179498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:28:24.000 [INFO] [Thread-179498] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:28:24.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:28:24.780 [DEBUG] [Thread-179498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:28:24.781 [DEBUG] [Thread-179498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:28:24.781 [DEBUG] [Thread-179498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:28:24.822 [DEBUG] [Thread-179498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:28:24.822 [DEBUG] [Thread-179498] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:28:24.826 [DEBUG] [Thread-179498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:28:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:28:24.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:28:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:28:24.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:28:24.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:28:24.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:28:24.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:28:24.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:28:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:28:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.935875 -999.00  +10.70  18.28     98  +10.40 1 3 1 3 1     0    0 0.20 -4.00 ----- 17.7 18.3 281.0 22.6 11.9 -1.4 11.8 -0.6 11.4 -1.4 11.8 -1.5
2026-04-12T00:28:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:28:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:28:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.935875
2026-04-12T00:28:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:28:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:28:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:28:24.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:28:24.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:28:24.853 [DEBUG] [Thread-179498] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:28:24.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:27:57', tmtdew=-0.019995, humidity=100.099, cloud=0.0, wind=20.4678, temperature=10.7798, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:27:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:28:24.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:28:24.949 [DEBUG] [Thread-179501] [transport.py] [_log()] starting thread (client mode): 0xae50a020
2026-04-12T00:28:24.949 [DEBUG] [Thread-179501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:28:24.964 [DEBUG] [Thread-179501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:28:24.964 [INFO] [Thread-179501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:28:24.972 [DEBUG] [Thread-179501] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:28:24.972 [DEBUG] [Thread-179501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:28:24.972 [DEBUG] [Thread-179501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:28:24.972 [DEBUG] [Thread-179501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:24.972 [DEBUG] [Thread-179501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] client lang: <none>
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] server lang: <none>
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] kex follows: False
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:28:24.973 [DEBUG] [Thread-179501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:28:24.974 [DEBUG] [Thread-179501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:28:24.974 [DEBUG] [Thread-179501] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:28:24.974 [DEBUG] [Thread-179501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:28:24.974 [DEBUG] [Thread-179501] [transport.py] [_log()] Compression: none
2026-04-12T00:28:24.974 [DEBUG] [Thread-179501] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:28:25.030 [DEBUG] [Thread-179501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:28:25.031 [DEBUG] [Thread-179501] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:28:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:28:25.033 [DEBUG] [Thread-179501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:28:25.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:28:25.089 [DEBUG] [Thread-179501] [transport.py] [_log()] userauth is OK
2026-04-12T00:28:25.090 [DEBUG] [Thread-179501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:28:25.090 [DEBUG] [Thread-179501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:28:25.091 [DEBUG] [Thread-179501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:28:25.091 [DEBUG] [Thread-179501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:28:25.109 [INFO] [Thread-179501] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:28:25.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:28:25.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:28:25.628 [DEBUG] [Thread-179503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:25.976 [DEBUG] [Thread-179501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:28:25.976 [DEBUG] [Thread-179501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:28:26.024 [DEBUG] [Thread-179501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:28:26.025 [DEBUG] [Thread-179501] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:28:26.034 [DEBUG] [Thread-179501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:28:26.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:28:26.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-04-12T00:28:26.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-04-12T00:28:26.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:28:26.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:28:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:28:26.072 [DEBUG] [Thread-179501] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:28:40.692 [DEBUG] [Thread-179504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:46.118 [DEBUG] [Thread-179505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:55.731 [DEBUG] [Thread-179506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:28:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:28:56.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:28:56.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-04-12T00:28:57.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 28, 32), -0.02247, 100.116, 0.0, 20.1503, 10.7467, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:28:57.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:28:32
2026-04-12T00:28:57.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:28:57.900 [DEBUG] [Thread-179507] [transport.py] [_log()] starting thread (client mode): 0xae5f0a30
2026-04-12T00:28:57.900 [DEBUG] [Thread-179507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:28:57.924 [DEBUG] [Thread-179507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:28:57.925 [INFO] [Thread-179507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:28:57.928 [DEBUG] [Thread-179507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] client lang: <none>
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] server lang: <none>
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] kex follows: False
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:28:57.929 [DEBUG] [Thread-179507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:28:57.930 [DEBUG] [Thread-179507] [transport.py] [_log()] Compression: none
2026-04-12T00:28:57.930 [DEBUG] [Thread-179507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:28:57.948 [DEBUG] [Thread-179507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:28:57.948 [DEBUG] [Thread-179507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:28:57.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:28:57.949 [DEBUG] [Thread-179507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:28:57.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:28:57.951 [DEBUG] [Thread-179507] [transport.py] [_log()] userauth is OK
2026-04-12T00:28:57.951 [DEBUG] [Thread-179507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:28:57.951 [DEBUG] [Thread-179507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:28:57.951 [DEBUG] [Thread-179507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:28:57.952 [DEBUG] [Thread-179507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:28:57.989 [INFO] [Thread-179507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:28:57.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:28:58.761 [DEBUG] [Thread-179507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:28:58.761 [DEBUG] [Thread-179507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:28:58.762 [DEBUG] [Thread-179507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:28:58.802 [DEBUG] [Thread-179507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:28:58.802 [DEBUG] [Thread-179507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:28:58.806 [DEBUG] [Thread-179507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:28:58.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:28:58.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:28:58.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:28:58.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:28:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:28:58.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:28:58.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:28:58.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:28:58.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:28:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.936222 -999.00  +10.70  17.90     97  +10.40 1 3 1 3 1     0    0 0.19 -4.28 ----- 21.6 17.9 288.8 21.5 12.0 -1.3 11.8 -0.6 11.4 -1.0 11.8 -0.9
2026-04-12T00:28:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:28:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:28:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.936222
2026-04-12T00:28:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:28:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:28:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:28:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:28:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:28:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:28:32', tmtdew=-0.02247, humidity=100.116, cloud=0.0, wind=20.1503, temperature=10.7467, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:28:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:28:58.833 [DEBUG] [Thread-179507] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:28:58.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:28:58.922 [DEBUG] [Thread-179510] [transport.py] [_log()] starting thread (client mode): 0xa7956830
2026-04-12T00:28:58.922 [DEBUG] [Thread-179510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:28:58.937 [DEBUG] [Thread-179510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:28:58.937 [INFO] [Thread-179510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:28:58.944 [DEBUG] [Thread-179510] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] client lang: <none>
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] server lang: <none>
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] kex follows: False
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] Compression: none
2026-04-12T00:28:58.945 [DEBUG] [Thread-179510] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:28:59.004 [DEBUG] [Thread-179510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:28:59.005 [DEBUG] [Thread-179510] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:28:59.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:28:59.006 [DEBUG] [Thread-179510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:28:59.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:28:59.060 [DEBUG] [Thread-179510] [transport.py] [_log()] userauth is OK
2026-04-12T00:28:59.060 [DEBUG] [Thread-179510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:28:59.060 [DEBUG] [Thread-179510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:28:59.061 [DEBUG] [Thread-179510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:28:59.061 [DEBUG] [Thread-179510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:28:59.079 [INFO] [Thread-179510] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:28:59.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:28:59.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:28:59.893 [DEBUG] [Thread-179510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:28:59.893 [DEBUG] [Thread-179510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:28:59.941 [DEBUG] [Thread-179510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:28:59.942 [DEBUG] [Thread-179510] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:28:59.951 [DEBUG] [Thread-179510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:28:59.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:28:59.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-04-12T00:28:59.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-04-12T00:28:59.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:28:59.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:28:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:28:59.985 [DEBUG] [Thread-179510] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:29:05.649 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:29:05.650 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:29:10.768 [DEBUG] [Thread-179512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:29:25.823 [DEBUG] [Thread-179513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:29:30.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:29:30.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:29:30.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-04-12T00:29:31.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 29, 8), -0.019965, 100.099, 0.0, 19.7975, 10.7302, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:29:31.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:29:08
2026-04-12T00:29:31.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:29:31.807 [DEBUG] [Thread-179514] [transport.py] [_log()] starting thread (client mode): 0xae5085e0
2026-04-12T00:29:31.807 [DEBUG] [Thread-179514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:29:31.827 [DEBUG] [Thread-179514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:29:31.827 [INFO] [Thread-179514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] client lang: <none>
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] server lang: <none>
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] kex follows: False
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] Compression: none
2026-04-12T00:29:31.830 [DEBUG] [Thread-179514] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:29:31.847 [DEBUG] [Thread-179514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:29:31.848 [DEBUG] [Thread-179514] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:29:31.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:29:31.849 [DEBUG] [Thread-179514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:29:31.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:29:31.851 [DEBUG] [Thread-179514] [transport.py] [_log()] userauth is OK
2026-04-12T00:29:31.851 [DEBUG] [Thread-179514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:29:31.851 [DEBUG] [Thread-179514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:29:31.851 [DEBUG] [Thread-179514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:29:31.851 [DEBUG] [Thread-179514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:29:31.885 [INFO] [Thread-179514] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:29:31.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:29:32.674 [DEBUG] [Thread-179514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:29:32.674 [DEBUG] [Thread-179514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:29:32.674 [DEBUG] [Thread-179514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:29:32.714 [DEBUG] [Thread-179514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:29:32.715 [DEBUG] [Thread-179514] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:29:32.717 [DEBUG] [Thread-179514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:29:32.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:29:32.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:29:32.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:29:32.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:29:32.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:29:32.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:29:32.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:29:32.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:29:32.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:29:32.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.936916 -999.00  +10.70  16.95     98  +10.40 1 3 1 3 1     0    0 0.20 -3.89 ----- 20.0 16.9 286.0 24.7 11.9 -1.6 11.8 -0.9 11.5 -0.6 11.8 -1.3
2026-04-12T00:29:32.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:29:32.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:29:32.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.936916
2026-04-12T00:29:32.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:29:32.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:29:32.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:29:32.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:29:32.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:29:32.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:29:08', tmtdew=-0.019965, humidity=100.099, cloud=0.0, wind=19.7975, temperature=10.7302, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:29:09.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:29:32.735 [DEBUG] [Thread-179514] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:29:32.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:29:32.826 [DEBUG] [Thread-179517] [transport.py] [_log()] starting thread (client mode): 0xa7954370
2026-04-12T00:29:32.826 [DEBUG] [Thread-179517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:29:32.841 [DEBUG] [Thread-179517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:29:32.841 [INFO] [Thread-179517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:29:32.849 [DEBUG] [Thread-179517] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:29:32.850 [DEBUG] [Thread-179517] [transport.py] [_log()] client lang: <none>
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] server lang: <none>
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] kex follows: False
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] Compression: none
2026-04-12T00:29:32.851 [DEBUG] [Thread-179517] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:29:32.907 [DEBUG] [Thread-179517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:29:32.907 [DEBUG] [Thread-179517] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:29:32.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:29:32.908 [DEBUG] [Thread-179517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:29:32.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:29:32.963 [DEBUG] [Thread-179517] [transport.py] [_log()] userauth is OK
2026-04-12T00:29:32.964 [DEBUG] [Thread-179517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:29:32.964 [DEBUG] [Thread-179517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:29:32.964 [DEBUG] [Thread-179517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:29:32.964 [DEBUG] [Thread-179517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:29:32.977 [INFO] [Thread-179517] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:29:32.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:29:32.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:29:33.774 [DEBUG] [Thread-179517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:29:33.775 [DEBUG] [Thread-179517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:29:33.824 [DEBUG] [Thread-179517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:29:33.825 [DEBUG] [Thread-179517] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:29:33.837 [DEBUG] [Thread-179517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:29:33.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:29:33.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:29:33.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:29:33.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:29:33.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:29:33.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:29:33.881 [DEBUG] [Thread-179517] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:29:40.859 [DEBUG] [Thread-179519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:29:46.173 [DEBUG] [Thread-179520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:29:55.913 [DEBUG] [Thread-179521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:03.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:30:03.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:30:03.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:30:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 29, 43), -0.04002, 100.198, 0.0, 23.0414, 11.2267, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:30:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:29:43
2026-04-12T00:30:05.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:30:05.841 [DEBUG] [Thread-179522] [transport.py] [_log()] starting thread (client mode): 0xae5f08b0
2026-04-12T00:30:05.841 [DEBUG] [Thread-179522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:30:05.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:05.855 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:05.861 [DEBUG] [Thread-179522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:30:05.861 [INFO] [Thread-179522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:30:05.864 [DEBUG] [Thread-179522] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:30:05.864 [DEBUG] [Thread-179522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:30:05.864 [DEBUG] [Thread-179522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] client lang: <none>
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] server lang: <none>
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] kex follows: False
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] Compression: none
2026-04-12T00:30:05.865 [DEBUG] [Thread-179522] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:30:05.873 [DEBUG] [Thread-179522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:30:05.874 [DEBUG] [Thread-179522] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:30:05.874 [DEBUG] [Thread-179522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:30:05.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:30:05.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:30:05.876 [DEBUG] [Thread-179522] [transport.py] [_log()] userauth is OK
2026-04-12T00:30:05.876 [DEBUG] [Thread-179522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:30:05.876 [DEBUG] [Thread-179522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:30:05.876 [DEBUG] [Thread-179522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:30:05.876 [DEBUG] [Thread-179522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:30:05.899 [INFO] [Thread-179522] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:30:05.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:30:06.974 [DEBUG] [Thread-179522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:30:06.975 [DEBUG] [Thread-179522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:30:06.975 [DEBUG] [Thread-179522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:30:07.016 [DEBUG] [Thread-179522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:30:07.016 [DEBUG] [Thread-179522] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:30:07.020 [DEBUG] [Thread-179522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:30:07.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:30:07.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:30:07.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:30:07.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:30:07.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:30:07.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:30:07.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:30:07.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:30:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:30:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.937264 -999.00  +10.70  18.70     98  +10.40 1 3 1 3 1     0    0 0.21 -3.77 ----- 19.2 18.7 282.4 24.3 11.9 -1.5 11.8 -0.7 11.4 -0.9 11.8 -1.4
2026-04-12T00:30:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:30:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:30:07.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.937264
2026-04-12T00:30:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:30:07.058 [DEBUG] [Thread-179522] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:30:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:30:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:30:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:30:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:30:07.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:29:43', tmtdew=-0.04002, humidity=100.198, cloud=0.0, wind=23.0414, temperature=11.2267, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:29:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:30:07.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:30:07.152 [DEBUG] [Thread-179525] [transport.py] [_log()] starting thread (client mode): 0xa7955cf0
2026-04-12T00:30:07.153 [DEBUG] [Thread-179525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:30:07.171 [DEBUG] [Thread-179525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:30:07.171 [INFO] [Thread-179525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:30:07.179 [DEBUG] [Thread-179525] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:30:07.180 [DEBUG] [Thread-179525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:30:07.181 [DEBUG] [Thread-179525] [transport.py] [_log()] client lang: <none>
2026-04-12T00:30:07.181 [DEBUG] [Thread-179525] [transport.py] [_log()] server lang: <none>
2026-04-12T00:30:07.181 [DEBUG] [Thread-179525] [transport.py] [_log()] kex follows: False
2026-04-12T00:30:07.181 [DEBUG] [Thread-179525] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:30:07.181 [DEBUG] [Thread-179525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:30:07.181 [DEBUG] [Thread-179525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:30:07.182 [DEBUG] [Thread-179525] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:30:07.182 [DEBUG] [Thread-179525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:30:07.182 [DEBUG] [Thread-179525] [transport.py] [_log()] Compression: none
2026-04-12T00:30:07.182 [DEBUG] [Thread-179525] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:30:07.238 [DEBUG] [Thread-179525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:30:07.239 [DEBUG] [Thread-179525] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:30:07.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:30:07.240 [DEBUG] [Thread-179525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:30:07.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:30:07.294 [DEBUG] [Thread-179525] [transport.py] [_log()] userauth is OK
2026-04-12T00:30:07.295 [DEBUG] [Thread-179525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:30:07.295 [DEBUG] [Thread-179525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:30:07.295 [DEBUG] [Thread-179525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:30:07.295 [DEBUG] [Thread-179525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:30:07.315 [INFO] [Thread-179525] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:30:07.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:30:07.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:30:08.130 [DEBUG] [Thread-179525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:30:08.130 [DEBUG] [Thread-179525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:30:08.178 [DEBUG] [Thread-179525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:30:08.179 [DEBUG] [Thread-179525] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:30:08.187 [DEBUG] [Thread-179525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:30:08.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:30:08.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:30:08.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-04-12T00:30:08.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:30:08.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:30:08.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:30:08.228 [DEBUG] [Thread-179525] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:30:10.947 [DEBUG] [Thread-179527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:25.998 [DEBUG] [Thread-179528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:38.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:30:38.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:30:38.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-04-12T00:30:39.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 30, 19), -0.01499, 100.066, 0.0, 21.0154, 10.7302, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:30:39.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:30:19
2026-04-12T00:30:39.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:30:40.121 [DEBUG] [Thread-179529] [transport.py] [_log()] starting thread (client mode): 0xae5f2dd0
2026-04-12T00:30:40.121 [DEBUG] [Thread-179529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:30:40.137 [DEBUG] [Thread-179529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:30:40.137 [INFO] [Thread-179529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:30:40.140 [DEBUG] [Thread-179529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] client lang: <none>
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] server lang: <none>
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] kex follows: False
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] Compression: none
2026-04-12T00:30:40.141 [DEBUG] [Thread-179529] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:30:40.158 [DEBUG] [Thread-179529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:30:40.159 [DEBUG] [Thread-179529] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:30:40.159 [DEBUG] [Thread-179529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:30:40.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:30:40.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:30:40.161 [DEBUG] [Thread-179529] [transport.py] [_log()] userauth is OK
2026-04-12T00:30:40.161 [DEBUG] [Thread-179529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:30:40.161 [DEBUG] [Thread-179529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:30:40.162 [DEBUG] [Thread-179529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:30:40.162 [DEBUG] [Thread-179529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:30:40.193 [INFO] [Thread-179529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:30:40.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:30:41.020 [DEBUG] [Thread-179529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:30:41.020 [DEBUG] [Thread-179529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:30:41.021 [DEBUG] [Thread-179529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:30:41.040 [DEBUG] [Thread-179531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:41.061 [DEBUG] [Thread-179529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:30:41.061 [DEBUG] [Thread-179529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:30:41.064 [DEBUG] [Thread-179529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:30:41.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:30:41.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:30:41.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:30:41.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:30:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:30:41.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:30:41.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:30:41.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.937611 -999.00  +10.70  22.29     98  +10.40 1 3 1 3 1     0    0 0.20 -3.93 ----- 22.6 22.3 273.6 25.1 11.9 -1.3 11.8 -0.6 11.4 -1.1 11.8 -1.2
2026-04-12T00:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.937611
2026-04-12T00:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:30:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:30:19', tmtdew=-0.01499, humidity=100.066, cloud=0.0, wind=21.0154, temperature=10.7302, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:30:09.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:30:41.090 [DEBUG] [Thread-179529] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:30:41.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:30:41.181 [DEBUG] [Thread-179533] [transport.py] [_log()] starting thread (client mode): 0xb0f6ff40
2026-04-12T00:30:41.181 [DEBUG] [Thread-179533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:30:41.195 [DEBUG] [Thread-179533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:30:41.196 [INFO] [Thread-179533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:30:41.203 [DEBUG] [Thread-179533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:30:41.203 [DEBUG] [Thread-179533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:30:41.203 [DEBUG] [Thread-179533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] client lang: <none>
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] server lang: <none>
2026-04-12T00:30:41.204 [DEBUG] [Thread-179533] [transport.py] [_log()] kex follows: False
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] Compression: none
2026-04-12T00:30:41.205 [DEBUG] [Thread-179533] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:30:41.262 [DEBUG] [Thread-179533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:30:41.263 [DEBUG] [Thread-179533] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:30:41.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:30:41.264 [DEBUG] [Thread-179533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:30:41.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:30:41.322 [DEBUG] [Thread-179533] [transport.py] [_log()] userauth is OK
2026-04-12T00:30:41.322 [DEBUG] [Thread-179533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:30:41.323 [DEBUG] [Thread-179533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:30:41.323 [DEBUG] [Thread-179533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:30:41.323 [DEBUG] [Thread-179533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:30:41.341 [INFO] [Thread-179533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:30:41.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:30:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:30:42.167 [DEBUG] [Thread-179533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:30:42.168 [DEBUG] [Thread-179533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:30:42.217 [DEBUG] [Thread-179533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:30:42.217 [DEBUG] [Thread-179533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:30:42.229 [DEBUG] [Thread-179533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:30:42.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:30:42.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:30:42.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-04-12T00:30:42.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:30:42.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:30:42.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:30:42.275 [DEBUG] [Thread-179533] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:30:46.231 [DEBUG] [Thread-179535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:30:56.078 [DEBUG] [Thread-179536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:06.059 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:06.060 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:11.130 [DEBUG] [Thread-179537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:31:12.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:31:12.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-04-12T00:31:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 30, 54), -0.05011, 100.265, 0.0, 18.0317, 11.2931, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:31:13.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:30:54
2026-04-12T00:31:13.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:31:14.101 [DEBUG] [Thread-179538] [transport.py] [_log()] starting thread (client mode): 0xa7954190
2026-04-12T00:31:14.101 [DEBUG] [Thread-179538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:31:14.121 [DEBUG] [Thread-179538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:31:14.122 [INFO] [Thread-179538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:31:14.125 [DEBUG] [Thread-179538] [transport.py] [_log()] client lang: <none>
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] server lang: <none>
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] kex follows: False
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] Compression: none
2026-04-12T00:31:14.126 [DEBUG] [Thread-179538] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:31:14.144 [DEBUG] [Thread-179538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:31:14.145 [DEBUG] [Thread-179538] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:31:14.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:31:14.146 [DEBUG] [Thread-179538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:31:14.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:31:14.148 [DEBUG] [Thread-179538] [transport.py] [_log()] userauth is OK
2026-04-12T00:31:14.148 [DEBUG] [Thread-179538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:31:14.148 [DEBUG] [Thread-179538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:31:14.148 [DEBUG] [Thread-179538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:31:14.148 [DEBUG] [Thread-179538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:31:14.168 [INFO] [Thread-179538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:31:14.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:31:14.999 [DEBUG] [Thread-179538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:31:14.999 [DEBUG] [Thread-179538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:31:15.000 [DEBUG] [Thread-179538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:31:15.040 [DEBUG] [Thread-179538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:31:15.040 [DEBUG] [Thread-179538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:31:15.044 [DEBUG] [Thread-179538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:31:15.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:31:15.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:31:15.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:31:15.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:31:15.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:31:15.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:31:15.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:31:15.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:31:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:31:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.937958 -999.00  +10.70  16.98     98  +10.40 1 3 1 3 1     0    0 0.20 -4.10 ----- 19.1 17.0 289.2 24.1 11.9 -1.5 11.7 -0.5 11.4 -0.8 11.8 -0.7
2026-04-12T00:31:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:31:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:31:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.937958
2026-04-12T00:31:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:31:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:31:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:31:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:31:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:31:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:30:54', tmtdew=-0.05011, humidity=100.265, cloud=0.0, wind=18.0317, temperature=11.2931, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:30:39.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:31:15.070 [DEBUG] [Thread-179538] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:31:15.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:31:15.163 [DEBUG] [Thread-179541] [transport.py] [_log()] starting thread (client mode): 0xae50add0
2026-04-12T00:31:15.163 [DEBUG] [Thread-179541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:31:15.178 [DEBUG] [Thread-179541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:31:15.178 [INFO] [Thread-179541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] client lang: <none>
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] server lang: <none>
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] kex follows: False
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:31:15.186 [DEBUG] [Thread-179541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:31:15.187 [DEBUG] [Thread-179541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:31:15.187 [DEBUG] [Thread-179541] [transport.py] [_log()] Compression: none
2026-04-12T00:31:15.187 [DEBUG] [Thread-179541] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:31:15.244 [DEBUG] [Thread-179541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:31:15.244 [DEBUG] [Thread-179541] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:31:15.245 [DEBUG] [Thread-179541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:31:15.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:31:15.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:31:15.300 [DEBUG] [Thread-179541] [transport.py] [_log()] userauth is OK
2026-04-12T00:31:15.301 [DEBUG] [Thread-179541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:31:15.301 [DEBUG] [Thread-179541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:31:15.301 [DEBUG] [Thread-179541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:31:15.301 [DEBUG] [Thread-179541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:31:15.320 [INFO] [Thread-179541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:31:15.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:31:15.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:31:16.147 [DEBUG] [Thread-179541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:31:16.147 [DEBUG] [Thread-179541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:31:16.195 [DEBUG] [Thread-179541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:31:16.195 [DEBUG] [Thread-179541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:31:16.204 [DEBUG] [Thread-179541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:31:16.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:31:16.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-04-12T00:31:16.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-04-12T00:31:16.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:31:16.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:31:16.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:31:16.238 [DEBUG] [Thread-179541] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:31:26.169 [DEBUG] [Thread-179543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:41.209 [DEBUG] [Thread-179544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:46.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:31:46.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:31:46.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-04-12T00:31:46.288 [DEBUG] [Thread-179545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:31:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 31, 29), -0.02259, 100.116, 0.0, 18.2621, 10.8632, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:31:47.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:31:29
2026-04-12T00:31:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:31:48.088 [DEBUG] [Thread-179546] [transport.py] [_log()] starting thread (client mode): 0xae5f0a30
2026-04-12T00:31:48.088 [DEBUG] [Thread-179546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:31:48.108 [DEBUG] [Thread-179546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:31:48.108 [INFO] [Thread-179546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] client lang: <none>
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] server lang: <none>
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] kex follows: False
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:31:48.111 [DEBUG] [Thread-179546] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:31:48.112 [DEBUG] [Thread-179546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:31:48.112 [DEBUG] [Thread-179546] [transport.py] [_log()] Compression: none
2026-04-12T00:31:48.112 [DEBUG] [Thread-179546] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:31:48.127 [DEBUG] [Thread-179546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:31:48.127 [DEBUG] [Thread-179546] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:31:48.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:31:48.128 [DEBUG] [Thread-179546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:31:48.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:31:48.130 [DEBUG] [Thread-179546] [transport.py] [_log()] userauth is OK
2026-04-12T00:31:48.130 [DEBUG] [Thread-179546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:31:48.130 [DEBUG] [Thread-179546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:31:48.130 [DEBUG] [Thread-179546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:31:48.130 [DEBUG] [Thread-179546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:31:48.153 [INFO] [Thread-179546] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:31:48.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:31:48.945 [DEBUG] [Thread-179546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:31:48.945 [DEBUG] [Thread-179546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:31:48.946 [DEBUG] [Thread-179546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:31:48.986 [DEBUG] [Thread-179546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:31:48.987 [DEBUG] [Thread-179546] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:31:48.990 [DEBUG] [Thread-179546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:31:49.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:31:49.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:31:49.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:31:49.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:31:49.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:31:49.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:31:49.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:31:49.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:31:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:31:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.938305 -999.00  +10.70  16.93     98  +10.40 1 3 1 3 1     0    0 0.19 -4.32 ----- 18.6 16.9 273.2 23.4 11.9 -1.1 11.8 -0.7 11.4 -0.7 11.8 -1.4
2026-04-12T00:31:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:31:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:31:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.938305
2026-04-12T00:31:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:31:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:31:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:31:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:31:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:31:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:31:29', tmtdew=-0.02259, humidity=100.116, cloud=0.0, wind=18.2621, temperature=10.8632, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:31:09.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:31:49.019 [DEBUG] [Thread-179546] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:31:49.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:31:49.113 [DEBUG] [Thread-179549] [transport.py] [_log()] starting thread (client mode): 0xae509c60
2026-04-12T00:31:49.113 [DEBUG] [Thread-179549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:31:49.128 [DEBUG] [Thread-179549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:31:49.128 [INFO] [Thread-179549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] client lang: <none>
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] server lang: <none>
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] kex follows: False
2026-04-12T00:31:49.136 [DEBUG] [Thread-179549] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:31:49.137 [DEBUG] [Thread-179549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:31:49.137 [DEBUG] [Thread-179549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:31:49.137 [DEBUG] [Thread-179549] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:31:49.137 [DEBUG] [Thread-179549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:31:49.137 [DEBUG] [Thread-179549] [transport.py] [_log()] Compression: none
2026-04-12T00:31:49.137 [DEBUG] [Thread-179549] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:31:49.195 [DEBUG] [Thread-179549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:31:49.196 [DEBUG] [Thread-179549] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:31:49.196 [DEBUG] [Thread-179549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:31:49.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:31:49.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:31:49.253 [DEBUG] [Thread-179549] [transport.py] [_log()] userauth is OK
2026-04-12T00:31:49.253 [DEBUG] [Thread-179549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:31:49.253 [DEBUG] [Thread-179549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:31:49.253 [DEBUG] [Thread-179549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:31:49.253 [DEBUG] [Thread-179549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:31:49.274 [INFO] [Thread-179549] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:31:49.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:31:49.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:31:50.124 [DEBUG] [Thread-179549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:31:50.124 [DEBUG] [Thread-179549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:31:50.172 [DEBUG] [Thread-179549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:31:50.172 [DEBUG] [Thread-179549] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:31:50.182 [DEBUG] [Thread-179549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:31:50.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:31:50.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-04-12T00:31:50.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:31:50.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:31:50.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:31:50.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:31:50.218 [DEBUG] [Thread-179549] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:31:56.247 [DEBUG] [Thread-179551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:06.265 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:06.266 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:11.309 [DEBUG] [Thread-179552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:20.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:32:20.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:32:20.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:32:21.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 32, 5), -0.02509, 100.132, 0.0, 19.5145, 10.8632, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:32:21.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:32:05
2026-04-12T00:32:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:32:22.092 [DEBUG] [Thread-179553] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb90
2026-04-12T00:32:22.092 [DEBUG] [Thread-179553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:32:22.112 [DEBUG] [Thread-179553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:32:22.113 [INFO] [Thread-179553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] client lang: <none>
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] server lang: <none>
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] kex follows: False
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] Compression: none
2026-04-12T00:32:22.116 [DEBUG] [Thread-179553] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:32:22.133 [DEBUG] [Thread-179553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:32:22.134 [DEBUG] [Thread-179553] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:32:22.134 [DEBUG] [Thread-179553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:32:22.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:32:22.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:32:22.136 [DEBUG] [Thread-179553] [transport.py] [_log()] userauth is OK
2026-04-12T00:32:22.136 [DEBUG] [Thread-179553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:32:22.136 [DEBUG] [Thread-179553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:32:22.136 [DEBUG] [Thread-179553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:32:22.137 [DEBUG] [Thread-179553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:32:22.160 [INFO] [Thread-179553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:32:22.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:32:22.946 [DEBUG] [Thread-179553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:32:22.946 [DEBUG] [Thread-179553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:32:22.946 [DEBUG] [Thread-179553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:32:22.987 [DEBUG] [Thread-179553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:32:22.987 [DEBUG] [Thread-179553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:32:22.990 [DEBUG] [Thread-179553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:32:23.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:32:23.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:32:23.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:32:23.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:32:23.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:32:23.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:32:23.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:32:23.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:32:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:32:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.938653 -999.00  +10.70  21.47     98  +10.40 1 3 1 3 1     0    0 0.20 -4.23 ----- 19.6 21.5 270.8 26.3 11.9 -1.5 11.8 -0.6 11.4 -1.1 11.8 -0.7
2026-04-12T00:32:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:32:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:32:23.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.938653
2026-04-12T00:32:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:32:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:32:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:32:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:32:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:32:23.016 [DEBUG] [Thread-179553] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:32:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:32:05', tmtdew=-0.02509, humidity=100.132, cloud=0.0, wind=19.5145, temperature=10.8632, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:31:39.619', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:32:23.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:32:23.121 [DEBUG] [Thread-179556] [transport.py] [_log()] starting thread (client mode): 0xae508700
2026-04-12T00:32:23.121 [DEBUG] [Thread-179556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:32:23.136 [DEBUG] [Thread-179556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:32:23.137 [INFO] [Thread-179556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:32:23.144 [DEBUG] [Thread-179556] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:32:23.144 [DEBUG] [Thread-179556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:32:23.144 [DEBUG] [Thread-179556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:32:23.144 [DEBUG] [Thread-179556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:23.144 [DEBUG] [Thread-179556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] client lang: <none>
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] server lang: <none>
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] kex follows: False
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:32:23.145 [DEBUG] [Thread-179556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:32:23.146 [DEBUG] [Thread-179556] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:32:23.146 [DEBUG] [Thread-179556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:32:23.146 [DEBUG] [Thread-179556] [transport.py] [_log()] Compression: none
2026-04-12T00:32:23.146 [DEBUG] [Thread-179556] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:32:23.202 [DEBUG] [Thread-179556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:32:23.203 [DEBUG] [Thread-179556] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:32:23.203 [DEBUG] [Thread-179556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:32:23.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:32:23.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:32:23.258 [DEBUG] [Thread-179556] [transport.py] [_log()] userauth is OK
2026-04-12T00:32:23.258 [DEBUG] [Thread-179556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:32:23.258 [DEBUG] [Thread-179556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:32:23.258 [DEBUG] [Thread-179556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:32:23.258 [DEBUG] [Thread-179556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:32:23.276 [INFO] [Thread-179556] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:32:23.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:32:23.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:32:24.082 [DEBUG] [Thread-179556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:32:24.082 [DEBUG] [Thread-179556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:32:24.130 [DEBUG] [Thread-179556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:32:24.130 [DEBUG] [Thread-179556] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:32:24.138 [DEBUG] [Thread-179556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:32:24.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:32:24.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-04-12T00:32:24.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-04-12T00:32:24.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:32:24.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:32:24.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:32:24.171 [DEBUG] [Thread-179556] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:32:26.341 [DEBUG] [Thread-179558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:41.391 [DEBUG] [Thread-179559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:46.350 [DEBUG] [Thread-179560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:32:54.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:32:54.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-04-12T00:32:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 32, 41), -0.05515, 100.298, 0.0, 24.4879, 11.2933, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:32:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:32:41
2026-04-12T00:32:55.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:32:55.959 [DEBUG] [Thread-179561] [transport.py] [_log()] starting thread (client mode): 0xa7955270
2026-04-12T00:32:55.959 [DEBUG] [Thread-179561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:32:55.976 [DEBUG] [Thread-179561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:32:55.976 [INFO] [Thread-179561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:55.977 [DEBUG] [Thread-179561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] client lang: <none>
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] server lang: <none>
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] kex follows: False
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] Compression: none
2026-04-12T00:32:55.978 [DEBUG] [Thread-179561] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:32:55.987 [DEBUG] [Thread-179561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:32:55.987 [DEBUG] [Thread-179561] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:32:55.987 [DEBUG] [Thread-179561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:32:55.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:32:55.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:32:55.988 [DEBUG] [Thread-179561] [transport.py] [_log()] userauth is OK
2026-04-12T00:32:55.988 [DEBUG] [Thread-179561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:32:55.989 [DEBUG] [Thread-179561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:32:55.989 [DEBUG] [Thread-179561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:32:55.989 [DEBUG] [Thread-179561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:32:56.004 [INFO] [Thread-179561] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:32:56.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:32:56.426 [DEBUG] [Thread-179563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:32:56.782 [DEBUG] [Thread-179561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:32:56.782 [DEBUG] [Thread-179561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:32:56.782 [DEBUG] [Thread-179561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:32:56.824 [DEBUG] [Thread-179561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:32:56.824 [DEBUG] [Thread-179561] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:32:56.828 [DEBUG] [Thread-179561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:32:56.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:32:56.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:32:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:32:56.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:32:56.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:32:56.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:32:56.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:32:56.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:32:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:32:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.939000 -999.00  +10.70  19.11     98  +10.40 1 3 1 3 1     0    0 0.18 -4.36 ----- 21.5 19.1 279.0 27.0 11.9 -1.4 11.8 -0.7 11.4 -0.7 11.8 -1.0
2026-04-12T00:32:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:32:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:32:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.939000
2026-04-12T00:32:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:32:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:32:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:32:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:32:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:32:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:32:41', tmtdew=-0.05515, humidity=100.298, cloud=0.0, wind=24.4879, temperature=11.2933, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:32:09.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:32:56.856 [DEBUG] [Thread-179561] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:32:56.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:32:56.960 [DEBUG] [Thread-179565] [transport.py] [_log()] starting thread (client mode): 0xae509180
2026-04-12T00:32:56.960 [DEBUG] [Thread-179565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:32:56.975 [DEBUG] [Thread-179565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:32:56.975 [INFO] [Thread-179565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:32:56.982 [DEBUG] [Thread-179565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:32:56.983 [DEBUG] [Thread-179565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] client lang: <none>
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] server lang: <none>
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] kex follows: False
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] Compression: none
2026-04-12T00:32:56.984 [DEBUG] [Thread-179565] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:32:57.041 [DEBUG] [Thread-179565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:32:57.042 [DEBUG] [Thread-179565] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:32:57.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:32:57.044 [DEBUG] [Thread-179565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:32:57.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:32:57.097 [DEBUG] [Thread-179565] [transport.py] [_log()] userauth is OK
2026-04-12T00:32:57.097 [DEBUG] [Thread-179565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:32:57.097 [DEBUG] [Thread-179565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:32:57.098 [DEBUG] [Thread-179565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:32:57.098 [DEBUG] [Thread-179565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:32:57.120 [INFO] [Thread-179565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:32:57.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:32:57.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:32:57.943 [DEBUG] [Thread-179565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:32:57.943 [DEBUG] [Thread-179565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:32:57.991 [DEBUG] [Thread-179565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:32:57.992 [DEBUG] [Thread-179565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:32:58.001 [DEBUG] [Thread-179565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:32:58.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:32:58.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-04-12T00:32:58.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-04-12T00:32:58.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:32:58.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:32:58.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:32:58.034 [DEBUG] [Thread-179565] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:33:06.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:33:06.470 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:33:11.461 [DEBUG] [Thread-179567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:33:26.514 [DEBUG] [Thread-179568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:33:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:33:28.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:33:28.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-04-12T00:33:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 33, 17), -0.022555, 100.116, 0.0, 22.4442, 10.78, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:33:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:33:17
2026-04-12T00:33:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:33:29.896 [DEBUG] [Thread-179569] [transport.py] [_log()] starting thread (client mode): 0xae508340
2026-04-12T00:33:29.896 [DEBUG] [Thread-179569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:33:29.916 [DEBUG] [Thread-179569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:33:29.917 [INFO] [Thread-179569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] client lang: <none>
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] server lang: <none>
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] kex follows: False
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:33:29.920 [DEBUG] [Thread-179569] [transport.py] [_log()] Compression: none
2026-04-12T00:33:29.921 [DEBUG] [Thread-179569] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:33:29.937 [DEBUG] [Thread-179569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:33:29.938 [DEBUG] [Thread-179569] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:33:29.938 [DEBUG] [Thread-179569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:33:29.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:33:29.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:33:29.941 [DEBUG] [Thread-179569] [transport.py] [_log()] userauth is OK
2026-04-12T00:33:29.942 [DEBUG] [Thread-179569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:33:29.942 [DEBUG] [Thread-179569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:33:29.942 [DEBUG] [Thread-179569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:33:29.942 [DEBUG] [Thread-179569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:33:29.966 [INFO] [Thread-179569] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:33:29.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:33:30.749 [DEBUG] [Thread-179569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:33:30.749 [DEBUG] [Thread-179569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:33:30.750 [DEBUG] [Thread-179569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:33:30.790 [DEBUG] [Thread-179569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:33:30.790 [DEBUG] [Thread-179569] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:33:30.793 [DEBUG] [Thread-179569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:33:30.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:33:30.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:33:30.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:33:30.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:33:30.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:33:30.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:33:30.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:33:30.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:33:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:33:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.939347 -999.00  +10.70  20.40     98  +10.40 1 3 1 3 1     0    0 0.18 -4.55 ----- 20.5 20.4 277.4 26.3 11.9 -1.5 11.8 -0.6 11.4 -0.8 11.8 -0.8
2026-04-12T00:33:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:33:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:33:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.939347
2026-04-12T00:33:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:33:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:33:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:33:30.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:33:30.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:33:30.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:33:17', tmtdew=-0.022555, humidity=100.116, cloud=0.0, wind=22.4442, temperature=10.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:32:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:33:30.820 [DEBUG] [Thread-179569] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:33:30.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:33:30.923 [DEBUG] [Thread-179572] [transport.py] [_log()] starting thread (client mode): 0xa7954be0
2026-04-12T00:33:30.923 [DEBUG] [Thread-179572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:33:30.938 [DEBUG] [Thread-179572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:33:30.938 [INFO] [Thread-179572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:33:30.945 [DEBUG] [Thread-179572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:33:30.945 [DEBUG] [Thread-179572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] client lang: <none>
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] server lang: <none>
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] kex follows: False
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] Compression: none
2026-04-12T00:33:30.946 [DEBUG] [Thread-179572] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:33:31.010 [DEBUG] [Thread-179572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:33:31.011 [DEBUG] [Thread-179572] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:33:31.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:33:31.012 [DEBUG] [Thread-179572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:33:31.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:33:31.071 [DEBUG] [Thread-179572] [transport.py] [_log()] userauth is OK
2026-04-12T00:33:31.071 [DEBUG] [Thread-179572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:33:31.071 [DEBUG] [Thread-179572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:33:31.072 [DEBUG] [Thread-179572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:33:31.072 [DEBUG] [Thread-179572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:33:31.089 [INFO] [Thread-179572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:33:31.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:33:31.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:33:31.925 [DEBUG] [Thread-179572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:33:31.926 [DEBUG] [Thread-179572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:33:31.973 [DEBUG] [Thread-179572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:33:31.973 [DEBUG] [Thread-179572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:33:31.983 [DEBUG] [Thread-179572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:33:31.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:33:31.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-04-12T00:33:32.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-04-12T00:33:32.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:33:32.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:33:32.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:33:32.020 [DEBUG] [Thread-179572] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:33:41.550 [DEBUG] [Thread-179574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:33:46.406 [DEBUG] [Thread-179575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:33:56.604 [DEBUG] [Thread-179576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:02.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:34:02.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:34: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-04-12T00:34:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 33, 52), -0.05007, 100.265, 0.0, 20.4307, 11.227, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:34:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:33:52
2026-04-12T00:34:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:34:03.860 [DEBUG] [Thread-179577] [transport.py] [_log()] starting thread (client mode): 0xae5a6890
2026-04-12T00:34:03.860 [DEBUG] [Thread-179577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:34:03.879 [DEBUG] [Thread-179577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:34:03.879 [INFO] [Thread-179577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] client lang: <none>
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] server lang: <none>
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] kex follows: False
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] Compression: none
2026-04-12T00:34:03.882 [DEBUG] [Thread-179577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:34:03.893 [DEBUG] [Thread-179577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:34:03.894 [DEBUG] [Thread-179577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:34:03.894 [DEBUG] [Thread-179577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:34:03.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:34:03.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:34:03.896 [DEBUG] [Thread-179577] [transport.py] [_log()] userauth is OK
2026-04-12T00:34:03.896 [DEBUG] [Thread-179577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:34:03.896 [DEBUG] [Thread-179577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:34:03.897 [DEBUG] [Thread-179577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:34:03.897 [DEBUG] [Thread-179577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:34:03.920 [INFO] [Thread-179577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:34:03.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:34:04.716 [DEBUG] [Thread-179577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:34:04.716 [DEBUG] [Thread-179577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:34:04.717 [DEBUG] [Thread-179577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:34:04.757 [DEBUG] [Thread-179577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:34:04.757 [DEBUG] [Thread-179577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:34:04.760 [DEBUG] [Thread-179577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:34:04.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:34:04.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:34:04.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:34:04.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:34:04.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:34:04.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:34:04.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:34:04.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:34:04.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:34:04.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.939694 -999.00  +10.70  17.42     98  +10.40 1 3 1 3 1     0    0 0.18 -4.57 ----- 14.4 17.4 277.8 23.3 12.0 -1.0 11.8 -1.8 11.4 -1.2 11.8 -0.9
2026-04-12T00:34:04.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:34:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:34:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.939694
2026-04-12T00:34:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:34:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:34:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:34:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:34:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:34:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:33:52', tmtdew=-0.05007, humidity=100.265, cloud=0.0, wind=20.4307, temperature=11.227, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:33:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:34:04.785 [DEBUG] [Thread-179577] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:34:04.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:34:04.879 [DEBUG] [Thread-179580] [transport.py] [_log()] starting thread (client mode): 0xae5a7850
2026-04-12T00:34:04.879 [DEBUG] [Thread-179580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:34:04.894 [DEBUG] [Thread-179580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:34:04.894 [INFO] [Thread-179580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:04.902 [DEBUG] [Thread-179580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] client lang: <none>
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] server lang: <none>
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] kex follows: False
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] Compression: none
2026-04-12T00:34:04.903 [DEBUG] [Thread-179580] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:34:04.958 [DEBUG] [Thread-179580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:34:04.958 [DEBUG] [Thread-179580] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:34:04.959 [DEBUG] [Thread-179580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:34:04.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:34:04.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:34:05.016 [DEBUG] [Thread-179580] [transport.py] [_log()] userauth is OK
2026-04-12T00:34:05.016 [DEBUG] [Thread-179580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:34:05.016 [DEBUG] [Thread-179580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:34:05.016 [DEBUG] [Thread-179580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:34:05.017 [DEBUG] [Thread-179580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:34:05.035 [INFO] [Thread-179580] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:34:05.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:34:05.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:34:05.864 [DEBUG] [Thread-179580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:34:05.864 [DEBUG] [Thread-179580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:34:05.912 [DEBUG] [Thread-179580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:34:05.912 [DEBUG] [Thread-179580] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:34:05.921 [DEBUG] [Thread-179580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:34:05.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:34:05.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:34:05.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-04-12T00:34:05.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:34:05.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:34:05.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:34:05.959 [DEBUG] [Thread-179580] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:34:06.674 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:06.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:11.640 [DEBUG] [Thread-179582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:26.692 [DEBUG] [Thread-179583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:34:35.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:34:35.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:34:37.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 34, 28), -0.020085, 100.099, 0.0, 20.1503, 10.7966, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:34:37.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:34:28
2026-04-12T00:34:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:34:37.811 [DEBUG] [Thread-179584] [transport.py] [_log()] starting thread (client mode): 0xae50afb0
2026-04-12T00:34:37.811 [DEBUG] [Thread-179584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:34:37.826 [DEBUG] [Thread-179584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:34:37.826 [INFO] [Thread-179584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:34:37.829 [DEBUG] [Thread-179584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] client lang: <none>
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] server lang: <none>
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] kex follows: False
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] Compression: none
2026-04-12T00:34:37.830 [DEBUG] [Thread-179584] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:34:37.847 [DEBUG] [Thread-179584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:34:37.847 [DEBUG] [Thread-179584] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:34:37.848 [DEBUG] [Thread-179584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:34:37.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:34:37.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:34:37.850 [DEBUG] [Thread-179584] [transport.py] [_log()] userauth is OK
2026-04-12T00:34:37.850 [DEBUG] [Thread-179584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:34:37.850 [DEBUG] [Thread-179584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:34:37.850 [DEBUG] [Thread-179584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:34:37.850 [DEBUG] [Thread-179584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:34:37.874 [INFO] [Thread-179584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:34:37.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:34:38.641 [DEBUG] [Thread-179584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:34:38.642 [DEBUG] [Thread-179584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:34:38.642 [DEBUG] [Thread-179584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:34:38.683 [DEBUG] [Thread-179584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:34:38.683 [DEBUG] [Thread-179584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:34:38.687 [DEBUG] [Thread-179584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:34:38.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:34:38.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:34:38.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:34:38.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:34:38.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:34:38.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:34:38.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:34:38.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:34:38.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:34:38.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.940389 -999.00  +10.70  19.33     98  +10.40 1 3 1 3 1     0    0 0.20 -3.67 ----- 21.1 19.3 278.4 24.2 11.9 -1.1 11.8 -1.3 11.4 -0.9 11.8 -0.7
2026-04-12T00:34:38.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:34:38.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:34:38.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.940389
2026-04-12T00:34:38.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:34:38.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:34:38.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:34:38.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:34:38.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:34:38.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:34:28', tmtdew=-0.020085, humidity=100.099, cloud=0.0, wind=20.1503, temperature=10.7966, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:34:09.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:34:38.715 [DEBUG] [Thread-179584] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:34:38.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:34:38.814 [DEBUG] [Thread-179587] [transport.py] [_log()] starting thread (client mode): 0xae508820
2026-04-12T00:34:38.814 [DEBUG] [Thread-179587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:34:38.830 [DEBUG] [Thread-179587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:34:38.830 [INFO] [Thread-179587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:38.840 [DEBUG] [Thread-179587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] client lang: <none>
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] server lang: <none>
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] kex follows: False
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] Compression: none
2026-04-12T00:34:38.841 [DEBUG] [Thread-179587] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:34:38.897 [DEBUG] [Thread-179587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:34:38.897 [DEBUG] [Thread-179587] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:34:38.898 [DEBUG] [Thread-179587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:34:38.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:34:38.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:34:38.962 [DEBUG] [Thread-179587] [transport.py] [_log()] userauth is OK
2026-04-12T00:34:38.963 [DEBUG] [Thread-179587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:34:38.963 [DEBUG] [Thread-179587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:34:38.963 [DEBUG] [Thread-179587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:34:38.963 [DEBUG] [Thread-179587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:34:38.985 [INFO] [Thread-179587] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:34:38.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:34:38.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:34:39.818 [DEBUG] [Thread-179587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:34:39.818 [DEBUG] [Thread-179587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:34:39.866 [DEBUG] [Thread-179587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:34:39.866 [DEBUG] [Thread-179587] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:34:39.876 [DEBUG] [Thread-179587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:34:39.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:34:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:34:39.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:34:39.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:34:39.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:34:39.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:34:39.918 [DEBUG] [Thread-179587] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:34:41.725 [DEBUG] [Thread-179589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:46.473 [DEBUG] [Thread-179590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:34:56.780 [DEBUG] [Thread-179591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:06.884 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:06.885 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:35:09.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:35:09.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-04-12T00:35:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 35, 3), -0.02511, 100.133, 0.0, 20.5207, 10.8133, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:35:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:35:03
2026-04-12T00:35:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:35:11.738 [DEBUG] [Thread-179592] [transport.py] [_log()] starting thread (client mode): 0xa79564d0
2026-04-12T00:35:11.738 [DEBUG] [Thread-179592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:35:11.758 [DEBUG] [Thread-179592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:35:11.758 [INFO] [Thread-179592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] client lang: <none>
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] server lang: <none>
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] kex follows: False
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] Compression: none
2026-04-12T00:35:11.761 [DEBUG] [Thread-179592] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:35:11.770 [DEBUG] [Thread-179592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:35:11.770 [DEBUG] [Thread-179592] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:35:11.770 [DEBUG] [Thread-179592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:35:11.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:35:11.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:35:11.772 [DEBUG] [Thread-179592] [transport.py] [_log()] userauth is OK
2026-04-12T00:35:11.772 [DEBUG] [Thread-179592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:35:11.772 [DEBUG] [Thread-179592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:35:11.773 [DEBUG] [Thread-179592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:35:11.773 [DEBUG] [Thread-179592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:35:11.790 [INFO] [Thread-179592] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:35:11.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:35:11.818 [DEBUG] [Thread-179594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:13.067 [DEBUG] [Thread-179592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:35:13.068 [DEBUG] [Thread-179592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:35:13.068 [DEBUG] [Thread-179592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:35:13.108 [DEBUG] [Thread-179592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:35:13.108 [DEBUG] [Thread-179592] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:35:13.112 [DEBUG] [Thread-179592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:35:13.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:35:13.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:35:13.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:35:13.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:35:13.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:35:13.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:35:13.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:35:13.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:35:13.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:35:13.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.940736 -999.00  +10.70  17.37     98  +10.40 1 3 1 3 1     0    0 0.21 -3.38 ----- 16.9 17.4 279.6 24.7 12.0 -1.2 11.8 -1.3 11.4 -0.5 11.8 -0.6
2026-04-12T00:35:13.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:35:13.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:35:13.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.940736
2026-04-12T00:35:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:35:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:35:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:35:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:35:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:35:13.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:35:03', tmtdew=-0.02511, humidity=100.133, cloud=0.0, wind=20.5207, temperature=10.8133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:34:39.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:35:13.138 [DEBUG] [Thread-179592] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:35:13.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:35:13.229 [DEBUG] [Thread-179596] [transport.py] [_log()] starting thread (client mode): 0xa79540d0
2026-04-12T00:35:13.229 [DEBUG] [Thread-179596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:35:13.244 [DEBUG] [Thread-179596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:35:13.244 [INFO] [Thread-179596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:35:13.252 [DEBUG] [Thread-179596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:35:13.252 [DEBUG] [Thread-179596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:35:13.252 [DEBUG] [Thread-179596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:35:13.252 [DEBUG] [Thread-179596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:13.252 [DEBUG] [Thread-179596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] client lang: <none>
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] server lang: <none>
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] kex follows: False
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:35:13.253 [DEBUG] [Thread-179596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:35:13.254 [DEBUG] [Thread-179596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:35:13.254 [DEBUG] [Thread-179596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:35:13.254 [DEBUG] [Thread-179596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:35:13.255 [DEBUG] [Thread-179596] [transport.py] [_log()] Compression: none
2026-04-12T00:35:13.255 [DEBUG] [Thread-179596] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:35:13.311 [DEBUG] [Thread-179596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:35:13.312 [DEBUG] [Thread-179596] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:35:13.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:35:13.313 [DEBUG] [Thread-179596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:35:13.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:35:13.367 [DEBUG] [Thread-179596] [transport.py] [_log()] userauth is OK
2026-04-12T00:35:13.367 [DEBUG] [Thread-179596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:35:13.367 [DEBUG] [Thread-179596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:35:13.367 [DEBUG] [Thread-179596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:35:13.367 [DEBUG] [Thread-179596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:35:13.387 [INFO] [Thread-179596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:35:13.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:35:13.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:35:14.256 [DEBUG] [Thread-179596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:35:14.256 [DEBUG] [Thread-179596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:35:14.304 [DEBUG] [Thread-179596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:35:14.304 [DEBUG] [Thread-179596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:35:14.314 [DEBUG] [Thread-179596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:35:14.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:35:14.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-04-12T00:35:14.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-04-12T00:35:14.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:35:14.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:35:14.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:35:14.352 [DEBUG] [Thread-179596] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:35:26.857 [DEBUG] [Thread-179598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:41.913 [DEBUG] [Thread-179599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:35:44.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:35:44.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-04-12T00:35:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 35, 3), -0.02511, 100.133, 0.0, 20.5207, 10.8133, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:35:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:35:03
2026-04-12T00:35:46.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:35:46.221 [DEBUG] [Thread-179600] [transport.py] [_log()] starting thread (client mode): 0xae5a6e30
2026-04-12T00:35:46.221 [DEBUG] [Thread-179600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:35:46.241 [DEBUG] [Thread-179600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:35:46.241 [INFO] [Thread-179600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:35:46.244 [DEBUG] [Thread-179600] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:35:46.244 [DEBUG] [Thread-179600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:35:46.244 [DEBUG] [Thread-179600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:35:46.244 [DEBUG] [Thread-179600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:46.244 [DEBUG] [Thread-179600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] client lang: <none>
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] server lang: <none>
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] kex follows: False
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:35:46.245 [DEBUG] [Thread-179600] [transport.py] [_log()] Compression: none
2026-04-12T00:35:46.246 [DEBUG] [Thread-179600] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:35:46.264 [DEBUG] [Thread-179600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:35:46.265 [DEBUG] [Thread-179600] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:35:46.265 [DEBUG] [Thread-179600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:35:46.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:35:46.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:35:46.267 [DEBUG] [Thread-179600] [transport.py] [_log()] userauth is OK
2026-04-12T00:35:46.268 [DEBUG] [Thread-179600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:35:46.268 [DEBUG] [Thread-179600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:35:46.268 [DEBUG] [Thread-179600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:35:46.268 [DEBUG] [Thread-179600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:35:46.293 [INFO] [Thread-179600] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:35:46.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:35:46.532 [DEBUG] [Thread-179602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:35:47.079 [DEBUG] [Thread-179600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:35:47.085 [DEBUG] [Thread-179600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:35:47.086 [DEBUG] [Thread-179600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:35:47.120 [DEBUG] [Thread-179600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:35:47.120 [DEBUG] [Thread-179600] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:35:47.124 [DEBUG] [Thread-179600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:35:47.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:35:47.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:35:47.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:35:47.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:35:47.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:35:47.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:35:47.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:35:47.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:35:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:35:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.941083 -999.00  +10.70  18.95     98  +10.50 1 3 1 3 1     0    0 0.21 -3.42 ----- 15.4 18.9 272.8 21.9 12.0 -0.8 11.8 -1.3 11.4 -0.9 11.8 -0.7
2026-04-12T00:35:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:35:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:35:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.941083
2026-04-12T00:35:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:35:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:35:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:35:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:35:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:35:47.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:35:03', tmtdew=-0.02511, humidity=100.133, cloud=0.0, wind=20.5207, temperature=10.8133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:35:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:35:47.152 [DEBUG] [Thread-179600] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:35:47.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:35:47.246 [DEBUG] [Thread-179604] [transport.py] [_log()] starting thread (client mode): 0xae50ba30
2026-04-12T00:35:47.246 [DEBUG] [Thread-179604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:35:47.264 [DEBUG] [Thread-179604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:35:47.264 [INFO] [Thread-179604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:35:47.272 [DEBUG] [Thread-179604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:35:47.272 [DEBUG] [Thread-179604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:35:47.273 [DEBUG] [Thread-179604] [transport.py] [_log()] client lang: <none>
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] server lang: <none>
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] kex follows: False
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:35:47.274 [DEBUG] [Thread-179604] [transport.py] [_log()] Compression: none
2026-04-12T00:35:47.275 [DEBUG] [Thread-179604] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:35:47.331 [DEBUG] [Thread-179604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:35:47.331 [DEBUG] [Thread-179604] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:35:47.332 [DEBUG] [Thread-179604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:35:47.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:35:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:35:47.390 [DEBUG] [Thread-179604] [transport.py] [_log()] userauth is OK
2026-04-12T00:35:47.391 [DEBUG] [Thread-179604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:35:47.391 [DEBUG] [Thread-179604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:35:47.391 [DEBUG] [Thread-179604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:35:47.392 [DEBUG] [Thread-179604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:35:47.410 [INFO] [Thread-179604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:35:47.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:35:47.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:35:48.293 [DEBUG] [Thread-179604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:35:48.294 [DEBUG] [Thread-179604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:35:48.342 [DEBUG] [Thread-179604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:35:48.342 [DEBUG] [Thread-179604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:35:48.352 [DEBUG] [Thread-179604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:35:48.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:35:48.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-04-12T00:35:48.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-04-12T00:35:48.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:35:48.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:35:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:35:48.389 [DEBUG] [Thread-179604] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:35:56.951 [DEBUG] [Thread-179606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:07.088 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:07.089 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:12.001 [DEBUG] [Thread-179607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:36:18.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:36:18.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-04-12T00:36:19.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 35, 38), -0.05512, 100.298, 0.0, 25.4405, 11.2602, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:36:19.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:35:38
2026-04-12T00:36:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:36:20.268 [DEBUG] [Thread-179608] [transport.py] [_log()] starting thread (client mode): 0xa7954550
2026-04-12T00:36:20.269 [DEBUG] [Thread-179608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:36:20.290 [DEBUG] [Thread-179608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:36:20.290 [INFO] [Thread-179608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:36:20.293 [DEBUG] [Thread-179608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] client lang: <none>
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] server lang: <none>
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] kex follows: False
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:36:20.294 [DEBUG] [Thread-179608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:36:20.295 [DEBUG] [Thread-179608] [transport.py] [_log()] Compression: none
2026-04-12T00:36:20.295 [DEBUG] [Thread-179608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:36:20.313 [DEBUG] [Thread-179608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:36:20.314 [DEBUG] [Thread-179608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:36:20.314 [DEBUG] [Thread-179608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:36:20.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:36:20.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:36:20.316 [DEBUG] [Thread-179608] [transport.py] [_log()] userauth is OK
2026-04-12T00:36:20.316 [DEBUG] [Thread-179608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:36:20.316 [DEBUG] [Thread-179608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:36:20.316 [DEBUG] [Thread-179608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:36:20.316 [DEBUG] [Thread-179608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:36:20.339 [INFO] [Thread-179608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:36:20.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:36:21.132 [DEBUG] [Thread-179608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:36:21.132 [DEBUG] [Thread-179608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:36:21.133 [DEBUG] [Thread-179608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:36:21.173 [DEBUG] [Thread-179608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:36:21.173 [DEBUG] [Thread-179608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:36:21.177 [DEBUG] [Thread-179608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:36:21.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:36:21.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:36:21.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:36:21.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:36:21.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:36:21.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:36:21.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:36:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.941430 -999.00  +10.70  17.21     98  +10.50 1 3 1 3 1     0    0 0.20 -3.55 ----- 16.0 17.2 284.6 19.0 11.9 -1.2 11.8 -1.0 11.5 -1.0 11.8 -0.5
2026-04-12T00:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:36:21.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.941430
2026-04-12T00:36:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:36:21.202 [DEBUG] [Thread-179608] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:36:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:35:38', tmtdew=-0.05512, humidity=100.298, cloud=0.0, wind=25.4405, temperature=11.2602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:35:39.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:36:21.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:36:21.310 [DEBUG] [Thread-179611] [transport.py] [_log()] starting thread (client mode): 0xae5a6980
2026-04-12T00:36:21.310 [DEBUG] [Thread-179611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:36:21.325 [DEBUG] [Thread-179611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:36:21.325 [INFO] [Thread-179611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] client lang: <none>
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] server lang: <none>
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] kex follows: False
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:36:21.333 [DEBUG] [Thread-179611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:36:21.334 [DEBUG] [Thread-179611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:36:21.334 [DEBUG] [Thread-179611] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:36:21.334 [DEBUG] [Thread-179611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:36:21.334 [DEBUG] [Thread-179611] [transport.py] [_log()] Compression: none
2026-04-12T00:36:21.334 [DEBUG] [Thread-179611] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:36:21.394 [DEBUG] [Thread-179611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:36:21.394 [DEBUG] [Thread-179611] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:36:21.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:36:21.396 [DEBUG] [Thread-179611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:36:21.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:36:21.452 [DEBUG] [Thread-179611] [transport.py] [_log()] userauth is OK
2026-04-12T00:36:21.452 [DEBUG] [Thread-179611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:36:21.453 [DEBUG] [Thread-179611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:36:21.453 [DEBUG] [Thread-179611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:36:21.453 [DEBUG] [Thread-179611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:36:21.471 [INFO] [Thread-179611] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:36:21.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:36:21.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:36:22.295 [DEBUG] [Thread-179611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:36:22.295 [DEBUG] [Thread-179611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:36:22.343 [DEBUG] [Thread-179611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:36:22.343 [DEBUG] [Thread-179611] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:36:22.352 [DEBUG] [Thread-179611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:36:22.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:36:22.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-04-12T00:36:22.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-04-12T00:36:22.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:36:22.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:36:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:36:22.389 [DEBUG] [Thread-179611] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:36:27.043 [DEBUG] [Thread-179613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:42.095 [DEBUG] [Thread-179614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:46.601 [DEBUG] [Thread-179615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:36:52.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:36:52.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:36:52.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-04-12T00:36:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 36, 14), 0.027535, 100.116, 0.0, 21.8261, 10.7472, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:36:53.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:36:14
2026-04-12T00:36:54.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:36:54.261 [DEBUG] [Thread-179616] [transport.py] [_log()] starting thread (client mode): 0xae534a30
2026-04-12T00:36:54.262 [DEBUG] [Thread-179616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:36:54.281 [DEBUG] [Thread-179616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:36:54.282 [INFO] [Thread-179616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:36:54.283 [DEBUG] [Thread-179616] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] client lang: <none>
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] server lang: <none>
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] kex follows: False
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] Compression: none
2026-04-12T00:36:54.284 [DEBUG] [Thread-179616] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:36:54.292 [DEBUG] [Thread-179616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:36:54.293 [DEBUG] [Thread-179616] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:36:54.293 [DEBUG] [Thread-179616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:36:54.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:36:54.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:36:54.295 [DEBUG] [Thread-179616] [transport.py] [_log()] userauth is OK
2026-04-12T00:36:54.295 [DEBUG] [Thread-179616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:36:54.295 [DEBUG] [Thread-179616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:36:54.295 [DEBUG] [Thread-179616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:36:54.295 [DEBUG] [Thread-179616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:36:54.330 [INFO] [Thread-179616] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:36:54.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:36:55.116 [DEBUG] [Thread-179616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:36:55.116 [DEBUG] [Thread-179616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:36:55.116 [DEBUG] [Thread-179616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:36:55.157 [DEBUG] [Thread-179616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:36:55.157 [DEBUG] [Thread-179616] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:36:55.161 [DEBUG] [Thread-179616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:36:55.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:36:55.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:36:55.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:36:55.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:36:55.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:36:55.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:36:55.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:36:55.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:36:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:36:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.941777 -999.00  +10.80  18.68     98  +10.50 1 3 1 3 1     0    0 0.21 -3.50 ----- 18.9 18.7 274.6 22.4 12.0 -1.1 11.9 -1.2 11.5 -1.0 11.8 -0.6
2026-04-12T00:36:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:36:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:36:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.941777
2026-04-12T00:36:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:36:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:36:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:36:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:36:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:36:55.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:36:14', tmtdew=0.027535, humidity=100.116, cloud=0.0, wind=21.8261, temperature=10.7472, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:36:09.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:36:55.185 [DEBUG] [Thread-179616] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:36:55.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:36:55.275 [DEBUG] [Thread-179619] [transport.py] [_log()] starting thread (client mode): 0xae536f20
2026-04-12T00:36:55.275 [DEBUG] [Thread-179619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:36:55.290 [DEBUG] [Thread-179619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:36:55.290 [INFO] [Thread-179619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:36:55.297 [DEBUG] [Thread-179619] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:36:55.297 [DEBUG] [Thread-179619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] client lang: <none>
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] server lang: <none>
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] kex follows: False
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:36:55.298 [DEBUG] [Thread-179619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:36:55.299 [DEBUG] [Thread-179619] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:36:55.299 [DEBUG] [Thread-179619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:36:55.299 [DEBUG] [Thread-179619] [transport.py] [_log()] Compression: none
2026-04-12T00:36:55.299 [DEBUG] [Thread-179619] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:36:55.357 [DEBUG] [Thread-179619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:36:55.357 [DEBUG] [Thread-179619] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:36:55.358 [DEBUG] [Thread-179619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:36:55.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:36:55.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:36:55.413 [DEBUG] [Thread-179619] [transport.py] [_log()] userauth is OK
2026-04-12T00:36:55.413 [DEBUG] [Thread-179619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:36:55.413 [DEBUG] [Thread-179619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:36:55.413 [DEBUG] [Thread-179619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:36:55.413 [DEBUG] [Thread-179619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:36:55.431 [INFO] [Thread-179619] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:36:55.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:36:55.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:36:56.259 [DEBUG] [Thread-179619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:36:56.260 [DEBUG] [Thread-179619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:36:56.308 [DEBUG] [Thread-179619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:36:56.308 [DEBUG] [Thread-179619] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:36:56.317 [DEBUG] [Thread-179619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:36:56.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:36:56.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-04-12T00:36:56.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-04-12T00:36:56.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:36:56.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:36:56.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:36:56.355 [DEBUG] [Thread-179619] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:36:57.134 [DEBUG] [Thread-179621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:07.293 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:07.295 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:12.194 [DEBUG] [Thread-179622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:37:26.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:37:26.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-04-12T00:37:27.237 [DEBUG] [Thread-179623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:27.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 36, 49), -0.04007, 100.199, 0.0, 23.8176, 11.1939, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:37:27.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:36:49
2026-04-12T00:37:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:37:28.218 [DEBUG] [Thread-179624] [transport.py] [_log()] starting thread (client mode): 0xae537ee0
2026-04-12T00:37:28.218 [DEBUG] [Thread-179624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:37:28.233 [DEBUG] [Thread-179624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:37:28.233 [INFO] [Thread-179624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] client lang: <none>
2026-04-12T00:37:28.236 [DEBUG] [Thread-179624] [transport.py] [_log()] server lang: <none>
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] kex follows: False
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] Compression: none
2026-04-12T00:37:28.237 [DEBUG] [Thread-179624] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:37:28.254 [DEBUG] [Thread-179624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:37:28.255 [DEBUG] [Thread-179624] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:37:28.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:37:28.256 [DEBUG] [Thread-179624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:37:28.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:37:28.257 [DEBUG] [Thread-179624] [transport.py] [_log()] userauth is OK
2026-04-12T00:37:28.258 [DEBUG] [Thread-179624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:37:28.258 [DEBUG] [Thread-179624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:37:28.258 [DEBUG] [Thread-179624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:37:28.258 [DEBUG] [Thread-179624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:37:28.300 [INFO] [Thread-179624] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:37:28.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:37:29.087 [DEBUG] [Thread-179624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:37:29.088 [DEBUG] [Thread-179624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:37:29.088 [DEBUG] [Thread-179624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:37:29.128 [DEBUG] [Thread-179624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:37:29.128 [DEBUG] [Thread-179624] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:37:29.131 [DEBUG] [Thread-179624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:37:29.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:37:29.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:37:29.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:37:29.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:37:29.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:37:29.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:37:29.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:37:29.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:37:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:37:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.942125 -999.00  +10.80  17.01     98  +10.50 1 3 1 3 1     0    0 0.21 -3.54 ----- 19.0 17.0 269.3 22.1 12.0 -1.1 11.8 -1.0 11.5 -0.6 11.8 -0.5
2026-04-12T00:37:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:37:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:37:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.942125
2026-04-12T00:37:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:37:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:37:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:37:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:37:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:37:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:36:49', tmtdew=-0.04007, humidity=100.199, cloud=0.0, wind=23.8176, temperature=11.1939, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:36:39.600', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:37:29.159 [DEBUG] [Thread-179624] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:37:29.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:37:29.252 [DEBUG] [Thread-179627] [transport.py] [_log()] starting thread (client mode): 0xae537dc0
2026-04-12T00:37:29.252 [DEBUG] [Thread-179627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:37:29.267 [DEBUG] [Thread-179627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:37:29.267 [INFO] [Thread-179627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:37:29.275 [DEBUG] [Thread-179627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:37:29.275 [DEBUG] [Thread-179627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:37:29.275 [DEBUG] [Thread-179627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:37:29.275 [DEBUG] [Thread-179627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] client lang: <none>
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] server lang: <none>
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] kex follows: False
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] Compression: none
2026-04-12T00:37:29.276 [DEBUG] [Thread-179627] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:37:29.334 [DEBUG] [Thread-179627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:37:29.335 [DEBUG] [Thread-179627] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:37:29.335 [DEBUG] [Thread-179627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:37:29.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:37:29.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:37:29.393 [DEBUG] [Thread-179627] [transport.py] [_log()] userauth is OK
2026-04-12T00:37:29.393 [DEBUG] [Thread-179627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:37:29.393 [DEBUG] [Thread-179627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:37:29.393 [DEBUG] [Thread-179627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:37:29.393 [DEBUG] [Thread-179627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:37:29.412 [INFO] [Thread-179627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:37:29.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:37:29.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:37:30.260 [DEBUG] [Thread-179627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:37:30.261 [DEBUG] [Thread-179627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:37:30.309 [DEBUG] [Thread-179627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:37:30.309 [DEBUG] [Thread-179627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:37:30.318 [DEBUG] [Thread-179627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:37:30.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:37:30.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-04-12T00:37:30.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-04-12T00:37:30.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:37:30.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:37:30.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:37:30.355 [DEBUG] [Thread-179627] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:37:42.279 [DEBUG] [Thread-179629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:46.670 [DEBUG] [Thread-179630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:37:57.337 [DEBUG] [Thread-179631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:00.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:38:00.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:38:00.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:38:01.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 37, 25), -0.020055, 100.099, 0.0, 20.2738, 10.8135, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:38:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:37:25
2026-04-12T00:38:02.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:38:02.251 [DEBUG] [Thread-179632] [transport.py] [_log()] starting thread (client mode): 0xae5a7d30
2026-04-12T00:38:02.251 [DEBUG] [Thread-179632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:38:02.271 [DEBUG] [Thread-179632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:38:02.272 [INFO] [Thread-179632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:02.275 [DEBUG] [Thread-179632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] client lang: <none>
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] server lang: <none>
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] kex follows: False
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] Compression: none
2026-04-12T00:38:02.276 [DEBUG] [Thread-179632] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:38:02.295 [DEBUG] [Thread-179632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:38:02.296 [DEBUG] [Thread-179632] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:38:02.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:38:02.297 [DEBUG] [Thread-179632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:38:02.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:38:02.299 [DEBUG] [Thread-179632] [transport.py] [_log()] userauth is OK
2026-04-12T00:38:02.299 [DEBUG] [Thread-179632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:38:02.299 [DEBUG] [Thread-179632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:38:02.299 [DEBUG] [Thread-179632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:38:02.299 [DEBUG] [Thread-179632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:38:02.323 [INFO] [Thread-179632] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:38:02.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:38:03.144 [DEBUG] [Thread-179632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:38:03.145 [DEBUG] [Thread-179632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:38:03.145 [DEBUG] [Thread-179632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:38:03.186 [DEBUG] [Thread-179632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:38:03.186 [DEBUG] [Thread-179632] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:38:03.189 [DEBUG] [Thread-179632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:38:03.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:38:03.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:38:03.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:38:03.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:38:03.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:38:03.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:38:03.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:38:03.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:38:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:38:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.942472 -999.00  +10.80  15.01     98  +10.50 1 3 1 3 1     0    0 0.20 -3.29 ----- 15.4 15.0 283.8 22.7 12.0 -0.9 11.8 -1.0 11.5 -0.4 11.8 -0.6
2026-04-12T00:38:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:38:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:38:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.942472
2026-04-12T00:38:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:38:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:38:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:38:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:38:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:38:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:37:25', tmtdew=-0.020055, humidity=100.099, cloud=0.0, wind=20.2738, temperature=10.8135, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:37:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:38:03.216 [DEBUG] [Thread-179632] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:38:03.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:38:03.307 [DEBUG] [Thread-179635] [transport.py] [_log()] starting thread (client mode): 0xae509030
2026-04-12T00:38:03.307 [DEBUG] [Thread-179635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:38:03.322 [DEBUG] [Thread-179635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:38:03.322 [INFO] [Thread-179635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:38:03.330 [DEBUG] [Thread-179635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:38:03.330 [DEBUG] [Thread-179635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:38:03.330 [DEBUG] [Thread-179635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:38:03.330 [DEBUG] [Thread-179635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:03.330 [DEBUG] [Thread-179635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] client lang: <none>
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] server lang: <none>
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] kex follows: False
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:38:03.331 [DEBUG] [Thread-179635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:38:03.332 [DEBUG] [Thread-179635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:38:03.332 [DEBUG] [Thread-179635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:38:03.334 [DEBUG] [Thread-179635] [transport.py] [_log()] Compression: none
2026-04-12T00:38:03.334 [DEBUG] [Thread-179635] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:38:03.389 [DEBUG] [Thread-179635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:38:03.389 [DEBUG] [Thread-179635] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:38:03.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:38:03.391 [DEBUG] [Thread-179635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:38:03.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:38:03.449 [DEBUG] [Thread-179635] [transport.py] [_log()] userauth is OK
2026-04-12T00:38:03.449 [DEBUG] [Thread-179635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:38:03.449 [DEBUG] [Thread-179635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:38:03.449 [DEBUG] [Thread-179635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:38:03.449 [DEBUG] [Thread-179635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:38:03.475 [INFO] [Thread-179635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:38:03.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:38:03.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:38:04.292 [DEBUG] [Thread-179635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:38:04.292 [DEBUG] [Thread-179635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:38:04.340 [DEBUG] [Thread-179635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:38:04.340 [DEBUG] [Thread-179635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:38:04.350 [DEBUG] [Thread-179635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:38:04.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:38:04.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:38:04.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-04-12T00:38:04.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:38:04.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:38:04.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:38:04.386 [DEBUG] [Thread-179635] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:38:07.499 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:07.500 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:12.378 [DEBUG] [Thread-179637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:27.432 [DEBUG] [Thread-179638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:34.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:38:34.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:38:34.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-04-12T00:38:35.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 38), -0.022615, 100.116, 0.0, 20.0444, 10.8633, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:38:35.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:38:00
2026-04-12T00:38:36.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:38:36.228 [DEBUG] [Thread-179639] [transport.py] [_log()] starting thread (client mode): 0xae537670
2026-04-12T00:38:36.228 [DEBUG] [Thread-179639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:38:36.244 [DEBUG] [Thread-179639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:38:36.244 [INFO] [Thread-179639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:38:36.247 [DEBUG] [Thread-179639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] client lang: <none>
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] server lang: <none>
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] kex follows: False
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:38:36.248 [DEBUG] [Thread-179639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:38:36.249 [DEBUG] [Thread-179639] [transport.py] [_log()] Compression: none
2026-04-12T00:38:36.249 [DEBUG] [Thread-179639] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:38:36.267 [DEBUG] [Thread-179639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:38:36.268 [DEBUG] [Thread-179639] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:38:36.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:38:36.270 [DEBUG] [Thread-179639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:38:36.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:38:36.272 [DEBUG] [Thread-179639] [transport.py] [_log()] userauth is OK
2026-04-12T00:38:36.273 [DEBUG] [Thread-179639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:38:36.273 [DEBUG] [Thread-179639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:38:36.273 [DEBUG] [Thread-179639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:38:36.273 [DEBUG] [Thread-179639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:38:36.297 [INFO] [Thread-179639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:38:36.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:38:37.081 [DEBUG] [Thread-179639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:38:37.081 [DEBUG] [Thread-179639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:38:37.081 [DEBUG] [Thread-179639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:38:37.122 [DEBUG] [Thread-179639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:38:37.122 [DEBUG] [Thread-179639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:38:37.125 [DEBUG] [Thread-179639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:38:37.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:38:37.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:38:37.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:38:37.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:38:37.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:38:37.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:38:37.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.942819 -999.00  +10.80  16.67     98  +10.50 1 3 1 3 1     0    0 0.21 -3.00 ----- 16.9 16.7 281.4 18.5 12.0 -1.1 11.8 -0.9 11.5 -0.5 11.8 -0.3
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.942819
2026-04-12T00:38:37.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:38:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:38:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:38:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:38:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:38:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:38:00', tmtdew=-0.022615, humidity=100.116, cloud=0.0, wind=20.0444, temperature=10.8633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:37:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:38:37.149 [DEBUG] [Thread-179639] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:38:37.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:38:37.235 [DEBUG] [Thread-179642] [transport.py] [_log()] starting thread (client mode): 0xae537970
2026-04-12T00:38:37.236 [DEBUG] [Thread-179642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:38:37.250 [DEBUG] [Thread-179642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:38:37.250 [INFO] [Thread-179642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:38:37.258 [DEBUG] [Thread-179642] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:38:37.259 [DEBUG] [Thread-179642] [transport.py] [_log()] client lang: <none>
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] server lang: <none>
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] kex follows: False
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] Compression: none
2026-04-12T00:38:37.260 [DEBUG] [Thread-179642] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:38:37.316 [DEBUG] [Thread-179642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:38:37.317 [DEBUG] [Thread-179642] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:38:37.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:38:37.318 [DEBUG] [Thread-179642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:38:37.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:38:37.372 [DEBUG] [Thread-179642] [transport.py] [_log()] userauth is OK
2026-04-12T00:38:37.372 [DEBUG] [Thread-179642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:38:37.372 [DEBUG] [Thread-179642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:38:37.372 [DEBUG] [Thread-179642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:38:37.372 [DEBUG] [Thread-179642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:38:37.398 [INFO] [Thread-179642] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:38:37.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:38:37.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:38:38.235 [DEBUG] [Thread-179642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:38:38.236 [DEBUG] [Thread-179642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:38:38.284 [DEBUG] [Thread-179642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:38:38.284 [DEBUG] [Thread-179642] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:38:38.293 [DEBUG] [Thread-179642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:38:38.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:38:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:38:38.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:38:38.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:38:38.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:38:38.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:38:38.330 [DEBUG] [Thread-179642] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:38:42.470 [DEBUG] [Thread-179644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:46.730 [DEBUG] [Thread-179645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:38:57.520 [DEBUG] [Thread-179646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:07.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:07.704 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:39:08.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:39:08.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:39:09.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 38, 36), -0.04012, 100.199, 0.0, 22.6534, 11.2271, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:39:09.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:38:36
2026-04-12T00:39:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:39:10.438 [DEBUG] [Thread-179647] [transport.py] [_log()] starting thread (client mode): 0xae5348b0
2026-04-12T00:39:10.438 [DEBUG] [Thread-179647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:39:10.458 [DEBUG] [Thread-179647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:39:10.458 [INFO] [Thread-179647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:39:10.461 [DEBUG] [Thread-179647] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] client lang: <none>
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] server lang: <none>
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] kex follows: False
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] Compression: none
2026-04-12T00:39:10.462 [DEBUG] [Thread-179647] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:39:10.480 [DEBUG] [Thread-179647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:39:10.481 [DEBUG] [Thread-179647] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:39:10.481 [DEBUG] [Thread-179647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:39:10.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:39:10.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:39:10.483 [DEBUG] [Thread-179647] [transport.py] [_log()] userauth is OK
2026-04-12T00:39:10.483 [DEBUG] [Thread-179647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:39:10.483 [DEBUG] [Thread-179647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:39:10.484 [DEBUG] [Thread-179647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:39:10.484 [DEBUG] [Thread-179647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:39:10.510 [INFO] [Thread-179647] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:39:10.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:39:11.300 [DEBUG] [Thread-179647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:39:11.300 [DEBUG] [Thread-179647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:39:11.300 [DEBUG] [Thread-179647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:39:11.341 [DEBUG] [Thread-179647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:39:11.341 [DEBUG] [Thread-179647] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:39:11.344 [DEBUG] [Thread-179647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:39:11.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:39:11.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:39:11.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:39:11.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:39:11.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:39:11.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:39:11.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:39:11.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:39:11.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:39:11.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.943166 -999.00  +10.70  18.74     98  +10.50 1 3 1 3 1     0    0 0.22 -3.14 ----- 20.2 18.7 274.4 23.6 12.0 -0.9 11.8 -1.0 11.5 -0.8 11.8 -0.6
2026-04-12T00:39:11.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:39:11.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:39:11.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.943166
2026-04-12T00:39:11.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:39:11.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:39:11.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:39:11.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:39:11.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:39:11.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:38:36', tmtdew=-0.04012, humidity=100.199, cloud=0.0, wind=22.6534, temperature=11.2271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:38:09.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:39:11.373 [DEBUG] [Thread-179647] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:39:11.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:39:11.471 [DEBUG] [Thread-179650] [transport.py] [_log()] starting thread (client mode): 0xa79564d0
2026-04-12T00:39:11.471 [DEBUG] [Thread-179650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:39:11.486 [DEBUG] [Thread-179650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:39:11.486 [INFO] [Thread-179650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:39:11.494 [DEBUG] [Thread-179650] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:39:11.494 [DEBUG] [Thread-179650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:39:11.494 [DEBUG] [Thread-179650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:39:11.494 [DEBUG] [Thread-179650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] client lang: <none>
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] server lang: <none>
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] kex follows: False
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] Compression: none
2026-04-12T00:39:11.495 [DEBUG] [Thread-179650] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:39:11.551 [DEBUG] [Thread-179650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:39:11.552 [DEBUG] [Thread-179650] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:39:11.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:39:11.553 [DEBUG] [Thread-179650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:39:11.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:39:11.607 [DEBUG] [Thread-179650] [transport.py] [_log()] userauth is OK
2026-04-12T00:39:11.607 [DEBUG] [Thread-179650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:39:11.608 [DEBUG] [Thread-179650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:39:11.608 [DEBUG] [Thread-179650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:39:11.608 [DEBUG] [Thread-179650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:39:11.626 [INFO] [Thread-179650] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:39:11.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:39:11.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:39:12.479 [DEBUG] [Thread-179650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:39:12.479 [DEBUG] [Thread-179650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:39:12.527 [DEBUG] [Thread-179650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:39:12.527 [DEBUG] [Thread-179650] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:39:12.536 [DEBUG] [Thread-179650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:39:12.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:39:12.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-04-12T00:39:12.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-04-12T00:39:12.560 [DEBUG] [Thread-179652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:12.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:39:12.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:39:12.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:39:12.573 [DEBUG] [Thread-179650] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:39:27.625 [DEBUG] [Thread-179653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:42.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:39:42.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:39:42.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-04-12T00:39:42.664 [DEBUG] [Thread-179654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 39, 11), 0.027405, 100.116, 0.0, 20.9441, 10.8467, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:39:43.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:39:11
2026-04-12T00:39:44.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:39:44.376 [DEBUG] [Thread-179655] [transport.py] [_log()] starting thread (client mode): 0xa7954370
2026-04-12T00:39:44.376 [DEBUG] [Thread-179655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:39:44.396 [DEBUG] [Thread-179655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:39:44.396 [INFO] [Thread-179655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:44.399 [DEBUG] [Thread-179655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] client lang: <none>
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] server lang: <none>
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] kex follows: False
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] Compression: none
2026-04-12T00:39:44.400 [DEBUG] [Thread-179655] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:39:44.418 [DEBUG] [Thread-179655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:39:44.419 [DEBUG] [Thread-179655] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:39:44.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:39:44.420 [DEBUG] [Thread-179655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:39:44.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:39:44.422 [DEBUG] [Thread-179655] [transport.py] [_log()] userauth is OK
2026-04-12T00:39:44.422 [DEBUG] [Thread-179655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:39:44.422 [DEBUG] [Thread-179655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:39:44.422 [DEBUG] [Thread-179655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:39:44.422 [DEBUG] [Thread-179655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:39:44.439 [INFO] [Thread-179655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:39:44.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:39:45.255 [DEBUG] [Thread-179655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:39:45.255 [DEBUG] [Thread-179655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:39:45.256 [DEBUG] [Thread-179655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:39:45.296 [DEBUG] [Thread-179655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:39:45.296 [DEBUG] [Thread-179655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:39:45.299 [DEBUG] [Thread-179655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:39:45.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:39:45.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:39:45.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:39:45.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:39:45.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:39:45.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:39:45.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:39:45.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:39:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:39:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.943861 -999.00  +10.80  17.94     98  +10.50 1 3 1 3 1     0    0 0.22 -3.04 ----- 16.6 17.9 277.8 23.3 12.1 -0.8 11.9 -1.0 11.5 -0.9 11.9 -0.4
2026-04-12T00:39:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:39:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:39:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.943861
2026-04-12T00:39:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:39:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:39:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:39:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:39:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:39:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:39:11', tmtdew=0.027405, humidity=100.116, cloud=0.0, wind=20.9441, temperature=10.8467, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:39:09.590', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:39:45.326 [DEBUG] [Thread-179655] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:39:45.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:39:45.420 [DEBUG] [Thread-179658] [transport.py] [_log()] starting thread (client mode): 0xae5f2830
2026-04-12T00:39:45.420 [DEBUG] [Thread-179658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:39:45.435 [DEBUG] [Thread-179658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:39:45.435 [INFO] [Thread-179658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:39:45.443 [DEBUG] [Thread-179658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:39:45.443 [DEBUG] [Thread-179658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] client lang: <none>
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] server lang: <none>
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] kex follows: False
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:39:45.444 [DEBUG] [Thread-179658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:39:45.445 [DEBUG] [Thread-179658] [transport.py] [_log()] Compression: none
2026-04-12T00:39:45.445 [DEBUG] [Thread-179658] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:39:45.503 [DEBUG] [Thread-179658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:39:45.504 [DEBUG] [Thread-179658] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:39:45.505 [DEBUG] [Thread-179658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:39:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:39:45.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:39:45.562 [DEBUG] [Thread-179658] [transport.py] [_log()] userauth is OK
2026-04-12T00:39:45.563 [DEBUG] [Thread-179658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:39:45.563 [DEBUG] [Thread-179658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:39:45.563 [DEBUG] [Thread-179658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:39:45.563 [DEBUG] [Thread-179658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:39:45.583 [INFO] [Thread-179658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:39:45.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:39:45.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:39:46.437 [DEBUG] [Thread-179658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:39:46.438 [DEBUG] [Thread-179658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:39:46.486 [DEBUG] [Thread-179658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:39:46.486 [DEBUG] [Thread-179658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:39:46.496 [DEBUG] [Thread-179658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:39:46.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:39:46.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-04-12T00:39: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') -> 00000000
2026-04-12T00:39:46.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:39:46.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:39:46.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:39:46.533 [DEBUG] [Thread-179658] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:39:46.786 [DEBUG] [Thread-179660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:39:57.699 [DEBUG] [Thread-179661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:07.909 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:07.910 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:12.753 [DEBUG] [Thread-179662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:16.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:40:16.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:40:16.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:40:17.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 39, 47), -0.0402, 100.199, 0.0, 26.7106, 11.2934, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:40:17.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:39:47
2026-04-12T00:40:18.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:40:18.418 [DEBUG] [Thread-179663] [transport.py] [_log()] starting thread (client mode): 0xb0f6f610
2026-04-12T00:40:18.418 [DEBUG] [Thread-179663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:40:18.438 [DEBUG] [Thread-179663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:40:18.438 [INFO] [Thread-179663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] client lang: <none>
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] server lang: <none>
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] kex follows: False
2026-04-12T00:40:18.441 [DEBUG] [Thread-179663] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:40:18.442 [DEBUG] [Thread-179663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:40:18.442 [DEBUG] [Thread-179663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:40:18.442 [DEBUG] [Thread-179663] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:40:18.442 [DEBUG] [Thread-179663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:40:18.442 [DEBUG] [Thread-179663] [transport.py] [_log()] Compression: none
2026-04-12T00:40:18.442 [DEBUG] [Thread-179663] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:40:18.461 [DEBUG] [Thread-179663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:40:18.461 [DEBUG] [Thread-179663] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:40:18.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:40:18.462 [DEBUG] [Thread-179663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:40:18.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:40:18.464 [DEBUG] [Thread-179663] [transport.py] [_log()] userauth is OK
2026-04-12T00:40:18.465 [DEBUG] [Thread-179663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:40:18.465 [DEBUG] [Thread-179663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:40:18.465 [DEBUG] [Thread-179663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:40:18.465 [DEBUG] [Thread-179663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:40:18.488 [INFO] [Thread-179663] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:40:18.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:40:19.538 [DEBUG] [Thread-179663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:40:19.539 [DEBUG] [Thread-179663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:40:19.539 [DEBUG] [Thread-179663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:40:19.580 [DEBUG] [Thread-179663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:40:19.580 [DEBUG] [Thread-179663] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:40:19.584 [DEBUG] [Thread-179663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:40:19.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:40:19.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:40:19.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:40:19.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:40:19.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:40:19.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:40:19.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:40:19.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:40:19.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:40:19.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.944208 -999.00  +10.80  17.36     98  +10.50 1 3 1 3 1     0    0 0.21 -2.90 ----- 14.4 17.4 285.8 20.6 12.1 -0.8 11.9 -0.9 11.6 -0.3 11.8 -0.3
2026-04-12T00:40:19.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:40:19.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:40:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.944208
2026-04-12T00:40:19.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:40:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:40:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:40:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:40:19.612 [DEBUG] [Thread-179663] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:40:19.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:40:19.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:39:47', tmtdew=-0.0402, humidity=100.199, cloud=0.0, wind=26.7106, temperature=11.2934, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:39:39.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:40:19.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:40:19.708 [DEBUG] [Thread-179666] [transport.py] [_log()] starting thread (client mode): 0xb0f6f0d0
2026-04-12T00:40:19.708 [DEBUG] [Thread-179666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:40:19.723 [DEBUG] [Thread-179666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:40:19.723 [INFO] [Thread-179666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] client lang: <none>
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] server lang: <none>
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] kex follows: False
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:40:19.731 [DEBUG] [Thread-179666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:40:19.732 [DEBUG] [Thread-179666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:40:19.732 [DEBUG] [Thread-179666] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:40:19.732 [DEBUG] [Thread-179666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:40:19.732 [DEBUG] [Thread-179666] [transport.py] [_log()] Compression: none
2026-04-12T00:40:19.732 [DEBUG] [Thread-179666] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:40:19.790 [DEBUG] [Thread-179666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:40:19.791 [DEBUG] [Thread-179666] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:40:19.792 [DEBUG] [Thread-179666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:40:19.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:40:19.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:40:19.846 [DEBUG] [Thread-179666] [transport.py] [_log()] userauth is OK
2026-04-12T00:40:19.847 [DEBUG] [Thread-179666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:40:19.847 [DEBUG] [Thread-179666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:40:19.847 [DEBUG] [Thread-179666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:40:19.847 [DEBUG] [Thread-179666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:40:19.865 [INFO] [Thread-179666] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:40:19.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:40:19.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:40:20.709 [DEBUG] [Thread-179666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:40:20.709 [DEBUG] [Thread-179666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:40:20.757 [DEBUG] [Thread-179666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:40:20.757 [DEBUG] [Thread-179666] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:40:20.770 [DEBUG] [Thread-179666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:40:20.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:40:20.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-04-12T00:40:20.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:40:20.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:40:20.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:40:20.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:40:20.807 [DEBUG] [Thread-179666] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:40:27.792 [DEBUG] [Thread-179668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:42.841 [DEBUG] [Thread-179669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:46.862 [DEBUG] [Thread-179670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:40:50.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:40:50.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:40:50.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-04-12T00:40:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 40, 22), 0.0249, 100.133, 0.0, 24.2788, 10.8467, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:40:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:40:22
2026-04-12T00:40:52.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:40:52.709 [DEBUG] [Thread-179671] [transport.py] [_log()] starting thread (client mode): 0xae535510
2026-04-12T00:40:52.710 [DEBUG] [Thread-179671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:40:52.729 [DEBUG] [Thread-179671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:40:52.729 [INFO] [Thread-179671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:40:52.732 [DEBUG] [Thread-179671] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] client lang: <none>
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] server lang: <none>
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] kex follows: False
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:40:52.733 [DEBUG] [Thread-179671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:40:52.734 [DEBUG] [Thread-179671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:40:52.734 [DEBUG] [Thread-179671] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:40:52.734 [DEBUG] [Thread-179671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:40:52.734 [DEBUG] [Thread-179671] [transport.py] [_log()] Compression: none
2026-04-12T00:40:52.734 [DEBUG] [Thread-179671] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:40:52.754 [DEBUG] [Thread-179671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:40:52.754 [DEBUG] [Thread-179671] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:40:52.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:40:52.756 [DEBUG] [Thread-179671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:40:52.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:40:52.758 [DEBUG] [Thread-179671] [transport.py] [_log()] userauth is OK
2026-04-12T00:40:52.758 [DEBUG] [Thread-179671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:40:52.758 [DEBUG] [Thread-179671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:40:52.758 [DEBUG] [Thread-179671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:40:52.758 [DEBUG] [Thread-179671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:40:52.794 [INFO] [Thread-179671] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:40:52.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:40:53.568 [DEBUG] [Thread-179671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:40:53.568 [DEBUG] [Thread-179671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:40:53.568 [DEBUG] [Thread-179671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:40:53.609 [DEBUG] [Thread-179671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:40:53.609 [DEBUG] [Thread-179671] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:40:53.612 [DEBUG] [Thread-179671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:40:53.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:40:53.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:40:53.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:40:53.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:40:53.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:40:53.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:40:53.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:40:53.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:40:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:40:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.944555 -999.00  +10.80  17.35     98  +10.50 1 3 1 3 1     0    0 0.21 -3.10 ----- 17.5 17.4 282.6 20.8 12.0 -0.9 11.9 -1.0 11.5 -1.1 11.9 -0.5
2026-04-12T00:40:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:40:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:40:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.944555
2026-04-12T00:40:53.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:40:53.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:40:53.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:40:53.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:40:53.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:40:53.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:40:22', tmtdew=0.0249, humidity=100.133, cloud=0.0, wind=24.2788, temperature=10.8467, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:40:09.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:40:53.637 [DEBUG] [Thread-179671] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:40:53.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:40:53.742 [DEBUG] [Thread-179674] [transport.py] [_log()] starting thread (client mode): 0xa79543d0
2026-04-12T00:40:53.742 [DEBUG] [Thread-179674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:40:53.756 [DEBUG] [Thread-179674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:40:53.756 [INFO] [Thread-179674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:40:53.763 [DEBUG] [Thread-179674] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] client lang: <none>
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] server lang: <none>
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] kex follows: False
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:40:53.764 [DEBUG] [Thread-179674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:40:53.765 [DEBUG] [Thread-179674] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:40:53.765 [DEBUG] [Thread-179674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:40:53.765 [DEBUG] [Thread-179674] [transport.py] [_log()] Compression: none
2026-04-12T00:40:53.765 [DEBUG] [Thread-179674] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:40:53.821 [DEBUG] [Thread-179674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:40:53.822 [DEBUG] [Thread-179674] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:40:53.822 [DEBUG] [Thread-179674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:40:53.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:40:53.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:40:53.877 [DEBUG] [Thread-179674] [transport.py] [_log()] userauth is OK
2026-04-12T00:40:53.878 [DEBUG] [Thread-179674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:40:53.878 [DEBUG] [Thread-179674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:40:53.878 [DEBUG] [Thread-179674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:40:53.879 [DEBUG] [Thread-179674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:40:53.904 [INFO] [Thread-179674] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:40:53.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:40:53.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:40:54.728 [DEBUG] [Thread-179674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:40:54.729 [DEBUG] [Thread-179674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:40:54.776 [DEBUG] [Thread-179674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:40:54.777 [DEBUG] [Thread-179674] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:40:54.785 [DEBUG] [Thread-179674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:40:54.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:40:54.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-04-12T00:40: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-04-12T00:40:54.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:40:54.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:40:54.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:40:54.819 [DEBUG] [Thread-179674] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:40:57.875 [DEBUG] [Thread-179676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:08.117 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:08.118 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:12.917 [DEBUG] [Thread-179677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:24.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:41:24.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:41:24.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-04-12T00:41:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 40, 58), 0.029955, 100.099, 0.0, 21.244, 10.847, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:41:26.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:40:58
2026-04-12T00:41:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:41:26.655 [DEBUG] [Thread-179678] [transport.py] [_log()] starting thread (client mode): 0xb0f6d4b0
2026-04-12T00:41:26.656 [DEBUG] [Thread-179678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:41:26.676 [DEBUG] [Thread-179678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:41:26.676 [INFO] [Thread-179678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:41:26.679 [DEBUG] [Thread-179678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] client lang: <none>
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] server lang: <none>
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] kex follows: False
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] Compression: none
2026-04-12T00:41:26.680 [DEBUG] [Thread-179678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:41:26.697 [DEBUG] [Thread-179678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:41:26.697 [DEBUG] [Thread-179678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:41:26.697 [DEBUG] [Thread-179678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:41:26.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:41:26.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:41:26.699 [DEBUG] [Thread-179678] [transport.py] [_log()] userauth is OK
2026-04-12T00:41:26.699 [DEBUG] [Thread-179678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:41:26.699 [DEBUG] [Thread-179678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:41:26.699 [DEBUG] [Thread-179678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:41:26.699 [DEBUG] [Thread-179678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:41:26.715 [INFO] [Thread-179678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:41:26.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:41:27.485 [DEBUG] [Thread-179678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:41:27.485 [DEBUG] [Thread-179678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:41:27.485 [DEBUG] [Thread-179678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:41:27.529 [DEBUG] [Thread-179678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:41:27.529 [DEBUG] [Thread-179678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:41:27.532 [DEBUG] [Thread-179678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:41:27.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:41:27.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:41:27.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:41:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:41:27.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:41:27.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:41:27.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:41:27.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:41:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:41:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.944902 -999.00  +10.80  15.39     98  +10.50 1 3 1 3 1     0    0 0.22 -3.03 ----- 14.6 15.4 297.4 25.6 12.1 -0.8 11.9 -1.1 11.6 -0.5 11.8 -0.6
2026-04-12T00:41:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:41:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:41:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.944902
2026-04-12T00:41:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:41:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:41:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:41:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:41:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:41:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:40:58', tmtdew=0.029955, humidity=100.099, cloud=0.0, wind=21.244, temperature=10.847, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:40:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:41:27.558 [DEBUG] [Thread-179678] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:41:27.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:41:27.650 [DEBUG] [Thread-179681] [transport.py] [_log()] starting thread (client mode): 0xb39c6860
2026-04-12T00:41:27.650 [DEBUG] [Thread-179681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:41:27.665 [DEBUG] [Thread-179681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:41:27.666 [INFO] [Thread-179681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:41:27.673 [DEBUG] [Thread-179681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] client lang: <none>
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] server lang: <none>
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] kex follows: False
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:41:27.674 [DEBUG] [Thread-179681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:41:27.675 [DEBUG] [Thread-179681] [transport.py] [_log()] Compression: none
2026-04-12T00:41:27.675 [DEBUG] [Thread-179681] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:41:27.733 [DEBUG] [Thread-179681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:41:27.734 [DEBUG] [Thread-179681] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:41:27.734 [DEBUG] [Thread-179681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:41:27.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:41:27.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:41:27.789 [DEBUG] [Thread-179681] [transport.py] [_log()] userauth is OK
2026-04-12T00:41:27.789 [DEBUG] [Thread-179681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:41:27.789 [DEBUG] [Thread-179681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:41:27.789 [DEBUG] [Thread-179681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:41:27.789 [DEBUG] [Thread-179681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:41:27.808 [INFO] [Thread-179681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:41:27.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:41:27.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:41:27.948 [DEBUG] [Thread-179683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:28.643 [DEBUG] [Thread-179681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:41:28.643 [DEBUG] [Thread-179681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:41:28.691 [DEBUG] [Thread-179681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:41:28.692 [DEBUG] [Thread-179681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:41:28.701 [DEBUG] [Thread-179681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:41:28.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:41:28.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-04-12T00:41:28.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:41:28.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:41:28.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:41:28.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:41:28.738 [DEBUG] [Thread-179681] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:41:42.993 [DEBUG] [Thread-179684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:46.919 [DEBUG] [Thread-179685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:58.029 [DEBUG] [Thread-179686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:41:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:41:58.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:41:58.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-04-12T00:42:00.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 41, 33), -0.04009, 100.199, 0.0, 22.4417, 11.194, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:42:00.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:41:33
2026-04-12T00:42:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:42:00.588 [DEBUG] [Thread-179687] [transport.py] [_log()] starting thread (client mode): 0xae537640
2026-04-12T00:42:00.588 [DEBUG] [Thread-179687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:42:00.608 [DEBUG] [Thread-179687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:42:00.608 [INFO] [Thread-179687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:42:00.611 [DEBUG] [Thread-179687] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:42:00.611 [DEBUG] [Thread-179687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:42:00.611 [DEBUG] [Thread-179687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:42:00.611 [DEBUG] [Thread-179687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:00.611 [DEBUG] [Thread-179687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] client lang: <none>
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] server lang: <none>
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] kex follows: False
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] Compression: none
2026-04-12T00:42:00.612 [DEBUG] [Thread-179687] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:42:00.622 [DEBUG] [Thread-179687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:42:00.622 [DEBUG] [Thread-179687] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:42:00.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:42:00.623 [DEBUG] [Thread-179687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:42:00.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:42:00.625 [DEBUG] [Thread-179687] [transport.py] [_log()] userauth is OK
2026-04-12T00:42:00.625 [DEBUG] [Thread-179687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:42:00.625 [DEBUG] [Thread-179687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:42:00.625 [DEBUG] [Thread-179687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:42:00.625 [DEBUG] [Thread-179687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:42:00.661 [INFO] [Thread-179687] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:42:00.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:42:01.332 [DEBUG] [Thread-179687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:42:01.333 [DEBUG] [Thread-179687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:42:01.333 [DEBUG] [Thread-179687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:42:01.374 [DEBUG] [Thread-179687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:42:01.375 [DEBUG] [Thread-179687] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:42:01.377 [DEBUG] [Thread-179687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:42:01.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:42:01.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:42:01.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:42:01.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:42:01.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:42:01.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:42:01.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.945597 -999.00  +10.80  15.70     98  +10.50 1 3 1 3 1     0    0 0.22 -2.51 ----- 14.2 15.7 290.8 22.1 12.0 -1.0 11.9 -0.9 11.6 -0.7 11.9 -0.5
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.945597
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:42:01.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:41:33', tmtdew=-0.04009, humidity=100.199, cloud=0.0, wind=22.4417, temperature=11.194, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:41:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:42:01.398 [DEBUG] [Thread-179687] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:42:01.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:42:01.482 [DEBUG] [Thread-179690] [transport.py] [_log()] starting thread (client mode): 0xb0f6d180
2026-04-12T00:42:01.482 [DEBUG] [Thread-179690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:42:01.496 [DEBUG] [Thread-179690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:42:01.497 [INFO] [Thread-179690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:42:01.504 [DEBUG] [Thread-179690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:42:01.504 [DEBUG] [Thread-179690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:42:01.504 [DEBUG] [Thread-179690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:42:01.504 [DEBUG] [Thread-179690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:01.504 [DEBUG] [Thread-179690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] client lang: <none>
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] server lang: <none>
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] kex follows: False
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] Compression: none
2026-04-12T00:42:01.505 [DEBUG] [Thread-179690] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:42:01.563 [DEBUG] [Thread-179690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:42:01.564 [DEBUG] [Thread-179690] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:42:01.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:42:01.565 [DEBUG] [Thread-179690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:42:01.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:42:01.621 [DEBUG] [Thread-179690] [transport.py] [_log()] userauth is OK
2026-04-12T00:42:01.621 [DEBUG] [Thread-179690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:42:01.621 [DEBUG] [Thread-179690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:42:01.621 [DEBUG] [Thread-179690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:42:01.621 [DEBUG] [Thread-179690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:42:01.645 [INFO] [Thread-179690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:42:01.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:42:01.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:42:02.470 [DEBUG] [Thread-179690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:42:02.471 [DEBUG] [Thread-179690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:42:02.519 [DEBUG] [Thread-179690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:42:02.519 [DEBUG] [Thread-179690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:42:02.528 [DEBUG] [Thread-179690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:42:02.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:42:02.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-04-12T00:42:02.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:42:02.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:42:02.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:42:02.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:42:02.565 [DEBUG] [Thread-179690] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:42:08.323 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:42:08.325 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:42:13.069 [DEBUG] [Thread-179692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:42:28.121 [DEBUG] [Thread-179693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:42:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:42:32.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:42:32.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:42:33.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 42, 9), 0.02742, 100.116, 0.0, 22.0554, 10.8801, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:42:33.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:42:09
2026-04-12T00:42:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:42:34.419 [DEBUG] [Thread-179694] [transport.py] [_log()] starting thread (client mode): 0xb39c6f50
2026-04-12T00:42:34.419 [DEBUG] [Thread-179694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:42:34.435 [DEBUG] [Thread-179694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:42:34.435 [INFO] [Thread-179694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:42:34.438 [DEBUG] [Thread-179694] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:42:34.438 [DEBUG] [Thread-179694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] client lang: <none>
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] server lang: <none>
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] kex follows: False
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:42:34.439 [DEBUG] [Thread-179694] [transport.py] [_log()] Compression: none
2026-04-12T00:42:34.440 [DEBUG] [Thread-179694] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:42:34.457 [DEBUG] [Thread-179694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:42:34.457 [DEBUG] [Thread-179694] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:42:34.458 [DEBUG] [Thread-179694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:42:34.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:42:34.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:42:34.501 [DEBUG] [Thread-179694] [transport.py] [_log()] userauth is OK
2026-04-12T00:42:34.501 [DEBUG] [Thread-179694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:42:34.501 [DEBUG] [Thread-179694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:42:34.502 [DEBUG] [Thread-179694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:42:34.502 [DEBUG] [Thread-179694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:42:34.536 [INFO] [Thread-179694] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:42:34.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:42:35.146 [DEBUG] [Thread-179694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:42:35.146 [DEBUG] [Thread-179694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:42:35.147 [DEBUG] [Thread-179694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:42:35.187 [DEBUG] [Thread-179694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:42:35.187 [DEBUG] [Thread-179694] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:42:35.190 [DEBUG] [Thread-179694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:42:35.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:42:35.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:42:35.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:42:35.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:42:35.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:42:35.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:42:35.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:42:35.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:42:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:42:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.945944 -999.00  +10.80  17.98     98  +10.50 1 3 1 3 1     0    0 0.23 -2.33 ----- 18.5 18.0 280.5 21.6 12.1 -0.8 11.9 -1.1 11.6 -1.0 11.9 -0.5
2026-04-12T00:42:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:42:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:42:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.945944
2026-04-12T00:42:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:42:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:42:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:42:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:42:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:42:35.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:42:09', tmtdew=0.02742, humidity=100.116, cloud=0.0, wind=22.0554, temperature=10.8801, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:42:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:42:35.219 [DEBUG] [Thread-179694] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:42:35.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:42:35.312 [DEBUG] [Thread-179697] [transport.py] [_log()] starting thread (client mode): 0xae534340
2026-04-12T00:42:35.312 [DEBUG] [Thread-179697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:42:35.327 [DEBUG] [Thread-179697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:42:35.327 [INFO] [Thread-179697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:35.335 [DEBUG] [Thread-179697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] client lang: <none>
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] server lang: <none>
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] kex follows: False
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] Compression: none
2026-04-12T00:42:35.336 [DEBUG] [Thread-179697] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:42:35.391 [DEBUG] [Thread-179697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:42:35.391 [DEBUG] [Thread-179697] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:42:35.391 [DEBUG] [Thread-179697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:42:35.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:42:35.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:42:35.449 [DEBUG] [Thread-179697] [transport.py] [_log()] userauth is OK
2026-04-12T00:42:35.449 [DEBUG] [Thread-179697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:42:35.449 [DEBUG] [Thread-179697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:42:35.449 [DEBUG] [Thread-179697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:42:35.449 [DEBUG] [Thread-179697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:42:35.468 [INFO] [Thread-179697] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:42:35.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:42:35.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:42:36.268 [DEBUG] [Thread-179697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:42:36.269 [DEBUG] [Thread-179697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:42:36.317 [DEBUG] [Thread-179697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:42:36.317 [DEBUG] [Thread-179697] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:42:36.326 [DEBUG] [Thread-179697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:42:36.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:42:36.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-04-12T00:42:36.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-04-12T00:42:36.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:42:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:42:36.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:42:36.363 [DEBUG] [Thread-179697] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:42:43.159 [DEBUG] [Thread-179699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:42:46.977 [DEBUG] [Thread-179700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:42:58.209 [DEBUG] [Thread-179701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:06.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:43:06.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:43:06.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-04-12T00:43:07.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 42, 44), -0.045, 100.232, 0.0, 24.8054, 11.1276, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:43:07.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:42:44
2026-04-12T00:43:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:43:08.297 [DEBUG] [Thread-179702] [transport.py] [_log()] starting thread (client mode): 0xb0fcce20
2026-04-12T00:43:08.297 [DEBUG] [Thread-179702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:43:08.306 [DEBUG] [Thread-179702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:43:08.307 [INFO] [Thread-179702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] client lang: <none>
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] server lang: <none>
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] kex follows: False
2026-04-12T00:43:08.308 [DEBUG] [Thread-179702] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:43:08.309 [DEBUG] [Thread-179702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:43:08.309 [DEBUG] [Thread-179702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:43:08.309 [DEBUG] [Thread-179702] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:43:08.309 [DEBUG] [Thread-179702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:43:08.309 [DEBUG] [Thread-179702] [transport.py] [_log()] Compression: none
2026-04-12T00:43:08.309 [DEBUG] [Thread-179702] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:43:08.321 [DEBUG] [Thread-179702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:43:08.321 [DEBUG] [Thread-179702] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:43:08.322 [DEBUG] [Thread-179702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:43:08.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:43:08.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:43:08.323 [DEBUG] [Thread-179702] [transport.py] [_log()] userauth is OK
2026-04-12T00:43:08.323 [DEBUG] [Thread-179702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:43:08.323 [DEBUG] [Thread-179702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:43:08.323 [DEBUG] [Thread-179702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:43:08.323 [DEBUG] [Thread-179702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:43:08.340 [INFO] [Thread-179702] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:43:08.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:43:08.527 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:08.528 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:08.938 [DEBUG] [Thread-179702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:43:08.938 [DEBUG] [Thread-179702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:43:08.938 [DEBUG] [Thread-179702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:43:08.979 [DEBUG] [Thread-179702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:43:08.979 [DEBUG] [Thread-179702] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:43:08.982 [DEBUG] [Thread-179702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:43:08.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:43:08.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:43:08.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:43:08.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:43:08.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:43:08.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:43:08.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.946291 -999.00  +10.80  15.42     98  +10.60 1 3 1 3 1     0    0 0.23 -2.14 ----- 13.3 15.4 300.6 20.8 12.1 -0.9 11.9 -0.9 11.6 -0.3 11.9 -0.4
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.946291
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:43:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:42:44', tmtdew=-0.045, humidity=100.232, cloud=0.0, wind=24.8054, temperature=11.1276, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:42:39.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:43:08.999 [DEBUG] [Thread-179702] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:43:09.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:43:09.081 [DEBUG] [Thread-179705] [transport.py] [_log()] starting thread (client mode): 0xb39c5db0
2026-04-12T00:43:09.081 [DEBUG] [Thread-179705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:43:09.096 [DEBUG] [Thread-179705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:43:09.096 [INFO] [Thread-179705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:43:09.103 [DEBUG] [Thread-179705] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:43:09.103 [DEBUG] [Thread-179705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] client lang: <none>
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] server lang: <none>
2026-04-12T00:43:09.104 [DEBUG] [Thread-179705] [transport.py] [_log()] kex follows: False
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] Compression: none
2026-04-12T00:43:09.105 [DEBUG] [Thread-179705] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:43:09.161 [DEBUG] [Thread-179705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:43:09.161 [DEBUG] [Thread-179705] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:43:09.162 [DEBUG] [Thread-179705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:43:09.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:43:09.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:43:09.216 [DEBUG] [Thread-179705] [transport.py] [_log()] userauth is OK
2026-04-12T00:43:09.217 [DEBUG] [Thread-179705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:43:09.217 [DEBUG] [Thread-179705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:43:09.217 [DEBUG] [Thread-179705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:43:09.217 [DEBUG] [Thread-179705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:43:09.236 [INFO] [Thread-179705] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:43:09.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:43:09.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:43:10.048 [DEBUG] [Thread-179705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:43:10.049 [DEBUG] [Thread-179705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:43:10.097 [DEBUG] [Thread-179705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:43:10.097 [DEBUG] [Thread-179705] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:43:10.107 [DEBUG] [Thread-179705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:43:10.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:43:10.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-04-12T00:43:10.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-04-12T00:43:10.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:43:10.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:43:10.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:43:10.144 [DEBUG] [Thread-179705] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:43:13.246 [DEBUG] [Thread-179707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:28.296 [DEBUG] [Thread-179708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:43:40.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:43:40.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-04-12T00:43:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 43, 20), 0.02492, 100.133, 0.0, 19.4447, 10.8802, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:43:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:43:20
2026-04-12T00:43:41.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:43:42.072 [DEBUG] [Thread-179709] [transport.py] [_log()] starting thread (client mode): 0xae5f11e0
2026-04-12T00:43:42.072 [DEBUG] [Thread-179709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:43:42.091 [DEBUG] [Thread-179709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:43:42.091 [INFO] [Thread-179709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:43:42.094 [DEBUG] [Thread-179709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:43:42.094 [DEBUG] [Thread-179709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] client lang: <none>
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] server lang: <none>
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] kex follows: False
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] Compression: none
2026-04-12T00:43:42.095 [DEBUG] [Thread-179709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:43:42.104 [DEBUG] [Thread-179709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:43:42.104 [DEBUG] [Thread-179709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:43:42.104 [DEBUG] [Thread-179709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:43:42.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:43:42.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:43:42.106 [DEBUG] [Thread-179709] [transport.py] [_log()] userauth is OK
2026-04-12T00:43:42.106 [DEBUG] [Thread-179709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:43:42.106 [DEBUG] [Thread-179709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:43:42.107 [DEBUG] [Thread-179709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:43:42.107 [DEBUG] [Thread-179709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:43:42.131 [INFO] [Thread-179709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:43:42.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:43:42.714 [DEBUG] [Thread-179709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:43:42.714 [DEBUG] [Thread-179709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:43:42.714 [DEBUG] [Thread-179709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:43:42.755 [DEBUG] [Thread-179709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:43:42.755 [DEBUG] [Thread-179709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:43:42.759 [DEBUG] [Thread-179709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:43:42.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:43:42.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:43:42.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:43:42.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:43:42.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:43:42.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:43:42.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:43:42.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:43:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:43:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.946638 -999.00  +10.90  17.47     98  +10.60 1 3 1 3 1     0    0 0.23 -2.27 ----- 16.4 17.5 279.2 23.8 12.1 -0.7 11.9 -0.9 11.6 -1.0 12.0 -0.5
2026-04-12T00:43:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:43:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:43:42.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.946638
2026-04-12T00:43:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:43:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:43:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:43:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:43:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:43:42.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:43:20', tmtdew=0.02492, humidity=100.133, cloud=0.0, wind=19.4447, temperature=10.8802, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:43:09.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:43:42.783 [DEBUG] [Thread-179709] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:43:42.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:43:42.878 [DEBUG] [Thread-179712] [transport.py] [_log()] starting thread (client mode): 0xae50a0e0
2026-04-12T00:43:42.878 [DEBUG] [Thread-179712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:43:42.892 [DEBUG] [Thread-179712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:43:42.893 [INFO] [Thread-179712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:43:42.900 [DEBUG] [Thread-179712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:43:42.901 [DEBUG] [Thread-179712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:43:42.901 [DEBUG] [Thread-179712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:43:42.910 [DEBUG] [Thread-179712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:42.910 [DEBUG] [Thread-179712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:43:42.910 [DEBUG] [Thread-179712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:42.910 [DEBUG] [Thread-179712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:43:42.910 [DEBUG] [Thread-179712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:43:42.910 [DEBUG] [Thread-179712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] client lang: <none>
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] server lang: <none>
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] kex follows: False
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:43:42.911 [DEBUG] [Thread-179712] [transport.py] [_log()] Compression: none
2026-04-12T00:43:42.912 [DEBUG] [Thread-179712] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:43:42.960 [DEBUG] [Thread-179712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:43:42.961 [DEBUG] [Thread-179712] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:43:42.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:43:42.962 [DEBUG] [Thread-179712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:43:42.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:43:43.020 [DEBUG] [Thread-179712] [transport.py] [_log()] userauth is OK
2026-04-12T00:43:43.020 [DEBUG] [Thread-179712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:43:43.021 [DEBUG] [Thread-179712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:43:43.021 [DEBUG] [Thread-179712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:43:43.021 [DEBUG] [Thread-179712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:43:43.044 [INFO] [Thread-179712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:43: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-04-12T00:43:43.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:43:43.338 [DEBUG] [Thread-179714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:43.886 [DEBUG] [Thread-179712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:43:43.886 [DEBUG] [Thread-179712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:43:43.934 [DEBUG] [Thread-179712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:43:43.934 [DEBUG] [Thread-179712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:43:43.943 [DEBUG] [Thread-179712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:43:43.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:43:43.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-04-12T00:43:43.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-04-12T00:43:43.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:43:43.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:43:43.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:43:43.980 [DEBUG] [Thread-179712] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:43:47.044 [DEBUG] [Thread-179715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:43:58.398 [DEBUG] [Thread-179716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:08.736 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:08.737 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:13.437 [DEBUG] [Thread-179717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:44:13.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:44:13.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-04-12T00:44:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 43, 55), 0.01736, 100.182, 0.0, 22.4266, 10.9299, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:44:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:43:55
2026-04-12T00:44:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:44:15.817 [DEBUG] [Thread-179718] [transport.py] [_log()] starting thread (client mode): 0xb39c7d90
2026-04-12T00:44:15.817 [DEBUG] [Thread-179718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:44:15.836 [DEBUG] [Thread-179718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:44:15.836 [INFO] [Thread-179718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] client lang: <none>
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] server lang: <none>
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] kex follows: False
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:44:15.838 [DEBUG] [Thread-179718] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:44:15.839 [DEBUG] [Thread-179718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:44:15.839 [DEBUG] [Thread-179718] [transport.py] [_log()] Compression: none
2026-04-12T00:44:15.839 [DEBUG] [Thread-179718] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:44:15.855 [DEBUG] [Thread-179718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:44:15.855 [DEBUG] [Thread-179718] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:44:15.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:44:15.856 [DEBUG] [Thread-179718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:44:15.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:44:15.859 [DEBUG] [Thread-179718] [transport.py] [_log()] userauth is OK
2026-04-12T00:44:15.859 [DEBUG] [Thread-179718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:44:15.859 [DEBUG] [Thread-179718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:44:15.860 [DEBUG] [Thread-179718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:44:15.860 [DEBUG] [Thread-179718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:44:15.884 [INFO] [Thread-179718] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:44:15.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:44:16.481 [DEBUG] [Thread-179718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:44:16.481 [DEBUG] [Thread-179718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:44:16.481 [DEBUG] [Thread-179718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:44:16.522 [DEBUG] [Thread-179718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:44:16.522 [DEBUG] [Thread-179718] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:44:16.525 [DEBUG] [Thread-179718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:44:16.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:44:16.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:44:16.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:44:16.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:44:16.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:44:16.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:44:16.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:44:16.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:44:16.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:44:16.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.947333 -999.00  +10.80  14.79     98  +10.50 1 3 1 3 1     0    0 0.24 -1.97 ----- 19.0 14.8 290.4 21.8 12.1 -1.1 11.9 -1.1 11.6 -1.1 11.9 -0.5
2026-04-12T00:44:16.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:44:16.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:44:16.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.947333
2026-04-12T00:44:16.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:44:16.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:44:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:44:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:44:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:44:16.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:43:55', tmtdew=0.01736, humidity=100.182, cloud=0.0, wind=22.4266, temperature=10.9299, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:44:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:44:16.552 [DEBUG] [Thread-179718] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:44:16.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:44:16.645 [DEBUG] [Thread-179721] [transport.py] [_log()] starting thread (client mode): 0xb0fccfa0
2026-04-12T00:44:16.645 [DEBUG] [Thread-179721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:44:16.661 [DEBUG] [Thread-179721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:44:16.661 [INFO] [Thread-179721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:44:16.668 [DEBUG] [Thread-179721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] client lang: <none>
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] server lang: <none>
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] kex follows: False
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] Compression: none
2026-04-12T00:44:16.669 [DEBUG] [Thread-179721] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:44:16.727 [DEBUG] [Thread-179721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:44:16.728 [DEBUG] [Thread-179721] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:44:16.729 [DEBUG] [Thread-179721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:44:16.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:44:16.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:44:16.784 [DEBUG] [Thread-179721] [transport.py] [_log()] userauth is OK
2026-04-12T00:44:16.785 [DEBUG] [Thread-179721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:44:16.785 [DEBUG] [Thread-179721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:44:16.785 [DEBUG] [Thread-179721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:44:16.785 [DEBUG] [Thread-179721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:44:16.805 [INFO] [Thread-179721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:44:16.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:44:16.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:44:17.669 [DEBUG] [Thread-179721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:44:17.669 [DEBUG] [Thread-179721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:44:17.717 [DEBUG] [Thread-179721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:44:17.717 [DEBUG] [Thread-179721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:44:17.726 [DEBUG] [Thread-179721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:44:17.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:44:17.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:44:17.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-04-12T00:44:17.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:44:17.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:44:17.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:44:17.759 [DEBUG] [Thread-179721] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:44:28.473 [DEBUG] [Thread-179723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:43.529 [DEBUG] [Thread-179724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:47.101 [DEBUG] [Thread-179725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:44:47.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:44:47.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:44: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-04-12T00:44:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 44, 31), 0.0224, 100.149, 0.0, 22.6382, 10.8967, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:44:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:44:31
2026-04-12T00:44:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:44:49.602 [DEBUG] [Thread-179726] [transport.py] [_log()] starting thread (client mode): 0xae5350c0
2026-04-12T00:44:49.602 [DEBUG] [Thread-179726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:44:49.616 [DEBUG] [Thread-179726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:44:49.616 [INFO] [Thread-179726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:44:49.617 [DEBUG] [Thread-179726] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] client lang: <none>
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] server lang: <none>
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] kex follows: False
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] Compression: none
2026-04-12T00:44:49.618 [DEBUG] [Thread-179726] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:44:49.629 [DEBUG] [Thread-179726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:44:49.630 [DEBUG] [Thread-179726] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:44:49.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:44:49.631 [DEBUG] [Thread-179726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:44:49.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:44:49.632 [DEBUG] [Thread-179726] [transport.py] [_log()] userauth is OK
2026-04-12T00:44:49.633 [DEBUG] [Thread-179726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:44:49.633 [DEBUG] [Thread-179726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:44:49.633 [DEBUG] [Thread-179726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:44:49.633 [DEBUG] [Thread-179726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:44:49.653 [INFO] [Thread-179726] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:44:49.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:44:50.228 [DEBUG] [Thread-179726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:44:50.228 [DEBUG] [Thread-179726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:44:50.229 [DEBUG] [Thread-179726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:44:50.269 [DEBUG] [Thread-179726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:44:50.270 [DEBUG] [Thread-179726] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:44:50.273 [DEBUG] [Thread-179726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:44:50.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:44:50.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:44:50.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:44:50.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:44:50.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:44:50.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:44:50.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:44:50.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:44:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:44:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.947680 -999.00  +10.80  18.37     98  +10.60 1 3 1 3 1     0    0 0.24 -2.04 ----- 18.9 18.4 283.8 20.9 12.1 -0.9 12.0 -1.0 11.6 -0.9 11.9 -0.5
2026-04-12T00:44:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:44:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:44:50.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.947680
2026-04-12T00:44:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:44:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:44:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:44:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:44:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:44:50.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:44:31', tmtdew=0.0224, humidity=100.149, cloud=0.0, wind=22.6382, temperature=10.8967, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:44:39.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:44:50.299 [DEBUG] [Thread-179726] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:44:50.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:44:50.393 [DEBUG] [Thread-179729] [transport.py] [_log()] starting thread (client mode): 0xb39c5720
2026-04-12T00:44:50.393 [DEBUG] [Thread-179729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:44:50.408 [DEBUG] [Thread-179729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:44:50.408 [INFO] [Thread-179729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] client lang: <none>
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] server lang: <none>
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] kex follows: False
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:44:50.416 [DEBUG] [Thread-179729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:44:50.417 [DEBUG] [Thread-179729] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:44:50.417 [DEBUG] [Thread-179729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:44:50.417 [DEBUG] [Thread-179729] [transport.py] [_log()] Compression: none
2026-04-12T00:44:50.417 [DEBUG] [Thread-179729] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:44:50.475 [DEBUG] [Thread-179729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:44:50.476 [DEBUG] [Thread-179729] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:44:50.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:44:50.477 [DEBUG] [Thread-179729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:44:50.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:44:50.534 [DEBUG] [Thread-179729] [transport.py] [_log()] userauth is OK
2026-04-12T00:44:50.534 [DEBUG] [Thread-179729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:44:50.534 [DEBUG] [Thread-179729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:44:50.535 [DEBUG] [Thread-179729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:44:50.535 [DEBUG] [Thread-179729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:44:50.554 [INFO] [Thread-179729] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:44:50.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:44:50.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:44:51.409 [DEBUG] [Thread-179729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:44:51.409 [DEBUG] [Thread-179729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:44:51.458 [DEBUG] [Thread-179729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:44:51.458 [DEBUG] [Thread-179729] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:44:51.468 [DEBUG] [Thread-179729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:44:51.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:44: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')
2026-04-12T00:44:51.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-04-12T00:44:51.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:44:51.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:44:51.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:44:51.508 [DEBUG] [Thread-179729] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:44:58.566 [DEBUG] [Thread-179731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:08.940 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:08.941 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:13.615 [DEBUG] [Thread-179732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:21.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:45:21.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:45:21.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-04-12T00:45:22.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 45, 6), 0.02993, 100.099, 0.0, 23.8907, 10.8636, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:45:22.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:45:06
2026-04-12T00:45:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:45:23.290 [DEBUG] [Thread-179733] [transport.py] [_log()] starting thread (client mode): 0xae50bb80
2026-04-12T00:45:23.290 [DEBUG] [Thread-179733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:45:23.310 [DEBUG] [Thread-179733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:45:23.310 [INFO] [Thread-179733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:45:23.313 [DEBUG] [Thread-179733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] client lang: <none>
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] server lang: <none>
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] kex follows: False
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] Compression: none
2026-04-12T00:45:23.314 [DEBUG] [Thread-179733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:45:23.331 [DEBUG] [Thread-179733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:45:23.331 [DEBUG] [Thread-179733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:45:23.331 [DEBUG] [Thread-179733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:45:23.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:45:23.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:45:23.333 [DEBUG] [Thread-179733] [transport.py] [_log()] userauth is OK
2026-04-12T00:45:23.333 [DEBUG] [Thread-179733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:45:23.333 [DEBUG] [Thread-179733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:45:23.334 [DEBUG] [Thread-179733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:45:23.334 [DEBUG] [Thread-179733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:45:23.357 [INFO] [Thread-179733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:45:23.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:45:23.916 [DEBUG] [Thread-179733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:45:23.917 [DEBUG] [Thread-179733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:45:23.917 [DEBUG] [Thread-179733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:45:23.957 [DEBUG] [Thread-179733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:45:23.958 [DEBUG] [Thread-179733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:45:23.961 [DEBUG] [Thread-179733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:45:23.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:45:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:45:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:45:23.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:45:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:45:23.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:45:23.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:45:23.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:45:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:45:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.948027 -999.00  +10.90  17.83     98  +10.60 1 3 1 3 1     0    0 0.24 -1.93 ----- 18.1 17.8 287.6 23.3 12.1 -0.9 11.9 -1.0 11.6 -1.1 12.0 -0.5
2026-04-12T00:45:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:45:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:45:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.948027
2026-04-12T00:45:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:45:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:45:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:45:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:45:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:45:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:45:06', tmtdew=0.02993, humidity=100.099, cloud=0.0, wind=23.8907, temperature=10.8636, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:45:09.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:45:23.984 [DEBUG] [Thread-179733] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:45:24.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:45:24.088 [DEBUG] [Thread-179736] [transport.py] [_log()] starting thread (client mode): 0xa7957940
2026-04-12T00:45:24.088 [DEBUG] [Thread-179736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:45:24.104 [DEBUG] [Thread-179736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:45:24.104 [INFO] [Thread-179736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:45:24.112 [DEBUG] [Thread-179736] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:45:24.112 [DEBUG] [Thread-179736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:45:24.113 [DEBUG] [Thread-179736] [transport.py] [_log()] client lang: <none>
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] server lang: <none>
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] kex follows: False
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] Compression: none
2026-04-12T00:45:24.114 [DEBUG] [Thread-179736] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:45:24.175 [DEBUG] [Thread-179736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:45:24.176 [DEBUG] [Thread-179736] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:45:24.176 [DEBUG] [Thread-179736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:45:24.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:45:24.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:45:24.231 [DEBUG] [Thread-179736] [transport.py] [_log()] userauth is OK
2026-04-12T00:45:24.231 [DEBUG] [Thread-179736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:45:24.231 [DEBUG] [Thread-179736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:45:24.231 [DEBUG] [Thread-179736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:45:24.232 [DEBUG] [Thread-179736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:45:24.251 [INFO] [Thread-179736] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:45:24.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:45:24.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:45:25.107 [DEBUG] [Thread-179736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:45:25.107 [DEBUG] [Thread-179736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:45:25.155 [DEBUG] [Thread-179736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:45:25.156 [DEBUG] [Thread-179736] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:45:25.165 [DEBUG] [Thread-179736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:45:25.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:45:25.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-04-12T00:45:25.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:45:25.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:45:25.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:45:25.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:45:25.209 [DEBUG] [Thread-179736] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:45:28.649 [DEBUG] [Thread-179738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:43.699 [DEBUG] [Thread-179739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:47.159 [DEBUG] [Thread-179740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:55.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:45:55.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:45:55.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-04-12T00:45:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 45, 42), -0.04014, 100.199, 0.0, 24.9113, 11.2271, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:45:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:45:42
2026-04-12T00:45:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:45:57.055 [DEBUG] [Thread-179741] [transport.py] [_log()] starting thread (client mode): 0xb39c5720
2026-04-12T00:45:57.055 [DEBUG] [Thread-179741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:45:57.075 [DEBUG] [Thread-179741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:45:57.075 [INFO] [Thread-179741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] client lang: <none>
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] server lang: <none>
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] kex follows: False
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] Compression: none
2026-04-12T00:45:57.078 [DEBUG] [Thread-179741] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:45:57.096 [DEBUG] [Thread-179741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:45:57.097 [DEBUG] [Thread-179741] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:45:57.097 [DEBUG] [Thread-179741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:45:57.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:45:57.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:45:57.099 [DEBUG] [Thread-179741] [transport.py] [_log()] userauth is OK
2026-04-12T00:45:57.099 [DEBUG] [Thread-179741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:45:57.100 [DEBUG] [Thread-179741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:45:57.100 [DEBUG] [Thread-179741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:45:57.100 [DEBUG] [Thread-179741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:45:57.124 [INFO] [Thread-179741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:45:57.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:45:57.729 [DEBUG] [Thread-179741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:45:57.730 [DEBUG] [Thread-179741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:45:57.730 [DEBUG] [Thread-179741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:45:57.772 [DEBUG] [Thread-179741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:45:57.772 [DEBUG] [Thread-179741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:45:57.774 [DEBUG] [Thread-179741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:45:57.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:45:57.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:45:57.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:45:57.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:45:57.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:45:57.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:45:57.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:45:57.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:45:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.948374 -999.00  +10.90  17.83     98  +10.60 1 3 1 3 1     0    0 0.24 -1.80 ----- 18.4 17.8 278.6 22.6 12.1 -0.9 12.0 -0.9 11.6 -0.7 12.0 -0.5
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.948374
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:45:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:45:42', tmtdew=-0.04014, humidity=100.199, cloud=0.0, wind=24.9113, temperature=11.2271, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:45:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:45:57.794 [DEBUG] [Thread-179741] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:45:57.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:45:57.892 [DEBUG] [Thread-179744] [transport.py] [_log()] starting thread (client mode): 0xae5a73d0
2026-04-12T00:45:57.892 [DEBUG] [Thread-179744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:45:57.906 [DEBUG] [Thread-179744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:45:57.906 [INFO] [Thread-179744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:45:57.913 [DEBUG] [Thread-179744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:45:57.913 [DEBUG] [Thread-179744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:45:57.913 [DEBUG] [Thread-179744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:45:57.913 [DEBUG] [Thread-179744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:57.913 [DEBUG] [Thread-179744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] client lang: <none>
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] server lang: <none>
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] kex follows: False
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] Compression: none
2026-04-12T00:45:57.914 [DEBUG] [Thread-179744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:45:57.970 [DEBUG] [Thread-179744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:45:57.971 [DEBUG] [Thread-179744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:45:57.971 [DEBUG] [Thread-179744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:45:57.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:45:57.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:45:58.027 [DEBUG] [Thread-179744] [transport.py] [_log()] userauth is OK
2026-04-12T00:45:58.027 [DEBUG] [Thread-179744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:45:58.027 [DEBUG] [Thread-179744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:45:58.027 [DEBUG] [Thread-179744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:45:58.028 [DEBUG] [Thread-179744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:45:58.046 [INFO] [Thread-179744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:45: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-04-12T00:45:58.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:45:58.738 [DEBUG] [Thread-179746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:45:58.865 [DEBUG] [Thread-179744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:45:58.865 [DEBUG] [Thread-179744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:45:58.913 [DEBUG] [Thread-179744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:45:58.913 [DEBUG] [Thread-179744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:45:58.923 [DEBUG] [Thread-179744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:45:58.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:45:58.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:45:58.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:45:58.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:45:58.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:45:58.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:45:58.960 [DEBUG] [Thread-179744] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:46:09.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:46:09.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:46:13.790 [DEBUG] [Thread-179747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:46:28.827 [DEBUG] [Thread-179748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:46:28.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:46:28.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:46:28.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-04-12T00:46:30.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 46, 17), 0.01988, 100.166, 0.0, 20.0797, 10.9133, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:46:30.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:46:17
2026-04-12T00:46:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:46:30.822 [DEBUG] [Thread-179749] [transport.py] [_log()] starting thread (client mode): 0xb0fccc70
2026-04-12T00:46:30.822 [DEBUG] [Thread-179749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:46:30.842 [DEBUG] [Thread-179749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:46:30.842 [INFO] [Thread-179749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] client lang: <none>
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] server lang: <none>
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] kex follows: False
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:46:30.843 [DEBUG] [Thread-179749] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:46:30.844 [DEBUG] [Thread-179749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:46:30.844 [DEBUG] [Thread-179749] [transport.py] [_log()] Compression: none
2026-04-12T00:46:30.844 [DEBUG] [Thread-179749] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:46:30.851 [DEBUG] [Thread-179749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:46:30.852 [DEBUG] [Thread-179749] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:46:30.852 [DEBUG] [Thread-179749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:46:30.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:46:30.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:46:30.853 [DEBUG] [Thread-179749] [transport.py] [_log()] userauth is OK
2026-04-12T00:46:30.853 [DEBUG] [Thread-179749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:46:30.853 [DEBUG] [Thread-179749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:46:30.853 [DEBUG] [Thread-179749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:46:30.853 [DEBUG] [Thread-179749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:46:30.866 [INFO] [Thread-179749] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:46:30.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:46:31.533 [DEBUG] [Thread-179749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:46:31.533 [DEBUG] [Thread-179749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:46:31.534 [DEBUG] [Thread-179749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:46:31.574 [DEBUG] [Thread-179749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:46:31.574 [DEBUG] [Thread-179749] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:46:31.578 [DEBUG] [Thread-179749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:46:31.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:46:31.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:46:31.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:46:31.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:46:31.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:46:31.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:46:31.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:46:31.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:46:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:46:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.948722 -999.00  +10.90  15.79     98  +10.60 1 3 1 3 1     0    0 0.25 -1.48 ----- 16.9 15.8 277.6 22.6 12.1 -0.9 12.0 -1.1 11.6 -0.4 12.0 -0.5
2026-04-12T00:46:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:46:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:46:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.948722
2026-04-12T00:46:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:46:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:46:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:46:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:46:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:46:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:46:17', tmtdew=0.01988, humidity=100.166, cloud=0.0, wind=20.0797, temperature=10.9133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:46:09.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:46:31.604 [DEBUG] [Thread-179749] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:46:31.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:46:31.698 [DEBUG] [Thread-179752] [transport.py] [_log()] starting thread (client mode): 0xb0fccbe0
2026-04-12T00:46:31.698 [DEBUG] [Thread-179752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:46:31.712 [DEBUG] [Thread-179752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:46:31.712 [INFO] [Thread-179752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] client lang: <none>
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] server lang: <none>
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] kex follows: False
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:46:31.720 [DEBUG] [Thread-179752] [transport.py] [_log()] Compression: none
2026-04-12T00:46:31.721 [DEBUG] [Thread-179752] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:46:31.778 [DEBUG] [Thread-179752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:46:31.779 [DEBUG] [Thread-179752] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:46:31.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:46:31.780 [DEBUG] [Thread-179752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:46:31.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:46:31.834 [DEBUG] [Thread-179752] [transport.py] [_log()] userauth is OK
2026-04-12T00:46:31.835 [DEBUG] [Thread-179752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:46:31.835 [DEBUG] [Thread-179752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:46:31.835 [DEBUG] [Thread-179752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:46:31.835 [DEBUG] [Thread-179752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:46:31.854 [INFO] [Thread-179752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:46:31.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:46:31.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:46:32.662 [DEBUG] [Thread-179752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:46:32.662 [DEBUG] [Thread-179752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:46:32.718 [DEBUG] [Thread-179752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:46:32.718 [DEBUG] [Thread-179752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:46:32.739 [DEBUG] [Thread-179752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:46:32.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:46:32.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-04-12T00:46:32.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-04-12T00:46:32.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:46:32.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:46:32.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:46:32.783 [DEBUG] [Thread-179752] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:46:43.863 [DEBUG] [Thread-179754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:46:47.217 [DEBUG] [Thread-179755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:46:58.924 [DEBUG] [Thread-179756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:47:02.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:47: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-04-12T00:47:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 46, 53), -0.05524, 100.298, 0.0, 23.9587, 11.3267, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:47:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:46:53
2026-04-12T00:47:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:47:04.721 [DEBUG] [Thread-179757] [transport.py] [_log()] starting thread (client mode): 0xa7957940
2026-04-12T00:47:04.721 [DEBUG] [Thread-179757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:47:04.740 [DEBUG] [Thread-179757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:47:04.740 [INFO] [Thread-179757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] client lang: <none>
2026-04-12T00:47:04.743 [DEBUG] [Thread-179757] [transport.py] [_log()] server lang: <none>
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] kex follows: False
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] Compression: none
2026-04-12T00:47:04.744 [DEBUG] [Thread-179757] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:47:04.751 [DEBUG] [Thread-179757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:47:04.751 [DEBUG] [Thread-179757] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:47:04.751 [DEBUG] [Thread-179757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:47:04.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:47:04.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:47:04.752 [DEBUG] [Thread-179757] [transport.py] [_log()] userauth is OK
2026-04-12T00:47:04.752 [DEBUG] [Thread-179757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:47:04.752 [DEBUG] [Thread-179757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:47:04.752 [DEBUG] [Thread-179757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:47:04.752 [DEBUG] [Thread-179757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:47:04.771 [INFO] [Thread-179757] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:47:04.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:47:05.363 [DEBUG] [Thread-179757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:47:05.364 [DEBUG] [Thread-179757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:47:05.364 [DEBUG] [Thread-179757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:47:05.404 [DEBUG] [Thread-179757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:47:05.405 [DEBUG] [Thread-179757] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:47:05.408 [DEBUG] [Thread-179757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:47:05.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:47:05.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:47:05.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:47:05.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:47:05.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:47:05.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:47:05.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:47:05.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:47:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:47:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.949069 -999.00  +10.90  18.86     98  +10.60 1 3 1 3 1     0    0 0.25 -1.43 ----- 21.6 18.9 284.6 23.9 12.1 -0.8 11.9 -1.1 11.6 -0.9 12.0 -0.5
2026-04-12T00:47:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:47:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:47:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.949069
2026-04-12T00:47:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:47:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:47:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:47:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:47:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:47:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:46:53', tmtdew=-0.05524, humidity=100.298, cloud=0.0, wind=23.9587, temperature=11.3267, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:46:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:47:05.435 [DEBUG] [Thread-179757] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:47:05.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:47:05.523 [DEBUG] [Thread-179760] [transport.py] [_log()] starting thread (client mode): 0xae50b250
2026-04-12T00:47:05.523 [DEBUG] [Thread-179760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:47:05.537 [DEBUG] [Thread-179760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:47:05.537 [INFO] [Thread-179760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] client lang: <none>
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] server lang: <none>
2026-04-12T00:47:05.545 [DEBUG] [Thread-179760] [transport.py] [_log()] kex follows: False
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] Compression: none
2026-04-12T00:47:05.546 [DEBUG] [Thread-179760] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:47:05.602 [DEBUG] [Thread-179760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:47:05.603 [DEBUG] [Thread-179760] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:47:05.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:47:05.604 [DEBUG] [Thread-179760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:47:05.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:47:05.658 [DEBUG] [Thread-179760] [transport.py] [_log()] userauth is OK
2026-04-12T00:47:05.658 [DEBUG] [Thread-179760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:47:05.658 [DEBUG] [Thread-179760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:47:05.658 [DEBUG] [Thread-179760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:47:05.659 [DEBUG] [Thread-179760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:47:05.677 [INFO] [Thread-179760] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:47:05.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:47:05.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:47:06.496 [DEBUG] [Thread-179760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:47:06.496 [DEBUG] [Thread-179760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:47:06.544 [DEBUG] [Thread-179760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:47:06.544 [DEBUG] [Thread-179760] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:47:06.554 [DEBUG] [Thread-179760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:47:06.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:47:06.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-04-12T00:47:06.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-04-12T00:47:06.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:47:06.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:47:06.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:47:06.590 [DEBUG] [Thread-179760] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:47:09.349 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:09.350 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:13.961 [DEBUG] [Thread-179762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:29.009 [DEBUG] [Thread-179763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:36.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:47:36.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:47:36.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-04-12T00:47:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 47, 29), -0.027645, 100.149, 0.0, 24.5088, 10.8799, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:47:37.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:47:29
2026-04-12T00:47:38.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:47:38.416 [DEBUG] [Thread-179764] [transport.py] [_log()] starting thread (client mode): 0xae5a7d00
2026-04-12T00:47:38.416 [DEBUG] [Thread-179764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:47:38.435 [DEBUG] [Thread-179764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:47:38.435 [INFO] [Thread-179764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] client lang: <none>
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] server lang: <none>
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] kex follows: False
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] Compression: none
2026-04-12T00:47:38.439 [DEBUG] [Thread-179764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:47:38.457 [DEBUG] [Thread-179764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:47:38.458 [DEBUG] [Thread-179764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:47:38.458 [DEBUG] [Thread-179764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:47:38.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:47:38.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:47:38.460 [DEBUG] [Thread-179764] [transport.py] [_log()] userauth is OK
2026-04-12T00:47:38.461 [DEBUG] [Thread-179764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:47:38.461 [DEBUG] [Thread-179764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:47:38.461 [DEBUG] [Thread-179764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:47:38.461 [DEBUG] [Thread-179764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:47:38.479 [INFO] [Thread-179764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:47:38.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:47:39.106 [DEBUG] [Thread-179764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:47:39.106 [DEBUG] [Thread-179764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:47:39.107 [DEBUG] [Thread-179764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:47:39.147 [DEBUG] [Thread-179764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:47:39.147 [DEBUG] [Thread-179764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:47:39.151 [DEBUG] [Thread-179764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:47:39.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:47:39.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:47:39.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:47:39.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:47:39.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:47:39.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:47:39.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:47:39.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:47:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:47:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.949416 -999.00  +10.80  19.90     98  +10.50 1 3 1 3 1     0    0 0.24 -1.50 ----- 21.9 19.9 287.4 27.8 12.1 -1.2 12.0 -1.2 11.6 -0.5 11.9 -0.5
2026-04-12T00:47:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:47:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:47:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.949416
2026-04-12T00:47:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:47:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:47:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:47:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:47:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:47:39.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:47:29', tmtdew=-0.027645, humidity=100.149, cloud=0.0, wind=24.5088, temperature=10.8799, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:47:09.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:47:39.179 [DEBUG] [Thread-179764] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:47: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-04-12T00:47:39.275 [DEBUG] [Thread-179767] [transport.py] [_log()] starting thread (client mode): 0xae508340
2026-04-12T00:47:39.275 [DEBUG] [Thread-179767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:47:39.289 [DEBUG] [Thread-179767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:47:39.289 [INFO] [Thread-179767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:47:39.297 [DEBUG] [Thread-179767] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:47:39.298 [DEBUG] [Thread-179767] [transport.py] [_log()] client lang: <none>
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] server lang: <none>
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] kex follows: False
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:47:39.299 [DEBUG] [Thread-179767] [transport.py] [_log()] Compression: none
2026-04-12T00:47:39.300 [DEBUG] [Thread-179767] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:47:39.355 [DEBUG] [Thread-179767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:47:39.355 [DEBUG] [Thread-179767] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:47:39.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:47:39.356 [DEBUG] [Thread-179767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:47:39.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:47:39.414 [DEBUG] [Thread-179767] [transport.py] [_log()] userauth is OK
2026-04-12T00:47:39.414 [DEBUG] [Thread-179767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:47:39.415 [DEBUG] [Thread-179767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:47:39.415 [DEBUG] [Thread-179767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:47:39.415 [DEBUG] [Thread-179767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:47:39.433 [INFO] [Thread-179767] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:47:39.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:47:39.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:47:40.231 [DEBUG] [Thread-179767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:47:40.231 [DEBUG] [Thread-179767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:47:40.279 [DEBUG] [Thread-179767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:47:40.279 [DEBUG] [Thread-179767] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:47:40.288 [DEBUG] [Thread-179767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:47:40.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:47:40.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-04-12T00:47:40.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-04-12T00:47:40.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:47:40.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:47:40.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:47:40.326 [DEBUG] [Thread-179767] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:47:44.044 [DEBUG] [Thread-179769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:47.273 [DEBUG] [Thread-179770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:47:59.097 [DEBUG] [Thread-179771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:09.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:09.556 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:10.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:48:10.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:48:10.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-04-12T00:48:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 47, 29), -0.027645, 100.149, 0.0, 24.5088, 10.8799, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:48:11.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:47:29
2026-04-12T00:48:12.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:48:12.284 [DEBUG] [Thread-179772] [transport.py] [_log()] starting thread (client mode): 0xae5a53f0
2026-04-12T00:48:12.284 [DEBUG] [Thread-179772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:48:12.305 [DEBUG] [Thread-179772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:48:12.305 [INFO] [Thread-179772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:48:12.308 [DEBUG] [Thread-179772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] client lang: <none>
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] server lang: <none>
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] kex follows: False
2026-04-12T00:48:12.309 [DEBUG] [Thread-179772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:48:12.310 [DEBUG] [Thread-179772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:48:12.310 [DEBUG] [Thread-179772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:48:12.310 [DEBUG] [Thread-179772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:48:12.310 [DEBUG] [Thread-179772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:48:12.310 [DEBUG] [Thread-179772] [transport.py] [_log()] Compression: none
2026-04-12T00:48:12.310 [DEBUG] [Thread-179772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:48:12.329 [DEBUG] [Thread-179772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:48:12.330 [DEBUG] [Thread-179772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:48:12.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:48:12.332 [DEBUG] [Thread-179772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:48:12.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:48:12.334 [DEBUG] [Thread-179772] [transport.py] [_log()] userauth is OK
2026-04-12T00:48:12.334 [DEBUG] [Thread-179772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:48:12.334 [DEBUG] [Thread-179772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:48:12.334 [DEBUG] [Thread-179772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:48:12.334 [DEBUG] [Thread-179772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:48:12.358 [INFO] [Thread-179772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:48:12.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:48:12.933 [DEBUG] [Thread-179772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:48:12.933 [DEBUG] [Thread-179772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:48:12.934 [DEBUG] [Thread-179772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:48:12.974 [DEBUG] [Thread-179772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:48:12.974 [DEBUG] [Thread-179772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:48:12.977 [DEBUG] [Thread-179772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:48:12.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:48:12.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:48:12.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:48:12.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:48:13.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:48:13.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:48:13.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:48:13.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:48:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:48:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.949763 -999.00  +10.80  23.03     98  +10.50 1 3 1 3 1     0    0 0.25 -1.32 ----- 19.6 23.0 275.2 27.8 12.1 -1.0 11.9 -1.0 11.6 -0.7 12.0 -0.5
2026-04-12T00:48:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:48:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:48:13.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.949763
2026-04-12T00:48:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:48:13.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:48:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:48:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:48:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:48:13.005 [DEBUG] [Thread-179772] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:48:13.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:47:29', tmtdew=-0.027645, humidity=100.149, cloud=0.0, wind=24.5088, temperature=10.8799, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:47:39.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:48:13.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:48:13.106 [DEBUG] [Thread-179775] [transport.py] [_log()] starting thread (client mode): 0xb0fcf430
2026-04-12T00:48:13.106 [DEBUG] [Thread-179775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:48:13.122 [DEBUG] [Thread-179775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:48:13.123 [INFO] [Thread-179775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:48:13.133 [DEBUG] [Thread-179775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] client lang: <none>
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] server lang: <none>
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] kex follows: False
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:48:13.134 [DEBUG] [Thread-179775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:48:13.135 [DEBUG] [Thread-179775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:48:13.135 [DEBUG] [Thread-179775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:48:13.135 [DEBUG] [Thread-179775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:48:13.135 [DEBUG] [Thread-179775] [transport.py] [_log()] Compression: none
2026-04-12T00:48:13.135 [DEBUG] [Thread-179775] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:48:13.195 [DEBUG] [Thread-179775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:48:13.195 [DEBUG] [Thread-179775] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:48:13.196 [DEBUG] [Thread-179775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:48:13.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:48:13.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:48:13.254 [DEBUG] [Thread-179775] [transport.py] [_log()] userauth is OK
2026-04-12T00:48:13.254 [DEBUG] [Thread-179775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:48:13.255 [DEBUG] [Thread-179775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:48:13.255 [DEBUG] [Thread-179775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:48:13.255 [DEBUG] [Thread-179775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:48:13.273 [INFO] [Thread-179775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:48:13.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:48:13.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:48:14.109 [DEBUG] [Thread-179775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:48:14.110 [DEBUG] [Thread-179775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:48:14.134 [DEBUG] [Thread-179777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:14.158 [DEBUG] [Thread-179775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:48:14.158 [DEBUG] [Thread-179775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:48:14.167 [DEBUG] [Thread-179775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:48:14.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:48:14.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-04-12T00:48:14.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:48:14.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:48:14.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:48:14.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:48:14.203 [DEBUG] [Thread-179775] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:48:29.185 [DEBUG] [Thread-179778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:44.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:48:44.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:48:44.221 [DEBUG] [Thread-179779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:44.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-04-12T00:48:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 48, 4), -0.02513, 100.133, 0.0, 24.1736, 10.8633, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:48:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:48:04
2026-04-12T00:48:45.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:48:46.089 [DEBUG] [Thread-179780] [transport.py] [_log()] starting thread (client mode): 0xb0fe8c70
2026-04-12T00:48:46.090 [DEBUG] [Thread-179780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:48:46.110 [DEBUG] [Thread-179780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:48:46.110 [INFO] [Thread-179780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] client lang: <none>
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] server lang: <none>
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] kex follows: False
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] Compression: none
2026-04-12T00:48:46.112 [DEBUG] [Thread-179780] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:48:46.132 [DEBUG] [Thread-179780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:48:46.132 [DEBUG] [Thread-179780] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:48:46.133 [DEBUG] [Thread-179780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:48:46.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:48:46.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:48:46.135 [DEBUG] [Thread-179780] [transport.py] [_log()] userauth is OK
2026-04-12T00:48:46.135 [DEBUG] [Thread-179780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:48:46.135 [DEBUG] [Thread-179780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:48:46.135 [DEBUG] [Thread-179780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:48:46.136 [DEBUG] [Thread-179780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:48:46.170 [INFO] [Thread-179780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:48:46.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:48:46.821 [DEBUG] [Thread-179780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:48:46.822 [DEBUG] [Thread-179780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:48:46.822 [DEBUG] [Thread-179780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:48:46.863 [DEBUG] [Thread-179780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:48:46.863 [DEBUG] [Thread-179780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:48:46.866 [DEBUG] [Thread-179780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:48:46.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:48:46.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:48:46.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:48:46.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:48:46.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:48:46.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:48:46.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:48:46.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:48:46.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:48:46.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.950110 -999.00  +10.80  21.18     98  +10.50 1 3 1 3 1     0    0 0.25 -1.22 ----- 16.8 21.2 274.6 28.4 12.0 -1.1 12.0 -1.1 11.6 -0.8 11.9 -0.7
2026-04-12T00:48:46.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:48:46.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:48:46.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.950110
2026-04-12T00:48:46.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:48:46.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:48:46.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:48:46.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:48:46.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:48:46.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:48:04', tmtdew=-0.02513, humidity=100.133, cloud=0.0, wind=24.1736, temperature=10.8633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:48:09.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:48:46.889 [DEBUG] [Thread-179780] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:48:46.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:48:46.983 [DEBUG] [Thread-179783] [transport.py] [_log()] starting thread (client mode): 0xb0fea4a0
2026-04-12T00:48:46.983 [DEBUG] [Thread-179783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:48:46.998 [DEBUG] [Thread-179783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:48:46.998 [INFO] [Thread-179783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:48:47.005 [DEBUG] [Thread-179783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:48:47.005 [DEBUG] [Thread-179783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] client lang: <none>
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] server lang: <none>
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] kex follows: False
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] Compression: none
2026-04-12T00:48:47.006 [DEBUG] [Thread-179783] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:48:47.066 [DEBUG] [Thread-179783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:48:47.066 [DEBUG] [Thread-179783] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:48:47.067 [DEBUG] [Thread-179783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:48:47.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:48:47.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:48:47.121 [DEBUG] [Thread-179783] [transport.py] [_log()] userauth is OK
2026-04-12T00:48:47.122 [DEBUG] [Thread-179783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:48:47.122 [DEBUG] [Thread-179783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:48:47.122 [DEBUG] [Thread-179783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:48:47.122 [DEBUG] [Thread-179783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:48:47.141 [INFO] [Thread-179783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:48:47.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:48:47.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:48:47.337 [DEBUG] [Thread-179785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:48:47.958 [DEBUG] [Thread-179783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:48:47.958 [DEBUG] [Thread-179783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:48:48.006 [DEBUG] [Thread-179783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:48:48.006 [DEBUG] [Thread-179783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:48:48.015 [DEBUG] [Thread-179783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:48:48.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:48:48.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-04-12T00:48:48.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-04-12T00:48:48.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:48:48.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:48:48.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:48:48.049 [DEBUG] [Thread-179783] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:48:59.259 [DEBUG] [Thread-179786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:09.760 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:09.761 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:14.312 [DEBUG] [Thread-179787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:49:18.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:49:18.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-04-12T00:49:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 48, 40), -0.04026, 100.199, 0.0, 25.123, 11.3267, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:49:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:48:40
2026-04-12T00:49:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:49:19.917 [DEBUG] [Thread-179788] [transport.py] [_log()] starting thread (client mode): 0xb0feb8b0
2026-04-12T00:49:19.917 [DEBUG] [Thread-179788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:49:19.938 [DEBUG] [Thread-179788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:49:19.938 [INFO] [Thread-179788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:49:19.941 [DEBUG] [Thread-179788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:49:19.941 [DEBUG] [Thread-179788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:49:19.941 [DEBUG] [Thread-179788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] client lang: <none>
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] server lang: <none>
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] kex follows: False
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:49:19.942 [DEBUG] [Thread-179788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:49:19.943 [DEBUG] [Thread-179788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:49:19.943 [DEBUG] [Thread-179788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:49:19.943 [DEBUG] [Thread-179788] [transport.py] [_log()] Compression: none
2026-04-12T00:49:19.943 [DEBUG] [Thread-179788] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:49:19.962 [DEBUG] [Thread-179788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:49:19.963 [DEBUG] [Thread-179788] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:49:19.964 [DEBUG] [Thread-179788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:49:19.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:49:19.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:49:19.966 [DEBUG] [Thread-179788] [transport.py] [_log()] userauth is OK
2026-04-12T00:49:19.967 [DEBUG] [Thread-179788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:49:19.967 [DEBUG] [Thread-179788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:49:19.967 [DEBUG] [Thread-179788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:49:19.967 [DEBUG] [Thread-179788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:49:19.999 [INFO] [Thread-179788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:49:20.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:49:20.619 [DEBUG] [Thread-179788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:49:20.619 [DEBUG] [Thread-179788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:49:20.620 [DEBUG] [Thread-179788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:49:20.660 [DEBUG] [Thread-179788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:49:20.660 [DEBUG] [Thread-179788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:49:20.663 [DEBUG] [Thread-179788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:49:20.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:49:20.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:49:20.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:49:20.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:49:20.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:49:20.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:49:20.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:49:20.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:49:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:49:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.950805 -999.00  +10.80  22.08     98  +10.50 1 3 1 3 1     0    0 0.25 -1.29 ----- 22.1 22.1 278.4 33.2 12.0 -1.0 11.9 -1.0 11.5 -1.0 11.9 -0.7
2026-04-12T00:49:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:49:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:49:20.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.950805
2026-04-12T00:49:20.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:49:20.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:49:20.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:49:20.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:49:20.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:49:20.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:48:40', tmtdew=-0.04026, humidity=100.199, cloud=0.0, wind=25.123, temperature=11.3267, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:49:09.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:49:20.683 [DEBUG] [Thread-179788] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:49:20.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:49:20.776 [DEBUG] [Thread-179791] [transport.py] [_log()] starting thread (client mode): 0xb0fe8610
2026-04-12T00:49:20.776 [DEBUG] [Thread-179791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:49:20.791 [DEBUG] [Thread-179791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:49:20.791 [INFO] [Thread-179791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:49:20.798 [DEBUG] [Thread-179791] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:49:20.798 [DEBUG] [Thread-179791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:49:20.798 [DEBUG] [Thread-179791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] client lang: <none>
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] server lang: <none>
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] kex follows: False
2026-04-12T00:49:20.799 [DEBUG] [Thread-179791] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:49:20.800 [DEBUG] [Thread-179791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:49:20.800 [DEBUG] [Thread-179791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:49:20.800 [DEBUG] [Thread-179791] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:49:20.800 [DEBUG] [Thread-179791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:49:20.800 [DEBUG] [Thread-179791] [transport.py] [_log()] Compression: none
2026-04-12T00:49:20.800 [DEBUG] [Thread-179791] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:49:20.857 [DEBUG] [Thread-179791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:49:20.858 [DEBUG] [Thread-179791] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:49:20.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:49:20.859 [DEBUG] [Thread-179791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:49:20.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:49:20.913 [DEBUG] [Thread-179791] [transport.py] [_log()] userauth is OK
2026-04-12T00:49:20.914 [DEBUG] [Thread-179791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:49:20.914 [DEBUG] [Thread-179791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:49:20.914 [DEBUG] [Thread-179791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:49:20.914 [DEBUG] [Thread-179791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:49:20.938 [INFO] [Thread-179791] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:49:20.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:49:20.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:49:21.777 [DEBUG] [Thread-179791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:49:21.777 [DEBUG] [Thread-179791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:49:21.825 [DEBUG] [Thread-179791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:49:21.826 [DEBUG] [Thread-179791] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:49:21.836 [DEBUG] [Thread-179791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:49:21.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:49:21.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-04-12T00:49:21.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-04-12T00:49:21.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:49:21.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:49:21.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:49:21.869 [DEBUG] [Thread-179791] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:49:29.346 [DEBUG] [Thread-179793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:44.396 [DEBUG] [Thread-179794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:47.412 [DEBUG] [Thread-179795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:49:51.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:49:51.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:49:51.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-04-12T00:49:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 49, 15), -0.027625, 100.149, 0.0, 24.6316, 10.8633, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:49:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:49:15
2026-04-12T00:49:53.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:49:53.738 [DEBUG] [Thread-179796] [transport.py] [_log()] starting thread (client mode): 0xb0fea110
2026-04-12T00:49:53.738 [DEBUG] [Thread-179796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:49:53.761 [DEBUG] [Thread-179796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:49:53.761 [INFO] [Thread-179796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] client lang: <none>
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] server lang: <none>
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] kex follows: False
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:49:53.765 [DEBUG] [Thread-179796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:49:53.766 [DEBUG] [Thread-179796] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:49:53.766 [DEBUG] [Thread-179796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:49:53.766 [DEBUG] [Thread-179796] [transport.py] [_log()] Compression: none
2026-04-12T00:49:53.766 [DEBUG] [Thread-179796] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:49:53.784 [DEBUG] [Thread-179796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:49:53.785 [DEBUG] [Thread-179796] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:49:53.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:49:53.785 [DEBUG] [Thread-179796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:49:53.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:49:53.788 [DEBUG] [Thread-179796] [transport.py] [_log()] userauth is OK
2026-04-12T00:49:53.788 [DEBUG] [Thread-179796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:49:53.788 [DEBUG] [Thread-179796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:49:53.788 [DEBUG] [Thread-179796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:49:53.788 [DEBUG] [Thread-179796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:49:53.813 [INFO] [Thread-179796] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:49:53.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:49:54.489 [DEBUG] [Thread-179796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:49:54.489 [DEBUG] [Thread-179796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:49:54.490 [DEBUG] [Thread-179796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:49:54.530 [DEBUG] [Thread-179796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:49:54.531 [DEBUG] [Thread-179796] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:49:54.534 [DEBUG] [Thread-179796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:49:54.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:49:54.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:49:54.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:49:54.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:49:54.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:49:54.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:49:54.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:49:54.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:49:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:49:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.951152 -999.00  +10.80  22.40     98  +10.50 1 3 1 3 1     0    0 0.26 -1.28 ----- 19.2 22.4 278.2 27.6 12.0 -0.9 12.0 -0.9 11.6 -0.6 11.9 -0.6
2026-04-12T00:49:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:49:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:49:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.951152
2026-04-12T00:49:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:49:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:49:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:49:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:49:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:49:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:49:15', tmtdew=-0.027625, humidity=100.149, cloud=0.0, wind=24.6316, temperature=10.8633, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:49:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:49:54.562 [DEBUG] [Thread-179796] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:49:54.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:49:54.655 [DEBUG] [Thread-179799] [transport.py] [_log()] starting thread (client mode): 0xb0fea9b0
2026-04-12T00:49:54.655 [DEBUG] [Thread-179799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:49:54.670 [DEBUG] [Thread-179799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:49:54.670 [INFO] [Thread-179799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:49:54.679 [DEBUG] [Thread-179799] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:49:54.679 [DEBUG] [Thread-179799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:49:54.679 [DEBUG] [Thread-179799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:49:54.679 [DEBUG] [Thread-179799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:54.679 [DEBUG] [Thread-179799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] client lang: <none>
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] server lang: <none>
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] kex follows: False
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] Compression: none
2026-04-12T00:49:54.680 [DEBUG] [Thread-179799] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:49:54.736 [DEBUG] [Thread-179799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:49:54.737 [DEBUG] [Thread-179799] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:49:54.738 [DEBUG] [Thread-179799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:49:54.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:49:54.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:49:54.793 [DEBUG] [Thread-179799] [transport.py] [_log()] userauth is OK
2026-04-12T00:49:54.793 [DEBUG] [Thread-179799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:49:54.793 [DEBUG] [Thread-179799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:49:54.793 [DEBUG] [Thread-179799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:49:54.794 [DEBUG] [Thread-179799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:49:54.815 [INFO] [Thread-179799] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:49:54.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:49:54.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:49:55.651 [DEBUG] [Thread-179799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:49:55.651 [DEBUG] [Thread-179799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:49:55.700 [DEBUG] [Thread-179799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:49:55.700 [DEBUG] [Thread-179799] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:49:55.709 [DEBUG] [Thread-179799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:49:55.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:49:55.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-04-12T00:49:55.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:49:55.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:49:55.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:49:55.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:49:55.747 [DEBUG] [Thread-179799] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:49:59.433 [DEBUG] [Thread-179801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:09.960 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:09.961 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:14.493 [DEBUG] [Thread-179802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:50:25.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:50:25.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:50:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 49, 51), -0.04513, 100.232, 0.0, 27.1339, 11.2272, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:50:27.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:49:51
2026-04-12T00:50:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:50:27.566 [DEBUG] [Thread-179803] [transport.py] [_log()] starting thread (client mode): 0xb0fea830
2026-04-12T00:50:27.566 [DEBUG] [Thread-179803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:50:27.586 [DEBUG] [Thread-179803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:50:27.586 [INFO] [Thread-179803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:50:27.589 [DEBUG] [Thread-179803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] client lang: <none>
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] server lang: <none>
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] kex follows: False
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] Compression: none
2026-04-12T00:50:27.590 [DEBUG] [Thread-179803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:50:27.607 [DEBUG] [Thread-179803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:50:27.608 [DEBUG] [Thread-179803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:50:27.608 [DEBUG] [Thread-179803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:50:27.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:50:27.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:50:27.610 [DEBUG] [Thread-179803] [transport.py] [_log()] userauth is OK
2026-04-12T00:50:27.610 [DEBUG] [Thread-179803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:50:27.611 [DEBUG] [Thread-179803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:50:27.611 [DEBUG] [Thread-179803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:50:27.611 [DEBUG] [Thread-179803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:50:27.647 [INFO] [Thread-179803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:50:27.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:50:28.278 [DEBUG] [Thread-179803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:50:28.278 [DEBUG] [Thread-179803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:50:28.279 [DEBUG] [Thread-179803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:50:28.319 [DEBUG] [Thread-179803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:50:28.320 [DEBUG] [Thread-179803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:50:28.323 [DEBUG] [Thread-179803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:50:28.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:50:28.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:50:28.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:50:28.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:50:28.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:50:28.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:50:28.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.951499 -999.00  +10.80  20.08     98  +10.50 1 3 1 3 1     0    0 0.25 -1.15 ----- 23.3 20.1 289.2 25.0 12.0 -1.0 11.9 -1.0 11.6 -0.7 11.9 -0.4
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.951499
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:50:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:50:28.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:50:28.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:49:51', tmtdew=-0.04513, humidity=100.232, cloud=0.0, wind=27.1339, temperature=11.2272, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:50:09.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:50:28.345 [DEBUG] [Thread-179803] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:50:28.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:50:28.436 [DEBUG] [Thread-179806] [transport.py] [_log()] starting thread (client mode): 0xb0fcf430
2026-04-12T00:50:28.436 [DEBUG] [Thread-179806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:50:28.451 [DEBUG] [Thread-179806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:50:28.451 [INFO] [Thread-179806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:50:28.459 [DEBUG] [Thread-179806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:50:28.459 [DEBUG] [Thread-179806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:50:28.459 [DEBUG] [Thread-179806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:50:28.459 [DEBUG] [Thread-179806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:50:28.459 [DEBUG] [Thread-179806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] client lang: <none>
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] server lang: <none>
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] kex follows: False
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] Compression: none
2026-04-12T00:50:28.460 [DEBUG] [Thread-179806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:50:28.525 [DEBUG] [Thread-179806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:50:28.526 [DEBUG] [Thread-179806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:50:28.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:50:28.527 [DEBUG] [Thread-179806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:50:28.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:50:28.584 [DEBUG] [Thread-179806] [transport.py] [_log()] userauth is OK
2026-04-12T00:50:28.585 [DEBUG] [Thread-179806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:50:28.585 [DEBUG] [Thread-179806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:50:28.585 [DEBUG] [Thread-179806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:50:28.585 [DEBUG] [Thread-179806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:50:28.607 [INFO] [Thread-179806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:50:28.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:50:28.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:50:29.427 [DEBUG] [Thread-179806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:50:29.428 [DEBUG] [Thread-179806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:50:29.478 [DEBUG] [Thread-179806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:50:29.478 [DEBUG] [Thread-179806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:50:29.488 [DEBUG] [Thread-179806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:50:29.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:50:29.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-04-12T00:50:29.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:50:29.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:50:29.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:50:29.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:50:29.531 [DEBUG] [Thread-179808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:29.536 [DEBUG] [Thread-179806] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:50:44.594 [DEBUG] [Thread-179809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:47.462 [DEBUG] [Thread-179810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:50:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:50:59.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:50:59.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-04-12T00:50:59.629 [DEBUG] [Thread-179811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 50, 28), -0.0276, 100.149, 0.0, 27.8428, 10.8468, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:51:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:50:28
2026-04-12T00:51:01.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:51:01.433 [DEBUG] [Thread-179812] [transport.py] [_log()] starting thread (client mode): 0xae5f2440
2026-04-12T00:51:01.433 [DEBUG] [Thread-179812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:51:01.454 [DEBUG] [Thread-179812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:51:01.454 [INFO] [Thread-179812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] client lang: <none>
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] server lang: <none>
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] kex follows: False
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] Compression: none
2026-04-12T00:51:01.457 [DEBUG] [Thread-179812] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:51:01.470 [DEBUG] [Thread-179812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:51:01.470 [DEBUG] [Thread-179812] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:51:01.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:51:01.470 [DEBUG] [Thread-179812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:51:01.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:51:01.471 [DEBUG] [Thread-179812] [transport.py] [_log()] userauth is OK
2026-04-12T00:51:01.471 [DEBUG] [Thread-179812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:51:01.471 [DEBUG] [Thread-179812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:51:01.471 [DEBUG] [Thread-179812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:51:01.472 [DEBUG] [Thread-179812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:51:01.490 [INFO] [Thread-179812] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:51:01.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:51:02.149 [DEBUG] [Thread-179812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:51:02.149 [DEBUG] [Thread-179812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:51:02.150 [DEBUG] [Thread-179812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:51:02.190 [DEBUG] [Thread-179812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:51:02.190 [DEBUG] [Thread-179812] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:51:02.194 [DEBUG] [Thread-179812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:51:02.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:51:02.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:51:02.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:51:02.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:51:02.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:51:02.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:51:02.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:51:02.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:51:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:51:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.951847 -999.00  +10.80  20.41     98  +10.50 1 3 1 3 1     0    0 0.26 -1.06 ----- 22.8 20.4 286.2 26.7 12.0 -0.9 11.9 -0.9 11.5 -0.4 11.9 -0.6
2026-04-12T00:51:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:51:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:51:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.951847
2026-04-12T00:51:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:51:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:51:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:51:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:51:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:51:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:50:28', tmtdew=-0.0276, humidity=100.149, cloud=0.0, wind=27.8428, temperature=10.8468, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:50:39.581', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:51:02.221 [DEBUG] [Thread-179812] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:51:02.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:51:02.319 [DEBUG] [Thread-179815] [transport.py] [_log()] starting thread (client mode): 0xb0fcd780
2026-04-12T00:51:02.319 [DEBUG] [Thread-179815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:51:02.333 [DEBUG] [Thread-179815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:51:02.333 [INFO] [Thread-179815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] client lang: <none>
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] server lang: <none>
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] kex follows: False
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] Compression: none
2026-04-12T00:51:02.341 [DEBUG] [Thread-179815] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:51:02.400 [DEBUG] [Thread-179815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:51:02.401 [DEBUG] [Thread-179815] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:51:02.401 [DEBUG] [Thread-179815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:51:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:51:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:51:02.456 [DEBUG] [Thread-179815] [transport.py] [_log()] userauth is OK
2026-04-12T00:51:02.456 [DEBUG] [Thread-179815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:51:02.457 [DEBUG] [Thread-179815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:51:02.457 [DEBUG] [Thread-179815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:51:02.457 [DEBUG] [Thread-179815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:51:02.474 [INFO] [Thread-179815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:51:02.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:51:02.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:51:03.315 [DEBUG] [Thread-179815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:51:03.316 [DEBUG] [Thread-179815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:51:03.364 [DEBUG] [Thread-179815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:51:03.364 [DEBUG] [Thread-179815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:51:03.373 [DEBUG] [Thread-179815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:51:03.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:51:03.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-04-12T00:51:03.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:51:03.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:51:03.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:51:03.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:51:03.411 [DEBUG] [Thread-179815] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:51:10.164 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:10.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:14.662 [DEBUG] [Thread-179817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:29.717 [DEBUG] [Thread-179818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:33.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:51:33.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:51:33.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-04-12T00:51:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 51, 3), -0.02005, 100.099, 0.0, 25.9553, 10.797, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:51:34.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:51:03
2026-04-12T00:51:35.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:51:35.294 [DEBUG] [Thread-179819] [transport.py] [_log()] starting thread (client mode): 0xb0f6d4b0
2026-04-12T00:51:35.294 [DEBUG] [Thread-179819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:51:35.314 [DEBUG] [Thread-179819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:51:35.314 [INFO] [Thread-179819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:35.317 [DEBUG] [Thread-179819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] client lang: <none>
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] server lang: <none>
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] kex follows: False
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] Compression: none
2026-04-12T00:51:35.318 [DEBUG] [Thread-179819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:51:35.333 [DEBUG] [Thread-179819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:51:35.333 [DEBUG] [Thread-179819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:51:35.334 [DEBUG] [Thread-179819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:51:35.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:51:35.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:51:35.334 [DEBUG] [Thread-179819] [transport.py] [_log()] userauth is OK
2026-04-12T00:51:35.334 [DEBUG] [Thread-179819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:51:35.335 [DEBUG] [Thread-179819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:51:35.335 [DEBUG] [Thread-179819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:51:35.335 [DEBUG] [Thread-179819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:51:35.351 [INFO] [Thread-179819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:51:35.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:51:35.986 [DEBUG] [Thread-179819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:51:35.986 [DEBUG] [Thread-179819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:51:35.987 [DEBUG] [Thread-179819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:51:36.028 [DEBUG] [Thread-179819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:51:36.028 [DEBUG] [Thread-179819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:51:36.031 [DEBUG] [Thread-179819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:51:36.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:51:36.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:51:36.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:51:36.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:51:36.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:51:36.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:51:36.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:51:36.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:51:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:51:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.952194 -999.00  +10.70  24.65     98  +10.40 1 3 1 3 1     0    0 0.26 -1.11 ----- 19.5 24.6 281.0 27.6 12.0 -1.0 11.9 -1.1 11.5 -0.8 11.9 -0.7
2026-04-12T00:51:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:51:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:51:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.952194
2026-04-12T00:51:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:51:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:51:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:51:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:51:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:51:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:51:03', tmtdew=-0.02005, humidity=100.099, cloud=0.0, wind=25.9553, temperature=10.797, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:51:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:51:36.054 [DEBUG] [Thread-179819] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:51:36.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:51:36.151 [DEBUG] [Thread-179822] [transport.py] [_log()] starting thread (client mode): 0xb0fe9f00
2026-04-12T00:51:36.151 [DEBUG] [Thread-179822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:51:36.166 [DEBUG] [Thread-179822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:51:36.166 [INFO] [Thread-179822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:51:36.173 [DEBUG] [Thread-179822] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:51:36.173 [DEBUG] [Thread-179822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:51:36.173 [DEBUG] [Thread-179822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] client lang: <none>
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] server lang: <none>
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] kex follows: False
2026-04-12T00:51:36.174 [DEBUG] [Thread-179822] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:51:36.175 [DEBUG] [Thread-179822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:51:36.175 [DEBUG] [Thread-179822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:51:36.175 [DEBUG] [Thread-179822] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:51:36.175 [DEBUG] [Thread-179822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:51:36.175 [DEBUG] [Thread-179822] [transport.py] [_log()] Compression: none
2026-04-12T00:51:36.175 [DEBUG] [Thread-179822] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:51:36.231 [DEBUG] [Thread-179822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:51:36.232 [DEBUG] [Thread-179822] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:51:36.232 [DEBUG] [Thread-179822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:51:36.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:51:36.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:51:36.287 [DEBUG] [Thread-179822] [transport.py] [_log()] userauth is OK
2026-04-12T00:51:36.287 [DEBUG] [Thread-179822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:51:36.287 [DEBUG] [Thread-179822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:51:36.287 [DEBUG] [Thread-179822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:51:36.287 [DEBUG] [Thread-179822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:51:36.305 [INFO] [Thread-179822] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:51:36.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:51:36.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:51:37.157 [DEBUG] [Thread-179822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:51:37.157 [DEBUG] [Thread-179822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:51:37.206 [DEBUG] [Thread-179822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:51:37.206 [DEBUG] [Thread-179822] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:51:37.215 [DEBUG] [Thread-179822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:51:37.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:51:37.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-04-12T00:51:37.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-04-12T00:51:37.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:51:37.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:51:37.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:51:37.249 [DEBUG] [Thread-179822] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:51:44.752 [DEBUG] [Thread-179824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:47.531 [DEBUG] [Thread-179825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:51:59.805 [DEBUG] [Thread-179826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:07.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:52:07.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:52:07.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-04-12T00:52:08.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 51, 38), -0.022565, 100.116, 0.0, 23.3942, 5.41358, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:52:08.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:51:38
2026-04-12T00:52:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:52:09.073 [DEBUG] [Thread-179827] [transport.py] [_log()] starting thread (client mode): 0xb0fcd780
2026-04-12T00:52:09.074 [DEBUG] [Thread-179827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:52:09.095 [DEBUG] [Thread-179827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:52:09.095 [INFO] [Thread-179827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:52:09.098 [DEBUG] [Thread-179827] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] client lang: <none>
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] server lang: <none>
2026-04-12T00:52:09.099 [DEBUG] [Thread-179827] [transport.py] [_log()] kex follows: False
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] Compression: none
2026-04-12T00:52:09.100 [DEBUG] [Thread-179827] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:52:09.120 [DEBUG] [Thread-179827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:52:09.121 [DEBUG] [Thread-179827] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:52:09.122 [DEBUG] [Thread-179827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:52:09.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:52:09.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:52:09.124 [DEBUG] [Thread-179827] [transport.py] [_log()] userauth is OK
2026-04-12T00:52:09.124 [DEBUG] [Thread-179827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:52:09.124 [DEBUG] [Thread-179827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:52:09.124 [DEBUG] [Thread-179827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:52:09.124 [DEBUG] [Thread-179827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:52:09.147 [INFO] [Thread-179827] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:52:09.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:52:09.787 [DEBUG] [Thread-179827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:52:09.787 [DEBUG] [Thread-179827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:52:09.788 [DEBUG] [Thread-179827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:52:09.828 [DEBUG] [Thread-179827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:52:09.828 [DEBUG] [Thread-179827] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:52:09.831 [DEBUG] [Thread-179827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:52:09.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:52:09.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:52:09.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:52:09.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:52:09.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:52:09.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:52:09.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.952541 -999.00  +10.70  20.97     98  +10.50 1 3 1 3 1     0    0 0.26 -1.04 ----- 21.6 21.0 277.6 26.6 12.0 -1.0 11.8 -0.9 11.5 -0.9 11.8 -0.5
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.952541
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:52:09.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:52:09.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:52:09.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:51:38', tmtdew=-0.022565, humidity=100.116, cloud=0.0, wind=23.3942, temperature=5.41358, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:51:39.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:52:09.850 [DEBUG] [Thread-179827] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:52:09.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:52:09.933 [DEBUG] [Thread-179830] [transport.py] [_log()] starting thread (client mode): 0xb0febaf0
2026-04-12T00:52:09.933 [DEBUG] [Thread-179830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:52:09.948 [DEBUG] [Thread-179830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:52:09.948 [INFO] [Thread-179830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:52:09.956 [DEBUG] [Thread-179830] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:52:09.956 [DEBUG] [Thread-179830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:52:09.956 [DEBUG] [Thread-179830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] client lang: <none>
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] server lang: <none>
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] kex follows: False
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:52:09.957 [DEBUG] [Thread-179830] [transport.py] [_log()] Compression: none
2026-04-12T00:52:09.958 [DEBUG] [Thread-179830] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:52:10.016 [DEBUG] [Thread-179830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:52:10.016 [DEBUG] [Thread-179830] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:52:10.017 [DEBUG] [Thread-179830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:52:10.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:52:10.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:52:10.072 [DEBUG] [Thread-179830] [transport.py] [_log()] userauth is OK
2026-04-12T00:52:10.072 [DEBUG] [Thread-179830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:52:10.072 [DEBUG] [Thread-179830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:52:10.072 [DEBUG] [Thread-179830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:52:10.073 [DEBUG] [Thread-179830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:52:10.091 [INFO] [Thread-179830] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:52:10.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:52:10.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:52:10.365 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:10.367 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:10.908 [DEBUG] [Thread-179830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:52:10.909 [DEBUG] [Thread-179830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:52:10.957 [DEBUG] [Thread-179830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:52:10.957 [DEBUG] [Thread-179830] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:52:10.967 [DEBUG] [Thread-179830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:52:10.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:52:10.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-04-12T00:52:10.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-04-12T00:52:10.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:52:10.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:52:10.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:52:11.004 [DEBUG] [Thread-179830] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:52:14.839 [DEBUG] [Thread-179832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:29.892 [DEBUG] [Thread-179833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:52:41.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:52:41.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-04-12T00:52:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 52, 14), 0.0166, 100.088, 0.0, 28.9717, 7.09783, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:52:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:52:14
2026-04-12T00:52:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:52:42.803 [DEBUG] [Thread-179834] [transport.py] [_log()] starting thread (client mode): 0xb0fea710
2026-04-12T00:52:42.803 [DEBUG] [Thread-179834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:52:42.824 [DEBUG] [Thread-179834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:52:42.824 [INFO] [Thread-179834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:52:42.827 [DEBUG] [Thread-179834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] client lang: <none>
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] server lang: <none>
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] kex follows: False
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:52:42.828 [DEBUG] [Thread-179834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:52:42.829 [DEBUG] [Thread-179834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:52:42.829 [DEBUG] [Thread-179834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:52:42.829 [DEBUG] [Thread-179834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:52:42.829 [DEBUG] [Thread-179834] [transport.py] [_log()] Compression: none
2026-04-12T00:52:42.829 [DEBUG] [Thread-179834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:52:42.848 [DEBUG] [Thread-179834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:52:42.849 [DEBUG] [Thread-179834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:52:42.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:52:42.850 [DEBUG] [Thread-179834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:52:42.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:52:42.852 [DEBUG] [Thread-179834] [transport.py] [_log()] userauth is OK
2026-04-12T00:52:42.852 [DEBUG] [Thread-179834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:52:42.852 [DEBUG] [Thread-179834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:52:42.852 [DEBUG] [Thread-179834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:52:42.853 [DEBUG] [Thread-179834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:52:42.887 [INFO] [Thread-179834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:52:42.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:52:43.529 [DEBUG] [Thread-179834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:52:43.529 [DEBUG] [Thread-179834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:52:43.529 [DEBUG] [Thread-179834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:52:43.571 [DEBUG] [Thread-179834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:52:43.571 [DEBUG] [Thread-179834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:52:43.573 [DEBUG] [Thread-179834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:52:43.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:52:43.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:52:43.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:52:43.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:52:43.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:52:43.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:52:43.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:52:43.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:52:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:52:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.952888 -999.00  +10.80  15.37     98  +10.50 1 3 1 3 1     0    0 0.26 -0.81 ----- 23.4 15.4 291.8 25.7 12.0 -1.1 11.9 -1.0 11.5 -0.6 11.8 -0.6
2026-04-12T00:52:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:52:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:52:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.952888
2026-04-12T00:52:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:52:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:52:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:52:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:52:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:52:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:52:14', tmtdew=0.0166, humidity=100.088, cloud=0.0, wind=28.9717, temperature=7.09783, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:52:09.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:52:43.598 [DEBUG] [Thread-179834] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:52:43.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:52:43.690 [DEBUG] [Thread-179837] [transport.py] [_log()] starting thread (client mode): 0xb0febeb0
2026-04-12T00:52:43.690 [DEBUG] [Thread-179837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:52:43.705 [DEBUG] [Thread-179837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:52:43.705 [INFO] [Thread-179837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:52:43.712 [DEBUG] [Thread-179837] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:52:43.712 [DEBUG] [Thread-179837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] client lang: <none>
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] server lang: <none>
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] kex follows: False
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] Compression: none
2026-04-12T00:52:43.713 [DEBUG] [Thread-179837] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:52:43.771 [DEBUG] [Thread-179837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:52:43.772 [DEBUG] [Thread-179837] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:52:43.773 [DEBUG] [Thread-179837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:52:43.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:52:43.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:52:43.830 [DEBUG] [Thread-179837] [transport.py] [_log()] userauth is OK
2026-04-12T00:52:43.830 [DEBUG] [Thread-179837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:52:43.830 [DEBUG] [Thread-179837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:52:43.830 [DEBUG] [Thread-179837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:52:43.830 [DEBUG] [Thread-179837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:52:43.849 [INFO] [Thread-179837] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:52:43.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:52:43.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:52:44.651 [DEBUG] [Thread-179837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:52:44.651 [DEBUG] [Thread-179837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:52:44.699 [DEBUG] [Thread-179837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:52:44.699 [DEBUG] [Thread-179837] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:52:44.709 [DEBUG] [Thread-179837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:52:44.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:52:44.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-04-12T00:52:44.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:52:44.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:52:44.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:52:44.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:52:44.751 [DEBUG] [Thread-179837] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:52:44.931 [DEBUG] [Thread-179839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:47.611 [DEBUG] [Thread-179840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:52:59.993 [DEBUG] [Thread-179841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:10.567 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:10.569 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:14.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:53:14.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:53:14.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-04-12T00:53:15.029 [DEBUG] [Thread-179842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 52, 50), -0.02758, 100.149, 0.0, 31.6498, 5.43016, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:53:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:52:50
2026-04-12T00:53:16.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:53:16.565 [DEBUG] [Thread-179843] [transport.py] [_log()] starting thread (client mode): 0xae5098a0
2026-04-12T00:53:16.565 [DEBUG] [Thread-179843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:53:16.584 [DEBUG] [Thread-179843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:53:16.584 [INFO] [Thread-179843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] client lang: <none>
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] server lang: <none>
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] kex follows: False
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:53:16.588 [DEBUG] [Thread-179843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:53:16.589 [DEBUG] [Thread-179843] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:53:16.589 [DEBUG] [Thread-179843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:53:16.589 [DEBUG] [Thread-179843] [transport.py] [_log()] Compression: none
2026-04-12T00:53:16.589 [DEBUG] [Thread-179843] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:53:16.610 [DEBUG] [Thread-179843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:53:16.611 [DEBUG] [Thread-179843] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:53:16.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:53:16.613 [DEBUG] [Thread-179843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:53:16.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:53:16.615 [DEBUG] [Thread-179843] [transport.py] [_log()] userauth is OK
2026-04-12T00:53:16.615 [DEBUG] [Thread-179843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:53:16.615 [DEBUG] [Thread-179843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:53:16.615 [DEBUG] [Thread-179843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:53:16.615 [DEBUG] [Thread-179843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:53:16.639 [INFO] [Thread-179843] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:53:16.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:53:17.230 [DEBUG] [Thread-179843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:53:17.230 [DEBUG] [Thread-179843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:53:17.231 [DEBUG] [Thread-179843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:53:17.271 [DEBUG] [Thread-179843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:53:17.271 [DEBUG] [Thread-179843] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:53:17.275 [DEBUG] [Thread-179843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:53:17.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:53:17.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:53:17.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:53:17.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:53:17.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:53:17.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:53:17.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:53:17.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:53:17.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:53:17.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.953235 -999.00  +10.70  19.17     98  +10.50 1 3 1 3 1     0    0 0.27 -0.85 ----- 23.1 19.2 278.8 26.2 12.0 -0.9 11.8 -1.0 11.5 -1.1 11.9 -0.4
2026-04-12T00:53:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:53:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:53:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.953235
2026-04-12T00:53:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:53:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:53:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:53:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:53:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:53:17.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:52:50', tmtdew=-0.02758, humidity=100.149, cloud=0.0, wind=31.6498, temperature=5.43016, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:52:39.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:53:17.300 [DEBUG] [Thread-179843] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:53:17.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:53:17.392 [DEBUG] [Thread-179846] [transport.py] [_log()] starting thread (client mode): 0xae508880
2026-04-12T00:53:17.392 [DEBUG] [Thread-179846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:53:17.407 [DEBUG] [Thread-179846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:53:17.407 [INFO] [Thread-179846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] client lang: <none>
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] server lang: <none>
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] kex follows: False
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:53:17.415 [DEBUG] [Thread-179846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:53:17.416 [DEBUG] [Thread-179846] [transport.py] [_log()] Compression: none
2026-04-12T00:53:17.416 [DEBUG] [Thread-179846] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:53:17.471 [DEBUG] [Thread-179846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:53:17.472 [DEBUG] [Thread-179846] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:53:17.473 [DEBUG] [Thread-179846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:53:17.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:53:17.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:53:17.528 [DEBUG] [Thread-179846] [transport.py] [_log()] userauth is OK
2026-04-12T00:53:17.528 [DEBUG] [Thread-179846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:53:17.528 [DEBUG] [Thread-179846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:53:17.528 [DEBUG] [Thread-179846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:53:17.528 [DEBUG] [Thread-179846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:53:17.547 [INFO] [Thread-179846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:53:17.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:53:17.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:53:18.359 [DEBUG] [Thread-179846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:53:18.360 [DEBUG] [Thread-179846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:53:18.413 [DEBUG] [Thread-179846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:53:18.413 [DEBUG] [Thread-179846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:53:18.423 [DEBUG] [Thread-179846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:53:18.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:53:18.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-04-12T00:53:18.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-04-12T00:53:18.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:53:18.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:53:18.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:53:18.460 [DEBUG] [Thread-179846] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:53:30.066 [DEBUG] [Thread-179848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:45.123 [DEBUG] [Thread-179849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:47.683 [DEBUG] [Thread-179850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:53:48.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:53:48.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:53:48.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-04-12T00:53:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 53, 25), -0.01334, 100.066, 0.0, 26.2544, 7.04255, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:53:49.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:53:25
2026-04-12T00:53:50.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:53:50.282 [DEBUG] [Thread-179851] [transport.py] [_log()] starting thread (client mode): 0xae508ee0
2026-04-12T00:53:50.282 [DEBUG] [Thread-179851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:53:50.303 [DEBUG] [Thread-179851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:53:50.303 [INFO] [Thread-179851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] client lang: <none>
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] server lang: <none>
2026-04-12T00:53:50.307 [DEBUG] [Thread-179851] [transport.py] [_log()] kex follows: False
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] Compression: none
2026-04-12T00:53:50.308 [DEBUG] [Thread-179851] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:53:50.325 [DEBUG] [Thread-179851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:53:50.326 [DEBUG] [Thread-179851] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:53:50.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:53:50.327 [DEBUG] [Thread-179851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:53:50.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:53:50.329 [DEBUG] [Thread-179851] [transport.py] [_log()] userauth is OK
2026-04-12T00:53:50.329 [DEBUG] [Thread-179851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:53:50.329 [DEBUG] [Thread-179851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:53:50.329 [DEBUG] [Thread-179851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:53:50.329 [DEBUG] [Thread-179851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:53:50.348 [INFO] [Thread-179851] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:53:50.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:53:50.932 [DEBUG] [Thread-179851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:53:50.933 [DEBUG] [Thread-179851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:53:50.933 [DEBUG] [Thread-179851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:53:50.974 [DEBUG] [Thread-179851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:53:50.974 [DEBUG] [Thread-179851] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:53:50.978 [DEBUG] [Thread-179851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:53:50.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:53:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:53:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:53:50.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:53:50.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:53:50.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:53:50.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:53:50.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:53:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:53:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.953583 -999.00  +10.70  22.79     98  +10.40 1 3 1 3 1     0    0 0.28 -0.59 ----- 26.7 22.8 287.6 29.6 12.0 -1.1 11.9 -1.3 11.5 -1.2 11.8 -0.6
2026-04-12T00:53:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:53:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:53:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.953583
2026-04-12T00:53:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:53:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:53:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:53:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:53:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:53:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:53:25', tmtdew=-0.01334, humidity=100.066, cloud=0.0, wind=26.2544, temperature=7.04255, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:53:09.571', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:53:50.997 [DEBUG] [Thread-179851] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:53:51.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:53:51.091 [DEBUG] [Thread-179854] [transport.py] [_log()] starting thread (client mode): 0xb0feb7c0
2026-04-12T00:53:51.091 [DEBUG] [Thread-179854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:53:51.106 [DEBUG] [Thread-179854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:53:51.106 [INFO] [Thread-179854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:53:51.113 [DEBUG] [Thread-179854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] client lang: <none>
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] server lang: <none>
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] kex follows: False
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] Compression: none
2026-04-12T00:53:51.114 [DEBUG] [Thread-179854] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:53:51.171 [DEBUG] [Thread-179854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:53:51.172 [DEBUG] [Thread-179854] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:53:51.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:53:51.173 [DEBUG] [Thread-179854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:53:51.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:53:51.226 [DEBUG] [Thread-179854] [transport.py] [_log()] userauth is OK
2026-04-12T00:53:51.227 [DEBUG] [Thread-179854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:53:51.227 [DEBUG] [Thread-179854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:53:51.227 [DEBUG] [Thread-179854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:53:51.227 [DEBUG] [Thread-179854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:53:51.250 [INFO] [Thread-179854] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:53:51.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:53:51.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:53:52.084 [DEBUG] [Thread-179854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:53:52.084 [DEBUG] [Thread-179854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:53:52.132 [DEBUG] [Thread-179854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:53:52.132 [DEBUG] [Thread-179854] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:53:52.142 [DEBUG] [Thread-179854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:53:52.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:53:52.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-04-12T00:53: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-04-12T00:53:52.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:53:52.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:53:52.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:53:52.178 [DEBUG] [Thread-179854] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:54:00.159 [DEBUG] [Thread-179856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:10.781 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:10.783 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:15.219 [DEBUG] [Thread-179857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:22.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:54:22.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:54:22.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-04-12T00:54:23.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 54), 0.0183167, 100.077, 0.0, 24.9138, 7.05361, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:54:23.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:54:00
2026-04-12T00:54:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:54:24.019 [DEBUG] [Thread-179858] [transport.py] [_log()] starting thread (client mode): 0xae5f1900
2026-04-12T00:54:24.019 [DEBUG] [Thread-179858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:54:24.039 [DEBUG] [Thread-179858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:54:24.039 [INFO] [Thread-179858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] client lang: <none>
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] server lang: <none>
2026-04-12T00:54:24.043 [DEBUG] [Thread-179858] [transport.py] [_log()] kex follows: False
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] Compression: none
2026-04-12T00:54:24.044 [DEBUG] [Thread-179858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:54:24.061 [DEBUG] [Thread-179858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:54:24.062 [DEBUG] [Thread-179858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:54:24.062 [DEBUG] [Thread-179858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:54:24.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:54:24.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:54:24.064 [DEBUG] [Thread-179858] [transport.py] [_log()] userauth is OK
2026-04-12T00:54:24.065 [DEBUG] [Thread-179858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:54:24.065 [DEBUG] [Thread-179858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:54:24.065 [DEBUG] [Thread-179858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:54:24.065 [DEBUG] [Thread-179858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:54:24.101 [INFO] [Thread-179858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:54:24.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:54:24.728 [DEBUG] [Thread-179858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:54:24.728 [DEBUG] [Thread-179858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:54:24.728 [DEBUG] [Thread-179858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:54:24.769 [DEBUG] [Thread-179858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:54:24.769 [DEBUG] [Thread-179858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:54:24.773 [DEBUG] [Thread-179858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:54:24.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:54:24.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:54:24.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:54:24.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:54:24.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:54:24.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:54:24.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:54:24.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:54:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:54:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.954277 -999.00  +10.60  26.81     98  +10.30 1 3 1 3 1     0    0 0.28 -0.54 ----- 26.2 26.8 278.0 31.0 11.9 -1.1 11.8 -1.2 11.4 -0.9 11.8 -0.6
2026-04-12T00:54:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:54:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:54:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.954277
2026-04-12T00:54:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:54:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:54:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:54:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:54:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:54:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:54:00', tmtdew=0.0183167, humidity=100.077, cloud=0.0, wind=24.9138, temperature=7.05361, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:54:09.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:54:24.800 [DEBUG] [Thread-179858] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:54:24.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:54:24.902 [DEBUG] [Thread-179861] [transport.py] [_log()] starting thread (client mode): 0xae537010
2026-04-12T00:54:24.902 [DEBUG] [Thread-179861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:54:24.917 [DEBUG] [Thread-179861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:54:24.917 [INFO] [Thread-179861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] client lang: <none>
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] server lang: <none>
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] kex follows: False
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:54:24.925 [DEBUG] [Thread-179861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:54:24.926 [DEBUG] [Thread-179861] [transport.py] [_log()] Compression: none
2026-04-12T00:54:24.926 [DEBUG] [Thread-179861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:54:24.984 [DEBUG] [Thread-179861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:54:24.984 [DEBUG] [Thread-179861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:54:24.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:54:24.986 [DEBUG] [Thread-179861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:54:24.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:54:25.043 [DEBUG] [Thread-179861] [transport.py] [_log()] userauth is OK
2026-04-12T00:54:25.043 [DEBUG] [Thread-179861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:54:25.044 [DEBUG] [Thread-179861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:54:25.044 [DEBUG] [Thread-179861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:54:25.044 [DEBUG] [Thread-179861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:54:25.062 [INFO] [Thread-179861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:54:25.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:54:25.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:54:25.888 [DEBUG] [Thread-179861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:54:25.889 [DEBUG] [Thread-179861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:54:25.937 [DEBUG] [Thread-179861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:54:25.937 [DEBUG] [Thread-179861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:54:25.947 [DEBUG] [Thread-179861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:54:25.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:54: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')
2026-04-12T00:54:25.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-04-12T00:54:25.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:54:25.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:54:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:54:25.984 [DEBUG] [Thread-179861] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:54:30.259 [DEBUG] [Thread-179863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:45.316 [DEBUG] [Thread-179864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:47.741 [DEBUG] [Thread-179865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:54:56.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:54:56.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:54:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:54:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 54, 36), -0.022505, 100.116, 0.0, 26.4989, 5.36383, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:54:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:54:36
2026-04-12T00:54:57.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:54:57.833 [DEBUG] [Thread-179866] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-12T00:54:57.833 [DEBUG] [Thread-179866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:54:57.852 [DEBUG] [Thread-179866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:54:57.852 [INFO] [Thread-179866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] client lang: <none>
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] server lang: <none>
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] kex follows: False
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] Compression: none
2026-04-12T00:54:57.856 [DEBUG] [Thread-179866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:54:57.873 [DEBUG] [Thread-179866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:54:57.873 [DEBUG] [Thread-179866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:54:57.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:54:57.874 [DEBUG] [Thread-179866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:54:57.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:54:57.876 [DEBUG] [Thread-179866] [transport.py] [_log()] userauth is OK
2026-04-12T00:54:57.876 [DEBUG] [Thread-179866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:54:57.877 [DEBUG] [Thread-179866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:54:57.877 [DEBUG] [Thread-179866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:54:57.877 [DEBUG] [Thread-179866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:54:57.900 [INFO] [Thread-179866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:54:57.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:54:58.520 [DEBUG] [Thread-179866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:54:58.520 [DEBUG] [Thread-179866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:54:58.521 [DEBUG] [Thread-179866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:54:58.561 [DEBUG] [Thread-179866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:54:58.562 [DEBUG] [Thread-179866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:54:58.565 [DEBUG] [Thread-179866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:54:58.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:54:58.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:54:58.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:54:58.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:54:58.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:54:58.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:54:58.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:54:58.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:54:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:54:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.954624 -999.00  +10.60  19.01     98  +10.30 1 3 1 3 1     0    0 0.27 -0.52 ----- 23.3 19.0 284.0 28.7 11.9 -1.2 11.8 -1.4 11.4 -1.4 11.8 -0.5
2026-04-12T00:54:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:54:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:54:58.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.954624
2026-04-12T00:54:58.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:54:58.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:54:58.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:54:58.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:54:58.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:54:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:54:36', tmtdew=-0.022505, humidity=100.116, cloud=0.0, wind=26.4989, temperature=5.36383, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:54:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:54:58.594 [DEBUG] [Thread-179866] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:54:58.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:54:58.687 [DEBUG] [Thread-179869] [transport.py] [_log()] starting thread (client mode): 0xb0fe8340
2026-04-12T00:54:58.687 [DEBUG] [Thread-179869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:54:58.702 [DEBUG] [Thread-179869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:54:58.702 [INFO] [Thread-179869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] client lang: <none>
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] server lang: <none>
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] kex follows: False
2026-04-12T00:54:58.710 [DEBUG] [Thread-179869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:54:58.711 [DEBUG] [Thread-179869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:54:58.711 [DEBUG] [Thread-179869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:54:58.711 [DEBUG] [Thread-179869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:54:58.711 [DEBUG] [Thread-179869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:54:58.711 [DEBUG] [Thread-179869] [transport.py] [_log()] Compression: none
2026-04-12T00:54:58.711 [DEBUG] [Thread-179869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:54:58.770 [DEBUG] [Thread-179869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:54:58.771 [DEBUG] [Thread-179869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:54:58.771 [DEBUG] [Thread-179869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:54:58.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:54:58.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:54:58.827 [DEBUG] [Thread-179869] [transport.py] [_log()] userauth is OK
2026-04-12T00:54:58.827 [DEBUG] [Thread-179869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:54:58.827 [DEBUG] [Thread-179869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:54:58.827 [DEBUG] [Thread-179869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:54:58.827 [DEBUG] [Thread-179869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:54:58.846 [INFO] [Thread-179869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:54:58.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:54:58.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:54:59.670 [DEBUG] [Thread-179869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:54:59.670 [DEBUG] [Thread-179869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:54:59.718 [DEBUG] [Thread-179869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:54:59.718 [DEBUG] [Thread-179869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:54:59.728 [DEBUG] [Thread-179869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:54:59.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:54:59.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-04-12T00:54:59.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:54:59.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:54:59.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:54:59.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:54:59.761 [DEBUG] [Thread-179869] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:55:00.351 [DEBUG] [Thread-179871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:55:10.986 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:55:10.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:55:15.401 [DEBUG] [Thread-179872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:55:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:55:29.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:55:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:55:30.436 [DEBUG] [Thread-179873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:55:31.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 55, 11), 0.0149767, 100.099, 0.0, 23.9443, 7.03133, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:55:31.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:55:11
2026-04-12T00:55:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:55:31.656 [DEBUG] [Thread-179874] [transport.py] [_log()] starting thread (client mode): 0xae5f11e0
2026-04-12T00:55:31.657 [DEBUG] [Thread-179874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:55:31.678 [DEBUG] [Thread-179874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:55:31.679 [INFO] [Thread-179874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:55:31.682 [DEBUG] [Thread-179874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] client lang: <none>
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] server lang: <none>
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] kex follows: False
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] Compression: none
2026-04-12T00:55:31.683 [DEBUG] [Thread-179874] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:55:31.704 [DEBUG] [Thread-179874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:55:31.704 [DEBUG] [Thread-179874] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:55:31.705 [DEBUG] [Thread-179874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:55:31.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:55:31.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:55:31.707 [DEBUG] [Thread-179874] [transport.py] [_log()] userauth is OK
2026-04-12T00:55:31.707 [DEBUG] [Thread-179874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:55:31.708 [DEBUG] [Thread-179874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:55:31.708 [DEBUG] [Thread-179874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:55:31.708 [DEBUG] [Thread-179874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:55:31.732 [INFO] [Thread-179874] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:55:31.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:55:32.354 [DEBUG] [Thread-179874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:55:32.354 [DEBUG] [Thread-179874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:55:32.355 [DEBUG] [Thread-179874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:55:32.395 [DEBUG] [Thread-179874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:55:32.395 [DEBUG] [Thread-179874] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:55:32.398 [DEBUG] [Thread-179874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:55:32.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:55:32.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:55:32.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:55:32.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:55:32.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:55:32.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:55:32.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:55:32.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:55:32.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:55:32.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.954971 -999.00  +10.60  19.75     98  +10.30 1 3 1 3 1     0    0 0.27 -0.38 ----- 17.6 19.8 281.8 25.3 11.9 -1.3 11.8 -1.5 11.5 -0.5 11.8 -0.8
2026-04-12T00:55:32.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:55:32.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:55:32.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.954971
2026-04-12T00:55:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:55:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:55:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:55:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:55:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:55:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:55:11', tmtdew=0.0149767, humidity=100.099, cloud=0.0, wind=23.9443, temperature=7.03133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:55:09.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:55:32.421 [DEBUG] [Thread-179874] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:55:32.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:55:32.519 [DEBUG] [Thread-179877] [transport.py] [_log()] starting thread (client mode): 0xae537f40
2026-04-12T00:55:32.520 [DEBUG] [Thread-179877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:55:32.534 [DEBUG] [Thread-179877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:55:32.534 [INFO] [Thread-179877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:55:32.544 [DEBUG] [Thread-179877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:55:32.545 [DEBUG] [Thread-179877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] client lang: <none>
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] server lang: <none>
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] kex follows: False
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:55:32.546 [DEBUG] [Thread-179877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:55:32.547 [DEBUG] [Thread-179877] [transport.py] [_log()] Compression: none
2026-04-12T00:55:32.547 [DEBUG] [Thread-179877] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:55:32.602 [DEBUG] [Thread-179877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:55:32.603 [DEBUG] [Thread-179877] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:55:32.603 [DEBUG] [Thread-179877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:55:32.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:55:32.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:55:32.658 [DEBUG] [Thread-179877] [transport.py] [_log()] userauth is OK
2026-04-12T00:55:32.658 [DEBUG] [Thread-179877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:55:32.659 [DEBUG] [Thread-179877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:55:32.659 [DEBUG] [Thread-179877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:55:32.659 [DEBUG] [Thread-179877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:55:32.678 [INFO] [Thread-179877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:55:32.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:55:32.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:55:33.503 [DEBUG] [Thread-179877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:55:33.503 [DEBUG] [Thread-179877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:55:33.552 [DEBUG] [Thread-179877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:55:33.552 [DEBUG] [Thread-179877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:55:33.561 [DEBUG] [Thread-179877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:55:33.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:55:33.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-04-12T00:55:33.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:55:33.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:55:33.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:55:33.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:55:33.596 [DEBUG] [Thread-179877] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:55:45.477 [DEBUG] [Thread-179879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:55:47.799 [DEBUG] [Thread-179880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:00.525 [DEBUG] [Thread-179881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:03.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:56:03.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:56:03.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-04-12T00:56:04.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 55, 47), -0.030055, 100.166, 0.0, 26.005, 5.41358, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:56:04.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:55:47
2026-04-12T00:56:05.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:56:05.459 [DEBUG] [Thread-179882] [transport.py] [_log()] starting thread (client mode): 0xae50aef0
2026-04-12T00:56:05.459 [DEBUG] [Thread-179882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:56:05.478 [DEBUG] [Thread-179882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:56:05.478 [INFO] [Thread-179882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:56:05.481 [DEBUG] [Thread-179882] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:56:05.481 [DEBUG] [Thread-179882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:56:05.481 [DEBUG] [Thread-179882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] client lang: <none>
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] server lang: <none>
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] kex follows: False
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:56:05.482 [DEBUG] [Thread-179882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:56:05.483 [DEBUG] [Thread-179882] [transport.py] [_log()] Compression: none
2026-04-12T00:56:05.483 [DEBUG] [Thread-179882] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:56:05.502 [DEBUG] [Thread-179882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:56:05.503 [DEBUG] [Thread-179882] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:56:05.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:56:05.504 [DEBUG] [Thread-179882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:56:05.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:56:05.506 [DEBUG] [Thread-179882] [transport.py] [_log()] userauth is OK
2026-04-12T00:56:05.506 [DEBUG] [Thread-179882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:56:05.507 [DEBUG] [Thread-179882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:56:05.507 [DEBUG] [Thread-179882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:56:05.507 [DEBUG] [Thread-179882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:56:05.531 [INFO] [Thread-179882] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:56:05.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:56:06.158 [DEBUG] [Thread-179882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:56:06.159 [DEBUG] [Thread-179882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:56:06.159 [DEBUG] [Thread-179882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:56:06.199 [DEBUG] [Thread-179882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:56:06.199 [DEBUG] [Thread-179882] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:56:06.203 [DEBUG] [Thread-179882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:56:06.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:56:06.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:56:06.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:56:06.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:56:06.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:56:06.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:56:06.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:56:06.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:56:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:56:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.955319 -999.00  +10.70  19.07     98  +10.40 1 3 1 3 1     0    0 0.28 -0.35 ----- 21.0 19.1 274.6 24.8 12.0 -1.1 11.8 -1.5 11.5 -0.9 11.8 -0.8
2026-04-12T00:56:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:56:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:56:06.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.955319
2026-04-12T00:56:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:56:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:56:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:56:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:56:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:56:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:55:47', tmtdew=-0.030055, humidity=100.166, cloud=0.0, wind=26.005, temperature=5.41358, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:55:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:56:06.232 [DEBUG] [Thread-179882] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:56:06.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:56:06.325 [DEBUG] [Thread-179885] [transport.py] [_log()] starting thread (client mode): 0xa79574f0
2026-04-12T00:56:06.325 [DEBUG] [Thread-179885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:56:06.340 [DEBUG] [Thread-179885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:56:06.340 [INFO] [Thread-179885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:06.348 [DEBUG] [Thread-179885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] client lang: <none>
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] server lang: <none>
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] kex follows: False
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] Compression: none
2026-04-12T00:56:06.349 [DEBUG] [Thread-179885] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:56:06.409 [DEBUG] [Thread-179885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:56:06.409 [DEBUG] [Thread-179885] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:56:06.410 [DEBUG] [Thread-179885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:56:06.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:56:06.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:56:06.465 [DEBUG] [Thread-179885] [transport.py] [_log()] userauth is OK
2026-04-12T00:56:06.465 [DEBUG] [Thread-179885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:56:06.465 [DEBUG] [Thread-179885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:56:06.465 [DEBUG] [Thread-179885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:56:06.465 [DEBUG] [Thread-179885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:56:06.484 [INFO] [Thread-179885] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:56:06.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:56:06.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:56:07.300 [DEBUG] [Thread-179885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:56:07.301 [DEBUG] [Thread-179885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:56:07.348 [DEBUG] [Thread-179885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:56:07.348 [DEBUG] [Thread-179885] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:56:07.358 [DEBUG] [Thread-179885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:56:07.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:56:07.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:56:07.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:56:07.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:56:07.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:56:07.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:56:07.394 [DEBUG] [Thread-179885] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:56:11.191 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:11.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:15.563 [DEBUG] [Thread-179887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:30.612 [DEBUG] [Thread-179888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:56:37.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:56:37.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-04-12T00:56:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 56, 22), -0.01668, 100.088, 0.0, 25.5848, 6.98694, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:56:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:56:22
2026-04-12T00:56:39.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:56:39.201 [DEBUG] [Thread-179889] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc70
2026-04-12T00:56:39.201 [DEBUG] [Thread-179889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:56:39.223 [DEBUG] [Thread-179889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:56:39.223 [INFO] [Thread-179889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:56:39.224 [DEBUG] [Thread-179889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] client lang: <none>
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] server lang: <none>
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] kex follows: False
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] Compression: none
2026-04-12T00:56:39.225 [DEBUG] [Thread-179889] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:56:39.237 [DEBUG] [Thread-179889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:56:39.238 [DEBUG] [Thread-179889] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:56:39.238 [DEBUG] [Thread-179889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:56:39.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:56:39.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:56:39.240 [DEBUG] [Thread-179889] [transport.py] [_log()] userauth is OK
2026-04-12T00:56:39.240 [DEBUG] [Thread-179889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:56:39.240 [DEBUG] [Thread-179889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:56:39.240 [DEBUG] [Thread-179889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:56:39.241 [DEBUG] [Thread-179889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:56:39.258 [INFO] [Thread-179889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:56:39.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:56:39.843 [DEBUG] [Thread-179889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:56:39.843 [DEBUG] [Thread-179889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:56:39.844 [DEBUG] [Thread-179889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:56:39.884 [DEBUG] [Thread-179889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:56:39.884 [DEBUG] [Thread-179889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:56:39.886 [DEBUG] [Thread-179889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:56:39.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:56:39.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:56:39.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:56:39.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:56:39.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:56:39.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:56:39.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:56:39.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:56:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:56:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.955666 -999.00  +10.60  19.20     98  +10.40 1 3 1 3 1     0    0 0.27 -0.48 ----- 20.3 19.2 274.2 25.5 11.9 -1.3 11.8 -1.5 11.4 -1.3 11.8 -0.8
2026-04-12T00:56:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:56:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:56:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.955666
2026-04-12T00:56:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:56:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:56:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:56:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:56:39.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:56:39.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:56:22', tmtdew=-0.01668, humidity=100.088, cloud=0.0, wind=25.5848, temperature=6.98694, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:56:09.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:56:39.905 [DEBUG] [Thread-179889] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:56:39.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:56:39.998 [DEBUG] [Thread-179892] [transport.py] [_log()] starting thread (client mode): 0xae535ed0
2026-04-12T00:56:39.998 [DEBUG] [Thread-179892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:56:40.013 [DEBUG] [Thread-179892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:56:40.013 [INFO] [Thread-179892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:56:40.020 [DEBUG] [Thread-179892] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:56:40.020 [DEBUG] [Thread-179892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:56:40.020 [DEBUG] [Thread-179892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:56:40.020 [DEBUG] [Thread-179892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] client lang: <none>
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] server lang: <none>
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] kex follows: False
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] Compression: none
2026-04-12T00:56:40.021 [DEBUG] [Thread-179892] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:56:40.084 [DEBUG] [Thread-179892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:56:40.084 [DEBUG] [Thread-179892] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:56:40.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:56:40.085 [DEBUG] [Thread-179892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:56:40.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:56:40.140 [DEBUG] [Thread-179892] [transport.py] [_log()] userauth is OK
2026-04-12T00:56:40.140 [DEBUG] [Thread-179892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:56:40.140 [DEBUG] [Thread-179892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:56:40.140 [DEBUG] [Thread-179892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:56:40.141 [DEBUG] [Thread-179892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:56:40.165 [INFO] [Thread-179892] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:56:40.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:56:40.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:56:40.997 [DEBUG] [Thread-179892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:56:40.997 [DEBUG] [Thread-179892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:56:41.045 [DEBUG] [Thread-179892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:56:41.045 [DEBUG] [Thread-179892] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:56:41.054 [DEBUG] [Thread-179892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:56:41.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:56:41.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-04-12T00:56:41.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:56:41.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:56:41.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:56:41.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:56:41.092 [DEBUG] [Thread-179892] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:56:45.648 [DEBUG] [Thread-179894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:56:47.858 [DEBUG] [Thread-179895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:00.700 [DEBUG] [Thread-179896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:11.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:57:11.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:57:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:57:11.396 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:11.397 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 56, 58), -0.0166933, 100.088, 0.0, 23.9267, 6.998, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:57:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:56:58
2026-04-12T00:57:12.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:57:12.961 [DEBUG] [Thread-179897] [transport.py] [_log()] starting thread (client mode): 0xae5a7880
2026-04-12T00:57:12.961 [DEBUG] [Thread-179897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:57:12.981 [DEBUG] [Thread-179897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:57:12.981 [INFO] [Thread-179897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] client lang: <none>
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] server lang: <none>
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] kex follows: False
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] Compression: none
2026-04-12T00:57:12.984 [DEBUG] [Thread-179897] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:57:12.993 [DEBUG] [Thread-179897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:57:12.993 [DEBUG] [Thread-179897] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:57:12.994 [DEBUG] [Thread-179897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:57:12.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:57:12.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:57:12.996 [DEBUG] [Thread-179897] [transport.py] [_log()] userauth is OK
2026-04-12T00:57:12.996 [DEBUG] [Thread-179897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:57:12.996 [DEBUG] [Thread-179897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:57:12.996 [DEBUG] [Thread-179897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:57:12.996 [DEBUG] [Thread-179897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:57:13.033 [INFO] [Thread-179897] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:57:13.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:57:13.664 [DEBUG] [Thread-179897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:57:13.664 [DEBUG] [Thread-179897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:57:13.664 [DEBUG] [Thread-179897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:57:13.705 [DEBUG] [Thread-179897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:57:13.706 [DEBUG] [Thread-179897] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:57:13.708 [DEBUG] [Thread-179897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:57:13.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:57:13.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:57:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:57:13.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:57:13.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:57:13.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:57:13.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.956013 -999.00  +10.60  19.61     98  +10.30 1 3 1 3 1     0    0 0.27 -0.42 ----- 18.5 19.6 279.4 22.9 11.9 -1.2 11.8 -1.3 11.4 -0.8 11.8 -0.6
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.956013
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:57:13.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:57:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:57:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:57:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:57:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:56:58', tmtdew=-0.0166933, humidity=100.088, cloud=0.0, wind=23.9267, temperature=6.998, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:56:39.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:57:13.726 [DEBUG] [Thread-179897] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:57:13.814 [DEBUG] [Thread-179900] [transport.py] [_log()] starting thread (client mode): 0xae5a5870
2026-04-12T00:57:13.814 [DEBUG] [Thread-179900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:57:13.830 [DEBUG] [Thread-179900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:57:13.830 [INFO] [Thread-179900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] client lang: <none>
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] server lang: <none>
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] kex follows: False
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:57:13.838 [DEBUG] [Thread-179900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:57:13.839 [DEBUG] [Thread-179900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:57:13.839 [DEBUG] [Thread-179900] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:57:13.839 [DEBUG] [Thread-179900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:57:13.839 [DEBUG] [Thread-179900] [transport.py] [_log()] Compression: none
2026-04-12T00:57:13.839 [DEBUG] [Thread-179900] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:57:13.898 [DEBUG] [Thread-179900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:57:13.898 [DEBUG] [Thread-179900] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:57:13.899 [DEBUG] [Thread-179900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:57:13.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:57:13.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:57:13.954 [DEBUG] [Thread-179900] [transport.py] [_log()] userauth is OK
2026-04-12T00:57:13.954 [DEBUG] [Thread-179900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:57:13.954 [DEBUG] [Thread-179900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:57:13.954 [DEBUG] [Thread-179900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:57:13.954 [DEBUG] [Thread-179900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:57:13.973 [INFO] [Thread-179900] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:57:13.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:57:13.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:57:14.780 [DEBUG] [Thread-179900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:57:14.781 [DEBUG] [Thread-179900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:57:14.829 [DEBUG] [Thread-179900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:57:14.829 [DEBUG] [Thread-179900] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:57:14.839 [DEBUG] [Thread-179900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:57:14.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:57:14.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-04-12T00:57:14.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-04-12T00:57:14.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:57:14.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:57:14.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:57:14.876 [DEBUG] [Thread-179900] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:57:15.735 [DEBUG] [Thread-179902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:30.792 [DEBUG] [Thread-179903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:57:44.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:57:44.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:57:45.827 [DEBUG] [Thread-179904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:46.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 57, 34), -0.02504, 100.133, 0.0, 25.2288, 5.397, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:57:46.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:57:34
2026-04-12T00:57:46.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:57:46.660 [DEBUG] [Thread-179905] [transport.py] [_log()] starting thread (client mode): 0xae5a7190
2026-04-12T00:57:46.660 [DEBUG] [Thread-179905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:57:46.680 [DEBUG] [Thread-179905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:57:46.680 [INFO] [Thread-179905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] client lang: <none>
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] server lang: <none>
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] kex follows: False
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] Compression: none
2026-04-12T00:57:46.684 [DEBUG] [Thread-179905] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:57:46.701 [DEBUG] [Thread-179905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:57:46.702 [DEBUG] [Thread-179905] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:57:46.702 [DEBUG] [Thread-179905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:57:46.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:57:46.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:57:46.703 [DEBUG] [Thread-179905] [transport.py] [_log()] userauth is OK
2026-04-12T00:57:46.704 [DEBUG] [Thread-179905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:57:46.704 [DEBUG] [Thread-179905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:57:46.704 [DEBUG] [Thread-179905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:57:46.704 [DEBUG] [Thread-179905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:57:46.724 [INFO] [Thread-179905] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:57:46.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:57:47.362 [DEBUG] [Thread-179905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:57:47.362 [DEBUG] [Thread-179905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:57:47.363 [DEBUG] [Thread-179905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:57:47.403 [DEBUG] [Thread-179905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:57:47.403 [DEBUG] [Thread-179905] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:57:47.406 [DEBUG] [Thread-179905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:57:47.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:57:47.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:57:47.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:57:47.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:57:47.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:57:47.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:57:47.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:57:47.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:57:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:57:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.956360 -999.00  +10.70  21.56     98  +10.40 1 3 1 3 1     0    0 0.28 -0.36 ----- 18.0 21.6 281.2 25.4 11.9 -0.8 11.8 -1.1 11.4 -1.0 11.8 -0.7
2026-04-12T00:57:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:57:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:57:47.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.956360
2026-04-12T00:57:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:57:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:57:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:57:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:57:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:57:47.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:57:34', tmtdew=-0.02504, humidity=100.133, cloud=0.0, wind=25.2288, temperature=5.397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:57:09.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:57:47.435 [DEBUG] [Thread-179905] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:57:47.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:57:47.529 [DEBUG] [Thread-179908] [transport.py] [_log()] starting thread (client mode): 0xae5a40d0
2026-04-12T00:57:47.529 [DEBUG] [Thread-179908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:57:47.544 [DEBUG] [Thread-179908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:57:47.544 [INFO] [Thread-179908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:57:47.552 [DEBUG] [Thread-179908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] client lang: <none>
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] server lang: <none>
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] kex follows: False
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] Compression: none
2026-04-12T00:57:47.553 [DEBUG] [Thread-179908] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:57:47.612 [DEBUG] [Thread-179908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:57:47.613 [DEBUG] [Thread-179908] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:57:47.614 [DEBUG] [Thread-179908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:57:47.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:57:47.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:57:47.672 [DEBUG] [Thread-179908] [transport.py] [_log()] userauth is OK
2026-04-12T00:57:47.673 [DEBUG] [Thread-179908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:57:47.673 [DEBUG] [Thread-179908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:57:47.673 [DEBUG] [Thread-179908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:57:47.673 [DEBUG] [Thread-179908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:57:47.696 [INFO] [Thread-179908] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:57:47.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:57:47.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:57:47.931 [DEBUG] [Thread-179910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:57:48.552 [DEBUG] [Thread-179908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:57:48.552 [DEBUG] [Thread-179908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:57:48.600 [DEBUG] [Thread-179908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:57:48.600 [DEBUG] [Thread-179908] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:57:48.609 [DEBUG] [Thread-179908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:57:48.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:57:48.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-04-12T00:57:48.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-04-12T00:57:48.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:57:48.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:57:48.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:57:48.648 [DEBUG] [Thread-179908] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:58:00.858 [DEBUG] [Thread-179911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:11.600 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:11.602 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:15.907 [DEBUG] [Thread-179912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:18.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:58:18.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:58:18.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T00:58:19.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 58, 9), 0.0149467, 100.099, 0.0, 24.2266, 7.05344, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:58:19.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:58:09
2026-04-12T00:58:20.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:58:20.432 [DEBUG] [Thread-179913] [transport.py] [_log()] starting thread (client mode): 0xa79567a0
2026-04-12T00:58:20.432 [DEBUG] [Thread-179913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:58:20.452 [DEBUG] [Thread-179913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:58:20.452 [INFO] [Thread-179913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:58:20.455 [DEBUG] [Thread-179913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] client lang: <none>
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] server lang: <none>
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] kex follows: False
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] Compression: none
2026-04-12T00:58:20.456 [DEBUG] [Thread-179913] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:58:20.473 [DEBUG] [Thread-179913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:58:20.474 [DEBUG] [Thread-179913] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:58:20.475 [DEBUG] [Thread-179913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:58:20.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:58:20.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:58:20.477 [DEBUG] [Thread-179913] [transport.py] [_log()] userauth is OK
2026-04-12T00:58:20.477 [DEBUG] [Thread-179913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:58:20.477 [DEBUG] [Thread-179913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:58:20.477 [DEBUG] [Thread-179913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:58:20.477 [DEBUG] [Thread-179913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:58:20.495 [INFO] [Thread-179913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:58:20.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:58:21.130 [DEBUG] [Thread-179913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:58:21.130 [DEBUG] [Thread-179913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:58:21.130 [DEBUG] [Thread-179913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:58:21.171 [DEBUG] [Thread-179913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:58:21.171 [DEBUG] [Thread-179913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:58:21.175 [DEBUG] [Thread-179913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:58:21.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:58:21.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:58:21.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:58:21.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:58:21.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:58:21.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:58:21.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:58:21.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:58:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:58:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.956707 -999.00  +10.60  21.27     98  +10.40 1 3 1 3 1     0    0 0.27 -0.59 ----- 20.3 21.3 278.8 23.8 12.0 -1.2 11.8 -1.4 11.4 -1.2 11.8 -0.6
2026-04-12T00:58:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:58:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:58:21.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.956707
2026-04-12T00:58:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:58:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:58:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:58:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:58:21.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:58:21.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:58:09', tmtdew=0.0149467, humidity=100.099, cloud=0.0, wind=24.2266, temperature=7.05344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:57:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:58:21.203 [DEBUG] [Thread-179913] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:58:21.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:58:21.296 [DEBUG] [Thread-179916] [transport.py] [_log()] starting thread (client mode): 0xa7956a70
2026-04-12T00:58:21.296 [DEBUG] [Thread-179916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:58:21.311 [DEBUG] [Thread-179916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:58:21.311 [INFO] [Thread-179916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:58:21.319 [DEBUG] [Thread-179916] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:58:21.319 [DEBUG] [Thread-179916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] client lang: <none>
2026-04-12T00:58:21.320 [DEBUG] [Thread-179916] [transport.py] [_log()] server lang: <none>
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] kex follows: False
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] Compression: none
2026-04-12T00:58:21.321 [DEBUG] [Thread-179916] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:58:21.378 [DEBUG] [Thread-179916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:58:21.378 [DEBUG] [Thread-179916] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:58:21.379 [DEBUG] [Thread-179916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:58:21.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:58:21.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:58:21.435 [DEBUG] [Thread-179916] [transport.py] [_log()] userauth is OK
2026-04-12T00:58:21.435 [DEBUG] [Thread-179916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:58:21.435 [DEBUG] [Thread-179916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:58:21.435 [DEBUG] [Thread-179916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:58:21.435 [DEBUG] [Thread-179916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:58:21.454 [INFO] [Thread-179916] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:58:21.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:58:21.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:58:22.264 [DEBUG] [Thread-179916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:58:22.264 [DEBUG] [Thread-179916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:58:22.312 [DEBUG] [Thread-179916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:58:22.312 [DEBUG] [Thread-179916] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:58:22.322 [DEBUG] [Thread-179916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:58:22.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:58:22.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:58:22.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T00:58:22.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:58:22.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:58:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:58:22.360 [DEBUG] [Thread-179916] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:58:30.944 [DEBUG] [Thread-179918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:46.008 [DEBUG] [Thread-179919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:47.995 [DEBUG] [Thread-179920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:58:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:58:52.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:58:52.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-04-12T00:58:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 58, 44), -0.02005, 100.099, 0.0, 24.5585, 5.397, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:58:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:58:44
2026-04-12T00:58:53.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:58:54.146 [DEBUG] [Thread-179921] [transport.py] [_log()] starting thread (client mode): 0xb0fe81c0
2026-04-12T00:58:54.146 [DEBUG] [Thread-179921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:58:54.165 [DEBUG] [Thread-179921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:58:54.166 [INFO] [Thread-179921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] client lang: <none>
2026-04-12T00:58:54.169 [DEBUG] [Thread-179921] [transport.py] [_log()] server lang: <none>
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] kex follows: False
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] Compression: none
2026-04-12T00:58:54.170 [DEBUG] [Thread-179921] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:58:54.179 [DEBUG] [Thread-179921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:58:54.179 [DEBUG] [Thread-179921] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:58:54.180 [DEBUG] [Thread-179921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:58:54.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:58:54.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:58:54.182 [DEBUG] [Thread-179921] [transport.py] [_log()] userauth is OK
2026-04-12T00:58:54.182 [DEBUG] [Thread-179921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:58:54.182 [DEBUG] [Thread-179921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:58:54.182 [DEBUG] [Thread-179921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:58:54.182 [DEBUG] [Thread-179921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:58:54.219 [INFO] [Thread-179921] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:58:54.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:58:54.849 [DEBUG] [Thread-179921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:58:54.850 [DEBUG] [Thread-179921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:58:54.850 [DEBUG] [Thread-179921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:58:54.890 [DEBUG] [Thread-179921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:58:54.890 [DEBUG] [Thread-179921] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:58:54.893 [DEBUG] [Thread-179921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:58:54.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:58:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:58:54.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:58:54.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:58:54.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:58:54.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:58:54.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:58:54.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:58:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:58:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.957402 -999.00  +10.70  23.15     98  +10.40 1 3 1 3 1     0    0 0.27 -0.43 ----- 21.4 23.1 280.6 25.2 11.9 -1.1 11.8 -1.3 11.4 -0.6 11.8 -0.6
2026-04-12T00:58:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:58:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:58:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.957402
2026-04-12T00:58:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:58:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:58:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:58:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:58:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:58:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:58:44', tmtdew=-0.02005, humidity=100.099, cloud=0.0, wind=24.5585, temperature=5.397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:58:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:58:54.916 [DEBUG] [Thread-179921] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:58: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-04-12T00:58:55.008 [DEBUG] [Thread-179924] [transport.py] [_log()] starting thread (client mode): 0xae50be80
2026-04-12T00:58:55.008 [DEBUG] [Thread-179924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:58:55.023 [DEBUG] [Thread-179924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:58:55.023 [INFO] [Thread-179924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:58:55.031 [DEBUG] [Thread-179924] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:58:55.031 [DEBUG] [Thread-179924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:58:55.031 [DEBUG] [Thread-179924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] client lang: <none>
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] server lang: <none>
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] kex follows: False
2026-04-12T00:58:55.032 [DEBUG] [Thread-179924] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:58:55.033 [DEBUG] [Thread-179924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:58:55.033 [DEBUG] [Thread-179924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:58:55.033 [DEBUG] [Thread-179924] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:58:55.033 [DEBUG] [Thread-179924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:58:55.033 [DEBUG] [Thread-179924] [transport.py] [_log()] Compression: none
2026-04-12T00:58:55.033 [DEBUG] [Thread-179924] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:58:55.090 [DEBUG] [Thread-179924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:58:55.091 [DEBUG] [Thread-179924] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:58:55.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:58:55.092 [DEBUG] [Thread-179924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:58:55.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:58:55.147 [DEBUG] [Thread-179924] [transport.py] [_log()] userauth is OK
2026-04-12T00:58:55.148 [DEBUG] [Thread-179924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:58:55.148 [DEBUG] [Thread-179924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:58:55.148 [DEBUG] [Thread-179924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:58:55.148 [DEBUG] [Thread-179924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:58:55.172 [INFO] [Thread-179924] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:58:55.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:58:55.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:58:56.010 [DEBUG] [Thread-179924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:58:56.010 [DEBUG] [Thread-179924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:58:56.058 [DEBUG] [Thread-179924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:58:56.058 [DEBUG] [Thread-179924] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:58:56.068 [DEBUG] [Thread-179924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:58:56.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:58:56.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T00:58:56.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-04-12T00:58:56.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:58:56.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:58:56.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:58:56.106 [DEBUG] [Thread-179924] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:59:01.046 [DEBUG] [Thread-179926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:11.814 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:11.816 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:16.099 [DEBUG] [Thread-179927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:59:26.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:59:26.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-04-12T00:59:27.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 59, 20), 0.0183033, 100.077, 0.0, 22.8323, 7.03133, 2, 2, 0, 2, 0, 0),)
2026-04-12T00:59:27.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:59:20
2026-04-12T00:59:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T00:59:27.855 [DEBUG] [Thread-179928] [transport.py] [_log()] starting thread (client mode): 0xae5084f0
2026-04-12T00:59:27.856 [DEBUG] [Thread-179928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:59:27.875 [DEBUG] [Thread-179928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T00:59:27.875 [INFO] [Thread-179928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T00:59:27.878 [DEBUG] [Thread-179928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:59:27.878 [DEBUG] [Thread-179928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] client lang: <none>
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] server lang: <none>
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] kex follows: False
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] Compression: none
2026-04-12T00:59:27.879 [DEBUG] [Thread-179928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:59:27.892 [DEBUG] [Thread-179928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:59:27.892 [DEBUG] [Thread-179928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:59:27.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T00:59:27.893 [DEBUG] [Thread-179928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T00:59:27.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:59:27.937 [DEBUG] [Thread-179928] [transport.py] [_log()] userauth is OK
2026-04-12T00:59:27.937 [DEBUG] [Thread-179928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:59:27.937 [DEBUG] [Thread-179928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:59:27.937 [DEBUG] [Thread-179928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T00:59:27.938 [DEBUG] [Thread-179928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:59:27.957 [INFO] [Thread-179928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:59:27.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:59:28.595 [DEBUG] [Thread-179928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:59:28.595 [DEBUG] [Thread-179928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:59:28.596 [DEBUG] [Thread-179928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T00:59:28.636 [DEBUG] [Thread-179928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:59:28.636 [DEBUG] [Thread-179928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:59:28.640 [DEBUG] [Thread-179928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:59:28.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:59:28.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T00:59:28.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T00:59:28.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T00:59:28.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:59:28.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T00:59:28.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:59:28.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:59:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T00:59:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.957749 -999.00  +10.70  19.40     98  +10.40 1 3 1 3 1     0    0 0.28 -0.31 ----- 18.1 19.4 280.0 25.2 12.0 -1.2 11.8 -1.2 11.4 -0.6 11.8 -0.7
2026-04-12T00:59:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T00:59:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T00:59:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.957749
2026-04-12T00:59:28.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T00:59:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T00:59:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T00:59:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T00:59:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T00:59:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:59:20', tmtdew=0.0183033, humidity=100.077, cloud=0.0, wind=22.8323, temperature=7.03133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:59:09.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T00:59:28.668 [DEBUG] [Thread-179928] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:59:28.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T00:59:28.769 [DEBUG] [Thread-179931] [transport.py] [_log()] starting thread (client mode): 0xb0fe8850
2026-04-12T00:59:28.769 [DEBUG] [Thread-179931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T00:59:28.784 [DEBUG] [Thread-179931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T00:59:28.784 [INFO] [Thread-179931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T00:59:28.791 [DEBUG] [Thread-179931] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] client lang: <none>
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] server lang: <none>
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] kex follows: False
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] Compression: none
2026-04-12T00:59:28.792 [DEBUG] [Thread-179931] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T00:59:28.850 [DEBUG] [Thread-179931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T00:59:28.851 [DEBUG] [Thread-179931] [transport.py] [_log()] Switch to new keys ...
2026-04-12T00:59:28.851 [DEBUG] [Thread-179931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T00:59:28.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T00:59:28.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T00:59:28.906 [DEBUG] [Thread-179931] [transport.py] [_log()] userauth is OK
2026-04-12T00:59:28.907 [DEBUG] [Thread-179931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T00:59:28.907 [DEBUG] [Thread-179931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T00:59:28.907 [DEBUG] [Thread-179931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T00:59:28.907 [DEBUG] [Thread-179931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T00:59:28.925 [INFO] [Thread-179931] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T00:59:28.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T00:59:28.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T00:59:29.735 [DEBUG] [Thread-179931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T00:59:29.735 [DEBUG] [Thread-179931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T00:59:29.783 [DEBUG] [Thread-179931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T00:59:29.783 [DEBUG] [Thread-179931] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T00:59:29.792 [DEBUG] [Thread-179931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T00:59:29.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T00:59:29.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-04-12T00:59:29.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-04-12T00:59:29.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T00:59:29.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T00:59:29.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T00:59:29.829 [DEBUG] [Thread-179931] [transport.py] [_log()] EOF in transport thread
2026-04-12T00:59:31.135 [DEBUG] [Thread-179933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:46.435 [DEBUG] [Thread-179934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:48.055 [DEBUG] [Thread-179935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T00:59:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T00:59:59.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T00:59:59.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-04-12T01:00:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 59, 20), 0.0183033, 100.077, 0.0, 22.8323, 7.03133, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:00:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:59:20
2026-04-12T01:00:01.471 [DEBUG] [Thread-179936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:00:01.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:00:01.685 [DEBUG] [Thread-179937] [transport.py] [_log()] starting thread (client mode): 0xb0fe9300
2026-04-12T01:00:01.685 [DEBUG] [Thread-179937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:00:01.695 [DEBUG] [Thread-179937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:00:01.695 [INFO] [Thread-179937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] client lang: <none>
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] server lang: <none>
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] kex follows: False
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] Compression: none
2026-04-12T01:00:01.697 [DEBUG] [Thread-179937] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:00:01.705 [DEBUG] [Thread-179937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:00:01.705 [DEBUG] [Thread-179937] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:00:01.705 [DEBUG] [Thread-179937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:00:01.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:00:01.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:00:01.706 [DEBUG] [Thread-179937] [transport.py] [_log()] userauth is OK
2026-04-12T01:00:01.706 [DEBUG] [Thread-179937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:00:01.706 [DEBUG] [Thread-179937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:00:01.706 [DEBUG] [Thread-179937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:00:01.706 [DEBUG] [Thread-179937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:00:01.720 [INFO] [Thread-179937] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:00:01.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:00:02.297 [DEBUG] [Thread-179937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:00:02.297 [DEBUG] [Thread-179937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:00:02.298 [DEBUG] [Thread-179937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:00:02.338 [DEBUG] [Thread-179937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:00:02.339 [DEBUG] [Thread-179937] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:00:02.341 [DEBUG] [Thread-179937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:00:02.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:00:02.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:00:02.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:00:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:00:02.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:00:02.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:00:02.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:00:02.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:00:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:00:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.958096 -999.00  +10.70  18.18     98  +10.40 1 3 1 3 1     0    0 0.28 -0.20 ----- 13.1 18.2 284.8 23.5 11.9 -0.9 11.8 -1.0 11.5 -1.0 11.8 -0.4
2026-04-12T01:00:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:00:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:00:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.958096
2026-04-12T01:00:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:00:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:00:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:00:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:00:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:00:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:59:20', tmtdew=0.0183033, humidity=100.077, cloud=0.0, wind=22.8323, temperature=7.03133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T22:59:39.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:00:02.357 [DEBUG] [Thread-179937] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:00:02.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:00:02.454 [DEBUG] [Thread-179940] [transport.py] [_log()] starting thread (client mode): 0xb0fea530
2026-04-12T01:00:02.454 [DEBUG] [Thread-179940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:00:02.468 [DEBUG] [Thread-179940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:00:02.468 [INFO] [Thread-179940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] client lang: <none>
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] server lang: <none>
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] kex follows: False
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] Compression: none
2026-04-12T01:00:02.475 [DEBUG] [Thread-179940] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:00:02.533 [DEBUG] [Thread-179940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:00:02.533 [DEBUG] [Thread-179940] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:00:02.534 [DEBUG] [Thread-179940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:00:02.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:00:02.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:00:02.591 [DEBUG] [Thread-179940] [transport.py] [_log()] userauth is OK
2026-04-12T01:00:02.591 [DEBUG] [Thread-179940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:00:02.591 [DEBUG] [Thread-179940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:00:02.591 [DEBUG] [Thread-179940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:00:02.591 [DEBUG] [Thread-179940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:00:02.611 [INFO] [Thread-179940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:00:02.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:00:02.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:00:03.451 [DEBUG] [Thread-179940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:00:03.452 [DEBUG] [Thread-179940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:00:03.500 [DEBUG] [Thread-179940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:00:03.500 [DEBUG] [Thread-179940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:00:03.508 [DEBUG] [Thread-179940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:00:03.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:00:03.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:00:03.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-04-12T01:00:03.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:00:03.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:00:03.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:00:03.544 [DEBUG] [Thread-179940] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:00:12.022 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:00:12.023 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:00:16.502 [DEBUG] [Thread-179942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:00:31.562 [DEBUG] [Thread-179943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:00:33.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:00:33.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:00:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:00:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 0, 59, 55), 0.0183033, 100.077, 0.0, 21.2447, 7.03133, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:00:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 00:59:55
2026-04-12T01:00:35.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:00:35.467 [DEBUG] [Thread-179944] [transport.py] [_log()] starting thread (client mode): 0xae563a60
2026-04-12T01:00:35.467 [DEBUG] [Thread-179944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:00:35.487 [DEBUG] [Thread-179944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:00:35.487 [INFO] [Thread-179944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:00:35.491 [DEBUG] [Thread-179944] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:00:35.491 [DEBUG] [Thread-179944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:00:35.491 [DEBUG] [Thread-179944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:00:35.491 [DEBUG] [Thread-179944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] client lang: <none>
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] server lang: <none>
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] kex follows: False
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:00:35.492 [DEBUG] [Thread-179944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:00:35.493 [DEBUG] [Thread-179944] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:00:35.493 [DEBUG] [Thread-179944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:00:35.493 [DEBUG] [Thread-179944] [transport.py] [_log()] Compression: none
2026-04-12T01:00:35.493 [DEBUG] [Thread-179944] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:00:35.512 [DEBUG] [Thread-179944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:00:35.513 [DEBUG] [Thread-179944] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:00:35.513 [DEBUG] [Thread-179944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:00:35.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:00:35.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:00:35.515 [DEBUG] [Thread-179944] [transport.py] [_log()] userauth is OK
2026-04-12T01:00:35.515 [DEBUG] [Thread-179944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:00:35.516 [DEBUG] [Thread-179944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:00:35.516 [DEBUG] [Thread-179944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:00:35.516 [DEBUG] [Thread-179944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:00:35.550 [INFO] [Thread-179944] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:00:35.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:00:36.194 [DEBUG] [Thread-179944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:00:36.194 [DEBUG] [Thread-179944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:00:36.194 [DEBUG] [Thread-179944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:00:36.235 [DEBUG] [Thread-179944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:00:36.235 [DEBUG] [Thread-179944] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:00:36.238 [DEBUG] [Thread-179944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:00:36.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:00:36.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:00:36.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:00:36.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:00:36.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:00:36.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:00:36.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:00:36.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:00:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:00:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.958444 -999.00  +10.70  19.38     98  +10.40 1 3 1 3 1     0    0 0.28 -0.16 ----- 19.9 19.4 280.4 23.8 12.0 -0.9 11.8 -1.3 11.5 -0.8 11.8 -0.6
2026-04-12T01:00:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:00:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:00:36.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.958444
2026-04-12T01:00:36.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:00:36.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:00:36.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:00:36.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:00:36.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:00:36.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T00:59:55', tmtdew=0.0183033, humidity=100.077, cloud=0.0, wind=21.2447, temperature=7.03133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:00:09.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:00:36.264 [DEBUG] [Thread-179944] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:00:36.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:00:36.365 [DEBUG] [Thread-179947] [transport.py] [_log()] starting thread (client mode): 0xa7954940
2026-04-12T01:00:36.365 [DEBUG] [Thread-179947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:00:36.380 [DEBUG] [Thread-179947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:00:36.381 [INFO] [Thread-179947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:00:36.388 [DEBUG] [Thread-179947] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:00:36.388 [DEBUG] [Thread-179947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:00:36.388 [DEBUG] [Thread-179947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] client lang: <none>
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] server lang: <none>
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] kex follows: False
2026-04-12T01:00:36.389 [DEBUG] [Thread-179947] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:00:36.390 [DEBUG] [Thread-179947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:00:36.390 [DEBUG] [Thread-179947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:00:36.390 [DEBUG] [Thread-179947] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:00:36.390 [DEBUG] [Thread-179947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:00:36.390 [DEBUG] [Thread-179947] [transport.py] [_log()] Compression: none
2026-04-12T01:00:36.390 [DEBUG] [Thread-179947] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:00:36.449 [DEBUG] [Thread-179947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:00:36.449 [DEBUG] [Thread-179947] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:00:36.450 [DEBUG] [Thread-179947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:00:36.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:00:36.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:00:36.505 [DEBUG] [Thread-179947] [transport.py] [_log()] userauth is OK
2026-04-12T01:00:36.506 [DEBUG] [Thread-179947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:00:36.506 [DEBUG] [Thread-179947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:00:36.506 [DEBUG] [Thread-179947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:00:36.506 [DEBUG] [Thread-179947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:00:36.526 [INFO] [Thread-179947] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:00:36.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:00:36.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:00:37.334 [DEBUG] [Thread-179947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:00:37.335 [DEBUG] [Thread-179947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:00:37.382 [DEBUG] [Thread-179947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:00:37.383 [DEBUG] [Thread-179947] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:00:37.392 [DEBUG] [Thread-179947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:00:37.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:00:37.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-04-12T01:00:37.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-04-12T01:00:37.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:00:37.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:00:37.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:00:37.429 [DEBUG] [Thread-179947] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:00:46.602 [DEBUG] [Thread-179949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:00:48.114 [DEBUG] [Thread-179950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:01.654 [DEBUG] [Thread-179951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:01:07.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:01:07.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-04-12T01:01:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 0, 31), 0.0166, 100.088, 0.0, 20.0804, 7.0645, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:01:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:00:31
2026-04-12T01:01:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:01:09.363 [DEBUG] [Thread-179952] [transport.py] [_log()] starting thread (client mode): 0xa79578e0
2026-04-12T01:01:09.363 [DEBUG] [Thread-179952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:01:09.378 [DEBUG] [Thread-179952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:01:09.379 [INFO] [Thread-179952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] client lang: <none>
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] server lang: <none>
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] kex follows: False
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] Compression: none
2026-04-12T01:01:09.382 [DEBUG] [Thread-179952] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:01:09.400 [DEBUG] [Thread-179952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:01:09.400 [DEBUG] [Thread-179952] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:01:09.401 [DEBUG] [Thread-179952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:01:09.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:01:09.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:01:09.403 [DEBUG] [Thread-179952] [transport.py] [_log()] userauth is OK
2026-04-12T01:01:09.403 [DEBUG] [Thread-179952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:01:09.403 [DEBUG] [Thread-179952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:01:09.403 [DEBUG] [Thread-179952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:01:09.403 [DEBUG] [Thread-179952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:01:09.420 [INFO] [Thread-179952] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:01:09.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:01:10.069 [DEBUG] [Thread-179952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:01:10.070 [DEBUG] [Thread-179952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:01:10.070 [DEBUG] [Thread-179952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:01:10.111 [DEBUG] [Thread-179952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:01:10.111 [DEBUG] [Thread-179952] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:01:10.114 [DEBUG] [Thread-179952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:01:10.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:01:10.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:01:10.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:01:10.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:01:10.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:01:10.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:01:10.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:01:10.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:01:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:01:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.958791 -999.00  +10.70  18.09     98  +10.40 1 3 1 3 1     0    0 0.29 -0.06 ----- 19.3 18.1 286.3 23.7 11.9 -0.9 11.8 -1.1 11.4 -0.9 11.8 -0.6
2026-04-12T01:01:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:01:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:01:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.958791
2026-04-12T01:01:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:01:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:01:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:01:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:01:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:01:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:00:31', tmtdew=0.0166, humidity=100.088, cloud=0.0, wind=20.0804, temperature=7.0645, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:00:39.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:01:10.141 [DEBUG] [Thread-179952] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:01:10.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:01:10.234 [DEBUG] [Thread-179955] [transport.py] [_log()] starting thread (client mode): 0xae50b250
2026-04-12T01:01:10.234 [DEBUG] [Thread-179955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:01:10.249 [DEBUG] [Thread-179955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:01:10.249 [INFO] [Thread-179955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:01:10.257 [DEBUG] [Thread-179955] [transport.py] [_log()] client lang: <none>
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] server lang: <none>
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] kex follows: False
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] Compression: none
2026-04-12T01:01:10.258 [DEBUG] [Thread-179955] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:01:10.315 [DEBUG] [Thread-179955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:01:10.315 [DEBUG] [Thread-179955] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:01:10.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:01:10.317 [DEBUG] [Thread-179955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:01:10.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:01:10.371 [DEBUG] [Thread-179955] [transport.py] [_log()] userauth is OK
2026-04-12T01:01:10.372 [DEBUG] [Thread-179955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:01:10.372 [DEBUG] [Thread-179955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:01:10.372 [DEBUG] [Thread-179955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:01:10.372 [DEBUG] [Thread-179955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:01:10.398 [INFO] [Thread-179955] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:01:10.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:01:10.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:01:11.213 [DEBUG] [Thread-179955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:01:11.214 [DEBUG] [Thread-179955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:01:11.261 [DEBUG] [Thread-179955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:01:11.261 [DEBUG] [Thread-179955] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:01:11.271 [DEBUG] [Thread-179955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:01:11.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:01:11.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:01:11.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-04-12T01:01:11.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:01:11.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:01:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:01:11.308 [DEBUG] [Thread-179955] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:01:12.226 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:12.227 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:16.691 [DEBUG] [Thread-179957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:31.734 [DEBUG] [Thread-179958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:41.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:01:41.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:01:41.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-04-12T01:01:42.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 1, 6), 0.0149333, 100.099, 0.0, 23.8378, 7.0645, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:01:42.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:01:06
2026-04-12T01:01:42.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:01:43.152 [DEBUG] [Thread-179959] [transport.py] [_log()] starting thread (client mode): 0xae535390
2026-04-12T01:01:43.152 [DEBUG] [Thread-179959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:01:43.172 [DEBUG] [Thread-179959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:01:43.172 [INFO] [Thread-179959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:01:43.175 [DEBUG] [Thread-179959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] client lang: <none>
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] server lang: <none>
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] kex follows: False
2026-04-12T01:01:43.176 [DEBUG] [Thread-179959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:01:43.177 [DEBUG] [Thread-179959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:01:43.177 [DEBUG] [Thread-179959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:01:43.177 [DEBUG] [Thread-179959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:01:43.177 [DEBUG] [Thread-179959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:01:43.177 [DEBUG] [Thread-179959] [transport.py] [_log()] Compression: none
2026-04-12T01:01:43.177 [DEBUG] [Thread-179959] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:01:43.193 [DEBUG] [Thread-179959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:01:43.193 [DEBUG] [Thread-179959] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:01:43.194 [DEBUG] [Thread-179959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:01:43.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:01:43.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:01:43.195 [DEBUG] [Thread-179959] [transport.py] [_log()] userauth is OK
2026-04-12T01:01:43.196 [DEBUG] [Thread-179959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:01:43.196 [DEBUG] [Thread-179959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:01:43.196 [DEBUG] [Thread-179959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:01:43.196 [DEBUG] [Thread-179959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:01:43.219 [INFO] [Thread-179959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:01:43.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:01:43.828 [DEBUG] [Thread-179959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:01:43.829 [DEBUG] [Thread-179959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:01:43.829 [DEBUG] [Thread-179959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:01:43.870 [DEBUG] [Thread-179959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:01:43.870 [DEBUG] [Thread-179959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:01:43.874 [DEBUG] [Thread-179959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:01:43.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:01:43.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:01:43.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:01:43.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:01:43.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:01:43.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:01:43.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:01:43.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:01:43.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:01:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.959138 -999.00  +10.70  18.28     98  +10.40 1 3 1 3 1     0    0 0.29 -0.03 ----- 15.8 18.3 283.1 24.4 12.0 -1.0 11.9 -1.3 11.5 -0.3 11.9 -0.5
2026-04-12T01:01:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:01:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:01:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.959138
2026-04-12T01:01:43.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:01:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:01:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:01:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:01:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:01:43.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:01:06', tmtdew=0.0149333, humidity=100.099, cloud=0.0, wind=23.8378, temperature=7.0645, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:01:09.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:01:43.900 [DEBUG] [Thread-179959] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:01:43.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:01:43.994 [DEBUG] [Thread-179962] [transport.py] [_log()] starting thread (client mode): 0xb0fcfa90
2026-04-12T01:01:43.994 [DEBUG] [Thread-179962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:01:44.008 [DEBUG] [Thread-179962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:01:44.008 [INFO] [Thread-179962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] client lang: <none>
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] server lang: <none>
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] kex follows: False
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] Compression: none
2026-04-12T01:01:44.016 [DEBUG] [Thread-179962] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:01:44.077 [DEBUG] [Thread-179962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:01:44.077 [DEBUG] [Thread-179962] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:01:44.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:01:44.078 [DEBUG] [Thread-179962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:01:44.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:01:44.137 [DEBUG] [Thread-179962] [transport.py] [_log()] userauth is OK
2026-04-12T01:01:44.137 [DEBUG] [Thread-179962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:01:44.137 [DEBUG] [Thread-179962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:01:44.137 [DEBUG] [Thread-179962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:01:44.137 [DEBUG] [Thread-179962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:01:44.155 [INFO] [Thread-179962] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:01:44.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:01:44.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:01:44.992 [DEBUG] [Thread-179962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:01:44.992 [DEBUG] [Thread-179962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:01:45.040 [DEBUG] [Thread-179962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:01:45.040 [DEBUG] [Thread-179962] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:01:45.050 [DEBUG] [Thread-179962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:01:45.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:01:45.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-04-12T01:01:45.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-04-12T01:01:45.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:01:45.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:01:45.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:01:45.089 [DEBUG] [Thread-179962] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:01:46.772 [DEBUG] [Thread-179964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:01:48.182 [DEBUG] [Thread-179965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:01.821 [DEBUG] [Thread-179966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:12.433 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:12.435 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:15.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:02:15.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:02:15.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-04-12T01:02:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 1, 42), -0.02506, 100.133, 0.0, 21.2774, 5.41358, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:02:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:01:42
2026-04-12T01:02:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:02:16.854 [DEBUG] [Thread-179967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:16.900 [DEBUG] [Thread-179968] [transport.py] [_log()] starting thread (client mode): 0xa7957a30
2026-04-12T01:02:16.900 [DEBUG] [Thread-179968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:02:16.920 [DEBUG] [Thread-179968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:02:16.920 [INFO] [Thread-179968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] client lang: <none>
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] server lang: <none>
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] kex follows: False
2026-04-12T01:02:16.923 [DEBUG] [Thread-179968] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:02:16.924 [DEBUG] [Thread-179968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:02:16.924 [DEBUG] [Thread-179968] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:02:16.924 [DEBUG] [Thread-179968] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:02:16.924 [DEBUG] [Thread-179968] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:02:16.924 [DEBUG] [Thread-179968] [transport.py] [_log()] Compression: none
2026-04-12T01:02:16.924 [DEBUG] [Thread-179968] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:02:16.941 [DEBUG] [Thread-179968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:02:16.941 [DEBUG] [Thread-179968] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:02:16.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:02:16.942 [DEBUG] [Thread-179968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:02:16.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:02:16.944 [DEBUG] [Thread-179968] [transport.py] [_log()] userauth is OK
2026-04-12T01:02:16.944 [DEBUG] [Thread-179968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:02:16.944 [DEBUG] [Thread-179968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:02:16.944 [DEBUG] [Thread-179968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:02:16.944 [DEBUG] [Thread-179968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:02:16.979 [INFO] [Thread-179968] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:02:16.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:02:17.641 [DEBUG] [Thread-179968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:02:17.641 [DEBUG] [Thread-179968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:02:17.641 [DEBUG] [Thread-179968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:02:17.683 [DEBUG] [Thread-179968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:02:17.683 [DEBUG] [Thread-179968] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:02:17.686 [DEBUG] [Thread-179968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:02:17.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:02:17.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:02:17.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:02:17.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:02:17.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:02:17.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:02:17.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:02:17.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:02:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:02:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.959485 -999.00  +10.70  15.33     98  +10.40 1 3 1 3 1     0    0 0.30 0.07 ----- 16.9 15.3 292.6 22.6 12.0 -0.8 11.8 -1.1 11.5 -0.8 11.9 -0.6
2026-04-12T01:02:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:02:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:02:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.959485
2026-04-12T01:02:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:02:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:02:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:02:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:02:17.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:02:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:01:42', tmtdew=-0.02506, humidity=100.133, cloud=0.0, wind=21.2774, temperature=5.41358, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:01:39.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:02:17.707 [DEBUG] [Thread-179968] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:02:17.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:02:17.801 [DEBUG] [Thread-179971] [transport.py] [_log()] starting thread (client mode): 0xae5097e0
2026-04-12T01:02:17.802 [DEBUG] [Thread-179971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:02:17.816 [DEBUG] [Thread-179971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:02:17.816 [INFO] [Thread-179971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:02:17.823 [DEBUG] [Thread-179971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:02:17.823 [DEBUG] [Thread-179971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] client lang: <none>
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] server lang: <none>
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] kex follows: False
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] Compression: none
2026-04-12T01:02:17.824 [DEBUG] [Thread-179971] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:02:17.880 [DEBUG] [Thread-179971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:02:17.881 [DEBUG] [Thread-179971] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:02:17.881 [DEBUG] [Thread-179971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:02:17.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:02:17.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:02:17.937 [DEBUG] [Thread-179971] [transport.py] [_log()] userauth is OK
2026-04-12T01:02:17.937 [DEBUG] [Thread-179971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:02:17.937 [DEBUG] [Thread-179971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:02:17.937 [DEBUG] [Thread-179971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:02:17.937 [DEBUG] [Thread-179971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:02:17.959 [INFO] [Thread-179971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:02:17.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:02:17.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:02:18.786 [DEBUG] [Thread-179971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:02:18.787 [DEBUG] [Thread-179971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:02:18.838 [DEBUG] [Thread-179971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:02:18.839 [DEBUG] [Thread-179971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:02:18.848 [DEBUG] [Thread-179971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:02:18.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:02: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')
2026-04-12T01:02:18.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-04-12T01:02:18.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:02:18.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:02:18.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:02:18.886 [DEBUG] [Thread-179971] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:02:31.886 [DEBUG] [Thread-179973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:46.945 [DEBUG] [Thread-179974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:48.248 [DEBUG] [Thread-179975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:02:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:02:48.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:02:48.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-04-12T01:02:50.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 2, 17), 0.01667, 100.088, 0.0, 21.7915, 7.00922, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:02:50.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:02:17
2026-04-12T01:02:50.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:02:50.664 [DEBUG] [Thread-179976] [transport.py] [_log()] starting thread (client mode): 0xae508d30
2026-04-12T01:02:50.664 [DEBUG] [Thread-179976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:02:50.674 [DEBUG] [Thread-179976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:02:50.674 [INFO] [Thread-179976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] client lang: <none>
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] server lang: <none>
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] kex follows: False
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] Compression: none
2026-04-12T01:02:50.676 [DEBUG] [Thread-179976] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:02:50.686 [DEBUG] [Thread-179976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:02:50.687 [DEBUG] [Thread-179976] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:02:50.687 [DEBUG] [Thread-179976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:02:50.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:02:50.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:02:50.688 [DEBUG] [Thread-179976] [transport.py] [_log()] userauth is OK
2026-04-12T01:02:50.688 [DEBUG] [Thread-179976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:02:50.688 [DEBUG] [Thread-179976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:02:50.688 [DEBUG] [Thread-179976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:02:50.688 [DEBUG] [Thread-179976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:02:50.702 [INFO] [Thread-179976] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:02:50.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:02:51.481 [DEBUG] [Thread-179976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:02:51.481 [DEBUG] [Thread-179976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:02:51.482 [DEBUG] [Thread-179976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:02:51.522 [DEBUG] [Thread-179976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:02:51.522 [DEBUG] [Thread-179976] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:02:51.526 [DEBUG] [Thread-179976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:02:51.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:02:51.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:02:51.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:02:51.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:02:51.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:02:51.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:02:51.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:02:51.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:02:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:02:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.959832 -999.00  +10.70  18.72     98  +10.40 1 3 1 3 1     0    0 0.29 0.18 ----- 17.3 18.7 295.4 25.4 12.0 -1.1 11.8 -1.0 11.5 -0.8 11.9 -0.6
2026-04-12T01:02:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:02:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:02:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.959832
2026-04-12T01:02:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:02:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:02:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:02:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:02:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:02:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:02:17', tmtdew=0.01667, humidity=100.088, cloud=0.0, wind=21.7915, temperature=7.00922, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:02:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:02:51.552 [DEBUG] [Thread-179976] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:02: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-04-12T01:02:51.645 [DEBUG] [Thread-179979] [transport.py] [_log()] starting thread (client mode): 0xae50afb0
2026-04-12T01:02:51.645 [DEBUG] [Thread-179979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:02:51.660 [DEBUG] [Thread-179979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:02:51.660 [INFO] [Thread-179979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:02:51.668 [DEBUG] [Thread-179979] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:02:51.669 [DEBUG] [Thread-179979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] client lang: <none>
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] server lang: <none>
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] kex follows: False
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] Compression: none
2026-04-12T01:02:51.670 [DEBUG] [Thread-179979] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:02:51.730 [DEBUG] [Thread-179979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:02:51.730 [DEBUG] [Thread-179979] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:02:51.731 [DEBUG] [Thread-179979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:02:51.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:02:51.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:02:51.787 [DEBUG] [Thread-179979] [transport.py] [_log()] userauth is OK
2026-04-12T01:02:51.787 [DEBUG] [Thread-179979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:02:51.787 [DEBUG] [Thread-179979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:02:51.787 [DEBUG] [Thread-179979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:02:51.787 [DEBUG] [Thread-179979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:02:51.806 [INFO] [Thread-179979] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:02:51.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:02:51.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:02:52.634 [DEBUG] [Thread-179979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:02:52.634 [DEBUG] [Thread-179979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:02:52.681 [DEBUG] [Thread-179979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:02:52.682 [DEBUG] [Thread-179979] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:02:52.690 [DEBUG] [Thread-179979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:02:52.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:02:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:02:52.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:02:52.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:02:52.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:02:52.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:02:52.724 [DEBUG] [Thread-179979] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:03:01.983 [DEBUG] [Thread-179981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:12.638 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:12.640 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:17.036 [DEBUG] [Thread-179982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:03:22.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:03:22.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-04-12T01:03:23.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 2, 53), -0.02502, 100.133, 0.0, 22.6534, 5.38041, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:03:24.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:02:53
2026-04-12T01:03:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:03:24.551 [DEBUG] [Thread-179983] [transport.py] [_log()] starting thread (client mode): 0xb0fce0e0
2026-04-12T01:03:24.551 [DEBUG] [Thread-179983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:03:24.572 [DEBUG] [Thread-179983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:03:24.572 [INFO] [Thread-179983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:03:24.575 [DEBUG] [Thread-179983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] client lang: <none>
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] server lang: <none>
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] kex follows: False
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] Compression: none
2026-04-12T01:03:24.576 [DEBUG] [Thread-179983] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:03:24.593 [DEBUG] [Thread-179983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:03:24.593 [DEBUG] [Thread-179983] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:03:24.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:03:24.594 [DEBUG] [Thread-179983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:03:24.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:03:24.596 [DEBUG] [Thread-179983] [transport.py] [_log()] userauth is OK
2026-04-12T01:03:24.596 [DEBUG] [Thread-179983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:03:24.596 [DEBUG] [Thread-179983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:03:24.596 [DEBUG] [Thread-179983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:03:24.596 [DEBUG] [Thread-179983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:03:24.619 [INFO] [Thread-179983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:03:24.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:03:25.427 [DEBUG] [Thread-179983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:03:25.427 [DEBUG] [Thread-179983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:03:25.428 [DEBUG] [Thread-179983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:03:25.468 [DEBUG] [Thread-179983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:03:25.469 [DEBUG] [Thread-179983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:03:25.472 [DEBUG] [Thread-179983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:03:25.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:03:25.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:03:25.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:03:25.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:03:25.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:03:25.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:03:25.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:03:25.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:03:25.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:03:25.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.960180 -999.00  +10.70  16.16     98  +10.40 1 3 1 3 1     0    0 0.30 0.31 ----- 16.8 16.2 291.4 21.9 12.0 -0.9 11.8 -1.0 11.5 -0.7 11.8 -0.4
2026-04-12T01:03:25.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:03:25.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:03:25.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.960180
2026-04-12T01:03:25.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:03:25.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:03:25.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:03:25.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:03:25.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:03:25.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:02:53', tmtdew=-0.02502, humidity=100.133, cloud=0.0, wind=22.6534, temperature=5.38041, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:02:39.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:03:25.500 [DEBUG] [Thread-179983] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:03:25.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:03:25.607 [DEBUG] [Thread-179986] [transport.py] [_log()] starting thread (client mode): 0xae535030
2026-04-12T01:03:25.607 [DEBUG] [Thread-179986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:03:25.622 [DEBUG] [Thread-179986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:03:25.623 [INFO] [Thread-179986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:03:25.630 [DEBUG] [Thread-179986] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:03:25.630 [DEBUG] [Thread-179986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] client lang: <none>
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] server lang: <none>
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] kex follows: False
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] Compression: none
2026-04-12T01:03:25.631 [DEBUG] [Thread-179986] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:03:25.688 [DEBUG] [Thread-179986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:03:25.688 [DEBUG] [Thread-179986] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:03:25.689 [DEBUG] [Thread-179986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:03:25.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:03:25.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:03:25.744 [DEBUG] [Thread-179986] [transport.py] [_log()] userauth is OK
2026-04-12T01:03:25.744 [DEBUG] [Thread-179986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:03:25.745 [DEBUG] [Thread-179986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:03:25.745 [DEBUG] [Thread-179986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:03:25.745 [DEBUG] [Thread-179986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:03:25.764 [INFO] [Thread-179986] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:03:25.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:03:25.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:03:26.604 [DEBUG] [Thread-179986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:03:26.604 [DEBUG] [Thread-179986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:03:26.652 [DEBUG] [Thread-179986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:03:26.652 [DEBUG] [Thread-179986] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:03:26.662 [DEBUG] [Thread-179986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:03:26.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:03:26.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-04-12T01:03:26.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-04-12T01:03:26.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:03:26.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:03:26.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:03:26.699 [DEBUG] [Thread-179986] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:03:32.074 [DEBUG] [Thread-179988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:47.130 [DEBUG] [Thread-179989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:48.304 [DEBUG] [Thread-179990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:03:56.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:03:56.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:03:56.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:03:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 3, 28), 0.0183167, 100.077, 0.0, 23.2204, 7.02028, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:03:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:03:28
2026-04-12T01:03:58.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:03:58.578 [DEBUG] [Thread-179991] [transport.py] [_log()] starting thread (client mode): 0xb0fe8c40
2026-04-12T01:03:58.578 [DEBUG] [Thread-179991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:03:58.597 [DEBUG] [Thread-179991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:03:58.597 [INFO] [Thread-179991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:03:58.601 [DEBUG] [Thread-179991] [transport.py] [_log()] client lang: <none>
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] server lang: <none>
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] kex follows: False
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] Compression: none
2026-04-12T01:03:58.602 [DEBUG] [Thread-179991] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:03:58.620 [DEBUG] [Thread-179991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:03:58.620 [DEBUG] [Thread-179991] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:03:58.621 [DEBUG] [Thread-179991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:03:58.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:03:58.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:03:58.623 [DEBUG] [Thread-179991] [transport.py] [_log()] userauth is OK
2026-04-12T01:03:58.623 [DEBUG] [Thread-179991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:03:58.623 [DEBUG] [Thread-179991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:03:58.623 [DEBUG] [Thread-179991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:03:58.623 [DEBUG] [Thread-179991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:03:58.660 [INFO] [Thread-179991] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:03:58.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:03:59.412 [DEBUG] [Thread-179991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:03:59.413 [DEBUG] [Thread-179991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:03:59.413 [DEBUG] [Thread-179991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:03:59.453 [DEBUG] [Thread-179991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:03:59.453 [DEBUG] [Thread-179991] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:03:59.457 [DEBUG] [Thread-179991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:03:59.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:03:59.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:03:59.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:03:59.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:03:59.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:03:59.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:03:59.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:03:59.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:03:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:03:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.960874 -999.00  +10.70  13.76     98  +10.40 1 3 1 3 1     0    0 0.30 0.50 ----- 12.9 13.8 292.6 24.2 12.0 -1.0 11.9 -1.2 11.5 -0.7 11.8 -0.5
2026-04-12T01:03:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:03:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:03:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.960874
2026-04-12T01:03:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:03:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:03:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:03:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:03:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:03:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:03:28', tmtdew=0.0183167, humidity=100.077, cloud=0.0, wind=23.2204, temperature=7.02028, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:03:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:03:59.483 [DEBUG] [Thread-179991] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:03:59.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:03:59.576 [DEBUG] [Thread-179994] [transport.py] [_log()] starting thread (client mode): 0xb0fe9420
2026-04-12T01:03:59.576 [DEBUG] [Thread-179994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:03:59.591 [DEBUG] [Thread-179994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:03:59.591 [INFO] [Thread-179994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] client lang: <none>
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] server lang: <none>
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] kex follows: False
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] Compression: none
2026-04-12T01:03:59.599 [DEBUG] [Thread-179994] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:03:59.657 [DEBUG] [Thread-179994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:03:59.658 [DEBUG] [Thread-179994] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:03:59.658 [DEBUG] [Thread-179994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:03:59.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:03:59.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:03:59.713 [DEBUG] [Thread-179994] [transport.py] [_log()] userauth is OK
2026-04-12T01:03:59.713 [DEBUG] [Thread-179994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:03:59.713 [DEBUG] [Thread-179994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:03:59.714 [DEBUG] [Thread-179994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:03:59.714 [DEBUG] [Thread-179994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:03:59.731 [INFO] [Thread-179994] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:03:59.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:03:59.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:04:00.564 [DEBUG] [Thread-179994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:04:00.564 [DEBUG] [Thread-179994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:04:00.613 [DEBUG] [Thread-179994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:04:00.613 [DEBUG] [Thread-179994] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:04:00.622 [DEBUG] [Thread-179994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:04:00.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:04:00.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-04-12T01:04:00.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-04-12T01:04:00.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:04:00.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:04:00.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:04:00.653 [DEBUG] [Thread-179994] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:04:02.166 [DEBUG] [Thread-179996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:04:13.060 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:04:13.061 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:04:17.224 [DEBUG] [Thread-179997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:04:30.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:04:30.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:04:30.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-04-12T01:04:31.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 4, 3), 0.0216333, 100.055, 0.0, 23.5732, 7.03133, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:04:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:04:03
2026-04-12T01:04:32.257 [DEBUG] [Thread-179998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:04:32.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:04:32.492 [DEBUG] [Thread-179999] [transport.py] [_log()] starting thread (client mode): 0xb0febd30
2026-04-12T01:04:32.492 [DEBUG] [Thread-179999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:04:32.514 [DEBUG] [Thread-179999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:04:32.514 [INFO] [Thread-179999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:04:32.517 [DEBUG] [Thread-179999] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] client lang: <none>
2026-04-12T01:04:32.518 [DEBUG] [Thread-179999] [transport.py] [_log()] server lang: <none>
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] kex follows: False
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] Compression: none
2026-04-12T01:04:32.519 [DEBUG] [Thread-179999] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:04:32.537 [DEBUG] [Thread-179999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:04:32.537 [DEBUG] [Thread-179999] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:04:32.538 [DEBUG] [Thread-179999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:04:32.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:04:32.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:04:32.540 [DEBUG] [Thread-179999] [transport.py] [_log()] userauth is OK
2026-04-12T01:04:32.540 [DEBUG] [Thread-179999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:04:32.540 [DEBUG] [Thread-179999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:04:32.540 [DEBUG] [Thread-179999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:04:32.540 [DEBUG] [Thread-179999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:04:32.563 [INFO] [Thread-179999] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:04:32.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:04:33.374 [DEBUG] [Thread-179999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:04:33.375 [DEBUG] [Thread-179999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:04:33.376 [DEBUG] [Thread-179999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:04:33.416 [DEBUG] [Thread-179999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:04:33.416 [DEBUG] [Thread-179999] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:04:33.418 [DEBUG] [Thread-179999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:04:33.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:04:33.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:04:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:04:33.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:04:33.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:04:33.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:04:33.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.961221 -999.00  +10.70  14.39     98  +10.40 1 3 1 3 1     0    0 0.31 0.60 ----- 13.7 14.4 278.8 18.2 12.0 -0.9 11.9 -1.0 11.5 -1.4 11.9 -0.5
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.961221
2026-04-12T01:04:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:04:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:04:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:04:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:04:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:04:33.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:04:03', tmtdew=0.0216333, humidity=100.055, cloud=0.0, wind=23.5732, temperature=7.03133, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:04:09.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:04:33.436 [DEBUG] [Thread-179999] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:04:33.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:04:33.520 [DEBUG] [Thread-180002] [transport.py] [_log()] starting thread (client mode): 0xb39c7520
2026-04-12T01:04:33.520 [DEBUG] [Thread-180002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:04:33.535 [DEBUG] [Thread-180002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:04:33.535 [INFO] [Thread-180002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] client lang: <none>
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] server lang: <none>
2026-04-12T01:04:33.543 [DEBUG] [Thread-180002] [transport.py] [_log()] kex follows: False
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] Compression: none
2026-04-12T01:04:33.544 [DEBUG] [Thread-180002] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:04:33.601 [DEBUG] [Thread-180002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:04:33.602 [DEBUG] [Thread-180002] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:04:33.602 [DEBUG] [Thread-180002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:04:33.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:04:33.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:04:33.658 [DEBUG] [Thread-180002] [transport.py] [_log()] userauth is OK
2026-04-12T01:04:33.659 [DEBUG] [Thread-180002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:04:33.659 [DEBUG] [Thread-180002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:04:33.659 [DEBUG] [Thread-180002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:04:33.659 [DEBUG] [Thread-180002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:04:33.677 [INFO] [Thread-180002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:04:33.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:04:33.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:04:34.494 [DEBUG] [Thread-180002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:04:34.494 [DEBUG] [Thread-180002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:04:34.543 [DEBUG] [Thread-180002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:04:34.543 [DEBUG] [Thread-180002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:04:34.552 [DEBUG] [Thread-180002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:04:34.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:04:34.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-04-12T01:04:34.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-04-12T01:04:34.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:04:34.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:04:34.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:04:34.590 [DEBUG] [Thread-180002] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:04:47.296 [DEBUG] [Thread-180004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:04:48.362 [DEBUG] [Thread-180005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:02.349 [DEBUG] [Thread-180006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:04.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:05:04.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:05:04.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-04-12T01:05:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 4, 39), -0.027535, 100.149, 0.0, 23.359, 5.397, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:05:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:04:39
2026-04-12T01:05:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:05:06.398 [DEBUG] [Thread-180007] [transport.py] [_log()] starting thread (client mode): 0xb0fe9060
2026-04-12T01:05:06.398 [DEBUG] [Thread-180007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:05:06.418 [DEBUG] [Thread-180007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:05:06.418 [INFO] [Thread-180007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:05:06.421 [DEBUG] [Thread-180007] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] client lang: <none>
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] server lang: <none>
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] kex follows: False
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] Compression: none
2026-04-12T01:05:06.422 [DEBUG] [Thread-180007] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:05:06.437 [DEBUG] [Thread-180007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:05:06.438 [DEBUG] [Thread-180007] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:05:06.438 [DEBUG] [Thread-180007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:05:06.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:05:06.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:05:06.440 [DEBUG] [Thread-180007] [transport.py] [_log()] userauth is OK
2026-04-12T01:05:06.440 [DEBUG] [Thread-180007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:05:06.441 [DEBUG] [Thread-180007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:05:06.441 [DEBUG] [Thread-180007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:05:06.441 [DEBUG] [Thread-180007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:05:06.461 [INFO] [Thread-180007] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:05:06.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:05:07.502 [DEBUG] [Thread-180007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:05:07.502 [DEBUG] [Thread-180007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:05:07.503 [DEBUG] [Thread-180007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:05:07.543 [DEBUG] [Thread-180007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:05:07.543 [DEBUG] [Thread-180007] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:05:07.547 [DEBUG] [Thread-180007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:05:07.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:05:07.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:05:07.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:05:07.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:05:07.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:05:07.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:05:07.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:05:07.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:05:07.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:05:07.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.961569 -999.00  +10.70  17.10     98  +10.40 1 3 1 3 1     0    0 0.31 0.76 ----- 14.7 17.1 297.0 23.0 12.0 -0.7 11.8 -1.2 11.5 -1.0 11.9 -0.5
2026-04-12T01:05:07.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:05:07.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:05:07.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.961569
2026-04-12T01:05:07.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:05:07.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:05:07.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:05:07.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:05:07.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:05:07.576 [DEBUG] [Thread-180007] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:05:07.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:04:39', tmtdew=-0.027535, humidity=100.149, cloud=0.0, wind=23.359, temperature=5.397, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:04:39.562', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:05:07.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:05:07.668 [DEBUG] [Thread-180010] [transport.py] [_log()] starting thread (client mode): 0xb0fea890
2026-04-12T01:05:07.668 [DEBUG] [Thread-180010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:05:07.682 [DEBUG] [Thread-180010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:05:07.682 [INFO] [Thread-180010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:05:07.690 [DEBUG] [Thread-180010] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:05:07.690 [DEBUG] [Thread-180010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:05:07.690 [DEBUG] [Thread-180010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:05:07.690 [DEBUG] [Thread-180010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:07.690 [DEBUG] [Thread-180010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:07.690 [DEBUG] [Thread-180010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] client lang: <none>
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] server lang: <none>
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] kex follows: False
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:05:07.691 [DEBUG] [Thread-180010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:05:07.692 [DEBUG] [Thread-180010] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:05:07.692 [DEBUG] [Thread-180010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:05:07.692 [DEBUG] [Thread-180010] [transport.py] [_log()] Compression: none
2026-04-12T01:05:07.692 [DEBUG] [Thread-180010] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:05:07.746 [DEBUG] [Thread-180010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:05:07.746 [DEBUG] [Thread-180010] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:05:07.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:05:07.746 [DEBUG] [Thread-180010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:05:07.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:05:07.803 [DEBUG] [Thread-180010] [transport.py] [_log()] userauth is OK
2026-04-12T01:05:07.803 [DEBUG] [Thread-180010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:05:07.803 [DEBUG] [Thread-180010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:05:07.803 [DEBUG] [Thread-180010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:05:07.803 [DEBUG] [Thread-180010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:05:07.821 [INFO] [Thread-180010] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:05:07.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:05:07.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:05:08.645 [DEBUG] [Thread-180010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:05:08.645 [DEBUG] [Thread-180010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:05:08.695 [DEBUG] [Thread-180010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:05:08.696 [DEBUG] [Thread-180010] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:05:08.705 [DEBUG] [Thread-180010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:05:08.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:05:08.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-04-12T01:05:08.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:05:08.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:05:08.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:05:08.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:05:08.743 [DEBUG] [Thread-180010] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:05:13.265 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:13.266 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:17.386 [DEBUG] [Thread-180012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:32.438 [DEBUG] [Thread-180013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:05:38.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:05:38.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-04-12T01:05:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 5, 15), 0.0183433, 100.077, 0.0, 21.2094, 6.99816, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:05:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:05:15
2026-04-12T01:05:40.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:05:40.581 [DEBUG] [Thread-180014] [transport.py] [_log()] starting thread (client mode): 0xae5f2440
2026-04-12T01:05:40.581 [DEBUG] [Thread-180014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:05:40.600 [DEBUG] [Thread-180014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:05:40.601 [INFO] [Thread-180014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:40.602 [DEBUG] [Thread-180014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] client lang: <none>
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] server lang: <none>
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] kex follows: False
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] Compression: none
2026-04-12T01:05:40.603 [DEBUG] [Thread-180014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:05:40.623 [DEBUG] [Thread-180014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:05:40.624 [DEBUG] [Thread-180014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:05:40.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:05:40.625 [DEBUG] [Thread-180014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:05:40.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:05:40.628 [DEBUG] [Thread-180014] [transport.py] [_log()] userauth is OK
2026-04-12T01:05:40.628 [DEBUG] [Thread-180014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:05:40.628 [DEBUG] [Thread-180014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:05:40.628 [DEBUG] [Thread-180014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:05:40.628 [DEBUG] [Thread-180014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:05:40.649 [INFO] [Thread-180014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:05:40.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:05:41.472 [DEBUG] [Thread-180014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:05:41.473 [DEBUG] [Thread-180014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:05:41.473 [DEBUG] [Thread-180014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:05:41.514 [DEBUG] [Thread-180014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:05:41.514 [DEBUG] [Thread-180014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:05:41.518 [DEBUG] [Thread-180014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:05:41.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:05:41.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:05:41.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:05:41.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:05:41.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:05:41.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:05:41.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:05:41.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:05:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:05:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.961915 -999.00  +10.70  18.58     98  +10.40 1 3 1 3 1     0    0 0.31 0.91 ----- 16.9 18.6 293.4 23.0 12.1 -0.7 11.9 -1.2 11.5 -1.0 11.9 -0.6
2026-04-12T01:05:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:05:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:05:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.961915
2026-04-12T01:05:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:05:41.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:05:41.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:05:41.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:05:41.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:05:41.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:05:15', tmtdew=0.0183433, humidity=100.077, cloud=0.0, wind=21.2094, temperature=6.99816, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:05:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:05:41.543 [DEBUG] [Thread-180014] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:05:41.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:05:41.636 [DEBUG] [Thread-180017] [transport.py] [_log()] starting thread (client mode): 0xb0fea2c0
2026-04-12T01:05:41.636 [DEBUG] [Thread-180017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:05:41.651 [DEBUG] [Thread-180017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:05:41.651 [INFO] [Thread-180017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:41.659 [DEBUG] [Thread-180017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] client lang: <none>
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] server lang: <none>
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] kex follows: False
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] Compression: none
2026-04-12T01:05:41.660 [DEBUG] [Thread-180017] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:05:41.720 [DEBUG] [Thread-180017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:05:41.721 [DEBUG] [Thread-180017] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:05:41.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:05:41.722 [DEBUG] [Thread-180017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:05:41.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:05:41.776 [DEBUG] [Thread-180017] [transport.py] [_log()] userauth is OK
2026-04-12T01:05:41.777 [DEBUG] [Thread-180017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:05:41.777 [DEBUG] [Thread-180017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:05:41.777 [DEBUG] [Thread-180017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:05:41.777 [DEBUG] [Thread-180017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:05:41.797 [INFO] [Thread-180017] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:05:41.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:05:41.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:05:42.617 [DEBUG] [Thread-180017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:05:42.617 [DEBUG] [Thread-180017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:05:42.666 [DEBUG] [Thread-180017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:05:42.666 [DEBUG] [Thread-180017] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:05:42.678 [DEBUG] [Thread-180017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:05:42.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:05:42.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:05:42.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:05:42.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:05:42.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:05:42.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:05:42.716 [DEBUG] [Thread-180017] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:05:47.475 [DEBUG] [Thread-180019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:05:48.421 [DEBUG] [Thread-180020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:02.526 [DEBUG] [Thread-180021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:06:12.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:06:12.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:06:13.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:13.470 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:14.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 5, 50), -0.022525, 100.116, 0.0, 23.7118, 5.38041, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:06:14.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:05:50
2026-04-12T01:06:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:06:14.607 [DEBUG] [Thread-180022] [transport.py] [_log()] starting thread (client mode): 0xb39c5d80
2026-04-12T01:06:14.607 [DEBUG] [Thread-180022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:06:14.629 [DEBUG] [Thread-180022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:06:14.629 [INFO] [Thread-180022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] client lang: <none>
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] server lang: <none>
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] kex follows: False
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:06:14.632 [DEBUG] [Thread-180022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:06:14.633 [DEBUG] [Thread-180022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:06:14.633 [DEBUG] [Thread-180022] [transport.py] [_log()] Compression: none
2026-04-12T01:06:14.633 [DEBUG] [Thread-180022] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:06:14.654 [DEBUG] [Thread-180022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:06:14.655 [DEBUG] [Thread-180022] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:06:14.655 [DEBUG] [Thread-180022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:06:14.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:06:14.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:06:14.658 [DEBUG] [Thread-180022] [transport.py] [_log()] userauth is OK
2026-04-12T01:06:14.658 [DEBUG] [Thread-180022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:06:14.658 [DEBUG] [Thread-180022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:06:14.658 [DEBUG] [Thread-180022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:06:14.658 [DEBUG] [Thread-180022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:06:14.694 [INFO] [Thread-180022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:06:14.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:06:15.510 [DEBUG] [Thread-180022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:06:15.510 [DEBUG] [Thread-180022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:06:15.510 [DEBUG] [Thread-180022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:06:15.551 [DEBUG] [Thread-180022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:06:15.551 [DEBUG] [Thread-180022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:06:15.555 [DEBUG] [Thread-180022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:06:15.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:06:15.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:06:15.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:06:15.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:06:15.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:06:15.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:06:15.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:06:15.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:06:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:06:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.962264 -999.00  +10.70  17.11     98  +10.40 1 3 1 3 1     0    0 0.31 0.70 ----- 15.1 17.1 288.2 22.4 12.0 -0.9 11.9 -1.1 11.6 -0.9 11.9 -0.5
2026-04-12T01:06:15.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:06:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:06:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.962264
2026-04-12T01:06:15.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:06:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:06:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:06:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:06:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:06:15.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:05:50', tmtdew=-0.022525, humidity=100.116, cloud=0.0, wind=23.7118, temperature=5.38041, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:05:39.610', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:06:15.582 [DEBUG] [Thread-180022] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:06:15.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:06:15.675 [DEBUG] [Thread-180025] [transport.py] [_log()] starting thread (client mode): 0xb0f6f940
2026-04-12T01:06:15.676 [DEBUG] [Thread-180025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:06:15.690 [DEBUG] [Thread-180025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:06:15.690 [INFO] [Thread-180025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:06:15.698 [DEBUG] [Thread-180025] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] client lang: <none>
2026-04-12T01:06:15.699 [DEBUG] [Thread-180025] [transport.py] [_log()] server lang: <none>
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] kex follows: False
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:06:15.700 [DEBUG] [Thread-180025] [transport.py] [_log()] Compression: none
2026-04-12T01:06:15.701 [DEBUG] [Thread-180025] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:06:15.758 [DEBUG] [Thread-180025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:06:15.758 [DEBUG] [Thread-180025] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:06:15.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:06:15.759 [DEBUG] [Thread-180025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:06:15.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:06:15.817 [DEBUG] [Thread-180025] [transport.py] [_log()] userauth is OK
2026-04-12T01:06:15.817 [DEBUG] [Thread-180025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:06:15.817 [DEBUG] [Thread-180025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:06:15.818 [DEBUG] [Thread-180025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:06:15.818 [DEBUG] [Thread-180025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:06:15.836 [INFO] [Thread-180025] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:06:15.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:06:15.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:06:16.679 [DEBUG] [Thread-180025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:06:16.680 [DEBUG] [Thread-180025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:06:16.727 [DEBUG] [Thread-180025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:06:16.727 [DEBUG] [Thread-180025] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:06:16.739 [DEBUG] [Thread-180025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:06:16.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:06:16.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-04-12T01:06:16.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-04-12T01:06:16.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:06:16.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:06:16.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:06:16.778 [DEBUG] [Thread-180025] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:06:17.563 [DEBUG] [Thread-180027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:32.621 [DEBUG] [Thread-180028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:06:46.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:06:46.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-04-12T01:06:47.655 [DEBUG] [Thread-180029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 6, 26), 0.027495, 100.116, 0.0, 20.5913, 10.7138, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:06:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:06:26
2026-04-12T01:06:48.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:06:48.487 [DEBUG] [Thread-180030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:06:48.574 [DEBUG] [Thread-180031] [transport.py] [_log()] starting thread (client mode): 0xae534e80
2026-04-12T01:06:48.574 [DEBUG] [Thread-180031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:06:48.594 [DEBUG] [Thread-180031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:06:48.594 [INFO] [Thread-180031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:06:48.597 [DEBUG] [Thread-180031] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] client lang: <none>
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] server lang: <none>
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] kex follows: False
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:06:48.598 [DEBUG] [Thread-180031] [transport.py] [_log()] Compression: none
2026-04-12T01:06:48.599 [DEBUG] [Thread-180031] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:06:48.616 [DEBUG] [Thread-180031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:06:48.616 [DEBUG] [Thread-180031] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:06:48.617 [DEBUG] [Thread-180031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:06:48.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:06:48.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:06:48.619 [DEBUG] [Thread-180031] [transport.py] [_log()] userauth is OK
2026-04-12T01:06:48.619 [DEBUG] [Thread-180031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:06:48.619 [DEBUG] [Thread-180031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:06:48.619 [DEBUG] [Thread-180031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:06:48.619 [DEBUG] [Thread-180031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:06:48.643 [INFO] [Thread-180031] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:06:48.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:06:49.411 [DEBUG] [Thread-180031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:06:49.411 [DEBUG] [Thread-180031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:06:49.412 [DEBUG] [Thread-180031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:06:49.453 [DEBUG] [Thread-180031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:06:49.453 [DEBUG] [Thread-180031] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:06:49.455 [DEBUG] [Thread-180031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:06:49.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:06:49.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:06:49.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:06:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:06:49.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:06:49.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:06:49.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:06:49.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:06:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:06:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.962610 -999.00  +10.70  18.49     98  +10.40 1 3 1 3 1     0    0 0.32 0.81 ----- 18.9 18.5 291.4 20.2 12.1 -1.0 11.9 -1.3 11.6 -0.5 11.9 -0.7
2026-04-12T01:06:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:06:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:06:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.962610
2026-04-12T01:06:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:06:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:06:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:06:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:06:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:06:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:06:26', tmtdew=0.027495, humidity=100.116, cloud=0.0, wind=20.5913, temperature=10.7138, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:06:09.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:06:49.476 [DEBUG] [Thread-180031] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:06:49.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:06:49.567 [DEBUG] [Thread-180034] [transport.py] [_log()] starting thread (client mode): 0xae534520
2026-04-12T01:06:49.568 [DEBUG] [Thread-180034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:06:49.582 [DEBUG] [Thread-180034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:06:49.582 [INFO] [Thread-180034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:06:49.589 [DEBUG] [Thread-180034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:06:49.589 [DEBUG] [Thread-180034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] client lang: <none>
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] server lang: <none>
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] kex follows: False
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] Compression: none
2026-04-12T01:06:49.590 [DEBUG] [Thread-180034] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:06:49.654 [DEBUG] [Thread-180034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:06:49.654 [DEBUG] [Thread-180034] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:06:49.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:06:49.656 [DEBUG] [Thread-180034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:06:49.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:06:49.713 [DEBUG] [Thread-180034] [transport.py] [_log()] userauth is OK
2026-04-12T01:06:49.713 [DEBUG] [Thread-180034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:06:49.713 [DEBUG] [Thread-180034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:06:49.714 [DEBUG] [Thread-180034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:06:49.714 [DEBUG] [Thread-180034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:06:49.727 [INFO] [Thread-180034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:06:49.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:06:49.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:06:50.542 [DEBUG] [Thread-180034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:06:50.542 [DEBUG] [Thread-180034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:06:50.590 [DEBUG] [Thread-180034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:06:50.590 [DEBUG] [Thread-180034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:06:50.600 [DEBUG] [Thread-180034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:06:50.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:06:50.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-04-12T01:06:50.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:06:50.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:06:50.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:06:50.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:06:50.648 [DEBUG] [Thread-180034] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:07:02.692 [DEBUG] [Thread-180036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:13.674 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:13.676 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:17.746 [DEBUG] [Thread-180037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:20.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:07:20.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:07:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:07:21.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 7, 1), 0.02754, 100.116, 0.0, 20.4502, 10.6807, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:07:21.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:07:01
2026-04-12T01:07:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:07:22.457 [DEBUG] [Thread-180038] [transport.py] [_log()] starting thread (client mode): 0xb0febb80
2026-04-12T01:07:22.457 [DEBUG] [Thread-180038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:07:22.478 [DEBUG] [Thread-180038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:07:22.479 [INFO] [Thread-180038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] client lang: <none>
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] server lang: <none>
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] kex follows: False
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:07:22.482 [DEBUG] [Thread-180038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:07:22.483 [DEBUG] [Thread-180038] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:07:22.483 [DEBUG] [Thread-180038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:07:22.483 [DEBUG] [Thread-180038] [transport.py] [_log()] Compression: none
2026-04-12T01:07:22.483 [DEBUG] [Thread-180038] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:07:22.501 [DEBUG] [Thread-180038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:07:22.501 [DEBUG] [Thread-180038] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:07:22.502 [DEBUG] [Thread-180038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:07:22.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:07:22.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:07:22.504 [DEBUG] [Thread-180038] [transport.py] [_log()] userauth is OK
2026-04-12T01:07:22.504 [DEBUG] [Thread-180038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:07:22.505 [DEBUG] [Thread-180038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:07:22.505 [DEBUG] [Thread-180038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:07:22.505 [DEBUG] [Thread-180038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:07:22.529 [INFO] [Thread-180038] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:07:22.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:07:23.327 [DEBUG] [Thread-180038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:07:23.328 [DEBUG] [Thread-180038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:07:23.328 [DEBUG] [Thread-180038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:07:23.369 [DEBUG] [Thread-180038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:07:23.370 [DEBUG] [Thread-180038] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:07:23.373 [DEBUG] [Thread-180038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:07:23.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:07:23.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:07:23.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:07:23.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:07:23.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:07:23.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:07:23.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:07:23.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:07:23.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:07:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.962957 -999.00  +10.60  19.41     98  +10.30 1 3 1 3 1     0    0 0.32 0.81 ----- 20.8 19.4 274.8 26.2 12.0 -1.2 11.9 -1.7 11.6 -1.3 11.9 -0.8
2026-04-12T01:07:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:07:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:07:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.962957
2026-04-12T01:07:23.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:07:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:07:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:07:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:07:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:07:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:07:01', tmtdew=0.02754, humidity=100.116, cloud=0.0, wind=20.4502, temperature=10.6807, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:06:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:07:23.395 [DEBUG] [Thread-180038] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:07:23.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:07:23.492 [DEBUG] [Thread-180041] [transport.py] [_log()] starting thread (client mode): 0xae561f30
2026-04-12T01:07:23.492 [DEBUG] [Thread-180041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:07:23.510 [DEBUG] [Thread-180041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:07:23.511 [INFO] [Thread-180041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:23.523 [DEBUG] [Thread-180041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] client lang: <none>
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] server lang: <none>
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] kex follows: False
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] Compression: none
2026-04-12T01:07:23.524 [DEBUG] [Thread-180041] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:07:23.587 [DEBUG] [Thread-180041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:07:23.588 [DEBUG] [Thread-180041] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:07:23.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:07:23.589 [DEBUG] [Thread-180041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:07:23.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:07:23.647 [DEBUG] [Thread-180041] [transport.py] [_log()] userauth is OK
2026-04-12T01:07:23.647 [DEBUG] [Thread-180041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:07:23.647 [DEBUG] [Thread-180041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:07:23.647 [DEBUG] [Thread-180041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:07:23.647 [DEBUG] [Thread-180041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:07:23.666 [INFO] [Thread-180041] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:07:23.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:07:23.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:07:24.488 [DEBUG] [Thread-180041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:07:24.488 [DEBUG] [Thread-180041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:07:24.536 [DEBUG] [Thread-180041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:07:24.536 [DEBUG] [Thread-180041] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:07:24.545 [DEBUG] [Thread-180041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:07:24.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:07:24.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-04-12T01:07:24.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-04-12T01:07:24.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:07:24.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:07:24.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:07:24.583 [DEBUG] [Thread-180041] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:07:32.783 [DEBUG] [Thread-180043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:47.833 [DEBUG] [Thread-180044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:48.545 [DEBUG] [Thread-180045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:07:54.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:07:54.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:07:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:07:55.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 7, 37), -0.05498, 100.298, 0.0, 23.5706, 11.1277, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:07:55.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:07:37
2026-04-12T01:07:56.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:07:56.421 [DEBUG] [Thread-180046] [transport.py] [_log()] starting thread (client mode): 0xb0fea9b0
2026-04-12T01:07:56.421 [DEBUG] [Thread-180046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:07:56.441 [DEBUG] [Thread-180046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:07:56.441 [INFO] [Thread-180046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:07:56.444 [DEBUG] [Thread-180046] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:07:56.444 [DEBUG] [Thread-180046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] client lang: <none>
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] server lang: <none>
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] kex follows: False
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:07:56.445 [DEBUG] [Thread-180046] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:07:56.446 [DEBUG] [Thread-180046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:07:56.446 [DEBUG] [Thread-180046] [transport.py] [_log()] Compression: none
2026-04-12T01:07:56.446 [DEBUG] [Thread-180046] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:07:56.463 [DEBUG] [Thread-180046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:07:56.463 [DEBUG] [Thread-180046] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:07:56.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:07:56.464 [DEBUG] [Thread-180046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:07:56.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:07:56.467 [DEBUG] [Thread-180046] [transport.py] [_log()] userauth is OK
2026-04-12T01:07:56.467 [DEBUG] [Thread-180046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:07:56.467 [DEBUG] [Thread-180046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:07:56.467 [DEBUG] [Thread-180046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:07:56.468 [DEBUG] [Thread-180046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:07:56.485 [INFO] [Thread-180046] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:07:56.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:07:57.281 [DEBUG] [Thread-180046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:07:57.281 [DEBUG] [Thread-180046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:07:57.281 [DEBUG] [Thread-180046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:07:57.321 [DEBUG] [Thread-180046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:07:57.321 [DEBUG] [Thread-180046] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:07:57.323 [DEBUG] [Thread-180046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:07:57.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:07:57.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:07:57.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:07:57.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:07:57.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:07:57.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:07:57.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.963305 -999.00  +10.60  18.67     98  +10.30 1 3 1 3 1     0    0 0.31 0.67 ----- 15.0 18.7 286.0 23.1 12.0 -1.2 11.9 -1.5 11.5 -1.5 11.8 -0.8
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.963305
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:07:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:07:37', tmtdew=-0.05498, humidity=100.298, cloud=0.0, wind=23.5706, temperature=11.1277, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:07:09.552', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:07:57.341 [DEBUG] [Thread-180046] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:07:57.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:07:57.424 [DEBUG] [Thread-180049] [transport.py] [_log()] starting thread (client mode): 0xae5613c0
2026-04-12T01:07:57.424 [DEBUG] [Thread-180049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:07:57.439 [DEBUG] [Thread-180049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:07:57.439 [INFO] [Thread-180049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] client lang: <none>
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] server lang: <none>
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] kex follows: False
2026-04-12T01:07:57.446 [DEBUG] [Thread-180049] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:07:57.447 [DEBUG] [Thread-180049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:07:57.447 [DEBUG] [Thread-180049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:07:57.447 [DEBUG] [Thread-180049] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:07:57.447 [DEBUG] [Thread-180049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:07:57.447 [DEBUG] [Thread-180049] [transport.py] [_log()] Compression: none
2026-04-12T01:07:57.447 [DEBUG] [Thread-180049] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:07:57.503 [DEBUG] [Thread-180049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:07:57.504 [DEBUG] [Thread-180049] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:07:57.504 [DEBUG] [Thread-180049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:07:57.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:07:57.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:07:57.560 [DEBUG] [Thread-180049] [transport.py] [_log()] userauth is OK
2026-04-12T01:07:57.560 [DEBUG] [Thread-180049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:07:57.560 [DEBUG] [Thread-180049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:07:57.560 [DEBUG] [Thread-180049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:07:57.560 [DEBUG] [Thread-180049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:07:57.579 [INFO] [Thread-180049] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:07:57.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:07:57.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:07:58.418 [DEBUG] [Thread-180049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:07:58.418 [DEBUG] [Thread-180049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:07:58.466 [DEBUG] [Thread-180049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:07:58.466 [DEBUG] [Thread-180049] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:07:58.475 [DEBUG] [Thread-180049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:07:58.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:07: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-04-12T01:07:58.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:07:58.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:07:58.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:07:58.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:07:58.509 [DEBUG] [Thread-180049] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:08:02.871 [DEBUG] [Thread-180051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:08:13.879 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:08:13.880 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:08:17.924 [DEBUG] [Thread-180052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:08:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:08:28.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:08:28.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-04-12T01:08:29.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 8, 12), 0.030035, 100.099, 0.0, 20.0444, 10.6807, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:08:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:08:12
2026-04-12T01:08:30.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:08:30.348 [DEBUG] [Thread-180053] [transport.py] [_log()] starting thread (client mode): 0xae5a4460
2026-04-12T01:08:30.348 [DEBUG] [Thread-180053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:08:30.369 [DEBUG] [Thread-180053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:08:30.369 [INFO] [Thread-180053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:08:30.372 [DEBUG] [Thread-180053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:08:30.372 [DEBUG] [Thread-180053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:08:30.372 [DEBUG] [Thread-180053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:08:30.372 [DEBUG] [Thread-180053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] client lang: <none>
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] server lang: <none>
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] kex follows: False
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] Compression: none
2026-04-12T01:08:30.373 [DEBUG] [Thread-180053] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:08:30.390 [DEBUG] [Thread-180053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:08:30.391 [DEBUG] [Thread-180053] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:08:30.391 [DEBUG] [Thread-180053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:08:30.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:08:30.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:08:30.393 [DEBUG] [Thread-180053] [transport.py] [_log()] userauth is OK
2026-04-12T01:08:30.394 [DEBUG] [Thread-180053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:08:30.394 [DEBUG] [Thread-180053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:08:30.394 [DEBUG] [Thread-180053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:08:30.394 [DEBUG] [Thread-180053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:08:30.411 [INFO] [Thread-180053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:08:30.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:08:31.178 [DEBUG] [Thread-180053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:08:31.178 [DEBUG] [Thread-180053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:08:31.179 [DEBUG] [Thread-180053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:08:31.219 [DEBUG] [Thread-180053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:08:31.219 [DEBUG] [Thread-180053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:08:31.223 [DEBUG] [Thread-180053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:08:31.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:08:31.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:08:31.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:08:31.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:08:31.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:08:31.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:08:31.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:08:31.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:08:31.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:08:31.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.963652 -999.00  +10.60  13.49     98  +10.30 1 3 1 3 1     0    0 0.31 0.67 ----- 20.7 13.5 298.4 21.8 12.0 -1.2 11.8 -1.5 11.5 -0.4 11.9 -0.8
2026-04-12T01:08:31.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:08:31.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:08:31.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.963652
2026-04-12T01:08:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:08:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:08:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:08:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:08:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:08:31.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:08:12', tmtdew=0.030035, humidity=100.099, cloud=0.0, wind=20.0444, temperature=10.6807, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:07:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:08:31.251 [DEBUG] [Thread-180053] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:08:31.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:08:31.346 [DEBUG] [Thread-180056] [transport.py] [_log()] starting thread (client mode): 0xb0fe9420
2026-04-12T01:08:31.346 [DEBUG] [Thread-180056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:08:31.361 [DEBUG] [Thread-180056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:08:31.361 [INFO] [Thread-180056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:08:31.368 [DEBUG] [Thread-180056] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:08:31.368 [DEBUG] [Thread-180056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] client lang: <none>
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] server lang: <none>
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] kex follows: False
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] Compression: none
2026-04-12T01:08:31.369 [DEBUG] [Thread-180056] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:08:31.428 [DEBUG] [Thread-180056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:08:31.428 [DEBUG] [Thread-180056] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:08:31.429 [DEBUG] [Thread-180056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:08:31.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:08:31.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:08:31.484 [DEBUG] [Thread-180056] [transport.py] [_log()] userauth is OK
2026-04-12T01:08:31.484 [DEBUG] [Thread-180056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:08:31.484 [DEBUG] [Thread-180056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:08:31.484 [DEBUG] [Thread-180056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:08:31.484 [DEBUG] [Thread-180056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:08:31.505 [INFO] [Thread-180056] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:08:31.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:08:31.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:08:32.364 [DEBUG] [Thread-180056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:08:32.364 [DEBUG] [Thread-180056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:08:32.411 [DEBUG] [Thread-180056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:08:32.412 [DEBUG] [Thread-180056] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:08:32.420 [DEBUG] [Thread-180056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:08:32.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:08:32.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-04-12T01:08:32.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-04-12T01:08:32.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:08:32.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:08:32.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:08:32.455 [DEBUG] [Thread-180056] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:08:32.959 [DEBUG] [Thread-180058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:08:48.005 [DEBUG] [Thread-180059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:08:48.618 [DEBUG] [Thread-180060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:02.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:09:02.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:09:02.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-04-12T01:09:03.043 [DEBUG] [Thread-180061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 8, 48), -0.04492, 100.232, 0.0, 24.4526, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:09:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:08:48
2026-04-12T01:09:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:09:04.272 [DEBUG] [Thread-180062] [transport.py] [_log()] starting thread (client mode): 0xae50afb0
2026-04-12T01:09:04.272 [DEBUG] [Thread-180062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:09:04.286 [DEBUG] [Thread-180062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:09:04.286 [INFO] [Thread-180062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] client lang: <none>
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] server lang: <none>
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] kex follows: False
2026-04-12T01:09:04.287 [DEBUG] [Thread-180062] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:09:04.288 [DEBUG] [Thread-180062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:09:04.288 [DEBUG] [Thread-180062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:09:04.288 [DEBUG] [Thread-180062] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:09:04.288 [DEBUG] [Thread-180062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:09:04.288 [DEBUG] [Thread-180062] [transport.py] [_log()] Compression: none
2026-04-12T01:09:04.288 [DEBUG] [Thread-180062] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:09:04.304 [DEBUG] [Thread-180062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:09:04.305 [DEBUG] [Thread-180062] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:09:04.305 [DEBUG] [Thread-180062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:09:04.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:09:04.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:09:04.307 [DEBUG] [Thread-180062] [transport.py] [_log()] userauth is OK
2026-04-12T01:09:04.307 [DEBUG] [Thread-180062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:09:04.307 [DEBUG] [Thread-180062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:09:04.307 [DEBUG] [Thread-180062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:09:04.307 [DEBUG] [Thread-180062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:09:04.327 [INFO] [Thread-180062] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:09:04.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:09:05.113 [DEBUG] [Thread-180062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:09:05.113 [DEBUG] [Thread-180062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:09:05.114 [DEBUG] [Thread-180062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:09:05.154 [DEBUG] [Thread-180062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:09:05.154 [DEBUG] [Thread-180062] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:09:05.158 [DEBUG] [Thread-180062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:09:05.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:09:05.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:09:05.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:09:05.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:09:05.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:09:05.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:09:05.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:09:05.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:09:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.964346 -999.00  +10.60  20.52     98  +10.30 1 3 1 3 1     0    0 0.30 0.61 ----- 16.5 20.5 278.8 25.7 12.0 -1.4 11.9 -1.8 11.5 -1.0 11.8 -1.0
2026-04-12T01:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.964346
2026-04-12T01:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:09:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:09:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:09:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:09:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:09:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:08:48', tmtdew=-0.04492, humidity=100.232, cloud=0.0, wind=24.4526, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:08:39.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:09:05.184 [DEBUG] [Thread-180062] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:09:05.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:09:05.280 [DEBUG] [Thread-180065] [transport.py] [_log()] starting thread (client mode): 0xb0feada0
2026-04-12T01:09:05.280 [DEBUG] [Thread-180065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:09:05.295 [DEBUG] [Thread-180065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:09:05.295 [INFO] [Thread-180065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] client lang: <none>
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] server lang: <none>
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] kex follows: False
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:09:05.303 [DEBUG] [Thread-180065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:09:05.304 [DEBUG] [Thread-180065] [transport.py] [_log()] Compression: none
2026-04-12T01:09:05.304 [DEBUG] [Thread-180065] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:09:05.360 [DEBUG] [Thread-180065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:09:05.361 [DEBUG] [Thread-180065] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:09:05.362 [DEBUG] [Thread-180065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:09:05.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:09:05.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:09:05.417 [DEBUG] [Thread-180065] [transport.py] [_log()] userauth is OK
2026-04-12T01:09:05.417 [DEBUG] [Thread-180065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:09:05.417 [DEBUG] [Thread-180065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:09:05.417 [DEBUG] [Thread-180065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:09:05.418 [DEBUG] [Thread-180065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:09:05.436 [INFO] [Thread-180065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:09:05.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:09:05.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:09:06.282 [DEBUG] [Thread-180065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:09:06.282 [DEBUG] [Thread-180065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:09:06.330 [DEBUG] [Thread-180065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:09:06.330 [DEBUG] [Thread-180065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:09:06.339 [DEBUG] [Thread-180065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:09:06.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:09:06.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-04-12T01:09:06.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-04-12T01:09:06.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:09:06.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:09:06.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:09:06.380 [DEBUG] [Thread-180065] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:09:14.080 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:14.081 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:18.080 [DEBUG] [Thread-180067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:33.131 [DEBUG] [Thread-180068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:09:36.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:09:36.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-04-12T01:09:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 9, 23), -0.02244, 100.116, 0.0, 19.1272, 10.6641, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:09:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:09:23
2026-04-12T01:09:38.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:09:38.200 [DEBUG] [Thread-180069] [transport.py] [_log()] starting thread (client mode): 0xae562530
2026-04-12T01:09:38.200 [DEBUG] [Thread-180069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:09:38.223 [DEBUG] [Thread-180069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:09:38.223 [INFO] [Thread-180069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:38.227 [DEBUG] [Thread-180069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] client lang: <none>
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] server lang: <none>
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] kex follows: False
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:09:38.228 [DEBUG] [Thread-180069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:09:38.229 [DEBUG] [Thread-180069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:09:38.229 [DEBUG] [Thread-180069] [transport.py] [_log()] Compression: none
2026-04-12T01:09:38.229 [DEBUG] [Thread-180069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:09:38.251 [DEBUG] [Thread-180069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:09:38.251 [DEBUG] [Thread-180069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:09:38.252 [DEBUG] [Thread-180069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:09:38.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:09:38.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:09:38.254 [DEBUG] [Thread-180069] [transport.py] [_log()] userauth is OK
2026-04-12T01:09:38.254 [DEBUG] [Thread-180069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:09:38.254 [DEBUG] [Thread-180069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:09:38.254 [DEBUG] [Thread-180069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:09:38.254 [DEBUG] [Thread-180069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:09:38.290 [INFO] [Thread-180069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:09:38.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:09:39.046 [DEBUG] [Thread-180069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:09:39.046 [DEBUG] [Thread-180069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:09:39.047 [DEBUG] [Thread-180069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:09:39.087 [DEBUG] [Thread-180069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:09:39.087 [DEBUG] [Thread-180069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:09:39.090 [DEBUG] [Thread-180069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:09:39.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:09:39.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:09:39.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:09:39.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:09:39.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:09:39.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:09:39.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:09:39.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:09:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:09:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.964693 -999.00  +10.60  13.95     98  +10.30 1 3 1 3 1     0    0 0.32 0.65 ----- 19.1 13.9 280.0 22.2 12.0 -1.1 11.9 -1.5 11.4 -0.9 11.8 -0.6
2026-04-12T01:09:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:09:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:09:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.964693
2026-04-12T01:09:39.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:09:39.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:09:39.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:09:39.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:09:39.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:09:39.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:09:23', tmtdew=-0.02244, humidity=100.116, cloud=0.0, wind=19.1272, temperature=10.6641, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:09:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:09:39.117 [DEBUG] [Thread-180069] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:09:39.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:09:39.210 [DEBUG] [Thread-180072] [transport.py] [_log()] starting thread (client mode): 0xae5347c0
2026-04-12T01:09:39.210 [DEBUG] [Thread-180072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:09:39.224 [DEBUG] [Thread-180072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:09:39.224 [INFO] [Thread-180072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] client lang: <none>
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] server lang: <none>
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] kex follows: False
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:09:39.232 [DEBUG] [Thread-180072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:09:39.233 [DEBUG] [Thread-180072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:09:39.233 [DEBUG] [Thread-180072] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:09:39.233 [DEBUG] [Thread-180072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:09:39.233 [DEBUG] [Thread-180072] [transport.py] [_log()] Compression: none
2026-04-12T01:09:39.233 [DEBUG] [Thread-180072] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:09:39.290 [DEBUG] [Thread-180072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:09:39.291 [DEBUG] [Thread-180072] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:09:39.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:09:39.292 [DEBUG] [Thread-180072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:09:39.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:09:39.352 [DEBUG] [Thread-180072] [transport.py] [_log()] userauth is OK
2026-04-12T01:09:39.353 [DEBUG] [Thread-180072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:09:39.353 [DEBUG] [Thread-180072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:09:39.353 [DEBUG] [Thread-180072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:09:39.353 [DEBUG] [Thread-180072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:09:39.372 [INFO] [Thread-180072] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:09:39.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:09:39.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:09:40.194 [DEBUG] [Thread-180072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:09:40.195 [DEBUG] [Thread-180072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:09:40.243 [DEBUG] [Thread-180072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:09:40.243 [DEBUG] [Thread-180072] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:09:40.252 [DEBUG] [Thread-180072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:09:40.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:09:40.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-04-12T01:09:40.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-04-12T01:09:40.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:09:40.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:09:40.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:09:40.287 [DEBUG] [Thread-180072] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:09:48.169 [DEBUG] [Thread-180074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:09:48.676 [DEBUG] [Thread-180075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:03.214 [DEBUG] [Thread-180076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:10.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:10:10.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:10:10.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-04-12T01:10:11.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 9, 58), -0.01747, 100.083, 0.0, 21.5086, 10.6307, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:10:11.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:09:58
2026-04-12T01:10:12.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:10:12.191 [DEBUG] [Thread-180077] [transport.py] [_log()] starting thread (client mode): 0xae560df0
2026-04-12T01:10:12.191 [DEBUG] [Thread-180077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:10:12.211 [DEBUG] [Thread-180077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:10:12.211 [INFO] [Thread-180077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] client lang: <none>
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] server lang: <none>
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] kex follows: False
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:10:12.213 [DEBUG] [Thread-180077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:10:12.214 [DEBUG] [Thread-180077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:10:12.214 [DEBUG] [Thread-180077] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:10:12.214 [DEBUG] [Thread-180077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:10:12.214 [DEBUG] [Thread-180077] [transport.py] [_log()] Compression: none
2026-04-12T01:10:12.214 [DEBUG] [Thread-180077] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:10:12.233 [DEBUG] [Thread-180077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:10:12.233 [DEBUG] [Thread-180077] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:10:12.234 [DEBUG] [Thread-180077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:10:12.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:10:12.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:10:12.236 [DEBUG] [Thread-180077] [transport.py] [_log()] userauth is OK
2026-04-12T01:10:12.236 [DEBUG] [Thread-180077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:10:12.236 [DEBUG] [Thread-180077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:10:12.236 [DEBUG] [Thread-180077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:10:12.237 [DEBUG] [Thread-180077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:10:12.260 [INFO] [Thread-180077] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:10:12.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:10:13.506 [DEBUG] [Thread-180077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:10:13.506 [DEBUG] [Thread-180077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:10:13.507 [DEBUG] [Thread-180077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:10:13.547 [DEBUG] [Thread-180077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:10:13.547 [DEBUG] [Thread-180077] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:10:13.551 [DEBUG] [Thread-180077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:10:13.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:10:13.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:10:13.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:10:13.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:10:13.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:10:13.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:10:13.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:10:13.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:10:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:10:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.965041 -999.00  +10.60  18.82     98  +10.30 1 3 1 3 1     0    0 0.31 0.77 ----- 17.0 18.8 275.6 22.5 12.0 -1.3 11.8 -1.4 11.5 -0.8 11.8 -0.6
2026-04-12T01:10:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:10:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:10:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.965041
2026-04-12T01:10:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:10:13.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:10:13.581 [DEBUG] [Thread-180077] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:10:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:10:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:10:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:10:13.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:09:58', tmtdew=-0.01747, humidity=100.083, cloud=0.0, wind=21.5086, temperature=10.6307, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:09:39.542', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:10:13.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:10:13.677 [DEBUG] [Thread-180080] [transport.py] [_log()] starting thread (client mode): 0xae5632e0
2026-04-12T01:10:13.677 [DEBUG] [Thread-180080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:10:13.696 [DEBUG] [Thread-180080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:10:13.697 [INFO] [Thread-180080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:10:13.704 [DEBUG] [Thread-180080] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:13.705 [DEBUG] [Thread-180080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] client lang: <none>
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] server lang: <none>
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] kex follows: False
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:10:13.706 [DEBUG] [Thread-180080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:10:13.707 [DEBUG] [Thread-180080] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:10:13.707 [DEBUG] [Thread-180080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:10:13.707 [DEBUG] [Thread-180080] [transport.py] [_log()] Compression: none
2026-04-12T01:10:13.707 [DEBUG] [Thread-180080] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:10:13.762 [DEBUG] [Thread-180080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:10:13.763 [DEBUG] [Thread-180080] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:10:13.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:10:13.764 [DEBUG] [Thread-180080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:10:13.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:10:13.818 [DEBUG] [Thread-180080] [transport.py] [_log()] userauth is OK
2026-04-12T01:10:13.818 [DEBUG] [Thread-180080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:10:13.819 [DEBUG] [Thread-180080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:10:13.819 [DEBUG] [Thread-180080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:10:13.819 [DEBUG] [Thread-180080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:10:13.837 [INFO] [Thread-180080] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:10:13.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:10:13.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:10:14.283 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:14.284 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:14.653 [DEBUG] [Thread-180080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:10:14.653 [DEBUG] [Thread-180080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:10:14.701 [DEBUG] [Thread-180080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:10:14.701 [DEBUG] [Thread-180080] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:10:14.711 [DEBUG] [Thread-180080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:10:14.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:10:14.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:10:14.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:10:14.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:10:14.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:10:14.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:10:14.748 [DEBUG] [Thread-180080] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:10:18.251 [DEBUG] [Thread-180082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:33.315 [DEBUG] [Thread-180083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:44.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:10:44.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:10:44.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-04-12T01:10:46.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 10, 34), -0.04999, 100.265, 0.0, 22.865, 11.1277, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:10:46.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:10:34
2026-04-12T01:10:46.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:10:46.565 [DEBUG] [Thread-180084] [transport.py] [_log()] starting thread (client mode): 0xae5622c0
2026-04-12T01:10:46.565 [DEBUG] [Thread-180084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:10:46.579 [DEBUG] [Thread-180084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:10:46.579 [INFO] [Thread-180084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] client lang: <none>
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] server lang: <none>
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] kex follows: False
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] Compression: none
2026-04-12T01:10:46.581 [DEBUG] [Thread-180084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:10:46.592 [DEBUG] [Thread-180084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:10:46.592 [DEBUG] [Thread-180084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:10:46.592 [DEBUG] [Thread-180084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:10:46.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:10:46.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:10:46.594 [DEBUG] [Thread-180084] [transport.py] [_log()] userauth is OK
2026-04-12T01:10:46.594 [DEBUG] [Thread-180084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:10:46.594 [DEBUG] [Thread-180084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:10:46.594 [DEBUG] [Thread-180084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:10:46.594 [DEBUG] [Thread-180084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:10:46.610 [INFO] [Thread-180084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:10:46.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:10:47.403 [DEBUG] [Thread-180084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:10:47.403 [DEBUG] [Thread-180084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:10:47.403 [DEBUG] [Thread-180084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:10:47.444 [DEBUG] [Thread-180084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:10:47.444 [DEBUG] [Thread-180084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:10:47.446 [DEBUG] [Thread-180084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:10:47.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:10:47.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:10:47.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:10:47.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:10:47.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:10:47.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:10:47.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:10:47.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:10:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:10:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.965388 -999.00  +10.70  14.13     98  +10.40 1 3 1 3 1     0    0 0.31 0.74 ----- 11.0 14.1 279.2 21.5 12.0 -1.1 11.8 -1.3 11.5 -0.5 11.8 -0.6
2026-04-12T01:10:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:10:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:10:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.965388
2026-04-12T01:10:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:10:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:10:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:10:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:10:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:10:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:10:34', tmtdew=-0.04999, humidity=100.265, cloud=0.0, wind=22.865, temperature=11.1277, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:10:09.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:10:47.472 [DEBUG] [Thread-180084] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:10:47.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:10:47.569 [DEBUG] [Thread-180087] [transport.py] [_log()] starting thread (client mode): 0xae5a7be0
2026-04-12T01:10:47.569 [DEBUG] [Thread-180087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:10:47.589 [DEBUG] [Thread-180087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:10:47.589 [INFO] [Thread-180087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:10:47.596 [DEBUG] [Thread-180087] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] client lang: <none>
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] server lang: <none>
2026-04-12T01:10:47.597 [DEBUG] [Thread-180087] [transport.py] [_log()] kex follows: False
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] Compression: none
2026-04-12T01:10:47.598 [DEBUG] [Thread-180087] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:10:47.653 [DEBUG] [Thread-180087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:10:47.653 [DEBUG] [Thread-180087] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:10:47.654 [DEBUG] [Thread-180087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:10:47.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:10:47.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:10:47.711 [DEBUG] [Thread-180087] [transport.py] [_log()] userauth is OK
2026-04-12T01:10:47.711 [DEBUG] [Thread-180087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:10:47.711 [DEBUG] [Thread-180087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:10:47.711 [DEBUG] [Thread-180087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:10:47.712 [DEBUG] [Thread-180087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:10:47.729 [INFO] [Thread-180087] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:10:47.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:10:47.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:10:48.352 [DEBUG] [Thread-180089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:10:48.529 [DEBUG] [Thread-180087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:10:48.529 [DEBUG] [Thread-180087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:10:48.577 [DEBUG] [Thread-180087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:10:48.577 [DEBUG] [Thread-180087] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:10:48.586 [DEBUG] [Thread-180087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:10:48.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:10:48.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-04-12T01:10:48.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-04-12T01:10:48.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:10:48.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:10:48.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:10:48.622 [DEBUG] [Thread-180087] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:10:48.748 [DEBUG] [Thread-180090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:03.404 [DEBUG] [Thread-180091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:14.489 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:14.490 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:18.441 [DEBUG] [Thread-180092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:11:18.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:11:18.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-04-12T01:11:19.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 11, 9), 0.02756, 100.116, 0.0, 21.5791, 10.6641, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:11:19.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:11:09
2026-04-12T01:11:20.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:11:20.454 [DEBUG] [Thread-180093] [transport.py] [_log()] starting thread (client mode): 0xae5b67d0
2026-04-12T01:11:20.454 [DEBUG] [Thread-180093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:11:20.473 [DEBUG] [Thread-180093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:11:20.474 [INFO] [Thread-180093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] client lang: <none>
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] server lang: <none>
2026-04-12T01:11:20.477 [DEBUG] [Thread-180093] [transport.py] [_log()] kex follows: False
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] Compression: none
2026-04-12T01:11:20.478 [DEBUG] [Thread-180093] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:11:20.493 [DEBUG] [Thread-180093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:11:20.493 [DEBUG] [Thread-180093] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:11:20.494 [DEBUG] [Thread-180093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:11:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:11:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:11:20.495 [DEBUG] [Thread-180093] [transport.py] [_log()] userauth is OK
2026-04-12T01:11:20.496 [DEBUG] [Thread-180093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:11:20.496 [DEBUG] [Thread-180093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:11:20.496 [DEBUG] [Thread-180093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:11:20.496 [DEBUG] [Thread-180093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:11:20.519 [INFO] [Thread-180093] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:11:20.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:11:21.346 [DEBUG] [Thread-180093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:11:21.346 [DEBUG] [Thread-180093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:11:21.347 [DEBUG] [Thread-180093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:11:21.387 [DEBUG] [Thread-180093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:11:21.387 [DEBUG] [Thread-180093] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:11:21.391 [DEBUG] [Thread-180093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:11:21.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:11:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:11:21.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:11:21.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:11:21.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:11:21.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:11:21.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:11:21.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:11:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:11:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.965735 -999.00  +10.70  18.46     98  +10.40 1 3 1 3 1     0    0 0.31 0.79 ----- 13.3 18.5 292.0 20.4 12.0 -0.9 11.9 -1.3 11.5 -0.6 11.8 -0.6
2026-04-12T01:11:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:11:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:11:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.965735
2026-04-12T01:11:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:11:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:11:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:11:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:11:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:11:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:11:09', tmtdew=0.02756, humidity=100.116, cloud=0.0, wind=21.5791, temperature=10.6641, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:10:39.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:11:21.419 [DEBUG] [Thread-180093] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:11:21.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:11:21.513 [DEBUG] [Thread-180096] [transport.py] [_log()] starting thread (client mode): 0xae5b52d0
2026-04-12T01:11:21.513 [DEBUG] [Thread-180096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:11:21.530 [DEBUG] [Thread-180096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:11:21.530 [INFO] [Thread-180096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:11:21.538 [DEBUG] [Thread-180096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:11:21.538 [DEBUG] [Thread-180096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:11:21.539 [DEBUG] [Thread-180096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:11:21.539 [DEBUG] [Thread-180096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:21.539 [DEBUG] [Thread-180096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:21.539 [DEBUG] [Thread-180096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:21.539 [DEBUG] [Thread-180096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] client lang: <none>
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] server lang: <none>
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] kex follows: False
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] Compression: none
2026-04-12T01:11:21.540 [DEBUG] [Thread-180096] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:11:21.597 [DEBUG] [Thread-180096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:11:21.597 [DEBUG] [Thread-180096] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:11:21.597 [DEBUG] [Thread-180096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:11:21.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:11:21.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:11:21.654 [DEBUG] [Thread-180096] [transport.py] [_log()] userauth is OK
2026-04-12T01:11:21.655 [DEBUG] [Thread-180096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:11:21.655 [DEBUG] [Thread-180096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:11:21.655 [DEBUG] [Thread-180096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:11:21.655 [DEBUG] [Thread-180096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:11:21.673 [INFO] [Thread-180096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:11:21.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:11:21.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:11:22.503 [DEBUG] [Thread-180096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:11:22.503 [DEBUG] [Thread-180096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:11:22.551 [DEBUG] [Thread-180096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:11:22.551 [DEBUG] [Thread-180096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:11:22.561 [DEBUG] [Thread-180096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:11:22.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:11:22.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-04-12T01:11:22.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-04-12T01:11:22.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:11:22.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:11:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:11:22.598 [DEBUG] [Thread-180096] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:11:33.477 [DEBUG] [Thread-180098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:48.519 [DEBUG] [Thread-180099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:48.818 [DEBUG] [Thread-180100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:11:52.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:11:52.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:11:52.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-04-12T01:11:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 11, 45), -0.04996, 100.265, 0.0, 23.747, 11.0945, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:11:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:11:45
2026-04-12T01:11:54.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:11:54.444 [DEBUG] [Thread-180101] [transport.py] [_log()] starting thread (client mode): 0xae5363e0
2026-04-12T01:11:54.444 [DEBUG] [Thread-180101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:11:54.463 [DEBUG] [Thread-180101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:11:54.463 [INFO] [Thread-180101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:11:54.466 [DEBUG] [Thread-180101] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:11:54.466 [DEBUG] [Thread-180101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:11:54.466 [DEBUG] [Thread-180101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] client lang: <none>
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] server lang: <none>
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] kex follows: False
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] Compression: none
2026-04-12T01:11:54.467 [DEBUG] [Thread-180101] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:11:54.485 [DEBUG] [Thread-180101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:11:54.486 [DEBUG] [Thread-180101] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:11:54.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:11:54.487 [DEBUG] [Thread-180101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:11:54.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:11:54.489 [DEBUG] [Thread-180101] [transport.py] [_log()] userauth is OK
2026-04-12T01:11:54.489 [DEBUG] [Thread-180101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:11:54.489 [DEBUG] [Thread-180101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:11:54.489 [DEBUG] [Thread-180101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:11:54.490 [DEBUG] [Thread-180101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:11:54.506 [INFO] [Thread-180101] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:11:54.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:11:55.345 [DEBUG] [Thread-180101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:11:55.345 [DEBUG] [Thread-180101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:11:55.346 [DEBUG] [Thread-180101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:11:55.386 [DEBUG] [Thread-180101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:11:55.386 [DEBUG] [Thread-180101] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:11:55.390 [DEBUG] [Thread-180101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:11:55.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:11:55.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:11:55.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:11:55.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:11:55.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:11:55.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:11:55.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:11:55.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:11:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:11:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.966082 -999.00  +10.70  11.78     98  +10.40 1 3 1 3 1     0    0 0.32 0.87 ----- 11.0 11.8 286.5 17.6 12.0 -1.1 11.9 -1.3 11.6 -0.7 11.9 -0.6
2026-04-12T01:11:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:11:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:11:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.966082
2026-04-12T01:11:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:11:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:11:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:11:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:11:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:11:55.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:11:45', tmtdew=-0.04996, humidity=100.265, cloud=0.0, wind=23.747, temperature=11.0945, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:11:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:11:55.420 [DEBUG] [Thread-180101] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:11:55.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:11:55.525 [DEBUG] [Thread-180104] [transport.py] [_log()] starting thread (client mode): 0xae5b6110
2026-04-12T01:11:55.525 [DEBUG] [Thread-180104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:11:55.540 [DEBUG] [Thread-180104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:11:55.540 [INFO] [Thread-180104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] client lang: <none>
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] server lang: <none>
2026-04-12T01:11:55.548 [DEBUG] [Thread-180104] [transport.py] [_log()] kex follows: False
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] Compression: none
2026-04-12T01:11:55.549 [DEBUG] [Thread-180104] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:11:55.608 [DEBUG] [Thread-180104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:11:55.608 [DEBUG] [Thread-180104] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:11:55.609 [DEBUG] [Thread-180104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:11:55.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:11:55.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:11:55.663 [DEBUG] [Thread-180104] [transport.py] [_log()] userauth is OK
2026-04-12T01:11:55.664 [DEBUG] [Thread-180104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:11:55.664 [DEBUG] [Thread-180104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:11:55.664 [DEBUG] [Thread-180104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:11:55.664 [DEBUG] [Thread-180104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:11:55.682 [INFO] [Thread-180104] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:11:55.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:11:55.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:11:56.495 [DEBUG] [Thread-180104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:11:56.496 [DEBUG] [Thread-180104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:11:56.544 [DEBUG] [Thread-180104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:11:56.544 [DEBUG] [Thread-180104] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:11:56.553 [DEBUG] [Thread-180104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:11:56.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:11:56.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-04-12T01:11:56.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-04-12T01:11:56.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:11:56.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:11:56.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:11:56.591 [DEBUG] [Thread-180104] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:12:03.556 [DEBUG] [Thread-180106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:12:14.691 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:12:14.693 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:12:18.609 [DEBUG] [Thread-180107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:12:26.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:12:26.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:12:26.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-04-12T01:12:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 11, 45), -0.04996, 100.265, 0.0, 23.747, 11.0945, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:12:27.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:11:45
2026-04-12T01:12:28.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:12:28.496 [DEBUG] [Thread-180108] [transport.py] [_log()] starting thread (client mode): 0xae5a5870
2026-04-12T01:12:28.497 [DEBUG] [Thread-180108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:12:28.519 [DEBUG] [Thread-180108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:12:28.519 [INFO] [Thread-180108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] client lang: <none>
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] server lang: <none>
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] kex follows: False
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] Compression: none
2026-04-12T01:12:28.523 [DEBUG] [Thread-180108] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:12:28.540 [DEBUG] [Thread-180108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:12:28.541 [DEBUG] [Thread-180108] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:12:28.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:12:28.542 [DEBUG] [Thread-180108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:12:28.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:12:28.545 [DEBUG] [Thread-180108] [transport.py] [_log()] userauth is OK
2026-04-12T01:12:28.545 [DEBUG] [Thread-180108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:12:28.545 [DEBUG] [Thread-180108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:12:28.545 [DEBUG] [Thread-180108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:12:28.545 [DEBUG] [Thread-180108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:12:28.569 [INFO] [Thread-180108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:12:28.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:12:29.372 [DEBUG] [Thread-180108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:12:29.372 [DEBUG] [Thread-180108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:12:29.373 [DEBUG] [Thread-180108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:12:29.413 [DEBUG] [Thread-180108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:12:29.413 [DEBUG] [Thread-180108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:12:29.416 [DEBUG] [Thread-180108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:12:29.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:12:29.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:12:29.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:12:29.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:12:29.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:12:29.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:12:29.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:12:29.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:12:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:12:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.966429 -999.00  +10.70  18.26     98  +10.40 1 3 1 3 1     0    0 0.32 0.98 ----- 18.4 18.3 281.8 20.1 12.0 -1.2 11.8 -1.3 11.5 -1.1 11.8 -0.8
2026-04-12T01:12:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:12:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:12:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.966429
2026-04-12T01:12:29.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:12:29.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:12:29.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:12:29.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:12:29.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:12:29.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:11:45', tmtdew=-0.04996, humidity=100.265, cloud=0.0, wind=23.747, temperature=11.0945, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:11:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:12:29.445 [DEBUG] [Thread-180108] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:12:29.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:12:29.537 [DEBUG] [Thread-180111] [transport.py] [_log()] starting thread (client mode): 0xae5b5900
2026-04-12T01:12:29.537 [DEBUG] [Thread-180111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:12:29.552 [DEBUG] [Thread-180111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:12:29.552 [INFO] [Thread-180111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:12:29.560 [DEBUG] [Thread-180111] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:12:29.561 [DEBUG] [Thread-180111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] client lang: <none>
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] server lang: <none>
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] kex follows: False
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] Compression: none
2026-04-12T01:12:29.562 [DEBUG] [Thread-180111] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:12:29.621 [DEBUG] [Thread-180111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:12:29.621 [DEBUG] [Thread-180111] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:12:29.622 [DEBUG] [Thread-180111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:12:29.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:12:29.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:12:29.680 [DEBUG] [Thread-180111] [transport.py] [_log()] userauth is OK
2026-04-12T01:12:29.681 [DEBUG] [Thread-180111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:12:29.681 [DEBUG] [Thread-180111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:12:29.681 [DEBUG] [Thread-180111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:12:29.681 [DEBUG] [Thread-180111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:12:29.701 [INFO] [Thread-180111] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:12:29.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:12:29.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:12:30.542 [DEBUG] [Thread-180111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:12:30.542 [DEBUG] [Thread-180111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:12:30.590 [DEBUG] [Thread-180111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:12:30.590 [DEBUG] [Thread-180111] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:12:30.599 [DEBUG] [Thread-180111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:12:30.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:12:30.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-04-12T01:12:30.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:12:30.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:12:30.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:12:30.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:12:30.636 [DEBUG] [Thread-180111] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:12:33.646 [DEBUG] [Thread-180113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:12:48.693 [DEBUG] [Thread-180114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:12:48.882 [DEBUG] [Thread-180115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:00.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:13:00.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:13:00.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-04-12T01:13:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 12, 20), -0.029965, 100.166, 0.0, 20.5384, 10.6472, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:13:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:12:20
2026-04-12T01:13:02.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:13:02.764 [DEBUG] [Thread-180116] [transport.py] [_log()] starting thread (client mode): 0xae5b7a60
2026-04-12T01:13:02.764 [DEBUG] [Thread-180116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:13:02.783 [DEBUG] [Thread-180116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:13:02.783 [INFO] [Thread-180116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] client lang: <none>
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] server lang: <none>
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] kex follows: False
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:13:02.786 [DEBUG] [Thread-180116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:13:02.787 [DEBUG] [Thread-180116] [transport.py] [_log()] Compression: none
2026-04-12T01:13:02.787 [DEBUG] [Thread-180116] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:13:02.803 [DEBUG] [Thread-180116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:13:02.804 [DEBUG] [Thread-180116] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:13:02.805 [DEBUG] [Thread-180116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:13:02.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:13:02.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:13:02.807 [DEBUG] [Thread-180116] [transport.py] [_log()] userauth is OK
2026-04-12T01:13:02.807 [DEBUG] [Thread-180116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:13:02.807 [DEBUG] [Thread-180116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:13:02.807 [DEBUG] [Thread-180116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:13:02.807 [DEBUG] [Thread-180116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:13:02.832 [INFO] [Thread-180116] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:13:02.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:13:03.631 [DEBUG] [Thread-180116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:13:03.632 [DEBUG] [Thread-180116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:13:03.632 [DEBUG] [Thread-180116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:13:03.673 [DEBUG] [Thread-180116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:13:03.673 [DEBUG] [Thread-180116] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:13:03.677 [DEBUG] [Thread-180116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:13:03.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:13:03.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:13:03.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:13:03.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:13:03.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:13:03.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:13:03.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:13:03.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:13:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:13:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.966777 -999.00  +10.60  20.76     98  +10.30 1 3 1 3 1     0    0 0.33 1.09 ----- 16.5 20.8 284.8 24.0 12.0 -1.2 11.9 -1.2 11.5 -0.9 11.8 -0.7
2026-04-12T01:13:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:13:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:13:03.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.966777
2026-04-12T01:13:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:13:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:13:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:13:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:13:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:13:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:12:20', tmtdew=-0.029965, humidity=100.166, cloud=0.0, wind=20.5384, temperature=10.6472, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:12:09.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:13:03.702 [DEBUG] [Thread-180116] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:13:03.729 [DEBUG] [Thread-180119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:03.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:13:03.796 [DEBUG] [Thread-180120] [transport.py] [_log()] starting thread (client mode): 0xae5a4400
2026-04-12T01:13:03.796 [DEBUG] [Thread-180120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:13:03.810 [DEBUG] [Thread-180120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:13:03.810 [INFO] [Thread-180120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] client lang: <none>
2026-04-12T01:13:03.818 [DEBUG] [Thread-180120] [transport.py] [_log()] server lang: <none>
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] kex follows: False
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] Compression: none
2026-04-12T01:13:03.819 [DEBUG] [Thread-180120] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:13:03.880 [DEBUG] [Thread-180120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:13:03.881 [DEBUG] [Thread-180120] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:13:03.882 [DEBUG] [Thread-180120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:13:03.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:13:03.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:13:03.937 [DEBUG] [Thread-180120] [transport.py] [_log()] userauth is OK
2026-04-12T01:13:03.937 [DEBUG] [Thread-180120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:13:03.937 [DEBUG] [Thread-180120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:13:03.937 [DEBUG] [Thread-180120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:13:03.938 [DEBUG] [Thread-180120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:13:03.956 [INFO] [Thread-180120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:13:03.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:13:03.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:13:04.816 [DEBUG] [Thread-180120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:13:04.816 [DEBUG] [Thread-180120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:13:04.864 [DEBUG] [Thread-180120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:13:04.864 [DEBUG] [Thread-180120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:13:04.874 [DEBUG] [Thread-180120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:13:04.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:13:04.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:13:04.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:13:04.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:13:04.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:13:04.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:13:04.911 [DEBUG] [Thread-180120] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:13:14.898 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:14.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:18.771 [DEBUG] [Thread-180122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:33.811 [DEBUG] [Thread-180123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:34.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:13:34.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:13:34.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-04-12T01:13:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 12, 56), -0.012415, 100.05, 0.0, 20.0974, 10.5643, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:13:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:12:56
2026-04-12T01:13:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:13:36.909 [DEBUG] [Thread-180124] [transport.py] [_log()] starting thread (client mode): 0xae5b7460
2026-04-12T01:13:36.909 [DEBUG] [Thread-180124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:13:36.929 [DEBUG] [Thread-180124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:13:36.929 [INFO] [Thread-180124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:13:36.932 [DEBUG] [Thread-180124] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:13:36.932 [DEBUG] [Thread-180124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:13:36.932 [DEBUG] [Thread-180124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:13:36.932 [DEBUG] [Thread-180124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] client lang: <none>
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] server lang: <none>
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] kex follows: False
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] Compression: none
2026-04-12T01:13:36.933 [DEBUG] [Thread-180124] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:13:36.950 [DEBUG] [Thread-180124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:13:36.951 [DEBUG] [Thread-180124] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:13:36.951 [DEBUG] [Thread-180124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:13:36.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:13:36.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:13:36.953 [DEBUG] [Thread-180124] [transport.py] [_log()] userauth is OK
2026-04-12T01:13:36.953 [DEBUG] [Thread-180124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:13:36.954 [DEBUG] [Thread-180124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:13:36.954 [DEBUG] [Thread-180124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:13:36.954 [DEBUG] [Thread-180124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:13:36.979 [INFO] [Thread-180124] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:13:36.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:13:37.791 [DEBUG] [Thread-180124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:13:37.792 [DEBUG] [Thread-180124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:13:37.792 [DEBUG] [Thread-180124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:13:37.834 [DEBUG] [Thread-180124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:13:37.834 [DEBUG] [Thread-180124] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:13:37.836 [DEBUG] [Thread-180124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:13:37.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:13:37.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:13:37.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:13:37.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:13:37.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:13:37.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:13:37.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:13:37.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:13:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:13:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.967124 -999.00  +10.60  19.13     98  +10.30 1 3 1 3 1     0    0 0.32 0.96 ----- 18.0 19.1 285.2 21.0 12.0 -1.2 11.9 -1.4 11.5 -1.0 11.9 -0.6
2026-04-12T01:13:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:13:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:13:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.967124
2026-04-12T01:13:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:13:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:13:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:13:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:13:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:13:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:12:56', tmtdew=-0.012415, humidity=100.05, cloud=0.0, wind=20.0974, temperature=10.5643, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:12:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:13:37.858 [DEBUG] [Thread-180124] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:13:37.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:13:37.948 [DEBUG] [Thread-180127] [transport.py] [_log()] starting thread (client mode): 0xae5b57e0
2026-04-12T01:13:37.948 [DEBUG] [Thread-180127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:13:37.964 [DEBUG] [Thread-180127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:13:37.964 [INFO] [Thread-180127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:13:37.971 [DEBUG] [Thread-180127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:13:37.971 [DEBUG] [Thread-180127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:13:37.971 [DEBUG] [Thread-180127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] client lang: <none>
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] server lang: <none>
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] kex follows: False
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] Compression: none
2026-04-12T01:13:37.972 [DEBUG] [Thread-180127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:13:38.028 [DEBUG] [Thread-180127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:13:38.029 [DEBUG] [Thread-180127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:13:38.029 [DEBUG] [Thread-180127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:13:38.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:13:38.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:13:38.085 [DEBUG] [Thread-180127] [transport.py] [_log()] userauth is OK
2026-04-12T01:13:38.085 [DEBUG] [Thread-180127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:13:38.085 [DEBUG] [Thread-180127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:13:38.085 [DEBUG] [Thread-180127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:13:38.085 [DEBUG] [Thread-180127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:13:38.105 [INFO] [Thread-180127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:13:38.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:13:38.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:13:38.950 [DEBUG] [Thread-180127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:13:38.950 [DEBUG] [Thread-180127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:13:38.998 [DEBUG] [Thread-180127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:13:38.998 [DEBUG] [Thread-180127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:13:39.007 [DEBUG] [Thread-180127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:13:39.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:13:39.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-04-12T01:13:39.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-04-12T01:13:39.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:13:39.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:13:39.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:13:39.043 [DEBUG] [Thread-180127] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:13:48.848 [DEBUG] [Thread-180129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:13:48.959 [DEBUG] [Thread-180130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:03.904 [DEBUG] [Thread-180131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:09.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:14:09.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:14:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:14:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 13, 32), -0.0224, 100.116, 0.0, 20.3443, 10.5809, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:14:10.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:13:32
2026-04-12T01:14:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:14:10.958 [DEBUG] [Thread-180132] [transport.py] [_log()] starting thread (client mode): 0xb39c7250
2026-04-12T01:14:10.958 [DEBUG] [Thread-180132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:14:10.978 [DEBUG] [Thread-180132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:14:10.978 [INFO] [Thread-180132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:10.980 [DEBUG] [Thread-180132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] client lang: <none>
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] server lang: <none>
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] kex follows: False
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] Compression: none
2026-04-12T01:14:10.981 [DEBUG] [Thread-180132] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:14:11.000 [DEBUG] [Thread-180132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:14:11.001 [DEBUG] [Thread-180132] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:14:11.001 [DEBUG] [Thread-180132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:14:11.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:14:11.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:14:11.004 [DEBUG] [Thread-180132] [transport.py] [_log()] userauth is OK
2026-04-12T01:14:11.004 [DEBUG] [Thread-180132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:14:11.004 [DEBUG] [Thread-180132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:14:11.004 [DEBUG] [Thread-180132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:14:11.004 [DEBUG] [Thread-180132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:14:11.041 [INFO] [Thread-180132] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:14:11.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:14:11.856 [DEBUG] [Thread-180132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:14:11.856 [DEBUG] [Thread-180132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:14:11.856 [DEBUG] [Thread-180132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:14:11.897 [DEBUG] [Thread-180132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:14:11.898 [DEBUG] [Thread-180132] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:14:11.900 [DEBUG] [Thread-180132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:14:11.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:14:11.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:14:11.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:14:11.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:14:11.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:14:11.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:14:11.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:14:11.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:14:11.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:14:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.967818 -999.00  +10.60  15.26     98  +10.30 1 3 1 3 1     0    0 0.32 1.04 ----- 15.2 15.3 272.0 21.3 12.0 -1.1 11.8 -1.2 11.5 -0.5 11.8 -0.7
2026-04-12T01:14:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:14:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:14:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.967818
2026-04-12T01:14:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:14:11.927 [DEBUG] [Thread-180132] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:14:11.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:14:11.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:14:11.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:14:11.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:14:11.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:13:32', tmtdew=-0.0224, humidity=100.116, cloud=0.0, wind=20.3443, temperature=10.5809, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:13:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:14:12.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:14:12.023 [DEBUG] [Thread-180135] [transport.py] [_log()] starting thread (client mode): 0xb0f6d8d0
2026-04-12T01:14:12.024 [DEBUG] [Thread-180135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:14:12.038 [DEBUG] [Thread-180135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:14:12.038 [INFO] [Thread-180135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:12.046 [DEBUG] [Thread-180135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] client lang: <none>
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] server lang: <none>
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] kex follows: False
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:14:12.047 [DEBUG] [Thread-180135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:14:12.048 [DEBUG] [Thread-180135] [transport.py] [_log()] Compression: none
2026-04-12T01:14:12.048 [DEBUG] [Thread-180135] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:14:12.106 [DEBUG] [Thread-180135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:14:12.106 [DEBUG] [Thread-180135] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:14:12.107 [DEBUG] [Thread-180135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:14:12.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:14:12.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:14:12.165 [DEBUG] [Thread-180135] [transport.py] [_log()] userauth is OK
2026-04-12T01:14:12.166 [DEBUG] [Thread-180135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:14:12.166 [DEBUG] [Thread-180135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:14:12.166 [DEBUG] [Thread-180135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:14:12.166 [DEBUG] [Thread-180135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:14:12.190 [INFO] [Thread-180135] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:14:12.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:14:12.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:14:13.024 [DEBUG] [Thread-180135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:14:13.024 [DEBUG] [Thread-180135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:14:13.072 [DEBUG] [Thread-180135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:14:13.072 [DEBUG] [Thread-180135] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:14:13.082 [DEBUG] [Thread-180135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:14:13.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:14:13.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-04-12T01:14:13.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-04-12T01:14:13.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:14:13.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:14:13.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:14:13.118 [DEBUG] [Thread-180135] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:14:15.104 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:15.105 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:18.945 [DEBUG] [Thread-180137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:34.000 [DEBUG] [Thread-180138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:43.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:14:43.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:14:43.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:14:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 14, 8), -0.0224, 100.116, 0.0, 20.0092, 10.5809, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:14:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:14:08
2026-04-12T01:14:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:14:44.899 [DEBUG] [Thread-180139] [transport.py] [_log()] starting thread (client mode): 0xb0f6c730
2026-04-12T01:14:44.899 [DEBUG] [Thread-180139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:14:44.920 [DEBUG] [Thread-180139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:14:44.920 [INFO] [Thread-180139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:14:44.923 [DEBUG] [Thread-180139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:14:44.923 [DEBUG] [Thread-180139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:14:44.923 [DEBUG] [Thread-180139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:14:44.923 [DEBUG] [Thread-180139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:44.923 [DEBUG] [Thread-180139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:44.923 [DEBUG] [Thread-180139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] client lang: <none>
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] server lang: <none>
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] kex follows: False
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] Compression: none
2026-04-12T01:14:44.924 [DEBUG] [Thread-180139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:14:44.940 [DEBUG] [Thread-180139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:14:44.940 [DEBUG] [Thread-180139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:14:44.941 [DEBUG] [Thread-180139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:14:44.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:14:44.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:14:44.943 [DEBUG] [Thread-180139] [transport.py] [_log()] userauth is OK
2026-04-12T01:14:44.943 [DEBUG] [Thread-180139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:14:44.943 [DEBUG] [Thread-180139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:14:44.943 [DEBUG] [Thread-180139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:14:44.943 [DEBUG] [Thread-180139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:14:44.978 [INFO] [Thread-180139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:14:44.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:14:45.754 [DEBUG] [Thread-180139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:14:45.755 [DEBUG] [Thread-180139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:14:45.755 [DEBUG] [Thread-180139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:14:45.796 [DEBUG] [Thread-180139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:14:45.797 [DEBUG] [Thread-180139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:14:45.800 [DEBUG] [Thread-180139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:14:45.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:14:45.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:14:45.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:14:45.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:14:45.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:14:45.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:14:45.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:14:45.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:14:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:14:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.968165 -999.00  +10.50  19.87     98  +10.30 1 3 1 3 1     0    0 0.33 1.05 ----- 20.4 19.9 278.8 21.1 12.0 -1.1 11.9 -1.3 11.5 -0.9 11.8 -0.7
2026-04-12T01:14:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:14:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:14:45.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.968165
2026-04-12T01:14:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:14:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:14:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:14:45.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:14:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:14:45.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:14:08', tmtdew=-0.0224, humidity=100.116, cloud=0.0, wind=20.0092, temperature=10.5809, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:14:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:14:45.829 [DEBUG] [Thread-180139] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:14:45.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:14:45.923 [DEBUG] [Thread-180142] [transport.py] [_log()] starting thread (client mode): 0xae5b6b60
2026-04-12T01:14:45.923 [DEBUG] [Thread-180142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:14:45.939 [DEBUG] [Thread-180142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:14:45.939 [INFO] [Thread-180142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:14:45.948 [DEBUG] [Thread-180142] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:14:45.948 [DEBUG] [Thread-180142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:14:45.948 [DEBUG] [Thread-180142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:14:45.948 [DEBUG] [Thread-180142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] client lang: <none>
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] server lang: <none>
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] kex follows: False
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:14:45.949 [DEBUG] [Thread-180142] [transport.py] [_log()] Compression: none
2026-04-12T01:14:45.950 [DEBUG] [Thread-180142] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:14:46.008 [DEBUG] [Thread-180142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:14:46.009 [DEBUG] [Thread-180142] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:14:46.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:14:46.010 [DEBUG] [Thread-180142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:14:46.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:14:46.066 [DEBUG] [Thread-180142] [transport.py] [_log()] userauth is OK
2026-04-12T01:14:46.066 [DEBUG] [Thread-180142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:14:46.066 [DEBUG] [Thread-180142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:14:46.066 [DEBUG] [Thread-180142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:14:46.066 [DEBUG] [Thread-180142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:14:46.085 [INFO] [Thread-180142] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:14:46.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:14:46.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:14:46.950 [DEBUG] [Thread-180142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:14:46.951 [DEBUG] [Thread-180142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:14:46.998 [DEBUG] [Thread-180142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:14:46.998 [DEBUG] [Thread-180142] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:14:47.007 [DEBUG] [Thread-180142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:14:47.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:14:47.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-04-12T01:14:47.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-04-12T01:14:47.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:14:47.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:14:47.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:14:47.044 [DEBUG] [Thread-180142] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:14:49.017 [DEBUG] [Thread-180144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:14:49.039 [DEBUG] [Thread-180145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:04.088 [DEBUG] [Thread-180146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:15.312 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:15.313 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:15:17.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:15:17.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:15:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 14, 43), -0.0499, 100.265, 0.0, 20.713, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:15:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:14:43
2026-04-12T01:15:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:15:18.823 [DEBUG] [Thread-180147] [transport.py] [_log()] starting thread (client mode): 0xb0f6cf70
2026-04-12T01:15:18.823 [DEBUG] [Thread-180147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:15:18.844 [DEBUG] [Thread-180147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:15:18.844 [INFO] [Thread-180147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] client lang: <none>
2026-04-12T01:15:18.847 [DEBUG] [Thread-180147] [transport.py] [_log()] server lang: <none>
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] kex follows: False
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] Compression: none
2026-04-12T01:15:18.848 [DEBUG] [Thread-180147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:15:18.870 [DEBUG] [Thread-180147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:15:18.870 [DEBUG] [Thread-180147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:15:18.871 [DEBUG] [Thread-180147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:15:18.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:15:18.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:15:18.873 [DEBUG] [Thread-180147] [transport.py] [_log()] userauth is OK
2026-04-12T01:15:18.873 [DEBUG] [Thread-180147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:15:18.873 [DEBUG] [Thread-180147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:15:18.873 [DEBUG] [Thread-180147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:15:18.873 [DEBUG] [Thread-180147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:15:18.898 [INFO] [Thread-180147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:15:18.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:15:19.125 [DEBUG] [Thread-180149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:20.047 [DEBUG] [Thread-180147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:15:20.047 [DEBUG] [Thread-180147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:15:20.048 [DEBUG] [Thread-180147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:15:20.088 [DEBUG] [Thread-180147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:15:20.088 [DEBUG] [Thread-180147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:15:20.092 [DEBUG] [Thread-180147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:15:20.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:15:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:15:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:15:20.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:15:20.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:15:20.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:15:20.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:15:20.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:15:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:15:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.968513 -999.00  +10.60  13.77     98  +10.30 1 3 1 3 1     0    0 0.32 0.72 ----- 16.2 13.8 283.0 21.7 12.0 -1.2 11.8 -1.4 11.4 -0.3 11.8 -0.6
2026-04-12T01:15:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:15:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:15:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.968513
2026-04-12T01:15:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:15:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:15:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:15:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:15:20.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:15:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:14:43', tmtdew=-0.0499, humidity=100.265, cloud=0.0, wind=20.713, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:14:39.523', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:15:20.120 [DEBUG] [Thread-180147] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:15:20.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:15:20.214 [DEBUG] [Thread-180151] [transport.py] [_log()] starting thread (client mode): 0xae508e80
2026-04-12T01:15:20.214 [DEBUG] [Thread-180151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:15:20.228 [DEBUG] [Thread-180151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:15:20.229 [INFO] [Thread-180151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:15:20.236 [DEBUG] [Thread-180151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:15:20.236 [DEBUG] [Thread-180151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:15:20.236 [DEBUG] [Thread-180151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] client lang: <none>
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] server lang: <none>
2026-04-12T01:15:20.237 [DEBUG] [Thread-180151] [transport.py] [_log()] kex follows: False
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] Compression: none
2026-04-12T01:15:20.238 [DEBUG] [Thread-180151] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:15:20.294 [DEBUG] [Thread-180151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:15:20.295 [DEBUG] [Thread-180151] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:15:20.295 [DEBUG] [Thread-180151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:15:20.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:15:20.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:15:20.350 [DEBUG] [Thread-180151] [transport.py] [_log()] userauth is OK
2026-04-12T01:15:20.350 [DEBUG] [Thread-180151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:15:20.350 [DEBUG] [Thread-180151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:15:20.351 [DEBUG] [Thread-180151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:15:20.351 [DEBUG] [Thread-180151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:15:20.372 [INFO] [Thread-180151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:15:20.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:15:20.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:15:21.194 [DEBUG] [Thread-180151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:15:21.194 [DEBUG] [Thread-180151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:15:21.242 [DEBUG] [Thread-180151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:15:21.242 [DEBUG] [Thread-180151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:15:21.252 [DEBUG] [Thread-180151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:15:21.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:15:21.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-04-12T01:15:21.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-04-12T01:15:21.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:15:21.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:15:21.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:15:21.291 [DEBUG] [Thread-180151] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:15:34.166 [DEBUG] [Thread-180153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:49.081 [DEBUG] [Thread-180154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:49.219 [DEBUG] [Thread-180155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:15:51.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:15:51.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:15:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:15:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 15, 18), 0.02505, 100.133, 0.0, 20.2561, 10.6307, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:15:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:15:18
2026-04-12T01:15:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:15:53.137 [DEBUG] [Thread-180156] [transport.py] [_log()] starting thread (client mode): 0xae5b49d0
2026-04-12T01:15:53.137 [DEBUG] [Thread-180156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:15:53.159 [DEBUG] [Thread-180156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:15:53.159 [INFO] [Thread-180156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] client lang: <none>
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] server lang: <none>
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] kex follows: False
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] Compression: none
2026-04-12T01:15:53.162 [DEBUG] [Thread-180156] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:15:53.180 [DEBUG] [Thread-180156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:15:53.180 [DEBUG] [Thread-180156] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:15:53.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:15:53.182 [DEBUG] [Thread-180156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:15:53.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:15:53.184 [DEBUG] [Thread-180156] [transport.py] [_log()] userauth is OK
2026-04-12T01:15:53.184 [DEBUG] [Thread-180156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:15:53.184 [DEBUG] [Thread-180156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:15:53.184 [DEBUG] [Thread-180156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:15:53.184 [DEBUG] [Thread-180156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:15:53.202 [INFO] [Thread-180156] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:15:53.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:15:53.970 [DEBUG] [Thread-180156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:15:53.971 [DEBUG] [Thread-180156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:15:53.971 [DEBUG] [Thread-180156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:15:54.011 [DEBUG] [Thread-180156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:15:54.011 [DEBUG] [Thread-180156] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:15:54.014 [DEBUG] [Thread-180156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:15:54.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:15:54.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:15:54.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:15:54.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:15:54.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:15:54.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:15:54.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:15:54.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:15:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:15:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.968859 -999.00  +10.60  14.56     98  +10.30 1 3 1 3 1     0    0 0.31 0.58 ----- 16.3 14.6 278.4 20.9 12.0 -1.2 11.8 -1.3 11.5 -0.9 11.8 -0.6
2026-04-12T01:15:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:15:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:15:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.968859
2026-04-12T01:15:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:15:54.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:15:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:15:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:15:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:15:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:15:18', tmtdew=0.02505, humidity=100.133, cloud=0.0, wind=20.2561, temperature=10.6307, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:15:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:15:54.041 [DEBUG] [Thread-180156] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:15:54.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:15:54.134 [DEBUG] [Thread-180159] [transport.py] [_log()] starting thread (client mode): 0xae5b4ac0
2026-04-12T01:15:54.134 [DEBUG] [Thread-180159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:15:54.149 [DEBUG] [Thread-180159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:15:54.149 [INFO] [Thread-180159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:15:54.157 [DEBUG] [Thread-180159] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] client lang: <none>
2026-04-12T01:15:54.158 [DEBUG] [Thread-180159] [transport.py] [_log()] server lang: <none>
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] kex follows: False
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:15:54.159 [DEBUG] [Thread-180159] [transport.py] [_log()] Compression: none
2026-04-12T01:15:54.160 [DEBUG] [Thread-180159] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:15:54.215 [DEBUG] [Thread-180159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:15:54.215 [DEBUG] [Thread-180159] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:15:54.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:15:54.217 [DEBUG] [Thread-180159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:15:54.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:15:54.274 [DEBUG] [Thread-180159] [transport.py] [_log()] userauth is OK
2026-04-12T01:15:54.274 [DEBUG] [Thread-180159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:15:54.274 [DEBUG] [Thread-180159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:15:54.274 [DEBUG] [Thread-180159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:15:54.274 [DEBUG] [Thread-180159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:15:54.293 [INFO] [Thread-180159] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:15:54.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:15:54.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:15:55.148 [DEBUG] [Thread-180159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:15:55.149 [DEBUG] [Thread-180159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:15:55.198 [DEBUG] [Thread-180159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:15:55.199 [DEBUG] [Thread-180159] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:15:55.207 [DEBUG] [Thread-180159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:15:55.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:15:55.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:15:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:15:55.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:15:55.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:15:55.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:15:55.244 [DEBUG] [Thread-180159] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:16:04.256 [DEBUG] [Thread-180161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:15.517 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:15.519 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:19.317 [DEBUG] [Thread-180162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:25.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:16:25.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:16:25.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:16:26.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 15, 54), -0.05993, 100.332, 0.0, 16.9733, 11.0945, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:16:26.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:15:54
2026-04-12T01:16:26.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:16:27.101 [DEBUG] [Thread-180163] [transport.py] [_log()] starting thread (client mode): 0xae5b4280
2026-04-12T01:16:27.101 [DEBUG] [Thread-180163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:16:27.121 [DEBUG] [Thread-180163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:16:27.122 [INFO] [Thread-180163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:16:27.124 [DEBUG] [Thread-180163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] client lang: <none>
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] server lang: <none>
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] kex follows: False
2026-04-12T01:16:27.125 [DEBUG] [Thread-180163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:16:27.126 [DEBUG] [Thread-180163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:16:27.126 [DEBUG] [Thread-180163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:16:27.126 [DEBUG] [Thread-180163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:16:27.126 [DEBUG] [Thread-180163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:16:27.126 [DEBUG] [Thread-180163] [transport.py] [_log()] Compression: none
2026-04-12T01:16:27.126 [DEBUG] [Thread-180163] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:16:27.145 [DEBUG] [Thread-180163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:16:27.146 [DEBUG] [Thread-180163] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:16:27.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:16:27.147 [DEBUG] [Thread-180163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:16:27.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:16:27.149 [DEBUG] [Thread-180163] [transport.py] [_log()] userauth is OK
2026-04-12T01:16:27.149 [DEBUG] [Thread-180163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:16:27.150 [DEBUG] [Thread-180163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:16:27.150 [DEBUG] [Thread-180163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:16:27.150 [DEBUG] [Thread-180163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:16:27.173 [INFO] [Thread-180163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:16:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:16:27.969 [DEBUG] [Thread-180163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:16:27.969 [DEBUG] [Thread-180163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:16:27.969 [DEBUG] [Thread-180163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:16:28.010 [DEBUG] [Thread-180163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:16:28.010 [DEBUG] [Thread-180163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:16:28.012 [DEBUG] [Thread-180163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:16:28.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:16:28.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:16:28.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:16:28.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:16:28.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:16:28.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:16:28.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:16:28.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:16:28.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:16:28.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.969207 -999.00  +10.60  12.12     98  +10.30 1 3 1 3 1     0    0 0.31 0.57 ----- 17.3 12.1 291.4 19.1 12.0 -1.1 11.8 -1.2 11.5 -0.5 11.8 -0.5
2026-04-12T01:16:28.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:16:28.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:16:28.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.969207
2026-04-12T01:16:28.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:16:28.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:16:28.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:16:28.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:16:28.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:16:28.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:15:54', tmtdew=-0.05993, humidity=100.332, cloud=0.0, wind=16.9733, temperature=11.0945, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:15:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:16:28.036 [DEBUG] [Thread-180163] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:16:28.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:16:28.132 [DEBUG] [Thread-180166] [transport.py] [_log()] starting thread (client mode): 0xae509870
2026-04-12T01:16:28.132 [DEBUG] [Thread-180166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:16:28.146 [DEBUG] [Thread-180166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:16:28.146 [INFO] [Thread-180166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:16:28.153 [DEBUG] [Thread-180166] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] client lang: <none>
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] server lang: <none>
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] kex follows: False
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] Compression: none
2026-04-12T01:16:28.154 [DEBUG] [Thread-180166] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:16:28.216 [DEBUG] [Thread-180166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:16:28.216 [DEBUG] [Thread-180166] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:16:28.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:16:28.218 [DEBUG] [Thread-180166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:16:28.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:16:28.276 [DEBUG] [Thread-180166] [transport.py] [_log()] userauth is OK
2026-04-12T01:16:28.276 [DEBUG] [Thread-180166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:16:28.277 [DEBUG] [Thread-180166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:16:28.277 [DEBUG] [Thread-180166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:16:28.277 [DEBUG] [Thread-180166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:16:28.296 [INFO] [Thread-180166] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:16:28.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:16:28.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:16:29.162 [DEBUG] [Thread-180166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:16:29.163 [DEBUG] [Thread-180166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:16:29.210 [DEBUG] [Thread-180166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:16:29.210 [DEBUG] [Thread-180166] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:16:29.220 [DEBUG] [Thread-180166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:16:29.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:16:29.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:16:29.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:16:29.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:16:29.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:16:29.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:16:29.257 [DEBUG] [Thread-180166] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:16:34.352 [DEBUG] [Thread-180168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:49.139 [DEBUG] [Thread-180169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:49.406 [DEBUG] [Thread-180170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:16:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:16:59.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:16:59.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-04-12T01:17:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 16, 29), -0.03001, 100.166, 0.0, 18.2628, 10.6804, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:17:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:16:29
2026-04-12T01:17:00.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:17:01.140 [DEBUG] [Thread-180171] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-12T01:17:01.140 [DEBUG] [Thread-180171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:17:01.159 [DEBUG] [Thread-180171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:17:01.159 [INFO] [Thread-180171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] client lang: <none>
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] server lang: <none>
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] kex follows: False
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] Compression: none
2026-04-12T01:17:01.161 [DEBUG] [Thread-180171] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:17:01.179 [DEBUG] [Thread-180171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:17:01.179 [DEBUG] [Thread-180171] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:17:01.180 [DEBUG] [Thread-180171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:17:01.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:17:01.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:17:01.182 [DEBUG] [Thread-180171] [transport.py] [_log()] userauth is OK
2026-04-12T01:17:01.182 [DEBUG] [Thread-180171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:17:01.183 [DEBUG] [Thread-180171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:17:01.183 [DEBUG] [Thread-180171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:17:01.183 [DEBUG] [Thread-180171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:17:01.210 [INFO] [Thread-180171] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:17:01.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:17:02.011 [DEBUG] [Thread-180171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:17:02.012 [DEBUG] [Thread-180171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:17:02.012 [DEBUG] [Thread-180171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:17:02.052 [DEBUG] [Thread-180171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:17:02.052 [DEBUG] [Thread-180171] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:17:02.056 [DEBUG] [Thread-180171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:17:02.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:17:02.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:17:02.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:17:02.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:17:02.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:17:02.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:17:02.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:17:02.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:17:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:17:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.969554 -999.00  +10.60  15.33     98  +10.30 1 3 1 3 1     0    0 0.31 0.65 ----- 16.9 15.3 274.8 20.5 12.0 -1.0 11.9 -1.3 11.5 -1.1 11.8 -0.8
2026-04-12T01:17:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:17:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:17:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.969554
2026-04-12T01:17:02.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:17:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:17:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:17:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:17:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:17:02.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:16:29', tmtdew=-0.03001, humidity=100.166, cloud=0.0, wind=18.2628, temperature=10.6804, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:16:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:17:02.082 [DEBUG] [Thread-180171] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:17:02.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:17:02.178 [DEBUG] [Thread-180174] [transport.py] [_log()] starting thread (client mode): 0xb0fcd780
2026-04-12T01:17:02.178 [DEBUG] [Thread-180174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:17:02.192 [DEBUG] [Thread-180174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:17:02.192 [INFO] [Thread-180174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] client lang: <none>
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] server lang: <none>
2026-04-12T01:17:02.200 [DEBUG] [Thread-180174] [transport.py] [_log()] kex follows: False
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] Compression: none
2026-04-12T01:17:02.201 [DEBUG] [Thread-180174] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:17:02.258 [DEBUG] [Thread-180174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:17:02.258 [DEBUG] [Thread-180174] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:17:02.259 [DEBUG] [Thread-180174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:17:02.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:17:02.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:17:02.318 [DEBUG] [Thread-180174] [transport.py] [_log()] userauth is OK
2026-04-12T01:17:02.319 [DEBUG] [Thread-180174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:17:02.319 [DEBUG] [Thread-180174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:17:02.319 [DEBUG] [Thread-180174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:17:02.319 [DEBUG] [Thread-180174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:17:02.337 [INFO] [Thread-180174] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:17:02.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:17:02.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:17:03.171 [DEBUG] [Thread-180174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:17:03.171 [DEBUG] [Thread-180174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:17:03.221 [DEBUG] [Thread-180174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:17:03.222 [DEBUG] [Thread-180174] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:17:03.230 [DEBUG] [Thread-180174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:17:03.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:17:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:17:03.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:17:03.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:17:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:17:03.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:17:03.266 [DEBUG] [Thread-180174] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:17:04.442 [DEBUG] [Thread-180176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:17:15.724 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:17:15.725 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:17:19.491 [DEBUG] [Thread-180177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:17:33.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:17:33.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:17:33.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-04-12T01:17:34.530 [DEBUG] [Thread-180178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:17:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 17, 5), -0.02498, 100.133, 0.0, 19.8504, 10.6472, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:17:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:17:05
2026-04-12T01:17:34.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:17:35.107 [DEBUG] [Thread-180179] [transport.py] [_log()] starting thread (client mode): 0xb0fcfc70
2026-04-12T01:17:35.107 [DEBUG] [Thread-180179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:17:35.127 [DEBUG] [Thread-180179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:17:35.127 [INFO] [Thread-180179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] client lang: <none>
2026-04-12T01:17:35.131 [DEBUG] [Thread-180179] [transport.py] [_log()] server lang: <none>
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] kex follows: False
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] Compression: none
2026-04-12T01:17:35.132 [DEBUG] [Thread-180179] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:17:35.152 [DEBUG] [Thread-180179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:17:35.153 [DEBUG] [Thread-180179] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:17:35.154 [DEBUG] [Thread-180179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:17:35.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:17:35.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:17:35.197 [DEBUG] [Thread-180179] [transport.py] [_log()] userauth is OK
2026-04-12T01:17:35.197 [DEBUG] [Thread-180179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:17:35.197 [DEBUG] [Thread-180179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:17:35.197 [DEBUG] [Thread-180179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:17:35.198 [DEBUG] [Thread-180179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:17:35.224 [INFO] [Thread-180179] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:17:35.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:17:36.039 [DEBUG] [Thread-180179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:17:36.039 [DEBUG] [Thread-180179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:17:36.040 [DEBUG] [Thread-180179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:17:36.080 [DEBUG] [Thread-180179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:17:36.080 [DEBUG] [Thread-180179] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:17:36.084 [DEBUG] [Thread-180179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:17:36.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:17:36.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:17:36.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:17:36.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:17:36.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:17:36.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:17:36.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:17:36.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:17:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:17:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.969902 -999.00  +10.60  14.72     98  +10.30 1 3 1 3 1     0    0 0.31 0.67 ----- 13.7 14.7 280.4 21.0 12.0 -1.2 11.8 -1.3 11.5 -1.2 11.8 -0.7
2026-04-12T01:17:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:17:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:17:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.969902
2026-04-12T01:17:36.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:17:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:17:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:17:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:17:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:17:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:17:05', tmtdew=-0.02498, humidity=100.133, cloud=0.0, wind=19.8504, temperature=10.6472, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:16:39.533', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:17:36.112 [DEBUG] [Thread-180179] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:17:36.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:17:36.205 [DEBUG] [Thread-180182] [transport.py] [_log()] starting thread (client mode): 0xae50b250
2026-04-12T01:17:36.205 [DEBUG] [Thread-180182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:17:36.220 [DEBUG] [Thread-180182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:17:36.220 [INFO] [Thread-180182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] client lang: <none>
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] server lang: <none>
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] kex follows: False
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:17:36.228 [DEBUG] [Thread-180182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:17:36.229 [DEBUG] [Thread-180182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:17:36.229 [DEBUG] [Thread-180182] [transport.py] [_log()] Compression: none
2026-04-12T01:17:36.229 [DEBUG] [Thread-180182] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:17:36.289 [DEBUG] [Thread-180182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:17:36.289 [DEBUG] [Thread-180182] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:17:36.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:17:36.291 [DEBUG] [Thread-180182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:17:36.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:17:36.348 [DEBUG] [Thread-180182] [transport.py] [_log()] userauth is OK
2026-04-12T01:17:36.348 [DEBUG] [Thread-180182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:17:36.348 [DEBUG] [Thread-180182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:17:36.348 [DEBUG] [Thread-180182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:17:36.348 [DEBUG] [Thread-180182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:17:36.367 [INFO] [Thread-180182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:17:36.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:17:36.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:17:37.192 [DEBUG] [Thread-180182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:17:37.193 [DEBUG] [Thread-180182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:17:37.241 [DEBUG] [Thread-180182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:17:37.242 [DEBUG] [Thread-180182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:17:37.251 [DEBUG] [Thread-180182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:17:37.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:17:37.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:17:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:17:37.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:17:37.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:17:37.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:17:37.288 [DEBUG] [Thread-180182] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:17:49.197 [DEBUG] [Thread-180184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:17:49.566 [DEBUG] [Thread-180185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:04.622 [DEBUG] [Thread-180186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:07.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:18:07.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:18:07.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-04-12T01:18:08.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 17, 41), -0.0499, 100.265, 0.0, 20.9952, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:18:08.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:17:41
2026-04-12T01:18:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:18:09.132 [DEBUG] [Thread-180187] [transport.py] [_log()] starting thread (client mode): 0xae5b4fd0
2026-04-12T01:18:09.132 [DEBUG] [Thread-180187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:18:09.145 [DEBUG] [Thread-180187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:18:09.145 [INFO] [Thread-180187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] client lang: <none>
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] server lang: <none>
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] kex follows: False
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] Compression: none
2026-04-12T01:18:09.149 [DEBUG] [Thread-180187] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:18:09.169 [DEBUG] [Thread-180187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:18:09.170 [DEBUG] [Thread-180187] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:18:09.170 [DEBUG] [Thread-180187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:18:09.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:18:09.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:18:09.172 [DEBUG] [Thread-180187] [transport.py] [_log()] userauth is OK
2026-04-12T01:18:09.172 [DEBUG] [Thread-180187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:18:09.173 [DEBUG] [Thread-180187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:18:09.173 [DEBUG] [Thread-180187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:18:09.173 [DEBUG] [Thread-180187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:18:09.197 [INFO] [Thread-180187] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:18:09.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:18:09.982 [DEBUG] [Thread-180187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:18:09.983 [DEBUG] [Thread-180187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:18:09.983 [DEBUG] [Thread-180187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:18:10.024 [DEBUG] [Thread-180187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:18:10.024 [DEBUG] [Thread-180187] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:18:10.028 [DEBUG] [Thread-180187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:18:10.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:18:10.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:18:10.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:18:10.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:18:10.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:18:10.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:18:10.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:18:10.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:18:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:18:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.970249 -999.00  +10.60  14.59     98  +10.30 1 3 1 3 1     0    0 0.30 0.47 ----- 14.3 14.6 287.2 16.4 12.0 -1.0 11.9 -1.2 11.5 -0.5 11.9 -0.5
2026-04-12T01:18:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:18:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:18:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.970249
2026-04-12T01:18:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:18:10.054 [DEBUG] [Thread-180187] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:18:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:18:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:18:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:18:10.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:18:10.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:17:41', tmtdew=-0.0499, humidity=100.265, cloud=0.0, wind=20.9952, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:17:09.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:18:10.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:18:15.930 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:15.931 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:19.662 [DEBUG] [Thread-180190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:34.710 [DEBUG] [Thread-180191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:49.266 [DEBUG] [Thread-180192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:18:49.747 [DEBUG] [Thread-180193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:04.787 [DEBUG] [Thread-180194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:16.138 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:16.139 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:19.821 [DEBUG] [Thread-180195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:34.858 [DEBUG] [Thread-180196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:49.322 [DEBUG] [Thread-180197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:19:49.898 [DEBUG] [Thread-180198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:04.935 [DEBUG] [Thread-180199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:16.341 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:16.342 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:19.972 [DEBUG] [Thread-180200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:22.911 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T01:20:35.011 [DEBUG] [Thread-180201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:49.379 [DEBUG] [Thread-180202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:50.048 [DEBUG] [Thread-180203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:20:52.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:20:52.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:20:52.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-04-12T01:20:54.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 20, 39), -0.05494, 100.298, 0.0, 18.702, 11.0945, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:20:54.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:20:39
2026-04-12T01:20:54.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:20:54.864 [DEBUG] [Thread-180204] [transport.py] [_log()] starting thread (client mode): 0xb0fcc970
2026-04-12T01:20:54.864 [DEBUG] [Thread-180204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:20:54.886 [DEBUG] [Thread-180204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:20:54.886 [INFO] [Thread-180204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:20:54.890 [DEBUG] [Thread-180204] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:20:54.890 [DEBUG] [Thread-180204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:20:54.890 [DEBUG] [Thread-180204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:20:54.890 [DEBUG] [Thread-180204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:20:54.890 [DEBUG] [Thread-180204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] client lang: <none>
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] server lang: <none>
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] kex follows: False
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] Compression: none
2026-04-12T01:20:54.891 [DEBUG] [Thread-180204] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:20:54.910 [DEBUG] [Thread-180204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:20:54.910 [DEBUG] [Thread-180204] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:20:54.911 [DEBUG] [Thread-180204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:20:54.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:20:54.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:20:54.913 [DEBUG] [Thread-180204] [transport.py] [_log()] userauth is OK
2026-04-12T01:20:54.913 [DEBUG] [Thread-180204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:20:54.913 [DEBUG] [Thread-180204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:20:54.913 [DEBUG] [Thread-180204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:20:54.914 [DEBUG] [Thread-180204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:20:54.938 [INFO] [Thread-180204] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:20:54.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:20:55.707 [DEBUG] [Thread-180204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:20:55.707 [DEBUG] [Thread-180204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:20:55.708 [DEBUG] [Thread-180204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:20:55.748 [DEBUG] [Thread-180204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:20:55.748 [DEBUG] [Thread-180204] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:20:55.751 [DEBUG] [Thread-180204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:20:55.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:20:55.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:20:55.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:20:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:20:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:20:55.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:20:55.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:20:55.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:20:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:20:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.972332 -999.00  +10.60  16.62     98  +10.30 1 3 1 3 1     0    0 0.31 0.36 ----- 15.6 16.6 277.2 18.8 12.0 -1.3 11.8 -1.4 11.5 -1.3 11.8 -0.8
2026-04-12T01:20:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:20:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:20:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.972332
2026-04-12T01:20:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:20:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:20:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:20:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:20:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:20:55.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:20:39', tmtdew=-0.05494, humidity=100.298, cloud=0.0, wind=18.702, temperature=11.0945, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:20:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:20:55.777 [DEBUG] [Thread-180204] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:20:55.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:20:55.869 [DEBUG] [Thread-180207] [transport.py] [_log()] starting thread (client mode): 0xae5b4f70
2026-04-12T01:20:55.870 [DEBUG] [Thread-180207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:20:55.884 [DEBUG] [Thread-180207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:20:55.884 [INFO] [Thread-180207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] client lang: <none>
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] server lang: <none>
2026-04-12T01:20:55.892 [DEBUG] [Thread-180207] [transport.py] [_log()] kex follows: False
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] Compression: none
2026-04-12T01:20:55.893 [DEBUG] [Thread-180207] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:20:55.949 [DEBUG] [Thread-180207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:20:55.950 [DEBUG] [Thread-180207] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:20:55.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:20:55.951 [DEBUG] [Thread-180207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:20:55.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:20:56.005 [DEBUG] [Thread-180207] [transport.py] [_log()] userauth is OK
2026-04-12T01:20:56.006 [DEBUG] [Thread-180207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:20:56.006 [DEBUG] [Thread-180207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:20:56.006 [DEBUG] [Thread-180207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:20:56.006 [DEBUG] [Thread-180207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:20:56.024 [INFO] [Thread-180207] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:20:56.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:20:56.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:20:56.882 [DEBUG] [Thread-180207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:20:56.883 [DEBUG] [Thread-180207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:20:56.930 [DEBUG] [Thread-180207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:20:56.931 [DEBUG] [Thread-180207] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:20:56.940 [DEBUG] [Thread-180207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:20:56.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:20:56.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-04-12T01:20: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-04-12T01:20:56.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:20:56.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:20:56.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:20:56.977 [DEBUG] [Thread-180207] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:21:05.086 [DEBUG] [Thread-180209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:21:16.549 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:21:16.550 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:21:20.151 [DEBUG] [Thread-180210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:21:26.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:21:26.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:21:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:21:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 21, 15), 0.03007, 100.099, 0.0, 18.0688, 10.5975, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:21:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:21:15
2026-04-12T01:21:28.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:21:28.816 [DEBUG] [Thread-180211] [transport.py] [_log()] starting thread (client mode): 0xae5b6b90
2026-04-12T01:21:28.816 [DEBUG] [Thread-180211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:21:28.837 [DEBUG] [Thread-180211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:21:28.837 [INFO] [Thread-180211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:21:28.840 [DEBUG] [Thread-180211] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:21:28.840 [DEBUG] [Thread-180211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:21:28.840 [DEBUG] [Thread-180211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:21:28.840 [DEBUG] [Thread-180211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] client lang: <none>
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] server lang: <none>
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] kex follows: False
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:21:28.841 [DEBUG] [Thread-180211] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:21:28.842 [DEBUG] [Thread-180211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:21:28.842 [DEBUG] [Thread-180211] [transport.py] [_log()] Compression: none
2026-04-12T01:21:28.842 [DEBUG] [Thread-180211] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:21:28.851 [DEBUG] [Thread-180211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:21:28.852 [DEBUG] [Thread-180211] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:21:28.852 [DEBUG] [Thread-180211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:21:28.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:21:28.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:21:28.855 [DEBUG] [Thread-180211] [transport.py] [_log()] userauth is OK
2026-04-12T01:21:28.855 [DEBUG] [Thread-180211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:21:28.855 [DEBUG] [Thread-180211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:21:28.855 [DEBUG] [Thread-180211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:21:28.855 [DEBUG] [Thread-180211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:21:28.880 [INFO] [Thread-180211] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:21:28.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:21:29.666 [DEBUG] [Thread-180211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:21:29.666 [DEBUG] [Thread-180211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:21:29.667 [DEBUG] [Thread-180211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:21:29.707 [DEBUG] [Thread-180211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:21:29.707 [DEBUG] [Thread-180211] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:21:29.711 [DEBUG] [Thread-180211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:21:29.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:21:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:21:29.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:21:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:21:29.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:21:29.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:21:29.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:21:29.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:21:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:21:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.972679 -999.00  +10.60  14.99     98  +10.30 1 3 1 3 1     0    0 0.31 0.42 ----- 13.0 15.0 287.4 20.4 12.0 -1.1 11.8 -1.4 11.5 -1.0 11.8 -0.5
2026-04-12T01:21:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:21:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:21:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.972679
2026-04-12T01:21:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:21:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:21:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:21:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:21:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:21:29.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:21:15', tmtdew=0.03007, humidity=100.099, cloud=0.0, wind=18.0688, temperature=10.5975, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:20:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:21:29.740 [DEBUG] [Thread-180211] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:21:29.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:21:29.834 [DEBUG] [Thread-180214] [transport.py] [_log()] starting thread (client mode): 0xae5b59c0
2026-04-12T01:21:29.834 [DEBUG] [Thread-180214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:21:29.848 [DEBUG] [Thread-180214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:21:29.848 [INFO] [Thread-180214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:21:29.856 [DEBUG] [Thread-180214] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:21:29.856 [DEBUG] [Thread-180214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:21:29.856 [DEBUG] [Thread-180214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:21:29.856 [DEBUG] [Thread-180214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:21:29.856 [DEBUG] [Thread-180214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] client lang: <none>
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] server lang: <none>
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] kex follows: False
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:21:29.857 [DEBUG] [Thread-180214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:21:29.858 [DEBUG] [Thread-180214] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:21:29.858 [DEBUG] [Thread-180214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:21:29.858 [DEBUG] [Thread-180214] [transport.py] [_log()] Compression: none
2026-04-12T01:21:29.858 [DEBUG] [Thread-180214] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:21:29.912 [DEBUG] [Thread-180214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:21:29.912 [DEBUG] [Thread-180214] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:21:29.913 [DEBUG] [Thread-180214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:21:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:21:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:21:29.969 [DEBUG] [Thread-180214] [transport.py] [_log()] userauth is OK
2026-04-12T01:21:29.969 [DEBUG] [Thread-180214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:21:29.970 [DEBUG] [Thread-180214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:21:29.970 [DEBUG] [Thread-180214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:21:29.970 [DEBUG] [Thread-180214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:21:29.989 [INFO] [Thread-180214] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:21:29.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:21:29.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:21:30.852 [DEBUG] [Thread-180214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:21:30.852 [DEBUG] [Thread-180214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:21:30.900 [DEBUG] [Thread-180214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:21:30.900 [DEBUG] [Thread-180214] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:21:30.910 [DEBUG] [Thread-180214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:21:30.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:21:30.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-04-12T01:21:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:21:30.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:21:30.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:21:30.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:21:30.947 [DEBUG] [Thread-180214] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:21:35.187 [DEBUG] [Thread-180216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:21:49.448 [DEBUG] [Thread-180217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:21:50.249 [DEBUG] [Thread-180218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:00.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:22:00.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:22:00.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:22:02.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 21, 50), -0.05489, 100.298, 0.0, 17.6083, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:22:02.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:21:50
2026-04-12T01:22:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:22:02.809 [DEBUG] [Thread-180219] [transport.py] [_log()] starting thread (client mode): 0xae509f60
2026-04-12T01:22:02.809 [DEBUG] [Thread-180219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:22:02.828 [DEBUG] [Thread-180219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:22:02.828 [INFO] [Thread-180219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:22:02.831 [DEBUG] [Thread-180219] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] client lang: <none>
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] server lang: <none>
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] kex follows: False
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] Compression: none
2026-04-12T01:22:02.832 [DEBUG] [Thread-180219] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:22:02.851 [DEBUG] [Thread-180219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:22:02.851 [DEBUG] [Thread-180219] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:22:02.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:22:02.852 [DEBUG] [Thread-180219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:22:02.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:22:02.854 [DEBUG] [Thread-180219] [transport.py] [_log()] userauth is OK
2026-04-12T01:22:02.854 [DEBUG] [Thread-180219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:22:02.855 [DEBUG] [Thread-180219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:22:02.855 [DEBUG] [Thread-180219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:22:02.855 [DEBUG] [Thread-180219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:22:02.891 [INFO] [Thread-180219] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:22:02.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:22:03.701 [DEBUG] [Thread-180219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:22:03.701 [DEBUG] [Thread-180219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:22:03.702 [DEBUG] [Thread-180219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:22:03.742 [DEBUG] [Thread-180219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:22:03.742 [DEBUG] [Thread-180219] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:22:03.746 [DEBUG] [Thread-180219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:22:03.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:22:03.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:22:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:22:03.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:22:03.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:22:03.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:22:03.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:22:03.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:22:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:22:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.973026 -999.00  +10.60  17.52     98  +10.30 1 3 1 3 1     0    0 0.31 0.43 ----- 15.6 17.5 276.4 19.7 12.0 -1.0 11.9 -1.2 11.5 -0.9 11.8 -0.5
2026-04-12T01:22:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:22:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:22:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.973026
2026-04-12T01:22:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:22:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:22:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:22:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:22:03.772 [DEBUG] [Thread-180219] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:22:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:22:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:21:50', tmtdew=-0.05489, humidity=100.298, cloud=0.0, wind=17.6083, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:21:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:22:03.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:22:03.866 [DEBUG] [Thread-180222] [transport.py] [_log()] starting thread (client mode): 0xb0fcec80
2026-04-12T01:22:03.866 [DEBUG] [Thread-180222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:22:03.881 [DEBUG] [Thread-180222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:22:03.881 [INFO] [Thread-180222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:22:03.893 [DEBUG] [Thread-180222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:22:03.893 [DEBUG] [Thread-180222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:22:03.893 [DEBUG] [Thread-180222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:22:03.893 [DEBUG] [Thread-180222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:03.893 [DEBUG] [Thread-180222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:03.894 [DEBUG] [Thread-180222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:03.894 [DEBUG] [Thread-180222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:03.894 [DEBUG] [Thread-180222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:22:03.894 [DEBUG] [Thread-180222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:22:03.894 [DEBUG] [Thread-180222] [transport.py] [_log()] client lang: <none>
2026-04-12T01:22:03.894 [DEBUG] [Thread-180222] [transport.py] [_log()] server lang: <none>
2026-04-12T01:22:03.895 [DEBUG] [Thread-180222] [transport.py] [_log()] kex follows: False
2026-04-12T01:22:03.895 [DEBUG] [Thread-180222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:22:03.895 [DEBUG] [Thread-180222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:22:03.895 [DEBUG] [Thread-180222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:22:03.896 [DEBUG] [Thread-180222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:22:03.896 [DEBUG] [Thread-180222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:22:03.896 [DEBUG] [Thread-180222] [transport.py] [_log()] Compression: none
2026-04-12T01:22:03.896 [DEBUG] [Thread-180222] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:22:03.950 [DEBUG] [Thread-180222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:22:03.951 [DEBUG] [Thread-180222] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:22:03.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:22:03.952 [DEBUG] [Thread-180222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:22:03.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:22:04.014 [DEBUG] [Thread-180222] [transport.py] [_log()] userauth is OK
2026-04-12T01:22:04.015 [DEBUG] [Thread-180222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:22:04.015 [DEBUG] [Thread-180222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:22:04.015 [DEBUG] [Thread-180222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:22:04.015 [DEBUG] [Thread-180222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:22:04.040 [INFO] [Thread-180222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:22:04.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:22:04.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:22:04.905 [DEBUG] [Thread-180222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:22:04.905 [DEBUG] [Thread-180222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:22:04.953 [DEBUG] [Thread-180222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:22:04.953 [DEBUG] [Thread-180222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:22:04.964 [DEBUG] [Thread-180222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:22:04.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:22:04.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-04-12T01:22:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:22:04.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:22:04.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:22:04.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:22:05.006 [DEBUG] [Thread-180222] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:22:05.287 [DEBUG] [Thread-180224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:16.753 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:16.754 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:20.341 [DEBUG] [Thread-180225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:22:34.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:22:35.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-04-12T01:22:35.379 [DEBUG] [Thread-180226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:36.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 22, 26), -0.027445, 100.149, 0.0, 15.1398, 10.6307, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:22:36.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:22:26
2026-04-12T01:22:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:22:36.819 [DEBUG] [Thread-180227] [transport.py] [_log()] starting thread (client mode): 0xb0fceb30
2026-04-12T01:22:36.819 [DEBUG] [Thread-180227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:22:36.839 [DEBUG] [Thread-180227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:22:36.839 [INFO] [Thread-180227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:22:36.843 [DEBUG] [Thread-180227] [transport.py] [_log()] client lang: <none>
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] server lang: <none>
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] kex follows: False
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] Compression: none
2026-04-12T01:22:36.844 [DEBUG] [Thread-180227] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:22:36.863 [DEBUG] [Thread-180227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:22:36.863 [DEBUG] [Thread-180227] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:22:36.864 [DEBUG] [Thread-180227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:22:36.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:22:36.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:22:36.905 [DEBUG] [Thread-180227] [transport.py] [_log()] userauth is OK
2026-04-12T01:22:36.905 [DEBUG] [Thread-180227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:22:36.905 [DEBUG] [Thread-180227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:22:36.905 [DEBUG] [Thread-180227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:22:36.906 [DEBUG] [Thread-180227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:22:36.937 [INFO] [Thread-180227] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:22:36.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:22:37.690 [DEBUG] [Thread-180227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:22:37.691 [DEBUG] [Thread-180227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:22:37.691 [DEBUG] [Thread-180227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:22:37.731 [DEBUG] [Thread-180227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:22:37.732 [DEBUG] [Thread-180227] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:22:37.734 [DEBUG] [Thread-180227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:22:37.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:22:37.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:22:37.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:22:37.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:22:37.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:22:37.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:22:37.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:22:37.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:22:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:22:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.973374 -999.00  +10.60  17.48     98  +10.30 1 3 1 3 1     0    0 0.30 0.53 ----- 17.6 17.5 275.0 21.5 12.0 -1.2 11.8 -1.4 11.5 -1.4 11.8 -0.8
2026-04-12T01:22:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:22:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:22:37.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.973374
2026-04-12T01:22:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:22:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:22:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:22:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:22:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:22:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:22:26', tmtdew=-0.027445, humidity=100.149, cloud=0.0, wind=15.1398, temperature=10.6307, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:21:39.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:22:37.752 [DEBUG] [Thread-180227] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:22:37.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:22:37.848 [DEBUG] [Thread-180230] [transport.py] [_log()] starting thread (client mode): 0xb0fccfa0
2026-04-12T01:22:37.848 [DEBUG] [Thread-180230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:22:37.862 [DEBUG] [Thread-180230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:22:37.862 [INFO] [Thread-180230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] client lang: <none>
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] server lang: <none>
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] kex follows: False
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] Compression: none
2026-04-12T01:22:37.870 [DEBUG] [Thread-180230] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:22:37.929 [DEBUG] [Thread-180230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:22:37.929 [DEBUG] [Thread-180230] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:22:37.930 [DEBUG] [Thread-180230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:22:37.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:22:37.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:22:37.985 [DEBUG] [Thread-180230] [transport.py] [_log()] userauth is OK
2026-04-12T01:22:37.985 [DEBUG] [Thread-180230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:22:37.985 [DEBUG] [Thread-180230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:22:37.985 [DEBUG] [Thread-180230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:22:37.986 [DEBUG] [Thread-180230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:22:38.008 [INFO] [Thread-180230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:22:38.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:22:38.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:22:38.805 [DEBUG] [Thread-180230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:22:38.806 [DEBUG] [Thread-180230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:22:38.854 [DEBUG] [Thread-180230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:22:38.854 [DEBUG] [Thread-180230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:22:38.863 [DEBUG] [Thread-180230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:22:38.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:22:38.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-04-12T01:22:38.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-04-12T01:22:38.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:22:38.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:22:38.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:22:38.900 [DEBUG] [Thread-180230] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:22:49.508 [DEBUG] [Thread-180232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:22:50.417 [DEBUG] [Thread-180233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:05.468 [DEBUG] [Thread-180234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:08.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:23:08.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:23:08.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-04-12T01:23:10.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 23, 2), -0.02749, 100.149, 0.0, 15.5632, 10.6638, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:23:10.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:23:02
2026-04-12T01:23:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:23:10.790 [DEBUG] [Thread-180235] [transport.py] [_log()] starting thread (client mode): 0xae535de0
2026-04-12T01:23:10.790 [DEBUG] [Thread-180235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:23:10.808 [DEBUG] [Thread-180235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:23:10.808 [INFO] [Thread-180235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:23:10.810 [DEBUG] [Thread-180235] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:23:10.810 [DEBUG] [Thread-180235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:23:10.810 [DEBUG] [Thread-180235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] client lang: <none>
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] server lang: <none>
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] kex follows: False
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] Compression: none
2026-04-12T01:23:10.811 [DEBUG] [Thread-180235] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:23:10.829 [DEBUG] [Thread-180235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:23:10.830 [DEBUG] [Thread-180235] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:23:10.830 [DEBUG] [Thread-180235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:23:10.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:23:10.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:23:10.832 [DEBUG] [Thread-180235] [transport.py] [_log()] userauth is OK
2026-04-12T01:23:10.832 [DEBUG] [Thread-180235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:23:10.832 [DEBUG] [Thread-180235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:23:10.832 [DEBUG] [Thread-180235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:23:10.833 [DEBUG] [Thread-180235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:23:10.856 [INFO] [Thread-180235] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:23:10.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:23:11.432 [DEBUG] [Thread-180235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:23:11.433 [DEBUG] [Thread-180235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:23:11.433 [DEBUG] [Thread-180235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:23:11.474 [DEBUG] [Thread-180235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:23:11.474 [DEBUG] [Thread-180235] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:23:11.477 [DEBUG] [Thread-180235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:23:11.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:23:11.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:23:11.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:23:11.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:23:11.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:23:11.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:23:11.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:23:11.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:23:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:23:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 
2026-04-12T01:23:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:23:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:23:11.507 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T01:23:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:23:02', tmtdew=-0.02749, humidity=100.149, cloud=0.0, wind=15.5632, temperature=10.6638, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:23:11.508 [DEBUG] [Thread-180235] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:23:11.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:23:11.604 [DEBUG] [Thread-180238] [transport.py] [_log()] starting thread (client mode): 0xae5342b0
2026-04-12T01:23:11.604 [DEBUG] [Thread-180238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:23:11.618 [DEBUG] [Thread-180238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:23:11.618 [INFO] [Thread-180238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:23:11.625 [DEBUG] [Thread-180238] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:23:11.626 [DEBUG] [Thread-180238] [transport.py] [_log()] client lang: <none>
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] server lang: <none>
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] kex follows: False
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] Compression: none
2026-04-12T01:23:11.627 [DEBUG] [Thread-180238] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:23:11.689 [DEBUG] [Thread-180238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:23:11.690 [DEBUG] [Thread-180238] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:23:11.690 [DEBUG] [Thread-180238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:23:11.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:23:11.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:23:11.753 [DEBUG] [Thread-180238] [transport.py] [_log()] userauth is OK
2026-04-12T01:23:11.753 [DEBUG] [Thread-180238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:23:11.753 [DEBUG] [Thread-180238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:23:11.753 [DEBUG] [Thread-180238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:23:11.753 [DEBUG] [Thread-180238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:23:11.769 [INFO] [Thread-180238] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:23:11.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:23:11.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:23:12.584 [DEBUG] [Thread-180238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:23:12.584 [DEBUG] [Thread-180238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:23:12.632 [DEBUG] [Thread-180238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:23:12.632 [DEBUG] [Thread-180238] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:23:12.641 [DEBUG] [Thread-180238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:23:12.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:23:12.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-04-12T01:23:12.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:23:12.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:23:12.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:23:12.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:23:12.678 [DEBUG] [Thread-180238] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:23:16.959 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:16.960 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:20.504 [DEBUG] [Thread-180240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:35.553 [DEBUG] [Thread-180241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:42.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:23:42.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:23:42.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-04-12T01:23:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 23, 2), -0.02749, 100.149, 0.0, 15.5632, 10.6638, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:23:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:23:02
2026-04-12T01:23:44.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:23:44.493 [DEBUG] [Thread-180242] [transport.py] [_log()] starting thread (client mode): 0xae5b6e30
2026-04-12T01:23:44.493 [DEBUG] [Thread-180242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:23:44.514 [DEBUG] [Thread-180242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:23:44.514 [INFO] [Thread-180242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] client lang: <none>
2026-04-12T01:23:44.516 [DEBUG] [Thread-180242] [transport.py] [_log()] server lang: <none>
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] kex follows: False
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] Compression: none
2026-04-12T01:23:44.517 [DEBUG] [Thread-180242] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:23:44.525 [DEBUG] [Thread-180242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:23:44.526 [DEBUG] [Thread-180242] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:23:44.526 [DEBUG] [Thread-180242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:23:44.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:23:44.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:23:44.528 [DEBUG] [Thread-180242] [transport.py] [_log()] userauth is OK
2026-04-12T01:23:44.528 [DEBUG] [Thread-180242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:23:44.528 [DEBUG] [Thread-180242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:23:44.528 [DEBUG] [Thread-180242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:23:44.529 [DEBUG] [Thread-180242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:23:44.550 [INFO] [Thread-180242] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:23:44.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:23:45.081 [DEBUG] [Thread-180242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:23:45.081 [DEBUG] [Thread-180242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:23:45.081 [DEBUG] [Thread-180242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:23:45.122 [DEBUG] [Thread-180242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:23:45.122 [DEBUG] [Thread-180242] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:23:45.126 [DEBUG] [Thread-180242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:23:45.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:23:45.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:23:45.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:23:45.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:23:45.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:23:45.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:23:45.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:23:45.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:23:45.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:23:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.974762 -999.00  +10.60  11.77     98  +10.30 1 3 1 3 1     0    0 0.27 -0.54 ----- 11.1 11.8 283.3 19.0 12.0 -0.9 11.8 -1.2 11.5 -0.5 11.8 -0.4
2026-04-12T01:23:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:23:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:23:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.974762
2026-04-12T01:23:45.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:23:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:23:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:23:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:23:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:23:45.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:23:02', tmtdew=-0.02749, humidity=100.149, cloud=0.0, wind=15.5632, temperature=10.6638, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:23:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:23:45.152 [DEBUG] [Thread-180242] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:23:45.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:23:45.244 [DEBUG] [Thread-180245] [transport.py] [_log()] starting thread (client mode): 0xae5b50f0
2026-04-12T01:23:45.244 [DEBUG] [Thread-180245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:23:45.259 [DEBUG] [Thread-180245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:23:45.259 [INFO] [Thread-180245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] client lang: <none>
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] server lang: <none>
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] kex follows: False
2026-04-12T01:23:45.267 [DEBUG] [Thread-180245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:23:45.268 [DEBUG] [Thread-180245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:23:45.268 [DEBUG] [Thread-180245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:23:45.268 [DEBUG] [Thread-180245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:23:45.268 [DEBUG] [Thread-180245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:23:45.268 [DEBUG] [Thread-180245] [transport.py] [_log()] Compression: none
2026-04-12T01:23:45.268 [DEBUG] [Thread-180245] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:23:45.327 [DEBUG] [Thread-180245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:23:45.327 [DEBUG] [Thread-180245] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:23:45.328 [DEBUG] [Thread-180245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:23:45.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:23:45.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:23:45.383 [DEBUG] [Thread-180245] [transport.py] [_log()] userauth is OK
2026-04-12T01:23:45.383 [DEBUG] [Thread-180245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:23:45.383 [DEBUG] [Thread-180245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:23:45.383 [DEBUG] [Thread-180245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:23:45.383 [DEBUG] [Thread-180245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:23:45.403 [INFO] [Thread-180245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:23:45.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:23:45.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:23:46.245 [DEBUG] [Thread-180245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:23:46.246 [DEBUG] [Thread-180245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:23:46.293 [DEBUG] [Thread-180245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:23:46.293 [DEBUG] [Thread-180245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:23:46.302 [DEBUG] [Thread-180245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:23:46.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:23:46.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-04-12T01:23:46.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-04-12T01:23:46.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:23:46.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:23:46.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:23:46.336 [DEBUG] [Thread-180245] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:23:49.568 [DEBUG] [Thread-180247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:23:50.588 [DEBUG] [Thread-180248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:05.642 [DEBUG] [Thread-180249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:24:16.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:24:16.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-04-12T01:24:17.163 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:17.165 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:17.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 23, 37), -0.04501, 100.232, 0.0, 18.2081, 11.1277, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:24:17.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:23:37
2026-04-12T01:24:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:24:18.213 [DEBUG] [Thread-180250] [transport.py] [_log()] starting thread (client mode): 0xb0fceb30
2026-04-12T01:24:18.213 [DEBUG] [Thread-180250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:24:18.232 [DEBUG] [Thread-180250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:24:18.232 [INFO] [Thread-180250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:24:18.234 [DEBUG] [Thread-180250] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] client lang: <none>
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] server lang: <none>
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] kex follows: False
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] Compression: none
2026-04-12T01:24:18.235 [DEBUG] [Thread-180250] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:24:18.250 [DEBUG] [Thread-180250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:24:18.251 [DEBUG] [Thread-180250] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:24:18.251 [DEBUG] [Thread-180250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:24:18.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:24:18.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:24:18.253 [DEBUG] [Thread-180250] [transport.py] [_log()] userauth is OK
2026-04-12T01:24:18.253 [DEBUG] [Thread-180250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:24:18.253 [DEBUG] [Thread-180250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:24:18.253 [DEBUG] [Thread-180250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:24:18.253 [DEBUG] [Thread-180250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:24:18.277 [INFO] [Thread-180250] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:24:18.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:24:18.870 [DEBUG] [Thread-180250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:24:18.870 [DEBUG] [Thread-180250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:24:18.871 [DEBUG] [Thread-180250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:24:18.911 [DEBUG] [Thread-180250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:24:18.911 [DEBUG] [Thread-180250] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:24:18.915 [DEBUG] [Thread-180250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:24:18.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:24:18.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:24:18.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:24:18.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:24:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:24:18.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:24:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:24:18.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:24:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:24:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.975110 -999.00  +10.60  13.55     98  +10.30 1 3 1 3 1     0    0 0.28 -0.62 ----- 17.4 13.6 270.2 16.0 12.0 -0.8 11.9 -1.3 11.5 -0.6 11.8 -0.4
2026-04-12T01:24:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:24:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:24:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.975110
2026-04-12T01:24:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:24:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:24:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:24:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:24:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:24:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:23:37', tmtdew=-0.04501, humidity=100.232, cloud=0.0, wind=18.2081, temperature=11.1277, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:24:09.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:24:18.940 [DEBUG] [Thread-180250] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:24:19.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:24:19.034 [DEBUG] [Thread-180253] [transport.py] [_log()] starting thread (client mode): 0xae562e60
2026-04-12T01:24:19.034 [DEBUG] [Thread-180253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:24:19.049 [DEBUG] [Thread-180253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:24:19.049 [INFO] [Thread-180253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:19.058 [DEBUG] [Thread-180253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] client lang: <none>
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] server lang: <none>
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] kex follows: False
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:24:19.059 [DEBUG] [Thread-180253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:24:19.060 [DEBUG] [Thread-180253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:24:19.060 [DEBUG] [Thread-180253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:24:19.060 [DEBUG] [Thread-180253] [transport.py] [_log()] Compression: none
2026-04-12T01:24:19.060 [DEBUG] [Thread-180253] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:24:19.114 [DEBUG] [Thread-180253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:24:19.115 [DEBUG] [Thread-180253] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:24:19.115 [DEBUG] [Thread-180253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:24:19.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:24:19.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:24:19.174 [DEBUG] [Thread-180253] [transport.py] [_log()] userauth is OK
2026-04-12T01:24:19.175 [DEBUG] [Thread-180253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:24:19.175 [DEBUG] [Thread-180253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:24:19.175 [DEBUG] [Thread-180253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:24:19.175 [DEBUG] [Thread-180253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:24:19.193 [INFO] [Thread-180253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:24:19.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:24:19.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:24:20.017 [DEBUG] [Thread-180253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:24:20.017 [DEBUG] [Thread-180253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:24:20.065 [DEBUG] [Thread-180253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:24:20.065 [DEBUG] [Thread-180253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:24:20.075 [DEBUG] [Thread-180253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:24:20.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:24:20.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:24:20.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:24:20.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:24:20.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:24:20.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:24:20.112 [DEBUG] [Thread-180253] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:24:20.682 [DEBUG] [Thread-180255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:35.745 [DEBUG] [Thread-180256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:49.624 [DEBUG] [Thread-180257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:50.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:24:50.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:24:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:24:50.783 [DEBUG] [Thread-180258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:24:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 24, 13), 0.02756, 100.116, 0.0, 16.0394, 10.6141, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:24:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:24:13
2026-04-12T01:24:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:24:52.036 [DEBUG] [Thread-180259] [transport.py] [_log()] starting thread (client mode): 0xae5b5bd0
2026-04-12T01:24:52.036 [DEBUG] [Thread-180259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:24:52.051 [DEBUG] [Thread-180259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:24:52.051 [INFO] [Thread-180259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:24:52.054 [DEBUG] [Thread-180259] [transport.py] [_log()] client lang: <none>
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] server lang: <none>
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] kex follows: False
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] Compression: none
2026-04-12T01:24:52.055 [DEBUG] [Thread-180259] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:24:52.073 [DEBUG] [Thread-180259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:24:52.074 [DEBUG] [Thread-180259] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:24:52.074 [DEBUG] [Thread-180259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:24:52.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:24:52.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:24:52.076 [DEBUG] [Thread-180259] [transport.py] [_log()] userauth is OK
2026-04-12T01:24:52.076 [DEBUG] [Thread-180259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:24:52.076 [DEBUG] [Thread-180259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:24:52.076 [DEBUG] [Thread-180259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:24:52.077 [DEBUG] [Thread-180259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:24:52.094 [INFO] [Thread-180259] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:24:52.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:24:52.669 [DEBUG] [Thread-180259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:24:52.669 [DEBUG] [Thread-180259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:24:52.670 [DEBUG] [Thread-180259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:24:52.710 [DEBUG] [Thread-180259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:24:52.710 [DEBUG] [Thread-180259] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:24:52.713 [DEBUG] [Thread-180259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:24:52.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:24:52.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:24:52.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:24:52.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:24:52.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:24:52.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:24:52.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:24:52.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:24:52.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:24:52.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.975457 -999.00  +10.50  13.28     98  +10.20 1 3 1 3 1     0    0 0.28 -0.68 ----- 17.9 13.3 276.8 20.6 12.0 -1.1 11.9 -1.3 11.4 -1.3 11.8 -0.7
2026-04-12T01:24:52.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:24:52.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:24:52.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.975457
2026-04-12T01:24:52.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:24:52.741 [DEBUG] [Thread-180259] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:24:52.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:24:52.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:24:52.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:24:52.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:24:52.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:24:13', tmtdew=0.02756, humidity=100.116, cloud=0.0, wind=16.0394, temperature=10.6141, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:24:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:24:52.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:24:52.837 [DEBUG] [Thread-180262] [transport.py] [_log()] starting thread (client mode): 0xae5b5150
2026-04-12T01:24:52.837 [DEBUG] [Thread-180262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:24:52.852 [DEBUG] [Thread-180262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:24:52.852 [INFO] [Thread-180262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] client lang: <none>
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] server lang: <none>
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] kex follows: False
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] Compression: none
2026-04-12T01:24:52.860 [DEBUG] [Thread-180262] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:24:52.919 [DEBUG] [Thread-180262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:24:52.920 [DEBUG] [Thread-180262] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:24:52.921 [DEBUG] [Thread-180262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:24:52.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:24:52.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:24:52.974 [DEBUG] [Thread-180262] [transport.py] [_log()] userauth is OK
2026-04-12T01:24:52.975 [DEBUG] [Thread-180262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:24:52.975 [DEBUG] [Thread-180262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:24:52.975 [DEBUG] [Thread-180262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:24:52.975 [DEBUG] [Thread-180262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:24:52.994 [INFO] [Thread-180262] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:24:52.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:24:52.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:24:53.834 [DEBUG] [Thread-180262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:24:53.834 [DEBUG] [Thread-180262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:24:53.882 [DEBUG] [Thread-180262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:24:53.882 [DEBUG] [Thread-180262] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:24:53.892 [DEBUG] [Thread-180262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:24:53.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:24:53.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-04-12T01:24:53.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-04-12T01:24:53.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:24:53.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:24:53.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:24:53.929 [DEBUG] [Thread-180262] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:25:05.822 [DEBUG] [Thread-180264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:17.369 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:17.370 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:20.883 [DEBUG] [Thread-180265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:23.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:25:23.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:25:23.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-04-12T01:25:25.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 24, 49), -0.05987, 100.332, 0.0, 20.3602, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:25:25.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:24:49
2026-04-12T01:25:25.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:25:25.741 [DEBUG] [Thread-180266] [transport.py] [_log()] starting thread (client mode): 0xae5b4eb0
2026-04-12T01:25:25.742 [DEBUG] [Thread-180266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:25:25.762 [DEBUG] [Thread-180266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:25:25.762 [INFO] [Thread-180266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:25:25.764 [DEBUG] [Thread-180266] [transport.py] [_log()] client lang: <none>
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] server lang: <none>
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] kex follows: False
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] Compression: none
2026-04-12T01:25:25.765 [DEBUG] [Thread-180266] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:25:25.779 [DEBUG] [Thread-180266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:25:25.779 [DEBUG] [Thread-180266] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:25:25.780 [DEBUG] [Thread-180266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:25:25.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:25:25.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:25:25.782 [DEBUG] [Thread-180266] [transport.py] [_log()] userauth is OK
2026-04-12T01:25:25.782 [DEBUG] [Thread-180266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:25:25.782 [DEBUG] [Thread-180266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:25:25.782 [DEBUG] [Thread-180266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:25:25.782 [DEBUG] [Thread-180266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:25:25.806 [INFO] [Thread-180266] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:25:25.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:25:26.393 [DEBUG] [Thread-180266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:25:26.393 [DEBUG] [Thread-180266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:25:26.393 [DEBUG] [Thread-180266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:25:26.434 [DEBUG] [Thread-180266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:25:26.434 [DEBUG] [Thread-180266] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:25:26.437 [DEBUG] [Thread-180266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:25:26.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:25:26.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:25:26.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:25:26.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:25:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:25:26.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:25:26.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.975804 -999.00  +10.60  13.69     98  +10.30 1 3 1 3 1     0    0 0.28 -0.63 ----- 17.7 13.7 281.4 19.2 12.0 -1.1 11.8 -1.3 11.4 -0.5 11.8 -0.6
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.975804
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:25:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:24:49', tmtdew=-0.05987, humidity=100.332, cloud=0.0, wind=20.3602, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:25:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:25:26.458 [DEBUG] [Thread-180266] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:25:26.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:25:26.539 [DEBUG] [Thread-180269] [transport.py] [_log()] starting thread (client mode): 0xae5b59f0
2026-04-12T01:25:26.540 [DEBUG] [Thread-180269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:25:26.554 [DEBUG] [Thread-180269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:25:26.555 [INFO] [Thread-180269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:25:26.562 [DEBUG] [Thread-180269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] client lang: <none>
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] server lang: <none>
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] kex follows: False
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] Compression: none
2026-04-12T01:25:26.563 [DEBUG] [Thread-180269] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:25:26.626 [DEBUG] [Thread-180269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:25:26.626 [DEBUG] [Thread-180269] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:25:26.627 [DEBUG] [Thread-180269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:25:26.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:25:26.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:25:26.683 [DEBUG] [Thread-180269] [transport.py] [_log()] userauth is OK
2026-04-12T01:25:26.683 [DEBUG] [Thread-180269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:25:26.683 [DEBUG] [Thread-180269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:25:26.684 [DEBUG] [Thread-180269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:25:26.684 [DEBUG] [Thread-180269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:25:26.702 [INFO] [Thread-180269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:25: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-04-12T01:25:26.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:25:27.576 [DEBUG] [Thread-180269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:25:27.577 [DEBUG] [Thread-180269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:25:27.625 [DEBUG] [Thread-180269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:25:27.625 [DEBUG] [Thread-180269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:25:27.634 [DEBUG] [Thread-180269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:25:27.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:25:27.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-04-12T01:25:27.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-04-12T01:25:27.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:25:27.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:25:27.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:25:27.671 [DEBUG] [Thread-180269] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:25:35.921 [DEBUG] [Thread-180271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:49.681 [DEBUG] [Thread-180272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:50.969 [DEBUG] [Thread-180273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:25:57.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:25:57.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:25:57.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-04-12T01:25:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 25, 25), 0.025085, 100.133, 0.0, 16.4452, 10.5975, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:25:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:25:25
2026-04-12T01:25:59.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:25:59.514 [DEBUG] [Thread-180274] [transport.py] [_log()] starting thread (client mode): 0xae563a60
2026-04-12T01:25:59.514 [DEBUG] [Thread-180274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:25:59.535 [DEBUG] [Thread-180274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:25:59.535 [INFO] [Thread-180274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:25:59.538 [DEBUG] [Thread-180274] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] client lang: <none>
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] server lang: <none>
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] kex follows: False
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] Compression: none
2026-04-12T01:25:59.539 [DEBUG] [Thread-180274] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:25:59.555 [DEBUG] [Thread-180274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:25:59.556 [DEBUG] [Thread-180274] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:25:59.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:25:59.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:25:59.559 [DEBUG] [Thread-180274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:25:59.560 [DEBUG] [Thread-180274] [transport.py] [_log()] userauth is OK
2026-04-12T01:25:59.560 [DEBUG] [Thread-180274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:25:59.560 [DEBUG] [Thread-180274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:25:59.560 [DEBUG] [Thread-180274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:25:59.561 [DEBUG] [Thread-180274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:25:59.584 [INFO] [Thread-180274] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:25:59.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:26:00.193 [DEBUG] [Thread-180274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:26:00.193 [DEBUG] [Thread-180274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:26:00.194 [DEBUG] [Thread-180274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:26:00.234 [DEBUG] [Thread-180274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:26:00.234 [DEBUG] [Thread-180274] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:26:00.237 [DEBUG] [Thread-180274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:26:00.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:26:00.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:26:00.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:26:00.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:26:00.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:26:00.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:26:00.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:26:00.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:26:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:26:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.976151 -999.00  +10.50  16.71     98  +10.20 1 3 1 3 1     0    0 0.28 -0.72 ----- 12.9 16.7 270.4 21.9 12.0 -1.3 11.8 -1.7 11.5 -1.3 11.8 -0.8
2026-04-12T01:26:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:26:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:26:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.976151
2026-04-12T01:26:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:26:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:26:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:26:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:26:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:26:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:25:25', tmtdew=0.025085, humidity=100.133, cloud=0.0, wind=16.4452, temperature=10.5975, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:25:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:26:00.256 [DEBUG] [Thread-180274] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:26:00.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:26:00.352 [DEBUG] [Thread-180277] [transport.py] [_log()] starting thread (client mode): 0xae5a56c0
2026-04-12T01:26:00.352 [DEBUG] [Thread-180277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:26:00.366 [DEBUG] [Thread-180277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:26:00.366 [INFO] [Thread-180277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] client lang: <none>
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] server lang: <none>
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] kex follows: False
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:26:00.374 [DEBUG] [Thread-180277] [transport.py] [_log()] Compression: none
2026-04-12T01:26:00.375 [DEBUG] [Thread-180277] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:26:00.430 [DEBUG] [Thread-180277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:26:00.431 [DEBUG] [Thread-180277] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:26:00.431 [DEBUG] [Thread-180277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:26:00.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:26:00.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:26:00.486 [DEBUG] [Thread-180277] [transport.py] [_log()] userauth is OK
2026-04-12T01:26:00.486 [DEBUG] [Thread-180277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:26:00.486 [DEBUG] [Thread-180277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:26:00.486 [DEBUG] [Thread-180277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:26:00.487 [DEBUG] [Thread-180277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:26:00.504 [INFO] [Thread-180277] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:26:00.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:26:00.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:26:01.369 [DEBUG] [Thread-180277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:26:01.369 [DEBUG] [Thread-180277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:26:01.417 [DEBUG] [Thread-180277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:26:01.417 [DEBUG] [Thread-180277] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:26:01.426 [DEBUG] [Thread-180277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:26:01.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:26:01.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-04-12T01:26: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-04-12T01:26:01.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:26:01.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:26:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:26:01.463 [DEBUG] [Thread-180277] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:26:06.009 [DEBUG] [Thread-180279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:26:17.575 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:26:17.577 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:26:21.063 [DEBUG] [Thread-180280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:26:31.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:26:31.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:26:31.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-04-12T01:26:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 26, 1), 0.020085, 100.166, 0.0, 16.745, 10.6141, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:26:32.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:26:01
2026-04-12T01:26:33.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:26:33.278 [DEBUG] [Thread-180281] [transport.py] [_log()] starting thread (client mode): 0xa7956860
2026-04-12T01:26:33.278 [DEBUG] [Thread-180281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:26:33.298 [DEBUG] [Thread-180281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:26:33.299 [INFO] [Thread-180281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:26:33.300 [DEBUG] [Thread-180281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] client lang: <none>
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] server lang: <none>
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] kex follows: False
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] Compression: none
2026-04-12T01:26:33.301 [DEBUG] [Thread-180281] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:26:33.315 [DEBUG] [Thread-180281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:26:33.316 [DEBUG] [Thread-180281] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:26:33.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:26:33.318 [DEBUG] [Thread-180281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:26:33.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:26:33.320 [DEBUG] [Thread-180281] [transport.py] [_log()] userauth is OK
2026-04-12T01:26:33.320 [DEBUG] [Thread-180281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:26:33.320 [DEBUG] [Thread-180281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:26:33.321 [DEBUG] [Thread-180281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:26:33.321 [DEBUG] [Thread-180281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:26:33.339 [INFO] [Thread-180281] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:26:33.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:26:33.901 [DEBUG] [Thread-180281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:26:33.901 [DEBUG] [Thread-180281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:26:33.902 [DEBUG] [Thread-180281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:26:33.943 [DEBUG] [Thread-180281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:26:33.943 [DEBUG] [Thread-180281] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:26:33.947 [DEBUG] [Thread-180281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:26:33.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:26:33.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:26:33.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:26:33.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:26:33.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:26:33.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:26:33.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:26:33.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:26:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:26:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.976499 -999.00  +10.50  12.18     98  +10.30 1 3 1 3 1     0    0 0.27 -0.74 ----- 12.1 12.2 284.8 14.7 12.0 -0.9 11.9 -1.2 11.5 -0.3 11.8 -0.6
2026-04-12T01:26:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:26:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:26:33.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.976499
2026-04-12T01:26:33.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:26:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:26:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:26:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:26:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:26:33.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:26:01', tmtdew=0.020085, humidity=100.166, cloud=0.0, wind=16.745, temperature=10.6141, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:26:09.514', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:26:33.976 [DEBUG] [Thread-180281] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:26:34.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:26:34.072 [DEBUG] [Thread-180284] [transport.py] [_log()] starting thread (client mode): 0xae562f50
2026-04-12T01:26:34.072 [DEBUG] [Thread-180284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:26:34.086 [DEBUG] [Thread-180284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:26:34.087 [INFO] [Thread-180284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:26:34.094 [DEBUG] [Thread-180284] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] client lang: <none>
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] server lang: <none>
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] kex follows: False
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:26:34.095 [DEBUG] [Thread-180284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:26:34.096 [DEBUG] [Thread-180284] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:26:34.096 [DEBUG] [Thread-180284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:26:34.096 [DEBUG] [Thread-180284] [transport.py] [_log()] Compression: none
2026-04-12T01:26:34.096 [DEBUG] [Thread-180284] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:26:34.158 [DEBUG] [Thread-180284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:26:34.158 [DEBUG] [Thread-180284] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:26:34.159 [DEBUG] [Thread-180284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:26:34.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:26:34.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:26:34.223 [DEBUG] [Thread-180284] [transport.py] [_log()] userauth is OK
2026-04-12T01:26:34.223 [DEBUG] [Thread-180284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:26:34.223 [DEBUG] [Thread-180284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:26:34.223 [DEBUG] [Thread-180284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:26:34.223 [DEBUG] [Thread-180284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:26:34.244 [INFO] [Thread-180284] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:26:34.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:26:34.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:26:35.059 [DEBUG] [Thread-180284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:26:35.060 [DEBUG] [Thread-180284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:26:35.108 [DEBUG] [Thread-180284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:26:35.108 [DEBUG] [Thread-180284] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:26:35.117 [DEBUG] [Thread-180284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:26:35.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:26:35.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-04-12T01:26:35.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-04-12T01:26:35.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:26:35.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:26:35.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:26:35.154 [DEBUG] [Thread-180284] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:26:36.102 [DEBUG] [Thread-180286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:26:49.740 [DEBUG] [Thread-180287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:26:51.158 [DEBUG] [Thread-180288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:27:05.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:27:05.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-04-12T01:27:06.195 [DEBUG] [Thread-180289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 26, 36), -0.0499, 100.265, 0.0, 19.337, 11.0613, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:27:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:26:36
2026-04-12T01:27:06.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:27:07.007 [DEBUG] [Thread-180290] [transport.py] [_log()] starting thread (client mode): 0xa79568f0
2026-04-12T01:27:07.007 [DEBUG] [Thread-180290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:27:07.023 [DEBUG] [Thread-180290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:27:07.023 [INFO] [Thread-180290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:07.026 [DEBUG] [Thread-180290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] client lang: <none>
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] server lang: <none>
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] kex follows: False
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] Compression: none
2026-04-12T01:27:07.027 [DEBUG] [Thread-180290] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:27:07.040 [DEBUG] [Thread-180290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:27:07.041 [DEBUG] [Thread-180290] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:27:07.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:27:07.042 [DEBUG] [Thread-180290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:27:07.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:27:07.044 [DEBUG] [Thread-180290] [transport.py] [_log()] userauth is OK
2026-04-12T01:27:07.044 [DEBUG] [Thread-180290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:27:07.044 [DEBUG] [Thread-180290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:27:07.044 [DEBUG] [Thread-180290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:27:07.044 [DEBUG] [Thread-180290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:27:07.068 [INFO] [Thread-180290] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:27:07.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:27:07.695 [DEBUG] [Thread-180290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:27:07.695 [DEBUG] [Thread-180290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:27:07.696 [DEBUG] [Thread-180290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:27:07.738 [DEBUG] [Thread-180290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:27:07.738 [DEBUG] [Thread-180290] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:27:07.740 [DEBUG] [Thread-180290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:27:07.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:27:07.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:27:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:27:07.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:27:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:27:07.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:27:07.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:27:07.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:27:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:27:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.976846 -999.00  +10.60  13.56     98  +10.30 1 3 1 3 1     0    0 0.27 -0.86 ----- 15.9 13.6 275.0 15.8 12.1 -1.0 11.9 -1.1 11.5 -0.9 11.8 -0.6
2026-04-12T01:27:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:27:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:27:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.976846
2026-04-12T01:27:07.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:27:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:27:07.753 [DEBUG] [Thread-180290] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:27:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:27:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:27:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:27:07.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:26:36', tmtdew=-0.0499, humidity=100.265, cloud=0.0, wind=19.337, temperature=11.0613, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:26:39.494', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:27:07.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:27:07.846 [DEBUG] [Thread-180293] [transport.py] [_log()] starting thread (client mode): 0xae50aa70
2026-04-12T01:27:07.846 [DEBUG] [Thread-180293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:27:07.861 [DEBUG] [Thread-180293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:27:07.862 [INFO] [Thread-180293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] client lang: <none>
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] server lang: <none>
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] kex follows: False
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] Compression: none
2026-04-12T01:27:07.870 [DEBUG] [Thread-180293] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:27:07.936 [DEBUG] [Thread-180293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:27:07.936 [DEBUG] [Thread-180293] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:27:07.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:27:07.937 [DEBUG] [Thread-180293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:27:07.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:27:08.000 [DEBUG] [Thread-180293] [transport.py] [_log()] userauth is OK
2026-04-12T01:27:08.000 [DEBUG] [Thread-180293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:27:08.000 [DEBUG] [Thread-180293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:27:08.000 [DEBUG] [Thread-180293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:27:08.000 [DEBUG] [Thread-180293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:27:08.018 [INFO] [Thread-180293] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:27:08.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:27:08.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:27:08.835 [DEBUG] [Thread-180293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:27:08.835 [DEBUG] [Thread-180293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:27:08.883 [DEBUG] [Thread-180293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:27:08.883 [DEBUG] [Thread-180293] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:27:08.892 [DEBUG] [Thread-180293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:27:08.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:27:08.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')
2026-04-12T01:27:08.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:27:08.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:27:08.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:27:08.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:27:08.929 [DEBUG] [Thread-180293] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:27:17.781 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:17.783 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:21.232 [DEBUG] [Thread-180295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:36.285 [DEBUG] [Thread-180296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:27:38.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:27:38.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-04-12T01:27:40.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 27, 11), 0.02991, 100.099, 0.0, 16.1453, 10.7302, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:27:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:27:11
2026-04-12T01:27:40.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:27:40.863 [DEBUG] [Thread-180297] [transport.py] [_log()] starting thread (client mode): 0xae562fe0
2026-04-12T01:27:40.864 [DEBUG] [Thread-180297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:27:40.881 [DEBUG] [Thread-180297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:27:40.881 [INFO] [Thread-180297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:27:40.883 [DEBUG] [Thread-180297] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] client lang: <none>
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] server lang: <none>
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] kex follows: False
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:27:40.884 [DEBUG] [Thread-180297] [transport.py] [_log()] Compression: none
2026-04-12T01:27:40.885 [DEBUG] [Thread-180297] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:27:40.897 [DEBUG] [Thread-180297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:27:40.898 [DEBUG] [Thread-180297] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:27:40.898 [DEBUG] [Thread-180297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:27:40.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:27:40.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:27:40.900 [DEBUG] [Thread-180297] [transport.py] [_log()] userauth is OK
2026-04-12T01:27:40.900 [DEBUG] [Thread-180297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:27:40.901 [DEBUG] [Thread-180297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:27:40.901 [DEBUG] [Thread-180297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:27:40.901 [DEBUG] [Thread-180297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:27:40.927 [INFO] [Thread-180297] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:27:40.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:27:41.538 [DEBUG] [Thread-180297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:27:41.538 [DEBUG] [Thread-180297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:27:41.538 [DEBUG] [Thread-180297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:27:41.579 [DEBUG] [Thread-180297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:27:41.579 [DEBUG] [Thread-180297] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:27:41.583 [DEBUG] [Thread-180297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:27:41.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:27:41.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:27:41.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:27:41.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:27:41.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:27:41.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:27:41.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:27:41.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:27:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:27:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.977193 -999.00  +10.60  12.32     98  +10.30 1 3 1 3 1     0    0 0.26 -0.95 ----- 15.2 12.3 271.4 18.5 12.0 -1.0 11.9 -1.3 11.5 -1.1 11.8 -0.6
2026-04-12T01:27:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:27:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:27:41.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.977193
2026-04-12T01:27:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:27:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:27:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:27:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:27:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:27:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:27:11', tmtdew=0.02991, humidity=100.099, cloud=0.0, wind=16.1453, temperature=10.7302, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:27:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:27:41.609 [DEBUG] [Thread-180297] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:27:41.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:27:41.701 [DEBUG] [Thread-180300] [transport.py] [_log()] starting thread (client mode): 0xb0fcfee0
2026-04-12T01:27:41.702 [DEBUG] [Thread-180300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:27:41.715 [DEBUG] [Thread-180300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:27:41.715 [INFO] [Thread-180300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:27:41.722 [DEBUG] [Thread-180300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:27:41.722 [DEBUG] [Thread-180300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:27:41.722 [DEBUG] [Thread-180300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:27:41.722 [DEBUG] [Thread-180300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] client lang: <none>
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] server lang: <none>
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] kex follows: False
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] Compression: none
2026-04-12T01:27:41.723 [DEBUG] [Thread-180300] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:27:41.778 [DEBUG] [Thread-180300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:27:41.779 [DEBUG] [Thread-180300] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:27:41.779 [DEBUG] [Thread-180300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:27:41.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:27:41.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:27:41.836 [DEBUG] [Thread-180300] [transport.py] [_log()] userauth is OK
2026-04-12T01:27:41.836 [DEBUG] [Thread-180300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:27:41.836 [DEBUG] [Thread-180300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:27:41.837 [DEBUG] [Thread-180300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:27:41.837 [DEBUG] [Thread-180300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:27:41.860 [INFO] [Thread-180300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:27:41.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:27:41.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:27:42.653 [DEBUG] [Thread-180300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:27:42.658 [DEBUG] [Thread-180300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:27:42.701 [DEBUG] [Thread-180300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:27:42.701 [DEBUG] [Thread-180300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:27:42.709 [DEBUG] [Thread-180300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:27:42.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:27:42.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-04-12T01:27:42.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:27:42.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:27:42.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:27:42.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:27:42.742 [DEBUG] [Thread-180300] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:27:49.798 [DEBUG] [Thread-180302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:27:51.320 [DEBUG] [Thread-180303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:06.379 [DEBUG] [Thread-180304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:12.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:28:12.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:28: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-04-12T01:28:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 27, 47), -0.04983, 100.265, 0.0, 17.6436, 10.995, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:28:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:27:47
2026-04-12T01:28:14.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:28:14.551 [DEBUG] [Thread-180305] [transport.py] [_log()] starting thread (client mode): 0xae50ae60
2026-04-12T01:28:14.552 [DEBUG] [Thread-180305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:28:14.571 [DEBUG] [Thread-180305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:28:14.571 [INFO] [Thread-180305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:28:14.572 [DEBUG] [Thread-180305] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] client lang: <none>
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] server lang: <none>
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] kex follows: False
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] Compression: none
2026-04-12T01:28:14.573 [DEBUG] [Thread-180305] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:28:14.590 [DEBUG] [Thread-180305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:28:14.591 [DEBUG] [Thread-180305] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:28:14.591 [DEBUG] [Thread-180305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:28:14.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:28:14.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:28:14.594 [DEBUG] [Thread-180305] [transport.py] [_log()] userauth is OK
2026-04-12T01:28:14.594 [DEBUG] [Thread-180305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:28:14.594 [DEBUG] [Thread-180305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:28:14.594 [DEBUG] [Thread-180305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:28:14.594 [DEBUG] [Thread-180305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:28:14.617 [INFO] [Thread-180305] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:28:14.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:28:15.252 [DEBUG] [Thread-180305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:28:15.253 [DEBUG] [Thread-180305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:28:15.253 [DEBUG] [Thread-180305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:28:15.294 [DEBUG] [Thread-180305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:28:15.294 [DEBUG] [Thread-180305] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:28:15.298 [DEBUG] [Thread-180305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:28:15.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:28:15.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:28:15.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:28:15.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:28:15.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:28:15.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:28:15.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:28:15.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:28:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:28:15.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.977540 -999.00  +10.60  15.14     98  +10.30 1 3 1 3 1     0    0 0.26 -0.85 ----- 13.0 15.1 277.0 19.1 12.0 -0.8 11.9 -1.2 11.5 -0.3 11.8 -0.6
2026-04-12T01:28:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:28:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:28:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.977540
2026-04-12T01:28:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:28:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:28:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:28:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:28:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:28:15.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:27:47', tmtdew=-0.04983, humidity=100.265, cloud=0.0, wind=17.6436, temperature=10.995, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:27:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:28:15.326 [DEBUG] [Thread-180305] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:28:15.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:28:15.420 [DEBUG] [Thread-180308] [transport.py] [_log()] starting thread (client mode): 0xae508490
2026-04-12T01:28:15.420 [DEBUG] [Thread-180308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:28:15.435 [DEBUG] [Thread-180308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:28:15.435 [INFO] [Thread-180308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:28:15.443 [DEBUG] [Thread-180308] [transport.py] [_log()] client lang: <none>
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] server lang: <none>
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] kex follows: False
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] Compression: none
2026-04-12T01:28:15.444 [DEBUG] [Thread-180308] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:28:15.502 [DEBUG] [Thread-180308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:28:15.502 [DEBUG] [Thread-180308] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:28:15.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:28:15.503 [DEBUG] [Thread-180308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:28:15.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:28:15.565 [DEBUG] [Thread-180308] [transport.py] [_log()] userauth is OK
2026-04-12T01:28:15.566 [DEBUG] [Thread-180308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:28:15.566 [DEBUG] [Thread-180308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:28:15.566 [DEBUG] [Thread-180308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:28:15.566 [DEBUG] [Thread-180308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:28:15.585 [INFO] [Thread-180308] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:28:15.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:28:15.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:28:16.431 [DEBUG] [Thread-180308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:28:16.431 [DEBUG] [Thread-180308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:28:16.479 [DEBUG] [Thread-180308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:28:16.479 [DEBUG] [Thread-180308] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:28:16.489 [DEBUG] [Thread-180308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:28:16.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:28:16.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-04-12T01:28:16.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-04-12T01:28:16.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:28:16.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:28:16.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:28:16.526 [DEBUG] [Thread-180308] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:28:17.986 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:17.987 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:21.414 [DEBUG] [Thread-180310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:36.466 [DEBUG] [Thread-180311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:46.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:28:46.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:28:46.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-04-12T01:28:47.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 28, 22), 0.01757, 100.182, 0.0, 15.1214, 10.6307, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:28:47.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:28:22
2026-04-12T01:28:48.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:28:48.346 [DEBUG] [Thread-180312] [transport.py] [_log()] starting thread (client mode): 0xb39c7e20
2026-04-12T01:28:48.346 [DEBUG] [Thread-180312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:28:48.365 [DEBUG] [Thread-180312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:28:48.365 [INFO] [Thread-180312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:28:48.368 [DEBUG] [Thread-180312] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:28:48.368 [DEBUG] [Thread-180312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:28:48.368 [DEBUG] [Thread-180312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] client lang: <none>
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] server lang: <none>
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] kex follows: False
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:28:48.369 [DEBUG] [Thread-180312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:28:48.370 [DEBUG] [Thread-180312] [transport.py] [_log()] Compression: none
2026-04-12T01:28:48.370 [DEBUG] [Thread-180312] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:28:48.380 [DEBUG] [Thread-180312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:28:48.381 [DEBUG] [Thread-180312] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:28:48.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:28:48.382 [DEBUG] [Thread-180312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:28:48.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:28:48.384 [DEBUG] [Thread-180312] [transport.py] [_log()] userauth is OK
2026-04-12T01:28:48.384 [DEBUG] [Thread-180312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:28:48.384 [DEBUG] [Thread-180312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:28:48.385 [DEBUG] [Thread-180312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:28:48.385 [DEBUG] [Thread-180312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:28:48.403 [INFO] [Thread-180312] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:28:48.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:28:49.051 [DEBUG] [Thread-180312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:28:49.051 [DEBUG] [Thread-180312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:28:49.052 [DEBUG] [Thread-180312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:28:49.092 [DEBUG] [Thread-180312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:28:49.092 [DEBUG] [Thread-180312] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:28:49.096 [DEBUG] [Thread-180312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:28:49.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:28:49.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:28:49.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:28:49.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:28:49.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:28:49.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:28:49.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:28:49.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:28:49.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:28:49.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.978235 -999.00  +10.50  14.35     98  +10.30 1 3 1 3 1     0    0 0.26 -0.80 ----- 15.9 14.3 263.0 17.6 12.1 -1.4 11.9 -1.7 11.6 -0.2 11.9 -1.1
2026-04-12T01:28:49.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:28:49.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:28:49.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.978235
2026-04-12T01:28:49.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:28:49.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:28:49.121 [DEBUG] [Thread-180312] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:28:49.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:28:49.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:28:49.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:28:49.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:28:22', tmtdew=0.01757, humidity=100.182, cloud=0.0, wind=15.1214, temperature=10.6307, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:28:39.504', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:28:49.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:28:49.218 [DEBUG] [Thread-180315] [transport.py] [_log()] starting thread (client mode): 0xb39c7340
2026-04-12T01:28:49.218 [DEBUG] [Thread-180315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:28:49.233 [DEBUG] [Thread-180315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:28:49.233 [INFO] [Thread-180315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:28:49.240 [DEBUG] [Thread-180315] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] client lang: <none>
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] server lang: <none>
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] kex follows: False
2026-04-12T01:28:49.241 [DEBUG] [Thread-180315] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:28:49.242 [DEBUG] [Thread-180315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:28:49.242 [DEBUG] [Thread-180315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:28:49.242 [DEBUG] [Thread-180315] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:28:49.242 [DEBUG] [Thread-180315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:28:49.242 [DEBUG] [Thread-180315] [transport.py] [_log()] Compression: none
2026-04-12T01:28:49.242 [DEBUG] [Thread-180315] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:28:49.300 [DEBUG] [Thread-180315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:28:49.301 [DEBUG] [Thread-180315] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:28:49.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:28:49.302 [DEBUG] [Thread-180315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:28:49.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:28:49.357 [DEBUG] [Thread-180315] [transport.py] [_log()] userauth is OK
2026-04-12T01:28:49.357 [DEBUG] [Thread-180315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:28:49.358 [DEBUG] [Thread-180315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:28:49.358 [DEBUG] [Thread-180315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:28:49.358 [DEBUG] [Thread-180315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:28:49.377 [INFO] [Thread-180315] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:28:49.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:28:49.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:28:49.860 [DEBUG] [Thread-180317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:28:50.246 [DEBUG] [Thread-180315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:28:50.246 [DEBUG] [Thread-180315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:28:50.294 [DEBUG] [Thread-180315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:28:50.294 [DEBUG] [Thread-180315] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:28:50.304 [DEBUG] [Thread-180315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:28:50.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:28:50.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:28:50.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-04-12T01:28:50.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:28:50.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:28:50.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:28:50.341 [DEBUG] [Thread-180315] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:28:51.505 [DEBUG] [Thread-180318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:06.558 [DEBUG] [Thread-180319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:18.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:18.194 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:20.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:29:20.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:29: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-04-12T01:29:21.595 [DEBUG] [Thread-180320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:21.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 28, 58), -0.019945, 100.099, 0.0, 17.2566, 10.5641, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:29:21.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:28:58
2026-04-12T01:29:22.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:29:22.263 [DEBUG] [Thread-180321] [transport.py] [_log()] starting thread (client mode): 0xa7956200
2026-04-12T01:29:22.263 [DEBUG] [Thread-180321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:29:22.282 [DEBUG] [Thread-180321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:29:22.282 [INFO] [Thread-180321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] client lang: <none>
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] server lang: <none>
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] kex follows: False
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] Compression: none
2026-04-12T01:29:22.284 [DEBUG] [Thread-180321] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:29:22.301 [DEBUG] [Thread-180321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:29:22.301 [DEBUG] [Thread-180321] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:29:22.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:29:22.303 [DEBUG] [Thread-180321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:29:22.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:29:22.305 [DEBUG] [Thread-180321] [transport.py] [_log()] userauth is OK
2026-04-12T01:29:22.305 [DEBUG] [Thread-180321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:29:22.305 [DEBUG] [Thread-180321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:29:22.305 [DEBUG] [Thread-180321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:29:22.305 [DEBUG] [Thread-180321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:29:22.329 [INFO] [Thread-180321] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:29:22.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:29:22.931 [DEBUG] [Thread-180321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:29:22.931 [DEBUG] [Thread-180321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:29:22.932 [DEBUG] [Thread-180321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:29:22.972 [DEBUG] [Thread-180321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:29:22.972 [DEBUG] [Thread-180321] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:29:22.976 [DEBUG] [Thread-180321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:29:22.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:29:22.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:29:22.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:29:22.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:29:23.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:29:23.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:29:23.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:29:23.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:29:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:29:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.978582 -999.00  +10.50  12.23     98  +10.20 1 3 1 3 1     0    0 0.27 -0.75 ----- 10.7 12.2 256.8 21.5 12.1 -1.2 11.9 -1.9 11.5 -1.1 11.8 -1.1
2026-04-12T01:29:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:29:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:29:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.978582
2026-04-12T01:29:23.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:29:23.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:29:23.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:29:23.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:29:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:29:23.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:28:58', tmtdew=-0.019945, humidity=100.099, cloud=0.0, wind=17.2566, temperature=10.5641, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:29:09.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:29:23.005 [DEBUG] [Thread-180321] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:29:23.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:29:36.632 [DEBUG] [Thread-180324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:49.917 [DEBUG] [Thread-180325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:29:51.685 [DEBUG] [Thread-180326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:06.718 [DEBUG] [Thread-180327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:18.397 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:18.398 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:21.754 [DEBUG] [Thread-180328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:36.791 [DEBUG] [Thread-180329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:49.976 [DEBUG] [Thread-180330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:30:51.828 [DEBUG] [Thread-180331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:06.866 [DEBUG] [Thread-180332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:18.604 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:18.605 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:21.904 [DEBUG] [Thread-180333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:34.655 [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-04-12T01:31:36.941 [DEBUG] [Thread-180334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:50.031 [DEBUG] [Thread-180335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:31:51.979 [DEBUG] [Thread-180336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:04.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:32:04.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:32:04.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-04-12T01:32:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 31, 55), -0.030035, 100.166, 0.0, 16.0747, 10.564, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:32:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:31:55
2026-04-12T01:32:06.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:32:06.484 [DEBUG] [Thread-180337] [transport.py] [_log()] starting thread (client mode): 0xae563bb0
2026-04-12T01:32:06.484 [DEBUG] [Thread-180337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:32:06.505 [DEBUG] [Thread-180337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:32:06.505 [INFO] [Thread-180337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:32:06.508 [DEBUG] [Thread-180337] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:32:06.508 [DEBUG] [Thread-180337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] client lang: <none>
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] server lang: <none>
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] kex follows: False
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:32:06.509 [DEBUG] [Thread-180337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:32:06.510 [DEBUG] [Thread-180337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:32:06.510 [DEBUG] [Thread-180337] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:32:06.510 [DEBUG] [Thread-180337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:32:06.510 [DEBUG] [Thread-180337] [transport.py] [_log()] Compression: none
2026-04-12T01:32:06.510 [DEBUG] [Thread-180337] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:32:06.528 [DEBUG] [Thread-180337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:32:06.528 [DEBUG] [Thread-180337] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:32:06.529 [DEBUG] [Thread-180337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:32:06.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:32:06.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:32:06.531 [DEBUG] [Thread-180337] [transport.py] [_log()] userauth is OK
2026-04-12T01:32:06.531 [DEBUG] [Thread-180337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:32:06.532 [DEBUG] [Thread-180337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:32:06.532 [DEBUG] [Thread-180337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:32:06.532 [DEBUG] [Thread-180337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:32:06.549 [INFO] [Thread-180337] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:32:06.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:32:07.015 [DEBUG] [Thread-180339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:07.137 [DEBUG] [Thread-180337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:32:07.137 [DEBUG] [Thread-180337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:32:07.138 [DEBUG] [Thread-180337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:32:07.178 [DEBUG] [Thread-180337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:32:07.178 [DEBUG] [Thread-180337] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:32:07.181 [DEBUG] [Thread-180337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:32:07.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:32:07.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:32:07.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:32:07.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:32:07.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:32:07.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:32:07.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:32:07.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:32:07.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:32:07.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.980318 -999.00  +10.40  17.99     98  +10.10 1 3 1 3 1     0    0 0.29 -0.37 ----- 15.1 18.0 275.4 24.2 11.9 -1.5 11.8 -2.2 11.4 -1.6 11.8 -1.1
2026-04-12T01:32:07.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:32:07.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:32:07.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.980318
2026-04-12T01:32:07.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:32:07.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:32:07.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:32:07.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:32:07.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:32:07.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:31:55', tmtdew=-0.030035, humidity=100.166, cloud=0.0, wind=16.0747, temperature=10.564, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:31:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:32:07.203 [DEBUG] [Thread-180337] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:32:07.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:32:07.297 [DEBUG] [Thread-180341] [transport.py] [_log()] starting thread (client mode): 0xae5355a0
2026-04-12T01:32:07.298 [DEBUG] [Thread-180341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:32:07.312 [DEBUG] [Thread-180341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:32:07.312 [INFO] [Thread-180341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] client lang: <none>
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] server lang: <none>
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] kex follows: False
2026-04-12T01:32:07.320 [DEBUG] [Thread-180341] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:32:07.321 [DEBUG] [Thread-180341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:32:07.321 [DEBUG] [Thread-180341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:32:07.321 [DEBUG] [Thread-180341] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:32:07.321 [DEBUG] [Thread-180341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:32:07.321 [DEBUG] [Thread-180341] [transport.py] [_log()] Compression: none
2026-04-12T01:32:07.321 [DEBUG] [Thread-180341] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:32:07.382 [DEBUG] [Thread-180341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:32:07.383 [DEBUG] [Thread-180341] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:32:07.384 [DEBUG] [Thread-180341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:32:07.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:32:07.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:32:07.438 [DEBUG] [Thread-180341] [transport.py] [_log()] userauth is OK
2026-04-12T01:32:07.439 [DEBUG] [Thread-180341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:32:07.439 [DEBUG] [Thread-180341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:32:07.439 [DEBUG] [Thread-180341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:32:07.439 [DEBUG] [Thread-180341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:32:07.458 [INFO] [Thread-180341] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:32:07.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:32:07.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:32:08.292 [DEBUG] [Thread-180341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:32:08.292 [DEBUG] [Thread-180341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:32:08.340 [DEBUG] [Thread-180341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:32:08.340 [DEBUG] [Thread-180341] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:32:08.349 [DEBUG] [Thread-180341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:32:08.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:32:08.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-04-12T01:32:08.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-04-12T01:32:08.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:32:08.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:32:08.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:32:08.387 [DEBUG] [Thread-180341] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:32:18.809 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:18.810 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:22.054 [DEBUG] [Thread-180343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:37.108 [DEBUG] [Thread-180344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:32:38.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:32:38.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-04-12T01:32:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 32, 30), -0.02749, 100.149, 0.0, 18.0857, 10.5308, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:32:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:32:30
2026-04-12T01:32:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:32:40.236 [DEBUG] [Thread-180345] [transport.py] [_log()] starting thread (client mode): 0xae5365f0
2026-04-12T01:32:40.236 [DEBUG] [Thread-180345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:32:40.252 [DEBUG] [Thread-180345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:32:40.252 [INFO] [Thread-180345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:32:40.255 [DEBUG] [Thread-180345] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] client lang: <none>
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] server lang: <none>
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] kex follows: False
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:32:40.256 [DEBUG] [Thread-180345] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:32:40.257 [DEBUG] [Thread-180345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:32:40.257 [DEBUG] [Thread-180345] [transport.py] [_log()] Compression: none
2026-04-12T01:32:40.257 [DEBUG] [Thread-180345] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:32:40.269 [DEBUG] [Thread-180345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:32:40.269 [DEBUG] [Thread-180345] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:32:40.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:32:40.271 [DEBUG] [Thread-180345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:32:40.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:32:40.273 [DEBUG] [Thread-180345] [transport.py] [_log()] userauth is OK
2026-04-12T01:32:40.273 [DEBUG] [Thread-180345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:32:40.274 [DEBUG] [Thread-180345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:32:40.274 [DEBUG] [Thread-180345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:32:40.274 [DEBUG] [Thread-180345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:32:40.297 [INFO] [Thread-180345] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:32:40.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:32:40.837 [DEBUG] [Thread-180345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:32:40.838 [DEBUG] [Thread-180345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:32:40.838 [DEBUG] [Thread-180345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:32:40.879 [DEBUG] [Thread-180345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:32:40.879 [DEBUG] [Thread-180345] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:32:40.883 [DEBUG] [Thread-180345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:32:40.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:32:40.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:32:40.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:32:40.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:32:40.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:32:40.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:32:40.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:32:40.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:32:40.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:32:40.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.980665 -999.00  +10.40  17.76     98  +10.10 1 3 1 3 1     0    0 0.29 -0.33 ----- 14.6 17.8 260.8 19.9 12.0 -1.6 11.8 -1.9 11.4 -0.7 11.8 -1.6
2026-04-12T01:32:40.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:32:40.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:32:40.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.980665
2026-04-12T01:32:40.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:32:30', tmtdew=-0.02749, humidity=100.149, cloud=0.0, wind=18.0857, temperature=10.5308, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:32:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:32:40.911 [DEBUG] [Thread-180345] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:32: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-04-12T01:32:41.010 [DEBUG] [Thread-180348] [transport.py] [_log()] starting thread (client mode): 0xae534700
2026-04-12T01:32:41.010 [DEBUG] [Thread-180348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:32:41.024 [DEBUG] [Thread-180348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:32:41.024 [INFO] [Thread-180348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:32:41.032 [DEBUG] [Thread-180348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] client lang: <none>
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] server lang: <none>
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] kex follows: False
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:32:41.033 [DEBUG] [Thread-180348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:32:41.034 [DEBUG] [Thread-180348] [transport.py] [_log()] Compression: none
2026-04-12T01:32:41.034 [DEBUG] [Thread-180348] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:32:41.097 [DEBUG] [Thread-180348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:32:41.098 [DEBUG] [Thread-180348] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:32:41.099 [DEBUG] [Thread-180348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:32:41.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:32:41.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:32:41.156 [DEBUG] [Thread-180348] [transport.py] [_log()] userauth is OK
2026-04-12T01:32:41.156 [DEBUG] [Thread-180348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:32:41.156 [DEBUG] [Thread-180348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:32:41.157 [DEBUG] [Thread-180348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:32:41.157 [DEBUG] [Thread-180348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:32:41.175 [INFO] [Thread-180348] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:32:41.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:32:41.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:32:41.989 [DEBUG] [Thread-180348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:32:41.990 [DEBUG] [Thread-180348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:32:42.038 [DEBUG] [Thread-180348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:32:42.038 [DEBUG] [Thread-180348] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:32:42.047 [DEBUG] [Thread-180348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:32:42.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:32:42.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-04-12T01:32:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:32:42.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:32:42.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:32:42.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:32:42.085 [DEBUG] [Thread-180348] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:32:50.088 [DEBUG] [Thread-180350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:32:52.145 [DEBUG] [Thread-180351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:07.205 [DEBUG] [Thread-180352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:12.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:33:12.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:33:12.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:33:13.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 32, 30), -0.02749, 100.149, 0.0, 18.0857, 10.5308, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:33:13.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:32:30
2026-04-12T01:33:13.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:33:14.070 [DEBUG] [Thread-180353] [transport.py] [_log()] starting thread (client mode): 0xb0feb490
2026-04-12T01:33:14.070 [DEBUG] [Thread-180353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:33:14.089 [DEBUG] [Thread-180353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:33:14.089 [INFO] [Thread-180353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] client lang: <none>
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] server lang: <none>
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] kex follows: False
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] Compression: none
2026-04-12T01:33:14.091 [DEBUG] [Thread-180353] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:33:14.100 [DEBUG] [Thread-180353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:33:14.100 [DEBUG] [Thread-180353] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:33:14.100 [DEBUG] [Thread-180353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:33:14.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:33:14.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:33:14.102 [DEBUG] [Thread-180353] [transport.py] [_log()] userauth is OK
2026-04-12T01:33:14.102 [DEBUG] [Thread-180353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:33:14.102 [DEBUG] [Thread-180353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:33:14.102 [DEBUG] [Thread-180353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:33:14.102 [DEBUG] [Thread-180353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:33:14.119 [INFO] [Thread-180353] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:33:14.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:33:14.734 [DEBUG] [Thread-180353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:33:14.734 [DEBUG] [Thread-180353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:33:14.735 [DEBUG] [Thread-180353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:33:14.775 [DEBUG] [Thread-180353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:33:14.775 [DEBUG] [Thread-180353] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:33:14.779 [DEBUG] [Thread-180353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:33:14.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:33:14.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:33:14.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:33:14.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:33:14.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:33:14.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:33:14.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:33:14.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:33:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:33:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.981012 -999.00  +10.40  18.48     98  +10.10 1 3 1 3 1     0    0 0.29 -0.27 ----- 18.1 18.5 279.7 22.7 11.9 -1.6 11.8 -2.6 11.4 -0.9 11.8 -1.4
2026-04-12T01:33:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:33:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:33:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.981012
2026-04-12T01:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:33:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:33:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:32:30', tmtdew=-0.02749, humidity=100.149, cloud=0.0, wind=18.0857, temperature=10.5308, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:32:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:33:14.806 [DEBUG] [Thread-180353] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:33:14.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:33:14.900 [DEBUG] [Thread-180356] [transport.py] [_log()] starting thread (client mode): 0xae50b250
2026-04-12T01:33:14.900 [DEBUG] [Thread-180356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:33:14.916 [DEBUG] [Thread-180356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:33:14.916 [INFO] [Thread-180356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:33:14.923 [DEBUG] [Thread-180356] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] client lang: <none>
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] server lang: <none>
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] kex follows: False
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] Compression: none
2026-04-12T01:33:14.924 [DEBUG] [Thread-180356] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:33:14.982 [DEBUG] [Thread-180356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:33:14.983 [DEBUG] [Thread-180356] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:33:14.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:33:14.984 [DEBUG] [Thread-180356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:33:14.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:33:15.038 [DEBUG] [Thread-180356] [transport.py] [_log()] userauth is OK
2026-04-12T01:33:15.038 [DEBUG] [Thread-180356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:33:15.039 [DEBUG] [Thread-180356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:33:15.039 [DEBUG] [Thread-180356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:33:15.039 [DEBUG] [Thread-180356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:33:15.061 [INFO] [Thread-180356] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:33:15.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:33:15.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:33:15.901 [DEBUG] [Thread-180356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:33:15.901 [DEBUG] [Thread-180356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:33:15.949 [DEBUG] [Thread-180356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:33:15.949 [DEBUG] [Thread-180356] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:33:15.958 [DEBUG] [Thread-180356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:33:15.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:33:15.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:33:15.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:33:15.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:33:15.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:33:15.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:33:15.996 [DEBUG] [Thread-180356] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:33:19.014 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:19.016 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:22.243 [DEBUG] [Thread-180358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:37.303 [DEBUG] [Thread-180359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:46.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:33:46.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:33:46.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:33:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 33, 6), -0.0224, 100.116, 0.0, 17.874, 10.4479, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:33:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:33:06
2026-04-12T01:33:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:33:47.870 [DEBUG] [Thread-180360] [transport.py] [_log()] starting thread (client mode): 0xb0f6c9a0
2026-04-12T01:33:47.870 [DEBUG] [Thread-180360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:33:47.884 [DEBUG] [Thread-180360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:33:47.884 [INFO] [Thread-180360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] client lang: <none>
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] server lang: <none>
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] kex follows: False
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] Compression: none
2026-04-12T01:33:47.888 [DEBUG] [Thread-180360] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:33:47.906 [DEBUG] [Thread-180360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:33:47.907 [DEBUG] [Thread-180360] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:33:47.907 [DEBUG] [Thread-180360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:33:47.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:33:47.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:33:47.909 [DEBUG] [Thread-180360] [transport.py] [_log()] userauth is OK
2026-04-12T01:33:47.909 [DEBUG] [Thread-180360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:33:47.909 [DEBUG] [Thread-180360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:33:47.909 [DEBUG] [Thread-180360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:33:47.910 [DEBUG] [Thread-180360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:33:47.928 [INFO] [Thread-180360] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:33:47.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:33:48.521 [DEBUG] [Thread-180360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:33:48.521 [DEBUG] [Thread-180360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:33:48.521 [DEBUG] [Thread-180360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:33:48.562 [DEBUG] [Thread-180360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:33:48.562 [DEBUG] [Thread-180360] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:33:48.565 [DEBUG] [Thread-180360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:33:48.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:33:48.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:33:48.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:33:48.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:33:48.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:33:48.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:33:48.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:33:48.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:33:48.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:33:48.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.981707 -999.00  +10.40  18.80     98  +10.10 1 3 1 3 1     0    0 0.30 -0.14 ----- 14.5 18.8 278.8 21.1 11.9 -1.2 11.8 -1.9 11.4 -1.1 11.8 -0.9
2026-04-12T01:33:48.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:33:48.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:33:48.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.981707
2026-04-12T01:33:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:33:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:33:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:33:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:33:48.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:33:48.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:33:06', tmtdew=-0.0224, humidity=100.116, cloud=0.0, wind=17.874, temperature=10.4479, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:33:39.485', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:33:48.591 [DEBUG] [Thread-180360] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:33:48.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:33:48.684 [DEBUG] [Thread-180363] [transport.py] [_log()] starting thread (client mode): 0xae562bf0
2026-04-12T01:33:48.685 [DEBUG] [Thread-180363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:33:48.700 [DEBUG] [Thread-180363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:33:48.700 [INFO] [Thread-180363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:33:48.707 [DEBUG] [Thread-180363] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] client lang: <none>
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] server lang: <none>
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] kex follows: False
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:33:48.708 [DEBUG] [Thread-180363] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:33:48.709 [DEBUG] [Thread-180363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:33:48.709 [DEBUG] [Thread-180363] [transport.py] [_log()] Compression: none
2026-04-12T01:33:48.709 [DEBUG] [Thread-180363] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:33:48.768 [DEBUG] [Thread-180363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:33:48.769 [DEBUG] [Thread-180363] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:33:48.769 [DEBUG] [Thread-180363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:33:48.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:33:48.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:33:48.823 [DEBUG] [Thread-180363] [transport.py] [_log()] userauth is OK
2026-04-12T01:33:48.824 [DEBUG] [Thread-180363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:33:48.824 [DEBUG] [Thread-180363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:33:48.824 [DEBUG] [Thread-180363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:33:48.824 [DEBUG] [Thread-180363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:33:48.842 [INFO] [Thread-180363] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:33:48.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:33:48.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:33:49.725 [DEBUG] [Thread-180363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:33:49.725 [DEBUG] [Thread-180363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:33:49.776 [DEBUG] [Thread-180363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:33:49.776 [DEBUG] [Thread-180363] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:33:49.785 [DEBUG] [Thread-180363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:33:49.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:33:49.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:33:49.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-04-12T01:33:49.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:33:49.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:33:49.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:33:49.827 [DEBUG] [Thread-180363] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:33:50.154 [DEBUG] [Thread-180365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:33:52.341 [DEBUG] [Thread-180366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:07.391 [DEBUG] [Thread-180367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:19.219 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:19.220 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:19.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:34:19.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:34:19.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-04-12T01:34:21.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 33, 42), -0.05489, 100.299, 0.0, 18.8784, 10.9953, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:34:21.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:33:42
2026-04-12T01:34:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:34:21.731 [DEBUG] [Thread-180368] [transport.py] [_log()] starting thread (client mode): 0xae560490
2026-04-12T01:34:21.731 [DEBUG] [Thread-180368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:34:21.750 [DEBUG] [Thread-180368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:34:21.751 [INFO] [Thread-180368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:34:21.752 [DEBUG] [Thread-180368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] client lang: <none>
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] server lang: <none>
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] kex follows: False
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] Compression: none
2026-04-12T01:34:21.753 [DEBUG] [Thread-180368] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:34:21.762 [DEBUG] [Thread-180368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:34:21.762 [DEBUG] [Thread-180368] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:34:21.763 [DEBUG] [Thread-180368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:34:21.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:34:21.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:34:21.764 [DEBUG] [Thread-180368] [transport.py] [_log()] userauth is OK
2026-04-12T01:34:21.764 [DEBUG] [Thread-180368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:34:21.765 [DEBUG] [Thread-180368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:34:21.765 [DEBUG] [Thread-180368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:34:21.765 [DEBUG] [Thread-180368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:34:21.782 [INFO] [Thread-180368] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:34:21.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:34:22.426 [DEBUG] [Thread-180370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:22.442 [DEBUG] [Thread-180368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:34:22.443 [DEBUG] [Thread-180368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:34:22.443 [DEBUG] [Thread-180368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:34:22.484 [DEBUG] [Thread-180368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:34:22.484 [DEBUG] [Thread-180368] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:34:22.488 [DEBUG] [Thread-180368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:34:22.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:34:22.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:34:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:34:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:34:22.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:34:22.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:34:22.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:34:22.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.982054 -999.00  +10.40  18.42     98  +10.10 1 3 1 3 1     0    0 0.29 -0.09 ----- 21.5 18.4 273.8 22.9 11.9 -1.9 11.8 -2.1 11.4 -0.7 11.8 -1.6
2026-04-12T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.982054
2026-04-12T01:34:22.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:34:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:33:42', tmtdew=-0.05489, humidity=100.299, cloud=0.0, wind=18.8784, temperature=10.9953, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:34:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:34:22.515 [DEBUG] [Thread-180368] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:34:22.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:34:22.614 [DEBUG] [Thread-180372] [transport.py] [_log()] starting thread (client mode): 0xb0f6c6a0
2026-04-12T01:34:22.614 [DEBUG] [Thread-180372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:34:22.628 [DEBUG] [Thread-180372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:34:22.629 [INFO] [Thread-180372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:34:22.636 [DEBUG] [Thread-180372] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:34:22.636 [DEBUG] [Thread-180372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] client lang: <none>
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] server lang: <none>
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] kex follows: False
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] Compression: none
2026-04-12T01:34:22.637 [DEBUG] [Thread-180372] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:34:22.695 [DEBUG] [Thread-180372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:34:22.696 [DEBUG] [Thread-180372] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:34:22.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:34:22.698 [DEBUG] [Thread-180372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:34:22.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:34:22.751 [DEBUG] [Thread-180372] [transport.py] [_log()] userauth is OK
2026-04-12T01:34:22.751 [DEBUG] [Thread-180372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:34:22.752 [DEBUG] [Thread-180372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:34:22.752 [DEBUG] [Thread-180372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:34:22.752 [DEBUG] [Thread-180372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:34:22.771 [INFO] [Thread-180372] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:34:22.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:34:22.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:34:23.611 [DEBUG] [Thread-180372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:34:23.611 [DEBUG] [Thread-180372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:34:23.662 [DEBUG] [Thread-180372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:34:23.662 [DEBUG] [Thread-180372] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:34:23.674 [DEBUG] [Thread-180372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:34:23.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:34:23.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:34:23.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:34:23.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:34:23.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:34:23.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:34:23.711 [DEBUG] [Thread-180372] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:34:37.464 [DEBUG] [Thread-180374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:50.211 [DEBUG] [Thread-180375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:52.518 [DEBUG] [Thread-180376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:34:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:34:53.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:34:53.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-04-12T01:34:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 34, 17), 0.022545, 100.15, 0.0, 19.921, 10.4647, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:34:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:34:17
2026-04-12T01:34:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:34:55.549 [DEBUG] [Thread-180377] [transport.py] [_log()] starting thread (client mode): 0xb0f6e050
2026-04-12T01:34:55.549 [DEBUG] [Thread-180377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:34:55.569 [DEBUG] [Thread-180377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:34:55.569 [INFO] [Thread-180377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:34:55.572 [DEBUG] [Thread-180377] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] client lang: <none>
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] server lang: <none>
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] kex follows: False
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] Compression: none
2026-04-12T01:34:55.573 [DEBUG] [Thread-180377] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:34:55.591 [DEBUG] [Thread-180377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:34:55.592 [DEBUG] [Thread-180377] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:34:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:34:55.593 [DEBUG] [Thread-180377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:34:55.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:34:55.595 [DEBUG] [Thread-180377] [transport.py] [_log()] userauth is OK
2026-04-12T01:34:55.596 [DEBUG] [Thread-180377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:34:55.596 [DEBUG] [Thread-180377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:34:55.596 [DEBUG] [Thread-180377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:34:55.596 [DEBUG] [Thread-180377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:34:55.620 [INFO] [Thread-180377] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:34:55.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:34:56.277 [DEBUG] [Thread-180377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:34:56.277 [DEBUG] [Thread-180377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:34:56.278 [DEBUG] [Thread-180377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:34:56.318 [DEBUG] [Thread-180377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:34:56.318 [DEBUG] [Thread-180377] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:34:56.322 [DEBUG] [Thread-180377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:34:56.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:34:56.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:34:56.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:34:56.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:34:56.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:34:56.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:34:56.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:34:56.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:34:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:34:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.982401 -999.00  +10.30  19.78     98  +10.00 1 3 1 3 1     0    0 0.29 0.09 ----- 18.9 19.8 283.0 27.4 11.9 -1.8 11.7 -4.0 11.3 -1.7 11.7 -1.0
2026-04-12T01:34:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:34:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:34:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.982401
2026-04-12T01:34:56.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:34:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:34:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:34:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:34:56.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:34:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:34:17', tmtdew=0.022545, humidity=100.15, cloud=0.0, wind=19.921, temperature=10.4647, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:34:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:34:56.350 [DEBUG] [Thread-180377] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:34:56.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:34:56.439 [DEBUG] [Thread-180380] [transport.py] [_log()] starting thread (client mode): 0xb0f6e530
2026-04-12T01:34:56.439 [DEBUG] [Thread-180380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:34:56.459 [DEBUG] [Thread-180380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:34:56.459 [INFO] [Thread-180380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:34:56.466 [DEBUG] [Thread-180380] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:34:56.466 [DEBUG] [Thread-180380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:34:56.466 [DEBUG] [Thread-180380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:34:56.466 [DEBUG] [Thread-180380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:56.466 [DEBUG] [Thread-180380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:34:56.466 [DEBUG] [Thread-180380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] client lang: <none>
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] server lang: <none>
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] kex follows: False
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] Compression: none
2026-04-12T01:34:56.467 [DEBUG] [Thread-180380] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:34:56.524 [DEBUG] [Thread-180380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:34:56.525 [DEBUG] [Thread-180380] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:34:56.525 [DEBUG] [Thread-180380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:34:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:34:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:34:56.581 [DEBUG] [Thread-180380] [transport.py] [_log()] userauth is OK
2026-04-12T01:34:56.581 [DEBUG] [Thread-180380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:34:56.581 [DEBUG] [Thread-180380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:34:56.581 [DEBUG] [Thread-180380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:34:56.581 [DEBUG] [Thread-180380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:34:56.599 [INFO] [Thread-180380] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:34:56.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:34:56.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:34:57.408 [DEBUG] [Thread-180380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:34:57.409 [DEBUG] [Thread-180380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:34:57.456 [DEBUG] [Thread-180380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:34:57.456 [DEBUG] [Thread-180380] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:34:57.465 [DEBUG] [Thread-180380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:34:57.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:34:57.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:34:57.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:34:57.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:34:57.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:34:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:34:57.503 [DEBUG] [Thread-180380] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:35:07.560 [DEBUG] [Thread-180382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:35:19.425 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:35:19.426 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:35:22.621 [DEBUG] [Thread-180383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:35:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:35:27.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:35:27.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-04-12T01:35:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 34, 53), -0.05488, 100.299, 0.0, 27.5926, 10.9293, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:35:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:34:53
2026-04-12T01:35:29.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:35:29.472 [DEBUG] [Thread-180384] [transport.py] [_log()] starting thread (client mode): 0xae562860
2026-04-12T01:35:29.472 [DEBUG] [Thread-180384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:35:29.494 [DEBUG] [Thread-180384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:35:29.494 [INFO] [Thread-180384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:35:29.498 [DEBUG] [Thread-180384] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:35:29.498 [DEBUG] [Thread-180384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:35:29.498 [DEBUG] [Thread-180384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:35:29.498 [DEBUG] [Thread-180384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] client lang: <none>
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] server lang: <none>
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] kex follows: False
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:35:29.499 [DEBUG] [Thread-180384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:35:29.500 [DEBUG] [Thread-180384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:35:29.500 [DEBUG] [Thread-180384] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:35:29.500 [DEBUG] [Thread-180384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:35:29.500 [DEBUG] [Thread-180384] [transport.py] [_log()] Compression: none
2026-04-12T01:35:29.500 [DEBUG] [Thread-180384] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:35:29.518 [DEBUG] [Thread-180384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:35:29.519 [DEBUG] [Thread-180384] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:35:29.519 [DEBUG] [Thread-180384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:35:29.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:35:29.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:35:29.521 [DEBUG] [Thread-180384] [transport.py] [_log()] userauth is OK
2026-04-12T01:35:29.522 [DEBUG] [Thread-180384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:35:29.522 [DEBUG] [Thread-180384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:35:29.522 [DEBUG] [Thread-180384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:35:29.522 [DEBUG] [Thread-180384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:35:29.547 [INFO] [Thread-180384] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:35:29.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:35:30.195 [DEBUG] [Thread-180384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:35:30.195 [DEBUG] [Thread-180384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:35:30.196 [DEBUG] [Thread-180384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:35:30.236 [DEBUG] [Thread-180384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:35:30.236 [DEBUG] [Thread-180384] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:35:30.240 [DEBUG] [Thread-180384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:35:30.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:35:30.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:35:30.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:35:30.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:35:30.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:35:30.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:35:30.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:35:30.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.982748 -999.00  +10.30  20.87     98  +10.00 1 3 1 3 1     0    0 0.30 0.13 ----- 19.9 20.9 275.8 25.1 11.8 -1.7 11.7 -1.8 11.3 -1.4 11.7 -1.4
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.982748
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:35:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:34:53', tmtdew=-0.05488, humidity=100.299, cloud=0.0, wind=27.5926, temperature=10.9293, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:35:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:35:30.259 [DEBUG] [Thread-180384] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:35:30.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:35:30.341 [DEBUG] [Thread-180387] [transport.py] [_log()] starting thread (client mode): 0xb0feaf20
2026-04-12T01:35:30.341 [DEBUG] [Thread-180387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:35:30.356 [DEBUG] [Thread-180387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:35:30.356 [INFO] [Thread-180387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] client lang: <none>
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] server lang: <none>
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] kex follows: False
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:35:30.364 [DEBUG] [Thread-180387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:35:30.365 [DEBUG] [Thread-180387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:35:30.365 [DEBUG] [Thread-180387] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:35:30.365 [DEBUG] [Thread-180387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:35:30.365 [DEBUG] [Thread-180387] [transport.py] [_log()] Compression: none
2026-04-12T01:35:30.365 [DEBUG] [Thread-180387] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:35:30.423 [DEBUG] [Thread-180387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:35:30.424 [DEBUG] [Thread-180387] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:35:30.424 [DEBUG] [Thread-180387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:35:30.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:35:30.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:35:30.483 [DEBUG] [Thread-180387] [transport.py] [_log()] userauth is OK
2026-04-12T01:35:30.483 [DEBUG] [Thread-180387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:35:30.483 [DEBUG] [Thread-180387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:35:30.483 [DEBUG] [Thread-180387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:35:30.484 [DEBUG] [Thread-180387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:35:30.503 [INFO] [Thread-180387] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:35:30.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:35:30.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:35:31.340 [DEBUG] [Thread-180387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:35:31.340 [DEBUG] [Thread-180387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:35:31.389 [DEBUG] [Thread-180387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:35:31.389 [DEBUG] [Thread-180387] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:35:31.402 [DEBUG] [Thread-180387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:35:31.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:35:31.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-04-12T01:35:31.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-04-12T01:35:31.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:35:31.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:35:31.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:35:31.448 [DEBUG] [Thread-180387] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:35:37.661 [DEBUG] [Thread-180389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:35:50.280 [DEBUG] [Thread-180390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:35:52.725 [DEBUG] [Thread-180391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:01.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:36:01.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:36:01.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-04-12T01:36:02.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 35, 28), 0.027625, 100.117, 0.0, 21.1388, 10.3483, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:36:02.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:35:28
2026-04-12T01:36:03.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:36:03.266 [DEBUG] [Thread-180392] [transport.py] [_log()] starting thread (client mode): 0xae5b67a0
2026-04-12T01:36:03.267 [DEBUG] [Thread-180392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:36:03.286 [DEBUG] [Thread-180392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:36:03.286 [INFO] [Thread-180392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] client lang: <none>
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] server lang: <none>
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] kex follows: False
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] Compression: none
2026-04-12T01:36:03.290 [DEBUG] [Thread-180392] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:36:03.310 [DEBUG] [Thread-180392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:36:03.310 [DEBUG] [Thread-180392] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:36:03.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:36:03.312 [DEBUG] [Thread-180392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:36:03.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:36:03.314 [DEBUG] [Thread-180392] [transport.py] [_log()] userauth is OK
2026-04-12T01:36:03.314 [DEBUG] [Thread-180392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:36:03.314 [DEBUG] [Thread-180392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:36:03.314 [DEBUG] [Thread-180392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:36:03.314 [DEBUG] [Thread-180392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:36:03.339 [INFO] [Thread-180392] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:36:03.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:36:03.917 [DEBUG] [Thread-180392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:36:03.918 [DEBUG] [Thread-180392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:36:03.919 [DEBUG] [Thread-180392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:36:03.958 [DEBUG] [Thread-180392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:36:03.958 [DEBUG] [Thread-180392] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:36:03.962 [DEBUG] [Thread-180392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:36:03.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:36:03.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:36:03.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:36:03.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:36:03.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:36:03.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:36:03.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:36:03.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:36:03.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:36:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.983095 -999.00  +10.40  15.58     98  +10.10 1 3 1 3 1     0    0 0.30 0.17 ----- 20.9 15.6 275.8 22.5 11.8 -1.7 11.8 -1.9 11.3 -1.3 11.7 -1.3
2026-04-12T01:36:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:36:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:36:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.983095
2026-04-12T01:36:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:36:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:36:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:36:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:36:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:36:03.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:35:28', tmtdew=0.027625, humidity=100.117, cloud=0.0, wind=21.1388, temperature=10.3483, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:35:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:36:03.987 [DEBUG] [Thread-180392] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:36:04.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:36:04.081 [DEBUG] [Thread-180395] [transport.py] [_log()] starting thread (client mode): 0xae5b7eb0
2026-04-12T01:36:04.081 [DEBUG] [Thread-180395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:36:04.096 [DEBUG] [Thread-180395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:36:04.096 [INFO] [Thread-180395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] client lang: <none>
2026-04-12T01:36:04.104 [DEBUG] [Thread-180395] [transport.py] [_log()] server lang: <none>
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] kex follows: False
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] Compression: none
2026-04-12T01:36:04.105 [DEBUG] [Thread-180395] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:36:04.161 [DEBUG] [Thread-180395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:36:04.162 [DEBUG] [Thread-180395] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:36:04.163 [DEBUG] [Thread-180395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:36:04.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:36:04.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:36:04.217 [DEBUG] [Thread-180395] [transport.py] [_log()] userauth is OK
2026-04-12T01:36:04.218 [DEBUG] [Thread-180395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:36:04.218 [DEBUG] [Thread-180395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:36:04.218 [DEBUG] [Thread-180395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:36:04.218 [DEBUG] [Thread-180395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:36:04.237 [INFO] [Thread-180395] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:36:04.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:36:04.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:36:05.091 [DEBUG] [Thread-180395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:36:05.091 [DEBUG] [Thread-180395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:36:05.139 [DEBUG] [Thread-180395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:36:05.139 [DEBUG] [Thread-180395] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:36:05.149 [DEBUG] [Thread-180395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:36:05.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:36:05.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:36:05.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:36:05.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:36:05.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:36:05.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:36:05.185 [DEBUG] [Thread-180395] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:36:07.761 [DEBUG] [Thread-180397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:19.629 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:19.631 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:22.808 [DEBUG] [Thread-180398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:36:35.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:36:35.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-04-12T01:36:36.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 36, 5), 0.0326, 100.083, 0.0, 19.4278, 10.3483, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:36:36.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:36:05
2026-04-12T01:36:36.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:36:37.005 [DEBUG] [Thread-180399] [transport.py] [_log()] starting thread (client mode): 0xae5b51e0
2026-04-12T01:36:37.005 [DEBUG] [Thread-180399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:36:37.026 [DEBUG] [Thread-180399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:36:37.026 [INFO] [Thread-180399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:36:37.029 [DEBUG] [Thread-180399] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] client lang: <none>
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] server lang: <none>
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] kex follows: False
2026-04-12T01:36:37.030 [DEBUG] [Thread-180399] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:36:37.031 [DEBUG] [Thread-180399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:36:37.031 [DEBUG] [Thread-180399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:36:37.031 [DEBUG] [Thread-180399] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:36:37.031 [DEBUG] [Thread-180399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:36:37.031 [DEBUG] [Thread-180399] [transport.py] [_log()] Compression: none
2026-04-12T01:36:37.031 [DEBUG] [Thread-180399] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:36:37.052 [DEBUG] [Thread-180399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:36:37.053 [DEBUG] [Thread-180399] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:36:37.053 [DEBUG] [Thread-180399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:36:37.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:36:37.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:36:37.055 [DEBUG] [Thread-180399] [transport.py] [_log()] userauth is OK
2026-04-12T01:36:37.056 [DEBUG] [Thread-180399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:36:37.056 [DEBUG] [Thread-180399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:36:37.056 [DEBUG] [Thread-180399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:36:37.056 [DEBUG] [Thread-180399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:36:37.091 [INFO] [Thread-180399] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:36:37.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:36:37.755 [DEBUG] [Thread-180399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:36:37.755 [DEBUG] [Thread-180399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:36:37.755 [DEBUG] [Thread-180399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:36:37.796 [DEBUG] [Thread-180399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:36:37.796 [DEBUG] [Thread-180399] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:36:37.798 [DEBUG] [Thread-180399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:36:37.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:36:37.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:36:37.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:36:37.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:36:37.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:36:37.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:36:37.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:36:37.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:36:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:36:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.983443 -999.00  +10.30  19.20     98  +10.00 1 3 1 3 1     0    0 0.30 0.23 ----- 22.1 19.2 280.8 22.4 11.8 -1.4 11.7 -2.1 11.3 -1.2 11.7 -1.1
2026-04-12T01:36:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:36:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:36:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.983443
2026-04-12T01:36:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:36:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:36:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:36:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:36:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:36:37.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:36:05', tmtdew=0.0326, humidity=100.083, cloud=0.0, wind=19.4278, temperature=10.3483, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:36:09.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:36:37.822 [DEBUG] [Thread-180399] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:36:37.841 [DEBUG] [Thread-180402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:37.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:36:37.914 [DEBUG] [Thread-180403] [transport.py] [_log()] starting thread (client mode): 0xb39c5de0
2026-04-12T01:36:37.914 [DEBUG] [Thread-180403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:36:37.929 [DEBUG] [Thread-180403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:36:37.929 [INFO] [Thread-180403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:36:37.936 [DEBUG] [Thread-180403] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] client lang: <none>
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] server lang: <none>
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] kex follows: False
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:36:37.937 [DEBUG] [Thread-180403] [transport.py] [_log()] Compression: none
2026-04-12T01:36:37.938 [DEBUG] [Thread-180403] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:36:37.995 [DEBUG] [Thread-180403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:36:37.995 [DEBUG] [Thread-180403] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:36:37.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:36:37.996 [DEBUG] [Thread-180403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:36:37.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:36:38.052 [DEBUG] [Thread-180403] [transport.py] [_log()] userauth is OK
2026-04-12T01:36:38.052 [DEBUG] [Thread-180403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:36:38.052 [DEBUG] [Thread-180403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:36:38.053 [DEBUG] [Thread-180403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:36:38.053 [DEBUG] [Thread-180403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:36:38.080 [INFO] [Thread-180403] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:36:38.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:36:38.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:36:38.914 [DEBUG] [Thread-180403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:36:38.914 [DEBUG] [Thread-180403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:36:38.962 [DEBUG] [Thread-180403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:36:38.962 [DEBUG] [Thread-180403] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:36:38.971 [DEBUG] [Thread-180403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:36:38.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:36:38.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:36:38.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:36:38.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:36:38.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:36:39.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:36:39.008 [DEBUG] [Thread-180403] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:36:50.356 [DEBUG] [Thread-180405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:36:52.882 [DEBUG] [Thread-180406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:07.920 [DEBUG] [Thread-180407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:09.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:37:09.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:37:09.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-04-12T01:37:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 36, 41), -0.04489, 100.233, 0.0, 20.0426, 10.9291, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:37:10.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:36:41
2026-04-12T01:37:10.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:37:10.861 [DEBUG] [Thread-180408] [transport.py] [_log()] starting thread (client mode): 0xae562fe0
2026-04-12T01:37:10.862 [DEBUG] [Thread-180408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:37:10.881 [DEBUG] [Thread-180408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:37:10.881 [INFO] [Thread-180408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] client lang: <none>
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] server lang: <none>
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] kex follows: False
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] Compression: none
2026-04-12T01:37:10.884 [DEBUG] [Thread-180408] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:37:10.902 [DEBUG] [Thread-180408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:37:10.902 [DEBUG] [Thread-180408] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:37:10.903 [DEBUG] [Thread-180408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:37:10.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:37:10.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:37:10.905 [DEBUG] [Thread-180408] [transport.py] [_log()] userauth is OK
2026-04-12T01:37:10.905 [DEBUG] [Thread-180408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:37:10.905 [DEBUG] [Thread-180408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:37:10.905 [DEBUG] [Thread-180408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:37:10.906 [DEBUG] [Thread-180408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:37:10.924 [INFO] [Thread-180408] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:37:10.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:37:11.531 [DEBUG] [Thread-180408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:37:11.531 [DEBUG] [Thread-180408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:37:11.531 [DEBUG] [Thread-180408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:37:11.572 [DEBUG] [Thread-180408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:37:11.572 [DEBUG] [Thread-180408] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:37:11.576 [DEBUG] [Thread-180408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:37:11.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:37:11.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:37:11.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:37:11.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:37:11.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:37:11.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:37:11.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:37:11.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:37:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:37:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.983790 -999.00  +10.30  20.07     98  +10.00 1 3 1 3 1     0    0 0.30 0.20 ----- 16.1 20.1 274.2 26.3 11.8 -1.6 11.7 -1.6 11.3 -0.6 11.7 -0.6
2026-04-12T01:37:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:37:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:37:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.983790
2026-04-12T01:37:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:37:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:37:11.603 [DEBUG] [Thread-180408] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:37:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:37:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:37:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:37:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:36:41', tmtdew=-0.04489, humidity=100.233, cloud=0.0, wind=20.0426, temperature=10.9291, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:36:39.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:37:11.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:37:11.698 [DEBUG] [Thread-180411] [transport.py] [_log()] starting thread (client mode): 0xae561180
2026-04-12T01:37:11.698 [DEBUG] [Thread-180411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:37:11.715 [DEBUG] [Thread-180411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:37:11.715 [INFO] [Thread-180411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:37:11.722 [DEBUG] [Thread-180411] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] client lang: <none>
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] server lang: <none>
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] kex follows: False
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:37:11.723 [DEBUG] [Thread-180411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:37:11.724 [DEBUG] [Thread-180411] [transport.py] [_log()] Compression: none
2026-04-12T01:37:11.724 [DEBUG] [Thread-180411] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:37:11.783 [DEBUG] [Thread-180411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:37:11.783 [DEBUG] [Thread-180411] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:37:11.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:37:11.784 [DEBUG] [Thread-180411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:37:11.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:37:11.839 [DEBUG] [Thread-180411] [transport.py] [_log()] userauth is OK
2026-04-12T01:37:11.839 [DEBUG] [Thread-180411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:37:11.839 [DEBUG] [Thread-180411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:37:11.839 [DEBUG] [Thread-180411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:37:11.839 [DEBUG] [Thread-180411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:37:11.858 [INFO] [Thread-180411] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:37:11.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:37:11.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:37:12.709 [DEBUG] [Thread-180411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:37:12.709 [DEBUG] [Thread-180411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:37:12.758 [DEBUG] [Thread-180411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:37:12.758 [DEBUG] [Thread-180411] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:37:12.768 [DEBUG] [Thread-180411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:37:12.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:37:12.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-04-12T01:37:12.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-04-12T01:37:12.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:37:12.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:37:12.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:37:12.805 [DEBUG] [Thread-180411] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:37:19.837 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:19.838 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:22.960 [DEBUG] [Thread-180413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:38.011 [DEBUG] [Thread-180414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:42.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:37:42.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:37:42.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-04-12T01:37:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 37, 16), 0.020195, 100.166, 0.0, 20.2914, 10.3982, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:37:44.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:37:16
2026-04-12T01:37:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:37:44.615 [DEBUG] [Thread-180415] [transport.py] [_log()] starting thread (client mode): 0xae5b45b0
2026-04-12T01:37:44.615 [DEBUG] [Thread-180415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:37:44.636 [DEBUG] [Thread-180415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:37:44.636 [INFO] [Thread-180415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] client lang: <none>
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] server lang: <none>
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] kex follows: False
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] Compression: none
2026-04-12T01:37:44.639 [DEBUG] [Thread-180415] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:37:44.658 [DEBUG] [Thread-180415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:37:44.659 [DEBUG] [Thread-180415] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:37:44.660 [DEBUG] [Thread-180415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:37:44.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:37:44.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:37:44.700 [DEBUG] [Thread-180415] [transport.py] [_log()] userauth is OK
2026-04-12T01:37:44.700 [DEBUG] [Thread-180415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:37:44.700 [DEBUG] [Thread-180415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:37:44.700 [DEBUG] [Thread-180415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:37:44.700 [DEBUG] [Thread-180415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:37:44.719 [INFO] [Thread-180415] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:37:44.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:37:45.359 [DEBUG] [Thread-180415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:37:45.359 [DEBUG] [Thread-180415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:37:45.360 [DEBUG] [Thread-180415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:37:45.401 [DEBUG] [Thread-180415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:37:45.401 [DEBUG] [Thread-180415] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:37:45.404 [DEBUG] [Thread-180415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:37:45.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:37:45.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:37:45.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:37:45.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:37:45.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:37:45.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:37:45.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:37:45.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:37:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:37:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.984137 -999.00  +10.40  16.67     98  +10.10 1 3 1 3 1     0    0 0.30 0.26 ----- 13.8 16.7 265.2 23.1 11.8 -1.3 11.7 -1.5 11.3 -1.1 11.6 -0.8
2026-04-12T01:37:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:37:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:37:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.984137
2026-04-12T01:37:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:37:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:37:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:37:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:37:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:37:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:37:16', tmtdew=0.020195, humidity=100.166, cloud=0.0, wind=20.2914, temperature=10.3982, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:37:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:37:45.432 [DEBUG] [Thread-180415] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:37:45.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:37:45.525 [DEBUG] [Thread-180418] [transport.py] [_log()] starting thread (client mode): 0xae560e50
2026-04-12T01:37:45.525 [DEBUG] [Thread-180418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:37:45.542 [DEBUG] [Thread-180418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:37:45.543 [INFO] [Thread-180418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:37:45.553 [DEBUG] [Thread-180418] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:37:45.554 [DEBUG] [Thread-180418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:37:45.554 [DEBUG] [Thread-180418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:37:45.554 [DEBUG] [Thread-180418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:45.554 [DEBUG] [Thread-180418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:37:45.554 [DEBUG] [Thread-180418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] client lang: <none>
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] server lang: <none>
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] kex follows: False
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] Compression: none
2026-04-12T01:37:45.555 [DEBUG] [Thread-180418] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:37:45.618 [DEBUG] [Thread-180418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:37:45.618 [DEBUG] [Thread-180418] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:37:45.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:37:45.619 [DEBUG] [Thread-180418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:37:45.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:37:45.680 [DEBUG] [Thread-180418] [transport.py] [_log()] userauth is OK
2026-04-12T01:37:45.680 [DEBUG] [Thread-180418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:37:45.680 [DEBUG] [Thread-180418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:37:45.680 [DEBUG] [Thread-180418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:37:45.681 [DEBUG] [Thread-180418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:37:45.703 [INFO] [Thread-180418] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:37:45.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:37:45.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:37:46.545 [DEBUG] [Thread-180418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:37:46.546 [DEBUG] [Thread-180418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:37:46.594 [DEBUG] [Thread-180418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:37:46.594 [DEBUG] [Thread-180418] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:37:46.603 [DEBUG] [Thread-180418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:37:46.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:37:46.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-04-12T01:37:46.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-04-12T01:37:46.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:37:46.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:37:46.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:37:46.639 [DEBUG] [Thread-180418] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:37:50.412 [DEBUG] [Thread-180420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:37:53.048 [DEBUG] [Thread-180421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:08.098 [DEBUG] [Thread-180422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:16.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:38:16.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:38:16.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-04-12T01:38:17.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 37, 51), -0.04466, 100.233, 0.0, 21.2774, 10.7632, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:38:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:37:51
2026-04-12T01:38:18.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:38:18.450 [DEBUG] [Thread-180423] [transport.py] [_log()] starting thread (client mode): 0xae5b7250
2026-04-12T01:38:18.450 [DEBUG] [Thread-180423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:38:18.472 [DEBUG] [Thread-180423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:38:18.472 [INFO] [Thread-180423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:38:18.475 [DEBUG] [Thread-180423] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] client lang: <none>
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] server lang: <none>
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] kex follows: False
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:38:18.476 [DEBUG] [Thread-180423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:38:18.477 [DEBUG] [Thread-180423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:38:18.477 [DEBUG] [Thread-180423] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:38:18.477 [DEBUG] [Thread-180423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:38:18.477 [DEBUG] [Thread-180423] [transport.py] [_log()] Compression: none
2026-04-12T01:38:18.477 [DEBUG] [Thread-180423] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:38:18.495 [DEBUG] [Thread-180423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:38:18.496 [DEBUG] [Thread-180423] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:38:18.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:38:18.497 [DEBUG] [Thread-180423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:38:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:38:18.499 [DEBUG] [Thread-180423] [transport.py] [_log()] userauth is OK
2026-04-12T01:38:18.499 [DEBUG] [Thread-180423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:38:18.499 [DEBUG] [Thread-180423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:38:18.499 [DEBUG] [Thread-180423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:38:18.499 [DEBUG] [Thread-180423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:38:18.516 [INFO] [Thread-180423] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:38:18.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:38:19.161 [DEBUG] [Thread-180423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:38:19.162 [DEBUG] [Thread-180423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:38:19.162 [DEBUG] [Thread-180423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:38:19.203 [DEBUG] [Thread-180423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:38:19.203 [DEBUG] [Thread-180423] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:38:19.207 [DEBUG] [Thread-180423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:38:19.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:38:19.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:38:19.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:38:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:38:19.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:38:19.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:38:19.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:38:19.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:38:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:38:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.984831 -999.00  +10.40  19.17     98  +10.10 1 3 1 3 1     0    0 0.31 0.34 ----- 18.1 19.2 277.8 21.1 11.8 -1.2 11.7 -1.4 11.3 -0.3 11.7 -0.5
2026-04-12T01:38:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:38:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:38:19.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.984831
2026-04-12T01:38:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:38:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:38:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:38:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:38:19.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:38:19.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:37:51', tmtdew=-0.04466, humidity=100.233, cloud=0.0, wind=21.2774, temperature=10.7632, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:38:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:38:19.236 [DEBUG] [Thread-180423] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:38:19.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:38:19.340 [DEBUG] [Thread-180426] [transport.py] [_log()] starting thread (client mode): 0xb0f6f760
2026-04-12T01:38:19.341 [DEBUG] [Thread-180426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:38:19.355 [DEBUG] [Thread-180426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:38:19.355 [INFO] [Thread-180426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:38:19.363 [DEBUG] [Thread-180426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] client lang: <none>
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] server lang: <none>
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] kex follows: False
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] Compression: none
2026-04-12T01:38:19.364 [DEBUG] [Thread-180426] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:38:19.420 [DEBUG] [Thread-180426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:38:19.421 [DEBUG] [Thread-180426] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:38:19.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:38:19.422 [DEBUG] [Thread-180426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:38:19.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:38:19.476 [DEBUG] [Thread-180426] [transport.py] [_log()] userauth is OK
2026-04-12T01:38:19.476 [DEBUG] [Thread-180426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:38:19.477 [DEBUG] [Thread-180426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:38:19.477 [DEBUG] [Thread-180426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:38:19.477 [DEBUG] [Thread-180426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:38:19.496 [INFO] [Thread-180426] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:38:19.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:38:19.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:38:20.043 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:20.045 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:20.324 [DEBUG] [Thread-180426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:38:20.324 [DEBUG] [Thread-180426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:38:20.372 [DEBUG] [Thread-180426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:38:20.372 [DEBUG] [Thread-180426] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:38:20.381 [DEBUG] [Thread-180426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:38:20.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:38:20.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:38:20.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:38:20.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:38:20.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:38:20.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:38:20.419 [DEBUG] [Thread-180426] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:38:23.133 [DEBUG] [Thread-180428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:38.178 [DEBUG] [Thread-180429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:38:50.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:38: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-04-12T01:38:50.474 [DEBUG] [Thread-180430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:51.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 38, 27), 0.04008, 100.034, 0.0, 21.0852, 10.3152, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:38:51.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:38:27
2026-04-12T01:38:52.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:38:52.288 [DEBUG] [Thread-180431] [transport.py] [_log()] starting thread (client mode): 0xb0f6e770
2026-04-12T01:38:52.288 [DEBUG] [Thread-180431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:38:52.310 [DEBUG] [Thread-180431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:38:52.310 [INFO] [Thread-180431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:38:52.313 [DEBUG] [Thread-180431] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] client lang: <none>
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] server lang: <none>
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] kex follows: False
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] Compression: none
2026-04-12T01:38:52.314 [DEBUG] [Thread-180431] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:38:52.326 [DEBUG] [Thread-180431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:38:52.327 [DEBUG] [Thread-180431] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:38:52.327 [DEBUG] [Thread-180431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:38:52.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:38:52.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:38:52.329 [DEBUG] [Thread-180431] [transport.py] [_log()] userauth is OK
2026-04-12T01:38:52.329 [DEBUG] [Thread-180431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:38:52.330 [DEBUG] [Thread-180431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:38:52.330 [DEBUG] [Thread-180431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:38:52.330 [DEBUG] [Thread-180431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:38:52.348 [INFO] [Thread-180431] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:38:52.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:38:52.991 [DEBUG] [Thread-180431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:38:52.991 [DEBUG] [Thread-180431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:38:52.992 [DEBUG] [Thread-180431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:38:53.032 [DEBUG] [Thread-180431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:38:53.032 [DEBUG] [Thread-180431] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:38:53.035 [DEBUG] [Thread-180431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:38:53.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:38:53.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:38:53.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:38:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:38:53.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:38:53.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:38:53.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:38:53.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:38:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:38:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.985179 -999.00  +10.40  14.16     98  +10.10 1 3 1 3 1     0    0 0.31 0.37 ----- 15.9 14.2 279.6 19.7 11.9 -0.9 11.7 -1.4 11.3 -0.3 11.7 -0.5
2026-04-12T01:38:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:38:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:38:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.985179
2026-04-12T01:38:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:38:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:38:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:38:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:38:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:38:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:38:27', tmtdew=0.04008, humidity=100.034, cloud=0.0, wind=21.0852, temperature=10.3152, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:38:39.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:38:53.058 [DEBUG] [Thread-180431] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:38:53.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:38:53.151 [DEBUG] [Thread-180434] [transport.py] [_log()] starting thread (client mode): 0xb0f6cf70
2026-04-12T01:38:53.151 [DEBUG] [Thread-180434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:38:53.165 [DEBUG] [Thread-180434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:38:53.166 [INFO] [Thread-180434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:38:53.173 [DEBUG] [Thread-180434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] client lang: <none>
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] server lang: <none>
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] kex follows: False
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] Compression: none
2026-04-12T01:38:53.174 [DEBUG] [Thread-180434] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:38:53.217 [DEBUG] [Thread-180436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:38:53.230 [DEBUG] [Thread-180434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:38:53.230 [DEBUG] [Thread-180434] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:38:53.231 [DEBUG] [Thread-180434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:38:53.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:38:53.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:38:53.287 [DEBUG] [Thread-180434] [transport.py] [_log()] userauth is OK
2026-04-12T01:38:53.287 [DEBUG] [Thread-180434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:38:53.287 [DEBUG] [Thread-180434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:38:53.287 [DEBUG] [Thread-180434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:38:53.287 [DEBUG] [Thread-180434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:38:53.306 [INFO] [Thread-180434] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:38:53.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:38:53.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:38:54.104 [DEBUG] [Thread-180434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:38:54.104 [DEBUG] [Thread-180434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:38:54.152 [DEBUG] [Thread-180434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:38:54.152 [DEBUG] [Thread-180434] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:38:54.161 [DEBUG] [Thread-180434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:38:54.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:38:54.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-04-12T01:38:54.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-04-12T01:38:54.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:38:54.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:38:54.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:38:54.199 [DEBUG] [Thread-180434] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:39:08.281 [DEBUG] [Thread-180437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:20.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:20.251 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:23.320 [DEBUG] [Thread-180438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:39:24.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:39:24.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:39:25.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 39, 2), 0.02258, 100.15, 0.0, 19.4447, 10.3816, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:39:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:39:02
2026-04-12T01:39:25.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:39:26.112 [DEBUG] [Thread-180439] [transport.py] [_log()] starting thread (client mode): 0xae561450
2026-04-12T01:39:26.112 [DEBUG] [Thread-180439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:39:26.123 [DEBUG] [Thread-180439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:39:26.123 [INFO] [Thread-180439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] client lang: <none>
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] server lang: <none>
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] kex follows: False
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] Compression: none
2026-04-12T01:39:26.127 [DEBUG] [Thread-180439] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:39:26.143 [DEBUG] [Thread-180439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:39:26.143 [DEBUG] [Thread-180439] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:39:26.143 [DEBUG] [Thread-180439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:39:26.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:39:26.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:39:26.145 [DEBUG] [Thread-180439] [transport.py] [_log()] userauth is OK
2026-04-12T01:39:26.146 [DEBUG] [Thread-180439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:39:26.146 [DEBUG] [Thread-180439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:39:26.146 [DEBUG] [Thread-180439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:39:26.146 [DEBUG] [Thread-180439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:39:26.164 [INFO] [Thread-180439] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:39:26.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:39:26.805 [DEBUG] [Thread-180439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:39:26.805 [DEBUG] [Thread-180439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:39:26.806 [DEBUG] [Thread-180439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:39:26.846 [DEBUG] [Thread-180439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:39:26.846 [DEBUG] [Thread-180439] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:39:26.850 [DEBUG] [Thread-180439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:39:26.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:39:26.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:39:26.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:39:26.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:39:26.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:39:26.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:39:26.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:39:26.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:39:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:39:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.985526 -999.00  +10.40  13.83     98  +10.10 1 3 1 3 1     0    0 0.30 0.40 ----- 15.4 13.8 285.0 20.8 11.9 -1.1 11.8 -1.8 11.3 -1.4 11.7 -0.6
2026-04-12T01:39:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:39:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:39:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.985526
2026-04-12T01:39:26.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:39:26.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:39:26.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:39:26.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:39:26.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:39:26.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:39:02', tmtdew=0.02258, humidity=100.15, cloud=0.0, wind=19.4447, temperature=10.3816, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:39:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:39:26.876 [DEBUG] [Thread-180439] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:39:26.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:39:26.969 [DEBUG] [Thread-180442] [transport.py] [_log()] starting thread (client mode): 0xae5b4a00
2026-04-12T01:39:26.969 [DEBUG] [Thread-180442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:39:26.983 [DEBUG] [Thread-180442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:39:26.984 [INFO] [Thread-180442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] client lang: <none>
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] server lang: <none>
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] kex follows: False
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] Compression: none
2026-04-12T01:39:26.992 [DEBUG] [Thread-180442] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:39:27.050 [DEBUG] [Thread-180442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:39:27.050 [DEBUG] [Thread-180442] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:39:27.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:39:27.052 [DEBUG] [Thread-180442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:39:27.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:39:27.106 [DEBUG] [Thread-180442] [transport.py] [_log()] userauth is OK
2026-04-12T01:39:27.106 [DEBUG] [Thread-180442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:39:27.107 [DEBUG] [Thread-180442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:39:27.107 [DEBUG] [Thread-180442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:39:27.107 [DEBUG] [Thread-180442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:39:27.126 [INFO] [Thread-180442] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:39:27.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:39:27.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:39:27.960 [DEBUG] [Thread-180442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:39:27.961 [DEBUG] [Thread-180442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:39:28.010 [DEBUG] [Thread-180442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:39:28.010 [DEBUG] [Thread-180442] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:39:28.019 [DEBUG] [Thread-180442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:39:28.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:39:28.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:39:28.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:39:28.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:39:28.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:39:28.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:39:28.052 [DEBUG] [Thread-180442] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:39:38.355 [DEBUG] [Thread-180444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:50.533 [DEBUG] [Thread-180445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:53.415 [DEBUG] [Thread-180446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:39:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:39:58.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:39:58.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:39:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 39, 37), -0.0548, 100.3, 0.0, 24.7349, 10.863, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:39:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:39:37
2026-04-12T01:39:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:39:59.881 [DEBUG] [Thread-180447] [transport.py] [_log()] starting thread (client mode): 0xb0f42830
2026-04-12T01:39:59.881 [DEBUG] [Thread-180447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:39:59.892 [DEBUG] [Thread-180447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:39:59.892 [INFO] [Thread-180447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] client lang: <none>
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] server lang: <none>
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] kex follows: False
2026-04-12T01:39:59.894 [DEBUG] [Thread-180447] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:39:59.895 [DEBUG] [Thread-180447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:39:59.895 [DEBUG] [Thread-180447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:39:59.895 [DEBUG] [Thread-180447] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:39:59.895 [DEBUG] [Thread-180447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:39:59.895 [DEBUG] [Thread-180447] [transport.py] [_log()] Compression: none
2026-04-12T01:39:59.895 [DEBUG] [Thread-180447] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:39:59.907 [DEBUG] [Thread-180447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:39:59.907 [DEBUG] [Thread-180447] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:39:59.907 [DEBUG] [Thread-180447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:39:59.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:39:59.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:39:59.908 [DEBUG] [Thread-180447] [transport.py] [_log()] userauth is OK
2026-04-12T01:39:59.908 [DEBUG] [Thread-180447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:39:59.908 [DEBUG] [Thread-180447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:39:59.908 [DEBUG] [Thread-180447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:39:59.908 [DEBUG] [Thread-180447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:39:59.917 [INFO] [Thread-180447] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:39:59.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:40:00.517 [DEBUG] [Thread-180447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:40:00.517 [DEBUG] [Thread-180447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:40:00.517 [DEBUG] [Thread-180447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:40:00.557 [DEBUG] [Thread-180447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:40:00.558 [DEBUG] [Thread-180447] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:40:00.560 [DEBUG] [Thread-180447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:40:00.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:40:00.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:40:00.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:40:00.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:40:00.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:40:00.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.985873 -999.00  +10.40  16.22     98  +10.10 1 3 1 3 1     0    0 0.31 0.41 ----- 15.0 16.2 265.4 20.8 11.9 -1.1 11.7 -1.5 11.3 -0.3 11.7 -0.8
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:40:00.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.985873
2026-04-12T01:40:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:40:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:40:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:40:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:40:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:40:00.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:39:37', tmtdew=-0.0548, humidity=100.3, cloud=0.0, wind=24.7349, temperature=10.863, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:39:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:40:00.577 [DEBUG] [Thread-180447] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:40:00.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:40:00.676 [DEBUG] [Thread-180450] [transport.py] [_log()] starting thread (client mode): 0xb0f42fb0
2026-04-12T01:40:00.676 [DEBUG] [Thread-180450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:40:00.691 [DEBUG] [Thread-180450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:40:00.691 [INFO] [Thread-180450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:40:00.698 [DEBUG] [Thread-180450] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] client lang: <none>
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] server lang: <none>
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] kex follows: False
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:40:00.699 [DEBUG] [Thread-180450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:40:00.700 [DEBUG] [Thread-180450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:40:00.700 [DEBUG] [Thread-180450] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:40:00.700 [DEBUG] [Thread-180450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:40:00.700 [DEBUG] [Thread-180450] [transport.py] [_log()] Compression: none
2026-04-12T01:40:00.700 [DEBUG] [Thread-180450] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:40:00.758 [DEBUG] [Thread-180450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:40:00.758 [DEBUG] [Thread-180450] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:40:00.759 [DEBUG] [Thread-180450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:40:00.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:40:00.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:40:00.816 [DEBUG] [Thread-180450] [transport.py] [_log()] userauth is OK
2026-04-12T01:40:00.817 [DEBUG] [Thread-180450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:40:00.817 [DEBUG] [Thread-180450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:40:00.817 [DEBUG] [Thread-180450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:40:00.817 [DEBUG] [Thread-180450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:40:00.835 [INFO] [Thread-180450] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:40:00.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:40:00.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:40:01.654 [DEBUG] [Thread-180450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:40:01.654 [DEBUG] [Thread-180450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:40:01.702 [DEBUG] [Thread-180450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:40:01.702 [DEBUG] [Thread-180450] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:40:01.711 [DEBUG] [Thread-180450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:40:01.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:40:01.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-04-12T01:40:01.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:40:01.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:40:01.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:40:01.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:40:01.748 [DEBUG] [Thread-180450] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:40:08.453 [DEBUG] [Thread-180452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:40:20.453 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:40:20.454 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:40:23.504 [DEBUG] [Thread-180453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:40:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:40:31.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:40:31.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:40:33.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 40, 13), 0.02519, 100.133, 0.0, 19.0566, 10.2986, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:40:33.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:40:13
2026-04-12T01:40:33.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:40:33.555 [DEBUG] [Thread-180454] [transport.py] [_log()] starting thread (client mode): 0xb0f435b0
2026-04-12T01:40:33.555 [DEBUG] [Thread-180454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:40:33.577 [DEBUG] [Thread-180454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:40:33.577 [INFO] [Thread-180454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] client lang: <none>
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] server lang: <none>
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] kex follows: False
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:40:33.580 [DEBUG] [Thread-180454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:40:33.581 [DEBUG] [Thread-180454] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:40:33.581 [DEBUG] [Thread-180454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:40:33.581 [DEBUG] [Thread-180454] [transport.py] [_log()] Compression: none
2026-04-12T01:40:33.581 [DEBUG] [Thread-180454] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:40:33.597 [DEBUG] [Thread-180454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:40:33.597 [DEBUG] [Thread-180454] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:40:33.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:40:33.598 [DEBUG] [Thread-180454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:40:33.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:40:33.600 [DEBUG] [Thread-180454] [transport.py] [_log()] userauth is OK
2026-04-12T01:40:33.600 [DEBUG] [Thread-180454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:40:33.601 [DEBUG] [Thread-180454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:40:33.601 [DEBUG] [Thread-180454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:40:33.601 [DEBUG] [Thread-180454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:40:33.618 [INFO] [Thread-180454] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:40:33.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:40:34.262 [DEBUG] [Thread-180454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:40:34.262 [DEBUG] [Thread-180454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:40:34.262 [DEBUG] [Thread-180454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:40:34.303 [DEBUG] [Thread-180454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:40:34.303 [DEBUG] [Thread-180454] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:40:34.306 [DEBUG] [Thread-180454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:40:34.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:40:34.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:40:34.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:40:34.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:40:34.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:40:34.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:40:34.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:40:34.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:40:34.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:40:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.986220 -999.00  +10.30  22.11     98  +10.00 1 3 1 3 1     0    0 0.31 0.50 ----- 18.3 22.1 275.0 26.7 11.8 -1.1 11.7 -1.7 11.3 -0.8 11.7 -0.8
2026-04-12T01:40:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:40:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:40:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.986220
2026-04-12T01:40:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:40:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:40:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:40:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:40:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:40:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:40:13', tmtdew=0.02519, humidity=100.133, cloud=0.0, wind=19.0566, temperature=10.2986, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:40:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:40:34.330 [DEBUG] [Thread-180454] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:40:34.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:40:34.424 [DEBUG] [Thread-180457] [transport.py] [_log()] starting thread (client mode): 0xb0f41870
2026-04-12T01:40:34.424 [DEBUG] [Thread-180457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:40:34.438 [DEBUG] [Thread-180457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:40:34.438 [INFO] [Thread-180457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] client lang: <none>
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] server lang: <none>
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] kex follows: False
2026-04-12T01:40:34.446 [DEBUG] [Thread-180457] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:40:34.447 [DEBUG] [Thread-180457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:40:34.447 [DEBUG] [Thread-180457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:40:34.447 [DEBUG] [Thread-180457] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:40:34.447 [DEBUG] [Thread-180457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:40:34.447 [DEBUG] [Thread-180457] [transport.py] [_log()] Compression: none
2026-04-12T01:40:34.447 [DEBUG] [Thread-180457] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:40:34.502 [DEBUG] [Thread-180457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:40:34.503 [DEBUG] [Thread-180457] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:40:34.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:40:34.504 [DEBUG] [Thread-180457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:40:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:40:34.559 [DEBUG] [Thread-180457] [transport.py] [_log()] userauth is OK
2026-04-12T01:40:34.559 [DEBUG] [Thread-180457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:40:34.559 [DEBUG] [Thread-180457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:40:34.559 [DEBUG] [Thread-180457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:40:34.559 [DEBUG] [Thread-180457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:40:34.577 [INFO] [Thread-180457] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:40:34.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:40:34.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:40:35.445 [DEBUG] [Thread-180457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:40:35.446 [DEBUG] [Thread-180457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:40:35.493 [DEBUG] [Thread-180457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:40:35.494 [DEBUG] [Thread-180457] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:40:35.502 [DEBUG] [Thread-180457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:40:35.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:40:35.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-04-12T01:40:35.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-04-12T01:40:35.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:40:35.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:40:35.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:40:35.536 [DEBUG] [Thread-180457] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:40:38.540 [DEBUG] [Thread-180459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:40:50.610 [DEBUG] [Thread-180460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:40:53.598 [DEBUG] [Thread-180461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:05.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:41:05.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:41:05.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-04-12T01:41:06.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 40, 48), -0.05481, 100.3, 0.0, 18.1375, 10.797, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:41:06.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:40:48
2026-04-12T01:41:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:41:07.353 [DEBUG] [Thread-180462] [transport.py] [_log()] starting thread (client mode): 0xb39c6500
2026-04-12T01:41:07.353 [DEBUG] [Thread-180462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:41:07.373 [DEBUG] [Thread-180462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:41:07.373 [INFO] [Thread-180462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] client lang: <none>
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] server lang: <none>
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] kex follows: False
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:41:07.377 [DEBUG] [Thread-180462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:41:07.378 [DEBUG] [Thread-180462] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:41:07.378 [DEBUG] [Thread-180462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:41:07.378 [DEBUG] [Thread-180462] [transport.py] [_log()] Compression: none
2026-04-12T01:41:07.378 [DEBUG] [Thread-180462] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:41:07.395 [DEBUG] [Thread-180462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:41:07.395 [DEBUG] [Thread-180462] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:41:07.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:41:07.396 [DEBUG] [Thread-180462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:41:07.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:41:07.398 [DEBUG] [Thread-180462] [transport.py] [_log()] userauth is OK
2026-04-12T01:41:07.399 [DEBUG] [Thread-180462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:41:07.399 [DEBUG] [Thread-180462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:41:07.399 [DEBUG] [Thread-180462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:41:07.399 [DEBUG] [Thread-180462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:41:07.414 [INFO] [Thread-180462] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:41:07.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:41:08.023 [DEBUG] [Thread-180462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:41:08.023 [DEBUG] [Thread-180462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:41:08.024 [DEBUG] [Thread-180462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:41:08.065 [DEBUG] [Thread-180462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:41:08.065 [DEBUG] [Thread-180462] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:41:08.067 [DEBUG] [Thread-180462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:41:08.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:41:08.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:41:08.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:41:08.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:41:08.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:41:08.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:41:08.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:41:08.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:41:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:41:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.986567 -999.00  +10.30  14.37     98  +10.00 1 3 1 3 1     0    0 0.31 0.59 ----- 19.5 14.4 270.0 23.1 11.8 -1.2 11.7 -1.5 11.3 -0.7 11.7 -0.7
2026-04-12T01:41:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:41:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:41:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.986567
2026-04-12T01:41:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:41:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:41:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:41:08.088 [DEBUG] [Thread-180462] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:41:08.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:41:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:41:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:40:48', tmtdew=-0.05481, humidity=100.3, cloud=0.0, wind=18.1375, temperature=10.797, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:40:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:41:08.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:41:08.185 [DEBUG] [Thread-180465] [transport.py] [_log()] starting thread (client mode): 0xb0f426b0
2026-04-12T01:41:08.185 [DEBUG] [Thread-180465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:41:08.201 [DEBUG] [Thread-180465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:41:08.201 [INFO] [Thread-180465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] client lang: <none>
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] server lang: <none>
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] kex follows: False
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:41:08.209 [DEBUG] [Thread-180465] [transport.py] [_log()] Compression: none
2026-04-12T01:41:08.210 [DEBUG] [Thread-180465] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:41:08.267 [DEBUG] [Thread-180465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:41:08.267 [DEBUG] [Thread-180465] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:41:08.268 [DEBUG] [Thread-180465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:41:08.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:41:08.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:41:08.323 [DEBUG] [Thread-180465] [transport.py] [_log()] userauth is OK
2026-04-12T01:41:08.323 [DEBUG] [Thread-180465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:41:08.323 [DEBUG] [Thread-180465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:41:08.323 [DEBUG] [Thread-180465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:41:08.323 [DEBUG] [Thread-180465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:41:08.344 [INFO] [Thread-180465] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:41:08.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:41:08.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:41:08.635 [DEBUG] [Thread-180467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:09.172 [DEBUG] [Thread-180465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:41:09.172 [DEBUG] [Thread-180465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:41:09.220 [DEBUG] [Thread-180465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:41:09.220 [DEBUG] [Thread-180465] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:41:09.229 [DEBUG] [Thread-180465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:41:09.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:41:09.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-04-12T01:41:09.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-04-12T01:41:09.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:41:09.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:41:09.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:41:09.266 [DEBUG] [Thread-180465] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:41:20.660 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:20.661 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:23.687 [DEBUG] [Thread-180468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:38.725 [DEBUG] [Thread-180469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:41:39.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:41:39.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-04-12T01:41:40.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 41, 24), 0.0301, 100.1, 0.0, 20.6978, 10.3153, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:41:40.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:41:24
2026-04-12T01:41:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:41:41.150 [DEBUG] [Thread-180470] [transport.py] [_log()] starting thread (client mode): 0xae5b7340
2026-04-12T01:41:41.151 [DEBUG] [Thread-180470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:41:41.169 [DEBUG] [Thread-180470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:41:41.170 [INFO] [Thread-180470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] client lang: <none>
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] server lang: <none>
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] kex follows: False
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:41:41.173 [DEBUG] [Thread-180470] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:41:41.174 [DEBUG] [Thread-180470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:41:41.174 [DEBUG] [Thread-180470] [transport.py] [_log()] Compression: none
2026-04-12T01:41:41.174 [DEBUG] [Thread-180470] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:41:41.192 [DEBUG] [Thread-180470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:41:41.192 [DEBUG] [Thread-180470] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:41:41.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:41:41.193 [DEBUG] [Thread-180470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:41:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:41:41.195 [DEBUG] [Thread-180470] [transport.py] [_log()] userauth is OK
2026-04-12T01:41:41.195 [DEBUG] [Thread-180470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:41:41.196 [DEBUG] [Thread-180470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:41:41.196 [DEBUG] [Thread-180470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:41:41.196 [DEBUG] [Thread-180470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:41:41.230 [INFO] [Thread-180470] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:41:41.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:41:41.905 [DEBUG] [Thread-180470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:41:41.905 [DEBUG] [Thread-180470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:41:41.906 [DEBUG] [Thread-180470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:41:41.946 [DEBUG] [Thread-180470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:41:41.946 [DEBUG] [Thread-180470] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:41:41.950 [DEBUG] [Thread-180470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:41:41.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:41:41.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:41:41.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:41:41.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:41:41.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:41:41.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:41:41.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:41:41.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:41:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:41:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.986915 -999.00  +10.30  20.40     98  +10.00 1 3 1 3 1     0    0 0.31 0.65 ----- 23.2 20.4 279.4 24.1 11.8 -1.4 11.7 -1.4 11.3 -1.1 11.7 -0.9
2026-04-12T01:41:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:41:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:41:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.986915
2026-04-12T01:41:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:41:41.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:41:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:41:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:41:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:41:41.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:41:24', tmtdew=0.0301, humidity=100.1, cloud=0.0, wind=20.6978, temperature=10.3153, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:41:09.456', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:41:41.979 [DEBUG] [Thread-180470] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:41:42.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:41:42.072 [DEBUG] [Thread-180473] [transport.py] [_log()] starting thread (client mode): 0xae5b76a0
2026-04-12T01:41:42.072 [DEBUG] [Thread-180473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:41:42.086 [DEBUG] [Thread-180473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:41:42.086 [INFO] [Thread-180473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:42.094 [DEBUG] [Thread-180473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] client lang: <none>
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] server lang: <none>
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] kex follows: False
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] Compression: none
2026-04-12T01:41:42.095 [DEBUG] [Thread-180473] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:41:42.154 [DEBUG] [Thread-180473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:41:42.154 [DEBUG] [Thread-180473] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:41:42.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:41:42.155 [DEBUG] [Thread-180473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:41:42.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:41:42.210 [DEBUG] [Thread-180473] [transport.py] [_log()] userauth is OK
2026-04-12T01:41:42.210 [DEBUG] [Thread-180473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:41:42.210 [DEBUG] [Thread-180473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:41:42.210 [DEBUG] [Thread-180473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:41:42.210 [DEBUG] [Thread-180473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:41:42.234 [INFO] [Thread-180473] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:41:42.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:41:42.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:41:43.040 [DEBUG] [Thread-180473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:41:43.040 [DEBUG] [Thread-180473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:41:43.087 [DEBUG] [Thread-180473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:41:43.088 [DEBUG] [Thread-180473] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:41:43.096 [DEBUG] [Thread-180473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:41:43.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:41:43.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:41:43.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-04-12T01:41:43.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:41:43.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:41:43.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:41:43.129 [DEBUG] [Thread-180473] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:41:50.666 [DEBUG] [Thread-180475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:41:53.762 [DEBUG] [Thread-180476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:08.814 [DEBUG] [Thread-180477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:42:13.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:42:13.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-04-12T01:42:14.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 41, 59), 0.020095, 100.166, 0.0, 21.4027, 10.4316, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:42:14.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:41:59
2026-04-12T01:42:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:42:14.966 [DEBUG] [Thread-180478] [transport.py] [_log()] starting thread (client mode): 0xb0f436d0
2026-04-12T01:42:14.966 [DEBUG] [Thread-180478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:42:14.986 [DEBUG] [Thread-180478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:42:14.986 [INFO] [Thread-180478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:42:14.989 [DEBUG] [Thread-180478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] client lang: <none>
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] server lang: <none>
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] kex follows: False
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] Compression: none
2026-04-12T01:42:14.990 [DEBUG] [Thread-180478] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:42:15.009 [DEBUG] [Thread-180478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:42:15.010 [DEBUG] [Thread-180478] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:42:15.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:42:15.010 [DEBUG] [Thread-180478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:42:15.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:42:15.013 [DEBUG] [Thread-180478] [transport.py] [_log()] userauth is OK
2026-04-12T01:42:15.013 [DEBUG] [Thread-180478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:42:15.013 [DEBUG] [Thread-180478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:42:15.013 [DEBUG] [Thread-180478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:42:15.013 [DEBUG] [Thread-180478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:42:15.038 [INFO] [Thread-180478] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:42:15.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:42:15.668 [DEBUG] [Thread-180478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:42:15.669 [DEBUG] [Thread-180478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:42:15.669 [DEBUG] [Thread-180478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:42:15.710 [DEBUG] [Thread-180478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:42:15.710 [DEBUG] [Thread-180478] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:42:15.713 [DEBUG] [Thread-180478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:42:15.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:42:15.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:42:15.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:42:15.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:42:15.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:42:15.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:42:15.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:42:15.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:42:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:42:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.987262 -999.00  +10.30  18.01     98  +10.00 1 3 1 3 1     0    0 0.32 0.76 ----- 19.2 18.0 272.2 28.9 11.8 -1.1 11.7 -1.4 11.3 -0.9 11.6 -0.5
2026-04-12T01:42:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:42:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:42:15.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.987262
2026-04-12T01:42:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:42:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:42:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:42:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:42:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:42:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:41:59', tmtdew=0.020095, humidity=100.166, cloud=0.0, wind=21.4027, temperature=10.4316, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:41:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:42:15.736 [DEBUG] [Thread-180478] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:42:15.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:42:15.826 [DEBUG] [Thread-180481] [transport.py] [_log()] starting thread (client mode): 0xb0f42f20
2026-04-12T01:42:15.827 [DEBUG] [Thread-180481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:42:15.842 [DEBUG] [Thread-180481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:42:15.842 [INFO] [Thread-180481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:15.849 [DEBUG] [Thread-180481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] client lang: <none>
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] server lang: <none>
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] kex follows: False
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] Compression: none
2026-04-12T01:42:15.850 [DEBUG] [Thread-180481] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:42:15.908 [DEBUG] [Thread-180481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:42:15.909 [DEBUG] [Thread-180481] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:42:15.909 [DEBUG] [Thread-180481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:42:15.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:42:15.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:42:15.969 [DEBUG] [Thread-180481] [transport.py] [_log()] userauth is OK
2026-04-12T01:42:15.969 [DEBUG] [Thread-180481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:42:15.969 [DEBUG] [Thread-180481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:42:15.970 [DEBUG] [Thread-180481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:42:15.970 [DEBUG] [Thread-180481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:42:15.988 [INFO] [Thread-180481] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:42:15.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:42:15.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:42:16.883 [DEBUG] [Thread-180481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:42:16.884 [DEBUG] [Thread-180481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:42:16.932 [DEBUG] [Thread-180481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:42:16.932 [DEBUG] [Thread-180481] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:42:16.941 [DEBUG] [Thread-180481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:42:16.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:42:16.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-04-12T01:42:16.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-04-12T01:42:16.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:42:16.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:42:16.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:42:16.978 [DEBUG] [Thread-180481] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:42:20.865 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:20.866 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:23.855 [DEBUG] [Thread-180483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:38.904 [DEBUG] [Thread-180484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:46.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:42:46.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:42:46.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-04-12T01:42:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 42, 34), -0.04978, 100.267, 0.0, 20.6071, 10.7968, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:42:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:42:34
2026-04-12T01:42:48.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:42:48.796 [DEBUG] [Thread-180485] [transport.py] [_log()] starting thread (client mode): 0xb0f42c80
2026-04-12T01:42:48.796 [DEBUG] [Thread-180485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:42:48.816 [DEBUG] [Thread-180485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:42:48.816 [INFO] [Thread-180485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:42:48.817 [DEBUG] [Thread-180485] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:42:48.817 [DEBUG] [Thread-180485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] client lang: <none>
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] server lang: <none>
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] kex follows: False
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:42:48.818 [DEBUG] [Thread-180485] [transport.py] [_log()] Compression: none
2026-04-12T01:42:48.819 [DEBUG] [Thread-180485] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:42:48.828 [DEBUG] [Thread-180485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:42:48.829 [DEBUG] [Thread-180485] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:42:48.831 [DEBUG] [Thread-180485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:42:48.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:42:48.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:42:48.833 [DEBUG] [Thread-180485] [transport.py] [_log()] userauth is OK
2026-04-12T01:42:48.833 [DEBUG] [Thread-180485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:42:48.834 [DEBUG] [Thread-180485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:42:48.834 [DEBUG] [Thread-180485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:42:48.834 [DEBUG] [Thread-180485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:42:48.858 [INFO] [Thread-180485] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:42:48.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:42:49.499 [DEBUG] [Thread-180485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:42:49.499 [DEBUG] [Thread-180485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:42:49.500 [DEBUG] [Thread-180485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:42:49.540 [DEBUG] [Thread-180485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:42:49.540 [DEBUG] [Thread-180485] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:42:49.544 [DEBUG] [Thread-180485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:42:49.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:42:49.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:42:49.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:42:49.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:42:49.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:42:49.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:42:49.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:42:49.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:42:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:42:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.987609 -999.00  +10.40  12.02     98  +10.10 1 3 1 3 1     0    0 0.32 0.68 ----- 17.7 12.0 280.5 21.8 11.8 -1.0 11.7 -1.4 11.3 -0.3 11.7 -0.6
2026-04-12T01:42:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:42:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:42:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.987609
2026-04-12T01:42:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:42:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:42:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:42:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:42:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:42:49.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:42:34', tmtdew=-0.04978, humidity=100.267, cloud=0.0, wind=20.6071, temperature=10.7968, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:42:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:42:49.570 [DEBUG] [Thread-180485] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:42:49.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:42:49.660 [DEBUG] [Thread-180488] [transport.py] [_log()] starting thread (client mode): 0xb0f42fb0
2026-04-12T01:42:49.660 [DEBUG] [Thread-180488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:42:49.675 [DEBUG] [Thread-180488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:42:49.675 [INFO] [Thread-180488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:42:49.682 [DEBUG] [Thread-180488] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] client lang: <none>
2026-04-12T01:42:49.683 [DEBUG] [Thread-180488] [transport.py] [_log()] server lang: <none>
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] kex follows: False
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] Compression: none
2026-04-12T01:42:49.684 [DEBUG] [Thread-180488] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:42:49.740 [DEBUG] [Thread-180488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:42:49.741 [DEBUG] [Thread-180488] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:42:49.742 [DEBUG] [Thread-180488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:42:49.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:42:49.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:42:49.796 [DEBUG] [Thread-180488] [transport.py] [_log()] userauth is OK
2026-04-12T01:42:49.796 [DEBUG] [Thread-180488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:42:49.797 [DEBUG] [Thread-180488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:42:49.797 [DEBUG] [Thread-180488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:42:49.797 [DEBUG] [Thread-180488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:42:49.815 [INFO] [Thread-180488] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:42:49.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:42:49.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:42:50.628 [DEBUG] [Thread-180488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:42:50.628 [DEBUG] [Thread-180488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:42:50.676 [DEBUG] [Thread-180488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:42:50.676 [DEBUG] [Thread-180488] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:42:50.685 [DEBUG] [Thread-180488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:42:50.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:42:50.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:42:50.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-04-12T01:42:50.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:42:50.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:42:50.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:42:50.717 [DEBUG] [Thread-180488] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:42:50.734 [DEBUG] [Thread-180490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:42:53.941 [DEBUG] [Thread-180491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:08.993 [DEBUG] [Thread-180492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:20.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:43:20.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:43:20.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-04-12T01:43:21.071 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:21.073 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 43, 10), 0.022575, 100.15, 0.0, 18.562, 10.3986, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:43:21.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:43:10
2026-04-12T01:43:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:43:22.531 [DEBUG] [Thread-180493] [transport.py] [_log()] starting thread (client mode): 0xb0fe9210
2026-04-12T01:43:22.532 [DEBUG] [Thread-180493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:43:22.554 [DEBUG] [Thread-180493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:43:22.554 [INFO] [Thread-180493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:43:22.558 [DEBUG] [Thread-180493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] client lang: <none>
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] server lang: <none>
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] kex follows: False
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:43:22.559 [DEBUG] [Thread-180493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:43:22.560 [DEBUG] [Thread-180493] [transport.py] [_log()] Compression: none
2026-04-12T01:43:22.560 [DEBUG] [Thread-180493] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:43:22.580 [DEBUG] [Thread-180493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:43:22.581 [DEBUG] [Thread-180493] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:43:22.582 [DEBUG] [Thread-180493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:43:22.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:43:22.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:43:22.583 [DEBUG] [Thread-180493] [transport.py] [_log()] userauth is OK
2026-04-12T01:43:22.584 [DEBUG] [Thread-180493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:43:22.584 [DEBUG] [Thread-180493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:43:22.584 [DEBUG] [Thread-180493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:43:22.584 [DEBUG] [Thread-180493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:43:22.620 [INFO] [Thread-180493] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:43:22.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:43:23.265 [DEBUG] [Thread-180493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:43:23.265 [DEBUG] [Thread-180493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:43:23.265 [DEBUG] [Thread-180493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:43:23.306 [DEBUG] [Thread-180493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:43:23.306 [DEBUG] [Thread-180493] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:43:23.310 [DEBUG] [Thread-180493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:43:23.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:43:23.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:43:23.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:43:23.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:43:23.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:43:23.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:43:23.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:43:23.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:43:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:43:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.988304 -999.00  +10.30  16.64     98  +10.00 1 3 1 3 1     0    0 0.33 0.89 ----- 18.6 16.6 278.4 24.2 11.8 -1.1 11.7 -1.4 11.3 -1.4 11.6 -0.7
2026-04-12T01:43:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:43:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:43:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.988304
2026-04-12T01:43:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:43:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:43:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:43:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:43:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:43:23.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:43:10', tmtdew=0.022575, humidity=100.15, cloud=0.0, wind=18.562, temperature=10.3986, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:43:09.466', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:43:23.335 [DEBUG] [Thread-180493] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:43:23.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:43:23.425 [DEBUG] [Thread-180496] [transport.py] [_log()] starting thread (client mode): 0xb0f6c280
2026-04-12T01:43:23.425 [DEBUG] [Thread-180496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:43:23.439 [DEBUG] [Thread-180496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:43:23.440 [INFO] [Thread-180496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:43:23.447 [DEBUG] [Thread-180496] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:43:23.447 [DEBUG] [Thread-180496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:43:23.447 [DEBUG] [Thread-180496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:43:23.447 [DEBUG] [Thread-180496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:43:23.447 [DEBUG] [Thread-180496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] client lang: <none>
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] server lang: <none>
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] kex follows: False
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:43:23.448 [DEBUG] [Thread-180496] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:43:23.449 [DEBUG] [Thread-180496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:43:23.449 [DEBUG] [Thread-180496] [transport.py] [_log()] Compression: none
2026-04-12T01:43:23.449 [DEBUG] [Thread-180496] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:43:23.508 [DEBUG] [Thread-180496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:43:23.508 [DEBUG] [Thread-180496] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:43:23.509 [DEBUG] [Thread-180496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:43:23.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:43:23.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:43:23.567 [DEBUG] [Thread-180496] [transport.py] [_log()] userauth is OK
2026-04-12T01:43:23.568 [DEBUG] [Thread-180496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:43:23.568 [DEBUG] [Thread-180496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:43:23.568 [DEBUG] [Thread-180496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:43:23.568 [DEBUG] [Thread-180496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:43:23.587 [INFO] [Thread-180496] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:43:23.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:43:23.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:43:24.030 [DEBUG] [Thread-180498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:24.471 [DEBUG] [Thread-180496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:43:24.472 [DEBUG] [Thread-180496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:43:24.519 [DEBUG] [Thread-180496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:43:24.519 [DEBUG] [Thread-180496] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:43:24.528 [DEBUG] [Thread-180496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:43:24.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:43:24.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-04-12T01:43:24.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:43:24.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:43:24.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:43:24.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:43:24.565 [DEBUG] [Thread-180496] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:43:39.090 [DEBUG] [Thread-180499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:50.791 [DEBUG] [Thread-180500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:54.129 [DEBUG] [Thread-180501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:43:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:43:54.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:43:54.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:43:55.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 43, 45), -0.03987, 100.201, 0.0, 21.9478, 10.6979, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:43:55.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:43:45
2026-04-12T01:43:56.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:43:56.350 [DEBUG] [Thread-180502] [transport.py] [_log()] starting thread (client mode): 0xae5b56c0
2026-04-12T01:43:56.350 [DEBUG] [Thread-180502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:43:56.370 [DEBUG] [Thread-180502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:43:56.370 [INFO] [Thread-180502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] client lang: <none>
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] server lang: <none>
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] kex follows: False
2026-04-12T01:43:56.374 [DEBUG] [Thread-180502] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:43:56.375 [DEBUG] [Thread-180502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:43:56.375 [DEBUG] [Thread-180502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:43:56.375 [DEBUG] [Thread-180502] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:43:56.375 [DEBUG] [Thread-180502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:43:56.375 [DEBUG] [Thread-180502] [transport.py] [_log()] Compression: none
2026-04-12T01:43:56.375 [DEBUG] [Thread-180502] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:43:56.392 [DEBUG] [Thread-180502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:43:56.393 [DEBUG] [Thread-180502] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:43:56.402 [DEBUG] [Thread-180502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:43:56.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:43:56.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:43:56.405 [DEBUG] [Thread-180502] [transport.py] [_log()] userauth is OK
2026-04-12T01:43:56.405 [DEBUG] [Thread-180502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:43:56.405 [DEBUG] [Thread-180502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:43:56.405 [DEBUG] [Thread-180502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:43:56.405 [DEBUG] [Thread-180502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:43:56.429 [INFO] [Thread-180502] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:43:56.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:43:57.055 [DEBUG] [Thread-180502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:43:57.055 [DEBUG] [Thread-180502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:43:57.056 [DEBUG] [Thread-180502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:43:57.096 [DEBUG] [Thread-180502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:43:57.097 [DEBUG] [Thread-180502] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:43:57.100 [DEBUG] [Thread-180502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:43:57.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:43:57.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:43:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:43:57.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:43:57.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:43:57.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:43:57.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:43:57.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:43:57.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:43:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.988651 -999.00  +10.30  19.09     98  +10.00 1 3 1 3 1     0    0 0.32 0.95 ----- 18.1 19.1 282.2 24.0 11.8 -1.1 11.7 -1.5 11.2 -1.8 11.6 -0.6
2026-04-12T01:43:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:43:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:43:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.988651
2026-04-12T01:43:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:43:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:43:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:43:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:43:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:43:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:43:45', tmtdew=-0.03987, humidity=100.201, cloud=0.0, wind=21.9478, temperature=10.6979, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:43:39.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:43:57.130 [DEBUG] [Thread-180502] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:43:57.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:44:09.166 [DEBUG] [Thread-180505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:44:21.280 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:44:21.281 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:44:24.219 [DEBUG] [Thread-180506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:44:39.258 [DEBUG] [Thread-180507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:44:50.852 [DEBUG] [Thread-180508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:44:54.293 [DEBUG] [Thread-180509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:09.327 [DEBUG] [Thread-180510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:21.487 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:21.488 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:24.367 [DEBUG] [Thread-180511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:39.402 [DEBUG] [Thread-180512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:50.920 [DEBUG] [Thread-180513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:45:54.440 [DEBUG] [Thread-180514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:09.476 [DEBUG] [Thread-180515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:11.199 [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-04-12T01:46:21.692 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:21.694 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:24.514 [DEBUG] [Thread-180516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:39.551 [DEBUG] [Thread-180517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:46:41.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:46:41.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-04-12T01:46:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 46, 7), 0.027555, 100.117, 0.0, 19.2859, 10.3821, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:46:42.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:46:07
2026-04-12T01:46:42.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:46:43.130 [DEBUG] [Thread-180518] [transport.py] [_log()] starting thread (client mode): 0xae5b74f0
2026-04-12T01:46:43.130 [DEBUG] [Thread-180518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:46:43.145 [DEBUG] [Thread-180518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:46:43.145 [INFO] [Thread-180518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:46:43.148 [DEBUG] [Thread-180518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] client lang: <none>
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] server lang: <none>
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] kex follows: False
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] Compression: none
2026-04-12T01:46:43.149 [DEBUG] [Thread-180518] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:46:43.167 [DEBUG] [Thread-180518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:46:43.168 [DEBUG] [Thread-180518] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:46:43.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:46:43.169 [DEBUG] [Thread-180518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:46:43.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:46:43.171 [DEBUG] [Thread-180518] [transport.py] [_log()] userauth is OK
2026-04-12T01:46:43.171 [DEBUG] [Thread-180518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:46:43.171 [DEBUG] [Thread-180518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:46:43.171 [DEBUG] [Thread-180518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:46:43.171 [DEBUG] [Thread-180518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:46:43.196 [INFO] [Thread-180518] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:46:43.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:46:43.797 [DEBUG] [Thread-180518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:46:43.797 [DEBUG] [Thread-180518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:46:43.798 [DEBUG] [Thread-180518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:46:43.838 [DEBUG] [Thread-180518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:46:43.838 [DEBUG] [Thread-180518] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:46:43.842 [DEBUG] [Thread-180518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:46:43.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:46:43.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:46:43.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:46:43.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:46:43.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:46:43.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:46:43.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:46:43.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:46:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:46:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.990387 -999.00  +10.30  16.86     98  +10.00 1 3 1 3 1     0    0 0.32 0.84 ----- 16.6 16.9 276.4 20.0 11.8 -1.5 11.6 -1.5 11.2 -1.0 11.6 -0.8
2026-04-12T01:46:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:46:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:46:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.990387
2026-04-12T01:46:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:46:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:46:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:46:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:46:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:46:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:46:07', tmtdew=0.027555, humidity=100.117, cloud=0.0, wind=19.2859, temperature=10.3821, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:46:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:46:43.872 [DEBUG] [Thread-180518] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:46:43.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:46:43.966 [DEBUG] [Thread-180521] [transport.py] [_log()] starting thread (client mode): 0xae5b4910
2026-04-12T01:46:43.966 [DEBUG] [Thread-180521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:46:43.980 [DEBUG] [Thread-180521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:46:43.981 [INFO] [Thread-180521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:46:43.988 [DEBUG] [Thread-180521] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:46:43.988 [DEBUG] [Thread-180521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:46:43.988 [DEBUG] [Thread-180521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:46:43.988 [DEBUG] [Thread-180521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] client lang: <none>
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] server lang: <none>
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] kex follows: False
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] Compression: none
2026-04-12T01:46:43.989 [DEBUG] [Thread-180521] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:46:44.047 [DEBUG] [Thread-180521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:46:44.048 [DEBUG] [Thread-180521] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:46:44.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:46:44.049 [DEBUG] [Thread-180521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:46:44.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:46:44.103 [DEBUG] [Thread-180521] [transport.py] [_log()] userauth is OK
2026-04-12T01:46:44.103 [DEBUG] [Thread-180521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:46:44.103 [DEBUG] [Thread-180521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:46:44.103 [DEBUG] [Thread-180521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:46:44.103 [DEBUG] [Thread-180521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:46:44.122 [INFO] [Thread-180521] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:46:44.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:46:44.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:46:44.953 [DEBUG] [Thread-180521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:46:44.954 [DEBUG] [Thread-180521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:46:45.002 [DEBUG] [Thread-180521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:46:45.002 [DEBUG] [Thread-180521] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:46:45.012 [DEBUG] [Thread-180521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:46:45.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:46:45.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:46:45.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:46:45.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:46:45.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:46:45.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:46:45.048 [DEBUG] [Thread-180521] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:46:50.984 [DEBUG] [Thread-180523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:46:54.587 [DEBUG] [Thread-180524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:09.638 [DEBUG] [Thread-180525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:15.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:47:15.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:47:15.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:47:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 46, 43), -0.04991, 100.267, 0.0, 19.2665, 10.7973, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:47:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:46:43
2026-04-12T01:47:16.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:47:16.876 [DEBUG] [Thread-180526] [transport.py] [_log()] starting thread (client mode): 0xae5a7c10
2026-04-12T01:47:16.876 [DEBUG] [Thread-180526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:47:16.897 [DEBUG] [Thread-180526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:47:16.897 [INFO] [Thread-180526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] client lang: <none>
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] server lang: <none>
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] kex follows: False
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] Compression: none
2026-04-12T01:47:16.900 [DEBUG] [Thread-180526] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:47:16.919 [DEBUG] [Thread-180526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:47:16.920 [DEBUG] [Thread-180526] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:47:16.921 [DEBUG] [Thread-180526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:47:16.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:47:16.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:47:16.923 [DEBUG] [Thread-180526] [transport.py] [_log()] userauth is OK
2026-04-12T01:47:16.923 [DEBUG] [Thread-180526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:47:16.924 [DEBUG] [Thread-180526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:47:16.924 [DEBUG] [Thread-180526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:47:16.924 [DEBUG] [Thread-180526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:47:16.947 [INFO] [Thread-180526] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:47:16.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:47:17.517 [DEBUG] [Thread-180526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:47:17.517 [DEBUG] [Thread-180526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:47:17.518 [DEBUG] [Thread-180526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:47:17.558 [DEBUG] [Thread-180526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:47:17.558 [DEBUG] [Thread-180526] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:47:17.562 [DEBUG] [Thread-180526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:47:17.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:47:17.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:47:17.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:47:17.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:47:17.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:47:17.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:47:17.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:47:17.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:47:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:47:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.990734 -999.00  +10.30  14.31     98  +10.00 1 3 1 3 1     0    0 0.33 0.83 ----- 18.6 14.3 281.8 24.2 11.8 -1.2 11.6 -1.3 11.2 -0.8 11.6 -0.6
2026-04-12T01:47:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:47:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:47:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.990734
2026-04-12T01:47:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:47:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:47:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:47:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:47:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:47:17.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:46:43', tmtdew=-0.04991, humidity=100.267, cloud=0.0, wind=19.2665, temperature=10.7973, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:46:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:47:17.587 [DEBUG] [Thread-180526] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:47:17.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:47:17.678 [DEBUG] [Thread-180529] [transport.py] [_log()] starting thread (client mode): 0xb0f41600
2026-04-12T01:47:17.678 [DEBUG] [Thread-180529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:47:17.692 [DEBUG] [Thread-180529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:47:17.692 [INFO] [Thread-180529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:47:17.699 [DEBUG] [Thread-180529] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:47:17.699 [DEBUG] [Thread-180529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:47:17.699 [DEBUG] [Thread-180529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] client lang: <none>
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] server lang: <none>
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] kex follows: False
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] Compression: none
2026-04-12T01:47:17.700 [DEBUG] [Thread-180529] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:47:17.757 [DEBUG] [Thread-180529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:47:17.758 [DEBUG] [Thread-180529] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:47:17.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:47:17.759 [DEBUG] [Thread-180529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:47:17.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:47:17.819 [DEBUG] [Thread-180529] [transport.py] [_log()] userauth is OK
2026-04-12T01:47:17.819 [DEBUG] [Thread-180529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:47:17.820 [DEBUG] [Thread-180529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:47:17.820 [DEBUG] [Thread-180529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:47:17.820 [DEBUG] [Thread-180529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:47:17.841 [INFO] [Thread-180529] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:47:17.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:47:17.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:47:18.657 [DEBUG] [Thread-180529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:47:18.657 [DEBUG] [Thread-180529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:47:18.705 [DEBUG] [Thread-180529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:47:18.705 [DEBUG] [Thread-180529] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:47:18.715 [DEBUG] [Thread-180529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:47:18.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:47:18.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-04-12T01:47:18.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-04-12T01:47:18.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:47:18.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:47:18.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:47:18.750 [DEBUG] [Thread-180529] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:47:21.898 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:21.899 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:24.675 [DEBUG] [Thread-180531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:39.737 [DEBUG] [Thread-180532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:47:48.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:47:48.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-04-12T01:47:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 47, 18), 0.022605, 100.15, 0.0, 18.0864, 10.3155, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:47:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:47:18
2026-04-12T01:47:50.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:47:50.568 [DEBUG] [Thread-180533] [transport.py] [_log()] starting thread (client mode): 0xb0f41c30
2026-04-12T01:47:50.568 [DEBUG] [Thread-180533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:47:50.588 [DEBUG] [Thread-180533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:47:50.589 [INFO] [Thread-180533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] client lang: <none>
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] server lang: <none>
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] kex follows: False
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:47:50.592 [DEBUG] [Thread-180533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:47:50.593 [DEBUG] [Thread-180533] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:47:50.593 [DEBUG] [Thread-180533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:47:50.593 [DEBUG] [Thread-180533] [transport.py] [_log()] Compression: none
2026-04-12T01:47:50.593 [DEBUG] [Thread-180533] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:47:50.610 [DEBUG] [Thread-180533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:47:50.610 [DEBUG] [Thread-180533] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:47:50.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:47:50.611 [DEBUG] [Thread-180533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:47:50.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:47:50.613 [DEBUG] [Thread-180533] [transport.py] [_log()] userauth is OK
2026-04-12T01:47:50.613 [DEBUG] [Thread-180533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:47:50.614 [DEBUG] [Thread-180533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:47:50.614 [DEBUG] [Thread-180533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:47:50.614 [DEBUG] [Thread-180533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:47:50.637 [INFO] [Thread-180533] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:47:50.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:47:51.041 [DEBUG] [Thread-180535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:47:51.247 [DEBUG] [Thread-180533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:47:51.247 [DEBUG] [Thread-180533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:47:51.248 [DEBUG] [Thread-180533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:47:51.288 [DEBUG] [Thread-180533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:47:51.288 [DEBUG] [Thread-180533] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:47:51.291 [DEBUG] [Thread-180533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:47:51.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:47:51.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:47:51.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:47:51.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:47:51.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:47:51.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:47:51.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:47:51.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:47:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:47:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.991081 -999.00  +10.30  20.21     98  +10.00 1 3 1 3 1     0    0 0.32 0.80 ----- 19.2 20.2 289.2 23.8 11.8 -1.2 11.6 -1.6 11.2 -1.7 11.5 -0.5
2026-04-12T01:47:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:47:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:47:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.991081
2026-04-12T01:47:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:47:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:47:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:47:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:47:51.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:47:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:47:18', tmtdew=0.022605, humidity=100.15, cloud=0.0, wind=18.0864, temperature=10.3155, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:47:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:47:51.318 [DEBUG] [Thread-180533] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:47:51.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:47:51.410 [DEBUG] [Thread-180537] [transport.py] [_log()] starting thread (client mode): 0xa7956860
2026-04-12T01:47:51.410 [DEBUG] [Thread-180537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:47:51.425 [DEBUG] [Thread-180537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:47:51.425 [INFO] [Thread-180537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:47:51.432 [DEBUG] [Thread-180537] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] client lang: <none>
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] server lang: <none>
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] kex follows: False
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] Compression: none
2026-04-12T01:47:51.433 [DEBUG] [Thread-180537] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:47:51.493 [DEBUG] [Thread-180537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:47:51.494 [DEBUG] [Thread-180537] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:47:51.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:47:51.495 [DEBUG] [Thread-180537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:47:51.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:47:51.550 [DEBUG] [Thread-180537] [transport.py] [_log()] userauth is OK
2026-04-12T01:47:51.550 [DEBUG] [Thread-180537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:47:51.550 [DEBUG] [Thread-180537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:47:51.550 [DEBUG] [Thread-180537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:47:51.550 [DEBUG] [Thread-180537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:47:51.571 [INFO] [Thread-180537] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:47:51.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:47:51.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:47:52.397 [DEBUG] [Thread-180537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:47:52.397 [DEBUG] [Thread-180537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:47:52.445 [DEBUG] [Thread-180537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:47:52.445 [DEBUG] [Thread-180537] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:47:52.455 [DEBUG] [Thread-180537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:47:52.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:47:52.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-04-12T01:47:52.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:47:52.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:47:52.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:47:52.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:47:52.492 [DEBUG] [Thread-180537] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:47:54.774 [DEBUG] [Thread-180539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:09.829 [DEBUG] [Thread-180540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:22.103 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:22.104 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:48:22.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:48:22.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-04-12T01:48:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 47, 53), -0.06488, 100.367, 0.0, 23.0062, 10.7976, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:48:23.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:47:53
2026-04-12T01:48:24.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:48:24.314 [DEBUG] [Thread-180541] [transport.py] [_log()] starting thread (client mode): 0xb0f42710
2026-04-12T01:48:24.314 [DEBUG] [Thread-180541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:48:24.329 [DEBUG] [Thread-180541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:48:24.329 [INFO] [Thread-180541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:48:24.332 [DEBUG] [Thread-180541] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] client lang: <none>
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] server lang: <none>
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] kex follows: False
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:48:24.333 [DEBUG] [Thread-180541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:48:24.334 [DEBUG] [Thread-180541] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:48:24.334 [DEBUG] [Thread-180541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:48:24.334 [DEBUG] [Thread-180541] [transport.py] [_log()] Compression: none
2026-04-12T01:48:24.334 [DEBUG] [Thread-180541] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:48:24.349 [DEBUG] [Thread-180541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:48:24.350 [DEBUG] [Thread-180541] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:48:24.350 [DEBUG] [Thread-180541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:48:24.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:48:24.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:48:24.353 [DEBUG] [Thread-180541] [transport.py] [_log()] userauth is OK
2026-04-12T01:48:24.353 [DEBUG] [Thread-180541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:48:24.353 [DEBUG] [Thread-180541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:48:24.354 [DEBUG] [Thread-180541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:48:24.354 [DEBUG] [Thread-180541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:48:24.378 [INFO] [Thread-180541] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:48:24.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:48:24.866 [DEBUG] [Thread-180543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:24.973 [DEBUG] [Thread-180541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:48:24.973 [DEBUG] [Thread-180541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:48:24.973 [DEBUG] [Thread-180541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:48:25.014 [DEBUG] [Thread-180541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:48:25.014 [DEBUG] [Thread-180541] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:48:25.018 [DEBUG] [Thread-180541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:48:25.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:48:25.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:48:25.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:48:25.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:48:25.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:48:25.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:48:25.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:48:25.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:48:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:48:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.991776 -999.00  +10.20  17.82     98  +10.00 1 3 1 3 1     0    0 0.31 0.35 ----- 12.5 17.8 271.8 20.7 11.7 -1.0 11.6 -1.3 11.2 -1.2 11.6 -0.5
2026-04-12T01:48:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:48:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:48:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.991776
2026-04-12T01:48:25.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:48:25.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:48:25.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:48:25.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:48:25.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:48:25.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:47:53', tmtdew=-0.06488, humidity=100.367, cloud=0.0, wind=23.0062, temperature=10.7976, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:48:09.446', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:48:25.045 [DEBUG] [Thread-180541] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:48:25.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:48:25.148 [DEBUG] [Thread-180545] [transport.py] [_log()] starting thread (client mode): 0xae5b4040
2026-04-12T01:48:25.148 [DEBUG] [Thread-180545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:48:25.162 [DEBUG] [Thread-180545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:48:25.162 [INFO] [Thread-180545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:48:25.170 [DEBUG] [Thread-180545] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:48:25.170 [DEBUG] [Thread-180545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:48:25.170 [DEBUG] [Thread-180545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:48:25.170 [DEBUG] [Thread-180545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] client lang: <none>
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] server lang: <none>
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] kex follows: False
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:48:25.171 [DEBUG] [Thread-180545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:48:25.172 [DEBUG] [Thread-180545] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:48:25.172 [DEBUG] [Thread-180545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:48:25.172 [DEBUG] [Thread-180545] [transport.py] [_log()] Compression: none
2026-04-12T01:48:25.172 [DEBUG] [Thread-180545] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:48:25.230 [DEBUG] [Thread-180545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:48:25.231 [DEBUG] [Thread-180545] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:48:25.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:48:25.232 [DEBUG] [Thread-180545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:48:25.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:48:25.289 [DEBUG] [Thread-180545] [transport.py] [_log()] userauth is OK
2026-04-12T01:48:25.289 [DEBUG] [Thread-180545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:48:25.290 [DEBUG] [Thread-180545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:48:25.290 [DEBUG] [Thread-180545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:48:25.290 [DEBUG] [Thread-180545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:48:25.308 [INFO] [Thread-180545] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:48:25.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:48:25.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:48:26.136 [DEBUG] [Thread-180545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:48:26.136 [DEBUG] [Thread-180545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:48:26.184 [DEBUG] [Thread-180545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:48:26.185 [DEBUG] [Thread-180545] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:48:26.194 [DEBUG] [Thread-180545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:48:26.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:48:26.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:48:26.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:48:26.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:48:26.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:48:26.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:48:26.232 [DEBUG] [Thread-180545] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:48:39.904 [DEBUG] [Thread-180547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:51.098 [DEBUG] [Thread-180548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:54.960 [DEBUG] [Thread-180549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:48:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:48:56.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:48:56.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-04-12T01:48:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 48, 29), -0.02739, 100.15, 0.0, 19.6564, 10.2655, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:48:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:48:29
2026-04-12T01:48:57.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:48:58.075 [DEBUG] [Thread-180550] [transport.py] [_log()] starting thread (client mode): 0xae5b6c50
2026-04-12T01:48:58.075 [DEBUG] [Thread-180550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:48:58.096 [DEBUG] [Thread-180550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:48:58.096 [INFO] [Thread-180550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:48:58.099 [DEBUG] [Thread-180550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] client lang: <none>
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] server lang: <none>
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] kex follows: False
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] Compression: none
2026-04-12T01:48:58.100 [DEBUG] [Thread-180550] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:48:58.119 [DEBUG] [Thread-180550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:48:58.120 [DEBUG] [Thread-180550] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:48:58.121 [DEBUG] [Thread-180550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:48:58.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:48:58.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:48:58.160 [DEBUG] [Thread-180550] [transport.py] [_log()] userauth is OK
2026-04-12T01:48:58.161 [DEBUG] [Thread-180550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:48:58.161 [DEBUG] [Thread-180550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:48:58.161 [DEBUG] [Thread-180550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:48:58.161 [DEBUG] [Thread-180550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:48:58.181 [INFO] [Thread-180550] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:48:58.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:48:58.835 [DEBUG] [Thread-180550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:48:58.835 [DEBUG] [Thread-180550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:48:58.836 [DEBUG] [Thread-180550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:48:58.876 [DEBUG] [Thread-180550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:48:58.877 [DEBUG] [Thread-180550] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:48:58.880 [DEBUG] [Thread-180550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:48:58.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:48:58.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:48:58.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:48:58.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:48:58.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:48:58.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:48:58.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:48:58.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:48:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:48:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.992123 -999.00  +10.30  19.36     98  +10.00 1 3 1 3 1     0    0 0.30 0.40 ----- 14.7 19.4 281.6 20.3 11.8 -1.3 11.6 -1.3 11.2 -0.5 11.6 -0.7
2026-04-12T01:48:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.992123
2026-04-12T01:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:48:29', tmtdew=-0.02739, humidity=100.15, cloud=0.0, wind=19.6564, temperature=10.2655, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:48:39.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:48:58.907 [DEBUG] [Thread-180550] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:48:58.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:48:59.001 [DEBUG] [Thread-180553] [transport.py] [_log()] starting thread (client mode): 0xb0f42530
2026-04-12T01:48:59.001 [DEBUG] [Thread-180553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:48:59.016 [DEBUG] [Thread-180553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:48:59.016 [INFO] [Thread-180553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:59.024 [DEBUG] [Thread-180553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] client lang: <none>
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] server lang: <none>
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] kex follows: False
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] Compression: none
2026-04-12T01:48:59.025 [DEBUG] [Thread-180553] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:48:59.084 [DEBUG] [Thread-180553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:48:59.085 [DEBUG] [Thread-180553] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:48:59.086 [DEBUG] [Thread-180553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:48:59.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:48:59.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:48:59.140 [DEBUG] [Thread-180553] [transport.py] [_log()] userauth is OK
2026-04-12T01:48:59.141 [DEBUG] [Thread-180553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:48:59.141 [DEBUG] [Thread-180553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:48:59.141 [DEBUG] [Thread-180553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:48:59.141 [DEBUG] [Thread-180553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:48:59.159 [INFO] [Thread-180553] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:48:59.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:48:59.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:48:59.993 [DEBUG] [Thread-180553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:48:59.993 [DEBUG] [Thread-180553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:49:00.040 [DEBUG] [Thread-180553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:49:00.040 [DEBUG] [Thread-180553] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:49:00.048 [DEBUG] [Thread-180553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:49:00.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:49:00.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-04-12T01:49:00.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:49:00.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:49:00.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:49:00.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:49:00.081 [DEBUG] [Thread-180553] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:49:09.993 [DEBUG] [Thread-180555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:49:22.307 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:49:22.308 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:49:25.057 [DEBUG] [Thread-180556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:49:30.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:49:30.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:49:30.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-04-12T01:49:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 49, 4), -0.02488, 100.134, 0.0, 20.4502, 10.2489, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:49:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:49:04
2026-04-12T01:49:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:49:31.852 [DEBUG] [Thread-180557] [transport.py] [_log()] starting thread (client mode): 0xae562f20
2026-04-12T01:49:31.852 [DEBUG] [Thread-180557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:49:31.872 [DEBUG] [Thread-180557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:49:31.873 [INFO] [Thread-180557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:49:31.876 [DEBUG] [Thread-180557] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:49:31.876 [DEBUG] [Thread-180557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:49:31.876 [DEBUG] [Thread-180557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:49:31.876 [DEBUG] [Thread-180557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] client lang: <none>
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] server lang: <none>
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] kex follows: False
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:49:31.877 [DEBUG] [Thread-180557] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:49:31.878 [DEBUG] [Thread-180557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:49:31.878 [DEBUG] [Thread-180557] [transport.py] [_log()] Compression: none
2026-04-12T01:49:31.878 [DEBUG] [Thread-180557] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:49:31.897 [DEBUG] [Thread-180557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:49:31.898 [DEBUG] [Thread-180557] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:49:31.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:49:31.899 [DEBUG] [Thread-180557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:49:31.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:49:31.901 [DEBUG] [Thread-180557] [transport.py] [_log()] userauth is OK
2026-04-12T01:49:31.902 [DEBUG] [Thread-180557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:49:31.902 [DEBUG] [Thread-180557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:49:31.902 [DEBUG] [Thread-180557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:49:31.902 [DEBUG] [Thread-180557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:49:31.924 [INFO] [Thread-180557] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:49:31.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:49:32.598 [DEBUG] [Thread-180557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:49:32.599 [DEBUG] [Thread-180557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:49:32.599 [DEBUG] [Thread-180557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:49:32.640 [DEBUG] [Thread-180557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:49:32.640 [DEBUG] [Thread-180557] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:49:32.643 [DEBUG] [Thread-180557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:49:32.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:49:32.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:49:32.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:49:32.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:49:32.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:49:32.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:49:32.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:49:32.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:49:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:49:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.992470 -999.00  +10.20  17.52     98  +10.00 1 3 1 3 1     0    0 0.30 0.26 ----- 15.3 17.5 279.6 22.5 11.7 -1.3 11.6 -1.4 11.2 -1.4 11.6 -0.8
2026-04-12T01:49:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:49:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:49:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.992470
2026-04-12T01:49:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:49:32.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:49:32.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:49:32.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:49:32.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:49:32.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:49:04', tmtdew=-0.02488, humidity=100.134, cloud=0.0, wind=20.4502, temperature=10.2489, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:49:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:49:32.670 [DEBUG] [Thread-180557] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:49:32.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:49:32.764 [DEBUG] [Thread-180560] [transport.py] [_log()] starting thread (client mode): 0xb0fcd7b0
2026-04-12T01:49:32.764 [DEBUG] [Thread-180560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:49:32.779 [DEBUG] [Thread-180560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:49:32.779 [INFO] [Thread-180560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:49:32.786 [DEBUG] [Thread-180560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] client lang: <none>
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] server lang: <none>
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] kex follows: False
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] Compression: none
2026-04-12T01:49:32.787 [DEBUG] [Thread-180560] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:49:32.842 [DEBUG] [Thread-180560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:49:32.843 [DEBUG] [Thread-180560] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:49:32.843 [DEBUG] [Thread-180560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:49:32.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:49:32.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:49:32.900 [DEBUG] [Thread-180560] [transport.py] [_log()] userauth is OK
2026-04-12T01:49:32.900 [DEBUG] [Thread-180560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:49:32.900 [DEBUG] [Thread-180560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:49:32.900 [DEBUG] [Thread-180560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:49:32.900 [DEBUG] [Thread-180560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:49:32.918 [INFO] [Thread-180560] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:49:32.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:49:32.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:49:33.721 [DEBUG] [Thread-180560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:49:33.721 [DEBUG] [Thread-180560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:49:33.768 [DEBUG] [Thread-180560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:49:33.769 [DEBUG] [Thread-180560] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:49:33.778 [DEBUG] [Thread-180560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:49:33.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:49:33.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:49:33.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:49:33.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:49:33.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:49:33.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:49:33.812 [DEBUG] [Thread-180560] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:49:40.092 [DEBUG] [Thread-180562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:49:51.156 [DEBUG] [Thread-180563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:49:55.149 [DEBUG] [Thread-180564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:03.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:50:03.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:50:03.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-04-12T01:50:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 49, 39), -0.04966, 100.267, 0.0, 21.7361, 10.6643, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:50:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:49:39
2026-04-12T01:50:05.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:50:05.869 [DEBUG] [Thread-180565] [transport.py] [_log()] starting thread (client mode): 0xb0fcf880
2026-04-12T01:50:05.869 [DEBUG] [Thread-180565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:50:05.890 [DEBUG] [Thread-180565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:50:05.890 [INFO] [Thread-180565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] client lang: <none>
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] server lang: <none>
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] kex follows: False
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:50:05.893 [DEBUG] [Thread-180565] [transport.py] [_log()] Compression: none
2026-04-12T01:50:05.894 [DEBUG] [Thread-180565] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:50:05.911 [DEBUG] [Thread-180565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:50:05.912 [DEBUG] [Thread-180565] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:50:05.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:50:05.913 [DEBUG] [Thread-180565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:50:05.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:50:05.915 [DEBUG] [Thread-180565] [transport.py] [_log()] userauth is OK
2026-04-12T01:50:05.915 [DEBUG] [Thread-180565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:50:05.915 [DEBUG] [Thread-180565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:50:05.915 [DEBUG] [Thread-180565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:50:05.915 [DEBUG] [Thread-180565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:50:05.940 [INFO] [Thread-180565] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:50:05.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:50:06.802 [DEBUG] [Thread-180565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:50:06.803 [DEBUG] [Thread-180565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:50:06.803 [DEBUG] [Thread-180565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:50:06.843 [DEBUG] [Thread-180565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:50:06.843 [DEBUG] [Thread-180565] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:50:06.846 [DEBUG] [Thread-180565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:50:06.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:50:06.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:50:06.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:50:06.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:50:06.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:50:06.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:50:06.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:50:06.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:50:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:50:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.992818 -999.00  +10.30  14.08     98  +10.00 1 3 1 3 1     0    0 0.31 0.30 ----- 18.3 14.1 283.9 21.6 11.8 -1.1 11.6 -1.3 11.2 -1.3 11.6 -0.5
2026-04-12T01:50:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:50:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:50:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.992818
2026-04-12T01:50:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:50:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:50:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:50:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:50:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:50:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:49:39', tmtdew=-0.04966, humidity=100.267, cloud=0.0, wind=21.7361, temperature=10.6643, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:49:39.475', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:50:06.879 [DEBUG] [Thread-180565] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:50:06.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:50:06.973 [DEBUG] [Thread-180568] [transport.py] [_log()] starting thread (client mode): 0xae535030
2026-04-12T01:50:06.973 [DEBUG] [Thread-180568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:50:06.988 [DEBUG] [Thread-180568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:50:06.988 [INFO] [Thread-180568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:06.996 [DEBUG] [Thread-180568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] client lang: <none>
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] server lang: <none>
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] kex follows: False
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:50:06.997 [DEBUG] [Thread-180568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:50:06.998 [DEBUG] [Thread-180568] [transport.py] [_log()] Compression: none
2026-04-12T01:50:06.998 [DEBUG] [Thread-180568] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:50:07.055 [DEBUG] [Thread-180568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:50:07.056 [DEBUG] [Thread-180568] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:50:07.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:50:07.057 [DEBUG] [Thread-180568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:50:07.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:50:07.111 [DEBUG] [Thread-180568] [transport.py] [_log()] userauth is OK
2026-04-12T01:50:07.112 [DEBUG] [Thread-180568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:50:07.112 [DEBUG] [Thread-180568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:50:07.112 [DEBUG] [Thread-180568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:50:07.112 [DEBUG] [Thread-180568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:50:07.131 [INFO] [Thread-180568] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:50:07.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:50:07.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:50:07.975 [DEBUG] [Thread-180568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:50:07.976 [DEBUG] [Thread-180568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:50:08.023 [DEBUG] [Thread-180568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:50:08.023 [DEBUG] [Thread-180568] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:50:08.032 [DEBUG] [Thread-180568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:50:08.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:50:08.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-04-12T01:50: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-04-12T01:50:08.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:50:08.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:50:08.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:50:08.065 [DEBUG] [Thread-180568] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:50:10.185 [DEBUG] [Thread-180570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:22.512 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:22.513 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:25.248 [DEBUG] [Thread-180571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:38.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:50:38.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:50:38.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-04-12T01:50:39.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 50, 15), -0.029865, 100.167, 0.0, 19.1279, 10.2819, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:50:39.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:50:15
2026-04-12T01:50:39.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:50:39.911 [DEBUG] [Thread-180572] [transport.py] [_log()] starting thread (client mode): 0xb0f6ffd0
2026-04-12T01:50:39.911 [DEBUG] [Thread-180572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:50:39.933 [DEBUG] [Thread-180572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:50:39.934 [INFO] [Thread-180572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:50:39.938 [DEBUG] [Thread-180572] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:50:39.938 [DEBUG] [Thread-180572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:50:39.938 [DEBUG] [Thread-180572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:50:39.938 [DEBUG] [Thread-180572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] client lang: <none>
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] server lang: <none>
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] kex follows: False
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:50:39.939 [DEBUG] [Thread-180572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:50:39.940 [DEBUG] [Thread-180572] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:50:39.940 [DEBUG] [Thread-180572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:50:39.940 [DEBUG] [Thread-180572] [transport.py] [_log()] Compression: none
2026-04-12T01:50:39.940 [DEBUG] [Thread-180572] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:50:39.950 [DEBUG] [Thread-180572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:50:39.951 [DEBUG] [Thread-180572] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:50:39.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:50:39.952 [DEBUG] [Thread-180572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:50:39.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:50:39.954 [DEBUG] [Thread-180572] [transport.py] [_log()] userauth is OK
2026-04-12T01:50:39.954 [DEBUG] [Thread-180572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:50:39.954 [DEBUG] [Thread-180572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:50:39.954 [DEBUG] [Thread-180572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:50:39.954 [DEBUG] [Thread-180572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:50:39.978 [INFO] [Thread-180572] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:50:39.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:50:40.286 [DEBUG] [Thread-180574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:40.671 [DEBUG] [Thread-180572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:50:40.671 [DEBUG] [Thread-180572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:50:40.672 [DEBUG] [Thread-180572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:50:40.712 [DEBUG] [Thread-180572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:50:40.712 [DEBUG] [Thread-180572] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:50:40.727 [DEBUG] [Thread-180572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:50:40.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:50:40.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:50:40.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:50:40.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:50:40.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:50:40.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:50:40.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:50:40.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:50:40.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:50:40.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.993164 -999.00  +10.30  14.01     98  +10.00 1 3 1 3 1     0    0 0.30 0.34 ----- 16.7 14.0 285.1 21.8 11.7 -1.2 11.6 -1.5 11.2 -1.5 11.6 -0.7
2026-04-12T01:50:40.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:50:40.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:50:40.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.993164
2026-04-12T01:50:40.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:50:40.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:50:40.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:50:40.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:50:40.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:50:40.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:50:15', tmtdew=-0.029865, humidity=100.167, cloud=0.0, wind=19.1279, temperature=10.2819, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:50:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:50:40.755 [DEBUG] [Thread-180572] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:50:40.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:50:40.853 [DEBUG] [Thread-180576] [transport.py] [_log()] starting thread (client mode): 0xb0fe8820
2026-04-12T01:50:40.853 [DEBUG] [Thread-180576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:50:40.867 [DEBUG] [Thread-180576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:50:40.867 [INFO] [Thread-180576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:50:40.874 [DEBUG] [Thread-180576] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] client lang: <none>
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] server lang: <none>
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] kex follows: False
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] Compression: none
2026-04-12T01:50:40.875 [DEBUG] [Thread-180576] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:50:40.935 [DEBUG] [Thread-180576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:50:40.935 [DEBUG] [Thread-180576] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:50:40.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:50:40.936 [DEBUG] [Thread-180576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:50:40.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:50:40.991 [DEBUG] [Thread-180576] [transport.py] [_log()] userauth is OK
2026-04-12T01:50:40.992 [DEBUG] [Thread-180576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:50:40.992 [DEBUG] [Thread-180576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:50:40.992 [DEBUG] [Thread-180576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:50:40.992 [DEBUG] [Thread-180576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:50:41.011 [INFO] [Thread-180576] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:50:41.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:50:41.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:50:41.834 [DEBUG] [Thread-180576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:50:41.835 [DEBUG] [Thread-180576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:50:41.882 [DEBUG] [Thread-180576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:50:41.882 [DEBUG] [Thread-180576] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:50:41.891 [DEBUG] [Thread-180576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:50:41.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:50:41.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-04-12T01:50:41.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-04-12T01:50:41.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:50:41.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:50:41.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:50:41.928 [DEBUG] [Thread-180576] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:50:51.213 [DEBUG] [Thread-180578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:50:55.322 [DEBUG] [Thread-180579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:10.378 [DEBUG] [Thread-180580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:11.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:51:11.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:51:11.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-04-12T01:51:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 50, 50), -0.055, 100.301, 0.0, 18.0317, 10.7978, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:51:13.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:50:50
2026-04-12T01:51:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:51:13.744 [DEBUG] [Thread-180581] [transport.py] [_log()] starting thread (client mode): 0xae5b44f0
2026-04-12T01:51:13.744 [DEBUG] [Thread-180581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:51:13.763 [DEBUG] [Thread-180581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:51:13.763 [INFO] [Thread-180581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:51:13.766 [DEBUG] [Thread-180581] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] client lang: <none>
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] server lang: <none>
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] kex follows: False
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] Compression: none
2026-04-12T01:51:13.767 [DEBUG] [Thread-180581] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:51:13.783 [DEBUG] [Thread-180581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:51:13.783 [DEBUG] [Thread-180581] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:51:13.784 [DEBUG] [Thread-180581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:51:13.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:51:13.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:51:13.785 [DEBUG] [Thread-180581] [transport.py] [_log()] userauth is OK
2026-04-12T01:51:13.786 [DEBUG] [Thread-180581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:51:13.786 [DEBUG] [Thread-180581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:51:13.786 [DEBUG] [Thread-180581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:51:13.786 [DEBUG] [Thread-180581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:51:13.810 [INFO] [Thread-180581] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:51:13.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:51:14.444 [DEBUG] [Thread-180581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:51:14.444 [DEBUG] [Thread-180581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:51:14.444 [DEBUG] [Thread-180581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:51:14.484 [DEBUG] [Thread-180581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:51:14.485 [DEBUG] [Thread-180581] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:51:14.487 [DEBUG] [Thread-180581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:51:14.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:51:14.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:51:14.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:51:14.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:51:14.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:51:14.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:51:14.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:51:14.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:51:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:51:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.993511 -999.00  +10.30  16.37     98  +10.00 1 3 1 3 1     0    0 0.31 0.36 ----- 14.6 16.4 280.8 20.9 11.8 -1.1 11.6 -1.4 11.2 -1.0 11.6 -0.6
2026-04-12T01:51:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:51:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:51:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.993511
2026-04-12T01:51:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:51:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:51:14.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:51:14.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:51:14.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:51:14.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:50:50', tmtdew=-0.055, humidity=100.301, cloud=0.0, wind=18.0317, temperature=10.7978, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:50:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:51:14.505 [DEBUG] [Thread-180581] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:51:14.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:51:14.606 [DEBUG] [Thread-180584] [transport.py] [_log()] starting thread (client mode): 0xae5b6e30
2026-04-12T01:51:14.606 [DEBUG] [Thread-180584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:51:14.621 [DEBUG] [Thread-180584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:51:14.621 [INFO] [Thread-180584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:14.628 [DEBUG] [Thread-180584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] client lang: <none>
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] server lang: <none>
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] kex follows: False
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] Compression: none
2026-04-12T01:51:14.629 [DEBUG] [Thread-180584] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:51:14.685 [DEBUG] [Thread-180584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:51:14.686 [DEBUG] [Thread-180584] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:51:14.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:51:14.687 [DEBUG] [Thread-180584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:51:14.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:51:14.743 [DEBUG] [Thread-180584] [transport.py] [_log()] userauth is OK
2026-04-12T01:51:14.743 [DEBUG] [Thread-180584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:51:14.743 [DEBUG] [Thread-180584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:51:14.743 [DEBUG] [Thread-180584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:51:14.743 [DEBUG] [Thread-180584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:51:14.762 [INFO] [Thread-180584] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:51:14.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:51:14.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:51:15.568 [DEBUG] [Thread-180584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:51:15.568 [DEBUG] [Thread-180584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:51:15.616 [DEBUG] [Thread-180584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:51:15.616 [DEBUG] [Thread-180584] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:51:15.625 [DEBUG] [Thread-180584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:51:15.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:51:15.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:51:15.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-04-12T01:51:15.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:51:15.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:51:15.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:51:15.659 [DEBUG] [Thread-180584] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:51:22.717 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:22.719 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:25.415 [DEBUG] [Thread-180586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:40.470 [DEBUG] [Thread-180587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:51:45.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:51:45.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-04-12T01:51:46.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 51, 26), 0.02252, 100.151, 0.0, 18.6156, 10.3323, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:51:46.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:51:26
2026-04-12T01:51:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:51:47.525 [DEBUG] [Thread-180588] [transport.py] [_log()] starting thread (client mode): 0xb0fcef80
2026-04-12T01:51:47.525 [DEBUG] [Thread-180588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:51:47.545 [DEBUG] [Thread-180588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:51:47.546 [INFO] [Thread-180588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:51:47.548 [DEBUG] [Thread-180588] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] client lang: <none>
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] server lang: <none>
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] kex follows: False
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] Compression: none
2026-04-12T01:51:47.549 [DEBUG] [Thread-180588] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:51:47.569 [DEBUG] [Thread-180588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:51:47.569 [DEBUG] [Thread-180588] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:51:47.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:51:47.570 [DEBUG] [Thread-180588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:51:47.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:51:47.572 [DEBUG] [Thread-180588] [transport.py] [_log()] userauth is OK
2026-04-12T01:51:47.572 [DEBUG] [Thread-180588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:51:47.572 [DEBUG] [Thread-180588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:51:47.572 [DEBUG] [Thread-180588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:51:47.572 [DEBUG] [Thread-180588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:51:47.605 [INFO] [Thread-180588] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:51:47.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:51:48.185 [DEBUG] [Thread-180588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:51:48.185 [DEBUG] [Thread-180588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:51:48.186 [DEBUG] [Thread-180588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:51:48.227 [DEBUG] [Thread-180588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:51:48.227 [DEBUG] [Thread-180588] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:51:48.231 [DEBUG] [Thread-180588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:51:48.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:51:48.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:51:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:51:48.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:51:48.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:51:48.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:51:48.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:51:48.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:51:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:51:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.993859 -999.00  +10.30  16.70     98  +10.00 1 3 1 3 1     0    0 0.31 0.39 ----- 15.3 16.7 284.8 18.6 11.7 -1.0 11.6 -1.3 11.2 -0.9 11.6 -0.7
2026-04-12T01:51:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:51:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:51:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.993859
2026-04-12T01:51:48.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:51:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:51:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:51:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:51:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:51:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:51:26', tmtdew=0.02252, humidity=100.151, cloud=0.0, wind=18.6156, temperature=10.3323, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:51:09.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:51:48.258 [DEBUG] [Thread-180588] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:51:48.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:51:48.347 [DEBUG] [Thread-180591] [transport.py] [_log()] starting thread (client mode): 0xb0f40550
2026-04-12T01:51:48.348 [DEBUG] [Thread-180591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:51:48.365 [DEBUG] [Thread-180591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:51:48.365 [INFO] [Thread-180591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:51:48.376 [DEBUG] [Thread-180591] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:51:48.376 [DEBUG] [Thread-180591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] client lang: <none>
2026-04-12T01:51:48.377 [DEBUG] [Thread-180591] [transport.py] [_log()] server lang: <none>
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] kex follows: False
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] Compression: none
2026-04-12T01:51:48.378 [DEBUG] [Thread-180591] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:51:48.434 [DEBUG] [Thread-180591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:51:48.434 [DEBUG] [Thread-180591] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:51:48.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:51:48.436 [DEBUG] [Thread-180591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:51:48.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:51:48.490 [DEBUG] [Thread-180591] [transport.py] [_log()] userauth is OK
2026-04-12T01:51:48.490 [DEBUG] [Thread-180591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:51:48.490 [DEBUG] [Thread-180591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:51:48.490 [DEBUG] [Thread-180591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:51:48.490 [DEBUG] [Thread-180591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:51:48.515 [INFO] [Thread-180591] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:51:48.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:51:48.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:51:49.380 [DEBUG] [Thread-180591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:51:49.380 [DEBUG] [Thread-180591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:51:49.428 [DEBUG] [Thread-180591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:51:49.428 [DEBUG] [Thread-180591] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:51:49.437 [DEBUG] [Thread-180591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:51:49.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:51:49.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:51:49.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-04-12T01:51:49.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:51:49.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:51:49.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:51:49.476 [DEBUG] [Thread-180591] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:51:51.271 [DEBUG] [Thread-180593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:51:55.507 [DEBUG] [Thread-180594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:10.561 [DEBUG] [Thread-180595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:19.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:52:19.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:52:19.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-04-12T01:52:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 52, 1), 0.052365, 99.9522, 0.0, 18.2628, 10.2829, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:52:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:52:01
2026-04-12T01:52:21.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:52:21.313 [DEBUG] [Thread-180596] [transport.py] [_log()] starting thread (client mode): 0xb0fce350
2026-04-12T01:52:21.313 [DEBUG] [Thread-180596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:52:21.332 [DEBUG] [Thread-180596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:52:21.332 [INFO] [Thread-180596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:21.335 [DEBUG] [Thread-180596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] client lang: <none>
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] server lang: <none>
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] kex follows: False
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] Compression: none
2026-04-12T01:52:21.336 [DEBUG] [Thread-180596] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:52:21.356 [DEBUG] [Thread-180596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:52:21.356 [DEBUG] [Thread-180596] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:52:21.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:52:21.357 [DEBUG] [Thread-180596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:52:21.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:52:21.359 [DEBUG] [Thread-180596] [transport.py] [_log()] userauth is OK
2026-04-12T01:52:21.360 [DEBUG] [Thread-180596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:52:21.360 [DEBUG] [Thread-180596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:52:21.360 [DEBUG] [Thread-180596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:52:21.360 [DEBUG] [Thread-180596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:52:21.375 [INFO] [Thread-180596] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:52:21.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:52:22.004 [DEBUG] [Thread-180596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:52:22.004 [DEBUG] [Thread-180596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:52:22.005 [DEBUG] [Thread-180596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:52:22.045 [DEBUG] [Thread-180596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:52:22.045 [DEBUG] [Thread-180596] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:52:22.049 [DEBUG] [Thread-180596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:52:22.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:52:22.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:52:22.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:52:22.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:52:22.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:52:22.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:52:22.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:52:22.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:52:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:52:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.994206 -999.00  +10.30  12.28     98  +10.00 1 3 1 3 1     0    0 0.30 0.41 ----- 13.5 12.3 292.8 19.0 11.8 -1.0 11.6 -1.2 11.2 -1.4 11.5 -0.4
2026-04-12T01:52:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:52:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:52:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.994206
2026-04-12T01:52:22.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:52:22.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:52:22.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:52:22.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:52:22.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:52:22.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:52:01', tmtdew=0.052365, humidity=99.9522, cloud=0.0, wind=18.2628, temperature=10.2829, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:51:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:52:22.076 [DEBUG] [Thread-180596] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:52:22.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:52:22.169 [DEBUG] [Thread-180599] [transport.py] [_log()] starting thread (client mode): 0xb0fea590
2026-04-12T01:52:22.169 [DEBUG] [Thread-180599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:52:22.183 [DEBUG] [Thread-180599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:52:22.183 [INFO] [Thread-180599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] client lang: <none>
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] server lang: <none>
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] kex follows: False
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] Compression: none
2026-04-12T01:52:22.191 [DEBUG] [Thread-180599] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:52:22.254 [DEBUG] [Thread-180599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:52:22.254 [DEBUG] [Thread-180599] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:52:22.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:52:22.256 [DEBUG] [Thread-180599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:52:22.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:52:22.313 [DEBUG] [Thread-180599] [transport.py] [_log()] userauth is OK
2026-04-12T01:52:22.313 [DEBUG] [Thread-180599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:52:22.314 [DEBUG] [Thread-180599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:52:22.314 [DEBUG] [Thread-180599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:52:22.314 [DEBUG] [Thread-180599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:52:22.338 [INFO] [Thread-180599] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:52:22.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:52:22.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:52:22.922 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:22.924 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:23.158 [DEBUG] [Thread-180599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:52:23.158 [DEBUG] [Thread-180599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:52:23.207 [DEBUG] [Thread-180599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:52:23.207 [DEBUG] [Thread-180599] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:52:23.216 [DEBUG] [Thread-180599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:52:23.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:52:23.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:52:23.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-04-12T01:52:23.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:52:23.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:52:23.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:52:23.253 [DEBUG] [Thread-180599] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:52:25.599 [DEBUG] [Thread-180601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:40.650 [DEBUG] [Thread-180602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:51.336 [DEBUG] [Thread-180603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:52:53.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:52:53.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-04-12T01:52:54.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 52, 37), -0.06013, 100.336, 0.0, 14.6801, 10.7985, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:52:54.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:52:37
2026-04-12T01:52:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:52:55.061 [DEBUG] [Thread-180604] [transport.py] [_log()] starting thread (client mode): 0xb0f41ff0
2026-04-12T01:52:55.061 [DEBUG] [Thread-180604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:52:55.079 [DEBUG] [Thread-180604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:52:55.079 [INFO] [Thread-180604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] client lang: <none>
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] server lang: <none>
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] kex follows: False
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:52:55.082 [DEBUG] [Thread-180604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:52:55.083 [DEBUG] [Thread-180604] [transport.py] [_log()] Compression: none
2026-04-12T01:52:55.083 [DEBUG] [Thread-180604] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:52:55.094 [DEBUG] [Thread-180604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:52:55.095 [DEBUG] [Thread-180604] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:52:55.095 [DEBUG] [Thread-180604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:52:55.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:52:55.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:52:55.096 [DEBUG] [Thread-180604] [transport.py] [_log()] userauth is OK
2026-04-12T01:52:55.097 [DEBUG] [Thread-180604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:52:55.097 [DEBUG] [Thread-180604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:52:55.097 [DEBUG] [Thread-180604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:52:55.097 [DEBUG] [Thread-180604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:52:55.110 [INFO] [Thread-180604] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:52:55.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:52:55.687 [DEBUG] [Thread-180606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:52:55.863 [DEBUG] [Thread-180604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:52:55.863 [DEBUG] [Thread-180604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:52:55.864 [DEBUG] [Thread-180604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:52:55.904 [DEBUG] [Thread-180604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:52:55.904 [DEBUG] [Thread-180604] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:52:55.908 [DEBUG] [Thread-180604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:52:55.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:52:55.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:52:55.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:52:55.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:52:55.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:52:55.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:52:55.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:52:55.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:52:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:52:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.994553 -999.00  +10.30  16.28     98  +10.00 1 3 1 3 1     0    0 0.30 0.17 ----- 14.1 16.3 276.4 18.2 11.7 -1.1 11.6 -1.3 11.2 -0.8 11.6 -0.6
2026-04-12T01:52:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:52:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:52:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.994553
2026-04-12T01:52:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:52:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:52:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:52:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:52:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:52:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:52:37', tmtdew=-0.06013, humidity=100.336, cloud=0.0, wind=14.6801, temperature=10.7985, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:52:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:52:55.931 [DEBUG] [Thread-180604] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:52:56.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:52:56.024 [DEBUG] [Thread-180608] [transport.py] [_log()] starting thread (client mode): 0xae561840
2026-04-12T01:52:56.024 [DEBUG] [Thread-180608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:52:56.039 [DEBUG] [Thread-180608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:52:56.039 [INFO] [Thread-180608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:52:56.046 [DEBUG] [Thread-180608] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:52:56.046 [DEBUG] [Thread-180608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] client lang: <none>
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] server lang: <none>
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] kex follows: False
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] Compression: none
2026-04-12T01:52:56.047 [DEBUG] [Thread-180608] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:52:56.105 [DEBUG] [Thread-180608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:52:56.105 [DEBUG] [Thread-180608] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:52:56.106 [DEBUG] [Thread-180608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:52:56.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:52:56.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:52:56.161 [DEBUG] [Thread-180608] [transport.py] [_log()] userauth is OK
2026-04-12T01:52:56.161 [DEBUG] [Thread-180608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:52:56.161 [DEBUG] [Thread-180608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:52:56.161 [DEBUG] [Thread-180608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:52:56.161 [DEBUG] [Thread-180608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:52:56.180 [INFO] [Thread-180608] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:52:56.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:52:56.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:52:56.992 [DEBUG] [Thread-180608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:52:56.992 [DEBUG] [Thread-180608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:52:57.040 [DEBUG] [Thread-180608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:52:57.040 [DEBUG] [Thread-180608] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:52:57.050 [DEBUG] [Thread-180608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:52:57.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:52:57.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:52:57.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:52:57.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:52:57.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:52:57.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:52:57.087 [DEBUG] [Thread-180608] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:53:10.723 [DEBUG] [Thread-180610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:53:23.126 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:53:23.127 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:53:25.778 [DEBUG] [Thread-180611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:53:27.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:53:27.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:53:27.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-04-12T01:53:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 53, 12), 0.024905, 100.135, 0.0, 16.2511, 10.3992, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:53:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:53:12
2026-04-12T01:53:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:53:28.936 [DEBUG] [Thread-180612] [transport.py] [_log()] starting thread (client mode): 0xae5b46a0
2026-04-12T01:53:28.936 [DEBUG] [Thread-180612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:53:28.956 [DEBUG] [Thread-180612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:53:28.956 [INFO] [Thread-180612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] client lang: <none>
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] server lang: <none>
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] kex follows: False
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:53:28.959 [DEBUG] [Thread-180612] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:53:28.960 [DEBUG] [Thread-180612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:53:28.960 [DEBUG] [Thread-180612] [transport.py] [_log()] Compression: none
2026-04-12T01:53:28.960 [DEBUG] [Thread-180612] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:53:28.978 [DEBUG] [Thread-180612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:53:28.979 [DEBUG] [Thread-180612] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:53:28.980 [DEBUG] [Thread-180612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:53:28.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:53:28.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:53:28.982 [DEBUG] [Thread-180612] [transport.py] [_log()] userauth is OK
2026-04-12T01:53:28.982 [DEBUG] [Thread-180612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:53:28.982 [DEBUG] [Thread-180612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:53:28.982 [DEBUG] [Thread-180612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:53:28.982 [DEBUG] [Thread-180612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:53:29.006 [INFO] [Thread-180612] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:53:29.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:53:29.816 [DEBUG] [Thread-180612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:53:29.816 [DEBUG] [Thread-180612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:53:29.816 [DEBUG] [Thread-180612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:53:29.857 [DEBUG] [Thread-180612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:53:29.858 [DEBUG] [Thread-180612] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:53:29.862 [DEBUG] [Thread-180612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:53:29.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:53:29.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:53:29.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:53:29.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:53:29.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:53:29.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:53:29.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:53:29.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:53:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:53:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.995248 -999.00  +10.30  13.58     98  +10.00 1 3 1 3 1     0    0 0.30 0.09 ----- 15.4 13.6 274.0 19.8 11.8 -1.1 11.6 -1.4 11.2 -1.3 11.6 -0.6
2026-04-12T01:53:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:53:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:53:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.995248
2026-04-12T01:53:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:53:29.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:53:29.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:53:29.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:53:29.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:53:29.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:53:12', tmtdew=0.024905, humidity=100.135, cloud=0.0, wind=16.2511, temperature=10.3992, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:53:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:53:29.888 [DEBUG] [Thread-180612] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:53:29.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:53:29.980 [DEBUG] [Thread-180615] [transport.py] [_log()] starting thread (client mode): 0xb0fccfa0
2026-04-12T01:53:29.980 [DEBUG] [Thread-180615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:53:29.997 [DEBUG] [Thread-180615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:53:29.997 [INFO] [Thread-180615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:53:30.004 [DEBUG] [Thread-180615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] client lang: <none>
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] server lang: <none>
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] kex follows: False
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] Compression: none
2026-04-12T01:53:30.005 [DEBUG] [Thread-180615] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:53:30.064 [DEBUG] [Thread-180615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:53:30.065 [DEBUG] [Thread-180615] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:53:30.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:53:30.065 [DEBUG] [Thread-180615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:53:30.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:53:30.120 [DEBUG] [Thread-180615] [transport.py] [_log()] userauth is OK
2026-04-12T01:53:30.120 [DEBUG] [Thread-180615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:53:30.121 [DEBUG] [Thread-180615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:53:30.121 [DEBUG] [Thread-180615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:53:30.121 [DEBUG] [Thread-180615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:53:30.140 [INFO] [Thread-180615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:53:30.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:53:30.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:53:30.966 [DEBUG] [Thread-180615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:53:30.967 [DEBUG] [Thread-180615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:53:31.015 [DEBUG] [Thread-180615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:53:31.015 [DEBUG] [Thread-180615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:53:31.025 [DEBUG] [Thread-180615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:53:31.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:53:31.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:53:31.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:53:31.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:53:31.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:53:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:53:31.061 [DEBUG] [Thread-180615] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:53:40.811 [DEBUG] [Thread-180617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:53:51.395 [DEBUG] [Thread-180618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:53:55.864 [DEBUG] [Thread-180619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:54:01.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:54:01.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:54:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 53, 48), -0.05015, 100.269, 0.0, 19.831, 10.7653, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:54:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:53:48
2026-04-12T01:54:02.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:54:02.918 [DEBUG] [Thread-180620] [transport.py] [_log()] starting thread (client mode): 0xae5b3880
2026-04-12T01:54:02.918 [DEBUG] [Thread-180620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:54:02.940 [DEBUG] [Thread-180620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:54:02.940 [INFO] [Thread-180620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:54:02.944 [DEBUG] [Thread-180620] [transport.py] [_log()] client lang: <none>
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] server lang: <none>
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] kex follows: False
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] Compression: none
2026-04-12T01:54:02.945 [DEBUG] [Thread-180620] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:54:02.965 [DEBUG] [Thread-180620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:54:02.966 [DEBUG] [Thread-180620] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:54:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:54:02.967 [DEBUG] [Thread-180620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:54:02.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:54:02.969 [DEBUG] [Thread-180620] [transport.py] [_log()] userauth is OK
2026-04-12T01:54:02.969 [DEBUG] [Thread-180620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:54:02.969 [DEBUG] [Thread-180620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:54:02.969 [DEBUG] [Thread-180620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:54:02.969 [DEBUG] [Thread-180620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:54:02.989 [INFO] [Thread-180620] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:54:02.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:54:03.748 [DEBUG] [Thread-180620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:54:03.749 [DEBUG] [Thread-180620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:54:03.749 [DEBUG] [Thread-180620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:54:03.790 [DEBUG] [Thread-180620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:54:03.791 [DEBUG] [Thread-180620] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:54:03.794 [DEBUG] [Thread-180620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:54:03.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:54:03.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:54:03.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:54:03.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:54:03.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:54:03.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:54:03.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:54:03.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:54:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:54:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.995595 -999.00  +10.30  15.94     98  +10.00 1 3 1 3 1     0    0 0.30 -0.03 ----- 15.4 15.9 276.4 19.0 11.7 -1.0 11.6 -1.2 11.2 -1.4 11.6 -0.5
2026-04-12T01:54:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:54:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:54:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.995595
2026-04-12T01:54:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:54:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:54:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:54:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:54:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:54:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:53:48', tmtdew=-0.05015, humidity=100.269, cloud=0.0, wind=19.831, temperature=10.7653, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:53:39.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:54:03.820 [DEBUG] [Thread-180620] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:54:03.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:54:03.914 [DEBUG] [Thread-180623] [transport.py] [_log()] starting thread (client mode): 0xae5b1000
2026-04-12T01:54:03.914 [DEBUG] [Thread-180623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:54:03.928 [DEBUG] [Thread-180623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:54:03.928 [INFO] [Thread-180623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:54:03.936 [DEBUG] [Thread-180623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:54:03.936 [DEBUG] [Thread-180623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:54:03.936 [DEBUG] [Thread-180623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:54:03.936 [DEBUG] [Thread-180623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:03.936 [DEBUG] [Thread-180623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:03.936 [DEBUG] [Thread-180623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] client lang: <none>
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] server lang: <none>
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] kex follows: False
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:54:03.937 [DEBUG] [Thread-180623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:54:03.938 [DEBUG] [Thread-180623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:54:03.938 [DEBUG] [Thread-180623] [transport.py] [_log()] Compression: none
2026-04-12T01:54:03.938 [DEBUG] [Thread-180623] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:54:03.996 [DEBUG] [Thread-180623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:54:03.996 [DEBUG] [Thread-180623] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:54:03.997 [DEBUG] [Thread-180623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:54:03.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:54:03.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:54:04.051 [DEBUG] [Thread-180623] [transport.py] [_log()] userauth is OK
2026-04-12T01:54:04.052 [DEBUG] [Thread-180623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:54:04.052 [DEBUG] [Thread-180623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:54:04.052 [DEBUG] [Thread-180623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:54:04.052 [DEBUG] [Thread-180623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:54:04.077 [INFO] [Thread-180623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:54:04.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:54:04.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:54:04.919 [DEBUG] [Thread-180623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:54:04.919 [DEBUG] [Thread-180623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:54:04.967 [DEBUG] [Thread-180623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:54:04.967 [DEBUG] [Thread-180623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:54:04.976 [DEBUG] [Thread-180623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:54:04.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:54:04.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-04-12T01:54:04.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-04-12T01:54:05.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:54:05.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:54:05.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:54:05.013 [DEBUG] [Thread-180623] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:54:10.901 [DEBUG] [Thread-180625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:23.332 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:23.333 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:25.955 [DEBUG] [Thread-180626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:35.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:54:35.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:54:35.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-04-12T01:54:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 54, 23), 0.022485, 100.151, 0.0, 16.4275, 10.3495, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:54:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:54:23
2026-04-12T01:54:36.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:54:36.813 [DEBUG] [Thread-180627] [transport.py] [_log()] starting thread (client mode): 0xae5b3340
2026-04-12T01:54:36.813 [DEBUG] [Thread-180627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:54:36.833 [DEBUG] [Thread-180627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:54:36.833 [INFO] [Thread-180627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:36.836 [DEBUG] [Thread-180627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] client lang: <none>
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] server lang: <none>
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] kex follows: False
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] Compression: none
2026-04-12T01:54:36.837 [DEBUG] [Thread-180627] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:54:36.853 [DEBUG] [Thread-180627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:54:36.854 [DEBUG] [Thread-180627] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:54:36.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:54:36.855 [DEBUG] [Thread-180627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:54:36.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:54:36.857 [DEBUG] [Thread-180627] [transport.py] [_log()] userauth is OK
2026-04-12T01:54:36.857 [DEBUG] [Thread-180627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:54:36.858 [DEBUG] [Thread-180627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:54:36.858 [DEBUG] [Thread-180627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:54:36.858 [DEBUG] [Thread-180627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:54:36.882 [INFO] [Thread-180627] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:54:36.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:54:37.675 [DEBUG] [Thread-180627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:54:37.675 [DEBUG] [Thread-180627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:54:37.675 [DEBUG] [Thread-180627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:54:37.717 [DEBUG] [Thread-180627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:54:37.717 [DEBUG] [Thread-180627] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:54:37.720 [DEBUG] [Thread-180627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:54:37.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:54:37.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:54:37.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:54:37.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:54:37.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:54:37.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:54:37.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:54:37.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:54:37.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:54:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.995942 -999.00  +10.30  13.13     98  +10.00 1 3 1 3 1     0    0 0.30 -0.01 ----- 21.4 13.1 286.6 19.8 11.7 -1.6 11.6 -1.5 11.2 -1.2 11.6 -1.0
2026-04-12T01:54:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:54:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:54:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.995942
2026-04-12T01:54:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:54:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:54:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:54:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:54:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:54:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:54:23', tmtdew=0.022485, humidity=100.151, cloud=0.0, wind=16.4275, temperature=10.3495, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:54:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:54:37.741 [DEBUG] [Thread-180627] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:54:37.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:54:37.847 [DEBUG] [Thread-180630] [transport.py] [_log()] starting thread (client mode): 0xae5b12d0
2026-04-12T01:54:37.847 [DEBUG] [Thread-180630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:54:37.862 [DEBUG] [Thread-180630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:54:37.862 [INFO] [Thread-180630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:54:37.869 [DEBUG] [Thread-180630] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:54:37.869 [DEBUG] [Thread-180630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:54:37.869 [DEBUG] [Thread-180630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] client lang: <none>
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] server lang: <none>
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] kex follows: False
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] Compression: none
2026-04-12T01:54:37.870 [DEBUG] [Thread-180630] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:54:37.925 [DEBUG] [Thread-180630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:54:37.925 [DEBUG] [Thread-180630] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:54:37.926 [DEBUG] [Thread-180630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:54:37.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:54:37.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:54:37.983 [DEBUG] [Thread-180630] [transport.py] [_log()] userauth is OK
2026-04-12T01:54:37.983 [DEBUG] [Thread-180630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:54:37.983 [DEBUG] [Thread-180630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:54:37.983 [DEBUG] [Thread-180630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:54:37.983 [DEBUG] [Thread-180630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:54:38.006 [INFO] [Thread-180630] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:54:38.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:54:38.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:54:38.828 [DEBUG] [Thread-180630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:54:38.828 [DEBUG] [Thread-180630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:54:38.876 [DEBUG] [Thread-180630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:54:38.876 [DEBUG] [Thread-180630] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:54:38.885 [DEBUG] [Thread-180630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:54:38.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:54:38.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-04-12T01:54:38.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-04-12T01:54:38.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:54:38.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:54:38.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:54:38.920 [DEBUG] [Thread-180630] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:54:40.992 [DEBUG] [Thread-180632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:51.451 [DEBUG] [Thread-180633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:54:56.049 [DEBUG] [Thread-180634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:08.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:55:08.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:55:08.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-04-12T01:55:10.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 54, 58), 0.022505, 100.151, 0.0, 19.832, 10.2829, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:55:10.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:54:58
2026-04-12T01:55:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:55:10.780 [DEBUG] [Thread-180635] [transport.py] [_log()] starting thread (client mode): 0xae5b3310
2026-04-12T01:55:10.780 [DEBUG] [Thread-180635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:55:10.801 [DEBUG] [Thread-180635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:55:10.801 [INFO] [Thread-180635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] client lang: <none>
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] server lang: <none>
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] kex follows: False
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] Compression: none
2026-04-12T01:55:10.804 [DEBUG] [Thread-180635] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:55:10.820 [DEBUG] [Thread-180635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:55:10.821 [DEBUG] [Thread-180635] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:55:10.821 [DEBUG] [Thread-180635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:55:10.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:55:10.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:55:10.823 [DEBUG] [Thread-180635] [transport.py] [_log()] userauth is OK
2026-04-12T01:55:10.823 [DEBUG] [Thread-180635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:55:10.823 [DEBUG] [Thread-180635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:55:10.823 [DEBUG] [Thread-180635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:55:10.823 [DEBUG] [Thread-180635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:55:10.859 [INFO] [Thread-180635] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:55:10.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:55:11.091 [DEBUG] [Thread-180637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:12.112 [DEBUG] [Thread-180635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:55:12.113 [DEBUG] [Thread-180635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:55:12.113 [DEBUG] [Thread-180635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:55:12.154 [DEBUG] [Thread-180635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:55:12.154 [DEBUG] [Thread-180635] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:55:12.158 [DEBUG] [Thread-180635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:55:12.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:55:12.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:55:12.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:55:12.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:55:12.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:55:12.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:55:12.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:55:12.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:55:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:55:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.996289 -999.00  +10.10  20.45     98   +9.80 1 3 1 3 1     0    0 0.30 0.00 ----- 24.7 20.4 271.7 24.3 11.7 -1.6 11.5 -1.7 11.2 -2.0 11.5 -0.8
2026-04-12T01:55:12.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:55:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:55:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.996289
2026-04-12T01:55:12.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:55:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:55:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:55:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:55:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:55:12.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:54:58', tmtdew=0.022505, humidity=100.151, cloud=0.0, wind=19.832, temperature=10.2829, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:54:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:55:12.186 [DEBUG] [Thread-180635] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:55:12.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:55:12.282 [DEBUG] [Thread-180639] [transport.py] [_log()] starting thread (client mode): 0xae560e20
2026-04-12T01:55:12.282 [DEBUG] [Thread-180639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:55:12.297 [DEBUG] [Thread-180639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:55:12.297 [INFO] [Thread-180639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:55:12.306 [DEBUG] [Thread-180639] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:55:12.307 [DEBUG] [Thread-180639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:55:12.307 [DEBUG] [Thread-180639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:55:12.307 [DEBUG] [Thread-180639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:12.307 [DEBUG] [Thread-180639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:12.307 [DEBUG] [Thread-180639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] client lang: <none>
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] server lang: <none>
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] kex follows: False
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] Compression: none
2026-04-12T01:55:12.308 [DEBUG] [Thread-180639] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:55:12.363 [DEBUG] [Thread-180639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:55:12.364 [DEBUG] [Thread-180639] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:55:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:55:12.365 [DEBUG] [Thread-180639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:55:12.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:55:12.422 [DEBUG] [Thread-180639] [transport.py] [_log()] userauth is OK
2026-04-12T01:55:12.423 [DEBUG] [Thread-180639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:55:12.423 [DEBUG] [Thread-180639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:55:12.423 [DEBUG] [Thread-180639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:55:12.423 [DEBUG] [Thread-180639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:55:12.442 [INFO] [Thread-180639] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:55:12.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:55:12.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:55:13.270 [DEBUG] [Thread-180639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:55:13.271 [DEBUG] [Thread-180639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:55:13.319 [DEBUG] [Thread-180639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:55:13.319 [DEBUG] [Thread-180639] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:55:13.329 [DEBUG] [Thread-180639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:55:13.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:55:13.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-04-12T01:55:13.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-04-12T01:55:13.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:55:13.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:55:13.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:55:13.368 [DEBUG] [Thread-180639] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:55:23.538 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:23.539 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:26.128 [DEBUG] [Thread-180641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:41.177 [DEBUG] [Thread-180642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:55:43.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:55:43.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:55:44.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 55, 34), -0.06005, 100.337, 0.0, 21.0658, 10.6332, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:55:44.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:55:34
2026-04-12T01:55:45.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:55:45.200 [DEBUG] [Thread-180643] [transport.py] [_log()] starting thread (client mode): 0xae5636a0
2026-04-12T01:55:45.200 [DEBUG] [Thread-180643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:55:45.221 [DEBUG] [Thread-180643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:55:45.221 [INFO] [Thread-180643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] client lang: <none>
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] server lang: <none>
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] kex follows: False
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:55:45.224 [DEBUG] [Thread-180643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:55:45.225 [DEBUG] [Thread-180643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:55:45.225 [DEBUG] [Thread-180643] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:55:45.225 [DEBUG] [Thread-180643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:55:45.225 [DEBUG] [Thread-180643] [transport.py] [_log()] Compression: none
2026-04-12T01:55:45.225 [DEBUG] [Thread-180643] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:55:45.242 [DEBUG] [Thread-180643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:55:45.243 [DEBUG] [Thread-180643] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:55:45.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:55:45.244 [DEBUG] [Thread-180643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:55:45.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:55:45.246 [DEBUG] [Thread-180643] [transport.py] [_log()] userauth is OK
2026-04-12T01:55:45.246 [DEBUG] [Thread-180643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:55:45.246 [DEBUG] [Thread-180643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:55:45.246 [DEBUG] [Thread-180643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:55:45.246 [DEBUG] [Thread-180643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:55:45.272 [INFO] [Thread-180643] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:55:45.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:55:46.055 [DEBUG] [Thread-180643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:55:46.055 [DEBUG] [Thread-180643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:55:46.056 [DEBUG] [Thread-180643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:55:46.096 [DEBUG] [Thread-180643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:55:46.097 [DEBUG] [Thread-180643] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:55:46.100 [DEBUG] [Thread-180643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:55:46.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:55:46.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:55:46.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:55:46.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:55:46.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:55:46.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:55:46.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:55:46.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:55:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:55:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.996637 -999.00  +10.10  15.49     98   +9.80 1 3 1 3 1     0    0 0.29 -0.05 ----- 14.8 15.5 278.8 25.8 11.7 -1.4 11.5 -1.6 11.1 -1.5 11.5 -0.9
2026-04-12T01:55:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:55:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:55:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.996637
2026-04-12T01:55:46.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:55:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:55:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:55:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:55:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:55:46.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:55:34', tmtdew=-0.06005, humidity=100.337, cloud=0.0, wind=21.0658, temperature=10.6332, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:55:09.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:55:46.130 [DEBUG] [Thread-180643] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:55:46.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:55:46.222 [DEBUG] [Thread-180646] [transport.py] [_log()] starting thread (client mode): 0xae5b38e0
2026-04-12T01:55:46.222 [DEBUG] [Thread-180646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:55:46.237 [DEBUG] [Thread-180646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:55:46.237 [INFO] [Thread-180646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] client lang: <none>
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] server lang: <none>
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] kex follows: False
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:55:46.245 [DEBUG] [Thread-180646] [transport.py] [_log()] Compression: none
2026-04-12T01:55:46.246 [DEBUG] [Thread-180646] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:55:46.303 [DEBUG] [Thread-180646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:55:46.303 [DEBUG] [Thread-180646] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:55:46.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:55:46.305 [DEBUG] [Thread-180646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:55:46.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:55:46.358 [DEBUG] [Thread-180646] [transport.py] [_log()] userauth is OK
2026-04-12T01:55:46.358 [DEBUG] [Thread-180646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:55:46.359 [DEBUG] [Thread-180646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:55:46.359 [DEBUG] [Thread-180646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:55:46.359 [DEBUG] [Thread-180646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:55:46.378 [INFO] [Thread-180646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:55:46.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:55:46.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:55:47.199 [DEBUG] [Thread-180646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:55:47.199 [DEBUG] [Thread-180646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:55:47.247 [DEBUG] [Thread-180646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:55:47.247 [DEBUG] [Thread-180646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:55:47.256 [DEBUG] [Thread-180646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:55:47.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:55:47.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-04-12T01:55:47.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-04-12T01:55:47.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:55:47.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:55:47.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:55:47.293 [DEBUG] [Thread-180646] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:55:51.507 [DEBUG] [Thread-180648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:55:56.215 [DEBUG] [Thread-180649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:11.266 [DEBUG] [Thread-180650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:17.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:56:17.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:56:17.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-04-12T01:56:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 56, 9), -0.02003, 100.102, 0.0, 17.8211, 10.1668, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:56:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:56:09
2026-04-12T01:56:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:56:19.199 [DEBUG] [Thread-180651] [transport.py] [_log()] starting thread (client mode): 0xae537c40
2026-04-12T01:56:19.199 [DEBUG] [Thread-180651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:56:19.212 [DEBUG] [Thread-180651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:56:19.212 [INFO] [Thread-180651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:56:19.215 [DEBUG] [Thread-180651] [transport.py] [_log()] client lang: <none>
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] server lang: <none>
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] kex follows: False
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] Compression: none
2026-04-12T01:56:19.216 [DEBUG] [Thread-180651] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:56:19.228 [DEBUG] [Thread-180651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:56:19.233 [DEBUG] [Thread-180651] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:56:19.233 [DEBUG] [Thread-180651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:56:19.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:56:19.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:56:19.235 [DEBUG] [Thread-180651] [transport.py] [_log()] userauth is OK
2026-04-12T01:56:19.235 [DEBUG] [Thread-180651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:56:19.235 [DEBUG] [Thread-180651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:56:19.235 [DEBUG] [Thread-180651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:56:19.235 [DEBUG] [Thread-180651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:56:19.250 [INFO] [Thread-180651] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:56:19.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:56:20.038 [DEBUG] [Thread-180651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:56:20.038 [DEBUG] [Thread-180651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:56:20.039 [DEBUG] [Thread-180651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:56:20.079 [DEBUG] [Thread-180651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:56:20.079 [DEBUG] [Thread-180651] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:56:20.083 [DEBUG] [Thread-180651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:56:20.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:56:20.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:56:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:56:20.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:56:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:56:20.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:56:20.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:56:20.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:56:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:56:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.996984 -999.00  +10.10  17.15     98   +9.80 1 3 1 3 1     0    0 0.29 -0.10 ----- 14.1 17.1 276.4 25.2 11.7 -1.3 11.5 -2.1 11.1 -2.0 11.4 -0.9
2026-04-12T01:56:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:56:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:56:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.996984
2026-04-12T01:56:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:56:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:56:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:56:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:56:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:56:20.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:56:09', tmtdew=-0.02003, humidity=100.102, cloud=0.0, wind=17.8211, temperature=10.1668, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:55:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:56:20.108 [DEBUG] [Thread-180651] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:56:20.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:56:20.216 [DEBUG] [Thread-180654] [transport.py] [_log()] starting thread (client mode): 0xae5340d0
2026-04-12T01:56:20.216 [DEBUG] [Thread-180654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:56:20.231 [DEBUG] [Thread-180654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:56:20.231 [INFO] [Thread-180654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:56:20.238 [DEBUG] [Thread-180654] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:56:20.238 [DEBUG] [Thread-180654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:56:20.238 [DEBUG] [Thread-180654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] client lang: <none>
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] server lang: <none>
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] kex follows: False
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] Compression: none
2026-04-12T01:56:20.239 [DEBUG] [Thread-180654] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:56:20.298 [DEBUG] [Thread-180654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:56:20.298 [DEBUG] [Thread-180654] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:56:20.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:56:20.300 [DEBUG] [Thread-180654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:56:20.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:56:20.354 [DEBUG] [Thread-180654] [transport.py] [_log()] userauth is OK
2026-04-12T01:56:20.354 [DEBUG] [Thread-180654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:56:20.355 [DEBUG] [Thread-180654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:56:20.355 [DEBUG] [Thread-180654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:56:20.355 [DEBUG] [Thread-180654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:56:20.373 [INFO] [Thread-180654] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:56:20.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:56:20.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:56:21.196 [DEBUG] [Thread-180654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:56:21.197 [DEBUG] [Thread-180654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:56:21.245 [DEBUG] [Thread-180654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:56:21.245 [DEBUG] [Thread-180654] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:56:21.254 [DEBUG] [Thread-180654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:56:21.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:56:21.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-04-12T01:56:21.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:56:21.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:56:21.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:56:21.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:56:21.291 [DEBUG] [Thread-180654] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:56:23.743 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:23.744 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:26.304 [DEBUG] [Thread-180656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:41.364 [DEBUG] [Thread-180657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:51.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:56:51.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:56:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:56:51.565 [DEBUG] [Thread-180658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:56:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 56, 45), -0.03999, 100.204, 0.0, 20.219, 10.5004, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:56:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:56:45
2026-04-12T01:56:52.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:56:53.160 [DEBUG] [Thread-180659] [transport.py] [_log()] starting thread (client mode): 0xb0fcef20
2026-04-12T01:56:53.160 [DEBUG] [Thread-180659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:56:53.180 [DEBUG] [Thread-180659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:56:53.180 [INFO] [Thread-180659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] client lang: <none>
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] server lang: <none>
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] kex follows: False
2026-04-12T01:56:53.183 [DEBUG] [Thread-180659] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:56:53.184 [DEBUG] [Thread-180659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:56:53.184 [DEBUG] [Thread-180659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:56:53.184 [DEBUG] [Thread-180659] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:56:53.184 [DEBUG] [Thread-180659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:56:53.184 [DEBUG] [Thread-180659] [transport.py] [_log()] Compression: none
2026-04-12T01:56:53.184 [DEBUG] [Thread-180659] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:56:53.203 [DEBUG] [Thread-180659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:56:53.204 [DEBUG] [Thread-180659] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:56:53.205 [DEBUG] [Thread-180659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:56:53.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:56:53.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:56:53.207 [DEBUG] [Thread-180659] [transport.py] [_log()] userauth is OK
2026-04-12T01:56:53.207 [DEBUG] [Thread-180659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:56:53.207 [DEBUG] [Thread-180659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:56:53.208 [DEBUG] [Thread-180659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:56:53.208 [DEBUG] [Thread-180659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:56:53.231 [INFO] [Thread-180659] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:56:53.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:56:54.045 [DEBUG] [Thread-180659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:56:54.046 [DEBUG] [Thread-180659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:56:54.046 [DEBUG] [Thread-180659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:56:54.087 [DEBUG] [Thread-180659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:56:54.087 [DEBUG] [Thread-180659] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:56:54.091 [DEBUG] [Thread-180659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:56:54.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:56:54.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:56:54.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:56:54.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:56:54.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:56:54.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:56:54.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:56:54.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:56:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:56:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.997331 -999.00  +10.10  17.40     98   +9.80 1 3 1 3 1     0    0 0.29 -0.09 ----- 14.6 17.4 274.4 20.8 11.6 -1.2 11.5 -1.7 11.1 -1.1 11.5 -0.6
2026-04-12T01:56:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:56:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:56:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.997331
2026-04-12T01:56:54.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:56:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:56:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:56:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:56:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:56:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:56:45', tmtdew=-0.03999, humidity=100.204, cloud=0.0, wind=20.219, temperature=10.5004, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:56:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:56:54.112 [DEBUG] [Thread-180659] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:56:54.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:56:54.206 [DEBUG] [Thread-180662] [transport.py] [_log()] starting thread (client mode): 0xae5b2a10
2026-04-12T01:56:54.206 [DEBUG] [Thread-180662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:56:54.221 [DEBUG] [Thread-180662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:56:54.222 [INFO] [Thread-180662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:56:54.229 [DEBUG] [Thread-180662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:56:54.229 [DEBUG] [Thread-180662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:56:54.229 [DEBUG] [Thread-180662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] client lang: <none>
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] server lang: <none>
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] kex follows: False
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] Compression: none
2026-04-12T01:56:54.230 [DEBUG] [Thread-180662] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:56:54.289 [DEBUG] [Thread-180662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:56:54.290 [DEBUG] [Thread-180662] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:56:54.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:56:54.291 [DEBUG] [Thread-180662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:56:54.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:56:54.346 [DEBUG] [Thread-180662] [transport.py] [_log()] userauth is OK
2026-04-12T01:56:54.346 [DEBUG] [Thread-180662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:56:54.346 [DEBUG] [Thread-180662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:56:54.346 [DEBUG] [Thread-180662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:56:54.346 [DEBUG] [Thread-180662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:56:54.371 [INFO] [Thread-180662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:56:54.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:56:54.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:56:55.223 [DEBUG] [Thread-180662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:56:55.224 [DEBUG] [Thread-180662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:56:55.271 [DEBUG] [Thread-180662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:56:55.271 [DEBUG] [Thread-180662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:56:55.280 [DEBUG] [Thread-180662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:56:55.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:56:55.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-04-12T01:56:55.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:56:55.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:56:55.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:56:55.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:56:55.315 [DEBUG] [Thread-180662] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:56:56.403 [DEBUG] [Thread-180664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:11.461 [DEBUG] [Thread-180665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:23.950 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:23.951 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:57:25.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:57:25.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-04-12T01:57:26.498 [DEBUG] [Thread-180666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:26.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 56, 45), -0.03999, 100.204, 0.0, 20.219, 10.5004, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:57:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:56:45
2026-04-12T01:57:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:57:27.234 [DEBUG] [Thread-180667] [transport.py] [_log()] starting thread (client mode): 0xae5633a0
2026-04-12T01:57:27.234 [DEBUG] [Thread-180667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:57:27.256 [DEBUG] [Thread-180667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:57:27.256 [INFO] [Thread-180667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:57:27.259 [DEBUG] [Thread-180667] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] client lang: <none>
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] server lang: <none>
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] kex follows: False
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:57:27.260 [DEBUG] [Thread-180667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:57:27.261 [DEBUG] [Thread-180667] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:57:27.261 [DEBUG] [Thread-180667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:57:27.261 [DEBUG] [Thread-180667] [transport.py] [_log()] Compression: none
2026-04-12T01:57:27.261 [DEBUG] [Thread-180667] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:57:27.278 [DEBUG] [Thread-180667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:57:27.279 [DEBUG] [Thread-180667] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:57:27.279 [DEBUG] [Thread-180667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:57:27.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:57:27.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:57:27.281 [DEBUG] [Thread-180667] [transport.py] [_log()] userauth is OK
2026-04-12T01:57:27.282 [DEBUG] [Thread-180667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:57:27.282 [DEBUG] [Thread-180667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:57:27.282 [DEBUG] [Thread-180667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:57:27.282 [DEBUG] [Thread-180667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:57:27.306 [INFO] [Thread-180667] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:57:27.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:57:28.089 [DEBUG] [Thread-180667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:57:28.089 [DEBUG] [Thread-180667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:57:28.090 [DEBUG] [Thread-180667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:57:28.130 [DEBUG] [Thread-180667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:57:28.130 [DEBUG] [Thread-180667] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:57:28.133 [DEBUG] [Thread-180667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:57:28.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:57:28.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:57:28.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:57:28.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:57:28.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:57:28.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:57:28.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:57:28.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:57:28.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:57:28.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.997678 -999.00  +10.10  13.72     98   +9.80 1 3 1 3 1     0    0 0.29 -0.23 ----- 16.7 13.7 276.4 22.8 11.6 -1.6 11.5 -1.6 11.1 -1.7 11.5 -0.7
2026-04-12T01:57:28.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:57:28.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:57:28.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.997678
2026-04-12T01:57:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:57:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:57:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:57:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:57:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:57:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:56:45', tmtdew=-0.03999, humidity=100.204, cloud=0.0, wind=20.219, temperature=10.5004, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:56:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:57:28.158 [DEBUG] [Thread-180667] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:57:28.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:57:28.247 [DEBUG] [Thread-180670] [transport.py] [_log()] starting thread (client mode): 0xae5626b0
2026-04-12T01:57:28.247 [DEBUG] [Thread-180670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:57:28.261 [DEBUG] [Thread-180670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:57:28.261 [INFO] [Thread-180670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] client lang: <none>
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] server lang: <none>
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] kex follows: False
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:57:28.269 [DEBUG] [Thread-180670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:57:28.270 [DEBUG] [Thread-180670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:57:28.270 [DEBUG] [Thread-180670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:57:28.270 [DEBUG] [Thread-180670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:57:28.270 [DEBUG] [Thread-180670] [transport.py] [_log()] Compression: none
2026-04-12T01:57:28.270 [DEBUG] [Thread-180670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:57:28.332 [DEBUG] [Thread-180670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:57:28.333 [DEBUG] [Thread-180670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:57:28.334 [DEBUG] [Thread-180670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:57:28.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:57:28.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:57:28.389 [DEBUG] [Thread-180670] [transport.py] [_log()] userauth is OK
2026-04-12T01:57:28.389 [DEBUG] [Thread-180670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:57:28.389 [DEBUG] [Thread-180670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:57:28.389 [DEBUG] [Thread-180670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:57:28.390 [DEBUG] [Thread-180670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:57:28.411 [INFO] [Thread-180670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:57:28.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:57:28.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:57:29.244 [DEBUG] [Thread-180670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:57:29.244 [DEBUG] [Thread-180670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:57:29.292 [DEBUG] [Thread-180670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:57:29.292 [DEBUG] [Thread-180670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:57:29.301 [DEBUG] [Thread-180670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:57:29.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:57:29.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:57:29.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-04-12T01:57:29.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:57:29.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:57:29.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:57:29.338 [DEBUG] [Thread-180670] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:57:41.531 [DEBUG] [Thread-180672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:51.624 [DEBUG] [Thread-180673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:56.589 [DEBUG] [Thread-180674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:57:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:57:59.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:57:59.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-04-12T01:58:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 57, 20), 0.03247, 100.085, 0.0, 20.9977, 10.1668, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:58:00.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:57:20
2026-04-12T01:58:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:58:01.283 [DEBUG] [Thread-180675] [transport.py] [_log()] starting thread (client mode): 0xae5b22f0
2026-04-12T01:58:01.283 [DEBUG] [Thread-180675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:58:01.303 [DEBUG] [Thread-180675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:58:01.303 [INFO] [Thread-180675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] client lang: <none>
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] server lang: <none>
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] kex follows: False
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:58:01.306 [DEBUG] [Thread-180675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:58:01.307 [DEBUG] [Thread-180675] [transport.py] [_log()] Compression: none
2026-04-12T01:58:01.307 [DEBUG] [Thread-180675] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:58:01.323 [DEBUG] [Thread-180675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:58:01.323 [DEBUG] [Thread-180675] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:58:01.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:58:01.324 [DEBUG] [Thread-180675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:58:01.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:58:01.365 [DEBUG] [Thread-180675] [transport.py] [_log()] userauth is OK
2026-04-12T01:58:01.365 [DEBUG] [Thread-180675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:58:01.365 [DEBUG] [Thread-180675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:58:01.365 [DEBUG] [Thread-180675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:58:01.366 [DEBUG] [Thread-180675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:58:01.402 [INFO] [Thread-180675] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:58:01.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:58:02.169 [DEBUG] [Thread-180675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:58:02.170 [DEBUG] [Thread-180675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:58:02.170 [DEBUG] [Thread-180675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:58:02.210 [DEBUG] [Thread-180675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:58:02.210 [DEBUG] [Thread-180675] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:58:02.213 [DEBUG] [Thread-180675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:58:02.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:58:02.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:58:02.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:58:02.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:58:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:58:02.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:58:02.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:58:02.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:58:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:58:02.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.998025 -999.00  +10.10  20.52     98   +9.80 1 3 1 3 1     0    0 0.29 -0.23 ----- 22.6 20.5 279.0 24.4 11.6 -1.4 11.5 -1.6 11.0 -2.1 11.4 -0.8
2026-04-12T01:58:02.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:58:02.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:58:02.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.998025
2026-04-12T01:58:02.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:58:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:58:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:58:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:58:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:58:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:57:20', tmtdew=0.03247, humidity=100.085, cloud=0.0, wind=20.9977, temperature=10.1668, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:57:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:58:02.240 [DEBUG] [Thread-180675] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:58:02.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:58:02.334 [DEBUG] [Thread-180678] [transport.py] [_log()] starting thread (client mode): 0xb0f6fca0
2026-04-12T01:58:02.334 [DEBUG] [Thread-180678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:58:02.348 [DEBUG] [Thread-180678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:58:02.348 [INFO] [Thread-180678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] client lang: <none>
2026-04-12T01:58:02.356 [DEBUG] [Thread-180678] [transport.py] [_log()] server lang: <none>
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] kex follows: False
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] Compression: none
2026-04-12T01:58:02.357 [DEBUG] [Thread-180678] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:58:02.412 [DEBUG] [Thread-180678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:58:02.412 [DEBUG] [Thread-180678] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:58:02.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:58:02.413 [DEBUG] [Thread-180678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:58:02.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:58:02.469 [DEBUG] [Thread-180678] [transport.py] [_log()] userauth is OK
2026-04-12T01:58:02.469 [DEBUG] [Thread-180678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:58:02.469 [DEBUG] [Thread-180678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:58:02.469 [DEBUG] [Thread-180678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:58:02.469 [DEBUG] [Thread-180678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:58:02.488 [INFO] [Thread-180678] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:58:02.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:58:02.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:58:03.316 [DEBUG] [Thread-180678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:58:03.316 [DEBUG] [Thread-180678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:58:03.364 [DEBUG] [Thread-180678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:58:03.364 [DEBUG] [Thread-180678] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:58:03.373 [DEBUG] [Thread-180678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:58:03.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:58:03.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-04-12T01:58:03.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:58:03.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:58:03.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:58:03.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:58:03.410 [DEBUG] [Thread-180678] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:58:11.626 [DEBUG] [Thread-180680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:58:24.155 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:58:24.156 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:58:26.681 [DEBUG] [Thread-180681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:58:33.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:58:33.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:58:33.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:58:34.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 57, 56), 0.02242, 100.152, 0.0, 20.5567, 10.2662, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:58:34.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:57:56
2026-04-12T01:58:35.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:58:35.289 [DEBUG] [Thread-180682] [transport.py] [_log()] starting thread (client mode): 0xae5087f0
2026-04-12T01:58:35.289 [DEBUG] [Thread-180682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:58:35.309 [DEBUG] [Thread-180682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:58:35.309 [INFO] [Thread-180682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] client lang: <none>
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] server lang: <none>
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] kex follows: False
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:58:35.313 [DEBUG] [Thread-180682] [transport.py] [_log()] Compression: none
2026-04-12T01:58:35.314 [DEBUG] [Thread-180682] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:58:35.329 [DEBUG] [Thread-180682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:58:35.330 [DEBUG] [Thread-180682] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:58:35.330 [DEBUG] [Thread-180682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:58:35.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:58:35.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:58:35.332 [DEBUG] [Thread-180682] [transport.py] [_log()] userauth is OK
2026-04-12T01:58:35.332 [DEBUG] [Thread-180682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:58:35.332 [DEBUG] [Thread-180682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:58:35.332 [DEBUG] [Thread-180682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:58:35.332 [DEBUG] [Thread-180682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:58:35.350 [INFO] [Thread-180682] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:58:35.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:58:36.150 [DEBUG] [Thread-180682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:58:36.151 [DEBUG] [Thread-180682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:58:36.151 [DEBUG] [Thread-180682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:58:36.192 [DEBUG] [Thread-180682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:58:36.192 [DEBUG] [Thread-180682] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:58:36.196 [DEBUG] [Thread-180682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:58:36.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:58:36.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:58:36.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:58:36.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:58:36.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:58:36.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:58:36.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:58:36.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:58:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:58:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.998720 -999.00  +10.10  22.36     98   +9.80 1 3 1 3 1     0    0 0.29 -0.22 ----- 19.7 22.4 280.4 28.2 11.6 -1.4 11.4 -1.5 10.9 -1.8 11.3 -0.6
2026-04-12T01:58:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:58:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:58:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.998720
2026-04-12T01:58:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:58:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:58:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:58:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:58:36.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:58:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:57:56', tmtdew=0.02242, humidity=100.152, cloud=0.0, wind=20.5567, temperature=10.2662, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:58:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:58:36.222 [DEBUG] [Thread-180682] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:58:36.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:58:36.315 [DEBUG] [Thread-180685] [transport.py] [_log()] starting thread (client mode): 0xae537fa0
2026-04-12T01:58:36.315 [DEBUG] [Thread-180685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:58:36.330 [DEBUG] [Thread-180685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:58:36.330 [INFO] [Thread-180685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:58:36.337 [DEBUG] [Thread-180685] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:58:36.337 [DEBUG] [Thread-180685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:58:36.337 [DEBUG] [Thread-180685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:58:36.337 [DEBUG] [Thread-180685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:36.337 [DEBUG] [Thread-180685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] client lang: <none>
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] server lang: <none>
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] kex follows: False
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] Compression: none
2026-04-12T01:58:36.338 [DEBUG] [Thread-180685] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:58:36.396 [DEBUG] [Thread-180685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:58:36.397 [DEBUG] [Thread-180685] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:58:36.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:58:36.397 [DEBUG] [Thread-180685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:58:36.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:58:36.456 [DEBUG] [Thread-180685] [transport.py] [_log()] userauth is OK
2026-04-12T01:58:36.456 [DEBUG] [Thread-180685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:58:36.456 [DEBUG] [Thread-180685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:58:36.456 [DEBUG] [Thread-180685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:58:36.456 [DEBUG] [Thread-180685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:58:36.479 [INFO] [Thread-180685] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:58:36.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:58:36.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:58:37.302 [DEBUG] [Thread-180685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:58:37.303 [DEBUG] [Thread-180685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:58:37.351 [DEBUG] [Thread-180685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:58:37.351 [DEBUG] [Thread-180685] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:58:37.361 [DEBUG] [Thread-180685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:58:37.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:58:37.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-04-12T01:58:37.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-04-12T01:58:37.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:58:37.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:58:37.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:58:37.401 [DEBUG] [Thread-180685] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:58:41.719 [DEBUG] [Thread-180687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:58:51.695 [DEBUG] [Thread-180688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:58:56.782 [DEBUG] [Thread-180689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:07.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:59:07.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:59:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T01:59:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 58, 31), 0.02242, 100.152, 0.0, 20.6449, 10.2662, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:59:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:58:31
2026-04-12T01:59:09.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:59:09.267 [DEBUG] [Thread-180690] [transport.py] [_log()] starting thread (client mode): 0xae5366b0
2026-04-12T01:59:09.267 [DEBUG] [Thread-180690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:59:09.286 [DEBUG] [Thread-180690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:59:09.286 [INFO] [Thread-180690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:59:09.289 [DEBUG] [Thread-180690] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:59:09.289 [DEBUG] [Thread-180690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:59:09.289 [DEBUG] [Thread-180690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] client lang: <none>
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] server lang: <none>
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] kex follows: False
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] Compression: none
2026-04-12T01:59:09.290 [DEBUG] [Thread-180690] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:59:09.308 [DEBUG] [Thread-180690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:59:09.308 [DEBUG] [Thread-180690] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:59:09.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:59:09.309 [DEBUG] [Thread-180690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:59:09.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:59:09.311 [DEBUG] [Thread-180690] [transport.py] [_log()] userauth is OK
2026-04-12T01:59:09.312 [DEBUG] [Thread-180690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:59:09.312 [DEBUG] [Thread-180690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:59:09.312 [DEBUG] [Thread-180690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:59:09.312 [DEBUG] [Thread-180690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:59:09.346 [INFO] [Thread-180690] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:59:09.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:59:10.178 [DEBUG] [Thread-180690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:59:10.178 [DEBUG] [Thread-180690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:59:10.179 [DEBUG] [Thread-180690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:59:10.219 [DEBUG] [Thread-180690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:59:10.219 [DEBUG] [Thread-180690] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:59:10.222 [DEBUG] [Thread-180690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:59:10.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:59:10.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:59:10.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:59:10.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:59:10.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:59:10.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:59:10.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:59:10.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:59:10.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:59:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.999067 -999.00  +10.00  21.27     98   +9.70 1 3 1 3 1     0    0 0.29 -0.19 ----- 20.9 21.3 277.2 29.2 11.5 -1.2 11.4 -1.7 10.9 -1.7 11.3 -0.6
2026-04-12T01:59:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:59:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:59:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.999067
2026-04-12T01:59:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:59:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:59:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:59:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:59:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:59:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:58:31', tmtdew=0.02242, humidity=100.152, cloud=0.0, wind=20.6449, temperature=10.2662, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:58:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:59:10.247 [DEBUG] [Thread-180690] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:59:10.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:59:10.340 [DEBUG] [Thread-180693] [transport.py] [_log()] starting thread (client mode): 0xae5b3c10
2026-04-12T01:59:10.340 [DEBUG] [Thread-180693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:59:10.355 [DEBUG] [Thread-180693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:59:10.356 [INFO] [Thread-180693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:59:10.363 [DEBUG] [Thread-180693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] client lang: <none>
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] server lang: <none>
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] kex follows: False
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:59:10.364 [DEBUG] [Thread-180693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:59:10.365 [DEBUG] [Thread-180693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:59:10.365 [DEBUG] [Thread-180693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:59:10.365 [DEBUG] [Thread-180693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:59:10.365 [DEBUG] [Thread-180693] [transport.py] [_log()] Compression: none
2026-04-12T01:59:10.365 [DEBUG] [Thread-180693] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:59:10.422 [DEBUG] [Thread-180693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:59:10.422 [DEBUG] [Thread-180693] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:59:10.422 [DEBUG] [Thread-180693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:59:10.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:59:10.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:59:10.481 [DEBUG] [Thread-180693] [transport.py] [_log()] userauth is OK
2026-04-12T01:59:10.481 [DEBUG] [Thread-180693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:59:10.482 [DEBUG] [Thread-180693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:59:10.482 [DEBUG] [Thread-180693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:59:10.482 [DEBUG] [Thread-180693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:59:10.509 [INFO] [Thread-180693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:59:10.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:59:10.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:59:11.330 [DEBUG] [Thread-180693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:59:11.331 [DEBUG] [Thread-180693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:59:11.378 [DEBUG] [Thread-180693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:59:11.378 [DEBUG] [Thread-180693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:59:11.387 [DEBUG] [Thread-180693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:59:11.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:59:11.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-04-12T01:59:11.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T01:59:11.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:59:11.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:59:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:59:11.424 [DEBUG] [Thread-180693] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:59:11.818 [DEBUG] [Thread-180695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:24.360 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:24.361 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:26.879 [DEBUG] [Thread-180696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:41.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T01:59:41.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T01:59:41.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-04-12T01:59:41.914 [DEBUG] [Thread-180697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:42.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 59, 8), 0.02251, 100.152, 0.0, 21.8797, 10.1999, 2, 2, 0, 2, 0, 0),)
2026-04-12T01:59:42.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:59:08
2026-04-12T01:59:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T01:59:43.262 [DEBUG] [Thread-180698] [transport.py] [_log()] starting thread (client mode): 0xae5632e0
2026-04-12T01:59:43.262 [DEBUG] [Thread-180698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:59:43.282 [DEBUG] [Thread-180698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T01:59:43.282 [INFO] [Thread-180698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] client lang: <none>
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] server lang: <none>
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] kex follows: False
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:59:43.286 [DEBUG] [Thread-180698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:59:43.287 [DEBUG] [Thread-180698] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:59:43.287 [DEBUG] [Thread-180698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:59:43.287 [DEBUG] [Thread-180698] [transport.py] [_log()] Compression: none
2026-04-12T01:59:43.287 [DEBUG] [Thread-180698] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:59:43.304 [DEBUG] [Thread-180698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:59:43.304 [DEBUG] [Thread-180698] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:59:43.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T01:59:43.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:59:43.306 [DEBUG] [Thread-180698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T01:59:43.306 [DEBUG] [Thread-180698] [transport.py] [_log()] userauth is OK
2026-04-12T01:59:43.306 [DEBUG] [Thread-180698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:59:43.307 [DEBUG] [Thread-180698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:59:43.307 [DEBUG] [Thread-180698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T01:59:43.307 [DEBUG] [Thread-180698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:59:43.330 [INFO] [Thread-180698] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:59:43.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:59:44.138 [DEBUG] [Thread-180698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:59:44.138 [DEBUG] [Thread-180698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:59:44.138 [DEBUG] [Thread-180698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T01:59:44.179 [DEBUG] [Thread-180698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:59:44.179 [DEBUG] [Thread-180698] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:59:44.181 [DEBUG] [Thread-180698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:59:44.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:59:44.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T01:59:44.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T01:59:44.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T01:59:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:59:44.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T01:59:44.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:59:44.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:59:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T01:59:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.999414 -999.00  +10.00  17.94     98   +9.70 1 3 1 3 1     0    0 0.29 -0.26 ----- 18.2 17.9 272.6 23.3 11.5 -1.2 11.3 -1.4 10.9 -1.4 11.3 -0.5
2026-04-12T01:59:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T01:59:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T01:59:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.999414
2026-04-12T01:59:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T01:59:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T01:59:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T01:59:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T01:59:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T01:59:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:59:08', tmtdew=0.02251, humidity=100.152, cloud=0.0, wind=21.8797, temperature=10.1999, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:59:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T01:59:44.205 [DEBUG] [Thread-180698] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:59:44.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T01:59:44.299 [DEBUG] [Thread-180701] [transport.py] [_log()] starting thread (client mode): 0xae563bb0
2026-04-12T01:59:44.299 [DEBUG] [Thread-180701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T01:59:44.313 [DEBUG] [Thread-180701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T01:59:44.313 [INFO] [Thread-180701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T01:59:44.320 [DEBUG] [Thread-180701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] client lang: <none>
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] server lang: <none>
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] kex follows: False
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T01:59:44.321 [DEBUG] [Thread-180701] [transport.py] [_log()] Compression: none
2026-04-12T01:59:44.322 [DEBUG] [Thread-180701] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T01:59:44.378 [DEBUG] [Thread-180701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T01:59:44.379 [DEBUG] [Thread-180701] [transport.py] [_log()] Switch to new keys ...
2026-04-12T01:59:44.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T01:59:44.380 [DEBUG] [Thread-180701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T01:59:44.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T01:59:44.435 [DEBUG] [Thread-180701] [transport.py] [_log()] userauth is OK
2026-04-12T01:59:44.435 [DEBUG] [Thread-180701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T01:59:44.435 [DEBUG] [Thread-180701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T01:59:44.435 [DEBUG] [Thread-180701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T01:59:44.435 [DEBUG] [Thread-180701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T01:59:44.457 [INFO] [Thread-180701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T01:59:44.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T01:59:44.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T01:59:45.282 [DEBUG] [Thread-180701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T01:59:45.283 [DEBUG] [Thread-180701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T01:59:45.331 [DEBUG] [Thread-180701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T01:59:45.331 [DEBUG] [Thread-180701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T01:59:45.339 [DEBUG] [Thread-180701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T01:59:45.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T01:59:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T01:59:45.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-04-12T01:59:45.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T01:59:45.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T01:59:45.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T01:59:45.373 [DEBUG] [Thread-180701] [transport.py] [_log()] EOF in transport thread
2026-04-12T01:59:51.761 [DEBUG] [Thread-180703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T01:59:56.950 [DEBUG] [Thread-180704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:12.007 [DEBUG] [Thread-180705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:15.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:00:15.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:00:15.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-04-12T02:00:16.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 1, 59, 43), -0.0501, 100.27, 0.0, 17.9611, 10.6661, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:00:16.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 01:59:43
2026-04-12T02:00:17.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:00:17.248 [DEBUG] [Thread-180706] [transport.py] [_log()] starting thread (client mode): 0xae5617e0
2026-04-12T02:00:17.249 [DEBUG] [Thread-180706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:00:17.270 [DEBUG] [Thread-180706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:00:17.271 [INFO] [Thread-180706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] client lang: <none>
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] server lang: <none>
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] kex follows: False
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:00:17.274 [DEBUG] [Thread-180706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:00:17.275 [DEBUG] [Thread-180706] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:00:17.275 [DEBUG] [Thread-180706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:00:17.275 [DEBUG] [Thread-180706] [transport.py] [_log()] Compression: none
2026-04-12T02:00:17.275 [DEBUG] [Thread-180706] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:00:17.291 [DEBUG] [Thread-180706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:00:17.291 [DEBUG] [Thread-180706] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:00:17.291 [DEBUG] [Thread-180706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:00:17.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:00:17.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:00:17.292 [DEBUG] [Thread-180706] [transport.py] [_log()] userauth is OK
2026-04-12T02:00:17.292 [DEBUG] [Thread-180706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:00:17.292 [DEBUG] [Thread-180706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:00:17.292 [DEBUG] [Thread-180706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:00:17.292 [DEBUG] [Thread-180706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:00:17.309 [INFO] [Thread-180706] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:00:17.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:00:18.391 [DEBUG] [Thread-180706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:00:18.391 [DEBUG] [Thread-180706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:00:18.392 [DEBUG] [Thread-180706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:00:18.432 [DEBUG] [Thread-180706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:00:18.432 [DEBUG] [Thread-180706] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:00:18.436 [DEBUG] [Thread-180706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:00:18.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:00:18.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:00:18.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:00:18.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:00:18.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:00:18.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:00:18.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:00:18.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:00:18.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:00:18.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61141.999762 -999.00  +10.10  16.13     98   +9.80 1 3 1 3 1     0    0 0.29 -0.32 ----- 18.1 16.1 277.6 22.9 11.5 -1.1 11.3 -1.2 10.8 -1.1 11.3 -0.6
2026-04-12T02:00:18.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:00:18.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:00:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61141.999762
2026-04-12T02:00:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:00:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:00:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:00:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:00:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:00:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T01:59:43', tmtdew=-0.0501, humidity=100.27, cloud=0.0, wind=17.9611, temperature=10.6661, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-11T23:59:39.437', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:00:18.473 [DEBUG] [Thread-180706] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:00:18.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:00:18.568 [DEBUG] [Thread-180709] [transport.py] [_log()] starting thread (client mode): 0xae50a320
2026-04-12T02:00:18.568 [DEBUG] [Thread-180709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:00:18.583 [DEBUG] [Thread-180709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:00:18.583 [INFO] [Thread-180709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:00:18.594 [DEBUG] [Thread-180709] [transport.py] [_log()] client lang: <none>
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] server lang: <none>
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] kex follows: False
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] Compression: none
2026-04-12T02:00:18.595 [DEBUG] [Thread-180709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:00:18.652 [DEBUG] [Thread-180709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:00:18.653 [DEBUG] [Thread-180709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:00:18.653 [DEBUG] [Thread-180709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:00:18.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:00:18.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:00:18.711 [DEBUG] [Thread-180709] [transport.py] [_log()] userauth is OK
2026-04-12T02:00:18.711 [DEBUG] [Thread-180709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:00:18.711 [DEBUG] [Thread-180709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:00:18.711 [DEBUG] [Thread-180709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:00:18.711 [DEBUG] [Thread-180709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:00:18.730 [INFO] [Thread-180709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:00:18.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:00:18.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:00:19.529 [DEBUG] [Thread-180709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:00:19.529 [DEBUG] [Thread-180709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:00:19.578 [DEBUG] [Thread-180709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:00:19.578 [DEBUG] [Thread-180709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:00:19.589 [DEBUG] [Thread-180709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:00:19.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:00:19.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:00:19.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-04-12T02:00:19.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:00:19.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:00:19.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:00:19.626 [DEBUG] [Thread-180709] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:00:24.565 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:24.567 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:27.047 [DEBUG] [Thread-180711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:42.100 [DEBUG] [Thread-180712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:49.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:00:49.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:00:49.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-04-12T02:00:50.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 0, 19), 0.022415, 100.152, 0.0, 17.9975, 10.2333, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:00:50.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:00:19
2026-04-12T02:00:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:00:51.488 [DEBUG] [Thread-180713] [transport.py] [_log()] starting thread (client mode): 0xb0f40b50
2026-04-12T02:00:51.488 [DEBUG] [Thread-180713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:00:51.510 [DEBUG] [Thread-180713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:00:51.510 [INFO] [Thread-180713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] client lang: <none>
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] server lang: <none>
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] kex follows: False
2026-04-12T02:00:51.514 [DEBUG] [Thread-180713] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:00:51.515 [DEBUG] [Thread-180713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:00:51.515 [DEBUG] [Thread-180713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:00:51.515 [DEBUG] [Thread-180713] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:00:51.515 [DEBUG] [Thread-180713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:00:51.515 [DEBUG] [Thread-180713] [transport.py] [_log()] Compression: none
2026-04-12T02:00:51.515 [DEBUG] [Thread-180713] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:00:51.533 [DEBUG] [Thread-180713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:00:51.533 [DEBUG] [Thread-180713] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:00:51.534 [DEBUG] [Thread-180713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:00:51.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:00:51.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:00:51.536 [DEBUG] [Thread-180713] [transport.py] [_log()] userauth is OK
2026-04-12T02:00:51.536 [DEBUG] [Thread-180713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:00:51.536 [DEBUG] [Thread-180713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:00:51.536 [DEBUG] [Thread-180713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:00:51.536 [DEBUG] [Thread-180713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:00:51.554 [INFO] [Thread-180713] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:00:51.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:00:51.818 [DEBUG] [Thread-180715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:00:52.313 [DEBUG] [Thread-180713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:00:52.313 [DEBUG] [Thread-180713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:00:52.314 [DEBUG] [Thread-180713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:00:52.354 [DEBUG] [Thread-180713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:00:52.354 [DEBUG] [Thread-180713] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:00:52.357 [DEBUG] [Thread-180713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:00:52.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:00:52.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:00:52.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:00:52.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:00:52.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:00:52.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:00:52.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:00:52.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:00:52.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:00:52.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.000108 -999.00  +10.10  17.60     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.8 17.6 290.2 23.2 11.5 -1.3 11.3 -1.4 10.9 -1.5 11.3 -0.5
2026-04-12T02:00:52.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:00:52.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:00:52.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.000108
2026-04-12T02:00:52.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:00:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:00:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:00:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:00:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:00:52.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:00:19', tmtdew=0.022415, humidity=100.152, cloud=0.0, wind=17.9975, temperature=10.2333, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:00:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:00:52.382 [DEBUG] [Thread-180713] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:00:52.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:00:52.468 [DEBUG] [Thread-180717] [transport.py] [_log()] starting thread (client mode): 0xb0fe8ca0
2026-04-12T02:00:52.468 [DEBUG] [Thread-180717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:00:52.485 [DEBUG] [Thread-180717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:00:52.485 [INFO] [Thread-180717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:00:52.496 [DEBUG] [Thread-180717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:00:52.496 [DEBUG] [Thread-180717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:00:52.496 [DEBUG] [Thread-180717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:00:52.496 [DEBUG] [Thread-180717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:52.496 [DEBUG] [Thread-180717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] client lang: <none>
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] server lang: <none>
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] kex follows: False
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] Compression: none
2026-04-12T02:00:52.497 [DEBUG] [Thread-180717] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:00:52.550 [DEBUG] [Thread-180717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:00:52.551 [DEBUG] [Thread-180717] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:00:52.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:00:52.552 [DEBUG] [Thread-180717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:00:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:00:52.607 [DEBUG] [Thread-180717] [transport.py] [_log()] userauth is OK
2026-04-12T02:00:52.608 [DEBUG] [Thread-180717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:00:52.608 [DEBUG] [Thread-180717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:00:52.608 [DEBUG] [Thread-180717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:00:52.608 [DEBUG] [Thread-180717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:00:52.627 [INFO] [Thread-180717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:00:52.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:00:52.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:00:53.445 [DEBUG] [Thread-180717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:00:53.445 [DEBUG] [Thread-180717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:00:53.494 [DEBUG] [Thread-180717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:00:53.494 [DEBUG] [Thread-180717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:00:53.503 [DEBUG] [Thread-180717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:00:53.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:00:53.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-04-12T02:00: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') -> 00000000
2026-04-12T02:00:53.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:00:53.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:00:53.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:00:53.542 [DEBUG] [Thread-180717] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:00:57.138 [DEBUG] [Thread-180719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:12.195 [DEBUG] [Thread-180720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:01:23.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:01:23.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:01:24.772 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:24.773 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 0, 54), -0.04524, 100.238, 0.0, 20.3249, 10.6006, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:01:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:00:54
2026-04-12T02:01:25.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:01:25.347 [DEBUG] [Thread-180721] [transport.py] [_log()] starting thread (client mode): 0xb0fea590
2026-04-12T02:01:25.348 [DEBUG] [Thread-180721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:01:25.367 [DEBUG] [Thread-180721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:01:25.367 [INFO] [Thread-180721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:01:25.370 [DEBUG] [Thread-180721] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:01:25.370 [DEBUG] [Thread-180721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:01:25.370 [DEBUG] [Thread-180721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:01:25.370 [DEBUG] [Thread-180721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:01:25.370 [DEBUG] [Thread-180721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] client lang: <none>
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] server lang: <none>
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] kex follows: False
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] Compression: none
2026-04-12T02:01:25.371 [DEBUG] [Thread-180721] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:01:25.383 [DEBUG] [Thread-180721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:01:25.384 [DEBUG] [Thread-180721] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:01:25.384 [DEBUG] [Thread-180721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:01:25.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:01:25.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:01:25.385 [DEBUG] [Thread-180721] [transport.py] [_log()] userauth is OK
2026-04-12T02:01:25.385 [DEBUG] [Thread-180721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:01:25.385 [DEBUG] [Thread-180721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:01:25.385 [DEBUG] [Thread-180721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:01:25.385 [DEBUG] [Thread-180721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:01:25.403 [INFO] [Thread-180721] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:01:25.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:01:26.174 [DEBUG] [Thread-180721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:01:26.175 [DEBUG] [Thread-180721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:01:26.175 [DEBUG] [Thread-180721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:01:26.215 [DEBUG] [Thread-180721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:01:26.215 [DEBUG] [Thread-180721] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:01:26.219 [DEBUG] [Thread-180721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:01:26.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:01:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:01:26.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:01:26.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:01:26.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:01:26.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:01:26.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:01:26.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:01:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:01:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.000456 -999.00  +10.10  16.83     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.3 16.8 276.2 23.2 11.4 -1.0 11.3 -1.2 10.9 -1.0 11.3 -0.5
2026-04-12T02:01:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:01:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:01:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.000456
2026-04-12T02:01:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:01:26.246 [DEBUG] [Thread-180721] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:01:26.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:01:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:01:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:01:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:01:26.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:00:54', tmtdew=-0.04524, humidity=100.238, cloud=0.0, wind=20.3249, temperature=10.6006, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:00:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:01:26.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:01:26.344 [DEBUG] [Thread-180724] [transport.py] [_log()] starting thread (client mode): 0xb0fe8130
2026-04-12T02:01:26.344 [DEBUG] [Thread-180724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:01:26.359 [DEBUG] [Thread-180724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:01:26.359 [INFO] [Thread-180724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:01:26.367 [DEBUG] [Thread-180724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] client lang: <none>
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] server lang: <none>
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] kex follows: False
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:01:26.368 [DEBUG] [Thread-180724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:01:26.369 [DEBUG] [Thread-180724] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:01:26.369 [DEBUG] [Thread-180724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:01:26.369 [DEBUG] [Thread-180724] [transport.py] [_log()] Compression: none
2026-04-12T02:01:26.369 [DEBUG] [Thread-180724] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:01:26.426 [DEBUG] [Thread-180724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:01:26.427 [DEBUG] [Thread-180724] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:01:26.427 [DEBUG] [Thread-180724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:01:26.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:01:26.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:01:26.486 [DEBUG] [Thread-180724] [transport.py] [_log()] userauth is OK
2026-04-12T02:01:26.486 [DEBUG] [Thread-180724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:01:26.487 [DEBUG] [Thread-180724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:01:26.487 [DEBUG] [Thread-180724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:01:26.487 [DEBUG] [Thread-180724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:01:26.505 [INFO] [Thread-180724] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:01:26.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:01:26.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:01:27.235 [DEBUG] [Thread-180726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:27.334 [DEBUG] [Thread-180724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:01:27.334 [DEBUG] [Thread-180724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:01:27.382 [DEBUG] [Thread-180724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:01:27.382 [DEBUG] [Thread-180724] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:01:27.392 [DEBUG] [Thread-180724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:01:27.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:01:27.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:01:27.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-04-12T02:01:27.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:01:27.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:01:27.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:01:27.429 [DEBUG] [Thread-180724] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:01:42.288 [DEBUG] [Thread-180727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:51.876 [DEBUG] [Thread-180728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:57.325 [DEBUG] [Thread-180729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:01:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:01:57.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:01:57.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-04-12T02:01:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 1, 29), 0.01988, 100.169, 0.0, 18.6685, 10.2334, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:01:58.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:01:29
2026-04-12T02:01:59.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:01:59.263 [DEBUG] [Thread-180730] [transport.py] [_log()] starting thread (client mode): 0xae560160
2026-04-12T02:01:59.263 [DEBUG] [Thread-180730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:01:59.283 [DEBUG] [Thread-180730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:01:59.284 [INFO] [Thread-180730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:01:59.287 [DEBUG] [Thread-180730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] client lang: <none>
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] server lang: <none>
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] kex follows: False
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] Compression: none
2026-04-12T02:01:59.288 [DEBUG] [Thread-180730] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:01:59.309 [DEBUG] [Thread-180730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:01:59.309 [DEBUG] [Thread-180730] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:01:59.310 [DEBUG] [Thread-180730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:01:59.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:01:59.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:01:59.353 [DEBUG] [Thread-180730] [transport.py] [_log()] userauth is OK
2026-04-12T02:01:59.354 [DEBUG] [Thread-180730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:01:59.354 [DEBUG] [Thread-180730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:01:59.354 [DEBUG] [Thread-180730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:01:59.354 [DEBUG] [Thread-180730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:01:59.391 [INFO] [Thread-180730] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:01:59.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:02:00.180 [DEBUG] [Thread-180730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:02:00.181 [DEBUG] [Thread-180730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:02:00.181 [DEBUG] [Thread-180730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:02:00.222 [DEBUG] [Thread-180730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:02:00.222 [DEBUG] [Thread-180730] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:02:00.225 [DEBUG] [Thread-180730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:02:00.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:02:00.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:02:00.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:02:00.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:02:00.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:02:00.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:02:00.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:02:00.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:02:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:02:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.000803 -999.00  +10.10  17.01     98   +9.90 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.1 17.0 277.6 23.8 11.5 -1.3 11.3 -1.5 10.9 -0.9 11.3 -0.7
2026-04-12T02:02:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:02:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:02:00.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.000803
2026-04-12T02:02:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:02:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:02:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:02:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:02:00.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:02:00.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:01:29', tmtdew=0.01988, humidity=100.169, cloud=0.0, wind=18.6685, temperature=10.2334, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:01:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:02:00.243 [DEBUG] [Thread-180730] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:02:00.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:02:00.341 [DEBUG] [Thread-180733] [transport.py] [_log()] starting thread (client mode): 0xae5b06a0
2026-04-12T02:02:00.341 [DEBUG] [Thread-180733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:02:00.356 [DEBUG] [Thread-180733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:02:00.356 [INFO] [Thread-180733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:02:00.363 [DEBUG] [Thread-180733] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] client lang: <none>
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] server lang: <none>
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] kex follows: False
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] Compression: none
2026-04-12T02:02:00.364 [DEBUG] [Thread-180733] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:02:00.420 [DEBUG] [Thread-180733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:02:00.421 [DEBUG] [Thread-180733] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:02:00.421 [DEBUG] [Thread-180733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:02:00.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:02:00.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:02:00.478 [DEBUG] [Thread-180733] [transport.py] [_log()] userauth is OK
2026-04-12T02:02:00.478 [DEBUG] [Thread-180733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:02:00.478 [DEBUG] [Thread-180733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:02:00.478 [DEBUG] [Thread-180733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:02:00.478 [DEBUG] [Thread-180733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:02:00.496 [INFO] [Thread-180733] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:02:00.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:02:00.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:02:01.333 [DEBUG] [Thread-180733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:02:01.333 [DEBUG] [Thread-180733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:02:01.381 [DEBUG] [Thread-180733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:02:01.381 [DEBUG] [Thread-180733] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:02:01.390 [DEBUG] [Thread-180733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:02:01.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:02:01.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-04-12T02:02:01.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-04-12T02:02:01.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:02:01.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:02:01.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:02:01.427 [DEBUG] [Thread-180733] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:02:12.362 [DEBUG] [Thread-180735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:02:24.978 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:02:24.979 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:02:27.416 [DEBUG] [Thread-180736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:02:31.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:02:31.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:02:31.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-04-12T02:02:32.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 2, 5), 0.02738, 100.119, 0.0, 19.4094, 10.2003, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:02:32.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:02:05
2026-04-12T02:02:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:02:33.274 [DEBUG] [Thread-180737] [transport.py] [_log()] starting thread (client mode): 0xae560040
2026-04-12T02:02:33.274 [DEBUG] [Thread-180737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:02:33.294 [DEBUG] [Thread-180737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:02:33.294 [INFO] [Thread-180737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:02:33.297 [DEBUG] [Thread-180737] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] client lang: <none>
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] server lang: <none>
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] kex follows: False
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] Compression: none
2026-04-12T02:02:33.298 [DEBUG] [Thread-180737] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:02:33.316 [DEBUG] [Thread-180737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:02:33.316 [DEBUG] [Thread-180737] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:02:33.317 [DEBUG] [Thread-180737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:02:33.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:02:33.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:02:33.319 [DEBUG] [Thread-180737] [transport.py] [_log()] userauth is OK
2026-04-12T02:02:33.319 [DEBUG] [Thread-180737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:02:33.319 [DEBUG] [Thread-180737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:02:33.319 [DEBUG] [Thread-180737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:02:33.319 [DEBUG] [Thread-180737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:02:33.343 [INFO] [Thread-180737] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:02:33.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:02:34.119 [DEBUG] [Thread-180737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:02:34.119 [DEBUG] [Thread-180737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:02:34.120 [DEBUG] [Thread-180737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:02:34.160 [DEBUG] [Thread-180737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:02:34.160 [DEBUG] [Thread-180737] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:02:34.163 [DEBUG] [Thread-180737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:02:34.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:02:34.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:02:34.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:02:34.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:02:34.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:02:34.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:02:34.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:02:34.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.001150 -999.00  +10.00  16.78     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.1 16.8 276.1 22.5 11.4 -1.2 11.3 -1.6 10.9 -1.4 11.3 -0.6
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.001150
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:02:34.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:02:05', tmtdew=0.02738, humidity=100.119, cloud=0.0, wind=19.4094, temperature=10.2003, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:01:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:02:34.184 [DEBUG] [Thread-180737] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:02:34.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:02:34.264 [DEBUG] [Thread-180740] [transport.py] [_log()] starting thread (client mode): 0xb0f40700
2026-04-12T02:02:34.264 [DEBUG] [Thread-180740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:02:34.279 [DEBUG] [Thread-180740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:02:34.279 [INFO] [Thread-180740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:02:34.287 [DEBUG] [Thread-180740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] client lang: <none>
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] server lang: <none>
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] kex follows: False
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] Compression: none
2026-04-12T02:02:34.288 [DEBUG] [Thread-180740] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:02:34.345 [DEBUG] [Thread-180740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:02:34.346 [DEBUG] [Thread-180740] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:02:34.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:02:34.347 [DEBUG] [Thread-180740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:02:34.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:02:34.402 [DEBUG] [Thread-180740] [transport.py] [_log()] userauth is OK
2026-04-12T02:02:34.402 [DEBUG] [Thread-180740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:02:34.402 [DEBUG] [Thread-180740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:02:34.402 [DEBUG] [Thread-180740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:02:34.402 [DEBUG] [Thread-180740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:02:34.422 [INFO] [Thread-180740] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:02:34.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:02:34.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:02:35.301 [DEBUG] [Thread-180740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:02:35.301 [DEBUG] [Thread-180740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:02:35.349 [DEBUG] [Thread-180740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:02:35.349 [DEBUG] [Thread-180740] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:02:35.359 [DEBUG] [Thread-180740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:02:35.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:02:35.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-04-12T02:02:35.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-04-12T02:02:35.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:02:35.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:02:35.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:02:35.396 [DEBUG] [Thread-180740] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:02:42.452 [DEBUG] [Thread-180742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:02:51.932 [DEBUG] [Thread-180743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:02:57.513 [DEBUG] [Thread-180744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:05.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:03:05.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:03:05.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:03:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 2, 40), -0.05522, 100.304, 0.0, 19.6898, 10.6667, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:03:06.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:02:40
2026-04-12T02:03:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:03:07.228 [DEBUG] [Thread-180745] [transport.py] [_log()] starting thread (client mode): 0xb0fe8850
2026-04-12T02:03:07.228 [DEBUG] [Thread-180745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:03:07.248 [DEBUG] [Thread-180745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:03:07.248 [INFO] [Thread-180745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] client lang: <none>
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] server lang: <none>
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] kex follows: False
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] Compression: none
2026-04-12T02:03:07.251 [DEBUG] [Thread-180745] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:03:07.270 [DEBUG] [Thread-180745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:03:07.270 [DEBUG] [Thread-180745] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:03:07.271 [DEBUG] [Thread-180745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:03:07.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:03:07.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:03:07.273 [DEBUG] [Thread-180745] [transport.py] [_log()] userauth is OK
2026-04-12T02:03:07.273 [DEBUG] [Thread-180745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:03:07.273 [DEBUG] [Thread-180745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:03:07.273 [DEBUG] [Thread-180745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:03:07.273 [DEBUG] [Thread-180745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:03:07.297 [INFO] [Thread-180745] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:03:07.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:03:08.129 [DEBUG] [Thread-180745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:03:08.129 [DEBUG] [Thread-180745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:03:08.130 [DEBUG] [Thread-180745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:03:08.171 [DEBUG] [Thread-180745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:03:08.171 [DEBUG] [Thread-180745] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:03:08.173 [DEBUG] [Thread-180745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:03:08.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:03:08.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:03:08.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:03:08.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:03:08.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:03:08.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:03:08.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:03:08.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:03:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:03:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.001498 -999.00  +10.00  19.46     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 20.3 19.5 278.8 24.0 11.4 -0.9 11.3 -1.4 10.9 -1.1 11.3 -0.4
2026-04-12T02:03:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:03:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:03:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.001498
2026-04-12T02:03:08.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:03:08.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:03:08.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:03:08.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:03:08.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:03:08.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:02:40', tmtdew=-0.05522, humidity=100.304, cloud=0.0, wind=19.6898, temperature=10.6667, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:02:09.427', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:03:08.197 [DEBUG] [Thread-180745] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:03:08.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:03:08.291 [DEBUG] [Thread-180748] [transport.py] [_log()] starting thread (client mode): 0xae5b06a0
2026-04-12T02:03:08.291 [DEBUG] [Thread-180748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:03:08.306 [DEBUG] [Thread-180748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:03:08.306 [INFO] [Thread-180748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:03:08.313 [DEBUG] [Thread-180748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] client lang: <none>
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] server lang: <none>
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] kex follows: False
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] Compression: none
2026-04-12T02:03:08.314 [DEBUG] [Thread-180748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:03:08.373 [DEBUG] [Thread-180748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:03:08.374 [DEBUG] [Thread-180748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:03:08.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:03:08.375 [DEBUG] [Thread-180748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:03:08.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:03:08.429 [DEBUG] [Thread-180748] [transport.py] [_log()] userauth is OK
2026-04-12T02:03:08.429 [DEBUG] [Thread-180748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:03:08.429 [DEBUG] [Thread-180748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:03:08.429 [DEBUG] [Thread-180748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:03:08.429 [DEBUG] [Thread-180748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:03:08.453 [INFO] [Thread-180748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:03:08.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:03:08.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:03:09.253 [DEBUG] [Thread-180748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:03:09.253 [DEBUG] [Thread-180748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:03:09.301 [DEBUG] [Thread-180748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:03:09.301 [DEBUG] [Thread-180748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:03:09.310 [DEBUG] [Thread-180748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:03:09.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:03:09.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-04-12T02:03:09.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:03:09.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:03:09.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:03:09.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:03:09.345 [DEBUG] [Thread-180748] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:03:12.550 [DEBUG] [Thread-180750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:25.184 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:25.185 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:27.613 [DEBUG] [Thread-180751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:03:39.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:03:39.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-04-12T02:03:40.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 3, 16), -0.02266, 100.119, 0.0, 17.8394, 10.1169, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:03:40.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:03:16
2026-04-12T02:03:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:03:41.163 [DEBUG] [Thread-180752] [transport.py] [_log()] starting thread (client mode): 0xae5b6710
2026-04-12T02:03:41.163 [DEBUG] [Thread-180752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:03:41.182 [DEBUG] [Thread-180752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:03:41.182 [INFO] [Thread-180752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:03:41.185 [DEBUG] [Thread-180752] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:03:41.185 [DEBUG] [Thread-180752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:03:41.185 [DEBUG] [Thread-180752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] client lang: <none>
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] server lang: <none>
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] kex follows: False
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:03:41.186 [DEBUG] [Thread-180752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:03:41.187 [DEBUG] [Thread-180752] [transport.py] [_log()] Compression: none
2026-04-12T02:03:41.187 [DEBUG] [Thread-180752] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:03:41.204 [DEBUG] [Thread-180752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:03:41.205 [DEBUG] [Thread-180752] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:03:41.206 [DEBUG] [Thread-180752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:03:41.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:03:41.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:03:41.208 [DEBUG] [Thread-180752] [transport.py] [_log()] userauth is OK
2026-04-12T02:03:41.208 [DEBUG] [Thread-180752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:03:41.209 [DEBUG] [Thread-180752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:03:41.209 [DEBUG] [Thread-180752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:03:41.209 [DEBUG] [Thread-180752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:03:41.226 [INFO] [Thread-180752] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:03:41.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:03:41.927 [DEBUG] [Thread-180752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:03:41.927 [DEBUG] [Thread-180752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:03:41.927 [DEBUG] [Thread-180752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:03:41.968 [DEBUG] [Thread-180752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:03:41.968 [DEBUG] [Thread-180752] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:03:41.972 [DEBUG] [Thread-180752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:03:41.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:03:41.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:03:41.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:03:41.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:03:42.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:03:42.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:03:42.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:03:42.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:03:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:03:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.002192 -999.00  +10.00  20.65     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.3 20.6 277.8 22.5 11.4 -1.1 11.3 -1.3 10.8 -1.5 11.3 -0.5
2026-04-12T02:03:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:03:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:03:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.002192
2026-04-12T02:03:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:03:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:03:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:03:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:03:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:03:42.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:03:16', tmtdew=-0.02266, humidity=100.119, cloud=0.0, wind=17.8394, temperature=10.1169, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:03:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:03:42.006 [DEBUG] [Thread-180752] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:03:42.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:03:42.099 [DEBUG] [Thread-180755] [transport.py] [_log()] starting thread (client mode): 0xae509b70
2026-04-12T02:03:42.099 [DEBUG] [Thread-180755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:03:42.113 [DEBUG] [Thread-180755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:03:42.113 [INFO] [Thread-180755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:03:42.121 [DEBUG] [Thread-180755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] client lang: <none>
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] server lang: <none>
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] kex follows: False
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] Compression: none
2026-04-12T02:03:42.122 [DEBUG] [Thread-180755] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:03:42.181 [DEBUG] [Thread-180755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:03:42.181 [DEBUG] [Thread-180755] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:03:42.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:03:42.183 [DEBUG] [Thread-180755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:03:42.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:03:42.236 [DEBUG] [Thread-180755] [transport.py] [_log()] userauth is OK
2026-04-12T02:03:42.237 [DEBUG] [Thread-180755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:03:42.237 [DEBUG] [Thread-180755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:03:42.237 [DEBUG] [Thread-180755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:03:42.237 [DEBUG] [Thread-180755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:03:42.256 [INFO] [Thread-180755] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:03:42.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:03:42.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:03:42.649 [DEBUG] [Thread-180757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:43.087 [DEBUG] [Thread-180755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:03:43.087 [DEBUG] [Thread-180755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:03:43.135 [DEBUG] [Thread-180755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:03:43.135 [DEBUG] [Thread-180755] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:03:43.144 [DEBUG] [Thread-180755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:03:43.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:03:43.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:03:43.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:03:43.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:03:43.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:03:43.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:03:43.179 [DEBUG] [Thread-180755] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:03:51.994 [DEBUG] [Thread-180758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:03:57.699 [DEBUG] [Thread-180759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:12.732 [DEBUG] [Thread-180760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:04:13.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:04:13.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-04-12T02:04:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 3, 51), -0.05525, 100.305, 0.0, 19.9015, 10.6339, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:04:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:03:51
2026-04-12T02:04:14.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:04:15.028 [DEBUG] [Thread-180761] [transport.py] [_log()] starting thread (client mode): 0xae5b49a0
2026-04-12T02:04:15.028 [DEBUG] [Thread-180761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:04:15.046 [DEBUG] [Thread-180761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:04:15.046 [INFO] [Thread-180761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:04:15.050 [DEBUG] [Thread-180761] [transport.py] [_log()] client lang: <none>
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] server lang: <none>
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] kex follows: False
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] Compression: none
2026-04-12T02:04:15.051 [DEBUG] [Thread-180761] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:04:15.069 [DEBUG] [Thread-180761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:04:15.070 [DEBUG] [Thread-180761] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:04:15.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:04:15.071 [DEBUG] [Thread-180761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:04:15.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:04:15.074 [DEBUG] [Thread-180761] [transport.py] [_log()] userauth is OK
2026-04-12T02:04:15.074 [DEBUG] [Thread-180761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:04:15.074 [DEBUG] [Thread-180761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:04:15.074 [DEBUG] [Thread-180761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:04:15.074 [DEBUG] [Thread-180761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:04:15.098 [INFO] [Thread-180761] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:04:15.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:04:15.909 [DEBUG] [Thread-180761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:04:15.910 [DEBUG] [Thread-180761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:04:15.910 [DEBUG] [Thread-180761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:04:15.951 [DEBUG] [Thread-180761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:04:15.951 [DEBUG] [Thread-180761] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:04:15.955 [DEBUG] [Thread-180761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:04:15.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:04:15.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:04:15.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:04:15.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:04:15.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:04:15.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:04:15.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:04:15.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:04:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:04:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.002539 -999.00  +10.00  18.88     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.4 18.9 272.2 24.3 11.4 -1.2 11.3 -1.4 10.8 -1.5 11.2 -0.6
2026-04-12T02:04:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:04:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:04:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.002539
2026-04-12T02:04:15.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:04:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:04:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:04:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:04:15.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:04:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:03:51', tmtdew=-0.05525, humidity=100.305, cloud=0.0, wind=19.9015, temperature=10.6339, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:03:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:04:15.985 [DEBUG] [Thread-180761] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:04:16.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:04:16.076 [DEBUG] [Thread-180764] [transport.py] [_log()] starting thread (client mode): 0xae5b6950
2026-04-12T02:04:16.077 [DEBUG] [Thread-180764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:04:16.091 [DEBUG] [Thread-180764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:04:16.091 [INFO] [Thread-180764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:04:16.099 [DEBUG] [Thread-180764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] client lang: <none>
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] server lang: <none>
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] kex follows: False
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] Compression: none
2026-04-12T02:04:16.100 [DEBUG] [Thread-180764] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:04:16.158 [DEBUG] [Thread-180764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:04:16.158 [DEBUG] [Thread-180764] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:04:16.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:04:16.159 [DEBUG] [Thread-180764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:04:16.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:04:16.213 [DEBUG] [Thread-180764] [transport.py] [_log()] userauth is OK
2026-04-12T02:04:16.214 [DEBUG] [Thread-180764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:04:16.214 [DEBUG] [Thread-180764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:04:16.214 [DEBUG] [Thread-180764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:04:16.214 [DEBUG] [Thread-180764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:04:16.238 [INFO] [Thread-180764] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:04:16.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:04:16.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:04:17.065 [DEBUG] [Thread-180764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:04:17.065 [DEBUG] [Thread-180764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:04:17.113 [DEBUG] [Thread-180764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:04:17.113 [DEBUG] [Thread-180764] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:04:17.123 [DEBUG] [Thread-180764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:04:17.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:04: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')
2026-04-12T02:04:17.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:04:17.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:04:17.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:04:17.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:04:17.164 [DEBUG] [Thread-180764] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:04:25.387 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:25.388 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:27.771 [DEBUG] [Thread-180766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:42.820 [DEBUG] [Thread-180767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:04:47.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:04:47.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-04-12T02:04:48.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 4, 27), 0.03238, 100.086, 0.0, 18.1217, 10.1336, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:04:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:04:27
2026-04-12T02:04:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:04:49.012 [DEBUG] [Thread-180768] [transport.py] [_log()] starting thread (client mode): 0xae5b7d00
2026-04-12T02:04:49.012 [DEBUG] [Thread-180768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:04:49.032 [DEBUG] [Thread-180768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:04:49.033 [INFO] [Thread-180768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:49.036 [DEBUG] [Thread-180768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] client lang: <none>
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] server lang: <none>
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] kex follows: False
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] Compression: none
2026-04-12T02:04:49.037 [DEBUG] [Thread-180768] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:04:49.057 [DEBUG] [Thread-180768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:04:49.057 [DEBUG] [Thread-180768] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:04:49.058 [DEBUG] [Thread-180768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:04:49.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:04:49.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:04:49.060 [DEBUG] [Thread-180768] [transport.py] [_log()] userauth is OK
2026-04-12T02:04:49.060 [DEBUG] [Thread-180768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:04:49.060 [DEBUG] [Thread-180768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:04:49.060 [DEBUG] [Thread-180768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:04:49.061 [DEBUG] [Thread-180768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:04:49.096 [INFO] [Thread-180768] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:04:49.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:04:49.869 [DEBUG] [Thread-180768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:04:49.869 [DEBUG] [Thread-180768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:04:49.870 [DEBUG] [Thread-180768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:04:49.910 [DEBUG] [Thread-180768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:04:49.910 [DEBUG] [Thread-180768] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:04:49.914 [DEBUG] [Thread-180768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:04:49.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:04:49.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:04:49.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:04:49.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:04:49.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:04:49.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:04:49.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:04:49.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:04:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:04:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.002886 -999.00  +10.00  19.67     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 23.5 19.7 269.8 22.0 11.4 -1.6 11.2 -1.4 10.8 -1.1 11.2 -1.1
2026-04-12T02:04:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:04:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:04:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.002886
2026-04-12T02:04:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:04:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:04:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:04:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:04:49.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:04:49.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:04:27', tmtdew=0.03238, humidity=100.086, cloud=0.0, wind=18.1217, temperature=10.1336, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:04:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:04:49.941 [DEBUG] [Thread-180768] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:04:50.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:04:50.034 [DEBUG] [Thread-180771] [transport.py] [_log()] starting thread (client mode): 0xae5b48e0
2026-04-12T02:04:50.034 [DEBUG] [Thread-180771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:04:50.049 [DEBUG] [Thread-180771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:04:50.049 [INFO] [Thread-180771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] client lang: <none>
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] server lang: <none>
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] kex follows: False
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:04:50.057 [DEBUG] [Thread-180771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:04:50.058 [DEBUG] [Thread-180771] [transport.py] [_log()] Compression: none
2026-04-12T02:04:50.058 [DEBUG] [Thread-180771] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:04:50.114 [DEBUG] [Thread-180771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:04:50.115 [DEBUG] [Thread-180771] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:04:50.115 [DEBUG] [Thread-180771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:04:50.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:04:50.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:04:50.170 [DEBUG] [Thread-180771] [transport.py] [_log()] userauth is OK
2026-04-12T02:04:50.171 [DEBUG] [Thread-180771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:04:50.171 [DEBUG] [Thread-180771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:04:50.171 [DEBUG] [Thread-180771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:04:50.171 [DEBUG] [Thread-180771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:04:50.190 [INFO] [Thread-180771] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:04:50.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:04:50.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:04:51.020 [DEBUG] [Thread-180771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:04:51.021 [DEBUG] [Thread-180771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:04:51.070 [DEBUG] [Thread-180771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:04:51.070 [DEBUG] [Thread-180771] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:04:51.079 [DEBUG] [Thread-180771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:04:51.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:04:51.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:04:51.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:04:51.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:04:51.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:04:51.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:04:51.117 [DEBUG] [Thread-180771] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:04:52.052 [DEBUG] [Thread-180773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:04:57.856 [DEBUG] [Thread-180774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:12.908 [DEBUG] [Thread-180775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:21.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:05:21.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:05:21.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-04-12T02:05:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 5, 2), 0.032415, 100.086, 0.0, 19.2154, 10.1005, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:05:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:05:02
2026-04-12T02:05:22.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:05:23.036 [DEBUG] [Thread-180776] [transport.py] [_log()] starting thread (client mode): 0xb0fe8d30
2026-04-12T02:05:23.036 [DEBUG] [Thread-180776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:05:23.057 [DEBUG] [Thread-180776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:05:23.057 [INFO] [Thread-180776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] client lang: <none>
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] server lang: <none>
2026-04-12T02:05:23.060 [DEBUG] [Thread-180776] [transport.py] [_log()] kex follows: False
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] Compression: none
2026-04-12T02:05:23.061 [DEBUG] [Thread-180776] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:05:23.078 [DEBUG] [Thread-180776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:05:23.079 [DEBUG] [Thread-180776] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:05:23.079 [DEBUG] [Thread-180776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:05:23.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:05:23.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:05:23.082 [DEBUG] [Thread-180776] [transport.py] [_log()] userauth is OK
2026-04-12T02:05:23.082 [DEBUG] [Thread-180776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:05:23.082 [DEBUG] [Thread-180776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:05:23.082 [DEBUG] [Thread-180776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:05:23.082 [DEBUG] [Thread-180776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:05:23.119 [INFO] [Thread-180776] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:05:23.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:05:24.264 [DEBUG] [Thread-180776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:05:24.264 [DEBUG] [Thread-180776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:05:24.264 [DEBUG] [Thread-180776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:05:24.305 [DEBUG] [Thread-180776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:05:24.305 [DEBUG] [Thread-180776] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:05:24.308 [DEBUG] [Thread-180776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:05:24.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:05:24.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:05:24.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:05:24.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:05:24.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:05:24.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:05:24.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:05:24.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:05:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:05:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.003234 -999.00  +10.00  18.50     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.5 18.5 266.6 28.5 11.4 -1.2 11.2 -2.1 10.9 -1.6 11.2 -0.6
2026-04-12T02:05:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:05:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:05:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.003234
2026-04-12T02:05:24.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:05:24.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:05:24.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:05:24.355 [DEBUG] [Thread-180776] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:05:24.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:05:24.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:05:24.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:05:02', tmtdew=0.032415, humidity=100.086, cloud=0.0, wind=19.2154, temperature=10.1005, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:04:39.418', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:05:24.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:05:24.451 [DEBUG] [Thread-180779] [transport.py] [_log()] starting thread (client mode): 0xb0f6c6a0
2026-04-12T02:05:24.451 [DEBUG] [Thread-180779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:05:24.466 [DEBUG] [Thread-180779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:05:24.466 [INFO] [Thread-180779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:05:24.473 [DEBUG] [Thread-180779] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] client lang: <none>
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] server lang: <none>
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] kex follows: False
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] Compression: none
2026-04-12T02:05:24.474 [DEBUG] [Thread-180779] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:05:24.534 [DEBUG] [Thread-180779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:05:24.534 [DEBUG] [Thread-180779] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:05:24.535 [DEBUG] [Thread-180779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:05:24.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:05:24.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:05:24.592 [DEBUG] [Thread-180779] [transport.py] [_log()] userauth is OK
2026-04-12T02:05:24.592 [DEBUG] [Thread-180779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:05:24.592 [DEBUG] [Thread-180779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:05:24.592 [DEBUG] [Thread-180779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:05:24.592 [DEBUG] [Thread-180779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:05:24.607 [INFO] [Thread-180779] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:05:24.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:05:24.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:05:25.471 [DEBUG] [Thread-180779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:05:25.471 [DEBUG] [Thread-180779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:05:25.524 [DEBUG] [Thread-180779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:05:25.524 [DEBUG] [Thread-180779] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:05:25.537 [DEBUG] [Thread-180779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:05:25.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:05:25.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-04-12T02:05:25.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:05:25.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:05:25.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:05:25.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:05:25.585 [DEBUG] [Thread-180779] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:05:25.594 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:25.595 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:27.946 [DEBUG] [Thread-180781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:42.993 [DEBUG] [Thread-180782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:52.108 [DEBUG] [Thread-180783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:55.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:05:55.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:05:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:05:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 5, 38), -0.05523, 100.305, 0.0, 17.7494, 10.6008, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:05:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:05:38
2026-04-12T02:05:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:05:57.386 [DEBUG] [Thread-180784] [transport.py] [_log()] starting thread (client mode): 0xb0f6e7a0
2026-04-12T02:05:57.386 [DEBUG] [Thread-180784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:05:57.407 [DEBUG] [Thread-180784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:05:57.407 [INFO] [Thread-180784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] client lang: <none>
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] server lang: <none>
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] kex follows: False
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:05:57.410 [DEBUG] [Thread-180784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:05:57.411 [DEBUG] [Thread-180784] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:05:57.411 [DEBUG] [Thread-180784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:05:57.411 [DEBUG] [Thread-180784] [transport.py] [_log()] Compression: none
2026-04-12T02:05:57.411 [DEBUG] [Thread-180784] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:05:57.428 [DEBUG] [Thread-180784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:05:57.428 [DEBUG] [Thread-180784] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:05:57.429 [DEBUG] [Thread-180784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:05:57.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:05:57.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:05:57.431 [DEBUG] [Thread-180784] [transport.py] [_log()] userauth is OK
2026-04-12T02:05:57.431 [DEBUG] [Thread-180784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:05:57.431 [DEBUG] [Thread-180784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:05:57.432 [DEBUG] [Thread-180784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:05:57.432 [DEBUG] [Thread-180784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:05:57.449 [INFO] [Thread-180784] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:05:57.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:05:58.033 [DEBUG] [Thread-180786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:05:58.231 [DEBUG] [Thread-180784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:05:58.231 [DEBUG] [Thread-180784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:05:58.232 [DEBUG] [Thread-180784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:05:58.272 [DEBUG] [Thread-180784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:05:58.272 [DEBUG] [Thread-180784] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:05:58.276 [DEBUG] [Thread-180784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:05:58.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:05:58.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:05:58.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:05:58.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:05:58.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:05:58.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:05:58.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:05:58.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:05:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:05:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.003580 -999.00  +10.00  19.49     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.9 19.5 272.0 23.6 11.4 -1.0 11.2 -1.2 10.8 -1.2 11.2 -0.5
2026-04-12T02:05:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:05:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:05:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.003580
2026-04-12T02:05:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:05:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:05:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:05:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:05:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:05:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:05:38', tmtdew=-0.05523, humidity=100.305, cloud=0.0, wind=17.7494, temperature=10.6008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:05:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:05:58.304 [DEBUG] [Thread-180784] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:05:58.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:05:58.398 [DEBUG] [Thread-180788] [transport.py] [_log()] starting thread (client mode): 0xb0f6f760
2026-04-12T02:05:58.398 [DEBUG] [Thread-180788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:05:58.412 [DEBUG] [Thread-180788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:05:58.413 [INFO] [Thread-180788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:05:58.420 [DEBUG] [Thread-180788] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:05:58.421 [DEBUG] [Thread-180788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] client lang: <none>
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] server lang: <none>
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] kex follows: False
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] Compression: none
2026-04-12T02:05:58.422 [DEBUG] [Thread-180788] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:05:58.482 [DEBUG] [Thread-180788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:05:58.482 [DEBUG] [Thread-180788] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:05:58.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:05:58.484 [DEBUG] [Thread-180788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:05:58.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:05:58.541 [DEBUG] [Thread-180788] [transport.py] [_log()] userauth is OK
2026-04-12T02:05:58.541 [DEBUG] [Thread-180788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:05:58.541 [DEBUG] [Thread-180788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:05:58.541 [DEBUG] [Thread-180788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:05:58.542 [DEBUG] [Thread-180788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:05:58.560 [INFO] [Thread-180788] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:05:58.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:05:58.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:05:59.348 [DEBUG] [Thread-180788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:05:59.348 [DEBUG] [Thread-180788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:05:59.396 [DEBUG] [Thread-180788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:05:59.396 [DEBUG] [Thread-180788] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:05:59.406 [DEBUG] [Thread-180788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:05:59.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:05:59.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-04-12T02:05:59.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-04-12T02:05:59.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:05:59.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:05:59.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:05:59.443 [DEBUG] [Thread-180788] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:06:13.067 [DEBUG] [Thread-180790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:06:25.800 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:06:25.801 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:06:28.125 [DEBUG] [Thread-180791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:06:29.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:06:29.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:06:29.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-04-12T02:06:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 6, 13), 0.0199, 100.169, 0.0, 16.6921, 10.1504, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:06:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:06:13
2026-04-12T02:06:31.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:06:31.265 [DEBUG] [Thread-180792] [transport.py] [_log()] starting thread (client mode): 0xb0f6d360
2026-04-12T02:06:31.265 [DEBUG] [Thread-180792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:06:31.286 [DEBUG] [Thread-180792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:06:31.286 [INFO] [Thread-180792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:06:31.289 [DEBUG] [Thread-180792] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] client lang: <none>
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] server lang: <none>
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] kex follows: False
2026-04-12T02:06:31.290 [DEBUG] [Thread-180792] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:06:31.291 [DEBUG] [Thread-180792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:06:31.291 [DEBUG] [Thread-180792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:06:31.291 [DEBUG] [Thread-180792] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:06:31.291 [DEBUG] [Thread-180792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:06:31.291 [DEBUG] [Thread-180792] [transport.py] [_log()] Compression: none
2026-04-12T02:06:31.291 [DEBUG] [Thread-180792] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:06:31.311 [DEBUG] [Thread-180792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:06:31.312 [DEBUG] [Thread-180792] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:06:31.313 [DEBUG] [Thread-180792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:06:31.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:06:31.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:06:31.315 [DEBUG] [Thread-180792] [transport.py] [_log()] userauth is OK
2026-04-12T02:06:31.315 [DEBUG] [Thread-180792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:06:31.315 [DEBUG] [Thread-180792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:06:31.315 [DEBUG] [Thread-180792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:06:31.315 [DEBUG] [Thread-180792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:06:31.340 [INFO] [Thread-180792] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:06:31.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:06:32.156 [DEBUG] [Thread-180792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:06:32.157 [DEBUG] [Thread-180792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:06:32.157 [DEBUG] [Thread-180792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:06:32.197 [DEBUG] [Thread-180792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:06:32.197 [DEBUG] [Thread-180792] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:06:32.200 [DEBUG] [Thread-180792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:06:32.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:06:32.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:06:32.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:06:32.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:06:32.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:06:32.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:06:32.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:06:32.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:06:32.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:06:32.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.003928 -999.00  +10.00  15.75     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.1 15.8 273.6 22.4 11.4 -1.1 11.2 -1.2 10.8 -1.0 11.2 -0.5
2026-04-12T02:06:32.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:06:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:06:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.003928
2026-04-12T02:06:32.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:06:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:06:32.226 [DEBUG] [Thread-180792] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:06:32.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:06:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:06:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:06:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:06:13', tmtdew=0.0199, humidity=100.169, cloud=0.0, wind=16.6921, temperature=10.1504, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:05:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:06:32.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:06:32.320 [DEBUG] [Thread-180795] [transport.py] [_log()] starting thread (client mode): 0xb0fea830
2026-04-12T02:06:32.320 [DEBUG] [Thread-180795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:06:32.336 [DEBUG] [Thread-180795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:06:32.337 [INFO] [Thread-180795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] client lang: <none>
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] server lang: <none>
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] kex follows: False
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] Compression: none
2026-04-12T02:06:32.344 [DEBUG] [Thread-180795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:06:32.401 [DEBUG] [Thread-180795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:06:32.402 [DEBUG] [Thread-180795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:06:32.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:06:32.404 [DEBUG] [Thread-180795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:06:32.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:06:32.457 [DEBUG] [Thread-180795] [transport.py] [_log()] userauth is OK
2026-04-12T02:06:32.457 [DEBUG] [Thread-180795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:06:32.457 [DEBUG] [Thread-180795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:06:32.457 [DEBUG] [Thread-180795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:06:32.458 [DEBUG] [Thread-180795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:06:32.489 [INFO] [Thread-180795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:06:32.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:06:32.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:06:33.339 [DEBUG] [Thread-180795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:06:33.340 [DEBUG] [Thread-180795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:06:33.391 [DEBUG] [Thread-180795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:06:33.392 [DEBUG] [Thread-180795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:06:33.401 [DEBUG] [Thread-180795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:06:33.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:06:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:06:33.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:06:33.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:06:33.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:06:33.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:06:33.436 [DEBUG] [Thread-180795] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:06:43.162 [DEBUG] [Thread-180797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:06:52.167 [DEBUG] [Thread-180798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:06:58.203 [DEBUG] [Thread-180799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:07:03.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:07:03.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:07:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 6, 49), -0.06013, 100.338, 0.0, 18.5962, 10.5015, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:07:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:06:49
2026-04-12T02:07:05.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:07:05.317 [DEBUG] [Thread-180800] [transport.py] [_log()] starting thread (client mode): 0xae5b6470
2026-04-12T02:07:05.317 [DEBUG] [Thread-180800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:07:05.335 [DEBUG] [Thread-180800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:07:05.336 [INFO] [Thread-180800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] client lang: <none>
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] server lang: <none>
2026-04-12T02:07:05.339 [DEBUG] [Thread-180800] [transport.py] [_log()] kex follows: False
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] Compression: none
2026-04-12T02:07:05.340 [DEBUG] [Thread-180800] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:07:05.357 [DEBUG] [Thread-180800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:07:05.357 [DEBUG] [Thread-180800] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:07:05.358 [DEBUG] [Thread-180800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:07:05.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:07:05.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:07:05.360 [DEBUG] [Thread-180800] [transport.py] [_log()] userauth is OK
2026-04-12T02:07:05.360 [DEBUG] [Thread-180800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:07:05.360 [DEBUG] [Thread-180800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:07:05.360 [DEBUG] [Thread-180800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:07:05.361 [DEBUG] [Thread-180800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:07:05.384 [INFO] [Thread-180800] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:07:05.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:07:06.147 [DEBUG] [Thread-180800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:07:06.148 [DEBUG] [Thread-180800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:07:06.148 [DEBUG] [Thread-180800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:07:06.188 [DEBUG] [Thread-180800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:07:06.188 [DEBUG] [Thread-180800] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:07:06.192 [DEBUG] [Thread-180800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:07:06.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:07:06.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:07:06.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:07:06.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:07:06.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:07:06.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:07:06.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:07:06.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:07:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:07:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.004275 -999.00  +10.10  16.57     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.0 16.6 271.2 20.5 11.4 -0.8 11.2 -1.2 10.8 -0.7 11.2 -0.6
2026-04-12T02:07:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:07:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:07:06.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.004275
2026-04-12T02:07:06.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:07:06.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:07:06.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:07:06.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:07:06.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:07:06.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:06:49', tmtdew=-0.06013, humidity=100.338, cloud=0.0, wind=18.5962, temperature=10.5015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:06:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:07:06.219 [DEBUG] [Thread-180800] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:07:06.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:07:06.308 [DEBUG] [Thread-180803] [transport.py] [_log()] starting thread (client mode): 0xae5b7fd0
2026-04-12T02:07:06.308 [DEBUG] [Thread-180803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:07:06.323 [DEBUG] [Thread-180803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:07:06.323 [INFO] [Thread-180803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] client lang: <none>
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] server lang: <none>
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] kex follows: False
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:07:06.331 [DEBUG] [Thread-180803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:07:06.332 [DEBUG] [Thread-180803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:07:06.332 [DEBUG] [Thread-180803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:07:06.332 [DEBUG] [Thread-180803] [transport.py] [_log()] Compression: none
2026-04-12T02:07:06.332 [DEBUG] [Thread-180803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:07:06.390 [DEBUG] [Thread-180803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:07:06.390 [DEBUG] [Thread-180803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:07:06.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:07:06.392 [DEBUG] [Thread-180803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:07:06.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:07:06.446 [DEBUG] [Thread-180803] [transport.py] [_log()] userauth is OK
2026-04-12T02:07:06.446 [DEBUG] [Thread-180803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:07:06.447 [DEBUG] [Thread-180803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:07:06.447 [DEBUG] [Thread-180803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:07:06.447 [DEBUG] [Thread-180803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:07:06.465 [INFO] [Thread-180803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:07:06.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:07:06.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:07:07.283 [DEBUG] [Thread-180803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:07:07.284 [DEBUG] [Thread-180803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:07:07.332 [DEBUG] [Thread-180803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:07:07.332 [DEBUG] [Thread-180803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:07:07.341 [DEBUG] [Thread-180803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:07:07.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:07:07.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-04-12T02:07:07.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-04-12T02:07:07.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:07:07.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:07:07.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:07:07.376 [DEBUG] [Thread-180803] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:07:13.240 [DEBUG] [Thread-180805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:26.007 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:26.008 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:28.294 [DEBUG] [Thread-180806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:37.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:07:37.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:07:37.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-04-12T02:07:38.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 7, 24), -0.02014, 100.103, 0.0, 16.3922, 10.1008, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:07:38.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:07:24
2026-04-12T02:07:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:07:39.199 [DEBUG] [Thread-180807] [transport.py] [_log()] starting thread (client mode): 0xae509b70
2026-04-12T02:07:39.199 [DEBUG] [Thread-180807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:07:39.220 [DEBUG] [Thread-180807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:07:39.220 [INFO] [Thread-180807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] client lang: <none>
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] server lang: <none>
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] kex follows: False
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] Compression: none
2026-04-12T02:07:39.223 [DEBUG] [Thread-180807] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:07:39.243 [DEBUG] [Thread-180807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:07:39.243 [DEBUG] [Thread-180807] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:07:39.244 [DEBUG] [Thread-180807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:07:39.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:07:39.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:07:39.246 [DEBUG] [Thread-180807] [transport.py] [_log()] userauth is OK
2026-04-12T02:07:39.246 [DEBUG] [Thread-180807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:07:39.246 [DEBUG] [Thread-180807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:07:39.246 [DEBUG] [Thread-180807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:07:39.246 [DEBUG] [Thread-180807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:07:39.271 [INFO] [Thread-180807] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:07:39.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:07:40.049 [DEBUG] [Thread-180807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:07:40.049 [DEBUG] [Thread-180807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:07:40.050 [DEBUG] [Thread-180807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:07:40.090 [DEBUG] [Thread-180807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:07:40.090 [DEBUG] [Thread-180807] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:07:40.094 [DEBUG] [Thread-180807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:07:40.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:07:40.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:07:40.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:07:40.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:07:40.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:07:40.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:07:40.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:07:40.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:07:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:07:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.004622 -999.00  +10.10  13.30     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.2 13.3 289.2 19.1 11.4 -1.0 11.2 -1.2 10.8 -1.1 11.2 -0.5
2026-04-12T02:07:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:07:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:07:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.004622
2026-04-12T02:07:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:07:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:07:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:07:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:07:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:07:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:07:24', tmtdew=-0.02014, humidity=100.103, cloud=0.0, wind=16.3922, temperature=10.1008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:06:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:07:40.130 [DEBUG] [Thread-180807] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:07:40.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:07:40.223 [DEBUG] [Thread-180810] [transport.py] [_log()] starting thread (client mode): 0xae508490
2026-04-12T02:07:40.224 [DEBUG] [Thread-180810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:07:40.238 [DEBUG] [Thread-180810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:07:40.239 [INFO] [Thread-180810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:07:40.246 [DEBUG] [Thread-180810] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:07:40.246 [DEBUG] [Thread-180810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] client lang: <none>
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] server lang: <none>
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] kex follows: False
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] Compression: none
2026-04-12T02:07:40.247 [DEBUG] [Thread-180810] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:07:40.307 [DEBUG] [Thread-180810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:07:40.307 [DEBUG] [Thread-180810] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:07:40.308 [DEBUG] [Thread-180810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:07:40.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:07:40.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:07:40.363 [DEBUG] [Thread-180810] [transport.py] [_log()] userauth is OK
2026-04-12T02:07:40.363 [DEBUG] [Thread-180810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:07:40.363 [DEBUG] [Thread-180810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:07:40.364 [DEBUG] [Thread-180810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:07:40.364 [DEBUG] [Thread-180810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:07:40.382 [INFO] [Thread-180810] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:07:40.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:07:40.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:07:41.181 [DEBUG] [Thread-180810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:07:41.181 [DEBUG] [Thread-180810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:07:41.228 [DEBUG] [Thread-180810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:07:41.228 [DEBUG] [Thread-180810] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:07:41.237 [DEBUG] [Thread-180810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:07:41.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:07:41.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-04-12T02:07:41.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:07:41.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:07:41.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:07:41.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:07:41.271 [DEBUG] [Thread-180810] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:07:43.331 [DEBUG] [Thread-180812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:52.233 [DEBUG] [Thread-180813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:07:58.379 [DEBUG] [Thread-180814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:08:11.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:08:11.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:08:12.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 7, 59), -0.0302, 100.169, 0.0, 18.4921, 10.1338, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:08:12.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:07:59
2026-04-12T02:08:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:08:13.067 [DEBUG] [Thread-180815] [transport.py] [_log()] starting thread (client mode): 0xb0f43c40
2026-04-12T02:08:13.067 [DEBUG] [Thread-180815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:08:13.087 [DEBUG] [Thread-180815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:08:13.087 [INFO] [Thread-180815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:08:13.091 [DEBUG] [Thread-180815] [transport.py] [_log()] client lang: <none>
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] server lang: <none>
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] kex follows: False
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] Compression: none
2026-04-12T02:08:13.092 [DEBUG] [Thread-180815] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:08:13.111 [DEBUG] [Thread-180815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:08:13.112 [DEBUG] [Thread-180815] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:08:13.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:08:13.113 [DEBUG] [Thread-180815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:08:13.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:08:13.115 [DEBUG] [Thread-180815] [transport.py] [_log()] userauth is OK
2026-04-12T02:08:13.115 [DEBUG] [Thread-180815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:08:13.115 [DEBUG] [Thread-180815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:08:13.115 [DEBUG] [Thread-180815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:08:13.115 [DEBUG] [Thread-180815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:08:13.138 [INFO] [Thread-180815] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:08:13.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:08:13.412 [DEBUG] [Thread-180817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:13.941 [DEBUG] [Thread-180815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:08:13.941 [DEBUG] [Thread-180815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:08:13.942 [DEBUG] [Thread-180815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:08:13.983 [DEBUG] [Thread-180815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:08:13.983 [DEBUG] [Thread-180815] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:08:13.986 [DEBUG] [Thread-180815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:08:13.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:08:13.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:08:14.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:08:14.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:08:14.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:08:14.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:08:14.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:08:14.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:08:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:08:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.004970 -999.00  +10.10  14.34     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.9 14.3 267.4 19.3 11.4 -1.0 11.2 -1.3 10.8 -0.6 11.2 -0.4
2026-04-12T02:08:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:08:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:08:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.004970
2026-04-12T02:08:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:08:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:08:14.009 [DEBUG] [Thread-180815] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:08:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:08:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:08:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:08:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:07:59', tmtdew=-0.0302, humidity=100.169, cloud=0.0, wind=18.4921, temperature=10.1338, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:07:09.408', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:08:14.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:08:14.097 [DEBUG] [Thread-180819] [transport.py] [_log()] starting thread (client mode): 0xb0f41030
2026-04-12T02:08:14.097 [DEBUG] [Thread-180819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:08:14.113 [DEBUG] [Thread-180819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:08:14.113 [INFO] [Thread-180819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:08:14.120 [DEBUG] [Thread-180819] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:08:14.120 [DEBUG] [Thread-180819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:08:14.120 [DEBUG] [Thread-180819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:08:14.120 [DEBUG] [Thread-180819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] client lang: <none>
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] server lang: <none>
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] kex follows: False
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] Compression: none
2026-04-12T02:08:14.121 [DEBUG] [Thread-180819] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:08:14.178 [DEBUG] [Thread-180819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:08:14.179 [DEBUG] [Thread-180819] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:08:14.179 [DEBUG] [Thread-180819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:08:14.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:08:14.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:08:14.235 [DEBUG] [Thread-180819] [transport.py] [_log()] userauth is OK
2026-04-12T02:08:14.235 [DEBUG] [Thread-180819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:08:14.235 [DEBUG] [Thread-180819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:08:14.235 [DEBUG] [Thread-180819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:08:14.235 [DEBUG] [Thread-180819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:08:14.257 [INFO] [Thread-180819] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:08:14.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:08:14.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:08:15.086 [DEBUG] [Thread-180819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:08:15.086 [DEBUG] [Thread-180819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:08:15.133 [DEBUG] [Thread-180819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:08:15.134 [DEBUG] [Thread-180819] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:08:15.142 [DEBUG] [Thread-180819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:08:15.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:08:15.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-04-12T02:08:15.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-04-12T02:08:15.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:08:15.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:08:15.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:08:15.177 [DEBUG] [Thread-180819] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:08:26.212 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:26.214 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:28.448 [DEBUG] [Thread-180821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:43.502 [DEBUG] [Thread-180822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:45.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:08:45.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:08:45.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-04-12T02:08:46.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 8, 35), -0.06031, 100.339, 0.0, 19.2312, 10.6012, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:08:46.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:08:35
2026-04-12T02:08:46.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:08:47.058 [DEBUG] [Thread-180823] [transport.py] [_log()] starting thread (client mode): 0xb0fea830
2026-04-12T02:08:47.058 [DEBUG] [Thread-180823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:08:47.079 [DEBUG] [Thread-180823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:08:47.079 [INFO] [Thread-180823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] client lang: <none>
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] server lang: <none>
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] kex follows: False
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:08:47.083 [DEBUG] [Thread-180823] [transport.py] [_log()] Compression: none
2026-04-12T02:08:47.084 [DEBUG] [Thread-180823] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:08:47.102 [DEBUG] [Thread-180823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:08:47.103 [DEBUG] [Thread-180823] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:08:47.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:08:47.104 [DEBUG] [Thread-180823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:08:47.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:08:47.106 [DEBUG] [Thread-180823] [transport.py] [_log()] userauth is OK
2026-04-12T02:08:47.107 [DEBUG] [Thread-180823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:08:47.107 [DEBUG] [Thread-180823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:08:47.107 [DEBUG] [Thread-180823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:08:47.107 [DEBUG] [Thread-180823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:08:47.128 [INFO] [Thread-180823] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:08:47.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:08:47.928 [DEBUG] [Thread-180823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:08:47.928 [DEBUG] [Thread-180823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:08:47.929 [DEBUG] [Thread-180823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:08:47.968 [DEBUG] [Thread-180823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:08:47.969 [DEBUG] [Thread-180823] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:08:47.971 [DEBUG] [Thread-180823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:08:47.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:08:47.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:08:47.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:08:47.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:08:47.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:08:47.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:08:47.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:08:47.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.005664 -999.00  +10.10  13.28     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.2 13.3 276.4 18.5 11.4 -1.1 11.2 -1.3 10.8 -1.4 11.3 -0.5
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.005664
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:08:47.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:08:35', tmtdew=-0.06031, humidity=100.339, cloud=0.0, wind=19.2312, temperature=10.6012, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:08:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:08:47.994 [DEBUG] [Thread-180823] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:08:48.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:08:48.091 [DEBUG] [Thread-180826] [transport.py] [_log()] starting thread (client mode): 0xb0fe9240
2026-04-12T02:08:48.091 [DEBUG] [Thread-180826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:08:48.105 [DEBUG] [Thread-180826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:08:48.105 [INFO] [Thread-180826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] client lang: <none>
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] server lang: <none>
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] kex follows: False
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] Compression: none
2026-04-12T02:08:48.113 [DEBUG] [Thread-180826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:08:48.171 [DEBUG] [Thread-180826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:08:48.172 [DEBUG] [Thread-180826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:08:48.172 [DEBUG] [Thread-180826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:08:48.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:08:48.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:08:48.228 [DEBUG] [Thread-180826] [transport.py] [_log()] userauth is OK
2026-04-12T02:08:48.229 [DEBUG] [Thread-180826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:08:48.229 [DEBUG] [Thread-180826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:08:48.229 [DEBUG] [Thread-180826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:08:48.229 [DEBUG] [Thread-180826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:08:48.247 [INFO] [Thread-180826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:08:48.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:08:48.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:08:49.147 [DEBUG] [Thread-180826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:08:49.147 [DEBUG] [Thread-180826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:08:49.195 [DEBUG] [Thread-180826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:08:49.195 [DEBUG] [Thread-180826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:08:49.204 [DEBUG] [Thread-180826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:08:49.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:08:49.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:08:49.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-04-12T02:08:49.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:08:49.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:08:49.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:08:49.241 [DEBUG] [Thread-180826] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:08:52.300 [DEBUG] [Thread-180828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:08:58.540 [DEBUG] [Thread-180829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:13.595 [DEBUG] [Thread-180830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:19.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:09:19.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:09:19.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-04-12T02:09:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 9, 11), -0.032595, 100.186, 0.0, 16.8156, 10.1504, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:09:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:09:11
2026-04-12T02:09:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:09:21.101 [DEBUG] [Thread-180831] [transport.py] [_log()] starting thread (client mode): 0xae5363b0
2026-04-12T02:09:21.101 [DEBUG] [Thread-180831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:09:21.117 [DEBUG] [Thread-180831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:09:21.117 [INFO] [Thread-180831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] client lang: <none>
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] server lang: <none>
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] kex follows: False
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] Compression: none
2026-04-12T02:09:21.121 [DEBUG] [Thread-180831] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:09:21.138 [DEBUG] [Thread-180831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:09:21.139 [DEBUG] [Thread-180831] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:09:21.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:09:21.140 [DEBUG] [Thread-180831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:09:21.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:09:21.142 [DEBUG] [Thread-180831] [transport.py] [_log()] userauth is OK
2026-04-12T02:09:21.142 [DEBUG] [Thread-180831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:09:21.142 [DEBUG] [Thread-180831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:09:21.142 [DEBUG] [Thread-180831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:09:21.143 [DEBUG] [Thread-180831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:09:21.158 [INFO] [Thread-180831] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:09:21.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:09:21.880 [DEBUG] [Thread-180831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:09:21.881 [DEBUG] [Thread-180831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:09:21.881 [DEBUG] [Thread-180831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:09:21.921 [DEBUG] [Thread-180831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:09:21.921 [DEBUG] [Thread-180831] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:09:21.924 [DEBUG] [Thread-180831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:09:21.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:09:21.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:09:21.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:09:21.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:09:21.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:09:21.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:09:21.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:09:21.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:09:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:09:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.006011 -999.00  +10.10  12.30     98   +9.90 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.0 12.3 274.4 17.0 11.4 -0.8 11.3 -1.2 10.9 -1.0 11.3 -0.3
2026-04-12T02:09:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:09:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:09:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.006011
2026-04-12T02:09:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:09:21.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:09:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:09:21.950 [DEBUG] [Thread-180831] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:09:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:09:21.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:09:21.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:09:11', tmtdew=-0.032595, humidity=100.186, cloud=0.0, wind=16.8156, temperature=10.1504, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:08:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:09:22.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:09:22.045 [DEBUG] [Thread-180834] [transport.py] [_log()] starting thread (client mode): 0xae537790
2026-04-12T02:09:22.045 [DEBUG] [Thread-180834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:09:22.063 [DEBUG] [Thread-180834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:09:22.063 [INFO] [Thread-180834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] client lang: <none>
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] server lang: <none>
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] kex follows: False
2026-04-12T02:09:22.071 [DEBUG] [Thread-180834] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:09:22.072 [DEBUG] [Thread-180834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:09:22.072 [DEBUG] [Thread-180834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:09:22.072 [DEBUG] [Thread-180834] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:09:22.072 [DEBUG] [Thread-180834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:09:22.072 [DEBUG] [Thread-180834] [transport.py] [_log()] Compression: none
2026-04-12T02:09:22.072 [DEBUG] [Thread-180834] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:09:22.129 [DEBUG] [Thread-180834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:09:22.129 [DEBUG] [Thread-180834] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:09:22.130 [DEBUG] [Thread-180834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:09:22.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:09:22.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:09:22.184 [DEBUG] [Thread-180834] [transport.py] [_log()] userauth is OK
2026-04-12T02:09:22.185 [DEBUG] [Thread-180834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:09:22.185 [DEBUG] [Thread-180834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:09:22.185 [DEBUG] [Thread-180834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:09:22.185 [DEBUG] [Thread-180834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:09:22.205 [INFO] [Thread-180834] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:09:22.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:09:22.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:09:23.011 [DEBUG] [Thread-180834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:09:23.011 [DEBUG] [Thread-180834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:09:23.059 [DEBUG] [Thread-180834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:09:23.059 [DEBUG] [Thread-180834] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:09:23.068 [DEBUG] [Thread-180834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:09:23.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:09:23.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:09:23.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-04-12T02:09:23.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:09:23.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:09:23.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:09:23.105 [DEBUG] [Thread-180834] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:09:26.418 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:26.419 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:28.635 [DEBUG] [Thread-180836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:43.688 [DEBUG] [Thread-180837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:52.370 [DEBUG] [Thread-180838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:09:53.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:09:53.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:09:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:09:54.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 9, 46), -0.05034, 100.272, 0.0, 15.9854, 10.6341, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:09:54.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:09:46
2026-04-12T02:09:54.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:09:54.949 [DEBUG] [Thread-180839] [transport.py] [_log()] starting thread (client mode): 0xae5087f0
2026-04-12T02:09:54.950 [DEBUG] [Thread-180839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:09:54.969 [DEBUG] [Thread-180839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:09:54.970 [INFO] [Thread-180839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] client lang: <none>
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] server lang: <none>
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] kex follows: False
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:09:54.971 [DEBUG] [Thread-180839] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:09:54.972 [DEBUG] [Thread-180839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:09:54.972 [DEBUG] [Thread-180839] [transport.py] [_log()] Compression: none
2026-04-12T02:09:54.972 [DEBUG] [Thread-180839] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:09:54.980 [DEBUG] [Thread-180839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:09:54.980 [DEBUG] [Thread-180839] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:09:54.981 [DEBUG] [Thread-180839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:09:54.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:09:54.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:09:54.983 [DEBUG] [Thread-180839] [transport.py] [_log()] userauth is OK
2026-04-12T02:09:54.983 [DEBUG] [Thread-180839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:09:54.983 [DEBUG] [Thread-180839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:09:54.984 [DEBUG] [Thread-180839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:09:54.984 [DEBUG] [Thread-180839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:09:54.997 [INFO] [Thread-180839] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:09:54.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:09:55.607 [DEBUG] [Thread-180839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:09:55.607 [DEBUG] [Thread-180839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:09:55.608 [DEBUG] [Thread-180839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:09:55.648 [DEBUG] [Thread-180839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:09:55.648 [DEBUG] [Thread-180839] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:09:55.650 [DEBUG] [Thread-180839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:09:55.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:09:55.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:09:55.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:09:55.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:09:55.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:09:55.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:09:55.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.006706 -999.00  +10.10  14.26     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.7 14.3 275.8 18.7 11.4 -0.9 11.2 -1.2 10.9 -0.9 11.3 -0.5
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.006706
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:09:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:09:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:09:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:09:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:09:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:09:46', tmtdew=-0.05034, humidity=100.272, cloud=0.0, wind=15.9854, temperature=10.6341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:09:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:09:55.662 [DEBUG] [Thread-180839] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:09:55.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:09:55.760 [DEBUG] [Thread-180842] [transport.py] [_log()] starting thread (client mode): 0xb0fe9cc0
2026-04-12T02:09:55.760 [DEBUG] [Thread-180842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:09:55.774 [DEBUG] [Thread-180842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:09:55.774 [INFO] [Thread-180842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:09:55.782 [DEBUG] [Thread-180842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:09:55.782 [DEBUG] [Thread-180842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:09:55.782 [DEBUG] [Thread-180842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:09:55.782 [DEBUG] [Thread-180842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] client lang: <none>
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] server lang: <none>
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] kex follows: False
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:09:55.783 [DEBUG] [Thread-180842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:09:55.784 [DEBUG] [Thread-180842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:09:55.784 [DEBUG] [Thread-180842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:09:55.784 [DEBUG] [Thread-180842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:09:55.784 [DEBUG] [Thread-180842] [transport.py] [_log()] Compression: none
2026-04-12T02:09:55.784 [DEBUG] [Thread-180842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:09:55.841 [DEBUG] [Thread-180842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:09:55.842 [DEBUG] [Thread-180842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:09:55.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:09:55.843 [DEBUG] [Thread-180842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:09:55.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:09:55.897 [DEBUG] [Thread-180842] [transport.py] [_log()] userauth is OK
2026-04-12T02:09:55.897 [DEBUG] [Thread-180842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:09:55.898 [DEBUG] [Thread-180842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:09:55.898 [DEBUG] [Thread-180842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:09:55.898 [DEBUG] [Thread-180842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:09:55.921 [INFO] [Thread-180842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:09:55.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:09:55.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:09:56.746 [DEBUG] [Thread-180842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:09:56.746 [DEBUG] [Thread-180842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:09:56.794 [DEBUG] [Thread-180842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:09:56.794 [DEBUG] [Thread-180842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:09:56.804 [DEBUG] [Thread-180842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:09:56.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:09:56.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-04-12T02:09: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-04-12T02:09:56.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:09:56.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:09:56.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:09:56.842 [DEBUG] [Thread-180842] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:09:58.724 [DEBUG] [Thread-180844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:13.777 [DEBUG] [Thread-180845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:26.620 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:26.621 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:10:26.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:10:26.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-04-12T02:10:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 9, 46), -0.05034, 100.272, 0.0, 15.9854, 10.6341, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:10:28.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:09:46
2026-04-12T02:10:28.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:10:28.670 [DEBUG] [Thread-180846] [transport.py] [_log()] starting thread (client mode): 0xb0fcec50
2026-04-12T02:10:28.670 [DEBUG] [Thread-180846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:10:28.690 [DEBUG] [Thread-180846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:10:28.690 [INFO] [Thread-180846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:10:28.692 [DEBUG] [Thread-180846] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:10:28.692 [DEBUG] [Thread-180846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:10:28.692 [DEBUG] [Thread-180846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] client lang: <none>
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] server lang: <none>
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] kex follows: False
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] Compression: none
2026-04-12T02:10:28.693 [DEBUG] [Thread-180846] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:10:28.701 [DEBUG] [Thread-180846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:10:28.702 [DEBUG] [Thread-180846] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:10:28.702 [DEBUG] [Thread-180846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:10:28.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:10:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:10:28.704 [DEBUG] [Thread-180846] [transport.py] [_log()] userauth is OK
2026-04-12T02:10:28.704 [DEBUG] [Thread-180846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:10:28.704 [DEBUG] [Thread-180846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:10:28.704 [DEBUG] [Thread-180846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:10:28.704 [DEBUG] [Thread-180846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:10:28.728 [INFO] [Thread-180846] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:10:28.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:10:28.811 [DEBUG] [Thread-180848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:29.325 [DEBUG] [Thread-180846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:10:29.325 [DEBUG] [Thread-180846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:10:29.325 [DEBUG] [Thread-180846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:10:29.366 [DEBUG] [Thread-180846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:10:29.366 [DEBUG] [Thread-180846] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:10:29.369 [DEBUG] [Thread-180846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:10:29.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:10:29.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:10:29.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:10:29.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:10:29.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:10:29.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:10:29.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:10:29.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:10:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:10:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.007053 -999.00  +10.10  15.39     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.8 15.4 279.0 20.8 11.5 -1.1 11.3 -1.3 10.9 -1.5 11.3 -0.5
2026-04-12T02:10:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:10:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:10:29.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.007053
2026-04-12T02:10:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:10:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:10:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:10:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:10:29.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:10:29.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:09:46', tmtdew=-0.05034, humidity=100.272, cloud=0.0, wind=15.9854, temperature=10.6341, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:10:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:10:29.392 [DEBUG] [Thread-180846] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:10:29.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:10:29.495 [DEBUG] [Thread-180850] [transport.py] [_log()] starting thread (client mode): 0xae563c10
2026-04-12T02:10:29.495 [DEBUG] [Thread-180850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:10:29.510 [DEBUG] [Thread-180850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:10:29.510 [INFO] [Thread-180850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:10:29.518 [DEBUG] [Thread-180850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] client lang: <none>
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] server lang: <none>
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] kex follows: False
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:10:29.519 [DEBUG] [Thread-180850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:10:29.520 [DEBUG] [Thread-180850] [transport.py] [_log()] Compression: none
2026-04-12T02:10:29.520 [DEBUG] [Thread-180850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:10:29.579 [DEBUG] [Thread-180850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:10:29.579 [DEBUG] [Thread-180850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:10:29.580 [DEBUG] [Thread-180850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:10:29.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:10:29.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:10:29.638 [DEBUG] [Thread-180850] [transport.py] [_log()] userauth is OK
2026-04-12T02:10:29.638 [DEBUG] [Thread-180850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:10:29.638 [DEBUG] [Thread-180850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:10:29.639 [DEBUG] [Thread-180850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:10:29.639 [DEBUG] [Thread-180850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:10:29.658 [INFO] [Thread-180850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:10:29.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:10:29.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:10:30.478 [DEBUG] [Thread-180850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:10:30.478 [DEBUG] [Thread-180850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:10:30.526 [DEBUG] [Thread-180850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:10:30.526 [DEBUG] [Thread-180850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:10:30.535 [DEBUG] [Thread-180850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:10:30.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:10:30.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-04-12T02:10:30.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:10:30.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:10:30.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:10:30.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:10:30.569 [DEBUG] [Thread-180850] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:10:43.850 [DEBUG] [Thread-180852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:52.436 [DEBUG] [Thread-180853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:10:58.903 [DEBUG] [Thread-180854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:00.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:11:00.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:11:00.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-04-12T02:11:01.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 10, 22), 0.022405, 100.152, 0.0, 15.6866, 10.2003, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:11:01.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:10:22
2026-04-12T02:11:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:11:02.394 [DEBUG] [Thread-180855] [transport.py] [_log()] starting thread (client mode): 0xae5b4460
2026-04-12T02:11:02.394 [DEBUG] [Thread-180855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:11:02.416 [DEBUG] [Thread-180855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:11:02.416 [INFO] [Thread-180855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:11:02.417 [DEBUG] [Thread-180855] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] client lang: <none>
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] server lang: <none>
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] kex follows: False
2026-04-12T02:11:02.418 [DEBUG] [Thread-180855] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:11:02.419 [DEBUG] [Thread-180855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:11:02.419 [DEBUG] [Thread-180855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:11:02.419 [DEBUG] [Thread-180855] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:11:02.419 [DEBUG] [Thread-180855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:11:02.419 [DEBUG] [Thread-180855] [transport.py] [_log()] Compression: none
2026-04-12T02:11:02.419 [DEBUG] [Thread-180855] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:11:02.437 [DEBUG] [Thread-180855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:11:02.438 [DEBUG] [Thread-180855] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:11:02.438 [DEBUG] [Thread-180855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:11:02.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:11:02.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:11:02.440 [DEBUG] [Thread-180855] [transport.py] [_log()] userauth is OK
2026-04-12T02:11:02.441 [DEBUG] [Thread-180855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:11:02.441 [DEBUG] [Thread-180855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:11:02.441 [DEBUG] [Thread-180855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:11:02.441 [DEBUG] [Thread-180855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:11:02.475 [INFO] [Thread-180855] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:11:02.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:11:03.080 [DEBUG] [Thread-180855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:11:03.080 [DEBUG] [Thread-180855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:11:03.081 [DEBUG] [Thread-180855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:11:03.121 [DEBUG] [Thread-180855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:11:03.121 [DEBUG] [Thread-180855] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:11:03.125 [DEBUG] [Thread-180855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:11:03.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:11:03.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:11:03.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:11:03.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:11:03.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:11:03.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:11:03.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:11:03.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:11:03.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:11:03.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.007400 -999.00  +10.10  15.21     98   +9.90 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.1 15.2 269.6 19.0 11.5 -0.9 11.3 -1.1 10.9 -1.0 11.3 -0.3
2026-04-12T02:11:03.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:11:03.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:11:03.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.007400
2026-04-12T02:11:03.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:11:03.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:11:03.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:11:03.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:11:03.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:11:03.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:10:22', tmtdew=0.022405, humidity=100.152, cloud=0.0, wind=15.6866, temperature=10.2003, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:10:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:11:03.168 [DEBUG] [Thread-180855] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:11:03.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:11:03.264 [DEBUG] [Thread-180858] [transport.py] [_log()] starting thread (client mode): 0xb0f6e380
2026-04-12T02:11:03.264 [DEBUG] [Thread-180858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:11:03.279 [DEBUG] [Thread-180858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:11:03.279 [INFO] [Thread-180858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:11:03.287 [DEBUG] [Thread-180858] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:11:03.287 [DEBUG] [Thread-180858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:11:03.288 [DEBUG] [Thread-180858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] client lang: <none>
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] server lang: <none>
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] kex follows: False
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] Compression: none
2026-04-12T02:11:03.289 [DEBUG] [Thread-180858] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:11:03.350 [DEBUG] [Thread-180858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:11:03.351 [DEBUG] [Thread-180858] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:11:03.351 [DEBUG] [Thread-180858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:11:03.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:11:03.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:11:03.405 [DEBUG] [Thread-180858] [transport.py] [_log()] userauth is OK
2026-04-12T02:11:03.406 [DEBUG] [Thread-180858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:11:03.406 [DEBUG] [Thread-180858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:11:03.406 [DEBUG] [Thread-180858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:11:03.406 [DEBUG] [Thread-180858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:11:03.427 [INFO] [Thread-180858] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:11:03.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:11:03.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:11:04.259 [DEBUG] [Thread-180858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:11:04.259 [DEBUG] [Thread-180858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:11:04.306 [DEBUG] [Thread-180858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:11:04.306 [DEBUG] [Thread-180858] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:11:04.315 [DEBUG] [Thread-180858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:11:04.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:11:04.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-04-12T02:11:04.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-04-12T02:11:04.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:11:04.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:11:04.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:11:04.349 [DEBUG] [Thread-180858] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:11:13.942 [DEBUG] [Thread-180860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:26.837 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:26.839 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:28.999 [DEBUG] [Thread-180861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:34.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:11:34.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:11:34.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-04-12T02:11:35.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 10, 57), 0.0199, 100.169, 0.0, 17.6454, 10.2169, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:11:35.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:10:57
2026-04-12T02:11:36.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:11:36.401 [DEBUG] [Thread-180862] [transport.py] [_log()] starting thread (client mode): 0xae5b71c0
2026-04-12T02:11:36.401 [DEBUG] [Thread-180862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:11:36.419 [DEBUG] [Thread-180862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:11:36.419 [INFO] [Thread-180862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] client lang: <none>
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] server lang: <none>
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] kex follows: False
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] Compression: none
2026-04-12T02:11:36.421 [DEBUG] [Thread-180862] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:11:36.430 [DEBUG] [Thread-180862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:11:36.430 [DEBUG] [Thread-180862] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:11:36.430 [DEBUG] [Thread-180862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:11:36.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:11:36.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:11:36.432 [DEBUG] [Thread-180862] [transport.py] [_log()] userauth is OK
2026-04-12T02:11:36.432 [DEBUG] [Thread-180862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:11:36.432 [DEBUG] [Thread-180862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:11:36.432 [DEBUG] [Thread-180862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:11:36.432 [DEBUG] [Thread-180862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:11:36.444 [INFO] [Thread-180862] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:11:36.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:11:37.027 [DEBUG] [Thread-180862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:11:37.027 [DEBUG] [Thread-180862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:11:37.028 [DEBUG] [Thread-180862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:11:37.068 [DEBUG] [Thread-180862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:11:37.068 [DEBUG] [Thread-180862] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:11:37.072 [DEBUG] [Thread-180862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:11:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:11:37.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:11:37.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:11:37.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:11:37.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:11:37.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:11:37.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:11:37.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:11:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:11:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.007747 -999.00  +10.10  15.23     98   +9.90 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.6 15.2 275.2 18.2 11.4 -1.3 11.3 -1.4 10.9 -1.1 11.3 -0.6
2026-04-12T02:11:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:11:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:11:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.007747
2026-04-12T02:11:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:11:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:11:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:11:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:11:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:11:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:10:57', tmtdew=0.0199, humidity=100.169, cloud=0.0, wind=17.6454, temperature=10.2169, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:11:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:11:37.092 [DEBUG] [Thread-180862] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:11:37.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:11:37.186 [DEBUG] [Thread-180865] [transport.py] [_log()] starting thread (client mode): 0xb0f6cb20
2026-04-12T02:11:37.186 [DEBUG] [Thread-180865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:11:37.201 [DEBUG] [Thread-180865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:11:37.201 [INFO] [Thread-180865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:11:37.208 [DEBUG] [Thread-180865] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] client lang: <none>
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] server lang: <none>
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] kex follows: False
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] Compression: none
2026-04-12T02:11:37.209 [DEBUG] [Thread-180865] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:11:37.267 [DEBUG] [Thread-180865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:11:37.267 [DEBUG] [Thread-180865] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:11:37.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:11:37.269 [DEBUG] [Thread-180865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:11:37.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:11:37.322 [DEBUG] [Thread-180865] [transport.py] [_log()] userauth is OK
2026-04-12T02:11:37.322 [DEBUG] [Thread-180865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:11:37.323 [DEBUG] [Thread-180865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:11:37.323 [DEBUG] [Thread-180865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:11:37.323 [DEBUG] [Thread-180865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:11:37.342 [INFO] [Thread-180865] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:11:37.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:11:37.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:11:38.158 [DEBUG] [Thread-180865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:11:38.158 [DEBUG] [Thread-180865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:11:38.206 [DEBUG] [Thread-180865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:11:38.206 [DEBUG] [Thread-180865] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:11:38.215 [DEBUG] [Thread-180865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:11:38.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:11:38.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:11: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-04-12T02:11:38.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:11:38.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:11:38.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:11:38.248 [DEBUG] [Thread-180865] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:11:44.036 [DEBUG] [Thread-180867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:52.499 [DEBUG] [Thread-180868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:11:59.087 [DEBUG] [Thread-180869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:12:08.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:12:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:12:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 11, 32), 0.019815, 100.169, 0.0, 16.5694, 10.2502, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:12:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:11:32
2026-04-12T02:12:09.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:12:10.125 [DEBUG] [Thread-180870] [transport.py] [_log()] starting thread (client mode): 0xae5b7040
2026-04-12T02:12:10.125 [DEBUG] [Thread-180870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:12:10.144 [DEBUG] [Thread-180870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:12:10.144 [INFO] [Thread-180870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] client lang: <none>
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] server lang: <none>
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] kex follows: False
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] Compression: none
2026-04-12T02:12:10.148 [DEBUG] [Thread-180870] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:12:10.163 [DEBUG] [Thread-180870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:12:10.163 [DEBUG] [Thread-180870] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:12:10.163 [DEBUG] [Thread-180870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:12:10.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:12:10.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:12:10.164 [DEBUG] [Thread-180870] [transport.py] [_log()] userauth is OK
2026-04-12T02:12:10.164 [DEBUG] [Thread-180870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:12:10.164 [DEBUG] [Thread-180870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:12:10.164 [DEBUG] [Thread-180870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:12:10.164 [DEBUG] [Thread-180870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:12:10.177 [INFO] [Thread-180870] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:12:10.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:12:10.777 [DEBUG] [Thread-180870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:12:10.777 [DEBUG] [Thread-180870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:12:10.778 [DEBUG] [Thread-180870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:12:10.817 [DEBUG] [Thread-180870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:12:10.818 [DEBUG] [Thread-180870] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:12:10.821 [DEBUG] [Thread-180870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:12:10.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:12:10.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:12:10.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:12:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:12:10.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:12:10.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:12:10.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:12:10.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:12:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:12:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.008094 -999.00  +10.10  16.40     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.9 16.4 274.2 24.3 11.4 -1.1 11.3 -1.3 10.9 -1.3 11.2 -0.5
2026-04-12T02:12:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:12:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:12:10.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.008094
2026-04-12T02:12:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:12:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:12:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:12:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:12:10.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:12:10.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:11:32', tmtdew=0.019815, humidity=100.169, cloud=0.0, wind=16.5694, temperature=10.2502, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:11:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:12:10.845 [DEBUG] [Thread-180870] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:12:10.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:12:10.937 [DEBUG] [Thread-180873] [transport.py] [_log()] starting thread (client mode): 0xae50a590
2026-04-12T02:12:10.937 [DEBUG] [Thread-180873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:12:10.952 [DEBUG] [Thread-180873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:12:10.952 [INFO] [Thread-180873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:10.960 [DEBUG] [Thread-180873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] client lang: <none>
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] server lang: <none>
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] kex follows: False
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:12:10.961 [DEBUG] [Thread-180873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:12:10.962 [DEBUG] [Thread-180873] [transport.py] [_log()] Compression: none
2026-04-12T02:12:10.962 [DEBUG] [Thread-180873] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:12:11.019 [DEBUG] [Thread-180873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:12:11.020 [DEBUG] [Thread-180873] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:12:11.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:12:11.021 [DEBUG] [Thread-180873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:12:11.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:12:11.078 [DEBUG] [Thread-180873] [transport.py] [_log()] userauth is OK
2026-04-12T02:12:11.079 [DEBUG] [Thread-180873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:12:11.079 [DEBUG] [Thread-180873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:12:11.079 [DEBUG] [Thread-180873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:12:11.079 [DEBUG] [Thread-180873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:12:11.100 [INFO] [Thread-180873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:12:11.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:12:11.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:12:11.871 [DEBUG] [Thread-180873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:12:11.872 [DEBUG] [Thread-180873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:12:11.919 [DEBUG] [Thread-180873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:12:11.919 [DEBUG] [Thread-180873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:12:11.928 [DEBUG] [Thread-180873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:12:11.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:12:11.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-04-12T02:12:11.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-04-12T02:12:11.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:12:11.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:12:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:12:11.965 [DEBUG] [Thread-180873] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:12:14.126 [DEBUG] [Thread-180875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:27.042 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:27.044 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:29.181 [DEBUG] [Thread-180876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:12:41.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:12:41.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:12:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 12, 9), 0.029835, 100.102, 0.0, 17.2926, 10.2169, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:12:43.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:12:09
2026-04-12T02:12:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:12:43.759 [DEBUG] [Thread-180877] [transport.py] [_log()] starting thread (client mode): 0xae5b7df0
2026-04-12T02:12:43.760 [DEBUG] [Thread-180877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:12:43.775 [DEBUG] [Thread-180877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:12:43.775 [INFO] [Thread-180877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] client lang: <none>
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] server lang: <none>
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] kex follows: False
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:12:43.778 [DEBUG] [Thread-180877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:12:43.779 [DEBUG] [Thread-180877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:12:43.779 [DEBUG] [Thread-180877] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:12:43.779 [DEBUG] [Thread-180877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:12:43.779 [DEBUG] [Thread-180877] [transport.py] [_log()] Compression: none
2026-04-12T02:12:43.779 [DEBUG] [Thread-180877] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:12:43.791 [DEBUG] [Thread-180877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:12:43.792 [DEBUG] [Thread-180877] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:12:43.792 [DEBUG] [Thread-180877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:12:43.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:12:43.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:12:43.793 [DEBUG] [Thread-180877] [transport.py] [_log()] userauth is OK
2026-04-12T02:12:43.793 [DEBUG] [Thread-180877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:12:43.793 [DEBUG] [Thread-180877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:12:43.793 [DEBUG] [Thread-180877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:12:43.793 [DEBUG] [Thread-180877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:12:43.812 [INFO] [Thread-180877] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:12:43.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:12:44.219 [DEBUG] [Thread-180879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:44.387 [DEBUG] [Thread-180877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:12:44.388 [DEBUG] [Thread-180877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:12:44.388 [DEBUG] [Thread-180877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:12:44.429 [DEBUG] [Thread-180877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:12:44.429 [DEBUG] [Thread-180877] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:12:44.437 [DEBUG] [Thread-180877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:12:44.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:12:44.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:12:44.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:12:44.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:12:44.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:12:44.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:12:44.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:12:44.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:12:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:12:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.008442 -999.00  +10.10  17.29     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.6 17.3 284.4 21.5 11.4 -1.1 11.3 -1.6 10.9 -1.5 11.3 -0.5
2026-04-12T02:12:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:12:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:12:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.008442
2026-04-12T02:12:44.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:12:44.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:12:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:12:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:12:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:12:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:12:09', tmtdew=0.029835, humidity=100.102, cloud=0.0, wind=17.2926, temperature=10.2169, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:12:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:12:44.463 [DEBUG] [Thread-180877] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:12:44.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:12:44.552 [DEBUG] [Thread-180881] [transport.py] [_log()] starting thread (client mode): 0xae5371f0
2026-04-12T02:12:44.552 [DEBUG] [Thread-180881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:12:44.568 [DEBUG] [Thread-180881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:12:44.569 [INFO] [Thread-180881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:12:44.576 [DEBUG] [Thread-180881] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:12:44.576 [DEBUG] [Thread-180881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] client lang: <none>
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] server lang: <none>
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] kex follows: False
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] Compression: none
2026-04-12T02:12:44.577 [DEBUG] [Thread-180881] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:12:44.635 [DEBUG] [Thread-180881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:12:44.636 [DEBUG] [Thread-180881] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:12:44.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:12:44.637 [DEBUG] [Thread-180881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:12:44.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:12:44.691 [DEBUG] [Thread-180881] [transport.py] [_log()] userauth is OK
2026-04-12T02:12:44.691 [DEBUG] [Thread-180881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:12:44.692 [DEBUG] [Thread-180881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:12:44.692 [DEBUG] [Thread-180881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:12:44.692 [DEBUG] [Thread-180881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:12:44.711 [INFO] [Thread-180881] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:12:44.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:12:44.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:12:45.539 [DEBUG] [Thread-180881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:12:45.539 [DEBUG] [Thread-180881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:12:45.587 [DEBUG] [Thread-180881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:12:45.587 [DEBUG] [Thread-180881] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:12:45.596 [DEBUG] [Thread-180881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:12:45.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:12:45.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:12:45.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-04-12T02:12:45.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:12:45.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:12:45.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:12:45.633 [DEBUG] [Thread-180881] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:12:52.564 [DEBUG] [Thread-180883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:12:59.260 [DEBUG] [Thread-180884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:14.309 [DEBUG] [Thread-180885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:15.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:13:15.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:13:15.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-04-12T02:13:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 12, 44), -0.05545, 100.304, 0.0, 16.9027, 10.7996, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:13:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:12:44
2026-04-12T02:13:17.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:13:17.517 [DEBUG] [Thread-180886] [transport.py] [_log()] starting thread (client mode): 0xae5b1a50
2026-04-12T02:13:17.517 [DEBUG] [Thread-180886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:13:17.537 [DEBUG] [Thread-180886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:13:17.538 [INFO] [Thread-180886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:13:17.539 [DEBUG] [Thread-180886] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:13:17.539 [DEBUG] [Thread-180886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:13:17.539 [DEBUG] [Thread-180886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:13:17.539 [DEBUG] [Thread-180886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:17.539 [DEBUG] [Thread-180886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] client lang: <none>
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] server lang: <none>
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] kex follows: False
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:13:17.540 [DEBUG] [Thread-180886] [transport.py] [_log()] Compression: none
2026-04-12T02:13:17.541 [DEBUG] [Thread-180886] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:13:17.554 [DEBUG] [Thread-180886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:13:17.555 [DEBUG] [Thread-180886] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:13:17.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:13:17.556 [DEBUG] [Thread-180886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:13:17.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:13:17.558 [DEBUG] [Thread-180886] [transport.py] [_log()] userauth is OK
2026-04-12T02:13:17.558 [DEBUG] [Thread-180886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:13:17.559 [DEBUG] [Thread-180886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:13:17.559 [DEBUG] [Thread-180886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:13:17.559 [DEBUG] [Thread-180886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:13:17.580 [INFO] [Thread-180886] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:13:17.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:13:18.271 [DEBUG] [Thread-180886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:13:18.271 [DEBUG] [Thread-180886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:13:18.272 [DEBUG] [Thread-180886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:13:18.312 [DEBUG] [Thread-180886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:13:18.312 [DEBUG] [Thread-180886] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:13:18.315 [DEBUG] [Thread-180886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:13:18.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:13:18.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:13:18.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:13:18.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:13:18.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:13:18.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:13:18.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:13:18.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:13:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:13:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.009136 -999.00  +10.10  14.28     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.0 14.3 276.0 21.6 11.4 -1.0 11.3 -1.3 10.9 -1.1 11.2 -0.6
2026-04-12T02:13:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:13:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:13:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.009136
2026-04-12T02:13:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:13:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:13:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:13:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:13:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:13:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:12:44', tmtdew=-0.05545, humidity=100.304, cloud=0.0, wind=16.9027, temperature=10.7996, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:13:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:13:18.342 [DEBUG] [Thread-180886] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:13:18.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:13:18.435 [DEBUG] [Thread-180889] [transport.py] [_log()] starting thread (client mode): 0xae534850
2026-04-12T02:13:18.435 [DEBUG] [Thread-180889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:13:18.449 [DEBUG] [Thread-180889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:13:18.449 [INFO] [Thread-180889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:13:18.457 [DEBUG] [Thread-180889] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:13:18.457 [DEBUG] [Thread-180889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:13:18.457 [DEBUG] [Thread-180889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] client lang: <none>
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] server lang: <none>
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] kex follows: False
2026-04-12T02:13:18.458 [DEBUG] [Thread-180889] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:13:18.459 [DEBUG] [Thread-180889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:13:18.459 [DEBUG] [Thread-180889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:13:18.459 [DEBUG] [Thread-180889] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:13:18.459 [DEBUG] [Thread-180889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:13:18.459 [DEBUG] [Thread-180889] [transport.py] [_log()] Compression: none
2026-04-12T02:13:18.459 [DEBUG] [Thread-180889] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:13:18.516 [DEBUG] [Thread-180889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:13:18.516 [DEBUG] [Thread-180889] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:13:18.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:13:18.518 [DEBUG] [Thread-180889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:13:18.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:13:18.571 [DEBUG] [Thread-180889] [transport.py] [_log()] userauth is OK
2026-04-12T02:13:18.572 [DEBUG] [Thread-180889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:13:18.572 [DEBUG] [Thread-180889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:13:18.572 [DEBUG] [Thread-180889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:13:18.572 [DEBUG] [Thread-180889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:13:18.591 [INFO] [Thread-180889] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:13:18.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:13:18.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:13:19.392 [DEBUG] [Thread-180889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:13:19.392 [DEBUG] [Thread-180889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:13:19.439 [DEBUG] [Thread-180889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:13:19.440 [DEBUG] [Thread-180889] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:13:19.448 [DEBUG] [Thread-180889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:13:19.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:13:19.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:13:19.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-04-12T02:13:19.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:13:19.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:13:19.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:13:19.482 [DEBUG] [Thread-180889] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:13:27.247 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:27.249 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:29.342 [DEBUG] [Thread-180891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:44.397 [DEBUG] [Thread-180892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:49.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:13:49.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:13:49.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-04-12T02:13:50.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 13, 19), 0.01981, 100.169, 0.0, 16.8516, 10.2832, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:13:50.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:13:19
2026-04-12T02:13:51.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:13:51.296 [DEBUG] [Thread-180893] [transport.py] [_log()] starting thread (client mode): 0xae5b0f10
2026-04-12T02:13:51.296 [DEBUG] [Thread-180893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:13:51.310 [DEBUG] [Thread-180893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:13:51.310 [INFO] [Thread-180893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:13:51.313 [DEBUG] [Thread-180893] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:13:51.313 [DEBUG] [Thread-180893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:13:51.313 [DEBUG] [Thread-180893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:13:51.313 [DEBUG] [Thread-180893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] client lang: <none>
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] server lang: <none>
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] kex follows: False
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] Compression: none
2026-04-12T02:13:51.314 [DEBUG] [Thread-180893] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:13:51.333 [DEBUG] [Thread-180893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:13:51.334 [DEBUG] [Thread-180893] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:13:51.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:13:51.335 [DEBUG] [Thread-180893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:13:51.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:13:51.337 [DEBUG] [Thread-180893] [transport.py] [_log()] userauth is OK
2026-04-12T02:13:51.337 [DEBUG] [Thread-180893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:13:51.337 [DEBUG] [Thread-180893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:13:51.338 [DEBUG] [Thread-180893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:13:51.338 [DEBUG] [Thread-180893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:13:51.359 [INFO] [Thread-180893] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:13:51.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:13:52.011 [DEBUG] [Thread-180893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:13:52.011 [DEBUG] [Thread-180893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:13:52.012 [DEBUG] [Thread-180893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:13:52.053 [DEBUG] [Thread-180893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:13:52.053 [DEBUG] [Thread-180893] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:13:52.056 [DEBUG] [Thread-180893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:13:52.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:13:52.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:13:52.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:13:52.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:13:52.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:13:52.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:13:52.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:13:52.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:13:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:13:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.009483 -999.00  +10.00  14.50     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.2 14.5 275.4 24.2 11.4 -1.0 11.3 -1.4 10.8 -1.5 11.3 -0.6
2026-04-12T02:13:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:13:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:13:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.009483
2026-04-12T02:13:52.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:13:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:13:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:13:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:13:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:13:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:13:19', tmtdew=0.01981, humidity=100.169, cloud=0.0, wind=16.8516, temperature=10.2832, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:13:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:13:52.089 [DEBUG] [Thread-180893] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:13:52.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:13:52.181 [DEBUG] [Thread-180896] [transport.py] [_log()] starting thread (client mode): 0xae5b0280
2026-04-12T02:13:52.181 [DEBUG] [Thread-180896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:13:52.196 [DEBUG] [Thread-180896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:13:52.196 [INFO] [Thread-180896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:52.203 [DEBUG] [Thread-180896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] client lang: <none>
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] server lang: <none>
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] kex follows: False
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] Compression: none
2026-04-12T02:13:52.204 [DEBUG] [Thread-180896] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:13:52.264 [DEBUG] [Thread-180896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:13:52.265 [DEBUG] [Thread-180896] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:13:52.265 [DEBUG] [Thread-180896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:13:52.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:13:52.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:13:52.320 [DEBUG] [Thread-180896] [transport.py] [_log()] userauth is OK
2026-04-12T02:13:52.320 [DEBUG] [Thread-180896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:13:52.320 [DEBUG] [Thread-180896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:13:52.320 [DEBUG] [Thread-180896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:13:52.320 [DEBUG] [Thread-180896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:13:52.339 [INFO] [Thread-180896] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:13:52.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:13:52.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:13:52.645 [DEBUG] [Thread-180898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:13:53.174 [DEBUG] [Thread-180896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:13:53.175 [DEBUG] [Thread-180896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:13:53.223 [DEBUG] [Thread-180896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:13:53.223 [DEBUG] [Thread-180896] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:13:53.233 [DEBUG] [Thread-180896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:13:53.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:13:53.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-04-12T02:13:53.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-04-12T02:13:53.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:13:53.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:13:53.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:13:53.270 [DEBUG] [Thread-180896] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:13:59.432 [DEBUG] [Thread-180899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:14.487 [DEBUG] [Thread-180900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:14:23.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:14:23.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:14:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 13, 55), 0.019775, 100.169, 0.0, 17.9269, 10.2334, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:14:24.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:13:55
2026-04-12T02:14:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:14:25.071 [DEBUG] [Thread-180901] [transport.py] [_log()] starting thread (client mode): 0xae5b6380
2026-04-12T02:14:25.071 [DEBUG] [Thread-180901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:14:25.087 [DEBUG] [Thread-180901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:14:25.087 [INFO] [Thread-180901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] client lang: <none>
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] server lang: <none>
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] kex follows: False
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] Compression: none
2026-04-12T02:14:25.088 [DEBUG] [Thread-180901] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:14:25.097 [DEBUG] [Thread-180901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:14:25.097 [DEBUG] [Thread-180901] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:14:25.097 [DEBUG] [Thread-180901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:14:25.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:14:25.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:14:25.098 [DEBUG] [Thread-180901] [transport.py] [_log()] userauth is OK
2026-04-12T02:14:25.098 [DEBUG] [Thread-180901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:14:25.098 [DEBUG] [Thread-180901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:14:25.098 [DEBUG] [Thread-180901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:14:25.098 [DEBUG] [Thread-180901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:14:25.110 [INFO] [Thread-180901] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:14:25.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:14:25.734 [DEBUG] [Thread-180901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:14:25.734 [DEBUG] [Thread-180901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:14:25.735 [DEBUG] [Thread-180901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:14:25.775 [DEBUG] [Thread-180901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:14:25.776 [DEBUG] [Thread-180901] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:14:25.779 [DEBUG] [Thread-180901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:14:25.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:14:25.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:14:25.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:14:25.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:14:25.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:14:25.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:14:25.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:14:25.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:14:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:14:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.009831 -999.00  +10.00  18.22     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.0 18.2 272.2 20.9 11.4 -1.4 11.3 -1.5 10.9 -1.0 11.3 -0.7
2026-04-12T02:14:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:14:25.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:14:25.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.009831
2026-04-12T02:14:25.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:14:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:14:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:14:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:14:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:14:25.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:13:55', tmtdew=0.019775, humidity=100.169, cloud=0.0, wind=17.9269, temperature=10.2334, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:14:09.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:14:25.807 [DEBUG] [Thread-180901] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:14:25.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:14:25.901 [DEBUG] [Thread-180904] [transport.py] [_log()] starting thread (client mode): 0xb0f42ce0
2026-04-12T02:14:25.901 [DEBUG] [Thread-180904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:14:25.916 [DEBUG] [Thread-180904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:14:25.917 [INFO] [Thread-180904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:14:25.924 [DEBUG] [Thread-180904] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] client lang: <none>
2026-04-12T02:14:25.925 [DEBUG] [Thread-180904] [transport.py] [_log()] server lang: <none>
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] kex follows: False
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:14:25.926 [DEBUG] [Thread-180904] [transport.py] [_log()] Compression: none
2026-04-12T02:14:25.927 [DEBUG] [Thread-180904] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:14:25.984 [DEBUG] [Thread-180904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:14:25.985 [DEBUG] [Thread-180904] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:14:25.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:14:25.986 [DEBUG] [Thread-180904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:14:25.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:14:26.040 [DEBUG] [Thread-180904] [transport.py] [_log()] userauth is OK
2026-04-12T02:14:26.041 [DEBUG] [Thread-180904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:14:26.041 [DEBUG] [Thread-180904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:14:26.041 [DEBUG] [Thread-180904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:14:26.041 [DEBUG] [Thread-180904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:14:26.061 [INFO] [Thread-180904] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:14:26.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:14:26.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:14:26.879 [DEBUG] [Thread-180904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:14:26.879 [DEBUG] [Thread-180904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:14:26.927 [DEBUG] [Thread-180904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:14:26.927 [DEBUG] [Thread-180904] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:14:26.936 [DEBUG] [Thread-180904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:14:26.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:14:26.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-04-12T02:14:26.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-04-12T02:14:26.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:14:26.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:14:26.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:14:26.973 [DEBUG] [Thread-180904] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:14:27.457 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:27.458 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:29.526 [DEBUG] [Thread-180906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:44.585 [DEBUG] [Thread-180907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:52.725 [DEBUG] [Thread-180908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:56.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:14:56.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:14:57.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-04-12T02:14:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 14, 30), 0.02985, 100.103, 0.0, 16.0747, 10.1008, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:14:58.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:14:30
2026-04-12T02:14:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:14:58.842 [DEBUG] [Thread-180909] [transport.py] [_log()] starting thread (client mode): 0xb0f430d0
2026-04-12T02:14:58.842 [DEBUG] [Thread-180909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:14:58.862 [DEBUG] [Thread-180909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:14:58.862 [INFO] [Thread-180909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] client lang: <none>
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] server lang: <none>
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] kex follows: False
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] Compression: none
2026-04-12T02:14:58.866 [DEBUG] [Thread-180909] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:14:58.884 [DEBUG] [Thread-180909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:14:58.884 [DEBUG] [Thread-180909] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:14:58.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:14:58.885 [DEBUG] [Thread-180909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:14:58.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:14:58.887 [DEBUG] [Thread-180909] [transport.py] [_log()] userauth is OK
2026-04-12T02:14:58.888 [DEBUG] [Thread-180909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:14:58.888 [DEBUG] [Thread-180909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:14:58.888 [DEBUG] [Thread-180909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:14:58.888 [DEBUG] [Thread-180909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:14:58.910 [INFO] [Thread-180909] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:14:58.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:14:59.531 [DEBUG] [Thread-180909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:14:59.531 [DEBUG] [Thread-180909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:14:59.532 [DEBUG] [Thread-180909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:14:59.572 [DEBUG] [Thread-180909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:14:59.572 [DEBUG] [Thread-180909] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:14:59.575 [DEBUG] [Thread-180909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:14:59.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:14:59.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:14:59.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:14:59.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:14:59.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:14:59.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:14:59.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:14:59.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:14:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:14:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.010178 -999.00  +10.00  15.18     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.6 15.2 277.4 22.6 11.4 -1.2 11.2 -1.6 10.8 -1.5 11.2 -0.7
2026-04-12T02:14:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:14:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:14:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.010178
2026-04-12T02:14:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:14:59.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:14:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:14:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:14:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:14:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:14:30', tmtdew=0.02985, humidity=100.103, cloud=0.0, wind=16.0747, temperature=10.1008, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:14:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:14:59.603 [DEBUG] [Thread-180909] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:14:59.619 [DEBUG] [Thread-180912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:14:59.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:14:59.697 [DEBUG] [Thread-180913] [transport.py] [_log()] starting thread (client mode): 0xae534520
2026-04-12T02:14:59.697 [DEBUG] [Thread-180913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:14:59.711 [DEBUG] [Thread-180913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:14:59.711 [INFO] [Thread-180913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:14:59.719 [DEBUG] [Thread-180913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] client lang: <none>
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] server lang: <none>
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] kex follows: False
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] Compression: none
2026-04-12T02:14:59.720 [DEBUG] [Thread-180913] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:14:59.776 [DEBUG] [Thread-180913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:14:59.777 [DEBUG] [Thread-180913] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:14:59.777 [DEBUG] [Thread-180913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:14:59.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:14:59.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:14:59.832 [DEBUG] [Thread-180913] [transport.py] [_log()] userauth is OK
2026-04-12T02:14:59.832 [DEBUG] [Thread-180913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:14:59.832 [DEBUG] [Thread-180913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:14:59.832 [DEBUG] [Thread-180913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:14:59.832 [DEBUG] [Thread-180913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:14:59.845 [INFO] [Thread-180913] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:14:59.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:14:59.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:15:00.683 [DEBUG] [Thread-180913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:15:00.683 [DEBUG] [Thread-180913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:15:00.732 [DEBUG] [Thread-180913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:15:00.732 [DEBUG] [Thread-180913] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:15:00.740 [DEBUG] [Thread-180913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:15:00.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:15:00.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-04-12T02:15:00.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-04-12T02:15:00.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:15:00.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:15:00.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:15:00.774 [DEBUG] [Thread-180913] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:15:14.660 [DEBUG] [Thread-180915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:15:27.662 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:15:27.664 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:15:29.697 [DEBUG] [Thread-180916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:15:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:15:30.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:15:30.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-04-12T02:15:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 15, 6), 0.019855, 100.169, 0.0, 17.2742, 10.1506, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:15:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:15:06
2026-04-12T02:15:32.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:15:32.676 [DEBUG] [Thread-180917] [transport.py] [_log()] starting thread (client mode): 0xae5b7520
2026-04-12T02:15:32.677 [DEBUG] [Thread-180917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:15:32.696 [DEBUG] [Thread-180917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:15:32.696 [INFO] [Thread-180917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:15:32.699 [DEBUG] [Thread-180917] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] client lang: <none>
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] server lang: <none>
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] kex follows: False
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:15:32.700 [DEBUG] [Thread-180917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:15:32.701 [DEBUG] [Thread-180917] [transport.py] [_log()] Compression: none
2026-04-12T02:15:32.701 [DEBUG] [Thread-180917] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:15:32.716 [DEBUG] [Thread-180917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:15:32.717 [DEBUG] [Thread-180917] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:15:32.717 [DEBUG] [Thread-180917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:15:32.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:15:32.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:15:32.720 [DEBUG] [Thread-180917] [transport.py] [_log()] userauth is OK
2026-04-12T02:15:32.720 [DEBUG] [Thread-180917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:15:32.720 [DEBUG] [Thread-180917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:15:32.720 [DEBUG] [Thread-180917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:15:32.720 [DEBUG] [Thread-180917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:15:32.737 [INFO] [Thread-180917] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:15:32.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:15:33.342 [DEBUG] [Thread-180917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:15:33.342 [DEBUG] [Thread-180917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:15:33.343 [DEBUG] [Thread-180917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:15:33.385 [DEBUG] [Thread-180917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:15:33.385 [DEBUG] [Thread-180917] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:15:33.389 [DEBUG] [Thread-180917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:15:33.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:15:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:15:33.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:15:33.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:15:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:15:33.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:15:33.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:15:33.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:15:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:15:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.010525 -999.00  +10.00  19.09     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 18.0 19.1 275.2 25.9 11.4 -1.3 11.3 -1.6 10.8 -1.7 11.2 -0.8
2026-04-12T02:15:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:15:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:15:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.010525
2026-04-12T02:15:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:15:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:15:33.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:15:33.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:15:33.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:15:33.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:15:06', tmtdew=0.019855, humidity=100.169, cloud=0.0, wind=17.2742, temperature=10.1506, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:15:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:15:33.423 [DEBUG] [Thread-180917] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:15:33.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:15:33.515 [DEBUG] [Thread-180920] [transport.py] [_log()] starting thread (client mode): 0xae5b2d70
2026-04-12T02:15:33.516 [DEBUG] [Thread-180920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:15:33.531 [DEBUG] [Thread-180920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:15:33.531 [INFO] [Thread-180920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] client lang: <none>
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] server lang: <none>
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] kex follows: False
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:15:33.540 [DEBUG] [Thread-180920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:15:33.541 [DEBUG] [Thread-180920] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:15:33.541 [DEBUG] [Thread-180920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:15:33.541 [DEBUG] [Thread-180920] [transport.py] [_log()] Compression: none
2026-04-12T02:15:33.541 [DEBUG] [Thread-180920] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:15:33.597 [DEBUG] [Thread-180920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:15:33.598 [DEBUG] [Thread-180920] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:15:33.598 [DEBUG] [Thread-180920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:15:33.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:15:33.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:15:33.657 [DEBUG] [Thread-180920] [transport.py] [_log()] userauth is OK
2026-04-12T02:15:33.657 [DEBUG] [Thread-180920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:15:33.657 [DEBUG] [Thread-180920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:15:33.657 [DEBUG] [Thread-180920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:15:33.657 [DEBUG] [Thread-180920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:15:33.677 [INFO] [Thread-180920] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:15:33.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:15:33.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:15:34.485 [DEBUG] [Thread-180920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:15:34.485 [DEBUG] [Thread-180920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:15:34.533 [DEBUG] [Thread-180920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:15:34.533 [DEBUG] [Thread-180920] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:15:34.541 [DEBUG] [Thread-180920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:15:34.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:15:34.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-04-12T02:15:34.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-04-12T02:15:34.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:15:34.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:15:34.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:15:34.578 [DEBUG] [Thread-180920] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:15:44.734 [DEBUG] [Thread-180922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:15:52.782 [DEBUG] [Thread-180923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:15:59.792 [DEBUG] [Thread-180924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:16:04.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:16:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:16:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 15, 41), -0.05523, 100.305, 0.0, 18.6314, 10.5348, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:16:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:15:41
2026-04-12T02:16:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:16:06.461 [DEBUG] [Thread-180925] [transport.py] [_log()] starting thread (client mode): 0xae5b7b20
2026-04-12T02:16:06.461 [DEBUG] [Thread-180925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:16:06.482 [DEBUG] [Thread-180925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:16:06.482 [INFO] [Thread-180925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] client lang: <none>
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] server lang: <none>
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] kex follows: False
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:16:06.485 [DEBUG] [Thread-180925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:16:06.486 [DEBUG] [Thread-180925] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:16:06.486 [DEBUG] [Thread-180925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:16:06.486 [DEBUG] [Thread-180925] [transport.py] [_log()] Compression: none
2026-04-12T02:16:06.486 [DEBUG] [Thread-180925] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:16:06.503 [DEBUG] [Thread-180925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:16:06.504 [DEBUG] [Thread-180925] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:16:06.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:16:06.505 [DEBUG] [Thread-180925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:16:06.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:16:06.507 [DEBUG] [Thread-180925] [transport.py] [_log()] userauth is OK
2026-04-12T02:16:06.507 [DEBUG] [Thread-180925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:16:06.507 [DEBUG] [Thread-180925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:16:06.507 [DEBUG] [Thread-180925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:16:06.507 [DEBUG] [Thread-180925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:16:06.532 [INFO] [Thread-180925] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:16:06.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:16:07.160 [DEBUG] [Thread-180925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:16:07.160 [DEBUG] [Thread-180925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:16:07.161 [DEBUG] [Thread-180925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:16:07.201 [DEBUG] [Thread-180925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:16:07.201 [DEBUG] [Thread-180925] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:16:07.205 [DEBUG] [Thread-180925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:16:07.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:16:07.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:16:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:16:07.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:16:07.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:16:07.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:16:07.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:16:07.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:16:07.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:16:07.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.010872 -999.00   +9.90  21.84     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.1 21.8 271.8 24.4 11.4 -1.3 11.2 -1.5 10.8 -1.6 11.2 -0.6
2026-04-12T02:16:07.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:16:07.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:16:07.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.010872
2026-04-12T02:16:07.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:16:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:16:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:16:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:16:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:16:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:15:41', tmtdew=-0.05523, humidity=100.305, cloud=0.0, wind=18.6314, temperature=10.5348, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:15:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:16:07.232 [DEBUG] [Thread-180925] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:16:07.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:16:07.340 [DEBUG] [Thread-180928] [transport.py] [_log()] starting thread (client mode): 0xae5087f0
2026-04-12T02:16:07.340 [DEBUG] [Thread-180928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:16:07.355 [DEBUG] [Thread-180928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:16:07.355 [INFO] [Thread-180928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:16:07.363 [DEBUG] [Thread-180928] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:16:07.363 [DEBUG] [Thread-180928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:16:07.363 [DEBUG] [Thread-180928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] client lang: <none>
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] server lang: <none>
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] kex follows: False
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] Compression: none
2026-04-12T02:16:07.364 [DEBUG] [Thread-180928] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:16:07.421 [DEBUG] [Thread-180928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:16:07.421 [DEBUG] [Thread-180928] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:16:07.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:16:07.422 [DEBUG] [Thread-180928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:16:07.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:16:07.477 [DEBUG] [Thread-180928] [transport.py] [_log()] userauth is OK
2026-04-12T02:16:07.477 [DEBUG] [Thread-180928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:16:07.478 [DEBUG] [Thread-180928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:16:07.478 [DEBUG] [Thread-180928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:16:07.478 [DEBUG] [Thread-180928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:16:07.503 [INFO] [Thread-180928] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:16:07.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:16:07.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:16:08.320 [DEBUG] [Thread-180928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:16:08.320 [DEBUG] [Thread-180928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:16:08.368 [DEBUG] [Thread-180928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:16:08.368 [DEBUG] [Thread-180928] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:16:08.377 [DEBUG] [Thread-180928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:16:08.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:16:08.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-04-12T02:16:08.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:16:08.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:16:08.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:16:08.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:16:08.414 [DEBUG] [Thread-180928] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:16:14.830 [DEBUG] [Thread-180930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:27.863 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:27.864 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:29.886 [DEBUG] [Thread-180931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:16:38.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:16:38.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-04-12T02:16:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 16, 16), -0.030145, 100.169, 0.0, 18.8802, 10.0841, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:16:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:16:16
2026-04-12T02:16:40.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:16:40.248 [DEBUG] [Thread-180932] [transport.py] [_log()] starting thread (client mode): 0xae5b0070
2026-04-12T02:16:40.248 [DEBUG] [Thread-180932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:16:40.268 [DEBUG] [Thread-180932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:16:40.269 [INFO] [Thread-180932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:16:40.271 [DEBUG] [Thread-180932] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:16:40.271 [DEBUG] [Thread-180932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] client lang: <none>
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] server lang: <none>
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] kex follows: False
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] Compression: none
2026-04-12T02:16:40.272 [DEBUG] [Thread-180932] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:16:40.290 [DEBUG] [Thread-180932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:16:40.291 [DEBUG] [Thread-180932] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:16:40.291 [DEBUG] [Thread-180932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:16:40.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:16:40.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:16:40.293 [DEBUG] [Thread-180932] [transport.py] [_log()] userauth is OK
2026-04-12T02:16:40.294 [DEBUG] [Thread-180932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:16:40.294 [DEBUG] [Thread-180932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:16:40.294 [DEBUG] [Thread-180932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:16:40.294 [DEBUG] [Thread-180932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:16:40.318 [INFO] [Thread-180932] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:16:40.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:16:40.959 [DEBUG] [Thread-180932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:16:40.960 [DEBUG] [Thread-180932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:16:40.960 [DEBUG] [Thread-180932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:16:41.001 [DEBUG] [Thread-180932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:16:41.001 [DEBUG] [Thread-180932] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:16:41.005 [DEBUG] [Thread-180932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:16:41.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:16:41.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:16:41.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:16:41.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:16:41.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:16:41.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:16:41.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:16:41.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:16:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:16:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.011219 -999.00   +9.90  18.91     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.8 18.9 282.2 22.4 11.4 -1.1 11.2 -1.5 10.8 -1.1 11.2 -0.6
2026-04-12T02:16:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:16:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:16:41.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.011219
2026-04-12T02:16:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:16:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:16:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:16:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:16:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:16:41.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:16:16', tmtdew=-0.030145, humidity=100.169, cloud=0.0, wind=18.8802, temperature=10.0841, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:16:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:16:41.031 [DEBUG] [Thread-180932] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:16:41.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:16:41.125 [DEBUG] [Thread-180935] [transport.py] [_log()] starting thread (client mode): 0xae5b0ac0
2026-04-12T02:16:41.126 [DEBUG] [Thread-180935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:16:41.141 [DEBUG] [Thread-180935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:16:41.141 [INFO] [Thread-180935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:16:41.149 [DEBUG] [Thread-180935] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:16:41.149 [DEBUG] [Thread-180935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:16:41.150 [DEBUG] [Thread-180935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] client lang: <none>
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] server lang: <none>
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] kex follows: False
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] Compression: none
2026-04-12T02:16:41.151 [DEBUG] [Thread-180935] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:16:41.210 [DEBUG] [Thread-180935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:16:41.210 [DEBUG] [Thread-180935] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:16:41.211 [DEBUG] [Thread-180935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:16:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:16:41.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:16:41.269 [DEBUG] [Thread-180935] [transport.py] [_log()] userauth is OK
2026-04-12T02:16:41.270 [DEBUG] [Thread-180935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:16:41.270 [DEBUG] [Thread-180935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:16:41.270 [DEBUG] [Thread-180935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:16:41.270 [DEBUG] [Thread-180935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:16:41.295 [INFO] [Thread-180935] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:16:41.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:16:41.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:16:42.140 [DEBUG] [Thread-180935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:16:42.140 [DEBUG] [Thread-180935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:16:42.188 [DEBUG] [Thread-180935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:16:42.188 [DEBUG] [Thread-180935] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:16:42.197 [DEBUG] [Thread-180935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:16:42.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:16:42.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-04-12T02:16:42.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:16:42.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:16:42.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:16:42.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:16:42.233 [DEBUG] [Thread-180935] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:16:44.920 [DEBUG] [Thread-180937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:52.854 [DEBUG] [Thread-180938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:16:59.969 [DEBUG] [Thread-180939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:17:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:17:12.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:17:12.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-04-12T02:17:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 16, 52), -0.09497, 100.571, 0.0, 18.8078, 10.5351, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:17:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:16:52
2026-04-12T02:17:13.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:17:14.049 [DEBUG] [Thread-180940] [transport.py] [_log()] starting thread (client mode): 0xae5b1660
2026-04-12T02:17:14.049 [DEBUG] [Thread-180940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:17:14.071 [DEBUG] [Thread-180940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:17:14.071 [INFO] [Thread-180940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] client lang: <none>
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] server lang: <none>
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] kex follows: False
2026-04-12T02:17:14.075 [DEBUG] [Thread-180940] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:17:14.076 [DEBUG] [Thread-180940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:17:14.076 [DEBUG] [Thread-180940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:17:14.076 [DEBUG] [Thread-180940] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:17:14.076 [DEBUG] [Thread-180940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:17:14.076 [DEBUG] [Thread-180940] [transport.py] [_log()] Compression: none
2026-04-12T02:17:14.076 [DEBUG] [Thread-180940] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:17:14.093 [DEBUG] [Thread-180940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:17:14.094 [DEBUG] [Thread-180940] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:17:14.094 [DEBUG] [Thread-180940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:17:14.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:17:14.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:17:14.096 [DEBUG] [Thread-180940] [transport.py] [_log()] userauth is OK
2026-04-12T02:17:14.097 [DEBUG] [Thread-180940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:17:14.097 [DEBUG] [Thread-180940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:17:14.097 [DEBUG] [Thread-180940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:17:14.097 [DEBUG] [Thread-180940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:17:14.121 [INFO] [Thread-180940] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:17:14.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:17:14.780 [DEBUG] [Thread-180940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:17:14.780 [DEBUG] [Thread-180940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:17:14.781 [DEBUG] [Thread-180940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:17:14.824 [DEBUG] [Thread-180940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:17:14.825 [DEBUG] [Thread-180940] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:17:14.831 [DEBUG] [Thread-180940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:17:14.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:17:14.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:17:14.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:17:14.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:17:14.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:17:14.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:17:14.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:17:14.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:17:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:17:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.011567 -999.00  +10.00  13.90     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.8 13.9 284.2 21.7 11.4 -1.1 11.2 -1.3 10.8 -1.1 11.2 -0.5
2026-04-12T02:17:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:17:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:17:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.011567
2026-04-12T02:17:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:17:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:17:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:17:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:17:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:17:14.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:16:52', tmtdew=-0.09497, humidity=100.571, cloud=0.0, wind=18.8078, temperature=10.5351, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:16:39.389', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:17:14.861 [DEBUG] [Thread-180940] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:17:14.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:17:14.954 [DEBUG] [Thread-180943] [transport.py] [_log()] starting thread (client mode): 0xae5b1d20
2026-04-12T02:17:14.954 [DEBUG] [Thread-180943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:17:14.969 [DEBUG] [Thread-180943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:17:14.969 [INFO] [Thread-180943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:17:14.983 [DEBUG] [Thread-180943] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] client lang: <none>
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] server lang: <none>
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] kex follows: False
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:17:14.984 [DEBUG] [Thread-180943] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:17:14.985 [DEBUG] [Thread-180943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:17:14.985 [DEBUG] [Thread-180943] [transport.py] [_log()] Compression: none
2026-04-12T02:17:14.985 [DEBUG] [Thread-180943] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:17:15.002 [DEBUG] [Thread-180945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:17:15.039 [DEBUG] [Thread-180943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:17:15.039 [DEBUG] [Thread-180943] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:17:15.040 [DEBUG] [Thread-180943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:17:15.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:17:15.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:17:15.113 [DEBUG] [Thread-180943] [transport.py] [_log()] userauth is OK
2026-04-12T02:17:15.113 [DEBUG] [Thread-180943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:17:15.113 [DEBUG] [Thread-180943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:17:15.114 [DEBUG] [Thread-180943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:17:15.114 [DEBUG] [Thread-180943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:17:15.132 [INFO] [Thread-180943] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:17:15.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:17:15.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:17:15.982 [DEBUG] [Thread-180943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:17:15.982 [DEBUG] [Thread-180943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:17:16.030 [DEBUG] [Thread-180943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:17:16.031 [DEBUG] [Thread-180943] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:17:16.040 [DEBUG] [Thread-180943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:17:16.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:17:16.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-04-12T02:17:16.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-04-12T02:17:16.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:17:16.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:17:16.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:17:16.075 [DEBUG] [Thread-180943] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:17:28.067 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:17:28.069 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:17:30.059 [DEBUG] [Thread-180946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:17:45.099 [DEBUG] [Thread-180947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:17:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:17:46.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:17:46.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-04-12T02:17:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 17, 27), 0.022345, 100.153, 0.0, 16.8332, 10.1176, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:17:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:17:27
2026-04-12T02:17:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:17:47.945 [DEBUG] [Thread-180948] [transport.py] [_log()] starting thread (client mode): 0xae5b28c0
2026-04-12T02:17:47.945 [DEBUG] [Thread-180948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:17:47.968 [DEBUG] [Thread-180948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:17:47.969 [INFO] [Thread-180948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:17:47.972 [DEBUG] [Thread-180948] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:17:47.972 [DEBUG] [Thread-180948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:17:47.972 [DEBUG] [Thread-180948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:17:47.972 [DEBUG] [Thread-180948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:47.972 [DEBUG] [Thread-180948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] client lang: <none>
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] server lang: <none>
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] kex follows: False
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] Compression: none
2026-04-12T02:17:47.973 [DEBUG] [Thread-180948] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:17:47.990 [DEBUG] [Thread-180948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:17:47.991 [DEBUG] [Thread-180948] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:17:47.991 [DEBUG] [Thread-180948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:17:47.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:17:47.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:17:47.993 [DEBUG] [Thread-180948] [transport.py] [_log()] userauth is OK
2026-04-12T02:17:47.993 [DEBUG] [Thread-180948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:17:47.993 [DEBUG] [Thread-180948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:17:47.993 [DEBUG] [Thread-180948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:17:47.993 [DEBUG] [Thread-180948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:17:48.028 [INFO] [Thread-180948] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:17:48.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:17:48.712 [DEBUG] [Thread-180948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:17:48.713 [DEBUG] [Thread-180948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:17:48.713 [DEBUG] [Thread-180948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:17:48.753 [DEBUG] [Thread-180948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:17:48.753 [DEBUG] [Thread-180948] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:17:48.756 [DEBUG] [Thread-180948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:17:48.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:17:48.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:17:48.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:17:48.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:17:48.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:17:48.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:17:48.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:17:48.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:17:48.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:17:48.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.012261 -999.00  +10.10  12.92     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.7 12.9 290.4 17.8 11.4 -1.1 11.3 -1.2 10.9 -0.9 11.2 -0.4
2026-04-12T02:17:48.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:17:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:17:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.012261
2026-04-12T02:17:48.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:17:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:17:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:17:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:17:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:17:48.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:17:27', tmtdew=0.022345, humidity=100.153, cloud=0.0, wind=16.8332, temperature=10.1176, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:17:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:17:48.781 [DEBUG] [Thread-180948] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:17:48.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:17:48.875 [DEBUG] [Thread-180951] [transport.py] [_log()] starting thread (client mode): 0xae562f20
2026-04-12T02:17:48.875 [DEBUG] [Thread-180951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:17:48.890 [DEBUG] [Thread-180951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:17:48.890 [INFO] [Thread-180951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:17:48.898 [DEBUG] [Thread-180951] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] client lang: <none>
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] server lang: <none>
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] kex follows: False
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] Compression: none
2026-04-12T02:17:48.899 [DEBUG] [Thread-180951] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:17:48.958 [DEBUG] [Thread-180951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:17:48.958 [DEBUG] [Thread-180951] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:17:48.959 [DEBUG] [Thread-180951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:17:48.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:17:48.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:17:49.018 [DEBUG] [Thread-180951] [transport.py] [_log()] userauth is OK
2026-04-12T02:17:49.018 [DEBUG] [Thread-180951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:17:49.018 [DEBUG] [Thread-180951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:17:49.018 [DEBUG] [Thread-180951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:17:49.018 [DEBUG] [Thread-180951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:17:49.037 [INFO] [Thread-180951] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:17:49.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:17:49.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:17:49.893 [DEBUG] [Thread-180951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:17:49.893 [DEBUG] [Thread-180951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:17:49.941 [DEBUG] [Thread-180951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:17:49.942 [DEBUG] [Thread-180951] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:17:49.951 [DEBUG] [Thread-180951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:17:49.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:17:49.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:17:49.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-04-12T02:17:49.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:17:49.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:17:49.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:17:49.988 [DEBUG] [Thread-180951] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:17:52.919 [DEBUG] [Thread-180953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:00.138 [DEBUG] [Thread-180954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:15.193 [DEBUG] [Thread-180955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:18:19.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:18:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:18:21.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 18, 2), 0.022305, 100.153, 0.0, 17.8034, 10.1342, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:18:21.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:18:02
2026-04-12T02:18:21.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:18:21.851 [DEBUG] [Thread-180956] [transport.py] [_log()] starting thread (client mode): 0xae5b00a0
2026-04-12T02:18:21.851 [DEBUG] [Thread-180956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:18:21.873 [DEBUG] [Thread-180956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:18:21.873 [INFO] [Thread-180956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:18:21.874 [DEBUG] [Thread-180956] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:18:21.874 [DEBUG] [Thread-180956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] client lang: <none>
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] server lang: <none>
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] kex follows: False
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] Compression: none
2026-04-12T02:18:21.875 [DEBUG] [Thread-180956] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:18:21.889 [DEBUG] [Thread-180956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:18:21.889 [DEBUG] [Thread-180956] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:18:21.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:18:21.890 [DEBUG] [Thread-180956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:18:21.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:18:21.893 [DEBUG] [Thread-180956] [transport.py] [_log()] userauth is OK
2026-04-12T02:18:21.893 [DEBUG] [Thread-180956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:18:21.893 [DEBUG] [Thread-180956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:18:21.893 [DEBUG] [Thread-180956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:18:21.893 [DEBUG] [Thread-180956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:18:21.911 [INFO] [Thread-180956] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:18:21.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:18:22.483 [DEBUG] [Thread-180956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:18:22.483 [DEBUG] [Thread-180956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:18:22.483 [DEBUG] [Thread-180956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:18:22.524 [DEBUG] [Thread-180956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:18:22.524 [DEBUG] [Thread-180956] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:18:22.528 [DEBUG] [Thread-180956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:18:22.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:18:22.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:18:22.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:18:22.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:18:22.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:18:22.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:18:22.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:18:22.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:18:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:18:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.012608 -999.00  +10.10  12.17     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.5 12.2 280.6 16.2 11.5 -1.2 11.2 -1.3 10.9 -1.3 11.2 -0.5
2026-04-12T02:18:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:18:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:18:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.012608
2026-04-12T02:18:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:18:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:18:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:18:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:18:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:18:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:18:02', tmtdew=0.022305, humidity=100.153, cloud=0.0, wind=17.8034, temperature=10.1342, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:18:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:18:22.551 [DEBUG] [Thread-180956] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:18:22.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:18:22.643 [DEBUG] [Thread-180959] [transport.py] [_log()] starting thread (client mode): 0xae5b3310
2026-04-12T02:18:22.643 [DEBUG] [Thread-180959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:18:22.658 [DEBUG] [Thread-180959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:18:22.658 [INFO] [Thread-180959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:18:22.666 [DEBUG] [Thread-180959] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:18:22.667 [DEBUG] [Thread-180959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:18:22.667 [DEBUG] [Thread-180959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:18:22.667 [DEBUG] [Thread-180959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] client lang: <none>
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] server lang: <none>
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] kex follows: False
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] Compression: none
2026-04-12T02:18:22.668 [DEBUG] [Thread-180959] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:18:22.725 [DEBUG] [Thread-180959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:18:22.726 [DEBUG] [Thread-180959] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:18:22.726 [DEBUG] [Thread-180959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:18:22.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:18:22.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:18:22.780 [DEBUG] [Thread-180959] [transport.py] [_log()] userauth is OK
2026-04-12T02:18:22.781 [DEBUG] [Thread-180959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:18:22.781 [DEBUG] [Thread-180959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:18:22.781 [DEBUG] [Thread-180959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:18:22.781 [DEBUG] [Thread-180959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:18:22.800 [INFO] [Thread-180959] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:18:22.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:18:22.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:18:23.628 [DEBUG] [Thread-180959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:18:23.628 [DEBUG] [Thread-180959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:18:23.676 [DEBUG] [Thread-180959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:18:23.676 [DEBUG] [Thread-180959] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:18:23.687 [DEBUG] [Thread-180959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:18:23.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:18: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-04-12T02:18: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-04-12T02:18:23.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:18:23.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:18:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:18:23.726 [DEBUG] [Thread-180959] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:18:28.272 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:28.273 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:30.230 [DEBUG] [Thread-180961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:45.281 [DEBUG] [Thread-180962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:52.990 [DEBUG] [Thread-180963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:18:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:18:53.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:18:53.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-04-12T02:18:55.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 18, 38), -0.06531, 100.372, 0.0, 17.9964, 10.5684, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:18:55.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:18:38
2026-04-12T02:18:55.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:18:55.606 [DEBUG] [Thread-180964] [transport.py] [_log()] starting thread (client mode): 0xae5b78e0
2026-04-12T02:18:55.606 [DEBUG] [Thread-180964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:18:55.626 [DEBUG] [Thread-180964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:18:55.626 [INFO] [Thread-180964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:18:55.629 [DEBUG] [Thread-180964] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:18:55.629 [DEBUG] [Thread-180964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:18:55.629 [DEBUG] [Thread-180964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:18:55.629 [DEBUG] [Thread-180964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] client lang: <none>
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] server lang: <none>
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] kex follows: False
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] Compression: none
2026-04-12T02:18:55.630 [DEBUG] [Thread-180964] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:18:55.647 [DEBUG] [Thread-180964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:18:55.647 [DEBUG] [Thread-180964] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:18:55.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:18:55.649 [DEBUG] [Thread-180964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:18:55.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:18:55.650 [DEBUG] [Thread-180964] [transport.py] [_log()] userauth is OK
2026-04-12T02:18:55.651 [DEBUG] [Thread-180964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:18:55.651 [DEBUG] [Thread-180964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:18:55.651 [DEBUG] [Thread-180964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:18:55.651 [DEBUG] [Thread-180964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:18:55.685 [INFO] [Thread-180964] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:18:55.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:18:56.308 [DEBUG] [Thread-180964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:18:56.309 [DEBUG] [Thread-180964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:18:56.309 [DEBUG] [Thread-180964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:18:56.349 [DEBUG] [Thread-180964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:18:56.349 [DEBUG] [Thread-180964] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:18:56.352 [DEBUG] [Thread-180964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:18:56.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:18:56.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:18:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:18:56.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:18:56.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:18:56.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:18:56.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:18:56.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:18:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:18:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.012956 -999.00  +10.00  13.50     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.6 13.5 280.2 20.1 11.4 -1.2 11.2 -1.4 10.8 -0.9 11.2 -0.5
2026-04-12T02:18:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:18:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:18:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.012956
2026-04-12T02:18:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:18:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:18:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:18:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:18:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:18:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:18:38', tmtdew=-0.06531, humidity=100.372, cloud=0.0, wind=17.9964, temperature=10.5684, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:18:39.398', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:18:56.377 [DEBUG] [Thread-180964] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:18:56.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:18:56.481 [DEBUG] [Thread-180967] [transport.py] [_log()] starting thread (client mode): 0xae5b40a0
2026-04-12T02:18:56.481 [DEBUG] [Thread-180967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:18:56.496 [DEBUG] [Thread-180967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:18:56.497 [INFO] [Thread-180967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:18:56.504 [DEBUG] [Thread-180967] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:18:56.504 [DEBUG] [Thread-180967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:18:56.504 [DEBUG] [Thread-180967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:18:56.504 [DEBUG] [Thread-180967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] client lang: <none>
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] server lang: <none>
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] kex follows: False
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] Compression: none
2026-04-12T02:18:56.505 [DEBUG] [Thread-180967] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:18:56.561 [DEBUG] [Thread-180967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:18:56.562 [DEBUG] [Thread-180967] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:18:56.562 [DEBUG] [Thread-180967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:18:56.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:18:56.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:18:56.617 [DEBUG] [Thread-180967] [transport.py] [_log()] userauth is OK
2026-04-12T02:18:56.617 [DEBUG] [Thread-180967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:18:56.617 [DEBUG] [Thread-180967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:18:56.617 [DEBUG] [Thread-180967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:18:56.618 [DEBUG] [Thread-180967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:18:56.640 [INFO] [Thread-180967] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:18:56.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:18:56.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:18:57.429 [DEBUG] [Thread-180967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:18:57.429 [DEBUG] [Thread-180967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:18:57.476 [DEBUG] [Thread-180967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:18:57.477 [DEBUG] [Thread-180967] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:18:57.486 [DEBUG] [Thread-180967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:18:57.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:18:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:18:57.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:18:57.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:18:57.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:18:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:18:57.520 [DEBUG] [Thread-180967] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:19:00.313 [DEBUG] [Thread-180969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:19:15.365 [DEBUG] [Thread-180970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:19:27.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:19:27.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:19:27.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-04-12T02:19:28.477 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:19:28.478 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:19:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 19, 13), 0.01988, 100.17, 0.0, 15.669, 10.0845, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:19:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:19:13
2026-04-12T02:19:29.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:19:29.393 [DEBUG] [Thread-180971] [transport.py] [_log()] starting thread (client mode): 0xae50a530
2026-04-12T02:19:29.393 [DEBUG] [Thread-180971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:19:29.413 [DEBUG] [Thread-180971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:19:29.413 [INFO] [Thread-180971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:19:29.416 [DEBUG] [Thread-180971] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] client lang: <none>
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] server lang: <none>
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] kex follows: False
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] Compression: none
2026-04-12T02:19:29.417 [DEBUG] [Thread-180971] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:19:29.434 [DEBUG] [Thread-180971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:19:29.435 [DEBUG] [Thread-180971] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:19:29.436 [DEBUG] [Thread-180971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:19:29.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:19:29.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:19:29.438 [DEBUG] [Thread-180971] [transport.py] [_log()] userauth is OK
2026-04-12T02:19:29.438 [DEBUG] [Thread-180971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:19:29.438 [DEBUG] [Thread-180971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:19:29.438 [DEBUG] [Thread-180971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:19:29.438 [DEBUG] [Thread-180971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:19:29.473 [INFO] [Thread-180971] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:19:29.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:19:30.136 [DEBUG] [Thread-180971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:19:30.137 [DEBUG] [Thread-180971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:19:30.137 [DEBUG] [Thread-180971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:19:30.178 [DEBUG] [Thread-180971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:19:30.178 [DEBUG] [Thread-180971] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:19:30.182 [DEBUG] [Thread-180971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:19:30.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:19:30.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:19:30.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:19:30.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:19:30.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:19:30.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:19:30.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:19:30.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:19:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:19:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.013303 -999.00  +10.00  15.29     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.0 15.3 283.2 21.2 11.4 -1.2 11.3 -1.4 10.8 -1.0 11.2 -0.5
2026-04-12T02:19:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:19:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:19:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.013303
2026-04-12T02:19:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:19:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:19:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:19:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:19:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:19:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:19:13', tmtdew=0.01988, humidity=100.17, cloud=0.0, wind=15.669, temperature=10.0845, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:19:09.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:19:30.208 [DEBUG] [Thread-180971] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:19:30.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:19:30.302 [DEBUG] [Thread-180974] [transport.py] [_log()] starting thread (client mode): 0xae5b0b80
2026-04-12T02:19:30.302 [DEBUG] [Thread-180974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:19:30.321 [DEBUG] [Thread-180974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:19:30.321 [INFO] [Thread-180974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] client lang: <none>
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] server lang: <none>
2026-04-12T02:19:30.329 [DEBUG] [Thread-180974] [transport.py] [_log()] kex follows: False
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] Compression: none
2026-04-12T02:19:30.330 [DEBUG] [Thread-180974] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:19:30.390 [DEBUG] [Thread-180974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:19:30.391 [DEBUG] [Thread-180974] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:19:30.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:19:30.392 [DEBUG] [Thread-180974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:19:30.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:19:30.403 [DEBUG] [Thread-180976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:19:30.449 [DEBUG] [Thread-180974] [transport.py] [_log()] userauth is OK
2026-04-12T02:19:30.449 [DEBUG] [Thread-180974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:19:30.450 [DEBUG] [Thread-180974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:19:30.450 [DEBUG] [Thread-180974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:19:30.450 [DEBUG] [Thread-180974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:19:30.476 [INFO] [Thread-180974] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:19:30.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:19:30.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:19:31.347 [DEBUG] [Thread-180974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:19:31.347 [DEBUG] [Thread-180974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:19:31.400 [DEBUG] [Thread-180974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:19:31.401 [DEBUG] [Thread-180974] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:19:31.410 [DEBUG] [Thread-180974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:19:31.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:19:31.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-04-12T02:19:31.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:19:31.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:19:31.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:19:31.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:19:31.445 [DEBUG] [Thread-180974] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:19:45.459 [DEBUG] [Thread-180977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:19:53.046 [DEBUG] [Thread-180978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:00.495 [DEBUG] [Thread-180979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:01.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:20:01.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:20:01.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-04-12T02:20:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 19, 49), -0.04544, 100.24, 0.0, 17.5025, 10.5353, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:20:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:19:49
2026-04-12T02:20:03.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:20:03.313 [DEBUG] [Thread-180980] [transport.py] [_log()] starting thread (client mode): 0xae562530
2026-04-12T02:20:03.313 [DEBUG] [Thread-180980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:20:03.327 [DEBUG] [Thread-180980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:20:03.327 [INFO] [Thread-180980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:03.330 [DEBUG] [Thread-180980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] client lang: <none>
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] server lang: <none>
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] kex follows: False
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] Compression: none
2026-04-12T02:20:03.331 [DEBUG] [Thread-180980] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:20:03.348 [DEBUG] [Thread-180980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:20:03.349 [DEBUG] [Thread-180980] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:20:03.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:20:03.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:20:03.351 [DEBUG] [Thread-180980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:20:03.351 [DEBUG] [Thread-180980] [transport.py] [_log()] userauth is OK
2026-04-12T02:20:03.351 [DEBUG] [Thread-180980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:20:03.351 [DEBUG] [Thread-180980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:20:03.351 [DEBUG] [Thread-180980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:20:03.351 [DEBUG] [Thread-180980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:20:03.375 [INFO] [Thread-180980] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:20:03.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:20:04.088 [DEBUG] [Thread-180980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:20:04.088 [DEBUG] [Thread-180980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:20:04.088 [DEBUG] [Thread-180980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:20:04.129 [DEBUG] [Thread-180980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:20:04.129 [DEBUG] [Thread-180980] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:20:04.132 [DEBUG] [Thread-180980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:20:04.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:20:04.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:20:04.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:20:04.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:20:04.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:20:04.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:20:04.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:20:04.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:20:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:20:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.013650 -999.00  +10.10  13.41     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.9 13.4 285.2 17.2 11.4 -1.1 11.3 -1.2 10.8 -1.5 11.3 -0.4
2026-04-12T02:20:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:20:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:20:04.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.013650
2026-04-12T02:20:04.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:20:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:20:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:20:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:20:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:20:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:19:49', tmtdew=-0.04544, humidity=100.24, cloud=0.0, wind=17.5025, temperature=10.5353, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:19:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:20:04.160 [DEBUG] [Thread-180980] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:20:04.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:20:04.255 [DEBUG] [Thread-180983] [transport.py] [_log()] starting thread (client mode): 0xae5b3160
2026-04-12T02:20:04.255 [DEBUG] [Thread-180983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:20:04.278 [DEBUG] [Thread-180983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:20:04.279 [INFO] [Thread-180983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:20:04.287 [DEBUG] [Thread-180983] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] client lang: <none>
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] server lang: <none>
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] kex follows: False
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:20:04.288 [DEBUG] [Thread-180983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:20:04.289 [DEBUG] [Thread-180983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:20:04.289 [DEBUG] [Thread-180983] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:20:04.289 [DEBUG] [Thread-180983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:20:04.289 [DEBUG] [Thread-180983] [transport.py] [_log()] Compression: none
2026-04-12T02:20:04.289 [DEBUG] [Thread-180983] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:20:04.353 [DEBUG] [Thread-180983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:20:04.354 [DEBUG] [Thread-180983] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:20:04.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:20:04.355 [DEBUG] [Thread-180983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:20:04.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:20:04.414 [DEBUG] [Thread-180983] [transport.py] [_log()] userauth is OK
2026-04-12T02:20:04.414 [DEBUG] [Thread-180983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:20:04.414 [DEBUG] [Thread-180983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:20:04.414 [DEBUG] [Thread-180983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:20:04.415 [DEBUG] [Thread-180983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:20:04.433 [INFO] [Thread-180983] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:20:04.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:20:04.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:20:05.289 [DEBUG] [Thread-180983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:20:05.290 [DEBUG] [Thread-180983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:20:05.338 [DEBUG] [Thread-180983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:20:05.338 [DEBUG] [Thread-180983] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:20:05.347 [DEBUG] [Thread-180983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:20:05.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:20:05.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:20:05.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-04-12T02:20:05.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:20:05.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:20:05.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:20:05.385 [DEBUG] [Thread-180983] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:20:15.532 [DEBUG] [Thread-180985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:28.683 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:28.684 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:30.589 [DEBUG] [Thread-180986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:20:35.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:20:35.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-04-12T02:20:36.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 20, 24), 0.017345, 100.186, 0.0, 15.9689, 10.1177, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:20:36.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:20:24
2026-04-12T02:20:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:20:37.232 [DEBUG] [Thread-180987] [transport.py] [_log()] starting thread (client mode): 0xae536aa0
2026-04-12T02:20:37.232 [DEBUG] [Thread-180987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:20:37.252 [DEBUG] [Thread-180987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:20:37.252 [INFO] [Thread-180987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] client lang: <none>
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] server lang: <none>
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] kex follows: False
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:20:37.255 [DEBUG] [Thread-180987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:20:37.256 [DEBUG] [Thread-180987] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:20:37.256 [DEBUG] [Thread-180987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:20:37.256 [DEBUG] [Thread-180987] [transport.py] [_log()] Compression: none
2026-04-12T02:20:37.256 [DEBUG] [Thread-180987] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:20:37.272 [DEBUG] [Thread-180987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:20:37.273 [DEBUG] [Thread-180987] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:20:37.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:20:37.274 [DEBUG] [Thread-180987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:20:37.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:20:37.276 [DEBUG] [Thread-180987] [transport.py] [_log()] userauth is OK
2026-04-12T02:20:37.276 [DEBUG] [Thread-180987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:20:37.276 [DEBUG] [Thread-180987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:20:37.276 [DEBUG] [Thread-180987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:20:37.276 [DEBUG] [Thread-180987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:20:37.291 [INFO] [Thread-180987] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:20:37.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:20:37.933 [DEBUG] [Thread-180987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:20:37.934 [DEBUG] [Thread-180987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:20:37.934 [DEBUG] [Thread-180987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:20:37.975 [DEBUG] [Thread-180987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:20:37.975 [DEBUG] [Thread-180987] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:20:37.978 [DEBUG] [Thread-180987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:20:37.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:20:37.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:20:37.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:20:37.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:20:37.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:20:37.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:20:37.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:20:37.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:20:37.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:20:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.013997 -999.00  +10.10  14.54     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 11.8 14.5 279.0 16.9 11.4 -1.0 11.3 -1.2 10.9 -1.6 11.3 -0.6
2026-04-12T02:20:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:20:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:20:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.013997
2026-04-12T02:20:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:20:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:20:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:20:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:20:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:20:38.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:20:24', tmtdew=0.017345, humidity=100.186, cloud=0.0, wind=15.9689, temperature=10.1177, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:20:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:20:38.000 [DEBUG] [Thread-180987] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:20:38.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:20:38.098 [DEBUG] [Thread-180990] [transport.py] [_log()] starting thread (client mode): 0xae534910
2026-04-12T02:20:38.099 [DEBUG] [Thread-180990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:20:38.113 [DEBUG] [Thread-180990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:20:38.113 [INFO] [Thread-180990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:20:38.120 [DEBUG] [Thread-180990] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] client lang: <none>
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] server lang: <none>
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] kex follows: False
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] Compression: none
2026-04-12T02:20:38.121 [DEBUG] [Thread-180990] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:20:38.178 [DEBUG] [Thread-180990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:20:38.179 [DEBUG] [Thread-180990] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:20:38.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:20:38.180 [DEBUG] [Thread-180990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:20:38.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:20:38.238 [DEBUG] [Thread-180990] [transport.py] [_log()] userauth is OK
2026-04-12T02:20:38.238 [DEBUG] [Thread-180990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:20:38.238 [DEBUG] [Thread-180990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:20:38.238 [DEBUG] [Thread-180990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:20:38.238 [DEBUG] [Thread-180990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:20:38.263 [INFO] [Thread-180990] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:20:38.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:20:38.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:20:39.090 [DEBUG] [Thread-180990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:20:39.090 [DEBUG] [Thread-180990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:20:39.138 [DEBUG] [Thread-180990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:20:39.138 [DEBUG] [Thread-180990] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:20:39.148 [DEBUG] [Thread-180990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:20:39.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:20:39.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-04-12T02:20:39.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:20:39.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:20:39.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:20:39.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:20:39.184 [DEBUG] [Thread-180990] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:20:45.625 [DEBUG] [Thread-180992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:20:53.113 [DEBUG] [Thread-180993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:00.683 [DEBUG] [Thread-180994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:09.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:21:09.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:21:09.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-04-12T02:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 20, 24), 0.017345, 100.186, 0.0, 15.9689, 10.1177, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:21:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:20:24
2026-04-12T02:21:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:21:11.023 [DEBUG] [Thread-180995] [transport.py] [_log()] starting thread (client mode): 0xae5b5ae0
2026-04-12T02:21:11.023 [DEBUG] [Thread-180995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:21:11.043 [DEBUG] [Thread-180995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:21:11.043 [INFO] [Thread-180995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:11.046 [DEBUG] [Thread-180995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] client lang: <none>
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] server lang: <none>
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] kex follows: False
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] Compression: none
2026-04-12T02:21:11.047 [DEBUG] [Thread-180995] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:21:11.066 [DEBUG] [Thread-180995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:21:11.067 [DEBUG] [Thread-180995] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:21:11.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:21:11.068 [DEBUG] [Thread-180995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:21:11.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:21:11.112 [DEBUG] [Thread-180995] [transport.py] [_log()] userauth is OK
2026-04-12T02:21:11.113 [DEBUG] [Thread-180995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:21:11.113 [DEBUG] [Thread-180995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:21:11.113 [DEBUG] [Thread-180995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:21:11.113 [DEBUG] [Thread-180995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:21:11.139 [INFO] [Thread-180995] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:21:11.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:21:11.778 [DEBUG] [Thread-180995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:21:11.778 [DEBUG] [Thread-180995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:21:11.779 [DEBUG] [Thread-180995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:21:11.819 [DEBUG] [Thread-180995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:21:11.819 [DEBUG] [Thread-180995] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:21:11.823 [DEBUG] [Thread-180995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:21:11.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:21:11.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:21:11.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:21:11.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:21:11.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:21:11.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:21:11.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:21:11.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:21:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:21:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.014344 -999.00  +10.10  14.01     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.5 14.0 276.6 17.6 11.4 -1.2 11.3 -1.4 10.8 -1.4 11.2 -0.5
2026-04-12T02:21:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:21:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:21:11.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.014344
2026-04-12T02:21:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:21:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:21:11.848 [DEBUG] [Thread-180995] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:21:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:21:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:21:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:21:11.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:20:24', tmtdew=0.017345, humidity=100.186, cloud=0.0, wind=15.9689, temperature=10.1177, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:20:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:21: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-04-12T02:21:11.938 [DEBUG] [Thread-180998] [transport.py] [_log()] starting thread (client mode): 0xae5620b0
2026-04-12T02:21:11.938 [DEBUG] [Thread-180998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:21:11.953 [DEBUG] [Thread-180998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:21:11.953 [INFO] [Thread-180998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:21:11.960 [DEBUG] [Thread-180998] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] client lang: <none>
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] server lang: <none>
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] kex follows: False
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] Compression: none
2026-04-12T02:21:11.961 [DEBUG] [Thread-180998] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:21:12.022 [DEBUG] [Thread-180998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:21:12.022 [DEBUG] [Thread-180998] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:21:12.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:21:12.024 [DEBUG] [Thread-180998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:21:12.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:21:12.077 [DEBUG] [Thread-180998] [transport.py] [_log()] userauth is OK
2026-04-12T02:21:12.078 [DEBUG] [Thread-180998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:21:12.078 [DEBUG] [Thread-180998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:21:12.078 [DEBUG] [Thread-180998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:21:12.078 [DEBUG] [Thread-180998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:21:12.099 [INFO] [Thread-180998] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:21:12.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:21:12.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:21:12.903 [DEBUG] [Thread-180998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:21:12.903 [DEBUG] [Thread-180998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:21:12.951 [DEBUG] [Thread-180998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:21:12.951 [DEBUG] [Thread-180998] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:21:12.960 [DEBUG] [Thread-180998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:21:12.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:21:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:21:12.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-04-12T02:21:12.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:21:12.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:21:12.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:21:12.997 [DEBUG] [Thread-180998] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:21:15.718 [DEBUG] [Thread-181000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:28.890 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:28.892 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:30.776 [DEBUG] [Thread-181001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:21:43.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:21:43.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-04-12T02:21:44.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 21, 35), -0.04047, 100.207, 0.0, 19.1959, 10.5023, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:21:44.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:21:35
2026-04-12T02:21:44.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:21:44.867 [DEBUG] [Thread-181002] [transport.py] [_log()] starting thread (client mode): 0xae563880
2026-04-12T02:21:44.867 [DEBUG] [Thread-181002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:21:44.881 [DEBUG] [Thread-181002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:21:44.881 [INFO] [Thread-181002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:21:44.882 [DEBUG] [Thread-181002] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] client lang: <none>
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] server lang: <none>
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] kex follows: False
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] Compression: none
2026-04-12T02:21:44.883 [DEBUG] [Thread-181002] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:21:44.902 [DEBUG] [Thread-181002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:21:44.903 [DEBUG] [Thread-181002] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:21:44.903 [DEBUG] [Thread-181002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:21:44.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:21:44.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:21:44.905 [DEBUG] [Thread-181002] [transport.py] [_log()] userauth is OK
2026-04-12T02:21:44.905 [DEBUG] [Thread-181002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:21:44.905 [DEBUG] [Thread-181002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:21:44.905 [DEBUG] [Thread-181002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:21:44.906 [DEBUG] [Thread-181002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:21:44.930 [INFO] [Thread-181002] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:21:44.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:21:45.553 [DEBUG] [Thread-181002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:21:45.553 [DEBUG] [Thread-181002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:21:45.554 [DEBUG] [Thread-181002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:21:45.594 [DEBUG] [Thread-181002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:21:45.594 [DEBUG] [Thread-181002] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:21:45.598 [DEBUG] [Thread-181002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:21:45.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:21:45.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:21:45.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:21:45.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:21:45.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:21:45.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:21:45.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:21:45.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:21:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:21:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.014691 -999.00  +10.10  10.86     98   +9.90 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.1 10.9 285.2 19.4 11.4 -0.9 11.3 -1.3 11.0 -1.0 11.2 -0.5
2026-04-12T02:21:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:21:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:21:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.014691
2026-04-12T02:21:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:21:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:21:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:21:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:21:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:21:45.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:21:35', tmtdew=-0.04047, humidity=100.207, cloud=0.0, wind=19.1959, temperature=10.5023, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:21:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:21:45.626 [DEBUG] [Thread-181002] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:21:45.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:21:45.720 [DEBUG] [Thread-181005] [transport.py] [_log()] starting thread (client mode): 0xae5b17e0
2026-04-12T02:21:45.720 [DEBUG] [Thread-181005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:21:45.735 [DEBUG] [Thread-181005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:21:45.735 [INFO] [Thread-181005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] client lang: <none>
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] server lang: <none>
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] kex follows: False
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] Compression: none
2026-04-12T02:21:45.743 [DEBUG] [Thread-181005] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:21:45.803 [DEBUG] [Thread-181005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:21:45.803 [DEBUG] [Thread-181005] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:21:45.804 [DEBUG] [Thread-181005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:21:45.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:21:45.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:21:45.808 [DEBUG] [Thread-181007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:21:45.861 [DEBUG] [Thread-181005] [transport.py] [_log()] userauth is OK
2026-04-12T02:21:45.861 [DEBUG] [Thread-181005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:21:45.861 [DEBUG] [Thread-181005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:21:45.861 [DEBUG] [Thread-181005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:21:45.861 [DEBUG] [Thread-181005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:21:45.876 [INFO] [Thread-181005] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:21:45.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:21:45.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:21:46.716 [DEBUG] [Thread-181005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:21:46.716 [DEBUG] [Thread-181005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:21:46.763 [DEBUG] [Thread-181005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:21:46.764 [DEBUG] [Thread-181005] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:21:46.773 [DEBUG] [Thread-181005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:21:46.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:21:46.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-04-12T02:21:46.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:21:46.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:21:46.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:21:46.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:21:46.808 [DEBUG] [Thread-181005] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:21:53.181 [DEBUG] [Thread-181008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:00.851 [DEBUG] [Thread-181009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:15.887 [DEBUG] [Thread-181010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:22:16.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:22:16.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:22:18.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 22, 11), 0.014835, 100.203, 0.0, 17.6101, 10.1343, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:22:18.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:22:11
2026-04-12T02:22:18.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:22:18.639 [DEBUG] [Thread-181011] [transport.py] [_log()] starting thread (client mode): 0xae534700
2026-04-12T02:22:18.639 [DEBUG] [Thread-181011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:22:18.660 [DEBUG] [Thread-181011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:22:18.660 [INFO] [Thread-181011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:22:18.664 [DEBUG] [Thread-181011] [transport.py] [_log()] client lang: <none>
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] server lang: <none>
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] kex follows: False
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] Compression: none
2026-04-12T02:22:18.665 [DEBUG] [Thread-181011] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:22:18.676 [DEBUG] [Thread-181011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:22:18.677 [DEBUG] [Thread-181011] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:22:18.677 [DEBUG] [Thread-181011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:22:18.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:22:18.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:22:18.679 [DEBUG] [Thread-181011] [transport.py] [_log()] userauth is OK
2026-04-12T02:22:18.679 [DEBUG] [Thread-181011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:22:18.679 [DEBUG] [Thread-181011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:22:18.680 [DEBUG] [Thread-181011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:22:18.680 [DEBUG] [Thread-181011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:22:18.704 [INFO] [Thread-181011] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:22:18.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:22:19.337 [DEBUG] [Thread-181011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:22:19.338 [DEBUG] [Thread-181011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:22:19.338 [DEBUG] [Thread-181011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:22:19.379 [DEBUG] [Thread-181011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:22:19.379 [DEBUG] [Thread-181011] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:22:19.383 [DEBUG] [Thread-181011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:22:19.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:22:19.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:22:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:22:19.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:22:19.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:22:19.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:22:19.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:22:19.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:22:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:22:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.015039 -999.00  +10.10  14.39     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.7 14.4 277.0 20.6 11.4 -1.0 11.3 -1.3 10.9 -1.0 11.3 -0.6
2026-04-12T02:22:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:22:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:22:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.015039
2026-04-12T02:22:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:22:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:22:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:22:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:22:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:22:19.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:22:11', tmtdew=0.014835, humidity=100.203, cloud=0.0, wind=17.6101, temperature=10.1343, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:21:39.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:22:19.410 [DEBUG] [Thread-181011] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:22:19.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:22:19.506 [DEBUG] [Thread-181014] [transport.py] [_log()] starting thread (client mode): 0xae560c70
2026-04-12T02:22:19.506 [DEBUG] [Thread-181014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:22:19.521 [DEBUG] [Thread-181014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:22:19.521 [INFO] [Thread-181014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] client lang: <none>
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] server lang: <none>
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] kex follows: False
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:22:19.529 [DEBUG] [Thread-181014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:22:19.530 [DEBUG] [Thread-181014] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:22:19.530 [DEBUG] [Thread-181014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:22:19.530 [DEBUG] [Thread-181014] [transport.py] [_log()] Compression: none
2026-04-12T02:22:19.530 [DEBUG] [Thread-181014] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:22:19.585 [DEBUG] [Thread-181014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:22:19.585 [DEBUG] [Thread-181014] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:22:19.586 [DEBUG] [Thread-181014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:22:19.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:22:19.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:22:19.641 [DEBUG] [Thread-181014] [transport.py] [_log()] userauth is OK
2026-04-12T02:22:19.641 [DEBUG] [Thread-181014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:22:19.641 [DEBUG] [Thread-181014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:22:19.641 [DEBUG] [Thread-181014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:22:19.641 [DEBUG] [Thread-181014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:22:19.661 [INFO] [Thread-181014] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:22:19.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:22:19.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:22:20.485 [DEBUG] [Thread-181014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:22:20.485 [DEBUG] [Thread-181014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:22:20.533 [DEBUG] [Thread-181014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:22:20.533 [DEBUG] [Thread-181014] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:22:20.544 [DEBUG] [Thread-181014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:22:20.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:22:20.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-04-12T02:22:20.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-04-12T02:22:20.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:22:20.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:22:20.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:22:20.583 [DEBUG] [Thread-181014] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:22:29.096 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:29.098 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:30.923 [DEBUG] [Thread-181016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:45.977 [DEBUG] [Thread-181017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:22:50.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:22:50.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-04-12T02:22:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 22, 11), 0.014835, 100.203, 0.0, 17.6101, 10.1343, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:22:51.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:22:11
2026-04-12T02:22:52.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:22:52.460 [DEBUG] [Thread-181018] [transport.py] [_log()] starting thread (client mode): 0xae5b5ed0
2026-04-12T02:22:52.460 [DEBUG] [Thread-181018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:22:52.479 [DEBUG] [Thread-181018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:22:52.480 [INFO] [Thread-181018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] client lang: <none>
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] server lang: <none>
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] kex follows: False
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] Compression: none
2026-04-12T02:22:52.483 [DEBUG] [Thread-181018] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:22:52.500 [DEBUG] [Thread-181018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:22:52.500 [DEBUG] [Thread-181018] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:22:52.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:22:52.501 [DEBUG] [Thread-181018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:22:52.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:22:52.503 [DEBUG] [Thread-181018] [transport.py] [_log()] userauth is OK
2026-04-12T02:22:52.504 [DEBUG] [Thread-181018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:22:52.504 [DEBUG] [Thread-181018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:22:52.504 [DEBUG] [Thread-181018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:22:52.504 [DEBUG] [Thread-181018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:22:52.528 [INFO] [Thread-181018] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:22:52.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:22:53.157 [DEBUG] [Thread-181018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:22:53.157 [DEBUG] [Thread-181018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:22:53.158 [DEBUG] [Thread-181018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:22:53.198 [DEBUG] [Thread-181018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:22:53.198 [DEBUG] [Thread-181018] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:22:53.200 [DEBUG] [Thread-181018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:22:53.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:22:53.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:22:53.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:22:53.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:22:53.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:22:53.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:22:53.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.015733 -999.00  +10.10  17.23     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.4 17.2 284.0 19.6 11.4 -1.2 11.2 -1.3 10.9 -0.9 11.3 -0.5
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.015733
2026-04-12T02:22:53.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:22:53.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:22:53.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:22:53.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:22:53.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:22:53.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:22:11', tmtdew=0.014835, humidity=100.203, cloud=0.0, wind=17.6101, temperature=10.1343, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:22:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:22:53.219 [DEBUG] [Thread-181018] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:22:53.255 [DEBUG] [Thread-181021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:22:53.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:22:53.304 [DEBUG] [Thread-181022] [transport.py] [_log()] starting thread (client mode): 0xae5087f0
2026-04-12T02:22:53.304 [DEBUG] [Thread-181022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:22:53.319 [DEBUG] [Thread-181022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:22:53.319 [INFO] [Thread-181022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] client lang: <none>
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] server lang: <none>
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] kex follows: False
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] Compression: none
2026-04-12T02:22:53.327 [DEBUG] [Thread-181022] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:22:53.385 [DEBUG] [Thread-181022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:22:53.386 [DEBUG] [Thread-181022] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:22:53.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:22:53.387 [DEBUG] [Thread-181022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:22:53.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:22:53.441 [DEBUG] [Thread-181022] [transport.py] [_log()] userauth is OK
2026-04-12T02:22:53.442 [DEBUG] [Thread-181022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:22:53.442 [DEBUG] [Thread-181022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:22:53.442 [DEBUG] [Thread-181022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:22:53.442 [DEBUG] [Thread-181022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:22:53.461 [INFO] [Thread-181022] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:22:53.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:22:53.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:22:54.295 [DEBUG] [Thread-181022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:22:54.296 [DEBUG] [Thread-181022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:22:54.344 [DEBUG] [Thread-181022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:22:54.345 [DEBUG] [Thread-181022] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:22:54.358 [DEBUG] [Thread-181022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:22:54.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:22:54.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:22:54.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:22:54.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:22:54.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:22:54.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:22:54.399 [DEBUG] [Thread-181022] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:23:01.015 [DEBUG] [Thread-181024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:16.065 [DEBUG] [Thread-181025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:23:24.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:23:24.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-04-12T02:23:25.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 22, 46), -0.05053, 100.273, 0.0, 19.6546, 10.6018, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:23:25.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:22:46
2026-04-12T02:23:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:23:26.262 [DEBUG] [Thread-181026] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T02:23:26.262 [DEBUG] [Thread-181026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:23:26.283 [DEBUG] [Thread-181026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:23:26.283 [INFO] [Thread-181026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:23:26.286 [DEBUG] [Thread-181026] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] client lang: <none>
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] server lang: <none>
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] kex follows: False
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] Compression: none
2026-04-12T02:23:26.287 [DEBUG] [Thread-181026] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:23:26.305 [DEBUG] [Thread-181026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:23:26.305 [DEBUG] [Thread-181026] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:23:26.306 [DEBUG] [Thread-181026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:23:26.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:23:26.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:23:26.308 [DEBUG] [Thread-181026] [transport.py] [_log()] userauth is OK
2026-04-12T02:23:26.308 [DEBUG] [Thread-181026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:23:26.308 [DEBUG] [Thread-181026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:23:26.308 [DEBUG] [Thread-181026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:23:26.308 [DEBUG] [Thread-181026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:23:26.332 [INFO] [Thread-181026] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:23:26.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:23:26.980 [DEBUG] [Thread-181026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:23:26.981 [DEBUG] [Thread-181026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:23:26.981 [DEBUG] [Thread-181026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:23:27.021 [DEBUG] [Thread-181026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:23:27.021 [DEBUG] [Thread-181026] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:23:27.025 [DEBUG] [Thread-181026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:23:27.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:23:27.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:23:27.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:23:27.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:23:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:23:27.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:23:27.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:23:27.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:23:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:23:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.016080 -999.00  +10.10  16.41     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.5 16.4 284.0 18.2 11.4 -1.1 11.3 -1.2 10.9 -1.4 11.3 -0.6
2026-04-12T02:23:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:23:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:23:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.016080
2026-04-12T02:23:27.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:23:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:23:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:23:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:23:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:23:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:22:46', tmtdew=-0.05053, humidity=100.273, cloud=0.0, wind=19.6546, temperature=10.6018, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:23:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:23:27.050 [DEBUG] [Thread-181026] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:23:27.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:23:27.143 [DEBUG] [Thread-181029] [transport.py] [_log()] starting thread (client mode): 0xb0feb100
2026-04-12T02:23:27.143 [DEBUG] [Thread-181029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:23:27.164 [DEBUG] [Thread-181029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:23:27.164 [INFO] [Thread-181029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:23:27.171 [DEBUG] [Thread-181029] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] client lang: <none>
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] server lang: <none>
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] kex follows: False
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:23:27.172 [DEBUG] [Thread-181029] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:23:27.173 [DEBUG] [Thread-181029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:23:27.173 [DEBUG] [Thread-181029] [transport.py] [_log()] Compression: none
2026-04-12T02:23:27.173 [DEBUG] [Thread-181029] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:23:27.230 [DEBUG] [Thread-181029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:23:27.231 [DEBUG] [Thread-181029] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:23:27.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:23:27.232 [DEBUG] [Thread-181029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:23:27.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:23:27.289 [DEBUG] [Thread-181029] [transport.py] [_log()] userauth is OK
2026-04-12T02:23:27.289 [DEBUG] [Thread-181029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:23:27.289 [DEBUG] [Thread-181029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:23:27.289 [DEBUG] [Thread-181029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:23:27.289 [DEBUG] [Thread-181029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:23:27.309 [INFO] [Thread-181029] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:23:27.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:23:27.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:23:28.157 [DEBUG] [Thread-181029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:23:28.157 [DEBUG] [Thread-181029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:23:28.206 [DEBUG] [Thread-181029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:23:28.206 [DEBUG] [Thread-181029] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:23:28.215 [DEBUG] [Thread-181029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:23:28.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:23:28.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:23: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') -> 00000000
2026-04-12T02:23:28.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:23:28.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:23:28.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:23:28.250 [DEBUG] [Thread-181029] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:23:29.304 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:29.305 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:31.102 [DEBUG] [Thread-181031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:46.155 [DEBUG] [Thread-181032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:53.315 [DEBUG] [Thread-181033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:23:58.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:23:58.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:23:58.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:23:59.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 23, 21), 0.024775, 100.137, 0.0, 15.6514, 10.1178, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:23:59.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:23:21
2026-04-12T02:24:00.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:24:00.234 [DEBUG] [Thread-181034] [transport.py] [_log()] starting thread (client mode): 0xae5b5870
2026-04-12T02:24:00.234 [DEBUG] [Thread-181034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:24:00.252 [DEBUG] [Thread-181034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:24:00.252 [INFO] [Thread-181034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] client lang: <none>
2026-04-12T02:24:00.256 [DEBUG] [Thread-181034] [transport.py] [_log()] server lang: <none>
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] kex follows: False
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] Compression: none
2026-04-12T02:24:00.257 [DEBUG] [Thread-181034] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:24:00.275 [DEBUG] [Thread-181034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:24:00.275 [DEBUG] [Thread-181034] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:24:00.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:24:00.276 [DEBUG] [Thread-181034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:24:00.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:24:00.278 [DEBUG] [Thread-181034] [transport.py] [_log()] userauth is OK
2026-04-12T02:24:00.278 [DEBUG] [Thread-181034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:24:00.278 [DEBUG] [Thread-181034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:24:00.278 [DEBUG] [Thread-181034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:24:00.278 [DEBUG] [Thread-181034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:24:00.301 [INFO] [Thread-181034] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:24:00.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:24:00.946 [DEBUG] [Thread-181034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:24:00.947 [DEBUG] [Thread-181034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:24:00.947 [DEBUG] [Thread-181034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:24:00.988 [DEBUG] [Thread-181034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:24:00.989 [DEBUG] [Thread-181034] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:24:00.992 [DEBUG] [Thread-181034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:24:01.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:24:01.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:24:01.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:24:01.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:24:01.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:24:01.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:24:01.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:24:01.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:24:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:24:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.016428 -999.00  +10.10  13.43     98   +9.90 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.6 13.4 280.8 15.7 11.4 -1.0 11.3 -1.3 10.9 -0.9 11.3 -0.3
2026-04-12T02:24:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:24:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:24:01.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.016428
2026-04-12T02:24:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:24:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:24:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:24:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:24:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:24:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:23:21', tmtdew=0.024775, humidity=100.137, cloud=0.0, wind=15.6514, temperature=10.1178, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:23:39.379', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:24:01.021 [DEBUG] [Thread-181034] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:24:01.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:24:01.117 [DEBUG] [Thread-181037] [transport.py] [_log()] starting thread (client mode): 0xae5b32e0
2026-04-12T02:24:01.117 [DEBUG] [Thread-181037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:24:01.133 [DEBUG] [Thread-181037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:24:01.133 [INFO] [Thread-181037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:24:01.140 [DEBUG] [Thread-181037] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] client lang: <none>
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] server lang: <none>
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] kex follows: False
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] Compression: none
2026-04-12T02:24:01.141 [DEBUG] [Thread-181037] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:24:01.194 [DEBUG] [Thread-181039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:24:01.201 [DEBUG] [Thread-181037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:24:01.201 [DEBUG] [Thread-181037] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:24:01.202 [DEBUG] [Thread-181037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:24:01.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:24:01.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:24:01.257 [DEBUG] [Thread-181037] [transport.py] [_log()] userauth is OK
2026-04-12T02:24:01.257 [DEBUG] [Thread-181037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:24:01.258 [DEBUG] [Thread-181037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:24:01.258 [DEBUG] [Thread-181037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:24:01.258 [DEBUG] [Thread-181037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:24:01.276 [INFO] [Thread-181037] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:24:01.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:24:01.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:24:02.067 [DEBUG] [Thread-181037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:24:02.067 [DEBUG] [Thread-181037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:24:02.116 [DEBUG] [Thread-181037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:24:02.116 [DEBUG] [Thread-181037] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:24:02.125 [DEBUG] [Thread-181037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:24:02.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:24:02.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-04-12T02:24:02.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-04-12T02:24:02.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:24:02.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:24:02.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:24:02.162 [DEBUG] [Thread-181037] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:24:16.248 [DEBUG] [Thread-181040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:24:29.520 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:24:29.521 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:24:31.287 [DEBUG] [Thread-181041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:24:32.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:24:32.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:24:32.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-04-12T02:24:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 23, 57), 0.02231, 100.153, 0.0, 16.1453, 10.1512, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:24:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:23:57
2026-04-12T02:24:33.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:24:34.030 [DEBUG] [Thread-181042] [transport.py] [_log()] starting thread (client mode): 0xb0f6c220
2026-04-12T02:24:34.030 [DEBUG] [Thread-181042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:24:34.051 [DEBUG] [Thread-181042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:24:34.051 [INFO] [Thread-181042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:24:34.054 [DEBUG] [Thread-181042] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:24:34.054 [DEBUG] [Thread-181042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] client lang: <none>
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] server lang: <none>
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] kex follows: False
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:24:34.055 [DEBUG] [Thread-181042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:24:34.056 [DEBUG] [Thread-181042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:24:34.056 [DEBUG] [Thread-181042] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:24:34.056 [DEBUG] [Thread-181042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:24:34.056 [DEBUG] [Thread-181042] [transport.py] [_log()] Compression: none
2026-04-12T02:24:34.056 [DEBUG] [Thread-181042] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:24:34.074 [DEBUG] [Thread-181042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:24:34.075 [DEBUG] [Thread-181042] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:24:34.075 [DEBUG] [Thread-181042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:24:34.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:24:34.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:24:34.078 [DEBUG] [Thread-181042] [transport.py] [_log()] userauth is OK
2026-04-12T02:24:34.078 [DEBUG] [Thread-181042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:24:34.078 [DEBUG] [Thread-181042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:24:34.078 [DEBUG] [Thread-181042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:24:34.078 [DEBUG] [Thread-181042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:24:34.102 [INFO] [Thread-181042] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:24:34.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:24:34.733 [DEBUG] [Thread-181042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:24:34.733 [DEBUG] [Thread-181042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:24:34.733 [DEBUG] [Thread-181042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:24:34.774 [DEBUG] [Thread-181042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:24:34.774 [DEBUG] [Thread-181042] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:24:34.778 [DEBUG] [Thread-181042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:24:34.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:24:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:24:34.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:24:34.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:24:34.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:24:34.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:24:34.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:24:34.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:24:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:24:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.016775 -999.00  +10.10  15.20     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.1 15.2 275.6 17.2 11.4 -1.1 11.3 -1.5 10.9 -1.7 11.3 -0.7
2026-04-12T02:24:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:24:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:24:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.016775
2026-04-12T02:24:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:24:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:24:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:24:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:24:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:24:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:23:57', tmtdew=0.02231, humidity=100.153, cloud=0.0, wind=16.1453, temperature=10.1512, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:24:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:24:34.806 [DEBUG] [Thread-181042] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:24:34.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:24:34.899 [DEBUG] [Thread-181045] [transport.py] [_log()] starting thread (client mode): 0xae5632b0
2026-04-12T02:24:34.899 [DEBUG] [Thread-181045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:24:34.917 [DEBUG] [Thread-181045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:24:34.917 [INFO] [Thread-181045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:24:34.926 [DEBUG] [Thread-181045] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:24:34.926 [DEBUG] [Thread-181045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:24:34.926 [DEBUG] [Thread-181045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:24:34.926 [DEBUG] [Thread-181045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:34.926 [DEBUG] [Thread-181045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:24:34.926 [DEBUG] [Thread-181045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] client lang: <none>
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] server lang: <none>
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] kex follows: False
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:24:34.927 [DEBUG] [Thread-181045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:24:34.928 [DEBUG] [Thread-181045] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:24:34.928 [DEBUG] [Thread-181045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:24:34.928 [DEBUG] [Thread-181045] [transport.py] [_log()] Compression: none
2026-04-12T02:24:34.928 [DEBUG] [Thread-181045] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:24:34.987 [DEBUG] [Thread-181045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:24:34.987 [DEBUG] [Thread-181045] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:24:34.988 [DEBUG] [Thread-181045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:24:34.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:24:34.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:24:35.055 [DEBUG] [Thread-181045] [transport.py] [_log()] userauth is OK
2026-04-12T02:24:35.055 [DEBUG] [Thread-181045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:24:35.056 [DEBUG] [Thread-181045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:24:35.056 [DEBUG] [Thread-181045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:24:35.056 [DEBUG] [Thread-181045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:24:35.078 [INFO] [Thread-181045] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:24:35.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:24:35.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:24:35.911 [DEBUG] [Thread-181045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:24:35.911 [DEBUG] [Thread-181045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:24:35.959 [DEBUG] [Thread-181045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:24:35.959 [DEBUG] [Thread-181045] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:24:35.969 [DEBUG] [Thread-181045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:24:35.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:24:35.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-04-12T02:24:35.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:24:35.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:24:35.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:24:35.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:24:36.008 [DEBUG] [Thread-181045] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:24:46.329 [DEBUG] [Thread-181047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:24:53.372 [DEBUG] [Thread-181048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:01.384 [DEBUG] [Thread-181049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:06.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:25:06.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:25:06.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-04-12T02:25:07.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 24, 33), 0.02222, 100.153, 0.0, 15.5808, 10.2175, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:25:07.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:24:33
2026-04-12T02:25:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:25:07.854 [DEBUG] [Thread-181050] [transport.py] [_log()] starting thread (client mode): 0xae535990
2026-04-12T02:25:07.854 [DEBUG] [Thread-181050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:25:07.875 [DEBUG] [Thread-181050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:25:07.875 [INFO] [Thread-181050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] client lang: <none>
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] server lang: <none>
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] kex follows: False
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:25:07.878 [DEBUG] [Thread-181050] [transport.py] [_log()] Compression: none
2026-04-12T02:25:07.879 [DEBUG] [Thread-181050] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:25:07.896 [DEBUG] [Thread-181050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:25:07.897 [DEBUG] [Thread-181050] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:25:07.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:25:07.898 [DEBUG] [Thread-181050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:25:07.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:25:07.900 [DEBUG] [Thread-181050] [transport.py] [_log()] userauth is OK
2026-04-12T02:25:07.900 [DEBUG] [Thread-181050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:25:07.900 [DEBUG] [Thread-181050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:25:07.900 [DEBUG] [Thread-181050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:25:07.900 [DEBUG] [Thread-181050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:25:07.924 [INFO] [Thread-181050] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:25:07.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:25:08.939 [DEBUG] [Thread-181050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:25:08.939 [DEBUG] [Thread-181050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:25:08.940 [DEBUG] [Thread-181050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:25:08.980 [DEBUG] [Thread-181050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:25:08.980 [DEBUG] [Thread-181050] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:25:08.983 [DEBUG] [Thread-181050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:25:08.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:25:08.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:25:08.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:25:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:25:09.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:25:09.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:25:09.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:25:09.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:25:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:25:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.017122 -999.00  +10.10  17.63     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.7 17.6 281.2 20.6 11.5 -1.2 11.3 -1.5 10.9 -1.7 11.3 -0.6
2026-04-12T02:25:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:25:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:25:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.017122
2026-04-12T02:25:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:25:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:25:09.012 [DEBUG] [Thread-181050] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:25:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:25:09.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:25:09.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:25:09.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:24:33', tmtdew=0.02222, humidity=100.153, cloud=0.0, wind=15.5808, temperature=10.2175, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:24:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:25:09.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:25:09.105 [DEBUG] [Thread-181053] [transport.py] [_log()] starting thread (client mode): 0xb0f43fa0
2026-04-12T02:25:09.105 [DEBUG] [Thread-181053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:25:09.120 [DEBUG] [Thread-181053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:25:09.120 [INFO] [Thread-181053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:09.128 [DEBUG] [Thread-181053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] client lang: <none>
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] server lang: <none>
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] kex follows: False
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] Compression: none
2026-04-12T02:25:09.129 [DEBUG] [Thread-181053] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:25:09.185 [DEBUG] [Thread-181053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:25:09.186 [DEBUG] [Thread-181053] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:25:09.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:25:09.187 [DEBUG] [Thread-181053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:25:09.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:25:09.241 [DEBUG] [Thread-181053] [transport.py] [_log()] userauth is OK
2026-04-12T02:25:09.242 [DEBUG] [Thread-181053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:25:09.242 [DEBUG] [Thread-181053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:25:09.242 [DEBUG] [Thread-181053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:25:09.242 [DEBUG] [Thread-181053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:25:09.260 [INFO] [Thread-181053] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:25:09.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:25:09.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:25:10.070 [DEBUG] [Thread-181053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:25:10.071 [DEBUG] [Thread-181053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:25:10.118 [DEBUG] [Thread-181053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:25:10.119 [DEBUG] [Thread-181053] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:25:10.127 [DEBUG] [Thread-181053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:25:10.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:25:10.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-04-12T02:25:10.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-04-12T02:25:10.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:25:10.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:25:10.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:25:10.161 [DEBUG] [Thread-181053] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:25:16.421 [DEBUG] [Thread-181055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:29.735 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:29.737 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:31.467 [DEBUG] [Thread-181056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:40.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:25:40.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:25:40.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-04-12T02:25:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 25, 8), 0.024725, 100.137, 0.0, 15.3162, 10.2009, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:25:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:25:08
2026-04-12T02:25:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:25:41.977 [DEBUG] [Thread-181057] [transport.py] [_log()] starting thread (client mode): 0xb0febf10
2026-04-12T02:25:41.978 [DEBUG] [Thread-181057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:25:41.998 [DEBUG] [Thread-181057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:25:41.998 [INFO] [Thread-181057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] client lang: <none>
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] server lang: <none>
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] kex follows: False
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] Compression: none
2026-04-12T02:25:42.001 [DEBUG] [Thread-181057] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:25:42.019 [DEBUG] [Thread-181057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:25:42.019 [DEBUG] [Thread-181057] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:25:42.020 [DEBUG] [Thread-181057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:25:42.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:25:42.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:25:42.022 [DEBUG] [Thread-181057] [transport.py] [_log()] userauth is OK
2026-04-12T02:25:42.022 [DEBUG] [Thread-181057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:25:42.023 [DEBUG] [Thread-181057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:25:42.023 [DEBUG] [Thread-181057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:25:42.023 [DEBUG] [Thread-181057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:25:42.048 [INFO] [Thread-181057] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:25:42.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:25:42.690 [DEBUG] [Thread-181057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:25:42.690 [DEBUG] [Thread-181057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:25:42.691 [DEBUG] [Thread-181057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:25:42.731 [DEBUG] [Thread-181057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:25:42.731 [DEBUG] [Thread-181057] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:25:42.734 [DEBUG] [Thread-181057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:25:42.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:25:42.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:25:42.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:25:42.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:25:42.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:25:42.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:25:42.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:25:42.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:25:42.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:25:42.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.017469 -999.00  +10.00  15.98     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.6 16.0 273.0 20.1 11.4 -1.4 11.3 -1.9 10.9 -1.3 11.3 -0.7
2026-04-12T02:25:42.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:25:42.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:25:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.017469
2026-04-12T02:25:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:25:42.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:25:42.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:25:42.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:25:42.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:25:42.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:25:08', tmtdew=0.024725, humidity=100.137, cloud=0.0, wind=15.3162, temperature=10.2009, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:25:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:25:42.756 [DEBUG] [Thread-181057] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:25:42.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:25:42.855 [DEBUG] [Thread-181060] [transport.py] [_log()] starting thread (client mode): 0xb0f438b0
2026-04-12T02:25:42.855 [DEBUG] [Thread-181060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:25:42.870 [DEBUG] [Thread-181060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:25:42.870 [INFO] [Thread-181060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:25:42.878 [DEBUG] [Thread-181060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] client lang: <none>
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] server lang: <none>
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] kex follows: False
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] Compression: none
2026-04-12T02:25:42.879 [DEBUG] [Thread-181060] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:25:42.937 [DEBUG] [Thread-181060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:25:42.937 [DEBUG] [Thread-181060] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:25:42.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:25:42.938 [DEBUG] [Thread-181060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:25:42.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:25:42.994 [DEBUG] [Thread-181060] [transport.py] [_log()] userauth is OK
2026-04-12T02:25:42.994 [DEBUG] [Thread-181060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:25:42.995 [DEBUG] [Thread-181060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:25:42.995 [DEBUG] [Thread-181060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:25:42.995 [DEBUG] [Thread-181060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:25:43.014 [INFO] [Thread-181060] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:25:43.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:25:43.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:25:43.865 [DEBUG] [Thread-181060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:25:43.866 [DEBUG] [Thread-181060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:25:43.914 [DEBUG] [Thread-181060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:25:43.915 [DEBUG] [Thread-181060] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:25:43.924 [DEBUG] [Thread-181060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:25:43.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:25: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')
2026-04-12T02:25:43.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-04-12T02:25:43.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:25:43.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:25:43.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:25:43.963 [DEBUG] [Thread-181060] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:25:46.507 [DEBUG] [Thread-181062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:25:53.438 [DEBUG] [Thread-181063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:01.568 [DEBUG] [Thread-181064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:26:13.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:26:13.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-04-12T02:26:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 25, 43), -0.05556, 100.307, 0.0, 17.2202, 10.6351, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:26:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:25:43
2026-04-12T02:26:15.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:26:15.882 [DEBUG] [Thread-181065] [transport.py] [_log()] starting thread (client mode): 0xb0fe91e0
2026-04-12T02:26:15.882 [DEBUG] [Thread-181065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:26:15.901 [DEBUG] [Thread-181065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:26:15.901 [INFO] [Thread-181065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:26:15.905 [DEBUG] [Thread-181065] [transport.py] [_log()] client lang: <none>
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] server lang: <none>
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] kex follows: False
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] Compression: none
2026-04-12T02:26:15.906 [DEBUG] [Thread-181065] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:26:15.926 [DEBUG] [Thread-181065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:26:15.927 [DEBUG] [Thread-181065] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:26:15.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:26:15.928 [DEBUG] [Thread-181065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:26:15.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:26:15.931 [DEBUG] [Thread-181065] [transport.py] [_log()] userauth is OK
2026-04-12T02:26:15.931 [DEBUG] [Thread-181065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:26:15.931 [DEBUG] [Thread-181065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:26:15.931 [DEBUG] [Thread-181065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:26:15.931 [DEBUG] [Thread-181065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:26:15.966 [INFO] [Thread-181065] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:26:15.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:26:16.609 [DEBUG] [Thread-181067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:16.611 [DEBUG] [Thread-181065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:26:16.612 [DEBUG] [Thread-181065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:26:16.612 [DEBUG] [Thread-181065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:26:16.654 [DEBUG] [Thread-181065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:26:16.655 [DEBUG] [Thread-181065] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:26:16.658 [DEBUG] [Thread-181065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:26:16.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:26:16.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:26:16.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:26:16.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:26:16.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:26:16.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:26:16.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:26:16.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:26:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:26:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.017816 -999.00  +10.00  17.65     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 15.4 17.6 280.6 19.9 11.4 -1.5 11.3 -2.2 10.9 -2.4 11.2 -0.7
2026-04-12T02:26:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:26:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:26:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.017816
2026-04-12T02:26:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:26:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:26:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:26:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:26:16.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:26:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:25:43', tmtdew=-0.05556, humidity=100.307, cloud=0.0, wind=17.2202, temperature=10.6351, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:25:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:26:16.685 [DEBUG] [Thread-181065] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:26:16.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:26:16.782 [DEBUG] [Thread-181069] [transport.py] [_log()] starting thread (client mode): 0xae560c40
2026-04-12T02:26:16.782 [DEBUG] [Thread-181069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:26:16.798 [DEBUG] [Thread-181069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:26:16.798 [INFO] [Thread-181069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:26:16.807 [DEBUG] [Thread-181069] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:26:16.807 [DEBUG] [Thread-181069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:26:16.807 [DEBUG] [Thread-181069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:26:16.807 [DEBUG] [Thread-181069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] client lang: <none>
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] server lang: <none>
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] kex follows: False
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] Compression: none
2026-04-12T02:26:16.808 [DEBUG] [Thread-181069] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:26:16.868 [DEBUG] [Thread-181069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:26:16.868 [DEBUG] [Thread-181069] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:26:16.869 [DEBUG] [Thread-181069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:26:16.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:26:16.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:26:16.925 [DEBUG] [Thread-181069] [transport.py] [_log()] userauth is OK
2026-04-12T02:26:16.925 [DEBUG] [Thread-181069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:26:16.926 [DEBUG] [Thread-181069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:26:16.926 [DEBUG] [Thread-181069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:26:16.926 [DEBUG] [Thread-181069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:26:16.945 [INFO] [Thread-181069] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:26:16.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:26:16.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:26:17.764 [DEBUG] [Thread-181069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:26:17.764 [DEBUG] [Thread-181069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:26:17.812 [DEBUG] [Thread-181069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:26:17.812 [DEBUG] [Thread-181069] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:26:17.821 [DEBUG] [Thread-181069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:26:17.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:26:17.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-04-12T02:26:17.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:26:17.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:26:17.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:26:17.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:26:17.856 [DEBUG] [Thread-181069] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:26:29.941 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:29.942 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:31.646 [DEBUG] [Thread-181071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:46.698 [DEBUG] [Thread-181072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:26:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:26:47.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:26: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-04-12T02:26:49.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 26, 19), -0.02526, 100.137, 0.0, 15.4926, 10.0844, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:26:49.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:26:19
2026-04-12T02:26:49.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:26:49.665 [DEBUG] [Thread-181073] [transport.py] [_log()] starting thread (client mode): 0xb0f42f50
2026-04-12T02:26:49.665 [DEBUG] [Thread-181073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:26:49.688 [DEBUG] [Thread-181073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:26:49.688 [INFO] [Thread-181073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:26:49.691 [DEBUG] [Thread-181073] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:26:49.691 [DEBUG] [Thread-181073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:26:49.691 [DEBUG] [Thread-181073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:26:49.691 [DEBUG] [Thread-181073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] client lang: <none>
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] server lang: <none>
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] kex follows: False
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:26:49.692 [DEBUG] [Thread-181073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:26:49.693 [DEBUG] [Thread-181073] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:26:49.693 [DEBUG] [Thread-181073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:26:49.693 [DEBUG] [Thread-181073] [transport.py] [_log()] Compression: none
2026-04-12T02:26:49.693 [DEBUG] [Thread-181073] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:26:49.704 [DEBUG] [Thread-181073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:26:49.705 [DEBUG] [Thread-181073] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:26:49.706 [DEBUG] [Thread-181073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:26:49.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:26:49.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:26:49.710 [DEBUG] [Thread-181073] [transport.py] [_log()] userauth is OK
2026-04-12T02:26:49.710 [DEBUG] [Thread-181073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:26:49.710 [DEBUG] [Thread-181073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:26:49.711 [DEBUG] [Thread-181073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:26:49.711 [DEBUG] [Thread-181073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:26:49.747 [INFO] [Thread-181073] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:26:49.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:26:50.339 [DEBUG] [Thread-181073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:26:50.339 [DEBUG] [Thread-181073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:26:50.340 [DEBUG] [Thread-181073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:26:50.380 [DEBUG] [Thread-181073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:26:50.380 [DEBUG] [Thread-181073] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:26:50.384 [DEBUG] [Thread-181073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:26:50.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:26:50.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:26:50.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:26:50.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:26:50.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:26:50.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:26:50.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:26:50.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:26:50.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:26:50.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.018164 -999.00  +10.00  20.43     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 21.1 20.4 279.4 24.3 11.4 -1.8 11.2 -2.2 10.8 -2.4 11.2 -1.1
2026-04-12T02:26:50.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:26:50.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:26:50.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.018164
2026-04-12T02:26:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:26:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:26:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:26:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:26:50.412 [DEBUG] [Thread-181073] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:26:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:26:50.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:26:19', tmtdew=-0.02526, humidity=100.137, cloud=0.0, wind=15.4926, temperature=10.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:26:09.370', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:26:50.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:26:50.506 [DEBUG] [Thread-181076] [transport.py] [_log()] starting thread (client mode): 0xb0f41330
2026-04-12T02:26:50.506 [DEBUG] [Thread-181076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:26:50.521 [DEBUG] [Thread-181076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:26:50.521 [INFO] [Thread-181076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:26:50.529 [DEBUG] [Thread-181076] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:26:50.530 [DEBUG] [Thread-181076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] client lang: <none>
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] server lang: <none>
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] kex follows: False
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] Compression: none
2026-04-12T02:26:50.531 [DEBUG] [Thread-181076] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:26:50.590 [DEBUG] [Thread-181076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:26:50.590 [DEBUG] [Thread-181076] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:26:50.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:26:50.592 [DEBUG] [Thread-181076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:26:50.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:26:50.649 [DEBUG] [Thread-181076] [transport.py] [_log()] userauth is OK
2026-04-12T02:26:50.650 [DEBUG] [Thread-181076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:26:50.650 [DEBUG] [Thread-181076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:26:50.650 [DEBUG] [Thread-181076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:26:50.650 [DEBUG] [Thread-181076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:26:50.670 [INFO] [Thread-181076] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:26:50.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:26:50.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:26:51.491 [DEBUG] [Thread-181076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:26:51.491 [DEBUG] [Thread-181076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:26:51.540 [DEBUG] [Thread-181076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:26:51.540 [DEBUG] [Thread-181076] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:26:51.549 [DEBUG] [Thread-181076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:26:51.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:26:51.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-04-12T02:26:51.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-04-12T02:26:51.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:26:51.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:26:51.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:26:51.587 [DEBUG] [Thread-181076] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:26:53.496 [DEBUG] [Thread-181078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:01.734 [DEBUG] [Thread-181079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:16.797 [DEBUG] [Thread-181080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:21.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:27:21.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:27:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:27:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 26, 54), -0.11507, 100.705, 0.0, 18.2786, 10.6351, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:27:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:26:54
2026-04-12T02:27:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:27:23.389 [DEBUG] [Thread-181081] [transport.py] [_log()] starting thread (client mode): 0xae52fe50
2026-04-12T02:27:23.389 [DEBUG] [Thread-181081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:27:23.406 [DEBUG] [Thread-181081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:27:23.407 [INFO] [Thread-181081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:27:23.408 [DEBUG] [Thread-181081] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:27:23.408 [DEBUG] [Thread-181081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:27:23.408 [DEBUG] [Thread-181081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:27:23.408 [DEBUG] [Thread-181081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] client lang: <none>
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] server lang: <none>
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] kex follows: False
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] Compression: none
2026-04-12T02:27:23.409 [DEBUG] [Thread-181081] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:27:23.418 [DEBUG] [Thread-181081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:27:23.418 [DEBUG] [Thread-181081] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:27:23.419 [DEBUG] [Thread-181081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:27:23.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:27:23.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:27:23.421 [DEBUG] [Thread-181081] [transport.py] [_log()] userauth is OK
2026-04-12T02:27:23.421 [DEBUG] [Thread-181081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:27:23.421 [DEBUG] [Thread-181081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:27:23.421 [DEBUG] [Thread-181081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:27:23.421 [DEBUG] [Thread-181081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:27:23.454 [INFO] [Thread-181081] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:27:23.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:27:24.053 [DEBUG] [Thread-181081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:27:24.054 [DEBUG] [Thread-181081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:27:24.054 [DEBUG] [Thread-181081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:27:24.095 [DEBUG] [Thread-181081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:27:24.095 [DEBUG] [Thread-181081] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:27:24.098 [DEBUG] [Thread-181081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:27:24.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:27:24.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:27:24.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:27:24.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:27:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:27:24.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:27:24.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:27:24.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:27:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:27:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.018511 -999.00  +10.00  17.43     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 12.6 17.4 285.6 24.8 11.4 -1.5 11.2 -1.6 10.8 -2.1 11.2 -0.8
2026-04-12T02:27:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:27:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:27:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.018511
2026-04-12T02:27:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:27:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:27:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:27:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:27:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:27:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:26:54', tmtdew=-0.11507, humidity=100.705, cloud=0.0, wind=18.2786, temperature=10.6351, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:26:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:27:24.122 [DEBUG] [Thread-181081] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:27:24.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:27:24.225 [DEBUG] [Thread-181084] [transport.py] [_log()] starting thread (client mode): 0xae52f5b0
2026-04-12T02:27:24.225 [DEBUG] [Thread-181084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:27:24.239 [DEBUG] [Thread-181084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:27:24.240 [INFO] [Thread-181084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:27:24.247 [DEBUG] [Thread-181084] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:27:24.247 [DEBUG] [Thread-181084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:27:24.247 [DEBUG] [Thread-181084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:27:24.247 [DEBUG] [Thread-181084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:24.247 [DEBUG] [Thread-181084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:24.247 [DEBUG] [Thread-181084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] client lang: <none>
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] server lang: <none>
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] kex follows: False
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:27:24.248 [DEBUG] [Thread-181084] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:27:24.249 [DEBUG] [Thread-181084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:27:24.249 [DEBUG] [Thread-181084] [transport.py] [_log()] Compression: none
2026-04-12T02:27:24.249 [DEBUG] [Thread-181084] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:27:24.305 [DEBUG] [Thread-181084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:27:24.306 [DEBUG] [Thread-181084] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:27:24.306 [DEBUG] [Thread-181084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:27:24.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:27:24.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:27:24.363 [DEBUG] [Thread-181084] [transport.py] [_log()] userauth is OK
2026-04-12T02:27:24.363 [DEBUG] [Thread-181084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:27:24.363 [DEBUG] [Thread-181084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:27:24.363 [DEBUG] [Thread-181084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:27:24.363 [DEBUG] [Thread-181084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:27:24.385 [INFO] [Thread-181084] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:27:24.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:27:24.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:27:25.252 [DEBUG] [Thread-181084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:27:25.252 [DEBUG] [Thread-181084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:27:25.301 [DEBUG] [Thread-181084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:27:25.301 [DEBUG] [Thread-181084] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:27:25.311 [DEBUG] [Thread-181084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:27:25.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:27:25.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:27:25.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:27:25.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:27:25.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:27:25.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:27:25.346 [DEBUG] [Thread-181084] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:27:30.146 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:30.147 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:31.834 [DEBUG] [Thread-181086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:46.886 [DEBUG] [Thread-181087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:53.561 [DEBUG] [Thread-181088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:27:55.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:27:55.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:27:55.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:27:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 27, 30), -0.002525, 100.319, 0.0, 18.986, 10.0844, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:27:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:27:30
2026-04-12T02:27:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:27:57.168 [DEBUG] [Thread-181089] [transport.py] [_log()] starting thread (client mode): 0xae52f0a0
2026-04-12T02:27:57.168 [DEBUG] [Thread-181089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:27:57.192 [DEBUG] [Thread-181089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:27:57.192 [INFO] [Thread-181089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:27:57.193 [DEBUG] [Thread-181089] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] client lang: <none>
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] server lang: <none>
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] kex follows: False
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] Compression: none
2026-04-12T02:27:57.194 [DEBUG] [Thread-181089] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:27:57.205 [DEBUG] [Thread-181089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:27:57.206 [DEBUG] [Thread-181089] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:27:57.207 [DEBUG] [Thread-181089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:27:57.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:27:57.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:27:57.208 [DEBUG] [Thread-181089] [transport.py] [_log()] userauth is OK
2026-04-12T02:27:57.209 [DEBUG] [Thread-181089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:27:57.209 [DEBUG] [Thread-181089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:27:57.209 [DEBUG] [Thread-181089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:27:57.209 [DEBUG] [Thread-181089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:27:57.227 [INFO] [Thread-181089] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:27:57.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:27:57.856 [DEBUG] [Thread-181089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:27:57.856 [DEBUG] [Thread-181089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:27:57.857 [DEBUG] [Thread-181089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:27:57.897 [DEBUG] [Thread-181089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:27:57.897 [DEBUG] [Thread-181089] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:27:57.900 [DEBUG] [Thread-181089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:27:57.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:27:57.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:27:57.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:27:57.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:27:57.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:27:57.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:27:57.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:27:57.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:27:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:27:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.019205 -999.00  +10.00  19.25     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 19.3 19.2 275.8 25.3 11.3 -1.5 11.2 -1.7 10.8 -1.4 11.2 -0.7
2026-04-12T02:27:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:27:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:27:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.019205
2026-04-12T02:27:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:27:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:27:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:27:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:27:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:27:57.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:27:30', tmtdew=-0.002525, humidity=100.319, cloud=0.0, wind=18.986, temperature=10.0844, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:27:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:27:57.924 [DEBUG] [Thread-181089] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:27:58.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:27:58.024 [DEBUG] [Thread-181092] [transport.py] [_log()] starting thread (client mode): 0xae52cfa0
2026-04-12T02:27:58.024 [DEBUG] [Thread-181092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:27:58.038 [DEBUG] [Thread-181092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:27:58.038 [INFO] [Thread-181092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] client lang: <none>
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] server lang: <none>
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] kex follows: False
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:27:58.046 [DEBUG] [Thread-181092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:27:58.047 [DEBUG] [Thread-181092] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:27:58.047 [DEBUG] [Thread-181092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:27:58.047 [DEBUG] [Thread-181092] [transport.py] [_log()] Compression: none
2026-04-12T02:27:58.047 [DEBUG] [Thread-181092] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:27:58.105 [DEBUG] [Thread-181092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:27:58.106 [DEBUG] [Thread-181092] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:27:58.106 [DEBUG] [Thread-181092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:27:58.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:27:58.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:27:58.161 [DEBUG] [Thread-181092] [transport.py] [_log()] userauth is OK
2026-04-12T02:27:58.161 [DEBUG] [Thread-181092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:27:58.161 [DEBUG] [Thread-181092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:27:58.161 [DEBUG] [Thread-181092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:27:58.161 [DEBUG] [Thread-181092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:27:58.185 [INFO] [Thread-181092] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:27:58.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:27:58.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:27:58.999 [DEBUG] [Thread-181092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:27:59.000 [DEBUG] [Thread-181092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:27:59.048 [DEBUG] [Thread-181092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:27:59.049 [DEBUG] [Thread-181092] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:27:59.059 [DEBUG] [Thread-181092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:27:59.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:27:59.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-04-12T02:27:59.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:27:59.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:27:59.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:27:59.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:27:59.096 [DEBUG] [Thread-181092] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:28:01.924 [DEBUG] [Thread-181094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:28:16.979 [DEBUG] [Thread-181095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:28:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:28:29.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:28:29.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-04-12T02:28:30.352 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:28:30.353 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:28:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 28, 6), -0.00745, 100.352, 0.0, 18.4921, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:28:30.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:28:06
2026-04-12T02:28:30.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:28:30.960 [DEBUG] [Thread-181096] [transport.py] [_log()] starting thread (client mode): 0xb0f6e980
2026-04-12T02:28:30.960 [DEBUG] [Thread-181096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:28:30.982 [DEBUG] [Thread-181096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:28:30.982 [INFO] [Thread-181096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] client lang: <none>
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] server lang: <none>
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] kex follows: False
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] Compression: none
2026-04-12T02:28:30.985 [DEBUG] [Thread-181096] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:28:31.000 [DEBUG] [Thread-181096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:28:31.000 [DEBUG] [Thread-181096] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:28:31.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:28:31.001 [DEBUG] [Thread-181096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:28:31.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:28:31.002 [DEBUG] [Thread-181096] [transport.py] [_log()] userauth is OK
2026-04-12T02:28:31.003 [DEBUG] [Thread-181096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:28:31.003 [DEBUG] [Thread-181096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:28:31.003 [DEBUG] [Thread-181096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:28:31.003 [DEBUG] [Thread-181096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:28:31.032 [INFO] [Thread-181096] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:28:31.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:28:31.687 [DEBUG] [Thread-181096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:28:31.688 [DEBUG] [Thread-181096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:28:31.688 [DEBUG] [Thread-181096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:28:31.729 [DEBUG] [Thread-181096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:28:31.730 [DEBUG] [Thread-181096] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:28:31.733 [DEBUG] [Thread-181096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:28:31.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:28:31.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:28:31.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:28:31.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:28:31.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:28:31.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:28:31.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:28:31.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:28:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:28:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.019552 -999.00  +10.00  18.49     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 16.6 18.5 273.4 24.1 11.4 -1.6 11.2 -1.6 10.8 -1.7 11.1 -0.7
2026-04-12T02:28:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:28:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:28:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.019552
2026-04-12T02:28:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:28:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:28:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:28:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:28:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:28:31.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:28:06', tmtdew=-0.00745, humidity=100.352, cloud=0.0, wind=18.4921, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:28:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:28:31.759 [DEBUG] [Thread-181096] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:28:31.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:28:31.853 [DEBUG] [Thread-181099] [transport.py] [_log()] starting thread (client mode): 0xb0f6c9a0
2026-04-12T02:28:31.854 [DEBUG] [Thread-181099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:28:31.868 [DEBUG] [Thread-181099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:28:31.868 [INFO] [Thread-181099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:28:31.876 [DEBUG] [Thread-181099] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:28:31.877 [DEBUG] [Thread-181099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:28:31.877 [DEBUG] [Thread-181099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:28:31.877 [DEBUG] [Thread-181099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:28:31.877 [DEBUG] [Thread-181099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:28:31.877 [DEBUG] [Thread-181099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:28:31.877 [DEBUG] [Thread-181099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] client lang: <none>
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] server lang: <none>
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] kex follows: False
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:28:31.878 [DEBUG] [Thread-181099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:28:31.879 [DEBUG] [Thread-181099] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:28:31.879 [DEBUG] [Thread-181099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:28:31.879 [DEBUG] [Thread-181099] [transport.py] [_log()] Compression: none
2026-04-12T02:28:31.879 [DEBUG] [Thread-181099] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:28:31.939 [DEBUG] [Thread-181099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:28:31.939 [DEBUG] [Thread-181099] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:28:31.940 [DEBUG] [Thread-181099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:28:31.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:28:31.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:28:31.999 [DEBUG] [Thread-181099] [transport.py] [_log()] userauth is OK
2026-04-12T02:28:31.999 [DEBUG] [Thread-181099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:28:31.999 [DEBUG] [Thread-181099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:28:31.999 [DEBUG] [Thread-181099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:28:32.000 [DEBUG] [Thread-181099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:28:32.015 [DEBUG] [Thread-181101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:28:32.018 [INFO] [Thread-181099] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:28:32.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:28:32.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:28:32.835 [DEBUG] [Thread-181099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:28:32.836 [DEBUG] [Thread-181099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:28:32.884 [DEBUG] [Thread-181099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:28:32.884 [DEBUG] [Thread-181099] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:28:32.892 [DEBUG] [Thread-181099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:28:32.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:28:32.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-04-12T02:28:32.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-04-12T02:28:32.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:28:32.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:28:32.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:28:32.926 [DEBUG] [Thread-181099] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:28:47.068 [DEBUG] [Thread-181102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:28:53.630 [DEBUG] [Thread-181103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:02.104 [DEBUG] [Thread-181104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:29:02.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:29:02.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-04-12T02:29:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 28, 41), -0.09505, 100.572, 0.0, 20.0426, 10.5024, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:29:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:28:41
2026-04-12T02:29:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:29:04.768 [DEBUG] [Thread-181105] [transport.py] [_log()] starting thread (client mode): 0xb0fe8970
2026-04-12T02:29:04.768 [DEBUG] [Thread-181105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:29:04.792 [DEBUG] [Thread-181105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:29:04.792 [INFO] [Thread-181105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:29:04.794 [DEBUG] [Thread-181105] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] client lang: <none>
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] server lang: <none>
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] kex follows: False
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] Compression: none
2026-04-12T02:29:04.795 [DEBUG] [Thread-181105] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:29:04.807 [DEBUG] [Thread-181105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:29:04.808 [DEBUG] [Thread-181105] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:29:04.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:29:04.810 [DEBUG] [Thread-181105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:29:04.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:29:04.814 [DEBUG] [Thread-181105] [transport.py] [_log()] userauth is OK
2026-04-12T02:29:04.815 [DEBUG] [Thread-181105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:29:04.815 [DEBUG] [Thread-181105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:29:04.815 [DEBUG] [Thread-181105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:29:04.815 [DEBUG] [Thread-181105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:29:04.841 [INFO] [Thread-181105] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:29:04.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:29:05.547 [DEBUG] [Thread-181105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:29:05.547 [DEBUG] [Thread-181105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:29:05.547 [DEBUG] [Thread-181105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:29:05.590 [DEBUG] [Thread-181105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:29:05.591 [DEBUG] [Thread-181105] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:29:05.596 [DEBUG] [Thread-181105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:29:05.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:29:05.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:29:05.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:29:05.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:29:05.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:29:05.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:29:05.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:29:05.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:29:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:29:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.019900 -999.00  +10.00  14.29     98   +9.70 1 3 1 3 1     0    0 -999.00 0.00 ----- 13.3 14.3 285.6 21.4 11.3 -1.2 11.3 -1.5 10.8 -1.4 11.2 -0.4
2026-04-12T02:29:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:29:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:29:05.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.019900
2026-04-12T02:29:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:29:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:29:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:29:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:29:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:29:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:28:41', tmtdew=-0.09505, humidity=100.572, cloud=0.0, wind=20.0426, temperature=10.5024, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:28:39.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:29:05.639 [DEBUG] [Thread-181105] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:29:05.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:29:05.732 [DEBUG] [Thread-181108] [transport.py] [_log()] starting thread (client mode): 0xb0fe98d0
2026-04-12T02:29:05.732 [DEBUG] [Thread-181108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:29:05.748 [DEBUG] [Thread-181108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:29:05.748 [INFO] [Thread-181108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:29:05.755 [DEBUG] [Thread-181108] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:29:05.756 [DEBUG] [Thread-181108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] client lang: <none>
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] server lang: <none>
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] kex follows: False
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:29:05.757 [DEBUG] [Thread-181108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:29:05.758 [DEBUG] [Thread-181108] [transport.py] [_log()] Compression: none
2026-04-12T02:29:05.758 [DEBUG] [Thread-181108] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:29:05.814 [DEBUG] [Thread-181108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:29:05.815 [DEBUG] [Thread-181108] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:29:05.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:29:05.816 [DEBUG] [Thread-181108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:29:05.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:29:05.872 [DEBUG] [Thread-181108] [transport.py] [_log()] userauth is OK
2026-04-12T02:29:05.873 [DEBUG] [Thread-181108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:29:05.873 [DEBUG] [Thread-181108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:29:05.873 [DEBUG] [Thread-181108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:29:05.873 [DEBUG] [Thread-181108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:29:05.897 [INFO] [Thread-181108] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:29:05.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:29:05.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:29:06.714 [DEBUG] [Thread-181108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:29:06.715 [DEBUG] [Thread-181108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:29:06.762 [DEBUG] [Thread-181108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:29:06.763 [DEBUG] [Thread-181108] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:29:06.772 [DEBUG] [Thread-181108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:29:06.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:29:06.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:29:06.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:29:06.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:29:06.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:29:06.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:29:06.809 [DEBUG] [Thread-181108] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:29:17.146 [DEBUG] [Thread-181110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:30.559 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:30.560 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:32.197 [DEBUG] [Thread-181111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:29:36.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:29:36.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-04-12T02:29:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 29, 17), -0.00253, 100.319, 0.0, 17.3808, 10.1344, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:29:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:29:17
2026-04-12T02:29:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:29:38.703 [DEBUG] [Thread-181112] [transport.py] [_log()] starting thread (client mode): 0xb0f6f9a0
2026-04-12T02:29:38.703 [DEBUG] [Thread-181112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:29:38.723 [DEBUG] [Thread-181112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:29:38.723 [INFO] [Thread-181112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:29:38.727 [DEBUG] [Thread-181112] [transport.py] [_log()] client lang: <none>
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] server lang: <none>
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] kex follows: False
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] Compression: none
2026-04-12T02:29:38.728 [DEBUG] [Thread-181112] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:29:38.745 [DEBUG] [Thread-181112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:29:38.745 [DEBUG] [Thread-181112] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:29:38.746 [DEBUG] [Thread-181112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:29:38.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:29:38.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:29:38.789 [DEBUG] [Thread-181112] [transport.py] [_log()] userauth is OK
2026-04-12T02:29:38.789 [DEBUG] [Thread-181112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:29:38.789 [DEBUG] [Thread-181112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:29:38.790 [DEBUG] [Thread-181112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:29:38.790 [DEBUG] [Thread-181112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:29:38.812 [INFO] [Thread-181112] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:29:38.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:29:39.621 [DEBUG] [Thread-181112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:29:39.621 [DEBUG] [Thread-181112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:29:39.621 [DEBUG] [Thread-181112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:29:39.662 [DEBUG] [Thread-181112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:29:39.662 [DEBUG] [Thread-181112] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:29:39.665 [DEBUG] [Thread-181112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:29:39.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:29:39.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:29:39.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:29:39.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:29:39.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:29:39.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:29:39.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:29:39.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:29:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:29:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.020247 -999.00  +10.10  15.41     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 14.5 15.4 278.6 17.1 11.4 -1.0 11.3 -1.5 10.8 -1.5 11.2 -0.5
2026-04-12T02:29:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:29:39.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:29:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.020247
2026-04-12T02:29:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:29:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:29:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:29:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:29:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:29:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:29:17', tmtdew=-0.00253, humidity=100.319, cloud=0.0, wind=17.3808, temperature=10.1344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:29:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:29:39.691 [DEBUG] [Thread-181112] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:29:39.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:29:39.786 [DEBUG] [Thread-181115] [transport.py] [_log()] starting thread (client mode): 0xb0fe8640
2026-04-12T02:29:39.786 [DEBUG] [Thread-181115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:29:39.801 [DEBUG] [Thread-181115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:29:39.802 [INFO] [Thread-181115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:29:39.817 [DEBUG] [Thread-181115] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:29:39.817 [DEBUG] [Thread-181115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] client lang: <none>
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] server lang: <none>
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] kex follows: False
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:29:39.818 [DEBUG] [Thread-181115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:29:39.819 [DEBUG] [Thread-181115] [transport.py] [_log()] Compression: none
2026-04-12T02:29:39.819 [DEBUG] [Thread-181115] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:29:39.873 [DEBUG] [Thread-181115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:29:39.873 [DEBUG] [Thread-181115] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:29:39.874 [DEBUG] [Thread-181115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:29:39.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:29:39.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:29:39.936 [DEBUG] [Thread-181115] [transport.py] [_log()] userauth is OK
2026-04-12T02:29:39.937 [DEBUG] [Thread-181115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:29:39.937 [DEBUG] [Thread-181115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:29:39.937 [DEBUG] [Thread-181115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:29:39.937 [DEBUG] [Thread-181115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:29:39.957 [INFO] [Thread-181115] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:29:39.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:29:39.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:29:40.759 [DEBUG] [Thread-181115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:29:40.759 [DEBUG] [Thread-181115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:29:40.807 [DEBUG] [Thread-181115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:29:40.807 [DEBUG] [Thread-181115] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:29:40.816 [DEBUG] [Thread-181115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:29:40.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:29:40.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-04-12T02:29: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-04-12T02:29:40.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:29:40.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:29:40.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:29:40.850 [DEBUG] [Thread-181115] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:29:47.230 [DEBUG] [Thread-181117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:29:53.687 [DEBUG] [Thread-181118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:02.285 [DEBUG] [Thread-181119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:30:10.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:30:10.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:30:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 29, 52), -0.09516, 100.572, 0.0, 18.8078, 10.5688, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:30:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:29:52
2026-04-12T02:30:12.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:30:12.692 [DEBUG] [Thread-181120] [transport.py] [_log()] starting thread (client mode): 0xae52f280
2026-04-12T02:30:12.692 [DEBUG] [Thread-181120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:30:12.715 [DEBUG] [Thread-181120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:30:12.715 [INFO] [Thread-181120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:30:12.718 [DEBUG] [Thread-181120] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:30:12.718 [DEBUG] [Thread-181120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:30:12.718 [DEBUG] [Thread-181120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:30:12.718 [DEBUG] [Thread-181120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] client lang: <none>
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] server lang: <none>
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] kex follows: False
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] Compression: none
2026-04-12T02:30:12.719 [DEBUG] [Thread-181120] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:30:12.734 [DEBUG] [Thread-181120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:30:12.735 [DEBUG] [Thread-181120] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:30:12.735 [DEBUG] [Thread-181120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:30:12.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:30:12.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:30:12.738 [DEBUG] [Thread-181120] [transport.py] [_log()] userauth is OK
2026-04-12T02:30:12.739 [DEBUG] [Thread-181120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:30:12.739 [DEBUG] [Thread-181120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:30:12.739 [DEBUG] [Thread-181120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:30:12.739 [DEBUG] [Thread-181120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:30:12.764 [INFO] [Thread-181120] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:30:12.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:30:13.961 [DEBUG] [Thread-181120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:30:13.961 [DEBUG] [Thread-181120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:30:13.961 [DEBUG] [Thread-181120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:30:14.002 [DEBUG] [Thread-181120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:30:14.002 [DEBUG] [Thread-181120] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:30:14.006 [DEBUG] [Thread-181120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:30:14.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:30:14.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:30:14.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:30:14.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:30:14.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:30:14.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:30:14.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:30:14.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:30:14.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:30:14.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.020594 -999.00  +10.00  15.01     98   +9.80 1 3 1 3 1     0    0 -999.00 0.00 ----- 17.8 15.0 277.0 20.3 11.4 -1.2 11.2 -1.5 10.8 -1.5 11.2 -0.5
2026-04-12T02:30:14.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:30:14.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:30:14.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.020594
2026-04-12T02:30:14.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:30:14.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:30:14.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:30:14.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:30:14.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:30:14.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:29:52', tmtdew=-0.09516, humidity=100.572, cloud=0.0, wind=18.8078, temperature=10.5688, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:29:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:30:14.039 [DEBUG] [Thread-181120] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:30:14.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:30:14.130 [DEBUG] [Thread-181123] [transport.py] [_log()] starting thread (client mode): 0xae52ca30
2026-04-12T02:30:14.130 [DEBUG] [Thread-181123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:30:14.146 [DEBUG] [Thread-181123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:30:14.146 [INFO] [Thread-181123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:30:14.154 [DEBUG] [Thread-181123] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:30:14.154 [DEBUG] [Thread-181123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:30:14.154 [DEBUG] [Thread-181123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:30:14.154 [DEBUG] [Thread-181123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:14.154 [DEBUG] [Thread-181123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] client lang: <none>
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] server lang: <none>
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] kex follows: False
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] Compression: none
2026-04-12T02:30:14.155 [DEBUG] [Thread-181123] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:30:14.213 [DEBUG] [Thread-181123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:30:14.213 [DEBUG] [Thread-181123] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:30:14.214 [DEBUG] [Thread-181123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:30:14.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:30:14.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:30:14.274 [DEBUG] [Thread-181123] [transport.py] [_log()] userauth is OK
2026-04-12T02:30:14.274 [DEBUG] [Thread-181123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:30:14.275 [DEBUG] [Thread-181123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:30:14.275 [DEBUG] [Thread-181123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:30:14.275 [DEBUG] [Thread-181123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:30:14.294 [INFO] [Thread-181123] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:30:14.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:30:14.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:30:15.102 [DEBUG] [Thread-181123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:30:15.102 [DEBUG] [Thread-181123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:30:15.152 [DEBUG] [Thread-181123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:30:15.152 [DEBUG] [Thread-181123] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:30:15.163 [DEBUG] [Thread-181123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:30:15.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:30:15.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-04-12T02:30:15.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-04-12T02:30:15.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:30:15.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:30:15.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:30:15.203 [DEBUG] [Thread-181123] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:30:17.323 [DEBUG] [Thread-181125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:30.766 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:30.767 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:32.376 [DEBUG] [Thread-181126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:45.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:30:45.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:30:45.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-04-12T02:30:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 30, 28), -0.0426, 100.253, 0.0, 15.6866, 10.1178, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:30:46.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:30:28
2026-04-12T02:30:47.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:30:47.218 [DEBUG] [Thread-181127] [transport.py] [_log()] starting thread (client mode): 0xb0f6dc60
2026-04-12T02:30:47.218 [DEBUG] [Thread-181127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:30:47.239 [DEBUG] [Thread-181127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:30:47.239 [INFO] [Thread-181127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:30:47.242 [DEBUG] [Thread-181127] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] client lang: <none>
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] server lang: <none>
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] kex follows: False
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] Compression: none
2026-04-12T02:30:47.243 [DEBUG] [Thread-181127] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:30:47.262 [DEBUG] [Thread-181127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:30:47.262 [DEBUG] [Thread-181127] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:30:47.263 [DEBUG] [Thread-181127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:30:47.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:30:47.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:30:47.265 [DEBUG] [Thread-181127] [transport.py] [_log()] userauth is OK
2026-04-12T02:30:47.266 [DEBUG] [Thread-181127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:30:47.266 [DEBUG] [Thread-181127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:30:47.266 [DEBUG] [Thread-181127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:30:47.266 [DEBUG] [Thread-181127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:30:47.303 [INFO] [Thread-181127] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:30:47.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:30:47.410 [DEBUG] [Thread-181129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:30:48.097 [DEBUG] [Thread-181127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:30:48.098 [DEBUG] [Thread-181127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:30:48.098 [DEBUG] [Thread-181127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:30:48.139 [DEBUG] [Thread-181127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:30:48.139 [DEBUG] [Thread-181127] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:30:48.142 [DEBUG] [Thread-181127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:30:48.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:30:48.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:30:48.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:30:48.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:30:48.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:30:48.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:30:48.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:30:48.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:30:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:30:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.020941 -999.00  +10.00  18.78     98   +9.80 1 3 1 3 1     0    0 0.26 -0.30 ----- 16.9 18.8 271.2 20.0 11.4 -1.3 11.2 -1.3 10.8 -1.6 11.2 -0.6
2026-04-12T02:30:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:30:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:30:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.020941
2026-04-12T02:30:48.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:30:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:30:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:30:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:30:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:30:48.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:30:28', tmtdew=-0.0426, humidity=100.253, cloud=0.0, wind=15.6866, temperature=10.1178, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:30:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:30:48.169 [DEBUG] [Thread-181127] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:30:48.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:30:48.262 [DEBUG] [Thread-181131] [transport.py] [_log()] starting thread (client mode): 0xb0fe9cc0
2026-04-12T02:30:48.262 [DEBUG] [Thread-181131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:30:48.276 [DEBUG] [Thread-181131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:30:48.276 [INFO] [Thread-181131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] client lang: <none>
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] server lang: <none>
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] kex follows: False
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:30:48.284 [DEBUG] [Thread-181131] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:30:48.285 [DEBUG] [Thread-181131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:30:48.285 [DEBUG] [Thread-181131] [transport.py] [_log()] Compression: none
2026-04-12T02:30:48.285 [DEBUG] [Thread-181131] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:30:48.345 [DEBUG] [Thread-181131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:30:48.346 [DEBUG] [Thread-181131] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:30:48.346 [DEBUG] [Thread-181131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:30:48.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:30:48.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:30:48.404 [DEBUG] [Thread-181131] [transport.py] [_log()] userauth is OK
2026-04-12T02:30:48.404 [DEBUG] [Thread-181131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:30:48.404 [DEBUG] [Thread-181131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:30:48.404 [DEBUG] [Thread-181131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:30:48.404 [DEBUG] [Thread-181131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:30:48.421 [INFO] [Thread-181131] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:30:48.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:30:48.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:30:49.254 [DEBUG] [Thread-181131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:30:49.254 [DEBUG] [Thread-181131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:30:49.302 [DEBUG] [Thread-181131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:30:49.302 [DEBUG] [Thread-181131] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:30:49.312 [DEBUG] [Thread-181131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:30:49.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:30:49.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-04-12T02:30:49.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:30:49.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:30:49.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:30:49.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:30:49.349 [DEBUG] [Thread-181131] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:30:53.744 [DEBUG] [Thread-181133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:02.448 [DEBUG] [Thread-181134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:17.498 [DEBUG] [Thread-181135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:19.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:31:19.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:31:19.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-04-12T02:31:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 31, 3), -0.04015, 100.236, 0.0, 15.7043, 10.1344, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:31:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:31:03
2026-04-12T02:31:21.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:31:21.205 [DEBUG] [Thread-181136] [transport.py] [_log()] starting thread (client mode): 0xb0f6cdc0
2026-04-12T02:31:21.205 [DEBUG] [Thread-181136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:31:21.228 [DEBUG] [Thread-181136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:31:21.229 [INFO] [Thread-181136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:31:21.233 [DEBUG] [Thread-181136] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:31:21.233 [DEBUG] [Thread-181136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:31:21.233 [DEBUG] [Thread-181136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:31:21.233 [DEBUG] [Thread-181136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:21.233 [DEBUG] [Thread-181136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] client lang: <none>
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] server lang: <none>
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] kex follows: False
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:31:21.234 [DEBUG] [Thread-181136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:31:21.235 [DEBUG] [Thread-181136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:31:21.235 [DEBUG] [Thread-181136] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:31:21.235 [DEBUG] [Thread-181136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:31:21.235 [DEBUG] [Thread-181136] [transport.py] [_log()] Compression: none
2026-04-12T02:31:21.235 [DEBUG] [Thread-181136] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:31:21.251 [DEBUG] [Thread-181136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:31:21.251 [DEBUG] [Thread-181136] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:31:21.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:31:21.252 [DEBUG] [Thread-181136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:31:21.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:31:21.256 [DEBUG] [Thread-181136] [transport.py] [_log()] userauth is OK
2026-04-12T02:31:21.257 [DEBUG] [Thread-181136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:31:21.257 [DEBUG] [Thread-181136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:31:21.257 [DEBUG] [Thread-181136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:31:21.257 [DEBUG] [Thread-181136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:31:21.281 [INFO] [Thread-181136] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:31:21.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:31:22.102 [DEBUG] [Thread-181136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:31:22.102 [DEBUG] [Thread-181136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:31:22.102 [DEBUG] [Thread-181136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:31:22.144 [DEBUG] [Thread-181136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:31:22.144 [DEBUG] [Thread-181136] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:31:22.146 [DEBUG] [Thread-181136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:31:22.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:31:22.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:31:22.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:31:22.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:31:22.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:31:22.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:31:22.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:31:22.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:31:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:31:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.021288 -999.00  +10.00  13.82     98   +9.80 1 3 1 3 1     0    0 0.26 -0.53 ----- 17.4 13.8 275.9 20.8 11.4 -1.1 11.2 -1.3 10.8 -1.4 11.2 -0.5
2026-04-12T02:31:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:31:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:31:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.021288
2026-04-12T02:31:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:31:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:31:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:31:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:31:22.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:31:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:31:03', tmtdew=-0.04015, humidity=100.236, cloud=0.0, wind=15.7043, temperature=10.1344, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:30:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:31:22.186 [DEBUG] [Thread-181136] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:31:22.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:31:22.278 [DEBUG] [Thread-181139] [transport.py] [_log()] starting thread (client mode): 0xae52da50
2026-04-12T02:31:22.279 [DEBUG] [Thread-181139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:31:22.294 [DEBUG] [Thread-181139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:31:22.294 [INFO] [Thread-181139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:31:22.301 [DEBUG] [Thread-181139] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] client lang: <none>
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] server lang: <none>
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] kex follows: False
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] Compression: none
2026-04-12T02:31:22.302 [DEBUG] [Thread-181139] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:31:22.361 [DEBUG] [Thread-181139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:31:22.361 [DEBUG] [Thread-181139] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:31:22.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:31:22.362 [DEBUG] [Thread-181139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:31:22.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:31:22.417 [DEBUG] [Thread-181139] [transport.py] [_log()] userauth is OK
2026-04-12T02:31:22.418 [DEBUG] [Thread-181139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:31:22.418 [DEBUG] [Thread-181139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:31:22.418 [DEBUG] [Thread-181139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:31:22.418 [DEBUG] [Thread-181139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:31:22.443 [INFO] [Thread-181139] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:31:22.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:31:22.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:31:23.253 [DEBUG] [Thread-181139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:31:23.253 [DEBUG] [Thread-181139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:31:23.301 [DEBUG] [Thread-181139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:31:23.301 [DEBUG] [Thread-181139] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:31:23.310 [DEBUG] [Thread-181139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:31:23.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:31: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')
2026-04-12T02:31:23.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-04-12T02:31:23.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:31:23.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:31:23.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:31:23.346 [DEBUG] [Thread-181139] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:31:30.972 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:30.973 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:32.534 [DEBUG] [Thread-181141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:47.584 [DEBUG] [Thread-181142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:53.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:31:53.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:31:53.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-04-12T02:31:53.812 [DEBUG] [Thread-181143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:31:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 31, 39), -0.07534, 100.439, 0.0, 19.9015, 10.5688, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:31:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:31:39
2026-04-12T02:31:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:31:55.168 [DEBUG] [Thread-181144] [transport.py] [_log()] starting thread (client mode): 0xb0fe9210
2026-04-12T02:31:55.168 [DEBUG] [Thread-181144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:31:55.189 [DEBUG] [Thread-181144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:31:55.189 [INFO] [Thread-181144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:55.193 [DEBUG] [Thread-181144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] client lang: <none>
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] server lang: <none>
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] kex follows: False
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] Compression: none
2026-04-12T02:31:55.194 [DEBUG] [Thread-181144] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:31:55.213 [DEBUG] [Thread-181144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:31:55.214 [DEBUG] [Thread-181144] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:31:55.214 [DEBUG] [Thread-181144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:31:55.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:31:55.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:31:55.216 [DEBUG] [Thread-181144] [transport.py] [_log()] userauth is OK
2026-04-12T02:31:55.217 [DEBUG] [Thread-181144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:31:55.217 [DEBUG] [Thread-181144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:31:55.217 [DEBUG] [Thread-181144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:31:55.217 [DEBUG] [Thread-181144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:31:55.241 [INFO] [Thread-181144] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:31:55.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:31:56.051 [DEBUG] [Thread-181144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:31:56.051 [DEBUG] [Thread-181144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:31:56.052 [DEBUG] [Thread-181144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:31:56.092 [DEBUG] [Thread-181144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:31:56.092 [DEBUG] [Thread-181144] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:31:56.096 [DEBUG] [Thread-181144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:31:56.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:31:56.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:31:56.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:31:56.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:31:56.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:31:56.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:31:56.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:31:56.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:31:56.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:31:56.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.021636 -999.00  +10.10  15.49     98   +9.80 1 3 1 3 1     0    0 0.26 -0.56 ----- 14.1 15.5 274.4 20.2 11.4 -1.2 11.2 -1.6 10.9 -1.6 11.3 -0.6
2026-04-12T02:31:56.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:31:56.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:31:56.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.021636
2026-04-12T02:31:56.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:31:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:31:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:31:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:31:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:31:56.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:31:39', tmtdew=-0.07534, humidity=100.439, cloud=0.0, wind=19.9015, temperature=10.5688, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:31:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:31:56.125 [DEBUG] [Thread-181144] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:31:56.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:31:56.224 [DEBUG] [Thread-181147] [transport.py] [_log()] starting thread (client mode): 0xb0febf10
2026-04-12T02:31:56.224 [DEBUG] [Thread-181147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:31:56.240 [DEBUG] [Thread-181147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:31:56.241 [INFO] [Thread-181147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:31:56.249 [DEBUG] [Thread-181147] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] client lang: <none>
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] server lang: <none>
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] kex follows: False
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:31:56.250 [DEBUG] [Thread-181147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:31:56.251 [DEBUG] [Thread-181147] [transport.py] [_log()] Compression: none
2026-04-12T02:31:56.251 [DEBUG] [Thread-181147] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:31:56.308 [DEBUG] [Thread-181147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:31:56.309 [DEBUG] [Thread-181147] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:31:56.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:31:56.310 [DEBUG] [Thread-181147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:31:56.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:31:56.364 [DEBUG] [Thread-181147] [transport.py] [_log()] userauth is OK
2026-04-12T02:31:56.365 [DEBUG] [Thread-181147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:31:56.365 [DEBUG] [Thread-181147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:31:56.365 [DEBUG] [Thread-181147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:31:56.365 [DEBUG] [Thread-181147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:31:56.384 [INFO] [Thread-181147] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:31:56.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:31:56.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:31:57.193 [DEBUG] [Thread-181147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:31:57.193 [DEBUG] [Thread-181147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:31:57.241 [DEBUG] [Thread-181147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:31:57.241 [DEBUG] [Thread-181147] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:31:57.251 [DEBUG] [Thread-181147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:31:57.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:31:57.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:31:57.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-04-12T02:31:57.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:31:57.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:31:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:31:57.289 [DEBUG] [Thread-181147] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:32:02.621 [DEBUG] [Thread-181149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:32:17.683 [DEBUG] [Thread-181150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:32:27.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:32:27.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:32:27.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:32:28.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 32, 14), -0.035235, 100.203, 0.0, 17.7336, 10.1176, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:32:28.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:32:14
2026-04-12T02:32:28.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:32:29.096 [DEBUG] [Thread-181151] [transport.py] [_log()] starting thread (client mode): 0xb0fea590
2026-04-12T02:32:29.096 [DEBUG] [Thread-181151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:32:29.116 [DEBUG] [Thread-181151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:32:29.116 [INFO] [Thread-181151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:32:29.119 [DEBUG] [Thread-181151] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:32:29.119 [DEBUG] [Thread-181151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] client lang: <none>
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] server lang: <none>
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] kex follows: False
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] Compression: none
2026-04-12T02:32:29.120 [DEBUG] [Thread-181151] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:32:29.140 [DEBUG] [Thread-181151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:32:29.141 [DEBUG] [Thread-181151] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:32:29.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:32:29.142 [DEBUG] [Thread-181151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:32:29.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:32:29.144 [DEBUG] [Thread-181151] [transport.py] [_log()] userauth is OK
2026-04-12T02:32:29.144 [DEBUG] [Thread-181151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:32:29.144 [DEBUG] [Thread-181151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:32:29.144 [DEBUG] [Thread-181151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:32:29.144 [DEBUG] [Thread-181151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:32:29.168 [INFO] [Thread-181151] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:32:29.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:32:29.951 [DEBUG] [Thread-181151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:32:29.951 [DEBUG] [Thread-181151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:32:29.952 [DEBUG] [Thread-181151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:32:29.992 [DEBUG] [Thread-181151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:32:29.992 [DEBUG] [Thread-181151] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:32:29.996 [DEBUG] [Thread-181151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:32:30.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:32:30.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:32:30.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:32:30.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:32:30.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:32:30.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:32:30.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:32:30.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:32:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:32:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.021983 -999.00  +10.10  16.76     98   +9.80 1 3 1 3 1     0    0 0.25 -0.61 ----- 14.4 16.8 281.8 18.9 11.4 -1.1 11.3 -1.4 10.9 -1.6 11.2 -0.6
2026-04-12T02:32:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:32:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:32:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.021983
2026-04-12T02:32:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:32:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:32:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:32:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:32:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:32:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:32:14', tmtdew=-0.035235, humidity=100.203, cloud=0.0, wind=17.7336, temperature=10.1176, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:31:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:32:30.023 [DEBUG] [Thread-181151] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:32:30.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:32:30.117 [DEBUG] [Thread-181154] [transport.py] [_log()] starting thread (client mode): 0xb0f42bc0
2026-04-12T02:32:30.117 [DEBUG] [Thread-181154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:32:30.132 [DEBUG] [Thread-181154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:32:30.132 [INFO] [Thread-181154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] client lang: <none>
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] server lang: <none>
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] kex follows: False
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:32:30.140 [DEBUG] [Thread-181154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:32:30.141 [DEBUG] [Thread-181154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:32:30.141 [DEBUG] [Thread-181154] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:32:30.141 [DEBUG] [Thread-181154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:32:30.141 [DEBUG] [Thread-181154] [transport.py] [_log()] Compression: none
2026-04-12T02:32:30.141 [DEBUG] [Thread-181154] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:32:30.200 [DEBUG] [Thread-181154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:32:30.200 [DEBUG] [Thread-181154] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:32:30.201 [DEBUG] [Thread-181154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:32:30.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:32:30.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:32:30.256 [DEBUG] [Thread-181154] [transport.py] [_log()] userauth is OK
2026-04-12T02:32:30.257 [DEBUG] [Thread-181154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:32:30.257 [DEBUG] [Thread-181154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:32:30.257 [DEBUG] [Thread-181154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:32:30.257 [DEBUG] [Thread-181154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:32:30.281 [INFO] [Thread-181154] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:32:30.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:32:30.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:32:31.095 [DEBUG] [Thread-181154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:32:31.096 [DEBUG] [Thread-181154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:32:31.144 [DEBUG] [Thread-181154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:32:31.145 [DEBUG] [Thread-181154] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:32:31.153 [DEBUG] [Thread-181154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:32:31.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:32:31.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-04-12T02:32:31.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-04-12T02:32:31.176 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:32:31.178 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:32:31.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:32:31.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:32:31.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:32:31.191 [DEBUG] [Thread-181154] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:32:32.718 [DEBUG] [Thread-181156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:32:47.778 [DEBUG] [Thread-181157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:32:53.873 [DEBUG] [Thread-181158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:33:01.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:33:01.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:33:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 32, 49), -0.06551, 100.373, 0.0, 19.0901, 10.6352, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:33:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:32:49
2026-04-12T02:33:02.813 [DEBUG] [Thread-181159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:02.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:33:03.127 [DEBUG] [Thread-181160] [transport.py] [_log()] starting thread (client mode): 0xb0fe86a0
2026-04-12T02:33:03.127 [DEBUG] [Thread-181160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:33:03.146 [DEBUG] [Thread-181160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:33:03.146 [INFO] [Thread-181160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] client lang: <none>
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] server lang: <none>
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] kex follows: False
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] Compression: none
2026-04-12T02:33:03.150 [DEBUG] [Thread-181160] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:33:03.169 [DEBUG] [Thread-181160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:33:03.170 [DEBUG] [Thread-181160] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:33:03.170 [DEBUG] [Thread-181160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:33:03.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:33:03.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:33:03.172 [DEBUG] [Thread-181160] [transport.py] [_log()] userauth is OK
2026-04-12T02:33:03.173 [DEBUG] [Thread-181160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:33:03.173 [DEBUG] [Thread-181160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:33:03.173 [DEBUG] [Thread-181160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:33:03.173 [DEBUG] [Thread-181160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:33:03.198 [INFO] [Thread-181160] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:33:03.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:33:03.989 [DEBUG] [Thread-181160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:33:03.989 [DEBUG] [Thread-181160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:33:03.990 [DEBUG] [Thread-181160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:33:04.030 [DEBUG] [Thread-181160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:33:04.030 [DEBUG] [Thread-181160] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:33:04.034 [DEBUG] [Thread-181160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:33:04.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:33:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:33:04.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:33:04.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:33:04.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:33:04.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:33:04.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:33:04.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.022677 -999.00  +10.00  20.94     98   +9.70 1 3 1 3 1     0    0 0.25 -0.54 ----- 17.5 20.9 273.0 22.2 11.4 -1.4 11.2 -1.3 10.8 -1.6 11.2 -0.5
2026-04-12T02:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:33:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.022677
2026-04-12T02:33:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:33:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:33:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:33:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:33:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:33:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:32:49', tmtdew=-0.06551, humidity=100.373, cloud=0.0, wind=19.0901, temperature=10.6352, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:32:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:33:04.059 [DEBUG] [Thread-181160] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:33:04.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:33:04.153 [DEBUG] [Thread-181163] [transport.py] [_log()] starting thread (client mode): 0xae5b4460
2026-04-12T02:33:04.153 [DEBUG] [Thread-181163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:33:04.168 [DEBUG] [Thread-181163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:33:04.168 [INFO] [Thread-181163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] client lang: <none>
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] server lang: <none>
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] kex follows: False
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:33:04.176 [DEBUG] [Thread-181163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:33:04.177 [DEBUG] [Thread-181163] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:33:04.177 [DEBUG] [Thread-181163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:33:04.177 [DEBUG] [Thread-181163] [transport.py] [_log()] Compression: none
2026-04-12T02:33:04.177 [DEBUG] [Thread-181163] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:33:04.237 [DEBUG] [Thread-181163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:33:04.238 [DEBUG] [Thread-181163] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:33:04.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:33:04.239 [DEBUG] [Thread-181163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:33:04.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:33:04.297 [DEBUG] [Thread-181163] [transport.py] [_log()] userauth is OK
2026-04-12T02:33:04.297 [DEBUG] [Thread-181163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:33:04.297 [DEBUG] [Thread-181163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:33:04.298 [DEBUG] [Thread-181163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:33:04.298 [DEBUG] [Thread-181163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:33:04.316 [INFO] [Thread-181163] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:33:04.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:33:04.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:33:05.136 [DEBUG] [Thread-181163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:33:05.136 [DEBUG] [Thread-181163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:33:05.184 [DEBUG] [Thread-181163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:33:05.184 [DEBUG] [Thread-181163] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:33:05.193 [DEBUG] [Thread-181163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:33:05.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:33:05.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-04-12T02:33:05.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:33:05.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:33:05.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:33:05.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:33:05.231 [DEBUG] [Thread-181163] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:33:17.848 [DEBUG] [Thread-181165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:31.382 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:31.384 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:32.905 [DEBUG] [Thread-181166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:35.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:33:35.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:33:35.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-04-12T02:33:36.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 33, 25), 0.01727, 100.187, 0.0, 20.2745, 10.151, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:33:36.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:33:25
2026-04-12T02:33:36.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:33:37.091 [DEBUG] [Thread-181167] [transport.py] [_log()] starting thread (client mode): 0xb0f42e00
2026-04-12T02:33:37.091 [DEBUG] [Thread-181167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:33:37.112 [DEBUG] [Thread-181167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:33:37.112 [INFO] [Thread-181167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:33:37.115 [DEBUG] [Thread-181167] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:33:37.115 [DEBUG] [Thread-181167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:33:37.115 [DEBUG] [Thread-181167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:33:37.115 [DEBUG] [Thread-181167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:37.115 [DEBUG] [Thread-181167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:37.115 [DEBUG] [Thread-181167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] client lang: <none>
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] server lang: <none>
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] kex follows: False
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:33:37.116 [DEBUG] [Thread-181167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:33:37.117 [DEBUG] [Thread-181167] [transport.py] [_log()] Compression: none
2026-04-12T02:33:37.117 [DEBUG] [Thread-181167] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:33:37.135 [DEBUG] [Thread-181167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:33:37.135 [DEBUG] [Thread-181167] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:33:37.136 [DEBUG] [Thread-181167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:33:37.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:33:37.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:33:37.138 [DEBUG] [Thread-181167] [transport.py] [_log()] userauth is OK
2026-04-12T02:33:37.138 [DEBUG] [Thread-181167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:33:37.138 [DEBUG] [Thread-181167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:33:37.139 [DEBUG] [Thread-181167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:33:37.139 [DEBUG] [Thread-181167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:33:37.164 [INFO] [Thread-181167] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:33:37.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:33:37.977 [DEBUG] [Thread-181167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:33:37.977 [DEBUG] [Thread-181167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:33:37.977 [DEBUG] [Thread-181167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:33:38.018 [DEBUG] [Thread-181167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:33:38.019 [DEBUG] [Thread-181167] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:33:38.021 [DEBUG] [Thread-181167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:33:38.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:33:38.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:33:38.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:33:38.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:33:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:33:38.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:33:38.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:33:38.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:33:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:33:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.023025 -999.00  +10.00  16.08     98   +9.70 1 3 1 3 1     0    0 0.27 -0.26 ----- 18.6 16.1 279.4 21.8 11.4 -1.2 11.2 -1.3 10.8 -1.4 11.2 -0.5
2026-04-12T02:33:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:33:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:33:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.023025
2026-04-12T02:33:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:33:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:33:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:33:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:33:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:33:38.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:33:25', tmtdew=0.01727, humidity=100.187, cloud=0.0, wind=20.2745, temperature=10.151, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:33:09.360', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:33:38.045 [DEBUG] [Thread-181167] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:33:38.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:33:38.146 [DEBUG] [Thread-181170] [transport.py] [_log()] starting thread (client mode): 0xb0f6e3b0
2026-04-12T02:33:38.146 [DEBUG] [Thread-181170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:33:38.161 [DEBUG] [Thread-181170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:33:38.161 [INFO] [Thread-181170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:33:38.169 [DEBUG] [Thread-181170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] client lang: <none>
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] server lang: <none>
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] kex follows: False
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:33:38.170 [DEBUG] [Thread-181170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:33:38.171 [DEBUG] [Thread-181170] [transport.py] [_log()] Compression: none
2026-04-12T02:33:38.171 [DEBUG] [Thread-181170] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:33:38.230 [DEBUG] [Thread-181170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:33:38.230 [DEBUG] [Thread-181170] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:33:38.231 [DEBUG] [Thread-181170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:33:38.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:33:38.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:33:38.289 [DEBUG] [Thread-181170] [transport.py] [_log()] userauth is OK
2026-04-12T02:33:38.289 [DEBUG] [Thread-181170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:33:38.289 [DEBUG] [Thread-181170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:33:38.290 [DEBUG] [Thread-181170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:33:38.290 [DEBUG] [Thread-181170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:33:38.308 [INFO] [Thread-181170] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:33:38.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:33:38.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:33:39.126 [DEBUG] [Thread-181170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:33:39.126 [DEBUG] [Thread-181170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:33:39.175 [DEBUG] [Thread-181170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:33:39.176 [DEBUG] [Thread-181170] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:33:39.185 [DEBUG] [Thread-181170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:33:39.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:33:39.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:33:39.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-04-12T02:33:39.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:33:39.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:33:39.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:33:39.232 [DEBUG] [Thread-181170] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:33:47.940 [DEBUG] [Thread-181172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:33:53.939 [DEBUG] [Thread-181173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:02.985 [DEBUG] [Thread-181174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:34:09.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:34:09.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-04-12T02:34:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 34), 0.014735, 100.203, 0.0, 15.7925, 10.1842, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:34:10.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:34:00
2026-04-12T02:34:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:34:11.063 [DEBUG] [Thread-181175] [transport.py] [_log()] starting thread (client mode): 0xae5359f0
2026-04-12T02:34:11.063 [DEBUG] [Thread-181175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:34:11.076 [DEBUG] [Thread-181175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:34:11.076 [INFO] [Thread-181175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] client lang: <none>
2026-04-12T02:34:11.079 [DEBUG] [Thread-181175] [transport.py] [_log()] server lang: <none>
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] kex follows: False
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] Compression: none
2026-04-12T02:34:11.080 [DEBUG] [Thread-181175] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:34:11.095 [DEBUG] [Thread-181175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:34:11.095 [DEBUG] [Thread-181175] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:34:11.096 [DEBUG] [Thread-181175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:34:11.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:34:11.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:34:11.097 [DEBUG] [Thread-181175] [transport.py] [_log()] userauth is OK
2026-04-12T02:34:11.097 [DEBUG] [Thread-181175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:34:11.097 [DEBUG] [Thread-181175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:34:11.097 [DEBUG] [Thread-181175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:34:11.097 [DEBUG] [Thread-181175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:34:11.116 [INFO] [Thread-181175] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:34:11.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:34:11.908 [DEBUG] [Thread-181175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:34:11.908 [DEBUG] [Thread-181175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:34:11.909 [DEBUG] [Thread-181175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:34:11.949 [DEBUG] [Thread-181175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:34:11.949 [DEBUG] [Thread-181175] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:34:11.953 [DEBUG] [Thread-181175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:34:11.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:34:11.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:34:11.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:34:11.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:34:11.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:34:11.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:34:11.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:34:11.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:34:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:34:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.023372 -999.00  +10.00  20.84     98   +9.70 1 3 1 3 1     0    0 0.27 -0.00 ----- 21.8 20.8 275.4 23.3 11.4 -1.2 11.2 -1.3 10.8 -1.4 11.2 -0.7
2026-04-12T02:34:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:34:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:34:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.023372
2026-04-12T02:34:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:34:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:34:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:34:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:34:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:34:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:34:00', tmtdew=0.014735, humidity=100.203, cloud=0.0, wind=15.7925, temperature=10.1842, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:33:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:34:11.979 [DEBUG] [Thread-181175] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:34:12.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:34:12.071 [DEBUG] [Thread-181178] [transport.py] [_log()] starting thread (client mode): 0xb0fe90c0
2026-04-12T02:34:12.071 [DEBUG] [Thread-181178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:34:12.085 [DEBUG] [Thread-181178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:34:12.086 [INFO] [Thread-181178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:34:12.093 [DEBUG] [Thread-181178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] client lang: <none>
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] server lang: <none>
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] kex follows: False
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] Compression: none
2026-04-12T02:34:12.094 [DEBUG] [Thread-181178] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:34:12.153 [DEBUG] [Thread-181178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:34:12.154 [DEBUG] [Thread-181178] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:34:12.154 [DEBUG] [Thread-181178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:34:12.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:34:12.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:34:12.212 [DEBUG] [Thread-181178] [transport.py] [_log()] userauth is OK
2026-04-12T02:34:12.212 [DEBUG] [Thread-181178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:34:12.212 [DEBUG] [Thread-181178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:34:12.212 [DEBUG] [Thread-181178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:34:12.212 [DEBUG] [Thread-181178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:34:12.231 [INFO] [Thread-181178] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:34:12.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:34:12.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:34:13.046 [DEBUG] [Thread-181178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:34:13.046 [DEBUG] [Thread-181178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:34:13.097 [DEBUG] [Thread-181178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:34:13.097 [DEBUG] [Thread-181178] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:34:13.109 [DEBUG] [Thread-181178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:34:13.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:34:13.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-04-12T02:34:13.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-04-12T02:34:13.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:34:13.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:34:13.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:34:13.158 [DEBUG] [Thread-181178] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:34:18.022 [DEBUG] [Thread-181180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:31.588 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:31.590 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:33.074 [DEBUG] [Thread-181181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:43.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:34:43.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:34:43.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-04-12T02:34:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 34, 36), -0.06547, 100.373, 0.0, 18.8078, 10.602, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:34:44.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:34:36
2026-04-12T02:34:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:34:44.985 [DEBUG] [Thread-181182] [transport.py] [_log()] starting thread (client mode): 0xb0feb580
2026-04-12T02:34:44.986 [DEBUG] [Thread-181182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:34:45.005 [DEBUG] [Thread-181182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:34:45.005 [INFO] [Thread-181182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] client lang: <none>
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] server lang: <none>
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] kex follows: False
2026-04-12T02:34:45.008 [DEBUG] [Thread-181182] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:34:45.009 [DEBUG] [Thread-181182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:34:45.009 [DEBUG] [Thread-181182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:34:45.009 [DEBUG] [Thread-181182] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:34:45.009 [DEBUG] [Thread-181182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:34:45.009 [DEBUG] [Thread-181182] [transport.py] [_log()] Compression: none
2026-04-12T02:34:45.009 [DEBUG] [Thread-181182] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:34:45.027 [DEBUG] [Thread-181182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:34:45.028 [DEBUG] [Thread-181182] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:34:45.028 [DEBUG] [Thread-181182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:34:45.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:34:45.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:34:45.030 [DEBUG] [Thread-181182] [transport.py] [_log()] userauth is OK
2026-04-12T02:34:45.030 [DEBUG] [Thread-181182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:34:45.030 [DEBUG] [Thread-181182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:34:45.031 [DEBUG] [Thread-181182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:34:45.031 [DEBUG] [Thread-181182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:34:45.067 [INFO] [Thread-181182] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:34:45.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:34:45.799 [DEBUG] [Thread-181182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:34:45.800 [DEBUG] [Thread-181182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:34:45.800 [DEBUG] [Thread-181182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:34:45.841 [DEBUG] [Thread-181182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:34:45.841 [DEBUG] [Thread-181182] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:34:45.843 [DEBUG] [Thread-181182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:34:45.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:34:45.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:34:45.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:34:45.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:34:45.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:34:45.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:34:45.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:34:45.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:34:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:34:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.023719 -999.00  +10.00  18.37     98   +9.70 1 3 1 3 1     0    0 0.28 0.23 ----- 20.0 18.4 267.8 24.5 11.4 -1.2 11.2 -1.1 10.8 -1.5 11.2 -0.7
2026-04-12T02:34:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:34:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:34:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.023719
2026-04-12T02:34:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:34:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:34:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:34:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:34:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:34:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:34:36', tmtdew=-0.06547, humidity=100.373, cloud=0.0, wind=18.8078, temperature=10.602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:34:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:34:45.868 [DEBUG] [Thread-181182] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:34:45.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:34:45.960 [DEBUG] [Thread-181185] [transport.py] [_log()] starting thread (client mode): 0xae52f7f0
2026-04-12T02:34:45.961 [DEBUG] [Thread-181185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:34:45.975 [DEBUG] [Thread-181185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:34:45.975 [INFO] [Thread-181185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:34:45.984 [DEBUG] [Thread-181185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] client lang: <none>
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] server lang: <none>
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] kex follows: False
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] Compression: none
2026-04-12T02:34:45.985 [DEBUG] [Thread-181185] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:34:46.044 [DEBUG] [Thread-181185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:34:46.045 [DEBUG] [Thread-181185] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:34:46.045 [DEBUG] [Thread-181185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:34:46.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:34:46.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:34:46.105 [DEBUG] [Thread-181185] [transport.py] [_log()] userauth is OK
2026-04-12T02:34:46.105 [DEBUG] [Thread-181185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:34:46.105 [DEBUG] [Thread-181185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:34:46.105 [DEBUG] [Thread-181185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:34:46.105 [DEBUG] [Thread-181185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:34:46.124 [INFO] [Thread-181185] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:34:46.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:34:46.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:34:46.973 [DEBUG] [Thread-181185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:34:46.973 [DEBUG] [Thread-181185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:34:47.021 [DEBUG] [Thread-181185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:34:47.021 [DEBUG] [Thread-181185] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:34:47.031 [DEBUG] [Thread-181185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:34:47.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:34:47.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-04-12T02:34:47.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-04-12T02:34:47.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:34:47.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:34:47.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:34:47.071 [DEBUG] [Thread-181185] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:34:48.109 [DEBUG] [Thread-181187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:34:54.009 [DEBUG] [Thread-181188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:03.171 [DEBUG] [Thread-181189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:35:17.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:35:17.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:35:18.210 [DEBUG] [Thread-181190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 34, 36), -0.06547, 100.373, 0.0, 18.8078, 10.602, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:35:18.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:34:36
2026-04-12T02:35:18.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:35:19.015 [DEBUG] [Thread-181191] [transport.py] [_log()] starting thread (client mode): 0xae52ff70
2026-04-12T02:35:19.015 [DEBUG] [Thread-181191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:35:19.035 [DEBUG] [Thread-181191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:35:19.035 [INFO] [Thread-181191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:35:19.038 [DEBUG] [Thread-181191] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:35:19.038 [DEBUG] [Thread-181191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:35:19.038 [DEBUG] [Thread-181191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:35:19.038 [DEBUG] [Thread-181191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:19.038 [DEBUG] [Thread-181191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:19.038 [DEBUG] [Thread-181191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] client lang: <none>
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] server lang: <none>
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] kex follows: False
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] Compression: none
2026-04-12T02:35:19.039 [DEBUG] [Thread-181191] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:35:19.056 [DEBUG] [Thread-181191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:35:19.057 [DEBUG] [Thread-181191] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:35:19.057 [DEBUG] [Thread-181191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:35:19.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:35:19.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:35:19.059 [DEBUG] [Thread-181191] [transport.py] [_log()] userauth is OK
2026-04-12T02:35:19.059 [DEBUG] [Thread-181191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:35:19.059 [DEBUG] [Thread-181191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:35:19.059 [DEBUG] [Thread-181191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:35:19.059 [DEBUG] [Thread-181191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:35:19.083 [INFO] [Thread-181191] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:35:19.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:35:20.217 [DEBUG] [Thread-181191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:35:20.217 [DEBUG] [Thread-181191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:35:20.217 [DEBUG] [Thread-181191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:35:20.259 [DEBUG] [Thread-181191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:35:20.259 [DEBUG] [Thread-181191] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:35:20.260 [DEBUG] [Thread-181191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:35:20.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:35:20.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:35:20.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:35:20.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:35:20.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:35:20.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:35:20.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:35:20.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:35:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:35:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.024066 -999.00  +10.00  14.19     98   +9.80 1 3 1 3 1     0    0 0.29 0.31 ----- 12.3 14.2 275.0 21.4 11.3 -1.0 11.2 -1.0 10.8 -0.8 11.2 -0.3
2026-04-12T02:35:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:35:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:35:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.024066
2026-04-12T02:35:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:35:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:35:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:35:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:35:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:35:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:34:36', tmtdew=-0.06547, humidity=100.373, cloud=0.0, wind=18.8078, temperature=10.602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:34:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:35:20.281 [DEBUG] [Thread-181191] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:35:20.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:35:20.373 [DEBUG] [Thread-181194] [transport.py] [_log()] starting thread (client mode): 0xb0f6d660
2026-04-12T02:35:20.373 [DEBUG] [Thread-181194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:35:20.388 [DEBUG] [Thread-181194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:35:20.388 [INFO] [Thread-181194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] client lang: <none>
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] server lang: <none>
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] kex follows: False
2026-04-12T02:35:20.396 [DEBUG] [Thread-181194] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:35:20.397 [DEBUG] [Thread-181194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:35:20.397 [DEBUG] [Thread-181194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:35:20.397 [DEBUG] [Thread-181194] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:35:20.397 [DEBUG] [Thread-181194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:35:20.397 [DEBUG] [Thread-181194] [transport.py] [_log()] Compression: none
2026-04-12T02:35:20.397 [DEBUG] [Thread-181194] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:35:20.455 [DEBUG] [Thread-181194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:35:20.456 [DEBUG] [Thread-181194] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:35:20.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:35:20.457 [DEBUG] [Thread-181194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:35:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:35:20.512 [DEBUG] [Thread-181194] [transport.py] [_log()] userauth is OK
2026-04-12T02:35:20.512 [DEBUG] [Thread-181194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:35:20.512 [DEBUG] [Thread-181194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:35:20.512 [DEBUG] [Thread-181194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:35:20.512 [DEBUG] [Thread-181194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:35:20.531 [INFO] [Thread-181194] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:35:20.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:35:20.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:35:21.323 [DEBUG] [Thread-181194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:35:21.323 [DEBUG] [Thread-181194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:35:21.371 [DEBUG] [Thread-181194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:35:21.371 [DEBUG] [Thread-181194] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:35:21.380 [DEBUG] [Thread-181194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:35:21.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:35:21.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-04-12T02:35:21.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-04-12T02:35:21.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:35:21.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:35:21.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:35:21.416 [DEBUG] [Thread-181194] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:35:31.800 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:31.802 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:33.248 [DEBUG] [Thread-181196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:48.309 [DEBUG] [Thread-181197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:51.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:35:51.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:35:51.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-04-12T02:35:52.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 35, 11), 0.017265, 100.187, 0.0, 18.4208, 10.151, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:35:52.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:35:11
2026-04-12T02:35:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:35:53.328 [DEBUG] [Thread-181198] [transport.py] [_log()] starting thread (client mode): 0xb0f6d8d0
2026-04-12T02:35:53.328 [DEBUG] [Thread-181198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:35:53.349 [DEBUG] [Thread-181198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:35:53.349 [INFO] [Thread-181198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] client lang: <none>
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] server lang: <none>
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] kex follows: False
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:35:53.351 [DEBUG] [Thread-181198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:35:53.352 [DEBUG] [Thread-181198] [transport.py] [_log()] Compression: none
2026-04-12T02:35:53.352 [DEBUG] [Thread-181198] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:35:53.369 [DEBUG] [Thread-181198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:35:53.370 [DEBUG] [Thread-181198] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:35:53.370 [DEBUG] [Thread-181198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:35:53.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:35:53.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:35:53.372 [DEBUG] [Thread-181198] [transport.py] [_log()] userauth is OK
2026-04-12T02:35:53.373 [DEBUG] [Thread-181198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:35:53.373 [DEBUG] [Thread-181198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:35:53.373 [DEBUG] [Thread-181198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:35:53.373 [DEBUG] [Thread-181198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:35:53.396 [INFO] [Thread-181198] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:35:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:35:54.067 [DEBUG] [Thread-181200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:35:54.182 [DEBUG] [Thread-181198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:35:54.182 [DEBUG] [Thread-181198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:35:54.183 [DEBUG] [Thread-181198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:35:54.223 [DEBUG] [Thread-181198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:35:54.223 [DEBUG] [Thread-181198] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:35:54.227 [DEBUG] [Thread-181198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:35:54.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:35:54.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:35:54.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:35:54.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:35:54.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:35:54.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:35:54.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:35:54.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:35:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:35:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.024413 -999.00  +10.10  14.80     98   +9.80 1 3 1 3 1     0    0 0.29 0.56 ----- 19.0 14.8 293.6 20.9 11.4 -1.3 11.2 -1.3 10.8 -1.8 11.2 -0.5
2026-04-12T02:35:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:35:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:35:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.024413
2026-04-12T02:35:54.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:35:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:35:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:35:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:35:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:35:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:35:11', tmtdew=0.017265, humidity=100.187, cloud=0.0, wind=18.4208, temperature=10.151, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:35:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:35:54.258 [DEBUG] [Thread-181198] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:35:54.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:35:54.351 [DEBUG] [Thread-181202] [transport.py] [_log()] starting thread (client mode): 0xb0f6eaa0
2026-04-12T02:35:54.351 [DEBUG] [Thread-181202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:35:54.365 [DEBUG] [Thread-181202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:35:54.365 [INFO] [Thread-181202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:35:54.372 [DEBUG] [Thread-181202] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] client lang: <none>
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] server lang: <none>
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] kex follows: False
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] Compression: none
2026-04-12T02:35:54.373 [DEBUG] [Thread-181202] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:35:54.431 [DEBUG] [Thread-181202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:35:54.431 [DEBUG] [Thread-181202] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:35:54.432 [DEBUG] [Thread-181202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:35:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:35:54.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:35:54.487 [DEBUG] [Thread-181202] [transport.py] [_log()] userauth is OK
2026-04-12T02:35:54.488 [DEBUG] [Thread-181202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:35:54.488 [DEBUG] [Thread-181202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:35:54.488 [DEBUG] [Thread-181202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:35:54.488 [DEBUG] [Thread-181202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:35:54.506 [INFO] [Thread-181202] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:35:54.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:35:54.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:35:55.333 [DEBUG] [Thread-181202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:35:55.333 [DEBUG] [Thread-181202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:35:55.380 [DEBUG] [Thread-181202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:35:55.380 [DEBUG] [Thread-181202] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:35:55.388 [DEBUG] [Thread-181202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:35:55.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:35: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')
2026-04-12T02:35:55.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:35:55.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:35:55.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:35:55.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:35:55.421 [DEBUG] [Thread-181202] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:36:03.344 [DEBUG] [Thread-181204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:18.395 [DEBUG] [Thread-181205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:25.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:36:25.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:36:25.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:36:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 35, 47), -0.06556, 100.373, 0.0, 18.3845, 10.6683, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:36:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:35:47
2026-04-12T02:36:27.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:36:27.489 [DEBUG] [Thread-181206] [transport.py] [_log()] starting thread (client mode): 0xae560040
2026-04-12T02:36:27.489 [DEBUG] [Thread-181206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:36:27.509 [DEBUG] [Thread-181206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:36:27.510 [INFO] [Thread-181206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] client lang: <none>
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] server lang: <none>
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] kex follows: False
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] Compression: none
2026-04-12T02:36:27.513 [DEBUG] [Thread-181206] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:36:27.531 [DEBUG] [Thread-181206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:36:27.531 [DEBUG] [Thread-181206] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:36:27.532 [DEBUG] [Thread-181206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:36:27.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:36:27.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:36:27.534 [DEBUG] [Thread-181206] [transport.py] [_log()] userauth is OK
2026-04-12T02:36:27.534 [DEBUG] [Thread-181206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:36:27.534 [DEBUG] [Thread-181206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:36:27.534 [DEBUG] [Thread-181206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:36:27.534 [DEBUG] [Thread-181206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:36:27.559 [INFO] [Thread-181206] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:36:27.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:36:28.348 [DEBUG] [Thread-181206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:36:28.349 [DEBUG] [Thread-181206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:36:28.349 [DEBUG] [Thread-181206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:36:28.390 [DEBUG] [Thread-181206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:36:28.390 [DEBUG] [Thread-181206] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:36:28.394 [DEBUG] [Thread-181206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:36:28.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:36:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:36:28.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:36:28.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:36:28.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:36:28.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:36:28.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:36:28.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:36:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:36:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.024761 -999.00  +10.10  16.06     98   +9.80 1 3 1 3 1     0    0 0.29 0.66 ----- 15.4 16.1 287.2 22.0 11.4 -0.9 11.2 -1.3 10.8 -1.4 11.2 -0.4
2026-04-12T02:36:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:36:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:36:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.024761
2026-04-12T02:36:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:36:28.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:36:28.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:36:28.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:36:28.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:36:28.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:35:47', tmtdew=-0.06556, humidity=100.373, cloud=0.0, wind=18.3845, temperature=10.6683, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:35:39.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:36:28.420 [DEBUG] [Thread-181206] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:36:28.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:36:28.513 [DEBUG] [Thread-181209] [transport.py] [_log()] starting thread (client mode): 0xb0f6f760
2026-04-12T02:36:28.513 [DEBUG] [Thread-181209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:36:28.527 [DEBUG] [Thread-181209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:36:28.527 [INFO] [Thread-181209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] client lang: <none>
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] server lang: <none>
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] kex follows: False
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:36:28.536 [DEBUG] [Thread-181209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:36:28.537 [DEBUG] [Thread-181209] [transport.py] [_log()] Compression: none
2026-04-12T02:36:28.537 [DEBUG] [Thread-181209] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:36:28.597 [DEBUG] [Thread-181209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:36:28.598 [DEBUG] [Thread-181209] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:36:28.598 [DEBUG] [Thread-181209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:36:28.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:36:28.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:36:28.656 [DEBUG] [Thread-181209] [transport.py] [_log()] userauth is OK
2026-04-12T02:36:28.656 [DEBUG] [Thread-181209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:36:28.657 [DEBUG] [Thread-181209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:36:28.657 [DEBUG] [Thread-181209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:36:28.657 [DEBUG] [Thread-181209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:36:28.676 [INFO] [Thread-181209] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:36:28.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:36:28.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:36:29.485 [DEBUG] [Thread-181209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:36:29.485 [DEBUG] [Thread-181209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:36:29.533 [DEBUG] [Thread-181209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:36:29.534 [DEBUG] [Thread-181209] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:36:29.544 [DEBUG] [Thread-181209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:36:29.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:36:29.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:36:29.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:36:29.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:36:29.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:36:29.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:36:29.582 [DEBUG] [Thread-181209] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:36:32.003 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:32.004 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:33.435 [DEBUG] [Thread-181211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:48.484 [DEBUG] [Thread-181212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:54.135 [DEBUG] [Thread-181213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:36:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:36:59.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:36:59.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-04-12T02:37:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 36, 22), 0.014735, 100.203, 0.0, 17.5918, 10.1842, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:37:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:36:22
2026-04-12T02:37:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:37:01.627 [DEBUG] [Thread-181214] [transport.py] [_log()] starting thread (client mode): 0xb0f6e050
2026-04-12T02:37:01.627 [DEBUG] [Thread-181214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:37:01.647 [DEBUG] [Thread-181214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:37:01.647 [INFO] [Thread-181214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] client lang: <none>
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] server lang: <none>
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] kex follows: False
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] Compression: none
2026-04-12T02:37:01.651 [DEBUG] [Thread-181214] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:37:01.668 [DEBUG] [Thread-181214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:37:01.668 [DEBUG] [Thread-181214] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:37:01.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:37:01.668 [DEBUG] [Thread-181214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:37:01.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:37:01.670 [DEBUG] [Thread-181214] [transport.py] [_log()] userauth is OK
2026-04-12T02:37:01.670 [DEBUG] [Thread-181214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:37:01.670 [DEBUG] [Thread-181214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:37:01.670 [DEBUG] [Thread-181214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:37:01.670 [DEBUG] [Thread-181214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:37:01.680 [INFO] [Thread-181214] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:37:01.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:37:02.472 [DEBUG] [Thread-181214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:37:02.473 [DEBUG] [Thread-181214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:37:02.473 [DEBUG] [Thread-181214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:37:02.513 [DEBUG] [Thread-181214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:37:02.513 [DEBUG] [Thread-181214] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:37:02.517 [DEBUG] [Thread-181214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:37:02.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:37:02.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:37:02.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:37:02.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:37:02.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:37:02.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:37:02.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:37:02.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:37:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:37:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.025108 -999.00  +10.10  20.31     98   +9.80 1 3 1 3 1     0    0 0.30 0.71 ----- 13.4 20.3 279.8 23.4 11.4 -1.6 11.2 -1.6 10.8 -1.5 11.2 -0.7
2026-04-12T02:37:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:37:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:37:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.025108
2026-04-12T02:37:02.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:37:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:37:02.542 [DEBUG] [Thread-181214] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:37:02.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:37:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:37:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:37:02.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:36:22', tmtdew=0.014735, humidity=100.203, cloud=0.0, wind=17.5918, temperature=10.1842, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:36:09.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:37:02.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:37:02.640 [DEBUG] [Thread-181217] [transport.py] [_log()] starting thread (client mode): 0xae52f250
2026-04-12T02:37:02.640 [DEBUG] [Thread-181217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:37:02.658 [DEBUG] [Thread-181217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:37:02.659 [INFO] [Thread-181217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:37:02.669 [DEBUG] [Thread-181217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] client lang: <none>
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] server lang: <none>
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] kex follows: False
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] Compression: none
2026-04-12T02:37:02.670 [DEBUG] [Thread-181217] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:37:02.733 [DEBUG] [Thread-181217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:37:02.733 [DEBUG] [Thread-181217] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:37:02.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:37:02.735 [DEBUG] [Thread-181217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:37:02.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:37:02.796 [DEBUG] [Thread-181217] [transport.py] [_log()] userauth is OK
2026-04-12T02:37:02.796 [DEBUG] [Thread-181217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:37:02.797 [DEBUG] [Thread-181217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:37:02.797 [DEBUG] [Thread-181217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:37:02.797 [DEBUG] [Thread-181217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:37:02.823 [INFO] [Thread-181217] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:37:02.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:37:02.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:37:03.521 [DEBUG] [Thread-181219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:37:03.687 [DEBUG] [Thread-181217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:37:03.687 [DEBUG] [Thread-181217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:37:03.736 [DEBUG] [Thread-181217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:37:03.736 [DEBUG] [Thread-181217] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:37:03.745 [DEBUG] [Thread-181217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:37:03.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:37: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')
2026-04-12T02:37:03.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-04-12T02:37:03.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:37:03.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:37:03.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:37:03.784 [DEBUG] [Thread-181217] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:37:18.572 [DEBUG] [Thread-181220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:37:32.207 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:37:32.209 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:37:33.608 [DEBUG] [Thread-181221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:37:33.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:37:33.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:37:33.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-04-12T02:37:35.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 36, 58), 0.022275, 100.153, 0.0, 20.0444, 10.1178, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:37:35.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:36:58
2026-04-12T02:37:35.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:37:35.704 [DEBUG] [Thread-181222] [transport.py] [_log()] starting thread (client mode): 0xae5616c0
2026-04-12T02:37:35.704 [DEBUG] [Thread-181222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:37:35.724 [DEBUG] [Thread-181222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:37:35.724 [INFO] [Thread-181222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] client lang: <none>
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] server lang: <none>
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] kex follows: False
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:37:35.727 [DEBUG] [Thread-181222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:37:35.728 [DEBUG] [Thread-181222] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:37:35.728 [DEBUG] [Thread-181222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:37:35.728 [DEBUG] [Thread-181222] [transport.py] [_log()] Compression: none
2026-04-12T02:37:35.728 [DEBUG] [Thread-181222] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:37:35.744 [DEBUG] [Thread-181222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:37:35.745 [DEBUG] [Thread-181222] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:37:35.745 [DEBUG] [Thread-181222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:37:35.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:37:35.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:37:35.747 [DEBUG] [Thread-181222] [transport.py] [_log()] userauth is OK
2026-04-12T02:37:35.748 [DEBUG] [Thread-181222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:37:35.748 [DEBUG] [Thread-181222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:37:35.748 [DEBUG] [Thread-181222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:37:35.748 [DEBUG] [Thread-181222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:37:35.768 [INFO] [Thread-181222] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:37:35.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:37:36.554 [DEBUG] [Thread-181222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:37:36.554 [DEBUG] [Thread-181222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:37:36.555 [DEBUG] [Thread-181222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:37:36.595 [DEBUG] [Thread-181222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:37:36.595 [DEBUG] [Thread-181222] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:37:36.599 [DEBUG] [Thread-181222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:37:36.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:37:36.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:37:36.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:37:36.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:37:36.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:37:36.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:37:36.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:37:36.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:37:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:37:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.025455 -999.00  +10.10  15.63     98   +9.80 1 3 1 3 1     0    0 0.30 0.90 ----- 14.8 15.6 281.4 18.8 11.4 -1.1 11.3 -1.2 10.8 -1.1 11.2 -0.3
2026-04-12T02:37:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:37:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:37:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.025455
2026-04-12T02:37:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:37:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:37:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:37:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:37:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:37:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:36:58', tmtdew=0.022275, humidity=100.153, cloud=0.0, wind=20.0444, temperature=10.1178, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:36:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:37:36.627 [DEBUG] [Thread-181222] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:37: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-04-12T02:37:36.721 [DEBUG] [Thread-181225] [transport.py] [_log()] starting thread (client mode): 0xae5b7df0
2026-04-12T02:37:36.721 [DEBUG] [Thread-181225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:37:36.736 [DEBUG] [Thread-181225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:37:36.736 [INFO] [Thread-181225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:37:36.744 [DEBUG] [Thread-181225] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] client lang: <none>
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] server lang: <none>
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] kex follows: False
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:37:36.745 [DEBUG] [Thread-181225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:37:36.746 [DEBUG] [Thread-181225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:37:36.746 [DEBUG] [Thread-181225] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:37:36.746 [DEBUG] [Thread-181225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:37:36.746 [DEBUG] [Thread-181225] [transport.py] [_log()] Compression: none
2026-04-12T02:37:36.746 [DEBUG] [Thread-181225] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:37:36.803 [DEBUG] [Thread-181225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:37:36.803 [DEBUG] [Thread-181225] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:37:36.804 [DEBUG] [Thread-181225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:37:36.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:37:36.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:37:36.860 [DEBUG] [Thread-181225] [transport.py] [_log()] userauth is OK
2026-04-12T02:37:36.861 [DEBUG] [Thread-181225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:37:36.861 [DEBUG] [Thread-181225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:37:36.861 [DEBUG] [Thread-181225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:37:36.861 [DEBUG] [Thread-181225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:37:36.883 [INFO] [Thread-181225] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:37:36.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:37:36.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:37:37.712 [DEBUG] [Thread-181225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:37:37.712 [DEBUG] [Thread-181225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:37:37.762 [DEBUG] [Thread-181225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:37:37.762 [DEBUG] [Thread-181225] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:37:37.773 [DEBUG] [Thread-181225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:37:37.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:37:37.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-04-12T02:37:37.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-04-12T02:37:37.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:37:37.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:37:37.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:37:37.807 [DEBUG] [Thread-181225] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:37:48.643 [DEBUG] [Thread-181227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:37:54.202 [DEBUG] [Thread-181228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:03.696 [DEBUG] [Thread-181229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:38:07.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:38: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-04-12T02:38:09.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 37, 34), -0.06538, 100.373, 0.0, 22.1594, 10.5357, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:38:09.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:37:34
2026-04-12T02:38:09.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:38:09.647 [DEBUG] [Thread-181230] [transport.py] [_log()] starting thread (client mode): 0xae5b46d0
2026-04-12T02:38:09.647 [DEBUG] [Thread-181230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:38:09.668 [DEBUG] [Thread-181230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:38:09.668 [INFO] [Thread-181230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:38:09.671 [DEBUG] [Thread-181230] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] client lang: <none>
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] server lang: <none>
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] kex follows: False
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:38:09.672 [DEBUG] [Thread-181230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:38:09.673 [DEBUG] [Thread-181230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:38:09.673 [DEBUG] [Thread-181230] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:38:09.673 [DEBUG] [Thread-181230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:38:09.673 [DEBUG] [Thread-181230] [transport.py] [_log()] Compression: none
2026-04-12T02:38:09.673 [DEBUG] [Thread-181230] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:38:09.690 [DEBUG] [Thread-181230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:38:09.691 [DEBUG] [Thread-181230] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:38:09.692 [DEBUG] [Thread-181230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:38:09.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:38:09.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:38:09.695 [DEBUG] [Thread-181230] [transport.py] [_log()] userauth is OK
2026-04-12T02:38:09.695 [DEBUG] [Thread-181230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:38:09.695 [DEBUG] [Thread-181230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:38:09.695 [DEBUG] [Thread-181230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:38:09.695 [DEBUG] [Thread-181230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:38:09.718 [INFO] [Thread-181230] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:38:09.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:38:10.477 [DEBUG] [Thread-181230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:38:10.477 [DEBUG] [Thread-181230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:38:10.477 [DEBUG] [Thread-181230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:38:10.518 [DEBUG] [Thread-181230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:38:10.519 [DEBUG] [Thread-181230] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:38:10.522 [DEBUG] [Thread-181230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:38:10.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:38:10.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:38:10.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:38:10.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:38:10.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:38:10.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:38:10.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:38:10.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:38:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:38:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.026149 -999.00  +10.10  14.59     98   +9.80 1 3 1 3 1     0    0 0.32 1.48 ----- 14.2 14.6 290.8 21.1 11.4 -1.4 11.2 -1.3 10.9 -1.0 11.3 -0.5
2026-04-12T02:38:10.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:38:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:38:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.026149
2026-04-12T02:38:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:38:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:38:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:38:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:38:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:38:10.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:37:34', tmtdew=-0.06538, humidity=100.373, cloud=0.0, wind=22.1594, temperature=10.5357, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:37:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:38:10.563 [DEBUG] [Thread-181230] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:38: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-04-12T02:38:10.658 [DEBUG] [Thread-181233] [transport.py] [_log()] starting thread (client mode): 0xae5b6410
2026-04-12T02:38:10.658 [DEBUG] [Thread-181233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:38:10.675 [DEBUG] [Thread-181233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:38:10.675 [INFO] [Thread-181233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:38:10.688 [DEBUG] [Thread-181233] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:38:10.689 [DEBUG] [Thread-181233] [transport.py] [_log()] client lang: <none>
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] server lang: <none>
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] kex follows: False
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:38:10.690 [DEBUG] [Thread-181233] [transport.py] [_log()] Compression: none
2026-04-12T02:38:10.691 [DEBUG] [Thread-181233] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:38:10.747 [DEBUG] [Thread-181233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:38:10.747 [DEBUG] [Thread-181233] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:38:10.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:38:10.749 [DEBUG] [Thread-181233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:38:10.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:38:10.803 [DEBUG] [Thread-181233] [transport.py] [_log()] userauth is OK
2026-04-12T02:38:10.803 [DEBUG] [Thread-181233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:38:10.803 [DEBUG] [Thread-181233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:38:10.803 [DEBUG] [Thread-181233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:38:10.804 [DEBUG] [Thread-181233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:38:10.823 [INFO] [Thread-181233] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:38:10.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:38:10.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:38:11.645 [DEBUG] [Thread-181233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:38:11.646 [DEBUG] [Thread-181233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:38:11.693 [DEBUG] [Thread-181233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:38:11.693 [DEBUG] [Thread-181233] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:38:11.704 [DEBUG] [Thread-181233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:38:11.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:38:11.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-04-12T02:38:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:38:11.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:38:11.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:38:11.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:38:11.748 [DEBUG] [Thread-181233] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:38:18.730 [DEBUG] [Thread-181235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:32.411 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:32.412 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:33.792 [DEBUG] [Thread-181236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:41.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:38:41.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:38:41.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-04-12T02:38:42.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 38, 10), 0.01731, 100.187, 0.0, 19.6387, 10.1178, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:38:42.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:38:10
2026-04-12T02:38:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:38:43.563 [DEBUG] [Thread-181237] [transport.py] [_log()] starting thread (client mode): 0xb0fccfa0
2026-04-12T02:38:43.564 [DEBUG] [Thread-181237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:38:43.585 [DEBUG] [Thread-181237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:38:43.585 [INFO] [Thread-181237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:38:43.588 [DEBUG] [Thread-181237] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:38:43.589 [DEBUG] [Thread-181237] [transport.py] [_log()] client lang: <none>
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] server lang: <none>
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] kex follows: False
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] Compression: none
2026-04-12T02:38:43.590 [DEBUG] [Thread-181237] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:38:43.610 [DEBUG] [Thread-181237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:38:43.611 [DEBUG] [Thread-181237] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:38:43.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:38:43.612 [DEBUG] [Thread-181237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:38:43.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:38:43.616 [DEBUG] [Thread-181237] [transport.py] [_log()] userauth is OK
2026-04-12T02:38:43.617 [DEBUG] [Thread-181237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:38:43.617 [DEBUG] [Thread-181237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:38:43.617 [DEBUG] [Thread-181237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:38:43.617 [DEBUG] [Thread-181237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:38:43.655 [INFO] [Thread-181237] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:38:43.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:38:44.459 [DEBUG] [Thread-181237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:38:44.459 [DEBUG] [Thread-181237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:38:44.459 [DEBUG] [Thread-181237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:38:44.503 [DEBUG] [Thread-181237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:38:44.503 [DEBUG] [Thread-181237] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:38:44.508 [DEBUG] [Thread-181237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:38:44.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:38:44.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:38:44.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:38:44.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:38:44.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:38:44.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:38:44.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:38:44.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:38:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:38:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.026497 -999.00  +10.00  16.69     98   +9.80 1 3 1 3 1     0    0 0.32 1.56 ----- 20.5 16.7 287.4 23.3 11.4 -1.4 11.2 -1.3 10.8 -2.2 11.3 -0.8
2026-04-12T02:38:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:38:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:38:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.026497
2026-04-12T02:38:44.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:38:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:38:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:38:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:38:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:38:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:38:10', tmtdew=0.01731, humidity=100.187, cloud=0.0, wind=19.6387, temperature=10.1178, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:38:09.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:38:44.554 [DEBUG] [Thread-181237] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:38:44.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:38:44.646 [DEBUG] [Thread-181240] [transport.py] [_log()] starting thread (client mode): 0xae5b0340
2026-04-12T02:38:44.647 [DEBUG] [Thread-181240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:38:44.666 [DEBUG] [Thread-181240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:38:44.667 [INFO] [Thread-181240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:38:44.675 [DEBUG] [Thread-181240] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:38:44.676 [DEBUG] [Thread-181240] [transport.py] [_log()] client lang: <none>
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] server lang: <none>
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] kex follows: False
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:38:44.677 [DEBUG] [Thread-181240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:38:44.678 [DEBUG] [Thread-181240] [transport.py] [_log()] Compression: none
2026-04-12T02:38:44.678 [DEBUG] [Thread-181240] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:38:44.733 [DEBUG] [Thread-181240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:38:44.734 [DEBUG] [Thread-181240] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:38:44.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:38:44.735 [DEBUG] [Thread-181240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:38:44.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:38:44.793 [DEBUG] [Thread-181240] [transport.py] [_log()] userauth is OK
2026-04-12T02:38:44.793 [DEBUG] [Thread-181240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:38:44.794 [DEBUG] [Thread-181240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:38:44.794 [DEBUG] [Thread-181240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:38:44.794 [DEBUG] [Thread-181240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:38:44.814 [INFO] [Thread-181240] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:38:44.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:38:44.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:38:45.638 [DEBUG] [Thread-181240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:38:45.638 [DEBUG] [Thread-181240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:38:45.686 [DEBUG] [Thread-181240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:38:45.686 [DEBUG] [Thread-181240] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:38:45.696 [DEBUG] [Thread-181240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:38:45.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:38:45.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-04-12T02:38:45.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-04-12T02:38:45.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:38:45.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:38:45.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:38:45.734 [DEBUG] [Thread-181240] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:38:48.832 [DEBUG] [Thread-181242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:38:54.269 [DEBUG] [Thread-181243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:03.895 [DEBUG] [Thread-181244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:39:15.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:39:15.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-04-12T02:39:16.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 38, 45), -0.06547, 100.373, 0.0, 20.1132, 10.602, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:39:16.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:38:45
2026-04-12T02:39:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:39:17.546 [DEBUG] [Thread-181245] [transport.py] [_log()] starting thread (client mode): 0xae5b1180
2026-04-12T02:39:17.546 [DEBUG] [Thread-181245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:39:17.566 [DEBUG] [Thread-181245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:39:17.566 [INFO] [Thread-181245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:39:17.569 [DEBUG] [Thread-181245] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:39:17.569 [DEBUG] [Thread-181245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:39:17.569 [DEBUG] [Thread-181245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:39:17.569 [DEBUG] [Thread-181245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:17.569 [DEBUG] [Thread-181245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] client lang: <none>
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] server lang: <none>
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] kex follows: False
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:39:17.570 [DEBUG] [Thread-181245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:39:17.571 [DEBUG] [Thread-181245] [transport.py] [_log()] Compression: none
2026-04-12T02:39:17.571 [DEBUG] [Thread-181245] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:39:17.580 [DEBUG] [Thread-181245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:39:17.581 [DEBUG] [Thread-181245] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:39:17.582 [DEBUG] [Thread-181245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:39:17.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:39:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:39:17.584 [DEBUG] [Thread-181245] [transport.py] [_log()] userauth is OK
2026-04-12T02:39:17.585 [DEBUG] [Thread-181245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:39:17.585 [DEBUG] [Thread-181245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:39:17.585 [DEBUG] [Thread-181245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:39:17.585 [DEBUG] [Thread-181245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:39:17.622 [INFO] [Thread-181245] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:39:17.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:39:18.408 [DEBUG] [Thread-181245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:39:18.409 [DEBUG] [Thread-181245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:39:18.409 [DEBUG] [Thread-181245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:39:18.451 [DEBUG] [Thread-181245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:39:18.452 [DEBUG] [Thread-181245] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:39:18.456 [DEBUG] [Thread-181245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:39:18.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:39:18.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:39:18.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:39:18.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:39:18.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:39:18.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:39:18.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:39:18.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:39:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:39:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.026844 -999.00  +10.00  19.94     98   +9.70 1 3 1 3 1     0    0 0.31 1.38 ----- 18.9 19.9 274.0 23.3 11.4 -1.5 11.3 -1.4 10.8 -1.7 11.2 -0.6
2026-04-12T02:39:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:39:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:39:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.026844
2026-04-12T02:39:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:39:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:39:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:39:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:39:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:39:18.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:38:45', tmtdew=-0.06547, humidity=100.373, cloud=0.0, wind=20.1132, temperature=10.602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:38:39.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:39:18.484 [DEBUG] [Thread-181245] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:39:18.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:39:18.581 [DEBUG] [Thread-181248] [transport.py] [_log()] starting thread (client mode): 0xae5b3340
2026-04-12T02:39:18.581 [DEBUG] [Thread-181248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:39:18.601 [DEBUG] [Thread-181248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:39:18.601 [INFO] [Thread-181248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:39:18.609 [DEBUG] [Thread-181248] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:39:18.609 [DEBUG] [Thread-181248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:39:18.609 [DEBUG] [Thread-181248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] client lang: <none>
2026-04-12T02:39:18.610 [DEBUG] [Thread-181248] [transport.py] [_log()] server lang: <none>
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] kex follows: False
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:39:18.611 [DEBUG] [Thread-181248] [transport.py] [_log()] Compression: none
2026-04-12T02:39:18.612 [DEBUG] [Thread-181248] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:39:18.672 [DEBUG] [Thread-181248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:39:18.673 [DEBUG] [Thread-181248] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:39:18.674 [DEBUG] [Thread-181248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:39:18.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:39:18.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:39:18.729 [DEBUG] [Thread-181248] [transport.py] [_log()] userauth is OK
2026-04-12T02:39:18.729 [DEBUG] [Thread-181248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:39:18.729 [DEBUG] [Thread-181248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:39:18.729 [DEBUG] [Thread-181248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:39:18.729 [DEBUG] [Thread-181248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:39:18.748 [INFO] [Thread-181248] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:39:18.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:39:18.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:39:18.928 [DEBUG] [Thread-181250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:19.588 [DEBUG] [Thread-181248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:39:19.589 [DEBUG] [Thread-181248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:39:19.638 [DEBUG] [Thread-181248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:39:19.638 [DEBUG] [Thread-181248] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:39:19.648 [DEBUG] [Thread-181248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:39:19.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:39:19.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-04-12T02:39:19.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-04-12T02:39:19.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:39:19.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:39:19.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:39:19.693 [DEBUG] [Thread-181248] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:39:32.616 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:32.617 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:33.976 [DEBUG] [Thread-181251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:49.014 [DEBUG] [Thread-181252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:39:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:39:49.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:39:49.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-04-12T02:39:50.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 39, 21), -0.030165, 100.17, 0.0, 19.7446, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:39:50.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:39:21
2026-04-12T02:39:51.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:39:51.489 [DEBUG] [Thread-181253] [transport.py] [_log()] starting thread (client mode): 0xae5b0970
2026-04-12T02:39:51.489 [DEBUG] [Thread-181253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:39:51.503 [DEBUG] [Thread-181253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:39:51.503 [INFO] [Thread-181253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:39:51.505 [DEBUG] [Thread-181253] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:39:51.505 [DEBUG] [Thread-181253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:39:51.505 [DEBUG] [Thread-181253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:39:51.505 [DEBUG] [Thread-181253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:51.505 [DEBUG] [Thread-181253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:51.505 [DEBUG] [Thread-181253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] client lang: <none>
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] server lang: <none>
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] kex follows: False
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] Compression: none
2026-04-12T02:39:51.506 [DEBUG] [Thread-181253] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:39:51.521 [DEBUG] [Thread-181253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:39:51.522 [DEBUG] [Thread-181253] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:39:51.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:39:51.523 [DEBUG] [Thread-181253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:39:51.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:39:51.527 [DEBUG] [Thread-181253] [transport.py] [_log()] userauth is OK
2026-04-12T02:39:51.527 [DEBUG] [Thread-181253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:39:51.527 [DEBUG] [Thread-181253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:39:51.527 [DEBUG] [Thread-181253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:39:51.528 [DEBUG] [Thread-181253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:39:51.554 [INFO] [Thread-181253] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:39:51.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:39:52.266 [DEBUG] [Thread-181253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:39:52.266 [DEBUG] [Thread-181253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:39:52.267 [DEBUG] [Thread-181253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:39:52.309 [DEBUG] [Thread-181253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:39:52.309 [DEBUG] [Thread-181253] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:39:52.313 [DEBUG] [Thread-181253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:39:52.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:39:52.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:39:52.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:39:52.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:39:52.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:39:52.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:39:52.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:39:52.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:39:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:39:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.027191 -999.00  +10.00  17.80     98   +9.70 1 3 1 3 1     0    0 0.31 1.22 ----- 18.1 17.8 280.4 22.3 11.4 -1.2 11.2 -1.5 10.8 -1.0 11.2 -0.7
2026-04-12T02:39:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:39:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:39:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.027191
2026-04-12T02:39:52.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:39:52.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:39:52.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:39:52.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:39:52.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:39:52.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:39:21', tmtdew=-0.030165, humidity=100.17, cloud=0.0, wind=19.7446, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:39:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:39:52.332 [DEBUG] [Thread-181253] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:39:52.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:39:52.431 [DEBUG] [Thread-181256] [transport.py] [_log()] starting thread (client mode): 0xae5b3af0
2026-04-12T02:39:52.431 [DEBUG] [Thread-181256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:39:52.446 [DEBUG] [Thread-181256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:39:52.446 [INFO] [Thread-181256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:39:52.454 [DEBUG] [Thread-181256] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:39:52.454 [DEBUG] [Thread-181256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:39:52.454 [DEBUG] [Thread-181256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:39:52.454 [DEBUG] [Thread-181256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:52.454 [DEBUG] [Thread-181256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:39:52.454 [DEBUG] [Thread-181256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] client lang: <none>
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] server lang: <none>
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] kex follows: False
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] Compression: none
2026-04-12T02:39:52.455 [DEBUG] [Thread-181256] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:39:52.512 [DEBUG] [Thread-181256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:39:52.513 [DEBUG] [Thread-181256] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:39:52.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:39:52.514 [DEBUG] [Thread-181256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:39:52.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:39:52.569 [DEBUG] [Thread-181256] [transport.py] [_log()] userauth is OK
2026-04-12T02:39:52.569 [DEBUG] [Thread-181256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:39:52.570 [DEBUG] [Thread-181256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:39:52.570 [DEBUG] [Thread-181256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:39:52.570 [DEBUG] [Thread-181256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:39:52.589 [INFO] [Thread-181256] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:39:52.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:39:52.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:39:53.435 [DEBUG] [Thread-181256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:39:53.436 [DEBUG] [Thread-181256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:39:53.484 [DEBUG] [Thread-181256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:39:53.484 [DEBUG] [Thread-181256] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:39:53.493 [DEBUG] [Thread-181256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:39:53.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:39:53.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:39:53.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:39:53.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:39:53.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:39:53.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:39:53.530 [DEBUG] [Thread-181256] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:39:54.334 [DEBUG] [Thread-181258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:04.049 [DEBUG] [Thread-181259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:19.103 [DEBUG] [Thread-181260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:40:23.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:40:23.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-04-12T02:40:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 39, 57), 0.019855, 100.17, 0.0, 19.0742, 10.0181, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:40:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:39:57
2026-04-12T02:40:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:40:25.355 [DEBUG] [Thread-181261] [transport.py] [_log()] starting thread (client mode): 0xae5b1990
2026-04-12T02:40:25.355 [DEBUG] [Thread-181261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:40:25.375 [DEBUG] [Thread-181261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:40:25.375 [INFO] [Thread-181261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:40:25.379 [DEBUG] [Thread-181261] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:40:25.379 [DEBUG] [Thread-181261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:40:25.379 [DEBUG] [Thread-181261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:40:25.379 [DEBUG] [Thread-181261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:40:25.379 [DEBUG] [Thread-181261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:40:25.379 [DEBUG] [Thread-181261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] client lang: <none>
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] server lang: <none>
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] kex follows: False
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:40:25.380 [DEBUG] [Thread-181261] [transport.py] [_log()] Compression: none
2026-04-12T02:40:25.381 [DEBUG] [Thread-181261] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:40:25.399 [DEBUG] [Thread-181261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:40:25.400 [DEBUG] [Thread-181261] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:40:25.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:40:25.402 [DEBUG] [Thread-181261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:40:25.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:40:25.447 [DEBUG] [Thread-181261] [transport.py] [_log()] userauth is OK
2026-04-12T02:40:25.447 [DEBUG] [Thread-181261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:40:25.448 [DEBUG] [Thread-181261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:40:25.448 [DEBUG] [Thread-181261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:40:25.448 [DEBUG] [Thread-181261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:40:25.469 [INFO] [Thread-181261] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:40:25.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:40:26.550 [DEBUG] [Thread-181261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:40:26.550 [DEBUG] [Thread-181261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:40:26.551 [DEBUG] [Thread-181261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:40:26.591 [DEBUG] [Thread-181261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:40:26.591 [DEBUG] [Thread-181261] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:40:26.594 [DEBUG] [Thread-181261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:40:26.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:40:26.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:40:26.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:40:26.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:40:26.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:40:26.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:40:26.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:40:26.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:40:26.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:40:26.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.027538 -999.00  +10.00  20.09     98   +9.70 1 3 1 3 1     0    0 0.31 0.93 ----- 12.7 20.1 272.0 25.7 11.3 -1.2 11.2 -1.4 10.8 -1.1 11.2 -0.5
2026-04-12T02:40:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:40:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:40:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.027538
2026-04-12T02:40:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:40:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:40:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:40:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:40:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:40:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:39:57', tmtdew=0.019855, humidity=100.17, cloud=0.0, wind=19.0742, temperature=10.0181, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:39:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:40:26.625 [DEBUG] [Thread-181261] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:40:26.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:40:26.728 [DEBUG] [Thread-181264] [transport.py] [_log()] starting thread (client mode): 0xae560730
2026-04-12T02:40:26.729 [DEBUG] [Thread-181264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:40:26.742 [DEBUG] [Thread-181264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:40:26.742 [INFO] [Thread-181264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:40:26.750 [DEBUG] [Thread-181264] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:40:26.750 [DEBUG] [Thread-181264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:40:26.750 [DEBUG] [Thread-181264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:40:26.750 [DEBUG] [Thread-181264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:40:26.750 [DEBUG] [Thread-181264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] client lang: <none>
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] server lang: <none>
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] kex follows: False
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:40:26.751 [DEBUG] [Thread-181264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:40:26.752 [DEBUG] [Thread-181264] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:40:26.752 [DEBUG] [Thread-181264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:40:26.752 [DEBUG] [Thread-181264] [transport.py] [_log()] Compression: none
2026-04-12T02:40:26.752 [DEBUG] [Thread-181264] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:40:26.812 [DEBUG] [Thread-181264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:40:26.813 [DEBUG] [Thread-181264] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:40:26.813 [DEBUG] [Thread-181264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:40:26.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:40:26.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:40:26.873 [DEBUG] [Thread-181264] [transport.py] [_log()] userauth is OK
2026-04-12T02:40:26.874 [DEBUG] [Thread-181264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:40:26.874 [DEBUG] [Thread-181264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:40:26.874 [DEBUG] [Thread-181264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:40:26.874 [DEBUG] [Thread-181264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:40:26.894 [INFO] [Thread-181264] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:40:26.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:40:26.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:40:27.717 [DEBUG] [Thread-181264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:40:27.717 [DEBUG] [Thread-181264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:40:27.766 [DEBUG] [Thread-181264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:40:27.766 [DEBUG] [Thread-181264] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:40:27.775 [DEBUG] [Thread-181264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:40:27.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:40:27.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-04-12T02:40:27.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:40:27.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:40:27.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:40:27.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:40:27.808 [DEBUG] [Thread-181264] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:40:32.822 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:32.823 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:34.139 [DEBUG] [Thread-181266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:49.193 [DEBUG] [Thread-181267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:54.398 [DEBUG] [Thread-181268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:40:57.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:40:57.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:40:57.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:40:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 40, 32), 0.02978, 100.104, 0.0, 19.4447, 10.0181, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:40:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:40:32
2026-04-12T02:40:59.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:40:59.606 [DEBUG] [Thread-181269] [transport.py] [_log()] starting thread (client mode): 0xae5b2800
2026-04-12T02:40:59.606 [DEBUG] [Thread-181269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:40:59.627 [DEBUG] [Thread-181269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:40:59.627 [INFO] [Thread-181269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] client lang: <none>
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] server lang: <none>
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] kex follows: False
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:40:59.630 [DEBUG] [Thread-181269] [transport.py] [_log()] Compression: none
2026-04-12T02:40:59.631 [DEBUG] [Thread-181269] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:40:59.646 [DEBUG] [Thread-181269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:40:59.646 [DEBUG] [Thread-181269] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:40:59.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:40:59.647 [DEBUG] [Thread-181269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:40:59.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:40:59.650 [DEBUG] [Thread-181269] [transport.py] [_log()] userauth is OK
2026-04-12T02:40:59.650 [DEBUG] [Thread-181269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:40:59.650 [DEBUG] [Thread-181269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:40:59.650 [DEBUG] [Thread-181269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:40:59.650 [DEBUG] [Thread-181269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:40:59.675 [INFO] [Thread-181269] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:40:59.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:41:00.446 [DEBUG] [Thread-181269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:41:00.446 [DEBUG] [Thread-181269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:41:00.447 [DEBUG] [Thread-181269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:41:00.487 [DEBUG] [Thread-181269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:41:00.487 [DEBUG] [Thread-181269] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:41:00.490 [DEBUG] [Thread-181269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:41:00.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:41:00.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:41:00.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:41:00.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:41:00.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:41:00.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:41:00.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:41:00.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:41:00.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:41:00.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.027885 -999.00  +10.00  17.86     98   +9.70 1 3 1 3 1     0    0 0.32 1.19 ----- 18.6 17.9 275.6 21.1 11.4 -1.1 11.2 -1.4 10.8 -1.8 11.2 -0.7
2026-04-12T02:41:00.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:41:00.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:41:00.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.027885
2026-04-12T02:41:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:41:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:41:00.516 [DEBUG] [Thread-181269] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:41:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:41:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:41:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:41:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:40:32', tmtdew=0.02978, humidity=100.104, cloud=0.0, wind=19.4447, temperature=10.0181, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:40:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:41:00.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:41:00.614 [DEBUG] [Thread-181272] [transport.py] [_log()] starting thread (client mode): 0xae5b1ea0
2026-04-12T02:41:00.614 [DEBUG] [Thread-181272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:41:00.629 [DEBUG] [Thread-181272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:41:00.629 [INFO] [Thread-181272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] client lang: <none>
2026-04-12T02:41:00.636 [DEBUG] [Thread-181272] [transport.py] [_log()] server lang: <none>
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] kex follows: False
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] Compression: none
2026-04-12T02:41:00.637 [DEBUG] [Thread-181272] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:41:00.692 [DEBUG] [Thread-181272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:41:00.693 [DEBUG] [Thread-181272] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:41:00.693 [DEBUG] [Thread-181272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:41:00.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:41:00.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:41:00.749 [DEBUG] [Thread-181272] [transport.py] [_log()] userauth is OK
2026-04-12T02:41:00.749 [DEBUG] [Thread-181272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:41:00.749 [DEBUG] [Thread-181272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:41:00.749 [DEBUG] [Thread-181272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:41:00.749 [DEBUG] [Thread-181272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:41:00.768 [INFO] [Thread-181272] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:41:00.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:41:00.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:41:01.576 [DEBUG] [Thread-181272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:41:01.577 [DEBUG] [Thread-181272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:41:01.625 [DEBUG] [Thread-181272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:41:01.625 [DEBUG] [Thread-181272] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:41:01.646 [DEBUG] [Thread-181272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:41:01.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:41:01.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-04-12T02:41:01.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:41:01.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:41:01.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:41:01.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:41:01.687 [DEBUG] [Thread-181272] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:41:04.229 [DEBUG] [Thread-181274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:41:19.280 [DEBUG] [Thread-181275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:41:31.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:41:31.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:41:31.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:41:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 41, 7), 0.019725, 100.17, 0.0, 17.7865, 10.1176, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:41:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:41:07
2026-04-12T02:41:33.026 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:41:33.027 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:41:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:41:33.555 [DEBUG] [Thread-181276] [transport.py] [_log()] starting thread (client mode): 0xae5b2320
2026-04-12T02:41:33.555 [DEBUG] [Thread-181276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:41:33.577 [DEBUG] [Thread-181276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:41:33.577 [INFO] [Thread-181276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:41:33.580 [DEBUG] [Thread-181276] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:41:33.580 [DEBUG] [Thread-181276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:41:33.580 [DEBUG] [Thread-181276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] client lang: <none>
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] server lang: <none>
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] kex follows: False
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] Compression: none
2026-04-12T02:41:33.581 [DEBUG] [Thread-181276] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:41:33.596 [DEBUG] [Thread-181276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:41:33.596 [DEBUG] [Thread-181276] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:41:33.597 [DEBUG] [Thread-181276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:41:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:41:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:41:33.597 [DEBUG] [Thread-181276] [transport.py] [_log()] userauth is OK
2026-04-12T02:41:33.597 [DEBUG] [Thread-181276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:41:33.597 [DEBUG] [Thread-181276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:41:33.597 [DEBUG] [Thread-181276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:41:33.597 [DEBUG] [Thread-181276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:41:33.606 [INFO] [Thread-181276] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:41:33.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:41:34.313 [DEBUG] [Thread-181278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:41:34.413 [DEBUG] [Thread-181276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:41:34.413 [DEBUG] [Thread-181276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:41:34.414 [DEBUG] [Thread-181276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:41:34.454 [DEBUG] [Thread-181276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:41:34.454 [DEBUG] [Thread-181276] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:41:34.458 [DEBUG] [Thread-181276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:41:34.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:41:34.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:41:34.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:41:34.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:41:34.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:41:34.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:41:34.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:41:34.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:41:34.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:41:34.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.028233 -999.00  +10.00  15.15     98   +9.70 1 3 1 3 1     0    0 0.31 1.20 ----- 16.2 15.2 289.2 19.8 11.4 -1.2 11.2 -1.3 10.8 -1.5 11.2 -0.6
2026-04-12T02:41:34.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:41:34.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:41:34.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.028233
2026-04-12T02:41:34.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:41:34.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:41:34.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:41:34.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:41:34.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:41:34.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:41:07', tmtdew=0.019725, humidity=100.17, cloud=0.0, wind=17.7865, temperature=10.1176, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:40:39.331', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:41:34.486 [DEBUG] [Thread-181276] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:41:34.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:41:34.579 [DEBUG] [Thread-181280] [transport.py] [_log()] starting thread (client mode): 0xae5b5c30
2026-04-12T02:41:34.579 [DEBUG] [Thread-181280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:41:34.593 [DEBUG] [Thread-181280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:41:34.594 [INFO] [Thread-181280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:41:34.603 [DEBUG] [Thread-181280] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:41:34.603 [DEBUG] [Thread-181280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] client lang: <none>
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] server lang: <none>
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] kex follows: False
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] Compression: none
2026-04-12T02:41:34.604 [DEBUG] [Thread-181280] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:41:34.662 [DEBUG] [Thread-181280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:41:34.662 [DEBUG] [Thread-181280] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:41:34.663 [DEBUG] [Thread-181280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:41:34.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:41:34.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:41:34.718 [DEBUG] [Thread-181280] [transport.py] [_log()] userauth is OK
2026-04-12T02:41:34.718 [DEBUG] [Thread-181280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:41:34.719 [DEBUG] [Thread-181280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:41:34.719 [DEBUG] [Thread-181280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:41:34.719 [DEBUG] [Thread-181280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:41:34.737 [INFO] [Thread-181280] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:41:34.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:41:34.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:41:35.539 [DEBUG] [Thread-181280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:41:35.539 [DEBUG] [Thread-181280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:41:35.587 [DEBUG] [Thread-181280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:41:35.587 [DEBUG] [Thread-181280] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:41:35.597 [DEBUG] [Thread-181280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:41:35.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:41:35.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-04-12T02:41:35.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-04-12T02:41:35.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:41:35.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:41:35.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:41:35.635 [DEBUG] [Thread-181280] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:41:49.349 [DEBUG] [Thread-181282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:41:54.453 [DEBUG] [Thread-181283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:04.408 [DEBUG] [Thread-181284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:05.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:42:05.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:42:05.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-04-12T02:42:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 41, 43), -0.05545, 100.307, 0.0, 17.8906, 10.5357, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:42:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:41:43
2026-04-12T02:42:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:42:07.480 [DEBUG] [Thread-181285] [transport.py] [_log()] starting thread (client mode): 0xae5b1a80
2026-04-12T02:42:07.480 [DEBUG] [Thread-181285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:42:07.501 [DEBUG] [Thread-181285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:42:07.501 [INFO] [Thread-181285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] client lang: <none>
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] server lang: <none>
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] kex follows: False
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] Compression: none
2026-04-12T02:42:07.504 [DEBUG] [Thread-181285] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:42:07.522 [DEBUG] [Thread-181285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:42:07.522 [DEBUG] [Thread-181285] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:42:07.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:42:07.523 [DEBUG] [Thread-181285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:42:07.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:42:07.526 [DEBUG] [Thread-181285] [transport.py] [_log()] userauth is OK
2026-04-12T02:42:07.526 [DEBUG] [Thread-181285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:42:07.526 [DEBUG] [Thread-181285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:42:07.526 [DEBUG] [Thread-181285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:42:07.526 [DEBUG] [Thread-181285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:42:07.549 [INFO] [Thread-181285] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:42:07.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:42:08.303 [DEBUG] [Thread-181285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:42:08.304 [DEBUG] [Thread-181285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:42:08.304 [DEBUG] [Thread-181285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:42:08.345 [DEBUG] [Thread-181285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:42:08.345 [DEBUG] [Thread-181285] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:42:08.348 [DEBUG] [Thread-181285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:42:08.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:42:08.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:42:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:42:08.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:42:08.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:42:08.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:42:08.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:42:08.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:42:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:42:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.028580 -999.00  +10.00  16.73     98   +9.80 1 3 1 3 1     0    0 0.31 0.85 ----- 15.6 16.7 278.9 20.3 11.3 -1.3 11.2 -1.3 10.8 -1.6 11.2 -0.6
2026-04-12T02:42:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:42:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:42:08.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.028580
2026-04-12T02:42:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:42:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:42:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:42:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:42:08.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:42:08.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:41:43', tmtdew=-0.05545, humidity=100.307, cloud=0.0, wind=17.8906, temperature=10.5357, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:41:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:42:08.377 [DEBUG] [Thread-181285] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:42:08.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:42:08.466 [DEBUG] [Thread-181288] [transport.py] [_log()] starting thread (client mode): 0xae561b10
2026-04-12T02:42:08.466 [DEBUG] [Thread-181288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:42:08.488 [DEBUG] [Thread-181288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:42:08.489 [INFO] [Thread-181288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:42:08.497 [DEBUG] [Thread-181288] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:42:08.497 [DEBUG] [Thread-181288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:42:08.497 [DEBUG] [Thread-181288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:42:08.497 [DEBUG] [Thread-181288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] client lang: <none>
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] server lang: <none>
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] kex follows: False
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] Compression: none
2026-04-12T02:42:08.498 [DEBUG] [Thread-181288] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:42:08.554 [DEBUG] [Thread-181288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:42:08.555 [DEBUG] [Thread-181288] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:42:08.556 [DEBUG] [Thread-181288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:42:08.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:42:08.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:42:08.610 [DEBUG] [Thread-181288] [transport.py] [_log()] userauth is OK
2026-04-12T02:42:08.610 [DEBUG] [Thread-181288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:42:08.610 [DEBUG] [Thread-181288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:42:08.610 [DEBUG] [Thread-181288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:42:08.610 [DEBUG] [Thread-181288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:42:08.625 [INFO] [Thread-181288] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:42:08.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:42:08.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:42:09.497 [DEBUG] [Thread-181288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:42:09.497 [DEBUG] [Thread-181288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:42:09.545 [DEBUG] [Thread-181288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:42:09.546 [DEBUG] [Thread-181288] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:42:09.555 [DEBUG] [Thread-181288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:42:09.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:42:09.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:42:09.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:42:09.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:42:09.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:42:09.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:42:09.593 [DEBUG] [Thread-181288] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:42:19.443 [DEBUG] [Thread-181290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:33.234 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:33.235 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:34.491 [DEBUG] [Thread-181291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:42:39.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:42:39.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-04-12T02:42:40.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 42, 18), -0.027725, 100.153, 0.0, 18.351, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:42:40.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:42:18
2026-04-12T02:42:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:42:41.464 [DEBUG] [Thread-181292] [transport.py] [_log()] starting thread (client mode): 0xae561000
2026-04-12T02:42:41.464 [DEBUG] [Thread-181292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:42:41.486 [DEBUG] [Thread-181292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:42:41.487 [INFO] [Thread-181292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:41.491 [DEBUG] [Thread-181292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] client lang: <none>
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] server lang: <none>
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] kex follows: False
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:42:41.492 [DEBUG] [Thread-181292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:42:41.493 [DEBUG] [Thread-181292] [transport.py] [_log()] Compression: none
2026-04-12T02:42:41.493 [DEBUG] [Thread-181292] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:42:41.513 [DEBUG] [Thread-181292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:42:41.513 [DEBUG] [Thread-181292] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:42:41.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:42:41.514 [DEBUG] [Thread-181292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:42:41.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:42:41.516 [DEBUG] [Thread-181292] [transport.py] [_log()] userauth is OK
2026-04-12T02:42:41.517 [DEBUG] [Thread-181292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:42:41.517 [DEBUG] [Thread-181292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:42:41.517 [DEBUG] [Thread-181292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:42:41.517 [DEBUG] [Thread-181292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:42:41.540 [INFO] [Thread-181292] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:42:41.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:42:42.320 [DEBUG] [Thread-181292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:42:42.320 [DEBUG] [Thread-181292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:42:42.321 [DEBUG] [Thread-181292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:42:42.365 [DEBUG] [Thread-181292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:42:42.365 [DEBUG] [Thread-181292] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:42:42.370 [DEBUG] [Thread-181292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:42:42.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:42:42.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:42:42.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:42:42.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:42:42.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:42:42.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:42:42.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:42:42.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:42:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:42:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.028927 -999.00  +10.00  18.38     98   +9.80 1 3 1 3 1     0    0 0.29 0.48 ----- 17.3 18.4 276.2 20.2 11.4 -1.1 11.2 -1.3 10.8 -1.5 11.2 -0.5
2026-04-12T02:42:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:42:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:42:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.028927
2026-04-12T02:42:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:42:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:42:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:42:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:42:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:42:42.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:42:18', tmtdew=-0.027725, humidity=100.153, cloud=0.0, wind=18.351, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:41:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:42:42.410 [DEBUG] [Thread-181292] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:42:42.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:42:42.508 [DEBUG] [Thread-181295] [transport.py] [_log()] starting thread (client mode): 0xae562bf0
2026-04-12T02:42:42.508 [DEBUG] [Thread-181295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:42:42.523 [DEBUG] [Thread-181295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:42:42.523 [INFO] [Thread-181295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] client lang: <none>
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] server lang: <none>
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] kex follows: False
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:42:42.531 [DEBUG] [Thread-181295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:42:42.532 [DEBUG] [Thread-181295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:42:42.532 [DEBUG] [Thread-181295] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:42:42.532 [DEBUG] [Thread-181295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:42:42.532 [DEBUG] [Thread-181295] [transport.py] [_log()] Compression: none
2026-04-12T02:42:42.532 [DEBUG] [Thread-181295] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:42:42.591 [DEBUG] [Thread-181295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:42:42.592 [DEBUG] [Thread-181295] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:42:42.592 [DEBUG] [Thread-181295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:42:42.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:42:42.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:42:42.650 [DEBUG] [Thread-181295] [transport.py] [_log()] userauth is OK
2026-04-12T02:42:42.651 [DEBUG] [Thread-181295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:42:42.651 [DEBUG] [Thread-181295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:42:42.651 [DEBUG] [Thread-181295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:42:42.651 [DEBUG] [Thread-181295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:42:42.675 [INFO] [Thread-181295] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:42:42.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:42:42.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:42:43.476 [DEBUG] [Thread-181295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:42:43.477 [DEBUG] [Thread-181295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:42:43.530 [DEBUG] [Thread-181295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:42:43.530 [DEBUG] [Thread-181295] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:42:43.541 [DEBUG] [Thread-181295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:42:43.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:42: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-04-12T02:42: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-04-12T02:42:43.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:42:43.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:42:43.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:42:43.580 [DEBUG] [Thread-181295] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:42:49.527 [DEBUG] [Thread-181297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:42:54.522 [DEBUG] [Thread-181298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:04.572 [DEBUG] [Thread-181299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:13.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:43:13.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:43:13.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-04-12T02:43:14.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 42, 54), 0.024755, 100.137, 0.0, 17.2044, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:43:14.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:42:54
2026-04-12T02:43:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:43:15.401 [DEBUG] [Thread-181300] [transport.py] [_log()] starting thread (client mode): 0xae5b2500
2026-04-12T02:43:15.401 [DEBUG] [Thread-181300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:43:15.421 [DEBUG] [Thread-181300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:43:15.421 [INFO] [Thread-181300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:43:15.424 [DEBUG] [Thread-181300] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:43:15.424 [DEBUG] [Thread-181300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:43:15.424 [DEBUG] [Thread-181300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:43:15.424 [DEBUG] [Thread-181300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:15.424 [DEBUG] [Thread-181300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:15.424 [DEBUG] [Thread-181300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] client lang: <none>
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] server lang: <none>
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] kex follows: False
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:43:15.425 [DEBUG] [Thread-181300] [transport.py] [_log()] Compression: none
2026-04-12T02:43:15.426 [DEBUG] [Thread-181300] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:43:15.445 [DEBUG] [Thread-181300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:43:15.446 [DEBUG] [Thread-181300] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:43:15.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:43:15.446 [DEBUG] [Thread-181300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:43:15.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:43:15.448 [DEBUG] [Thread-181300] [transport.py] [_log()] userauth is OK
2026-04-12T02:43:15.448 [DEBUG] [Thread-181300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:43:15.448 [DEBUG] [Thread-181300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:43:15.448 [DEBUG] [Thread-181300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:43:15.448 [DEBUG] [Thread-181300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:43:15.466 [INFO] [Thread-181300] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:43:15.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:43:16.223 [DEBUG] [Thread-181300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:43:16.223 [DEBUG] [Thread-181300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:43:16.223 [DEBUG] [Thread-181300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:43:16.264 [DEBUG] [Thread-181300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:43:16.264 [DEBUG] [Thread-181300] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:43:16.268 [DEBUG] [Thread-181300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:43:16.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:43:16.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:43:16.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:43:16.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:43:16.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:43:16.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:43:16.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:43:16.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:43:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:43:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.029622 -999.00  +10.00  15.52     98   +9.80 1 3 1 3 1     0    0 0.28 0.04 ----- 17.4 15.5 276.4 22.8 11.4 -1.1 11.2 -1.3 10.8 -1.5 11.2 -0.6
2026-04-12T02:43:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:43:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:43:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.029622
2026-04-12T02:43:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:43:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:43:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:43:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:43:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:43:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:42:54', tmtdew=0.024755, humidity=100.137, cloud=0.0, wind=17.2044, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:42:39.341', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:43:16.297 [DEBUG] [Thread-181300] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:43:16.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:43:16.391 [DEBUG] [Thread-181303] [transport.py] [_log()] starting thread (client mode): 0xb0f6eaa0
2026-04-12T02:43:16.391 [DEBUG] [Thread-181303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:43:16.405 [DEBUG] [Thread-181303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:43:16.406 [INFO] [Thread-181303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:43:16.413 [DEBUG] [Thread-181303] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:43:16.413 [DEBUG] [Thread-181303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:43:16.413 [DEBUG] [Thread-181303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:43:16.413 [DEBUG] [Thread-181303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] client lang: <none>
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] server lang: <none>
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] kex follows: False
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:43:16.414 [DEBUG] [Thread-181303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:43:16.415 [DEBUG] [Thread-181303] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:43:16.415 [DEBUG] [Thread-181303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:43:16.415 [DEBUG] [Thread-181303] [transport.py] [_log()] Compression: none
2026-04-12T02:43:16.415 [DEBUG] [Thread-181303] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:43:16.471 [DEBUG] [Thread-181303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:43:16.471 [DEBUG] [Thread-181303] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:43:16.472 [DEBUG] [Thread-181303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:43:16.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:43:16.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:43:16.527 [DEBUG] [Thread-181303] [transport.py] [_log()] userauth is OK
2026-04-12T02:43:16.528 [DEBUG] [Thread-181303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:43:16.528 [DEBUG] [Thread-181303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:43:16.528 [DEBUG] [Thread-181303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:43:16.528 [DEBUG] [Thread-181303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:43:16.546 [INFO] [Thread-181303] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:43:16.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:43:16.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:43:17.386 [DEBUG] [Thread-181303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:43:17.387 [DEBUG] [Thread-181303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:43:17.435 [DEBUG] [Thread-181303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:43:17.435 [DEBUG] [Thread-181303] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:43:17.444 [DEBUG] [Thread-181303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:43:17.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:43:17.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-04-12T02:43:17.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-04-12T02:43:17.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:43:17.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:43:17.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:43:17.481 [DEBUG] [Thread-181303] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:43:19.608 [DEBUG] [Thread-181305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:33.439 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:33.440 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:34.661 [DEBUG] [Thread-181306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:43:47.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:43:47.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-04-12T02:43:48.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 43, 30), 0.01476, 100.203, 0.0, 16.781, 10.1176, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:43:48.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:43:30
2026-04-12T02:43:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:43:49.321 [DEBUG] [Thread-181307] [transport.py] [_log()] starting thread (client mode): 0xae563430
2026-04-12T02:43:49.321 [DEBUG] [Thread-181307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:43:49.341 [DEBUG] [Thread-181307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:43:49.341 [INFO] [Thread-181307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] client lang: <none>
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] server lang: <none>
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] kex follows: False
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] Compression: none
2026-04-12T02:43:49.345 [DEBUG] [Thread-181307] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:43:49.362 [DEBUG] [Thread-181307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:43:49.363 [DEBUG] [Thread-181307] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:43:49.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:43:49.364 [DEBUG] [Thread-181307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:43:49.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:43:49.366 [DEBUG] [Thread-181307] [transport.py] [_log()] userauth is OK
2026-04-12T02:43:49.366 [DEBUG] [Thread-181307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:43:49.366 [DEBUG] [Thread-181307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:43:49.366 [DEBUG] [Thread-181307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:43:49.366 [DEBUG] [Thread-181307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:43:49.401 [INFO] [Thread-181307] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:43:49.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:43:49.699 [DEBUG] [Thread-181309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:43:50.215 [DEBUG] [Thread-181307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:43:50.215 [DEBUG] [Thread-181307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:43:50.215 [DEBUG] [Thread-181307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:43:50.257 [DEBUG] [Thread-181307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:43:50.257 [DEBUG] [Thread-181307] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:43:50.262 [DEBUG] [Thread-181307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:43:50.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:43:50.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:43:50.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:43:50.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:43:50.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:43:50.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:43:50.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:43:50.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:43:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:43:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.029969 -999.00  +10.00  15.62     98   +9.70 1 3 1 3 1     0    0 0.26 -0.39 ----- 16.4 15.6 280.2 21.8 11.4 -1.4 11.2 -1.4 10.8 -1.1 11.2 -0.6
2026-04-12T02:43:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:43:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:43:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.029969
2026-04-12T02:43:50.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:43:50.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:43:50.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:43:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:43:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:43:50.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:43:30', tmtdew=0.01476, humidity=100.203, cloud=0.0, wind=16.781, temperature=10.1176, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:43:09.322', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:43:50.296 [DEBUG] [Thread-181307] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:43:50.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:43:50.388 [DEBUG] [Thread-181311] [transport.py] [_log()] starting thread (client mode): 0xae5b7f40
2026-04-12T02:43:50.388 [DEBUG] [Thread-181311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:43:50.402 [DEBUG] [Thread-181311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:43:50.402 [INFO] [Thread-181311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] client lang: <none>
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] server lang: <none>
2026-04-12T02:43:50.410 [DEBUG] [Thread-181311] [transport.py] [_log()] kex follows: False
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] Compression: none
2026-04-12T02:43:50.411 [DEBUG] [Thread-181311] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:43:50.468 [DEBUG] [Thread-181311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:43:50.468 [DEBUG] [Thread-181311] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:43:50.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:43:50.469 [DEBUG] [Thread-181311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:43:50.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:43:50.524 [DEBUG] [Thread-181311] [transport.py] [_log()] userauth is OK
2026-04-12T02:43:50.524 [DEBUG] [Thread-181311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:43:50.524 [DEBUG] [Thread-181311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:43:50.525 [DEBUG] [Thread-181311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:43:50.525 [DEBUG] [Thread-181311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:43:50.544 [INFO] [Thread-181311] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:43:50.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:43:50.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:43:51.372 [DEBUG] [Thread-181311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:43:51.373 [DEBUG] [Thread-181311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:43:51.421 [DEBUG] [Thread-181311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:43:51.421 [DEBUG] [Thread-181311] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:43:51.430 [DEBUG] [Thread-181311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:43:51.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:43:51.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:43:51.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-04-12T02:43:51.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:43:51.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:43:51.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:43:51.467 [DEBUG] [Thread-181311] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:43:54.598 [DEBUG] [Thread-181313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:04.737 [DEBUG] [Thread-181314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:19.791 [DEBUG] [Thread-181315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:21.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:44:21.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:44:21.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-04-12T02:44:22.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 44, 5), 0.019725, 100.17, 0.0, 19.9033, 10.1176, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:44:22.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:44:05
2026-04-12T02:44:23.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:44:23.276 [DEBUG] [Thread-181316] [transport.py] [_log()] starting thread (client mode): 0xb0f41c00
2026-04-12T02:44:23.276 [DEBUG] [Thread-181316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:44:23.298 [DEBUG] [Thread-181316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:44:23.298 [INFO] [Thread-181316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:44:23.300 [DEBUG] [Thread-181316] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:44:23.300 [DEBUG] [Thread-181316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] client lang: <none>
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] server lang: <none>
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] kex follows: False
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] Compression: none
2026-04-12T02:44:23.301 [DEBUG] [Thread-181316] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:44:23.318 [DEBUG] [Thread-181316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:44:23.319 [DEBUG] [Thread-181316] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:44:23.319 [DEBUG] [Thread-181316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:44:23.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:44:23.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:44:23.322 [DEBUG] [Thread-181316] [transport.py] [_log()] userauth is OK
2026-04-12T02:44:23.323 [DEBUG] [Thread-181316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:44:23.323 [DEBUG] [Thread-181316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:44:23.323 [DEBUG] [Thread-181316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:44:23.323 [DEBUG] [Thread-181316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:44:23.358 [INFO] [Thread-181316] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:44:23.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:44:24.125 [DEBUG] [Thread-181316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:44:24.125 [DEBUG] [Thread-181316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:44:24.126 [DEBUG] [Thread-181316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:44:24.168 [DEBUG] [Thread-181316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:44:24.168 [DEBUG] [Thread-181316] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:44:24.175 [DEBUG] [Thread-181316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:44:24.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:44:24.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:44:24.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:44:24.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:44:24.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:44:24.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:44:24.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:44:24.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:44:24.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:44:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.030316 -999.00  +10.00  17.77     98   +9.70 1 3 1 3 1     0    0 0.27 -0.31 ----- 17.4 17.8 275.6 21.1 11.4 -1.3 11.2 -1.3 10.8 -1.6 11.2 -0.5
2026-04-12T02:44:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:44:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:44:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.030316
2026-04-12T02:44:24.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:44:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:44:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:44:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:44:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:44:24.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:44:05', tmtdew=0.019725, humidity=100.17, cloud=0.0, wind=19.9033, temperature=10.1176, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:43:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:44:24.206 [DEBUG] [Thread-181316] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:44:24.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:44:24.300 [DEBUG] [Thread-181319] [transport.py] [_log()] starting thread (client mode): 0xae561840
2026-04-12T02:44:24.300 [DEBUG] [Thread-181319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:44:24.314 [DEBUG] [Thread-181319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:44:24.315 [INFO] [Thread-181319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:44:24.322 [DEBUG] [Thread-181319] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:44:24.322 [DEBUG] [Thread-181319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:44:24.322 [DEBUG] [Thread-181319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] client lang: <none>
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] server lang: <none>
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] kex follows: False
2026-04-12T02:44:24.323 [DEBUG] [Thread-181319] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:44:24.324 [DEBUG] [Thread-181319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:44:24.324 [DEBUG] [Thread-181319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:44:24.324 [DEBUG] [Thread-181319] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:44:24.324 [DEBUG] [Thread-181319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:44:24.324 [DEBUG] [Thread-181319] [transport.py] [_log()] Compression: none
2026-04-12T02:44:24.324 [DEBUG] [Thread-181319] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:44:24.382 [DEBUG] [Thread-181319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:44:24.382 [DEBUG] [Thread-181319] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:44:24.382 [DEBUG] [Thread-181319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:44:24.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:44:24.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:44:24.440 [DEBUG] [Thread-181319] [transport.py] [_log()] userauth is OK
2026-04-12T02:44:24.440 [DEBUG] [Thread-181319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:44:24.440 [DEBUG] [Thread-181319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:44:24.440 [DEBUG] [Thread-181319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:44:24.440 [DEBUG] [Thread-181319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:44:24.465 [INFO] [Thread-181319] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:44:24.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:44:24.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:44:25.303 [DEBUG] [Thread-181319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:44:25.303 [DEBUG] [Thread-181319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:44:25.351 [DEBUG] [Thread-181319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:44:25.351 [DEBUG] [Thread-181319] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:44:25.361 [DEBUG] [Thread-181319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:44:25.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:44:25.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-04-12T02:44:25.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-04-12T02:44:25.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:44:25.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:44:25.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:44:25.399 [DEBUG] [Thread-181319] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:44:33.646 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:33.647 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:34.825 [DEBUG] [Thread-181321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:49.877 [DEBUG] [Thread-181322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:54.666 [DEBUG] [Thread-181323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:44:55.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:44:55.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:44:55.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-04-12T02:44:56.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 44, 41), -0.05053, 100.274, 0.0, 22.5475, 10.5688, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:44:56.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:44:41
2026-04-12T02:44:57.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:44:57.162 [DEBUG] [Thread-181324] [transport.py] [_log()] starting thread (client mode): 0xae5348e0
2026-04-12T02:44:57.162 [DEBUG] [Thread-181324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:44:57.176 [DEBUG] [Thread-181324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:44:57.176 [INFO] [Thread-181324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:44:57.177 [DEBUG] [Thread-181324] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:44:57.177 [DEBUG] [Thread-181324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:44:57.177 [DEBUG] [Thread-181324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:44:57.177 [DEBUG] [Thread-181324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:57.177 [DEBUG] [Thread-181324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] client lang: <none>
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] server lang: <none>
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] kex follows: False
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] Compression: none
2026-04-12T02:44:57.178 [DEBUG] [Thread-181324] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:44:57.190 [DEBUG] [Thread-181324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:44:57.191 [DEBUG] [Thread-181324] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:44:57.192 [DEBUG] [Thread-181324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:44:57.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:44:57.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:44:57.194 [DEBUG] [Thread-181324] [transport.py] [_log()] userauth is OK
2026-04-12T02:44:57.194 [DEBUG] [Thread-181324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:44:57.195 [DEBUG] [Thread-181324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:44:57.195 [DEBUG] [Thread-181324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:44:57.195 [DEBUG] [Thread-181324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:44:57.222 [INFO] [Thread-181324] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:44:57.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:44:57.816 [DEBUG] [Thread-181324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:44:57.816 [DEBUG] [Thread-181324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:44:57.817 [DEBUG] [Thread-181324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:44:57.857 [DEBUG] [Thread-181324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:44:57.857 [DEBUG] [Thread-181324] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:44:57.860 [DEBUG] [Thread-181324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:44:57.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:44:57.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:44:57.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:44:57.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:44:57.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:44:57.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:44:57.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:44:57.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:44:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:44:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.031010 -999.00  +10.00  14.16     98   +9.80 1 3 1 3 1     0    0 0.27 -0.08 ----- 18.7 14.2 296.4 20.6 11.3 -1.2 11.2 -1.3 10.9 -1.3 11.2 -0.5
2026-04-12T02:44:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:44:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:44:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.031010
2026-04-12T02:44:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:44:57.882 [DEBUG] [Thread-181324] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:44:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:44:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:44:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:44:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:44:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:44:41', tmtdew=-0.05053, humidity=100.274, cloud=0.0, wind=22.5475, temperature=10.5688, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:44:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:44:57.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:44:57.979 [DEBUG] [Thread-181327] [transport.py] [_log()] starting thread (client mode): 0xae5b79d0
2026-04-12T02:44:57.979 [DEBUG] [Thread-181327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:44:57.993 [DEBUG] [Thread-181327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:44:57.993 [INFO] [Thread-181327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] client lang: <none>
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] server lang: <none>
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] kex follows: False
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] Compression: none
2026-04-12T02:44:58.001 [DEBUG] [Thread-181327] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:44:58.059 [DEBUG] [Thread-181327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:44:58.059 [DEBUG] [Thread-181327] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:44:58.059 [DEBUG] [Thread-181327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:44:58.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:44:58.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:44:58.115 [DEBUG] [Thread-181327] [transport.py] [_log()] userauth is OK
2026-04-12T02:44:58.115 [DEBUG] [Thread-181327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:44:58.115 [DEBUG] [Thread-181327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:44:58.115 [DEBUG] [Thread-181327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:44:58.116 [DEBUG] [Thread-181327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:44:58.138 [INFO] [Thread-181327] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:44:58.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:44:58.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:44:58.953 [DEBUG] [Thread-181327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:44:58.953 [DEBUG] [Thread-181327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:44:59.000 [DEBUG] [Thread-181327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:44:59.001 [DEBUG] [Thread-181327] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:44:59.009 [DEBUG] [Thread-181327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:44:59.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:44:59.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-04-12T02:44:59.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-04-12T02:44:59.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:44:59.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:44:59.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:44:59.046 [DEBUG] [Thread-181327] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:45:04.916 [DEBUG] [Thread-181329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:45:19.968 [DEBUG] [Thread-181330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:45:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:45:29.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:45:29.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-04-12T02:45:30.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 45, 16), 0.0298, 100.104, 0.0, 20.6626, 10.0015, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:45:30.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:45:16
2026-04-12T02:45:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:45:30.896 [DEBUG] [Thread-181331] [transport.py] [_log()] starting thread (client mode): 0xb0f6e3b0
2026-04-12T02:45:30.896 [DEBUG] [Thread-181331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:45:30.916 [DEBUG] [Thread-181331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:45:30.916 [INFO] [Thread-181331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:45:30.919 [DEBUG] [Thread-181331] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:45:30.919 [DEBUG] [Thread-181331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:45:30.919 [DEBUG] [Thread-181331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:45:30.919 [DEBUG] [Thread-181331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:45:30.919 [DEBUG] [Thread-181331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] client lang: <none>
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] server lang: <none>
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] kex follows: False
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:45:30.920 [DEBUG] [Thread-181331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:45:30.921 [DEBUG] [Thread-181331] [transport.py] [_log()] Compression: none
2026-04-12T02:45:30.921 [DEBUG] [Thread-181331] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:45:30.939 [DEBUG] [Thread-181331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:45:30.939 [DEBUG] [Thread-181331] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:45:30.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:45:30.940 [DEBUG] [Thread-181331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:45:30.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:45:30.942 [DEBUG] [Thread-181331] [transport.py] [_log()] userauth is OK
2026-04-12T02:45:30.943 [DEBUG] [Thread-181331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:45:30.943 [DEBUG] [Thread-181331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:45:30.943 [DEBUG] [Thread-181331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:45:30.943 [DEBUG] [Thread-181331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:45:30.966 [INFO] [Thread-181331] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:45:30.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:45:31.576 [DEBUG] [Thread-181331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:45:31.576 [DEBUG] [Thread-181331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:45:31.576 [DEBUG] [Thread-181331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:45:31.616 [DEBUG] [Thread-181331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:45:31.617 [DEBUG] [Thread-181331] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:45:31.619 [DEBUG] [Thread-181331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:45:31.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:45:31.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:45:31.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:45:31.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:45:31.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:45:31.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:45:31.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:45:31.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:45:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:45:31.678 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-04-12T02:45:31.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:45:16', tmtdew=0.0298, humidity=100.104, cloud=0.0, wind=20.6626, temperature=10.0015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:45:31.680 [DEBUG] [Thread-181331] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:45:31.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:45:31.775 [DEBUG] [Thread-181334] [transport.py] [_log()] starting thread (client mode): 0xb0f416c0
2026-04-12T02:45:31.775 [DEBUG] [Thread-181334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:45:31.791 [DEBUG] [Thread-181334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:45:31.791 [INFO] [Thread-181334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] client lang: <none>
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] server lang: <none>
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] kex follows: False
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:45:31.800 [DEBUG] [Thread-181334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:45:31.801 [DEBUG] [Thread-181334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:45:31.801 [DEBUG] [Thread-181334] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:45:31.801 [DEBUG] [Thread-181334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:45:31.801 [DEBUG] [Thread-181334] [transport.py] [_log()] Compression: none
2026-04-12T02:45:31.801 [DEBUG] [Thread-181334] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:45:31.860 [DEBUG] [Thread-181334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:45:31.860 [DEBUG] [Thread-181334] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:45:31.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:45:31.861 [DEBUG] [Thread-181334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:45:31.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:45:31.916 [DEBUG] [Thread-181334] [transport.py] [_log()] userauth is OK
2026-04-12T02:45:31.916 [DEBUG] [Thread-181334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:45:31.917 [DEBUG] [Thread-181334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:45:31.917 [DEBUG] [Thread-181334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:45:31.926 [DEBUG] [Thread-181334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:45:31.945 [INFO] [Thread-181334] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:45:31.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:45:31.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:45:32.754 [DEBUG] [Thread-181334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:45:32.754 [DEBUG] [Thread-181334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:45:32.801 [DEBUG] [Thread-181334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:45:32.802 [DEBUG] [Thread-181334] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:45:32.810 [DEBUG] [Thread-181334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:45:32.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:45:32.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-04-12T02:45:32.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:45:32.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:45:32.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:45:32.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:45:32.846 [DEBUG] [Thread-181334] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:45:33.852 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:45:33.854 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:45:35.007 [DEBUG] [Thread-181336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:45:50.063 [DEBUG] [Thread-181337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:45:54.724 [DEBUG] [Thread-181338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:46:02.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:46:02.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-04-12T02:46:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 45, 52), -0.07043, 100.406, 0.0, 23.0414, 10.602, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:46:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:45:52
2026-04-12T02:46:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:46:04.606 [DEBUG] [Thread-181339] [transport.py] [_log()] starting thread (client mode): 0xb0f41780
2026-04-12T02:46:04.606 [DEBUG] [Thread-181339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:46:04.626 [DEBUG] [Thread-181339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:46:04.626 [INFO] [Thread-181339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:46:04.627 [DEBUG] [Thread-181339] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:46:04.627 [DEBUG] [Thread-181339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:46:04.627 [DEBUG] [Thread-181339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:46:04.627 [DEBUG] [Thread-181339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:04.627 [DEBUG] [Thread-181339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] client lang: <none>
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] server lang: <none>
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] kex follows: False
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] Compression: none
2026-04-12T02:46:04.628 [DEBUG] [Thread-181339] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:46:04.646 [DEBUG] [Thread-181339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:46:04.646 [DEBUG] [Thread-181339] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:46:04.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:46:04.647 [DEBUG] [Thread-181339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:46:04.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:46:04.649 [DEBUG] [Thread-181339] [transport.py] [_log()] userauth is OK
2026-04-12T02:46:04.649 [DEBUG] [Thread-181339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:46:04.650 [DEBUG] [Thread-181339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:46:04.650 [DEBUG] [Thread-181339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:46:04.650 [DEBUG] [Thread-181339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:46:04.667 [INFO] [Thread-181339] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:46:04.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:46:05.098 [DEBUG] [Thread-181341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:05.272 [DEBUG] [Thread-181339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:46:05.272 [DEBUG] [Thread-181339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:46:05.273 [DEBUG] [Thread-181339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:46:05.313 [DEBUG] [Thread-181339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:46:05.313 [DEBUG] [Thread-181339] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:46:05.317 [DEBUG] [Thread-181339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:46:05.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:46:05.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:46:05.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:46:05.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:46:05.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:46:05.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:46:05.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:46:05.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:46:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:46:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.031705 -999.00  +10.00  15.90     98   +9.80 1 3 1 3 1     0    0 0.27 -0.06 ----- 16.6 15.9 287.4 23.9 11.4 -1.1 11.3 -1.2 10.9 -1.7 11.3 -0.6
2026-04-12T02:46:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:46:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:46:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.031705
2026-04-12T02:46:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:46:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:46:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:46:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:46:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:46:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:45:52', tmtdew=-0.07043, humidity=100.406, cloud=0.0, wind=23.0414, temperature=10.602, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:45:39.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:46:05.344 [DEBUG] [Thread-181339] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:46:05.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:46:05.441 [DEBUG] [Thread-181343] [transport.py] [_log()] starting thread (client mode): 0xae537c70
2026-04-12T02:46:05.441 [DEBUG] [Thread-181343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:46:05.457 [DEBUG] [Thread-181343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:46:05.457 [INFO] [Thread-181343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:46:05.465 [DEBUG] [Thread-181343] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:46:05.466 [DEBUG] [Thread-181343] [transport.py] [_log()] client lang: <none>
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] server lang: <none>
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] kex follows: False
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:46:05.467 [DEBUG] [Thread-181343] [transport.py] [_log()] Compression: none
2026-04-12T02:46:05.468 [DEBUG] [Thread-181343] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:46:05.534 [DEBUG] [Thread-181343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:46:05.534 [DEBUG] [Thread-181343] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:46:05.535 [DEBUG] [Thread-181343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:46:05.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:46:05.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:46:05.597 [DEBUG] [Thread-181343] [transport.py] [_log()] userauth is OK
2026-04-12T02:46:05.597 [DEBUG] [Thread-181343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:46:05.597 [DEBUG] [Thread-181343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:46:05.597 [DEBUG] [Thread-181343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:46:05.597 [DEBUG] [Thread-181343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:46:05.620 [INFO] [Thread-181343] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:46:05.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:46:05.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:46:06.472 [DEBUG] [Thread-181343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:46:06.472 [DEBUG] [Thread-181343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:46:06.523 [DEBUG] [Thread-181343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:46:06.523 [DEBUG] [Thread-181343] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:46:06.537 [DEBUG] [Thread-181343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:46:06.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:46:06.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-04-12T02:46:06.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-04-12T02:46:06.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:46:06.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:46:06.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:46:06.582 [DEBUG] [Thread-181343] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:46:20.135 [DEBUG] [Thread-181345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:34.059 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:34.060 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:35.194 [DEBUG] [Thread-181346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:36.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:46:36.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:46:36.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-04-12T02:46:37.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 46, 27), -0.03021, 100.17, 0.0, 20.1863, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:46:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:46:27
2026-04-12T02:46:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:46:38.429 [DEBUG] [Thread-181347] [transport.py] [_log()] starting thread (client mode): 0xb0f40490
2026-04-12T02:46:38.429 [DEBUG] [Thread-181347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:46:38.449 [DEBUG] [Thread-181347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:46:38.449 [INFO] [Thread-181347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:46:38.451 [DEBUG] [Thread-181347] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:46:38.451 [DEBUG] [Thread-181347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:46:38.451 [DEBUG] [Thread-181347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] client lang: <none>
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] server lang: <none>
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] kex follows: False
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:46:38.452 [DEBUG] [Thread-181347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:46:38.453 [DEBUG] [Thread-181347] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:46:38.453 [DEBUG] [Thread-181347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:46:38.453 [DEBUG] [Thread-181347] [transport.py] [_log()] Compression: none
2026-04-12T02:46:38.453 [DEBUG] [Thread-181347] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:46:38.465 [DEBUG] [Thread-181347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:46:38.466 [DEBUG] [Thread-181347] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:46:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:46:38.467 [DEBUG] [Thread-181347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:46:38.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:46:38.469 [DEBUG] [Thread-181347] [transport.py] [_log()] userauth is OK
2026-04-12T02:46:38.470 [DEBUG] [Thread-181347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:46:38.470 [DEBUG] [Thread-181347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:46:38.470 [DEBUG] [Thread-181347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:46:38.470 [DEBUG] [Thread-181347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:46:38.495 [INFO] [Thread-181347] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:46:38.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:46:39.081 [DEBUG] [Thread-181347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:46:39.082 [DEBUG] [Thread-181347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:46:39.082 [DEBUG] [Thread-181347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:46:39.123 [DEBUG] [Thread-181347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:46:39.123 [DEBUG] [Thread-181347] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:46:39.126 [DEBUG] [Thread-181347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:46:39.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:46:39.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:46:39.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:46:39.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:46:39.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:46:39.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:46:39.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:46:39.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:46:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:46:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.032052 -999.00  +10.00  15.17     98   +9.80 1 3 1 3 1     0    0 0.25 -0.70 ----- 19.6 15.2 279.5 20.2 11.4 -1.1 11.2 -1.2 10.9 -1.4 11.2 -0.5
2026-04-12T02:46:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:46:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:46:39.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.032052
2026-04-12T02:46:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:46:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:46:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:46:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:46:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:46:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:46:27', tmtdew=-0.03021, humidity=100.17, cloud=0.0, wind=20.1863, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:46:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:46:39.145 [DEBUG] [Thread-181347] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:46:39.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:46:39.248 [DEBUG] [Thread-181350] [transport.py] [_log()] starting thread (client mode): 0xb0f41de0
2026-04-12T02:46:39.249 [DEBUG] [Thread-181350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:46:39.264 [DEBUG] [Thread-181350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:46:39.264 [INFO] [Thread-181350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:39.272 [DEBUG] [Thread-181350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] client lang: <none>
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] server lang: <none>
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] kex follows: False
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:46:39.273 [DEBUG] [Thread-181350] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:46:39.274 [DEBUG] [Thread-181350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:46:39.274 [DEBUG] [Thread-181350] [transport.py] [_log()] Compression: none
2026-04-12T02:46:39.274 [DEBUG] [Thread-181350] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:46:39.332 [DEBUG] [Thread-181350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:46:39.333 [DEBUG] [Thread-181350] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:46:39.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:46:39.334 [DEBUG] [Thread-181350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:46:39.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:46:39.388 [DEBUG] [Thread-181350] [transport.py] [_log()] userauth is OK
2026-04-12T02:46:39.388 [DEBUG] [Thread-181350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:46:39.388 [DEBUG] [Thread-181350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:46:39.388 [DEBUG] [Thread-181350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:46:39.388 [DEBUG] [Thread-181350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:46:39.408 [INFO] [Thread-181350] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:46:39.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:46:39.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:46:40.234 [DEBUG] [Thread-181350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:46:40.234 [DEBUG] [Thread-181350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:46:40.282 [DEBUG] [Thread-181350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:46:40.282 [DEBUG] [Thread-181350] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:46:40.291 [DEBUG] [Thread-181350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:46:40.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:46:40.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-04-12T02:46:40.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-04-12T02:46:40.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:46:40.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:46:40.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:46:40.325 [DEBUG] [Thread-181350] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:46:50.227 [DEBUG] [Thread-181352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:46:54.795 [DEBUG] [Thread-181353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:05.282 [DEBUG] [Thread-181354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:10.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:47:10.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:47:10.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-04-12T02:47:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 47, 3), -0.027685, 100.153, 0.0, 20.5214, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:47:11.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:47:03
2026-04-12T02:47:12.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:47:12.184 [DEBUG] [Thread-181355] [transport.py] [_log()] starting thread (client mode): 0xae5354e0
2026-04-12T02:47:12.184 [DEBUG] [Thread-181355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:47:12.204 [DEBUG] [Thread-181355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:47:12.204 [INFO] [Thread-181355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:47:12.206 [DEBUG] [Thread-181355] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:47:12.206 [DEBUG] [Thread-181355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] client lang: <none>
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] server lang: <none>
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] kex follows: False
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] Compression: none
2026-04-12T02:47:12.207 [DEBUG] [Thread-181355] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:47:12.223 [DEBUG] [Thread-181355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:47:12.224 [DEBUG] [Thread-181355] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:47:12.224 [DEBUG] [Thread-181355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:47:12.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:47:12.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:47:12.226 [DEBUG] [Thread-181355] [transport.py] [_log()] userauth is OK
2026-04-12T02:47:12.226 [DEBUG] [Thread-181355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:47:12.226 [DEBUG] [Thread-181355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:47:12.226 [DEBUG] [Thread-181355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:47:12.227 [DEBUG] [Thread-181355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:47:12.250 [INFO] [Thread-181355] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:47:12.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:47:12.841 [DEBUG] [Thread-181355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:47:12.841 [DEBUG] [Thread-181355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:47:12.841 [DEBUG] [Thread-181355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:47:12.882 [DEBUG] [Thread-181355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:47:12.882 [DEBUG] [Thread-181355] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:47:12.885 [DEBUG] [Thread-181355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:47:12.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:47:12.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:47:12.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:47:12.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:47:12.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:47:12.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:47:12.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:47:12.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:47:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:47:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.032399 -999.00  +10.00  17.46     98   +9.80 1 3 1 3 1     0    0 0.23 -1.20 ----- 18.0 17.5 281.8 24.3 11.4 -1.0 11.3 -1.3 10.8 -0.9 11.2 -0.4
2026-04-12T02:47:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:47:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:47:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.032399
2026-04-12T02:47:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:47:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:47:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:47:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:47:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:47:12.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:47:03', tmtdew=-0.027685, humidity=100.153, cloud=0.0, wind=20.5214, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:46:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:47:12.911 [DEBUG] [Thread-181355] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:47:12.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:47:13.003 [DEBUG] [Thread-181358] [transport.py] [_log()] starting thread (client mode): 0xae5b19f0
2026-04-12T02:47:13.003 [DEBUG] [Thread-181358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:47:13.018 [DEBUG] [Thread-181358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:47:13.018 [INFO] [Thread-181358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] client lang: <none>
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] server lang: <none>
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] kex follows: False
2026-04-12T02:47:13.026 [DEBUG] [Thread-181358] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:47:13.027 [DEBUG] [Thread-181358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:47:13.027 [DEBUG] [Thread-181358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:47:13.027 [DEBUG] [Thread-181358] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:47:13.027 [DEBUG] [Thread-181358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:47:13.027 [DEBUG] [Thread-181358] [transport.py] [_log()] Compression: none
2026-04-12T02:47:13.027 [DEBUG] [Thread-181358] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:47:13.085 [DEBUG] [Thread-181358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:47:13.086 [DEBUG] [Thread-181358] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:47:13.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:47:13.087 [DEBUG] [Thread-181358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:47:13.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:47:13.144 [DEBUG] [Thread-181358] [transport.py] [_log()] userauth is OK
2026-04-12T02:47:13.144 [DEBUG] [Thread-181358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:47:13.145 [DEBUG] [Thread-181358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:47:13.145 [DEBUG] [Thread-181358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:47:13.145 [DEBUG] [Thread-181358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:47:13.163 [INFO] [Thread-181358] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:47:13.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:47:13.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:47:14.049 [DEBUG] [Thread-181358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:47:14.049 [DEBUG] [Thread-181358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:47:14.097 [DEBUG] [Thread-181358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:47:14.097 [DEBUG] [Thread-181358] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:47:14.106 [DEBUG] [Thread-181358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:47:14.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:47:14.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-04-12T02:47:14.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-04-12T02:47:14.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:47:14.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:47:14.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:47:14.143 [DEBUG] [Thread-181358] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:47:20.322 [DEBUG] [Thread-181360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:34.263 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:34.264 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:35.373 [DEBUG] [Thread-181361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:47:44.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:47:44.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:47:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 47, 3), -0.027685, 100.153, 0.0, 20.5214, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:47:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:47:03
2026-04-12T02:47:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:47:45.941 [DEBUG] [Thread-181362] [transport.py] [_log()] starting thread (client mode): 0xae5b0190
2026-04-12T02:47:45.941 [DEBUG] [Thread-181362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:47:45.955 [DEBUG] [Thread-181362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:47:45.955 [INFO] [Thread-181362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] client lang: <none>
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] server lang: <none>
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] kex follows: False
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] Compression: none
2026-04-12T02:47:45.958 [DEBUG] [Thread-181362] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:47:45.971 [DEBUG] [Thread-181362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:47:45.971 [DEBUG] [Thread-181362] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:47:45.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:47:45.973 [DEBUG] [Thread-181362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:47:45.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:47:45.974 [DEBUG] [Thread-181362] [transport.py] [_log()] userauth is OK
2026-04-12T02:47:45.975 [DEBUG] [Thread-181362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:47:45.975 [DEBUG] [Thread-181362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:47:45.975 [DEBUG] [Thread-181362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:47:45.975 [DEBUG] [Thread-181362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:47:46.004 [INFO] [Thread-181362] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:47:46.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:47:46.567 [DEBUG] [Thread-181362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:47:46.567 [DEBUG] [Thread-181362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:47:46.568 [DEBUG] [Thread-181362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:47:46.609 [DEBUG] [Thread-181362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:47:46.609 [DEBUG] [Thread-181362] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:47:46.611 [DEBUG] [Thread-181362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:47:46.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:47:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:47:46.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:47:46.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:47:46.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:47:46.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:47:46.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:47:46.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:47:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:47:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.033093 -999.00  +10.00  16.15     98   +9.80 1 3 1 3 1     0    0 0.22 -1.78 ----- 13.8 16.1 293.6 21.6 11.4 -1.1 11.2 -1.2 10.9 -1.3 11.2 -0.6
2026-04-12T02:47:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:47:46.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:47:46.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.033093
2026-04-12T02:47:46.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:47:46.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:47:46.635 [DEBUG] [Thread-181362] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:47:46.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:47:46.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:47:46.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:47:46.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:47:03', tmtdew=-0.027685, humidity=100.153, cloud=0.0, wind=20.5214, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:47:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:47:46.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:47:46.726 [DEBUG] [Thread-181365] [transport.py] [_log()] starting thread (client mode): 0xb0f6d180
2026-04-12T02:47:46.726 [DEBUG] [Thread-181365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:47:46.741 [DEBUG] [Thread-181365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:47:46.741 [INFO] [Thread-181365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:47:46.748 [DEBUG] [Thread-181365] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:47:46.748 [DEBUG] [Thread-181365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:47:46.748 [DEBUG] [Thread-181365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:47:46.748 [DEBUG] [Thread-181365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] client lang: <none>
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] server lang: <none>
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] kex follows: False
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] Compression: none
2026-04-12T02:47:46.749 [DEBUG] [Thread-181365] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:47:46.813 [DEBUG] [Thread-181365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:47:46.813 [DEBUG] [Thread-181365] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:47:46.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:47:46.814 [DEBUG] [Thread-181365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:47:46.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:47:46.873 [DEBUG] [Thread-181365] [transport.py] [_log()] userauth is OK
2026-04-12T02:47:46.873 [DEBUG] [Thread-181365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:47:46.873 [DEBUG] [Thread-181365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:47:46.873 [DEBUG] [Thread-181365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:47:46.873 [DEBUG] [Thread-181365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:47:46.892 [INFO] [Thread-181365] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:47:46.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:47:46.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:47:47.703 [DEBUG] [Thread-181365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:47:47.703 [DEBUG] [Thread-181365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:47:47.752 [DEBUG] [Thread-181365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:47:47.752 [DEBUG] [Thread-181365] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:47:47.761 [DEBUG] [Thread-181365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:47:47.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:47:47.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-04-12T02:47:47.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:47:47.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:47:47.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:47:47.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:47:47.795 [DEBUG] [Thread-181365] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:47:50.409 [DEBUG] [Thread-181367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:47:54.862 [DEBUG] [Thread-181368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:05.461 [DEBUG] [Thread-181369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:48:17.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:48:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:48:19.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 47, 38), -0.07039, 100.406, 0.0, 20.8541, 10.5688, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:48:19.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:47:38
2026-04-12T02:48:19.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:48:19.591 [DEBUG] [Thread-181370] [transport.py] [_log()] starting thread (client mode): 0xb0f41ab0
2026-04-12T02:48:19.591 [DEBUG] [Thread-181370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:48:19.608 [DEBUG] [Thread-181370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:48:19.608 [INFO] [Thread-181370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:19.611 [DEBUG] [Thread-181370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] client lang: <none>
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] server lang: <none>
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] kex follows: False
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] Compression: none
2026-04-12T02:48:19.612 [DEBUG] [Thread-181370] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:48:19.621 [DEBUG] [Thread-181370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:48:19.621 [DEBUG] [Thread-181370] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:48:19.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:48:19.622 [DEBUG] [Thread-181370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:48:19.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:48:19.623 [DEBUG] [Thread-181370] [transport.py] [_log()] userauth is OK
2026-04-12T02:48:19.623 [DEBUG] [Thread-181370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:48:19.623 [DEBUG] [Thread-181370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:48:19.623 [DEBUG] [Thread-181370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:48:19.623 [DEBUG] [Thread-181370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:48:19.643 [INFO] [Thread-181370] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:48:19.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:48:20.207 [DEBUG] [Thread-181370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:48:20.208 [DEBUG] [Thread-181370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:48:20.208 [DEBUG] [Thread-181370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:48:20.248 [DEBUG] [Thread-181370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:48:20.248 [DEBUG] [Thread-181370] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:48:20.252 [DEBUG] [Thread-181370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:48:20.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:48:20.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:48:20.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:48:20.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:48:20.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:48:20.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:48:20.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:48:20.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:48:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:48:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.033441 -999.00  +10.00  15.99     98   +9.80 1 3 1 3 1     0    0 0.21 -1.72 ----- 14.1 16.0 288.6 24.4 11.4 -1.3 11.2 -1.2 10.9 -1.2 11.2 -0.6
2026-04-12T02:48:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:48:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:48:20.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.033441
2026-04-12T02:48:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:48:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:48:20.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:48:20.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:48:20.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:48:20.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:47:38', tmtdew=-0.07039, humidity=100.406, cloud=0.0, wind=20.8541, temperature=10.5688, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:48:09.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:48:20.277 [DEBUG] [Thread-181370] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:48:20.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:48:20.378 [DEBUG] [Thread-181373] [transport.py] [_log()] starting thread (client mode): 0xb0f40f70
2026-04-12T02:48:20.378 [DEBUG] [Thread-181373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:48:20.393 [DEBUG] [Thread-181373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:48:20.393 [INFO] [Thread-181373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:48:20.400 [DEBUG] [Thread-181373] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] client lang: <none>
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] server lang: <none>
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] kex follows: False
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] Compression: none
2026-04-12T02:48:20.401 [DEBUG] [Thread-181373] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:48:20.464 [DEBUG] [Thread-181373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:48:20.464 [DEBUG] [Thread-181373] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:48:20.465 [DEBUG] [Thread-181373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:48:20.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:48:20.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:48:20.499 [DEBUG] [Thread-181375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:20.521 [DEBUG] [Thread-181373] [transport.py] [_log()] userauth is OK
2026-04-12T02:48:20.521 [DEBUG] [Thread-181373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:48:20.521 [DEBUG] [Thread-181373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:48:20.521 [DEBUG] [Thread-181373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:48:20.522 [DEBUG] [Thread-181373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:48:20.541 [INFO] [Thread-181373] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:48:20.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:48:20.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:48:21.349 [DEBUG] [Thread-181373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:48:21.350 [DEBUG] [Thread-181373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:48:21.398 [DEBUG] [Thread-181373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:48:21.399 [DEBUG] [Thread-181373] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:48:21.408 [DEBUG] [Thread-181373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:48:21.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:48:21.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:48:21.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-04-12T02:48:21.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:48:21.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:48:21.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:48:21.443 [DEBUG] [Thread-181373] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:48:34.468 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:34.469 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:35.560 [DEBUG] [Thread-181376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:50.597 [DEBUG] [Thread-181377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:48:51.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:48:51.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-04-12T02:48:52.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 48, 14), 0.01731, 100.187, 0.0, 21.5269, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:48:52.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:48:14
2026-04-12T02:48:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:48:53.267 [DEBUG] [Thread-181378] [transport.py] [_log()] starting thread (client mode): 0xb0f43100
2026-04-12T02:48:53.267 [DEBUG] [Thread-181378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:48:53.284 [DEBUG] [Thread-181378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:48:53.284 [INFO] [Thread-181378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:48:53.286 [DEBUG] [Thread-181378] [transport.py] [_log()] client lang: <none>
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] server lang: <none>
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] kex follows: False
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] Compression: none
2026-04-12T02:48:53.287 [DEBUG] [Thread-181378] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:48:53.302 [DEBUG] [Thread-181378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:48:53.302 [DEBUG] [Thread-181378] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:48:53.302 [DEBUG] [Thread-181378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:48:53.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:48:53.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:48:53.304 [DEBUG] [Thread-181378] [transport.py] [_log()] userauth is OK
2026-04-12T02:48:53.304 [DEBUG] [Thread-181378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:48:53.304 [DEBUG] [Thread-181378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:48:53.304 [DEBUG] [Thread-181378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:48:53.304 [DEBUG] [Thread-181378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:48:53.314 [INFO] [Thread-181378] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:48:53.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:48:53.890 [DEBUG] [Thread-181378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:48:53.896 [DEBUG] [Thread-181378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:48:53.897 [DEBUG] [Thread-181378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:48:53.931 [DEBUG] [Thread-181378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:48:53.931 [DEBUG] [Thread-181378] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:48:53.935 [DEBUG] [Thread-181378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:48:53.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:48:53.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:48:53.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:48:53.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:48:53.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:48:53.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:48:53.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:48:53.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:48:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:48:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.033788 -999.00  +10.10  19.60     98   +9.80 1 3 1 3 1     0    0 0.22 -1.57 ----- 19.2 19.6 272.2 23.5 11.4 -1.1 11.2 -1.3 10.8 -1.5 11.2 -0.5
2026-04-12T02:48:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:48:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:48:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.033788
2026-04-12T02:48:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:48:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:48:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:48:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:48:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:48:53.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:48:14', tmtdew=0.01731, humidity=100.187, cloud=0.0, wind=21.5269, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:48:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:48:53.962 [DEBUG] [Thread-181378] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:48:54.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:48:54.055 [DEBUG] [Thread-181381] [transport.py] [_log()] starting thread (client mode): 0xae5b1fc0
2026-04-12T02:48:54.055 [DEBUG] [Thread-181381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:48:54.069 [DEBUG] [Thread-181381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:48:54.070 [INFO] [Thread-181381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:48:54.077 [DEBUG] [Thread-181381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] client lang: <none>
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] server lang: <none>
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] kex follows: False
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] Compression: none
2026-04-12T02:48:54.078 [DEBUG] [Thread-181381] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:48:54.137 [DEBUG] [Thread-181381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:48:54.137 [DEBUG] [Thread-181381] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:48:54.138 [DEBUG] [Thread-181381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:48:54.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:48:54.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:48:54.193 [DEBUG] [Thread-181381] [transport.py] [_log()] userauth is OK
2026-04-12T02:48:54.194 [DEBUG] [Thread-181381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:48:54.194 [DEBUG] [Thread-181381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:48:54.194 [DEBUG] [Thread-181381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:48:54.194 [DEBUG] [Thread-181381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:48:54.213 [INFO] [Thread-181381] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:48:54.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:48:54.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:48:54.926 [DEBUG] [Thread-181383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:48:55.102 [DEBUG] [Thread-181381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:48:55.102 [DEBUG] [Thread-181381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:48:55.150 [DEBUG] [Thread-181381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:48:55.151 [DEBUG] [Thread-181381] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:48:55.160 [DEBUG] [Thread-181381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:48:55.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:48:55.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-04-12T02:48:55.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-04-12T02:48:55.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:48:55.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:48:55.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:48:55.199 [DEBUG] [Thread-181381] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:49:05.633 [DEBUG] [Thread-181384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:20.691 [DEBUG] [Thread-181385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:49:25.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:49:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:49:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 48, 49), -0.06042, 100.34, 0.0, 24.2762, 10.5357, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:49:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:48:49
2026-04-12T02:49:26.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:49:27.023 [DEBUG] [Thread-181386] [transport.py] [_log()] starting thread (client mode): 0xae5b6f50
2026-04-12T02:49:27.023 [DEBUG] [Thread-181386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:49:27.039 [DEBUG] [Thread-181386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:49:27.039 [INFO] [Thread-181386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] client lang: <none>
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] server lang: <none>
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] kex follows: False
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:49:27.042 [DEBUG] [Thread-181386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:49:27.043 [DEBUG] [Thread-181386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:49:27.043 [DEBUG] [Thread-181386] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:49:27.043 [DEBUG] [Thread-181386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:49:27.043 [DEBUG] [Thread-181386] [transport.py] [_log()] Compression: none
2026-04-12T02:49:27.043 [DEBUG] [Thread-181386] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:49:27.058 [DEBUG] [Thread-181386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:49:27.059 [DEBUG] [Thread-181386] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:49:27.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:49:27.061 [DEBUG] [Thread-181386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:49:27.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:49:27.101 [DEBUG] [Thread-181386] [transport.py] [_log()] userauth is OK
2026-04-12T02:49:27.101 [DEBUG] [Thread-181386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:49:27.102 [DEBUG] [Thread-181386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:49:27.102 [DEBUG] [Thread-181386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:49:27.102 [DEBUG] [Thread-181386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:49:27.123 [INFO] [Thread-181386] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:49:27.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:49:27.773 [DEBUG] [Thread-181386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:49:27.773 [DEBUG] [Thread-181386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:49:27.773 [DEBUG] [Thread-181386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:49:27.816 [DEBUG] [Thread-181386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:49:27.816 [DEBUG] [Thread-181386] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:49:27.819 [DEBUG] [Thread-181386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:49:27.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:49:27.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:49:27.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:49:27.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:49:27.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:49:27.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:49:27.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:49:27.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:49:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:49:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.034135 -999.00  +10.00  24.13     98   +9.70 1 3 1 3 1     0    0 0.22 -1.48 ----- 19.9 24.1 285.2 27.8 11.4 -1.2 11.2 -1.3 10.8 -1.5 -999.0 -999.0
2026-04-12T02:49:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:49:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:49:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.034135
2026-04-12T02:49:27.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:49:27.842 [DEBUG] [Thread-181386] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:49:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:49:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:49:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:49:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:49:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:48:49', tmtdew=-0.06042, humidity=100.34, cloud=0.0, wind=24.2762, temperature=10.5357, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:49:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:49:27.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:49:27.942 [DEBUG] [Thread-181389] [transport.py] [_log()] starting thread (client mode): 0xb0f429b0
2026-04-12T02:49:27.942 [DEBUG] [Thread-181389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:49:27.957 [DEBUG] [Thread-181389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:49:27.957 [INFO] [Thread-181389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] client lang: <none>
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] server lang: <none>
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] kex follows: False
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:49:27.965 [DEBUG] [Thread-181389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:49:27.966 [DEBUG] [Thread-181389] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:49:27.966 [DEBUG] [Thread-181389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:49:27.966 [DEBUG] [Thread-181389] [transport.py] [_log()] Compression: none
2026-04-12T02:49:27.966 [DEBUG] [Thread-181389] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:49:28.028 [DEBUG] [Thread-181389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:49:28.028 [DEBUG] [Thread-181389] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:49:28.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:49:28.029 [DEBUG] [Thread-181389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:49:28.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:49:28.085 [DEBUG] [Thread-181389] [transport.py] [_log()] userauth is OK
2026-04-12T02:49:28.086 [DEBUG] [Thread-181389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:49:28.086 [DEBUG] [Thread-181389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:49:28.086 [DEBUG] [Thread-181389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:49:28.086 [DEBUG] [Thread-181389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:49:28.111 [INFO] [Thread-181389] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:49:28.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:49:28.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:49:28.965 [DEBUG] [Thread-181389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:49:28.966 [DEBUG] [Thread-181389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:49:29.013 [DEBUG] [Thread-181389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:49:29.013 [DEBUG] [Thread-181389] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:49:29.023 [DEBUG] [Thread-181389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:49:29.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:49:29.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:49:29.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-04-12T02:49:29.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:49:29.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:49:29.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:49:29.065 [DEBUG] [Thread-181389] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:49:34.673 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:34.675 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:35.729 [DEBUG] [Thread-181391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:50.786 [DEBUG] [Thread-181392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:54.994 [DEBUG] [Thread-181393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:49:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:49:59.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:49:59.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-04-12T02:50:00.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 49, 25), 0.019835, 100.17, 0.0, 23.5555, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:50:00.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:49:25
2026-04-12T02:50:00.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:50:00.881 [DEBUG] [Thread-181394] [transport.py] [_log()] starting thread (client mode): 0xb0f6c940
2026-04-12T02:50:00.882 [DEBUG] [Thread-181394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:50:00.902 [DEBUG] [Thread-181394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:50:00.902 [INFO] [Thread-181394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] client lang: <none>
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] server lang: <none>
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] kex follows: False
2026-04-12T02:50:00.905 [DEBUG] [Thread-181394] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:50:00.906 [DEBUG] [Thread-181394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:50:00.906 [DEBUG] [Thread-181394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:50:00.906 [DEBUG] [Thread-181394] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:50:00.906 [DEBUG] [Thread-181394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:50:00.906 [DEBUG] [Thread-181394] [transport.py] [_log()] Compression: none
2026-04-12T02:50:00.906 [DEBUG] [Thread-181394] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:50:00.922 [DEBUG] [Thread-181394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:50:00.922 [DEBUG] [Thread-181394] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:50:00.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:50:00.924 [DEBUG] [Thread-181394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:50:00.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:50:00.925 [DEBUG] [Thread-181394] [transport.py] [_log()] userauth is OK
2026-04-12T02:50:00.925 [DEBUG] [Thread-181394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:50:00.925 [DEBUG] [Thread-181394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:50:00.926 [DEBUG] [Thread-181394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:50:00.926 [DEBUG] [Thread-181394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:50:00.950 [INFO] [Thread-181394] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:50:00.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:50:01.523 [DEBUG] [Thread-181394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:50:01.523 [DEBUG] [Thread-181394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:50:01.523 [DEBUG] [Thread-181394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:50:01.565 [DEBUG] [Thread-181394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:50:01.565 [DEBUG] [Thread-181394] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:50:01.567 [DEBUG] [Thread-181394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:50:01.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:50:01.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:50:01.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:50:01.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:50:01.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:50:01.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:50:01.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:50:01.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:50:01.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:50:01.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.034482 -999.00  +10.00  18.95     98   +9.70 1 3 1 3 1     0    0 0.22 -1.50 ----- 23.1 18.9 291.0 24.1 11.4 -1.3 11.2 -1.3 10.8 -1.4 11.2 -0.5
2026-04-12T02:50:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:50:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:50:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.034482
2026-04-12T02:50:01.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:50:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:50:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:50:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:50:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:50:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:49:25', tmtdew=0.019835, humidity=100.17, cloud=0.0, wind=23.5555, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:49:39.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:50:01.597 [DEBUG] [Thread-181394] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:50:01.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:50:01.688 [DEBUG] [Thread-181397] [transport.py] [_log()] starting thread (client mode): 0xb0f6fa60
2026-04-12T02:50:01.688 [DEBUG] [Thread-181397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:50:01.702 [DEBUG] [Thread-181397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:50:01.702 [INFO] [Thread-181397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:50:01.709 [DEBUG] [Thread-181397] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] client lang: <none>
2026-04-12T02:50:01.710 [DEBUG] [Thread-181397] [transport.py] [_log()] server lang: <none>
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] kex follows: False
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] Compression: none
2026-04-12T02:50:01.711 [DEBUG] [Thread-181397] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:50:01.769 [DEBUG] [Thread-181397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:50:01.770 [DEBUG] [Thread-181397] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:50:01.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:50:01.771 [DEBUG] [Thread-181397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:50:01.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:50:01.829 [DEBUG] [Thread-181397] [transport.py] [_log()] userauth is OK
2026-04-12T02:50:01.830 [DEBUG] [Thread-181397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:50:01.830 [DEBUG] [Thread-181397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:50:01.830 [DEBUG] [Thread-181397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:50:01.830 [DEBUG] [Thread-181397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:50:01.855 [INFO] [Thread-181397] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:50:01.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:50:01.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:50:02.681 [DEBUG] [Thread-181397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:50:02.681 [DEBUG] [Thread-181397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:50:02.729 [DEBUG] [Thread-181397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:50:02.729 [DEBUG] [Thread-181397] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:50:02.738 [DEBUG] [Thread-181397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:50:02.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:50:02.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-04-12T02:50:02.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T02:50:02.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:50:02.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:50:02.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:50:02.775 [DEBUG] [Thread-181397] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:50:05.822 [DEBUG] [Thread-181399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:50:20.884 [DEBUG] [Thread-181400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:50:32.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:50:32.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:50:32.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-04-12T02:50:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 49, 25), 0.019835, 100.17, 0.0, 23.5555, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:50:34.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:49:25
2026-04-12T02:50:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:50:34.581 [DEBUG] [Thread-181401] [transport.py] [_log()] starting thread (client mode): 0xb0f43550
2026-04-12T02:50:34.581 [DEBUG] [Thread-181401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:50:34.601 [DEBUG] [Thread-181401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:50:34.601 [INFO] [Thread-181401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:50:34.605 [DEBUG] [Thread-181401] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:50:34.605 [DEBUG] [Thread-181401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:50:34.605 [DEBUG] [Thread-181401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] client lang: <none>
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] server lang: <none>
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] kex follows: False
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:50:34.606 [DEBUG] [Thread-181401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:50:34.607 [DEBUG] [Thread-181401] [transport.py] [_log()] Compression: none
2026-04-12T02:50:34.607 [DEBUG] [Thread-181401] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:50:34.621 [DEBUG] [Thread-181401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:50:34.622 [DEBUG] [Thread-181401] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:50:34.622 [DEBUG] [Thread-181401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:50:34.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:50:34.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:50:34.624 [DEBUG] [Thread-181401] [transport.py] [_log()] userauth is OK
2026-04-12T02:50:34.624 [DEBUG] [Thread-181401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:50:34.624 [DEBUG] [Thread-181401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:50:34.625 [DEBUG] [Thread-181401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:50:34.625 [DEBUG] [Thread-181401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:50:34.649 [INFO] [Thread-181401] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:50:34.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:50:34.878 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:50:34.879 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:50:35.251 [DEBUG] [Thread-181401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:50:35.252 [DEBUG] [Thread-181401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:50:35.252 [DEBUG] [Thread-181401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:50:35.292 [DEBUG] [Thread-181401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:50:35.292 [DEBUG] [Thread-181401] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:50:35.295 [DEBUG] [Thread-181401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:50:35.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:50:35.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:50:35.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:50:35.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:50:35.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:50:35.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:50:35.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:50:35.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:50:35.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:50:35.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.034830 -999.00  +10.00  18.32     98   +9.70 1 3 1 3 1     0    0 0.23 -1.32 ----- 20.3 18.3 287.2 24.1 11.3 -1.6 11.2 -1.3 10.8 -1.6 11.2 -0.6
2026-04-12T02:50:35.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:50:35.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:50:35.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.034830
2026-04-12T02:50:35.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:50:35.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:50:35.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:50:35.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:50:35.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:50:35.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:49:25', tmtdew=0.019835, humidity=100.17, cloud=0.0, wind=23.5555, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:50:09.312', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:50:35.322 [DEBUG] [Thread-181401] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:50:35.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:50:35.417 [DEBUG] [Thread-181404] [transport.py] [_log()] starting thread (client mode): 0xb0fea650
2026-04-12T02:50:35.417 [DEBUG] [Thread-181404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:50:35.432 [DEBUG] [Thread-181404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:50:35.432 [INFO] [Thread-181404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:50:35.440 [DEBUG] [Thread-181404] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:50:35.440 [DEBUG] [Thread-181404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:50:35.440 [DEBUG] [Thread-181404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:50:35.440 [DEBUG] [Thread-181404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:35.440 [DEBUG] [Thread-181404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] client lang: <none>
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] server lang: <none>
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] kex follows: False
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] Compression: none
2026-04-12T02:50:35.441 [DEBUG] [Thread-181404] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:50:35.497 [DEBUG] [Thread-181404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:50:35.497 [DEBUG] [Thread-181404] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:50:35.498 [DEBUG] [Thread-181404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:50:35.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:50:35.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:50:35.553 [DEBUG] [Thread-181404] [transport.py] [_log()] userauth is OK
2026-04-12T02:50:35.554 [DEBUG] [Thread-181404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:50:35.554 [DEBUG] [Thread-181404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:50:35.554 [DEBUG] [Thread-181404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:50:35.554 [DEBUG] [Thread-181404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:50:35.573 [INFO] [Thread-181404] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:50:35.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:50:35.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:50:35.920 [DEBUG] [Thread-181406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:50:36.373 [DEBUG] [Thread-181404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:50:36.373 [DEBUG] [Thread-181404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:50:36.421 [DEBUG] [Thread-181404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:50:36.421 [DEBUG] [Thread-181404] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:50:36.430 [DEBUG] [Thread-181404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:50:36.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:50:36.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-04-12T02:50:36.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-04-12T02:50:36.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:50:36.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:50:36.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:50:36.467 [DEBUG] [Thread-181404] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:50:50.970 [DEBUG] [Thread-181407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:50:55.061 [DEBUG] [Thread-181408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:06.002 [DEBUG] [Thread-181409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:06.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:51:06.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:51:06.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-04-12T02:51:07.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 50, 35), -0.06033, 100.34, 0.0, 24.6643, 10.4693, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:51:07.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:50:35
2026-04-12T02:51:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:51:08.334 [DEBUG] [Thread-181410] [transport.py] [_log()] starting thread (client mode): 0xb0f6d660
2026-04-12T02:51:08.334 [DEBUG] [Thread-181410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:51:08.355 [DEBUG] [Thread-181410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:51:08.355 [INFO] [Thread-181410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:51:08.358 [DEBUG] [Thread-181410] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:51:08.358 [DEBUG] [Thread-181410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:51:08.358 [DEBUG] [Thread-181410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] client lang: <none>
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] server lang: <none>
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] kex follows: False
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:51:08.359 [DEBUG] [Thread-181410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:51:08.360 [DEBUG] [Thread-181410] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:51:08.360 [DEBUG] [Thread-181410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:51:08.360 [DEBUG] [Thread-181410] [transport.py] [_log()] Compression: none
2026-04-12T02:51:08.360 [DEBUG] [Thread-181410] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:51:08.379 [DEBUG] [Thread-181410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:51:08.379 [DEBUG] [Thread-181410] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:51:08.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:51:08.380 [DEBUG] [Thread-181410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:51:08.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:51:08.383 [DEBUG] [Thread-181410] [transport.py] [_log()] userauth is OK
2026-04-12T02:51:08.383 [DEBUG] [Thread-181410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:51:08.383 [DEBUG] [Thread-181410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:51:08.383 [DEBUG] [Thread-181410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:51:08.383 [DEBUG] [Thread-181410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:51:08.401 [INFO] [Thread-181410] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:51:08.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:51:09.033 [DEBUG] [Thread-181410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:51:09.033 [DEBUG] [Thread-181410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:51:09.033 [DEBUG] [Thread-181410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:51:09.074 [DEBUG] [Thread-181410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:51:09.074 [DEBUG] [Thread-181410] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:51:09.078 [DEBUG] [Thread-181410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:51:09.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:51:09.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:51:09.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:51:09.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:51:09.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:51:09.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:51:09.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.035177 -999.00  +10.00  18.94     98   +9.70 1 3 1 3 1     0    0 0.23 -1.12 ----- 14.8 18.9 280.6 22.8 11.3 -1.2 11.2 -1.4 10.8 -1.3 11.2 -0.5
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.035177
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:51:09.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:50:35', tmtdew=-0.06033, humidity=100.34, cloud=0.0, wind=24.6643, temperature=10.4693, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:50:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:51:09.097 [DEBUG] [Thread-181410] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:51:09.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:51:09.178 [DEBUG] [Thread-181413] [transport.py] [_log()] starting thread (client mode): 0xb0f6c7f0
2026-04-12T02:51:09.179 [DEBUG] [Thread-181413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:51:09.194 [DEBUG] [Thread-181413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:51:09.194 [INFO] [Thread-181413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] client lang: <none>
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] server lang: <none>
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] kex follows: False
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:51:09.202 [DEBUG] [Thread-181413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:51:09.203 [DEBUG] [Thread-181413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:51:09.203 [DEBUG] [Thread-181413] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:51:09.203 [DEBUG] [Thread-181413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:51:09.203 [DEBUG] [Thread-181413] [transport.py] [_log()] Compression: none
2026-04-12T02:51:09.203 [DEBUG] [Thread-181413] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:51:09.265 [DEBUG] [Thread-181413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:51:09.266 [DEBUG] [Thread-181413] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:51:09.266 [DEBUG] [Thread-181413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:51:09.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:51:09.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:51:09.331 [DEBUG] [Thread-181413] [transport.py] [_log()] userauth is OK
2026-04-12T02:51:09.332 [DEBUG] [Thread-181413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:51:09.332 [DEBUG] [Thread-181413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:51:09.332 [DEBUG] [Thread-181413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:51:09.332 [DEBUG] [Thread-181413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:51:09.355 [INFO] [Thread-181413] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:51:09.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:51:09.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:51:10.230 [DEBUG] [Thread-181413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:51:10.230 [DEBUG] [Thread-181413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:51:10.278 [DEBUG] [Thread-181413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:51:10.278 [DEBUG] [Thread-181413] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:51:10.288 [DEBUG] [Thread-181413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:51:10.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:51:10.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-04-12T02:51:10.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-04-12T02:51:10.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:51:10.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:51:10.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:51:10.326 [DEBUG] [Thread-181413] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:51:21.039 [DEBUG] [Thread-181415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:35.083 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:35.085 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:36.095 [DEBUG] [Thread-181416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:40.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:51:40.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:51:40.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:51:41.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 51, 12), 0.017355, 100.187, 0.0, 21.4556, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:51:41.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:51:12
2026-04-12T02:51:41.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:51:42.136 [DEBUG] [Thread-181417] [transport.py] [_log()] starting thread (client mode): 0xb0f42350
2026-04-12T02:51:42.136 [DEBUG] [Thread-181417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:51:42.155 [DEBUG] [Thread-181417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:51:42.155 [INFO] [Thread-181417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:51:42.158 [DEBUG] [Thread-181417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] client lang: <none>
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] server lang: <none>
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] kex follows: False
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] Compression: none
2026-04-12T02:51:42.159 [DEBUG] [Thread-181417] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:51:42.176 [DEBUG] [Thread-181417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:51:42.176 [DEBUG] [Thread-181417] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:51:42.177 [DEBUG] [Thread-181417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:51:42.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:51:42.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:51:42.179 [DEBUG] [Thread-181417] [transport.py] [_log()] userauth is OK
2026-04-12T02:51:42.179 [DEBUG] [Thread-181417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:51:42.179 [DEBUG] [Thread-181417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:51:42.180 [DEBUG] [Thread-181417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:51:42.180 [DEBUG] [Thread-181417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:51:42.214 [INFO] [Thread-181417] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:51:42.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:51:42.863 [DEBUG] [Thread-181417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:51:42.863 [DEBUG] [Thread-181417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:51:42.864 [DEBUG] [Thread-181417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:51:42.905 [DEBUG] [Thread-181417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:51:42.905 [DEBUG] [Thread-181417] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:51:42.909 [DEBUG] [Thread-181417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:51:42.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:51:42.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:51:42.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:51:42.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:51:42.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:51:42.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:51:42.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:51:42.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:51:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:51:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.035524 -999.00  +10.00  17.76     98   +9.70 1 3 1 3 1     0    0 0.24 -0.95 ----- 18.4 17.8 298.6 22.8 11.3 -1.3 11.2 -1.2 10.8 -1.2 11.2 -0.6
2026-04-12T02:51:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:51:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:51:42.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.035524
2026-04-12T02:51:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:51:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:51:42.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:51:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:51:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:51:42.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:51:12', tmtdew=0.017355, humidity=100.187, cloud=0.0, wind=21.4556, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:51:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:51:42.934 [DEBUG] [Thread-181417] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:51:43.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:51:43.027 [DEBUG] [Thread-181420] [transport.py] [_log()] starting thread (client mode): 0xae537310
2026-04-12T02:51:43.027 [DEBUG] [Thread-181420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:51:43.041 [DEBUG] [Thread-181420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:51:43.041 [INFO] [Thread-181420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:51:43.048 [DEBUG] [Thread-181420] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] client lang: <none>
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] server lang: <none>
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] kex follows: False
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:51:43.049 [DEBUG] [Thread-181420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:51:43.050 [DEBUG] [Thread-181420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:51:43.050 [DEBUG] [Thread-181420] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:51:43.050 [DEBUG] [Thread-181420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:51:43.050 [DEBUG] [Thread-181420] [transport.py] [_log()] Compression: none
2026-04-12T02:51:43.050 [DEBUG] [Thread-181420] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:51:43.109 [DEBUG] [Thread-181420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:51:43.110 [DEBUG] [Thread-181420] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:51:43.110 [DEBUG] [Thread-181420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:51:43.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:51:43.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:51:43.165 [DEBUG] [Thread-181420] [transport.py] [_log()] userauth is OK
2026-04-12T02:51:43.165 [DEBUG] [Thread-181420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:51:43.165 [DEBUG] [Thread-181420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:51:43.165 [DEBUG] [Thread-181420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:51:43.165 [DEBUG] [Thread-181420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:51:43.184 [INFO] [Thread-181420] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:51:43.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:51:43.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:51:44.028 [DEBUG] [Thread-181420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:51:44.028 [DEBUG] [Thread-181420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:51:44.076 [DEBUG] [Thread-181420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:51:44.076 [DEBUG] [Thread-181420] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:51:44.085 [DEBUG] [Thread-181420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:51:44.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:51:44.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-04-12T02:51:44.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-04-12T02:51:44.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:51:44.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:51:44.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:51:44.122 [DEBUG] [Thread-181420] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:51:51.135 [DEBUG] [Thread-181422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:51:55.129 [DEBUG] [Thread-181423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:06.190 [DEBUG] [Thread-181424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:52:14.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:52:14.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-04-12T02:52:15.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 51, 47), -0.06029, 100.34, 0.0, 23.7823, 10.4362, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:52:15.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:51:47
2026-04-12T02:52:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:52:16.020 [DEBUG] [Thread-181425] [transport.py] [_log()] starting thread (client mode): 0xb0f6d8d0
2026-04-12T02:52:16.020 [DEBUG] [Thread-181425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:52:16.042 [DEBUG] [Thread-181425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:52:16.042 [INFO] [Thread-181425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:52:16.046 [DEBUG] [Thread-181425] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:52:16.046 [DEBUG] [Thread-181425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:52:16.046 [DEBUG] [Thread-181425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] client lang: <none>
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] server lang: <none>
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] kex follows: False
2026-04-12T02:52:16.047 [DEBUG] [Thread-181425] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:52:16.048 [DEBUG] [Thread-181425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:52:16.048 [DEBUG] [Thread-181425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:52:16.048 [DEBUG] [Thread-181425] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:52:16.048 [DEBUG] [Thread-181425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:52:16.048 [DEBUG] [Thread-181425] [transport.py] [_log()] Compression: none
2026-04-12T02:52:16.048 [DEBUG] [Thread-181425] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:52:16.066 [DEBUG] [Thread-181425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:52:16.066 [DEBUG] [Thread-181425] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:52:16.067 [DEBUG] [Thread-181425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:52:16.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:52:16.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:52:16.068 [DEBUG] [Thread-181425] [transport.py] [_log()] userauth is OK
2026-04-12T02:52:16.069 [DEBUG] [Thread-181425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:52:16.069 [DEBUG] [Thread-181425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:52:16.069 [DEBUG] [Thread-181425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:52:16.069 [DEBUG] [Thread-181425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:52:16.093 [INFO] [Thread-181425] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:52:16.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:52:16.676 [DEBUG] [Thread-181425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:52:16.677 [DEBUG] [Thread-181425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:52:16.677 [DEBUG] [Thread-181425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:52:16.718 [DEBUG] [Thread-181425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:52:16.718 [DEBUG] [Thread-181425] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:52:16.721 [DEBUG] [Thread-181425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:52:16.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:52:16.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:52:16.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:52:16.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:52:16.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:52:16.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:52:16.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:52:16.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:52:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:52:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.035871 -999.00  +10.00  19.28     98   +9.70 1 3 1 3 1     0    0 0.24 -0.76 ----- 19.1 19.3 284.6 25.2 11.3 -1.6 11.2 -1.3 10.8 -1.3 11.2 -0.5
2026-04-12T02:52:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:52:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:52:16.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.035871
2026-04-12T02:52:16.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:52:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:52:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:52:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:52:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:52:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:51:47', tmtdew=-0.06029, humidity=100.34, cloud=0.0, wind=23.7823, temperature=10.4362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:51:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:52:16.747 [DEBUG] [Thread-181425] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:52:16.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:52:16.842 [DEBUG] [Thread-181428] [transport.py] [_log()] starting thread (client mode): 0xb0f40220
2026-04-12T02:52:16.842 [DEBUG] [Thread-181428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:52:16.856 [DEBUG] [Thread-181428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:52:16.856 [INFO] [Thread-181428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:16.864 [DEBUG] [Thread-181428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] client lang: <none>
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] server lang: <none>
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] kex follows: False
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] Compression: none
2026-04-12T02:52:16.865 [DEBUG] [Thread-181428] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:52:16.920 [DEBUG] [Thread-181428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:52:16.920 [DEBUG] [Thread-181428] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:52:16.920 [DEBUG] [Thread-181428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:52:16.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:52:16.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:52:16.976 [DEBUG] [Thread-181428] [transport.py] [_log()] userauth is OK
2026-04-12T02:52:16.977 [DEBUG] [Thread-181428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:52:16.977 [DEBUG] [Thread-181428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:52:16.977 [DEBUG] [Thread-181428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:52:16.977 [DEBUG] [Thread-181428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:52:16.991 [INFO] [Thread-181428] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:52:16.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:52:16.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:52:17.806 [DEBUG] [Thread-181428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:52:17.806 [DEBUG] [Thread-181428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:52:17.855 [DEBUG] [Thread-181428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:52:17.856 [DEBUG] [Thread-181428] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:52:17.865 [DEBUG] [Thread-181428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:52:17.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:52:17.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-04-12T02:52:17.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-04-12T02:52:17.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:52:17.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:52:17.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:52:17.899 [DEBUG] [Thread-181428] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:52:21.225 [DEBUG] [Thread-181430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:35.290 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:35.291 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:36.278 [DEBUG] [Thread-181431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:52:47.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:52:47.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-04-12T02:52:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 52, 23), -0.030145, 100.17, 0.0, 20.786, 9.96808, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:52:49.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:52:23
2026-04-12T02:52:49.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:52:49.805 [DEBUG] [Thread-181432] [transport.py] [_log()] starting thread (client mode): 0xb0fe82e0
2026-04-12T02:52:49.805 [DEBUG] [Thread-181432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:52:49.826 [DEBUG] [Thread-181432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:52:49.826 [INFO] [Thread-181432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:52:49.829 [DEBUG] [Thread-181432] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:52:49.829 [DEBUG] [Thread-181432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:52:49.829 [DEBUG] [Thread-181432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:52:49.829 [DEBUG] [Thread-181432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:49.829 [DEBUG] [Thread-181432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] client lang: <none>
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] server lang: <none>
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] kex follows: False
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] Compression: none
2026-04-12T02:52:49.830 [DEBUG] [Thread-181432] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:52:49.847 [DEBUG] [Thread-181432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:52:49.847 [DEBUG] [Thread-181432] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:52:49.847 [DEBUG] [Thread-181432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:52:49.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:52:49.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:52:49.848 [DEBUG] [Thread-181432] [transport.py] [_log()] userauth is OK
2026-04-12T02:52:49.848 [DEBUG] [Thread-181432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:52:49.848 [DEBUG] [Thread-181432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:52:49.848 [DEBUG] [Thread-181432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:52:49.848 [DEBUG] [Thread-181432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:52:49.858 [INFO] [Thread-181432] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:52:49.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:52:50.469 [DEBUG] [Thread-181432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:52:50.469 [DEBUG] [Thread-181432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:52:50.470 [DEBUG] [Thread-181432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:52:50.510 [DEBUG] [Thread-181432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:52:50.510 [DEBUG] [Thread-181432] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:52:50.514 [DEBUG] [Thread-181432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:52:50.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:52:50.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:52:50.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:52:50.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:52:50.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:52:50.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:52:50.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:52:50.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:52:50.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:52:50.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.036566 -999.00  +10.00  18.44     98   +9.70 1 3 1 3 1     0    0 0.26 -0.24 ----- 17.0 18.4 283.8 22.6 11.3 -1.2 11.2 -1.3 10.8 -1.4 11.2 -0.5
2026-04-12T02:52:50.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:52:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:52:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.036566
2026-04-12T02:52:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:52:50.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:52:50.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:52:50.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:52:50.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:52:50.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:52:23', tmtdew=-0.030145, humidity=100.17, cloud=0.0, wind=20.786, temperature=9.96808, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:52:39.302', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:52:50.540 [DEBUG] [Thread-181432] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:52:50.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:52:50.634 [DEBUG] [Thread-181435] [transport.py] [_log()] starting thread (client mode): 0xb0feb130
2026-04-12T02:52:50.634 [DEBUG] [Thread-181435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:52:50.648 [DEBUG] [Thread-181435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:52:50.648 [INFO] [Thread-181435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:52:50.656 [DEBUG] [Thread-181435] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:52:50.657 [DEBUG] [Thread-181435] [transport.py] [_log()] client lang: <none>
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] server lang: <none>
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] kex follows: False
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] Compression: none
2026-04-12T02:52:50.658 [DEBUG] [Thread-181435] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:52:50.713 [DEBUG] [Thread-181435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:52:50.714 [DEBUG] [Thread-181435] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:52:50.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:52:50.715 [DEBUG] [Thread-181435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:52:50.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:52:50.769 [DEBUG] [Thread-181435] [transport.py] [_log()] userauth is OK
2026-04-12T02:52:50.769 [DEBUG] [Thread-181435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:52:50.770 [DEBUG] [Thread-181435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:52:50.770 [DEBUG] [Thread-181435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:52:50.770 [DEBUG] [Thread-181435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:52:50.788 [INFO] [Thread-181435] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:52:50.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:52:50.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:52:51.315 [DEBUG] [Thread-181437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:52:51.668 [DEBUG] [Thread-181435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:52:51.669 [DEBUG] [Thread-181435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:52:51.717 [DEBUG] [Thread-181435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:52:51.717 [DEBUG] [Thread-181435] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:52:51.726 [DEBUG] [Thread-181435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:52:51.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:52:51.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:52:51.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-04-12T02:52:51.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:52:51.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:52:51.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:52:51.763 [DEBUG] [Thread-181435] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:52:55.194 [DEBUG] [Thread-181438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:06.366 [DEBUG] [Thread-181439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:21.404 [DEBUG] [Thread-181440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:53:21.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:53:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:53:23.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 52, 58), -0.027705, 100.153, 0.0, 22.3913, 10.0513, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:53:23.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:52:58
2026-04-12T02:53:23.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:53:23.637 [DEBUG] [Thread-181441] [transport.py] [_log()] starting thread (client mode): 0xb0fe8850
2026-04-12T02:53:23.637 [DEBUG] [Thread-181441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:53:23.656 [DEBUG] [Thread-181441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:53:23.656 [INFO] [Thread-181441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:53:23.659 [DEBUG] [Thread-181441] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:53:23.659 [DEBUG] [Thread-181441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] client lang: <none>
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] server lang: <none>
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] kex follows: False
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] Compression: none
2026-04-12T02:53:23.660 [DEBUG] [Thread-181441] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:53:23.676 [DEBUG] [Thread-181441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:53:23.677 [DEBUG] [Thread-181441] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:53:23.677 [DEBUG] [Thread-181441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:53:23.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:53:23.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:53:23.679 [DEBUG] [Thread-181441] [transport.py] [_log()] userauth is OK
2026-04-12T02:53:23.679 [DEBUG] [Thread-181441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:53:23.680 [DEBUG] [Thread-181441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:53:23.680 [DEBUG] [Thread-181441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:53:23.680 [DEBUG] [Thread-181441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:53:23.700 [INFO] [Thread-181441] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:53:23.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:53:24.259 [DEBUG] [Thread-181441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:53:24.259 [DEBUG] [Thread-181441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:53:24.260 [DEBUG] [Thread-181441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:53:24.300 [DEBUG] [Thread-181441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:53:24.300 [DEBUG] [Thread-181441] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:53:24.304 [DEBUG] [Thread-181441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:53:24.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:53:24.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:53:24.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:53:24.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:53:24.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:53:24.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:53:24.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:53:24.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:53:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:53:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.036913 -999.00  +10.00  21.46     98   +9.70 1 3 1 3 1     0    0 0.27 0.03 ----- 19.5 21.5 281.8 24.7 11.3 -1.5 11.2 -1.6 10.7 -1.3 11.2 -0.7
2026-04-12T02:53:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:53:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:53:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.036913
2026-04-12T02:53:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:53:24.328 [DEBUG] [Thread-181441] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:53:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:53:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:53:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:53:24.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:53:24.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:52:58', tmtdew=-0.027705, humidity=100.153, cloud=0.0, wind=22.3913, temperature=10.0513, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:53:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:53:24.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:53:24.422 [DEBUG] [Thread-181444] [transport.py] [_log()] starting thread (client mode): 0xae563b80
2026-04-12T02:53:24.422 [DEBUG] [Thread-181444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:53:24.436 [DEBUG] [Thread-181444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:53:24.437 [INFO] [Thread-181444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:53:24.444 [DEBUG] [Thread-181444] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:53:24.444 [DEBUG] [Thread-181444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:53:24.444 [DEBUG] [Thread-181444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:53:24.444 [DEBUG] [Thread-181444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:24.444 [DEBUG] [Thread-181444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:24.444 [DEBUG] [Thread-181444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] client lang: <none>
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] server lang: <none>
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] kex follows: False
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:53:24.445 [DEBUG] [Thread-181444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:53:24.446 [DEBUG] [Thread-181444] [transport.py] [_log()] Compression: none
2026-04-12T02:53:24.446 [DEBUG] [Thread-181444] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:53:24.506 [DEBUG] [Thread-181444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:53:24.506 [DEBUG] [Thread-181444] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:53:24.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:53:24.507 [DEBUG] [Thread-181444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:53:24.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:53:24.566 [DEBUG] [Thread-181444] [transport.py] [_log()] userauth is OK
2026-04-12T02:53:24.566 [DEBUG] [Thread-181444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:53:24.566 [DEBUG] [Thread-181444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:53:24.566 [DEBUG] [Thread-181444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:53:24.566 [DEBUG] [Thread-181444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:53:24.585 [INFO] [Thread-181444] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:53:24.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:53:24.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:53:25.442 [DEBUG] [Thread-181444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:53:25.443 [DEBUG] [Thread-181444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:53:25.490 [DEBUG] [Thread-181444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:53:25.491 [DEBUG] [Thread-181444] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:53:25.500 [DEBUG] [Thread-181444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:53:25.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:53:25.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-04-12T02:53:25.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-04-12T02:53:25.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:53:25.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:53:25.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:53:25.538 [DEBUG] [Thread-181444] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:53:35.495 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:35.496 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:36.440 [DEBUG] [Thread-181446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:51.496 [DEBUG] [Thread-181447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:55.261 [DEBUG] [Thread-181448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:53:55.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:53:55.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:53:55.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-04-12T02:53:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 53, 33), -0.06033, 100.34, 0.0, 21.7714, 10.4693, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:53:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:53:33
2026-04-12T02:53:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:53:57.385 [DEBUG] [Thread-181449] [transport.py] [_log()] starting thread (client mode): 0xb0feada0
2026-04-12T02:53:57.385 [DEBUG] [Thread-181449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:53:57.406 [DEBUG] [Thread-181449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:53:57.406 [INFO] [Thread-181449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:57.409 [DEBUG] [Thread-181449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] client lang: <none>
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] server lang: <none>
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] kex follows: False
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] Compression: none
2026-04-12T02:53:57.410 [DEBUG] [Thread-181449] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:53:57.427 [DEBUG] [Thread-181449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:53:57.428 [DEBUG] [Thread-181449] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:53:57.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:53:57.429 [DEBUG] [Thread-181449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:53:57.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:53:57.431 [DEBUG] [Thread-181449] [transport.py] [_log()] userauth is OK
2026-04-12T02:53:57.431 [DEBUG] [Thread-181449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:53:57.431 [DEBUG] [Thread-181449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:53:57.431 [DEBUG] [Thread-181449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:53:57.432 [DEBUG] [Thread-181449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:53:57.455 [INFO] [Thread-181449] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:53:57.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:53:58.094 [DEBUG] [Thread-181449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:53:58.094 [DEBUG] [Thread-181449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:53:58.095 [DEBUG] [Thread-181449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:53:58.136 [DEBUG] [Thread-181449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:53:58.136 [DEBUG] [Thread-181449] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:53:58.138 [DEBUG] [Thread-181449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:53:58.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:53:58.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:53:58.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:53:58.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:53:58.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:53:58.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:53:58.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:53:58.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:53:58.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:53:58.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.037260 -999.00  +10.00  17.92     98   +9.70 1 3 1 3 1     0    0 0.27 -0.02 ----- 17.0 17.9 283.0 22.7 11.3 -1.3 11.3 -1.3 10.8 -1.2 11.2 -0.6
2026-04-12T02:53:58.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:53:58.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:53:58.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.037260
2026-04-12T02:53:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:53:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:53:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:53:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:53:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:53:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:53:33', tmtdew=-0.06033, humidity=100.34, cloud=0.0, wind=21.7714, temperature=10.4693, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:53:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:53:58.160 [DEBUG] [Thread-181449] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:53:58.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:53:58.251 [DEBUG] [Thread-181452] [transport.py] [_log()] starting thread (client mode): 0xb0f6e530
2026-04-12T02:53:58.251 [DEBUG] [Thread-181452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:53:58.266 [DEBUG] [Thread-181452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:53:58.266 [INFO] [Thread-181452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:58.274 [DEBUG] [Thread-181452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] client lang: <none>
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] server lang: <none>
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] kex follows: False
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] Compression: none
2026-04-12T02:53:58.275 [DEBUG] [Thread-181452] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:53:58.333 [DEBUG] [Thread-181452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:53:58.333 [DEBUG] [Thread-181452] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:53:58.334 [DEBUG] [Thread-181452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:53:58.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:53:58.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:53:58.390 [DEBUG] [Thread-181452] [transport.py] [_log()] userauth is OK
2026-04-12T02:53:58.390 [DEBUG] [Thread-181452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:53:58.390 [DEBUG] [Thread-181452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:53:58.390 [DEBUG] [Thread-181452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:53:58.390 [DEBUG] [Thread-181452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:53:58.414 [INFO] [Thread-181452] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:53:58.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:53:58.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:53:59.228 [DEBUG] [Thread-181452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:53:59.228 [DEBUG] [Thread-181452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:53:59.276 [DEBUG] [Thread-181452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:53:59.276 [DEBUG] [Thread-181452] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:53:59.286 [DEBUG] [Thread-181452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:53:59.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:53:59.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-04-12T02:53:59.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-04-12T02:53:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:53:59.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:53:59.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:53:59.324 [DEBUG] [Thread-181452] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:54:06.532 [DEBUG] [Thread-181454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:54:21.582 [DEBUG] [Thread-181455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:54:29.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:54:29.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:54:29.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-04-12T02:54:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 54, 9), -0.032645, 100.187, 0.0, 22.7794, 9.98466, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:54:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:54:09
2026-04-12T02:54:31.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:54:31.208 [DEBUG] [Thread-181456] [transport.py] [_log()] starting thread (client mode): 0xae5355a0
2026-04-12T02:54:31.208 [DEBUG] [Thread-181456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:54:31.229 [DEBUG] [Thread-181456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:54:31.229 [INFO] [Thread-181456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] client lang: <none>
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] server lang: <none>
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] kex follows: False
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:54:31.232 [DEBUG] [Thread-181456] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:54:31.233 [DEBUG] [Thread-181456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:54:31.233 [DEBUG] [Thread-181456] [transport.py] [_log()] Compression: none
2026-04-12T02:54:31.233 [DEBUG] [Thread-181456] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:54:31.252 [DEBUG] [Thread-181456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:54:31.252 [DEBUG] [Thread-181456] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:54:31.253 [DEBUG] [Thread-181456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:54:31.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:54:31.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:54:31.255 [DEBUG] [Thread-181456] [transport.py] [_log()] userauth is OK
2026-04-12T02:54:31.255 [DEBUG] [Thread-181456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:54:31.255 [DEBUG] [Thread-181456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:54:31.255 [DEBUG] [Thread-181456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:54:31.256 [DEBUG] [Thread-181456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:54:31.273 [INFO] [Thread-181456] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:54:31.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:54:31.889 [DEBUG] [Thread-181456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:54:31.890 [DEBUG] [Thread-181456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:54:31.890 [DEBUG] [Thread-181456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:54:31.931 [DEBUG] [Thread-181456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:54:31.931 [DEBUG] [Thread-181456] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:54:31.935 [DEBUG] [Thread-181456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:54:31.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:54:31.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:54:31.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:54:31.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:54:31.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:54:31.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:54:31.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:54:31.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:54:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:54:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.037607 -999.00  +10.00  13.56     98   +9.70 1 3 1 3 1     0    0 0.27 -0.14 ----- 20.2 13.6 284.0 19.4 11.3 -1.1 11.2 -1.2 10.8 -1.4 11.2 -0.6
2026-04-12T02:54:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:54:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:54:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.037607
2026-04-12T02:54:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:54:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:54:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:54:31.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:54:31.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:54:31.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:54:09', tmtdew=-0.032645, humidity=100.187, cloud=0.0, wind=22.7794, temperature=9.98466, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:54:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:54:31.965 [DEBUG] [Thread-181456] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:54:32.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:54:32.058 [DEBUG] [Thread-181459] [transport.py] [_log()] starting thread (client mode): 0xae537ca0
2026-04-12T02:54:32.058 [DEBUG] [Thread-181459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:54:32.073 [DEBUG] [Thread-181459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:54:32.074 [INFO] [Thread-181459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:54:32.081 [DEBUG] [Thread-181459] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:54:32.082 [DEBUG] [Thread-181459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] client lang: <none>
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] server lang: <none>
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] kex follows: False
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:54:32.083 [DEBUG] [Thread-181459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:54:32.084 [DEBUG] [Thread-181459] [transport.py] [_log()] Compression: none
2026-04-12T02:54:32.084 [DEBUG] [Thread-181459] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:54:32.142 [DEBUG] [Thread-181459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:54:32.143 [DEBUG] [Thread-181459] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:54:32.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:54:32.144 [DEBUG] [Thread-181459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:54:32.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:54:32.201 [DEBUG] [Thread-181459] [transport.py] [_log()] userauth is OK
2026-04-12T02:54:32.201 [DEBUG] [Thread-181459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:54:32.202 [DEBUG] [Thread-181459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:54:32.202 [DEBUG] [Thread-181459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:54:32.202 [DEBUG] [Thread-181459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:54:32.221 [INFO] [Thread-181459] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:54:32.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:54:32.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:54:33.063 [DEBUG] [Thread-181459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:54:33.063 [DEBUG] [Thread-181459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:54:33.111 [DEBUG] [Thread-181459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:54:33.111 [DEBUG] [Thread-181459] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:54:33.120 [DEBUG] [Thread-181459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:54:33.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:54:33.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-04-12T02:54:33.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-04-12T02:54:33.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:54:33.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:54:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:54:33.154 [DEBUG] [Thread-181459] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:54:35.700 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:54:35.701 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:54:36.620 [DEBUG] [Thread-181461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:54:51.676 [DEBUG] [Thread-181462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:54:55.321 [DEBUG] [Thread-181463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:03.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:55:03.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:55:03.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-04-12T02:55:04.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 54, 44), -0.06538, 100.373, 0.0, 20.3249, 10.5357, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:55:04.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:54:44
2026-04-12T02:55:04.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:55:05.063 [DEBUG] [Thread-181464] [transport.py] [_log()] starting thread (client mode): 0xae5b7f40
2026-04-12T02:55:05.063 [DEBUG] [Thread-181464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:55:05.082 [DEBUG] [Thread-181464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:55:05.082 [INFO] [Thread-181464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:55:05.085 [DEBUG] [Thread-181464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] client lang: <none>
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] server lang: <none>
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] kex follows: False
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] Compression: none
2026-04-12T02:55:05.086 [DEBUG] [Thread-181464] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:55:05.095 [DEBUG] [Thread-181464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:55:05.096 [DEBUG] [Thread-181464] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:55:05.096 [DEBUG] [Thread-181464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:55:05.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:55:05.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:55:05.098 [DEBUG] [Thread-181464] [transport.py] [_log()] userauth is OK
2026-04-12T02:55:05.098 [DEBUG] [Thread-181464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:55:05.098 [DEBUG] [Thread-181464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:55:05.098 [DEBUG] [Thread-181464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:55:05.099 [DEBUG] [Thread-181464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:55:05.115 [INFO] [Thread-181464] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:55:05.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:55:05.936 [DEBUG] [Thread-181464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:55:05.936 [DEBUG] [Thread-181464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:55:05.937 [DEBUG] [Thread-181464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:55:05.976 [DEBUG] [Thread-181464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:55:05.977 [DEBUG] [Thread-181464] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:55:05.979 [DEBUG] [Thread-181464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:55:05.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:55:05.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:55:05.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:55:05.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:55:06.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:55:06.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:55:06.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:55:06.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:55:06.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:55:06.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.037954 -999.00  +10.00  18.17     98   +9.70 1 3 1 3 1     0    0 0.27 0.09 ----- 17.1 18.2 283.2 25.7 11.3 -1.3 11.2 -1.3 10.7 -1.1 11.1 -0.6
2026-04-12T02:55:06.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:55:06.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:55:06.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.037954
2026-04-12T02:55:06.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:55:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:55:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:55:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:55:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:55:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:54:44', tmtdew=-0.06538, humidity=100.373, cloud=0.0, wind=20.3249, temperature=10.5357, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:54:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:55:06.027 [DEBUG] [Thread-181464] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:55:06.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:55:06.710 [DEBUG] [Thread-181467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:21.758 [DEBUG] [Thread-181468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:35.907 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:35.909 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:36.795 [DEBUG] [Thread-181469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:51.829 [DEBUG] [Thread-181470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:55:55.387 [DEBUG] [Thread-181471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:06.867 [DEBUG] [Thread-181472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:21.902 [DEBUG] [Thread-181473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:36.115 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:36.117 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:36.939 [DEBUG] [Thread-181474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:51.980 [DEBUG] [Thread-181475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:56:55.445 [DEBUG] [Thread-181476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:07.016 [DEBUG] [Thread-181477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:19.231 [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-04-12T02:57:22.053 [DEBUG] [Thread-181478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:36.331 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:36.333 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:37.087 [DEBUG] [Thread-181479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:49.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:57:49.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:57:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T02:57:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 57, 42), -0.0652, 100.373, 0.0, 23.6765, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:57:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:57:42
2026-04-12T02:57:50.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:57:51.027 [DEBUG] [Thread-181480] [transport.py] [_log()] starting thread (client mode): 0xae563340
2026-04-12T02:57:51.027 [DEBUG] [Thread-181480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:57:51.047 [DEBUG] [Thread-181480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:57:51.047 [INFO] [Thread-181480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] client lang: <none>
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] server lang: <none>
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] kex follows: False
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] Compression: none
2026-04-12T02:57:51.049 [DEBUG] [Thread-181480] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:57:51.063 [DEBUG] [Thread-181480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:57:51.063 [DEBUG] [Thread-181480] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:57:51.064 [DEBUG] [Thread-181480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:57:51.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:57:51.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:57:51.066 [DEBUG] [Thread-181480] [transport.py] [_log()] userauth is OK
2026-04-12T02:57:51.066 [DEBUG] [Thread-181480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:57:51.066 [DEBUG] [Thread-181480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:57:51.066 [DEBUG] [Thread-181480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:57:51.066 [DEBUG] [Thread-181480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:57:51.092 [INFO] [Thread-181480] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:57:51.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:57:51.728 [DEBUG] [Thread-181480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:57:51.728 [DEBUG] [Thread-181480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:57:51.729 [DEBUG] [Thread-181480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:57:51.769 [DEBUG] [Thread-181480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:57:51.769 [DEBUG] [Thread-181480] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:57:51.773 [DEBUG] [Thread-181480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:57:51.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:57:51.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:57:51.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:57:51.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:57:51.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:57:51.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:57:51.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:57:51.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:57:51.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:57:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.040038 -999.00   +9.90  17.45     98   +9.60 1 3 1 3 1     0    0 0.28 0.22 ----- 17.4 17.4 290.4 24.6 11.3 -1.4 11.1 -1.1 10.7 -1.3 11.2 -0.5
2026-04-12T02:57:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:57:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:57:51.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.040038
2026-04-12T02:57:51.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:57:51.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:57:51.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:57:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:57:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:57:51.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:57:42', tmtdew=-0.0652, humidity=100.373, cloud=0.0, wind=23.6765, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:57:39.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:57:51.801 [DEBUG] [Thread-181480] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:57:51.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:57:51.892 [DEBUG] [Thread-181483] [transport.py] [_log()] starting thread (client mode): 0xae5617b0
2026-04-12T02:57:51.892 [DEBUG] [Thread-181483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:57:51.906 [DEBUG] [Thread-181483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:57:51.907 [INFO] [Thread-181483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:57:51.914 [DEBUG] [Thread-181483] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] client lang: <none>
2026-04-12T02:57:51.915 [DEBUG] [Thread-181483] [transport.py] [_log()] server lang: <none>
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] kex follows: False
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] Compression: none
2026-04-12T02:57:51.916 [DEBUG] [Thread-181483] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:57:51.978 [DEBUG] [Thread-181483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:57:51.978 [DEBUG] [Thread-181483] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:57:51.979 [DEBUG] [Thread-181483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:57:51.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:57:51.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:57:52.036 [DEBUG] [Thread-181483] [transport.py] [_log()] userauth is OK
2026-04-12T02:57:52.037 [DEBUG] [Thread-181483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:57:52.037 [DEBUG] [Thread-181483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:57:52.037 [DEBUG] [Thread-181483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:57:52.037 [DEBUG] [Thread-181483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:57:52.055 [INFO] [Thread-181483] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:57:52.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:57:52.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:57:52.126 [DEBUG] [Thread-181485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:57:52.856 [DEBUG] [Thread-181483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:57:52.857 [DEBUG] [Thread-181483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:57:52.905 [DEBUG] [Thread-181483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:57:52.906 [DEBUG] [Thread-181483] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:57:52.915 [DEBUG] [Thread-181483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:57:52.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:57:52.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T02:57:52.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-04-12T02:57:52.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:57:52.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:57:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:57:52.951 [DEBUG] [Thread-181483] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:57:55.513 [DEBUG] [Thread-181486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:07.181 [DEBUG] [Thread-181487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:22.220 [DEBUG] [Thread-181488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:58:22.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:58:22.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-04-12T02:58:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 57, 42), -0.0652, 100.373, 0.0, 23.6765, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:58:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:57:42
2026-04-12T02:58:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:58:24.987 [DEBUG] [Thread-181489] [transport.py] [_log()] starting thread (client mode): 0xb0febee0
2026-04-12T02:58:24.987 [DEBUG] [Thread-181489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:58:25.000 [DEBUG] [Thread-181489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:58:25.000 [INFO] [Thread-181489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] client lang: <none>
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] server lang: <none>
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] kex follows: False
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:58:25.002 [DEBUG] [Thread-181489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:58:25.003 [DEBUG] [Thread-181489] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:58:25.003 [DEBUG] [Thread-181489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:58:25.003 [DEBUG] [Thread-181489] [transport.py] [_log()] Compression: none
2026-04-12T02:58:25.003 [DEBUG] [Thread-181489] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:58:25.016 [DEBUG] [Thread-181489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:58:25.016 [DEBUG] [Thread-181489] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:58:25.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:58:25.018 [DEBUG] [Thread-181489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:58:25.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:58:25.020 [DEBUG] [Thread-181489] [transport.py] [_log()] userauth is OK
2026-04-12T02:58:25.020 [DEBUG] [Thread-181489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:58:25.020 [DEBUG] [Thread-181489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:58:25.020 [DEBUG] [Thread-181489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:58:25.020 [DEBUG] [Thread-181489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:58:25.037 [INFO] [Thread-181489] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:58:25.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:58:25.643 [DEBUG] [Thread-181489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:58:25.643 [DEBUG] [Thread-181489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:58:25.643 [DEBUG] [Thread-181489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:58:25.684 [DEBUG] [Thread-181489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:58:25.684 [DEBUG] [Thread-181489] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:58:25.688 [DEBUG] [Thread-181489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:58:25.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:58:25.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:58:25.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:58:25.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:58:25.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:58:25.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:58:25.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:58:25.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:58:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:58:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.040385 -999.00  +10.00  17.06     98   +9.70 1 3 1 3 1     0    0 0.28 0.11 ----- 17.4 17.1 285.0 21.0 11.3 -1.2 11.1 -1.2 10.7 -1.3 11.1 -0.4
2026-04-12T02:58:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:58:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:58:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.040385
2026-04-12T02:58:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:58:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:58:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:58:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:58:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:58:25.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:57:42', tmtdew=-0.0652, humidity=100.373, cloud=0.0, wind=23.6765, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:58:09.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:58:25.715 [DEBUG] [Thread-181489] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:58:25.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:58:25.805 [DEBUG] [Thread-181492] [transport.py] [_log()] starting thread (client mode): 0xb0f40400
2026-04-12T02:58:25.805 [DEBUG] [Thread-181492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:58:25.820 [DEBUG] [Thread-181492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:58:25.820 [INFO] [Thread-181492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] client lang: <none>
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] server lang: <none>
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] kex follows: False
2026-04-12T02:58:25.828 [DEBUG] [Thread-181492] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:58:25.829 [DEBUG] [Thread-181492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:58:25.829 [DEBUG] [Thread-181492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:58:25.829 [DEBUG] [Thread-181492] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:58:25.829 [DEBUG] [Thread-181492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:58:25.829 [DEBUG] [Thread-181492] [transport.py] [_log()] Compression: none
2026-04-12T02:58:25.829 [DEBUG] [Thread-181492] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:58:25.885 [DEBUG] [Thread-181492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:58:25.886 [DEBUG] [Thread-181492] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:58:25.886 [DEBUG] [Thread-181492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:58:25.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:58:25.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:58:25.941 [DEBUG] [Thread-181492] [transport.py] [_log()] userauth is OK
2026-04-12T02:58:25.942 [DEBUG] [Thread-181492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:58:25.942 [DEBUG] [Thread-181492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:58:25.942 [DEBUG] [Thread-181492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:58:25.942 [DEBUG] [Thread-181492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:58:25.961 [INFO] [Thread-181492] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:58:25.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:58:25.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:58:26.772 [DEBUG] [Thread-181492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:58:26.773 [DEBUG] [Thread-181492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:58:26.821 [DEBUG] [Thread-181492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:58:26.822 [DEBUG] [Thread-181492] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:58:26.831 [DEBUG] [Thread-181492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:58:26.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:58:26.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-04-12T02:58:26.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-04-12T02:58:26.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:58:26.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:58:26.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:58:26.867 [DEBUG] [Thread-181492] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:58:36.532 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:36.534 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:37.255 [DEBUG] [Thread-181494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:52.304 [DEBUG] [Thread-181495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:55.582 [DEBUG] [Thread-181496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:58:56.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:58:56.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:58:56.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-04-12T02:58:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 58, 17), -0.020145, 100.104, 0.0, 21.7033, 9.90174, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:58:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:58:17
2026-04-12T02:58:58.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:58:58.765 [DEBUG] [Thread-181497] [transport.py] [_log()] starting thread (client mode): 0xb0f41690
2026-04-12T02:58:58.766 [DEBUG] [Thread-181497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:58:58.786 [DEBUG] [Thread-181497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:58:58.786 [INFO] [Thread-181497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:58:58.789 [DEBUG] [Thread-181497] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:58:58.789 [DEBUG] [Thread-181497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:58:58.789 [DEBUG] [Thread-181497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] client lang: <none>
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] server lang: <none>
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] kex follows: False
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:58:58.790 [DEBUG] [Thread-181497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:58:58.791 [DEBUG] [Thread-181497] [transport.py] [_log()] Compression: none
2026-04-12T02:58:58.791 [DEBUG] [Thread-181497] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:58:58.809 [DEBUG] [Thread-181497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:58:58.809 [DEBUG] [Thread-181497] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:58:58.810 [DEBUG] [Thread-181497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:58:58.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:58:58.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:58:58.812 [DEBUG] [Thread-181497] [transport.py] [_log()] userauth is OK
2026-04-12T02:58:58.812 [DEBUG] [Thread-181497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:58:58.812 [DEBUG] [Thread-181497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:58:58.812 [DEBUG] [Thread-181497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:58:58.812 [DEBUG] [Thread-181497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:58:58.830 [INFO] [Thread-181497] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:58:58.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:58:59.413 [DEBUG] [Thread-181497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:58:59.414 [DEBUG] [Thread-181497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:58:59.414 [DEBUG] [Thread-181497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:58:59.455 [DEBUG] [Thread-181497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:58:59.455 [DEBUG] [Thread-181497] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:58:59.458 [DEBUG] [Thread-181497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:58:59.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:58:59.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:58:59.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:58:59.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:58:59.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:58:59.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:58:59.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:58:59.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:58:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:58:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.040732 -999.00  +10.00  17.02     98   +9.70 1 3 1 3 1     0    0 0.29 0.35 ----- 13.8 17.0 290.6 21.9 11.3 -1.2 11.1 -1.2 10.7 -0.8 11.1 -0.4
2026-04-12T02:58:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:58:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:58:59.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.040732
2026-04-12T02:58:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:58:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:58:59.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:58:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:58:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:58:59.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:58:17', tmtdew=-0.020145, humidity=100.104, cloud=0.0, wind=21.7033, temperature=9.90174, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:58:39.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:58:59.483 [DEBUG] [Thread-181497] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:58:59.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:58:59.580 [DEBUG] [Thread-181500] [transport.py] [_log()] starting thread (client mode): 0xae5b0670
2026-04-12T02:58:59.580 [DEBUG] [Thread-181500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:58:59.595 [DEBUG] [Thread-181500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:58:59.595 [INFO] [Thread-181500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:58:59.602 [DEBUG] [Thread-181500] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] client lang: <none>
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] server lang: <none>
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] kex follows: False
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] Compression: none
2026-04-12T02:58:59.603 [DEBUG] [Thread-181500] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:58:59.661 [DEBUG] [Thread-181500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:58:59.662 [DEBUG] [Thread-181500] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:58:59.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:58:59.663 [DEBUG] [Thread-181500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:58:59.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:58:59.717 [DEBUG] [Thread-181500] [transport.py] [_log()] userauth is OK
2026-04-12T02:58:59.717 [DEBUG] [Thread-181500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:58:59.718 [DEBUG] [Thread-181500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:58:59.718 [DEBUG] [Thread-181500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:58:59.718 [DEBUG] [Thread-181500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:58:59.737 [INFO] [Thread-181500] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:58:59.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:58:59.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:59:00.504 [DEBUG] [Thread-181500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:59:00.504 [DEBUG] [Thread-181500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:59:00.553 [DEBUG] [Thread-181500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:59:00.553 [DEBUG] [Thread-181500] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:59:00.562 [DEBUG] [Thread-181500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:59:00.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:59:00.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-04-12T02:59:00.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-04-12T02:59:00.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:59:00.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:59:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:59:00.599 [DEBUG] [Thread-181500] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:59:07.339 [DEBUG] [Thread-181502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:59:22.390 [DEBUG] [Thread-181503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:59:30.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T02:59:30.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T02:59:30.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-04-12T02:59:31.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 58, 53), -0.05533, 100.307, 0.0, 20.8541, 10.4362, 2, 2, 0, 2, 0, 0),)
2026-04-12T02:59:31.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:58:53
2026-04-12T02:59:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T02:59:32.554 [DEBUG] [Thread-181504] [transport.py] [_log()] starting thread (client mode): 0xae5b00a0
2026-04-12T02:59:32.554 [DEBUG] [Thread-181504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:59:32.574 [DEBUG] [Thread-181504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T02:59:32.574 [INFO] [Thread-181504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] client lang: <none>
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] server lang: <none>
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] kex follows: False
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] Compression: none
2026-04-12T02:59:32.578 [DEBUG] [Thread-181504] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:59:32.598 [DEBUG] [Thread-181504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:59:32.598 [DEBUG] [Thread-181504] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:59:32.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T02:59:32.599 [DEBUG] [Thread-181504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T02:59:32.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:59:32.601 [DEBUG] [Thread-181504] [transport.py] [_log()] userauth is OK
2026-04-12T02:59:32.601 [DEBUG] [Thread-181504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:59:32.601 [DEBUG] [Thread-181504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:59:32.601 [DEBUG] [Thread-181504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T02:59:32.602 [DEBUG] [Thread-181504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:59:32.625 [INFO] [Thread-181504] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:59:32.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:59:33.229 [DEBUG] [Thread-181504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:59:33.229 [DEBUG] [Thread-181504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:59:33.229 [DEBUG] [Thread-181504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T02:59:33.271 [DEBUG] [Thread-181504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:59:33.271 [DEBUG] [Thread-181504] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:59:33.274 [DEBUG] [Thread-181504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:59:33.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:59:33.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T02:59:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T02:59:33.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T02:59:33.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:59:33.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T02:59:33.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:59:33.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T02:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.041079 -999.00  +10.00  12.58     98   +9.80 1 3 1 3 1     0    0 0.28 0.24 ----- 12.1 12.6 293.9 16.9 11.3 -1.0 11.1 -1.0 10.8 -0.9 11.2 -0.2
2026-04-12T02:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T02:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T02:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.041079
2026-04-12T02:59:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T02:59:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T02:59:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T02:59:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T02:59:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T02:59:33.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:58:53', tmtdew=-0.05533, humidity=100.307, cloud=0.0, wind=20.8541, temperature=10.4362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:59:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T02:59:33.302 [DEBUG] [Thread-181504] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:59:33.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T02:59:33.397 [DEBUG] [Thread-181507] [transport.py] [_log()] starting thread (client mode): 0xae5b2aa0
2026-04-12T02:59:33.397 [DEBUG] [Thread-181507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T02:59:33.412 [DEBUG] [Thread-181507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T02:59:33.412 [INFO] [Thread-181507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T02:59:33.419 [DEBUG] [Thread-181507] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] client lang: <none>
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] server lang: <none>
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] kex follows: False
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] Compression: none
2026-04-12T02:59:33.420 [DEBUG] [Thread-181507] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T02:59:33.475 [DEBUG] [Thread-181507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T02:59:33.475 [DEBUG] [Thread-181507] [transport.py] [_log()] Switch to new keys ...
2026-04-12T02:59:33.475 [DEBUG] [Thread-181507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T02:59:33.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T02:59:33.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T02:59:33.532 [DEBUG] [Thread-181507] [transport.py] [_log()] userauth is OK
2026-04-12T02:59:33.533 [DEBUG] [Thread-181507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T02:59:33.533 [DEBUG] [Thread-181507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T02:59:33.533 [DEBUG] [Thread-181507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T02:59:33.533 [DEBUG] [Thread-181507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T02:59:33.546 [INFO] [Thread-181507] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T02:59:33.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T02:59:33.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T02:59:34.362 [DEBUG] [Thread-181507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T02:59:34.362 [DEBUG] [Thread-181507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T02:59:34.410 [DEBUG] [Thread-181507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T02:59:34.411 [DEBUG] [Thread-181507] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T02:59:34.421 [DEBUG] [Thread-181507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T02:59:34.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T02:59:34.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-04-12T02:59: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-04-12T02:59:34.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T02:59:34.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T02:59:34.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T02:59:34.457 [DEBUG] [Thread-181507] [transport.py] [_log()] EOF in transport thread
2026-04-12T02:59:36.737 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:59:36.738 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:59:37.424 [DEBUG] [Thread-181509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:59:52.480 [DEBUG] [Thread-181510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T02:59:55.650 [DEBUG] [Thread-181511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:04.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:00:04.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:00:04.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-04-12T03:00:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 2, 59, 28), 0.022335, 100.153, 0.0, 20.3274, 10.0181, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:00:05.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 02:59:28
2026-04-12T03:00:06.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:00:06.447 [DEBUG] [Thread-181512] [transport.py] [_log()] starting thread (client mode): 0xae563b50
2026-04-12T03:00:06.447 [DEBUG] [Thread-181512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:00:06.468 [DEBUG] [Thread-181512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:00:06.468 [INFO] [Thread-181512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:00:06.471 [DEBUG] [Thread-181512] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] client lang: <none>
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] server lang: <none>
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] kex follows: False
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:00:06.472 [DEBUG] [Thread-181512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:00:06.473 [DEBUG] [Thread-181512] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:00:06.473 [DEBUG] [Thread-181512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:00:06.473 [DEBUG] [Thread-181512] [transport.py] [_log()] Compression: none
2026-04-12T03:00:06.473 [DEBUG] [Thread-181512] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:00:06.491 [DEBUG] [Thread-181512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:00:06.492 [DEBUG] [Thread-181512] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:00:06.492 [DEBUG] [Thread-181512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:00:06.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:00:06.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:00:06.494 [DEBUG] [Thread-181512] [transport.py] [_log()] userauth is OK
2026-04-12T03:00:06.495 [DEBUG] [Thread-181512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:00:06.495 [DEBUG] [Thread-181512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:00:06.495 [DEBUG] [Thread-181512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:00:06.495 [DEBUG] [Thread-181512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:00:06.519 [INFO] [Thread-181512] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:00:06.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:00:07.517 [DEBUG] [Thread-181514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:07.543 [DEBUG] [Thread-181512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:00:07.543 [DEBUG] [Thread-181512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:00:07.544 [DEBUG] [Thread-181512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:00:07.584 [DEBUG] [Thread-181512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:00:07.584 [DEBUG] [Thread-181512] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:00:07.587 [DEBUG] [Thread-181512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:00:07.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:00:07.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:00:07.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:00:07.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:00:07.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:00:07.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:00:07.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:00:07.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:00:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:00:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.041427 -999.00  +10.00  18.21     98   +9.70 1 3 1 3 1     0    0 0.27 0.13 ----- 18.9 18.2 289.0 19.6 11.3 -1.2 11.1 -1.2 10.8 -1.5 11.2 -0.4
2026-04-12T03:00:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:00:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:00:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.041427
2026-04-12T03:00:07.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:00:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:00:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:00:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:00:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:00:07.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T02:59:28', tmtdew=0.022335, humidity=100.153, cloud=0.0, wind=20.3274, temperature=10.0181, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T00:59:39.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:00:07.618 [DEBUG] [Thread-181512] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:00:07.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:00:07.715 [DEBUG] [Thread-181516] [transport.py] [_log()] starting thread (client mode): 0xae562dd0
2026-04-12T03:00:07.715 [DEBUG] [Thread-181516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:00:07.729 [DEBUG] [Thread-181516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:00:07.730 [INFO] [Thread-181516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] client lang: <none>
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] server lang: <none>
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] kex follows: False
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:00:07.737 [DEBUG] [Thread-181516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:00:07.738 [DEBUG] [Thread-181516] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:00:07.738 [DEBUG] [Thread-181516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:00:07.738 [DEBUG] [Thread-181516] [transport.py] [_log()] Compression: none
2026-04-12T03:00:07.738 [DEBUG] [Thread-181516] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:00:07.800 [DEBUG] [Thread-181516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:00:07.800 [DEBUG] [Thread-181516] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:00:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:00:07.802 [DEBUG] [Thread-181516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:00:07.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:00:07.858 [DEBUG] [Thread-181516] [transport.py] [_log()] userauth is OK
2026-04-12T03:00:07.858 [DEBUG] [Thread-181516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:00:07.858 [DEBUG] [Thread-181516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:00:07.858 [DEBUG] [Thread-181516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:00:07.858 [DEBUG] [Thread-181516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:00:07.876 [INFO] [Thread-181516] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:00:07.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:00:07.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:00:08.712 [DEBUG] [Thread-181516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:00:08.712 [DEBUG] [Thread-181516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:00:08.759 [DEBUG] [Thread-181516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:00:08.760 [DEBUG] [Thread-181516] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:00:08.768 [DEBUG] [Thread-181516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:00:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:00:08.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-04-12T03:00:08.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-04-12T03:00:08.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:00:08.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:00:08.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:00:08.801 [DEBUG] [Thread-181516] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:00:22.557 [DEBUG] [Thread-181518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:36.942 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:36.943 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:37.607 [DEBUG] [Thread-181519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:38.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:00:38.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:00:38.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-04-12T03:00:40.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 0, 4), 0.01731, 100.187, 0.0, 20.6626, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:00:40.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:00:04
2026-04-12T03:00:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:00:40.615 [DEBUG] [Thread-181520] [transport.py] [_log()] starting thread (client mode): 0xae5b3fd0
2026-04-12T03:00:40.615 [DEBUG] [Thread-181520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:00:40.635 [DEBUG] [Thread-181520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:00:40.636 [INFO] [Thread-181520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:00:40.639 [DEBUG] [Thread-181520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] client lang: <none>
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] server lang: <none>
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] kex follows: False
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] Compression: none
2026-04-12T03:00:40.640 [DEBUG] [Thread-181520] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:00:40.659 [DEBUG] [Thread-181520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:00:40.660 [DEBUG] [Thread-181520] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:00:40.660 [DEBUG] [Thread-181520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:00:40.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:00:40.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:00:40.704 [DEBUG] [Thread-181520] [transport.py] [_log()] userauth is OK
2026-04-12T03:00:40.704 [DEBUG] [Thread-181520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:00:40.704 [DEBUG] [Thread-181520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:00:40.704 [DEBUG] [Thread-181520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:00:40.704 [DEBUG] [Thread-181520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:00:40.723 [INFO] [Thread-181520] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:00:40.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:00:41.374 [DEBUG] [Thread-181520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:00:41.374 [DEBUG] [Thread-181520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:00:41.375 [DEBUG] [Thread-181520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:00:41.415 [DEBUG] [Thread-181520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:00:41.415 [DEBUG] [Thread-181520] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:00:41.419 [DEBUG] [Thread-181520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:00:41.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:00:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:00:41.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:00:41.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:00:41.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:00:41.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:00:41.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:00:41.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:00:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:00:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.041773 -999.00  +10.00  16.50     98   +9.70 1 3 1 3 1     0    0 0.26 -0.29 ----- 19.5 16.5 279.6 21.7 11.3 -1.2 11.1 -1.2 10.7 -1.1 11.1 -0.5
2026-04-12T03:00:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:00:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:00:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.041773
2026-04-12T03:00:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:00:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:00:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:00:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:00:41.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:00:41.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:00:04', tmtdew=0.01731, humidity=100.187, cloud=0.0, wind=20.6626, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:00:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:00:41.447 [DEBUG] [Thread-181520] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:00:41.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:00:41.541 [DEBUG] [Thread-181523] [transport.py] [_log()] starting thread (client mode): 0xb0fea0b0
2026-04-12T03:00:41.541 [DEBUG] [Thread-181523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:00:41.556 [DEBUG] [Thread-181523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:00:41.556 [INFO] [Thread-181523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] client lang: <none>
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] server lang: <none>
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] kex follows: False
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] Compression: none
2026-04-12T03:00:41.564 [DEBUG] [Thread-181523] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:00:41.621 [DEBUG] [Thread-181523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:00:41.621 [DEBUG] [Thread-181523] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:00:41.622 [DEBUG] [Thread-181523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:00:41.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:00:41.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:00:41.677 [DEBUG] [Thread-181523] [transport.py] [_log()] userauth is OK
2026-04-12T03:00:41.678 [DEBUG] [Thread-181523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:00:41.678 [DEBUG] [Thread-181523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:00:41.678 [DEBUG] [Thread-181523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:00:41.678 [DEBUG] [Thread-181523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:00:41.704 [INFO] [Thread-181523] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:00: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-04-12T03:00:41.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:00:42.500 [DEBUG] [Thread-181523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:00:42.500 [DEBUG] [Thread-181523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:00:42.548 [DEBUG] [Thread-181523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:00:42.548 [DEBUG] [Thread-181523] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:00:42.557 [DEBUG] [Thread-181523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:00:42.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:00:42.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-04-12T03:00:42.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-04-12T03:00:42.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:00:42.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:00:42.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:00:42.599 [DEBUG] [Thread-181523] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:00:52.647 [DEBUG] [Thread-181525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:00:55.704 [DEBUG] [Thread-181526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:07.695 [DEBUG] [Thread-181527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:12.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:01:12.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:01:12.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-04-12T03:01:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 0, 40), -0.05037, 100.274, 0.0, 21.3833, 10.4362, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:01:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:00:40
2026-04-12T03:01:14.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:01:14.445 [DEBUG] [Thread-181528] [transport.py] [_log()] starting thread (client mode): 0xae5b2560
2026-04-12T03:01:14.446 [DEBUG] [Thread-181528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:01:14.465 [DEBUG] [Thread-181528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:01:14.465 [INFO] [Thread-181528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] client lang: <none>
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] server lang: <none>
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] kex follows: False
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] Compression: none
2026-04-12T03:01:14.468 [DEBUG] [Thread-181528] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:01:14.487 [DEBUG] [Thread-181528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:01:14.487 [DEBUG] [Thread-181528] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:01:14.488 [DEBUG] [Thread-181528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:01:14.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:01:14.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:01:14.490 [DEBUG] [Thread-181528] [transport.py] [_log()] userauth is OK
2026-04-12T03:01:14.490 [DEBUG] [Thread-181528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:01:14.490 [DEBUG] [Thread-181528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:01:14.490 [DEBUG] [Thread-181528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:01:14.491 [DEBUG] [Thread-181528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:01:14.516 [INFO] [Thread-181528] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:01:14.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:01:15.155 [DEBUG] [Thread-181528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:01:15.155 [DEBUG] [Thread-181528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:01:15.156 [DEBUG] [Thread-181528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:01:15.196 [DEBUG] [Thread-181528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:01:15.196 [DEBUG] [Thread-181528] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:01:15.200 [DEBUG] [Thread-181528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:01:15.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:01:15.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:01:15.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:01:15.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:01:15.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:01:15.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:01:15.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:01:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:01:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:01:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.042121 -999.00   +9.90  18.78     98   +9.70 1 3 1 3 1     0    0 0.25 -0.93 ----- 21.3 18.8 280.8 25.3 11.3 -1.4 11.1 -1.1 10.7 -1.5 11.1 -0.4
2026-04-12T03:01:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:01:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:01:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.042121
2026-04-12T03:01:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:01:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:01:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:01:15.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:01:15.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:01:15.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:00:40', tmtdew=-0.05037, humidity=100.274, cloud=0.0, wind=21.3833, temperature=10.4362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:00:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:01:15.227 [DEBUG] [Thread-181528] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:01:15.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:01:15.317 [DEBUG] [Thread-181531] [transport.py] [_log()] starting thread (client mode): 0xb0f40490
2026-04-12T03:01:15.317 [DEBUG] [Thread-181531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:01:15.336 [DEBUG] [Thread-181531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:01:15.336 [INFO] [Thread-181531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:15.344 [DEBUG] [Thread-181531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] client lang: <none>
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] server lang: <none>
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] kex follows: False
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:01:15.345 [DEBUG] [Thread-181531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:01:15.346 [DEBUG] [Thread-181531] [transport.py] [_log()] Compression: none
2026-04-12T03:01:15.346 [DEBUG] [Thread-181531] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:01:15.406 [DEBUG] [Thread-181531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:01:15.407 [DEBUG] [Thread-181531] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:01:15.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:01:15.408 [DEBUG] [Thread-181531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:01:15.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:01:15.465 [DEBUG] [Thread-181531] [transport.py] [_log()] userauth is OK
2026-04-12T03:01:15.465 [DEBUG] [Thread-181531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:01:15.466 [DEBUG] [Thread-181531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:01:15.466 [DEBUG] [Thread-181531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:01:15.466 [DEBUG] [Thread-181531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:01:15.485 [INFO] [Thread-181531] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:01:15.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:01:15.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:01:16.287 [DEBUG] [Thread-181531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:01:16.287 [DEBUG] [Thread-181531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:01:16.335 [DEBUG] [Thread-181531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:01:16.335 [DEBUG] [Thread-181531] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:01:16.344 [DEBUG] [Thread-181531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:01:16.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:01:16.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-04-12T03:01:16.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-04-12T03:01:16.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:01:16.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:01:16.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:01:16.382 [DEBUG] [Thread-181531] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:01:22.732 [DEBUG] [Thread-181533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:37.148 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:37.149 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:37.780 [DEBUG] [Thread-181534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:46.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:01:46.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:01:46.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:01:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 1, 15), 0.019835, 100.17, 0.0, 19.3572, 9.98466, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:01:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:01:15
2026-04-12T03:01:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:01:48.220 [DEBUG] [Thread-181535] [transport.py] [_log()] starting thread (client mode): 0xb0f42a40
2026-04-12T03:01:48.220 [DEBUG] [Thread-181535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:01:48.241 [DEBUG] [Thread-181535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:01:48.241 [INFO] [Thread-181535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:01:48.244 [DEBUG] [Thread-181535] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:01:48.244 [DEBUG] [Thread-181535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:01:48.244 [DEBUG] [Thread-181535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:01:48.244 [DEBUG] [Thread-181535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:48.244 [DEBUG] [Thread-181535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:48.244 [DEBUG] [Thread-181535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] client lang: <none>
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] server lang: <none>
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] kex follows: False
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] Compression: none
2026-04-12T03:01:48.245 [DEBUG] [Thread-181535] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:01:48.263 [DEBUG] [Thread-181535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:01:48.264 [DEBUG] [Thread-181535] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:01:48.264 [DEBUG] [Thread-181535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:01:48.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:01:48.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:01:48.267 [DEBUG] [Thread-181535] [transport.py] [_log()] userauth is OK
2026-04-12T03:01:48.267 [DEBUG] [Thread-181535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:01:48.267 [DEBUG] [Thread-181535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:01:48.267 [DEBUG] [Thread-181535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:01:48.267 [DEBUG] [Thread-181535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:01:48.302 [INFO] [Thread-181535] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:01:48.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:01:48.950 [DEBUG] [Thread-181535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:01:48.950 [DEBUG] [Thread-181535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:01:48.951 [DEBUG] [Thread-181535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:01:48.991 [DEBUG] [Thread-181535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:01:48.991 [DEBUG] [Thread-181535] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:01:48.994 [DEBUG] [Thread-181535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:01:49.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:01:49.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:01:49.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:01:49.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:01:49.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:01:49.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:01:49.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:01:49.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:01:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:01:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.042468 -999.00   +9.90  19.48     98   +9.60 1 3 1 3 1     0    0 0.25 -0.75 ----- 18.5 19.5 271.8 25.8 11.2 -1.3 11.1 -1.2 10.7 -1.3 11.1 -0.5
2026-04-12T03:01:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:01:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:01:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.042468
2026-04-12T03:01:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:01:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:01:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:01:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:01:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:01:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:01:15', tmtdew=0.019835, humidity=100.17, cloud=0.0, wind=19.3572, temperature=9.98466, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:01:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:01:49.020 [DEBUG] [Thread-181535] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:01:49.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:01:49.114 [DEBUG] [Thread-181538] [transport.py] [_log()] starting thread (client mode): 0xae52f7c0
2026-04-12T03:01:49.114 [DEBUG] [Thread-181538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:01:49.130 [DEBUG] [Thread-181538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:01:49.130 [INFO] [Thread-181538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:01:49.138 [DEBUG] [Thread-181538] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:01:49.138 [DEBUG] [Thread-181538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:01:49.138 [DEBUG] [Thread-181538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:01:49.138 [DEBUG] [Thread-181538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:49.138 [DEBUG] [Thread-181538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:01:49.138 [DEBUG] [Thread-181538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] client lang: <none>
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] server lang: <none>
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] kex follows: False
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:01:49.139 [DEBUG] [Thread-181538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:01:49.140 [DEBUG] [Thread-181538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:01:49.140 [DEBUG] [Thread-181538] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:01:49.140 [DEBUG] [Thread-181538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:01:49.140 [DEBUG] [Thread-181538] [transport.py] [_log()] Compression: none
2026-04-12T03:01:49.141 [DEBUG] [Thread-181538] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:01:49.198 [DEBUG] [Thread-181538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:01:49.199 [DEBUG] [Thread-181538] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:01:49.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:01:49.200 [DEBUG] [Thread-181538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:01:49.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:01:49.257 [DEBUG] [Thread-181538] [transport.py] [_log()] userauth is OK
2026-04-12T03:01:49.258 [DEBUG] [Thread-181538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:01:49.258 [DEBUG] [Thread-181538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:01:49.258 [DEBUG] [Thread-181538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:01:49.258 [DEBUG] [Thread-181538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:01:49.276 [INFO] [Thread-181538] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:01:49.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:01:49.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:01:50.092 [DEBUG] [Thread-181538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:01:50.093 [DEBUG] [Thread-181538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:01:50.140 [DEBUG] [Thread-181538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:01:50.141 [DEBUG] [Thread-181538] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:01:50.150 [DEBUG] [Thread-181538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:01:50.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:01:50.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-04-12T03:01:50.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:01:50.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:01:50.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:01:50.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:01:50.187 [DEBUG] [Thread-181538] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:01:52.817 [DEBUG] [Thread-181540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:01:55.762 [DEBUG] [Thread-181541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:07.866 [DEBUG] [Thread-181542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:02:20.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:02:20.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:02:21.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 1, 50), -0.06037, 100.34, 0.0, 23.5001, 10.5025, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:02:21.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:01:50
2026-04-12T03:02:21.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:02:22.047 [DEBUG] [Thread-181543] [transport.py] [_log()] starting thread (client mode): 0xae5b54e0
2026-04-12T03:02:22.047 [DEBUG] [Thread-181543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:02:22.067 [DEBUG] [Thread-181543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:02:22.067 [INFO] [Thread-181543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:02:22.070 [DEBUG] [Thread-181543] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] client lang: <none>
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] server lang: <none>
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] kex follows: False
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] Compression: none
2026-04-12T03:02:22.071 [DEBUG] [Thread-181543] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:02:22.087 [DEBUG] [Thread-181543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:02:22.088 [DEBUG] [Thread-181543] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:02:22.088 [DEBUG] [Thread-181543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:02:22.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:02:22.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:02:22.133 [DEBUG] [Thread-181543] [transport.py] [_log()] userauth is OK
2026-04-12T03:02:22.133 [DEBUG] [Thread-181543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:02:22.133 [DEBUG] [Thread-181543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:02:22.133 [DEBUG] [Thread-181543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:02:22.133 [DEBUG] [Thread-181543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:02:22.165 [INFO] [Thread-181543] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:02:22.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:02:22.834 [DEBUG] [Thread-181543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:02:22.835 [DEBUG] [Thread-181543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:02:22.835 [DEBUG] [Thread-181543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:02:22.876 [DEBUG] [Thread-181543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:02:22.876 [DEBUG] [Thread-181543] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:02:22.880 [DEBUG] [Thread-181543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:02:22.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:02:22.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:02:22.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:02:22.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:02:22.906 [DEBUG] [Thread-181546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:22.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:02:22.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:02:22.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:02:22.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:02:22.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:02:22.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.043163 -999.00   +9.90  20.17     98   +9.70 1 3 1 3 1     0    0 0.24 -0.81 ----- 19.9 20.2 268.4 23.9 11.2 -1.2 11.1 -1.1 10.7 -0.9 11.1 -0.6
2026-04-12T03:02:22.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:02:22.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:02:22.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.043163
2026-04-12T03:02:22.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:02:22.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:02:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:02:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:02:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:02:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:01:50', tmtdew=-0.06037, humidity=100.34, cloud=0.0, wind=23.5001, temperature=10.5025, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:02:09.283', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:02:22.913 [DEBUG] [Thread-181543] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:02:23.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:02:23.017 [DEBUG] [Thread-181547] [transport.py] [_log()] starting thread (client mode): 0xb0f6df60
2026-04-12T03:02:23.018 [DEBUG] [Thread-181547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:02:23.033 [DEBUG] [Thread-181547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:02:23.033 [INFO] [Thread-181547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] client lang: <none>
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] server lang: <none>
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] kex follows: False
2026-04-12T03:02:23.041 [DEBUG] [Thread-181547] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:02:23.042 [DEBUG] [Thread-181547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:02:23.042 [DEBUG] [Thread-181547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:02:23.042 [DEBUG] [Thread-181547] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:02:23.042 [DEBUG] [Thread-181547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:02:23.042 [DEBUG] [Thread-181547] [transport.py] [_log()] Compression: none
2026-04-12T03:02:23.042 [DEBUG] [Thread-181547] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:02:23.101 [DEBUG] [Thread-181547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:02:23.102 [DEBUG] [Thread-181547] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:02:23.103 [DEBUG] [Thread-181547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:02:23.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:02:23.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:02:23.158 [DEBUG] [Thread-181547] [transport.py] [_log()] userauth is OK
2026-04-12T03:02:23.158 [DEBUG] [Thread-181547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:02:23.159 [DEBUG] [Thread-181547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:02:23.159 [DEBUG] [Thread-181547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:02:23.159 [DEBUG] [Thread-181547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:02:23.176 [INFO] [Thread-181547] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:02:23.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:02:23.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:02:24.003 [DEBUG] [Thread-181547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:02:24.004 [DEBUG] [Thread-181547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:02:24.052 [DEBUG] [Thread-181547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:02:24.053 [DEBUG] [Thread-181547] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:02:24.061 [DEBUG] [Thread-181547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:02:24.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:02:24.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:02:24.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:02:24.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:02:24.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:02:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:02:24.098 [DEBUG] [Thread-181547] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:02:37.351 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:37.353 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:37.941 [DEBUG] [Thread-181549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:52.994 [DEBUG] [Thread-181550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:54.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:02:54.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:02:54.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-04-12T03:02:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 2, 26), 0.01483, 100.203, 0.0, 19.0213, 10.0678, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:02:55.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:02:26
2026-04-12T03:02:55.818 [DEBUG] [Thread-181551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:02:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:02:56.010 [DEBUG] [Thread-181552] [transport.py] [_log()] starting thread (client mode): 0xae5b54e0
2026-04-12T03:02:56.010 [DEBUG] [Thread-181552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:02:56.031 [DEBUG] [Thread-181552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:02:56.031 [INFO] [Thread-181552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:02:56.034 [DEBUG] [Thread-181552] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:02:56.034 [DEBUG] [Thread-181552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:02:56.034 [DEBUG] [Thread-181552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] client lang: <none>
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] server lang: <none>
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] kex follows: False
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] Compression: none
2026-04-12T03:02:56.035 [DEBUG] [Thread-181552] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:02:56.052 [DEBUG] [Thread-181552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:02:56.052 [DEBUG] [Thread-181552] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:02:56.053 [DEBUG] [Thread-181552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:02:56.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:02:56.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:02:56.055 [DEBUG] [Thread-181552] [transport.py] [_log()] userauth is OK
2026-04-12T03:02:56.055 [DEBUG] [Thread-181552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:02:56.055 [DEBUG] [Thread-181552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:02:56.055 [DEBUG] [Thread-181552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:02:56.055 [DEBUG] [Thread-181552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:02:56.079 [INFO] [Thread-181552] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:02:56.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:02:56.729 [DEBUG] [Thread-181552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:02:56.730 [DEBUG] [Thread-181552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:02:56.730 [DEBUG] [Thread-181552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:02:56.771 [DEBUG] [Thread-181552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:02:56.771 [DEBUG] [Thread-181552] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:02:56.774 [DEBUG] [Thread-181552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:02:56.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:02:56.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:02:56.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:02:56.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:02:56.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:02:56.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:02:56.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:02:56.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:02:56.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:02:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.043510 -999.00  +10.00  15.78     98   +9.70 1 3 1 3 1     0    0 0.24 -0.90 ----- 17.6 15.8 279.4 23.1 11.2 -1.1 11.1 -0.9 10.7 -1.1 11.1 -0.5
2026-04-12T03:02:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:02:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:02:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.043510
2026-04-12T03:02:56.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:02:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:02:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:02:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:02:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:02:56.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:02:26', tmtdew=0.01483, humidity=100.203, cloud=0.0, wind=19.0213, temperature=10.0678, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:02:39.264', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:02:56.805 [DEBUG] [Thread-181552] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:02:56.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:02:56.898 [DEBUG] [Thread-181555] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T03:02:56.898 [DEBUG] [Thread-181555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:02:56.914 [DEBUG] [Thread-181555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:02:56.914 [INFO] [Thread-181555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:02:56.921 [DEBUG] [Thread-181555] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:02:56.921 [DEBUG] [Thread-181555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:02:56.921 [DEBUG] [Thread-181555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] client lang: <none>
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] server lang: <none>
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] kex follows: False
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] Compression: none
2026-04-12T03:02:56.922 [DEBUG] [Thread-181555] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:02:56.979 [DEBUG] [Thread-181555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:02:56.979 [DEBUG] [Thread-181555] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:02:56.980 [DEBUG] [Thread-181555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:02:56.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:02:56.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:02:57.037 [DEBUG] [Thread-181555] [transport.py] [_log()] userauth is OK
2026-04-12T03:02:57.037 [DEBUG] [Thread-181555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:02:57.037 [DEBUG] [Thread-181555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:02:57.037 [DEBUG] [Thread-181555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:02:57.038 [DEBUG] [Thread-181555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:02:57.061 [INFO] [Thread-181555] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:02:57.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:02:57.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:02:57.859 [DEBUG] [Thread-181555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:02:57.860 [DEBUG] [Thread-181555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:02:57.909 [DEBUG] [Thread-181555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:02:57.909 [DEBUG] [Thread-181555] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:02:57.918 [DEBUG] [Thread-181555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:02:57.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:02:57.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-04-12T03:02:57.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-04-12T03:02:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:02:57.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:02:57.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:02:57.951 [DEBUG] [Thread-181555] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:03:08.033 [DEBUG] [Thread-181557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:03:23.094 [DEBUG] [Thread-181558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:03:27.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:03:27.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:03: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-04-12T03:03:29.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 3, 1), 0.017335, 100.187, 0.0, 20.3267, 10.0513, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:03:29.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:03:01
2026-04-12T03:03:29.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:03:29.791 [DEBUG] [Thread-181559] [transport.py] [_log()] starting thread (client mode): 0xb0f43d00
2026-04-12T03:03:29.791 [DEBUG] [Thread-181559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:03:29.806 [DEBUG] [Thread-181559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:03:29.806 [INFO] [Thread-181559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:03:29.809 [DEBUG] [Thread-181559] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] client lang: <none>
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] server lang: <none>
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] kex follows: False
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:03:29.810 [DEBUG] [Thread-181559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:03:29.811 [DEBUG] [Thread-181559] [transport.py] [_log()] Compression: none
2026-04-12T03:03:29.811 [DEBUG] [Thread-181559] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:03:29.828 [DEBUG] [Thread-181559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:03:29.829 [DEBUG] [Thread-181559] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:03:29.830 [DEBUG] [Thread-181559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:03:29.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:03:29.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:03:29.832 [DEBUG] [Thread-181559] [transport.py] [_log()] userauth is OK
2026-04-12T03:03:29.833 [DEBUG] [Thread-181559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:03:29.833 [DEBUG] [Thread-181559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:03:29.833 [DEBUG] [Thread-181559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:03:29.833 [DEBUG] [Thread-181559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:03:29.857 [INFO] [Thread-181559] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:03:29.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:03:30.513 [DEBUG] [Thread-181559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:03:30.513 [DEBUG] [Thread-181559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:03:30.513 [DEBUG] [Thread-181559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:03:30.554 [DEBUG] [Thread-181559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:03:30.554 [DEBUG] [Thread-181559] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:03:30.557 [DEBUG] [Thread-181559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:03:30.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:03:30.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:03:30.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:03:30.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:03:30.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:03:30.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:03:30.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.043857 -999.00  +10.00  14.66     98   +9.70 1 3 1 3 1     0    0 0.25 -0.69 ----- 14.0 14.7 273.8 21.8 11.2 -1.1 11.1 -1.0 10.7 -0.8 11.1 -0.4
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.043857
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:03:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:03:01', tmtdew=0.017335, humidity=100.187, cloud=0.0, wind=20.3267, temperature=10.0513, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:03:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:03:30.575 [DEBUG] [Thread-181559] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:03:30.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:03:30.656 [DEBUG] [Thread-181562] [transport.py] [_log()] starting thread (client mode): 0xb0f6e980
2026-04-12T03:03:30.657 [DEBUG] [Thread-181562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:03:30.672 [DEBUG] [Thread-181562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:03:30.672 [INFO] [Thread-181562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:03:30.680 [DEBUG] [Thread-181562] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:03:30.680 [DEBUG] [Thread-181562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:03:30.680 [DEBUG] [Thread-181562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] client lang: <none>
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] server lang: <none>
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] kex follows: False
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] Compression: none
2026-04-12T03:03:30.681 [DEBUG] [Thread-181562] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:03:30.737 [DEBUG] [Thread-181562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:03:30.737 [DEBUG] [Thread-181562] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:03:30.738 [DEBUG] [Thread-181562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:03:30.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:03:30.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:03:30.792 [DEBUG] [Thread-181562] [transport.py] [_log()] userauth is OK
2026-04-12T03:03:30.792 [DEBUG] [Thread-181562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:03:30.792 [DEBUG] [Thread-181562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:03:30.793 [DEBUG] [Thread-181562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:03:30.793 [DEBUG] [Thread-181562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:03:30.808 [INFO] [Thread-181562] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:03:30.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:03:30.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:03:31.645 [DEBUG] [Thread-181562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:03:31.645 [DEBUG] [Thread-181562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:03:31.693 [DEBUG] [Thread-181562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:03:31.693 [DEBUG] [Thread-181562] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:03:31.703 [DEBUG] [Thread-181562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:03:31.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:03:31.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:03:31.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-04-12T03:03:31.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:03:31.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:03:31.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:03:31.739 [DEBUG] [Thread-181562] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:03:37.554 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:03:37.555 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:03:38.128 [DEBUG] [Thread-181564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:03:53.184 [DEBUG] [Thread-181565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:03:55.875 [DEBUG] [Thread-181566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:04:01.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:04:01.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:04:03.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 3, 37), -0.05533, 100.307, 0.0, 20.0779, 10.4362, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:04:03.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:03:37
2026-04-12T03:04:03.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:04:03.543 [DEBUG] [Thread-181567] [transport.py] [_log()] starting thread (client mode): 0xae52e590
2026-04-12T03:04:03.543 [DEBUG] [Thread-181567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:04:03.563 [DEBUG] [Thread-181567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:04:03.564 [INFO] [Thread-181567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] client lang: <none>
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] server lang: <none>
2026-04-12T03:04:03.567 [DEBUG] [Thread-181567] [transport.py] [_log()] kex follows: False
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] Compression: none
2026-04-12T03:04:03.568 [DEBUG] [Thread-181567] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:04:03.586 [DEBUG] [Thread-181567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:04:03.587 [DEBUG] [Thread-181567] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:04:03.588 [DEBUG] [Thread-181567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:04:03.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:04:03.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:04:03.590 [DEBUG] [Thread-181567] [transport.py] [_log()] userauth is OK
2026-04-12T03:04:03.590 [DEBUG] [Thread-181567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:04:03.591 [DEBUG] [Thread-181567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:04:03.591 [DEBUG] [Thread-181567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:04:03.591 [DEBUG] [Thread-181567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:04:03.613 [INFO] [Thread-181567] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:04:03.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:04:04.237 [DEBUG] [Thread-181567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:04:04.237 [DEBUG] [Thread-181567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:04:04.237 [DEBUG] [Thread-181567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:04:04.277 [DEBUG] [Thread-181567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:04:04.278 [DEBUG] [Thread-181567] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:04:04.281 [DEBUG] [Thread-181567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:04:04.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:04:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:04:04.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:04:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:04:04.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:04:04.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:04:04.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:04:04.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:04:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:04:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.044204 -999.00  +10.00  12.72     98   +9.80 1 3 1 3 1     0    0 0.24 -0.70 ----- 13.1 12.7 277.6 18.4 11.3 -0.9 11.2 -1.0 10.8 -0.9 11.1 -0.5
2026-04-12T03:04:04.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:04:04.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:04:04.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.044204
2026-04-12T03:04:04.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:04:04.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:04:04.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:04:04.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:04:04.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:04:04.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:03:37', tmtdew=-0.05533, humidity=100.307, cloud=0.0, wind=20.0779, temperature=10.4362, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:03:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:04:04.308 [DEBUG] [Thread-181567] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:04:04.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:04:04.403 [DEBUG] [Thread-181570] [transport.py] [_log()] starting thread (client mode): 0xae52d450
2026-04-12T03:04:04.403 [DEBUG] [Thread-181570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:04:04.417 [DEBUG] [Thread-181570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:04:04.418 [INFO] [Thread-181570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] client lang: <none>
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] server lang: <none>
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] kex follows: False
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:04:04.425 [DEBUG] [Thread-181570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:04:04.426 [DEBUG] [Thread-181570] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:04:04.426 [DEBUG] [Thread-181570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:04:04.426 [DEBUG] [Thread-181570] [transport.py] [_log()] Compression: none
2026-04-12T03:04:04.426 [DEBUG] [Thread-181570] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:04:04.485 [DEBUG] [Thread-181570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:04:04.486 [DEBUG] [Thread-181570] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:04:04.486 [DEBUG] [Thread-181570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:04:04.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:04:04.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:04:04.542 [DEBUG] [Thread-181570] [transport.py] [_log()] userauth is OK
2026-04-12T03:04:04.542 [DEBUG] [Thread-181570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:04:04.542 [DEBUG] [Thread-181570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:04:04.543 [DEBUG] [Thread-181570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:04:04.543 [DEBUG] [Thread-181570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:04:04.561 [INFO] [Thread-181570] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:04:04.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:04:04.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:04:05.413 [DEBUG] [Thread-181570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:04:05.414 [DEBUG] [Thread-181570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:04:05.462 [DEBUG] [Thread-181570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:04:05.462 [DEBUG] [Thread-181570] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:04:05.472 [DEBUG] [Thread-181570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:04:05.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:04:05.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-04-12T03:04:05.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-04-12T03:04:05.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:04:05.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:04:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:04:05.509 [DEBUG] [Thread-181570] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:04:08.223 [DEBUG] [Thread-181572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:23.275 [DEBUG] [Thread-181573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:04:35.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:04: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-04-12T03:04:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 4, 12), -0.027685, 100.153, 0.0, 20.3796, 10.0347, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:04:36.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:04:12
2026-04-12T03:04:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:04:37.290 [DEBUG] [Thread-181574] [transport.py] [_log()] starting thread (client mode): 0xae52c3a0
2026-04-12T03:04:37.290 [DEBUG] [Thread-181574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:04:37.310 [DEBUG] [Thread-181574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:04:37.310 [INFO] [Thread-181574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] client lang: <none>
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] server lang: <none>
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] kex follows: False
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] Compression: none
2026-04-12T03:04:37.313 [DEBUG] [Thread-181574] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:04:37.331 [DEBUG] [Thread-181574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:04:37.331 [DEBUG] [Thread-181574] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:04:37.332 [DEBUG] [Thread-181574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:04:37.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:04:37.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:04:37.334 [DEBUG] [Thread-181574] [transport.py] [_log()] userauth is OK
2026-04-12T03:04:37.334 [DEBUG] [Thread-181574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:04:37.334 [DEBUG] [Thread-181574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:04:37.334 [DEBUG] [Thread-181574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:04:37.334 [DEBUG] [Thread-181574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:04:37.358 [INFO] [Thread-181574] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:04:37.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:04:37.759 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:37.760 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:38.011 [DEBUG] [Thread-181574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:04:38.011 [DEBUG] [Thread-181574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:04:38.012 [DEBUG] [Thread-181574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:04:38.052 [DEBUG] [Thread-181574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:04:38.052 [DEBUG] [Thread-181574] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:04:38.055 [DEBUG] [Thread-181574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:04:38.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:04:38.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:04:38.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:04:38.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:04:38.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:04:38.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:04:38.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:04:38.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:04:38.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:04:38.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.044552 -999.00  +10.00  16.47     98   +9.80 1 3 1 3 1     0    0 0.24 -0.80 ----- 13.7 16.5 275.2 22.1 11.3 -1.1 11.1 -1.0 10.7 -0.9 11.1 -0.3
2026-04-12T03:04:38.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:04:38.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:04:38.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.044552
2026-04-12T03:04:38.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:04:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:04:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:04:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:04:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:04:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:04:12', tmtdew=-0.027685, humidity=100.153, cloud=0.0, wind=20.3796, temperature=10.0347, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:04:09.293', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:04:38.077 [DEBUG] [Thread-181574] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:04:38.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:04:38.172 [DEBUG] [Thread-181577] [transport.py] [_log()] starting thread (client mode): 0xae52c1c0
2026-04-12T03:04:38.172 [DEBUG] [Thread-181577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:04:38.187 [DEBUG] [Thread-181577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:04:38.187 [INFO] [Thread-181577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:04:38.195 [DEBUG] [Thread-181577] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:04:38.195 [DEBUG] [Thread-181577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:04:38.196 [DEBUG] [Thread-181577] [transport.py] [_log()] client lang: <none>
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] server lang: <none>
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] kex follows: False
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] Compression: none
2026-04-12T03:04:38.197 [DEBUG] [Thread-181577] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:04:38.253 [DEBUG] [Thread-181577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:04:38.254 [DEBUG] [Thread-181577] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:04:38.254 [DEBUG] [Thread-181577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:04:38.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:04:38.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:04:38.309 [DEBUG] [Thread-181577] [transport.py] [_log()] userauth is OK
2026-04-12T03:04:38.309 [DEBUG] [Thread-181577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:04:38.309 [DEBUG] [Thread-181577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:04:38.310 [DEBUG] [Thread-181577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:04:38.310 [DEBUG] [Thread-181579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:38.311 [DEBUG] [Thread-181577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:04:38.331 [INFO] [Thread-181577] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:04:38.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:04:38.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:04:39.153 [DEBUG] [Thread-181577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:04:39.153 [DEBUG] [Thread-181577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:04:39.201 [DEBUG] [Thread-181577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:04:39.201 [DEBUG] [Thread-181577] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:04:39.211 [DEBUG] [Thread-181577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:04:39.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:04:39.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:04:39.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-04-12T03:04:39.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:04:39.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:04:39.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:04:39.249 [DEBUG] [Thread-181577] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:04:53.364 [DEBUG] [Thread-181580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:04:55.932 [DEBUG] [Thread-181581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:08.400 [DEBUG] [Thread-181582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:09.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:05:09.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:05:09.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-04-12T03:05:10.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 4, 47), -0.07015, 100.406, 0.0, 20.8894, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:05:10.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:04:47
2026-04-12T03:05:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:05:11.103 [DEBUG] [Thread-181583] [transport.py] [_log()] starting thread (client mode): 0xb0f6eaa0
2026-04-12T03:05:11.104 [DEBUG] [Thread-181583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:05:11.124 [DEBUG] [Thread-181583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:05:11.124 [INFO] [Thread-181583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:05:11.127 [DEBUG] [Thread-181583] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:05:11.127 [DEBUG] [Thread-181583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:05:11.127 [DEBUG] [Thread-181583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:05:11.127 [DEBUG] [Thread-181583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:11.127 [DEBUG] [Thread-181583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] client lang: <none>
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] server lang: <none>
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] kex follows: False
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] Compression: none
2026-04-12T03:05:11.128 [DEBUG] [Thread-181583] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:05:11.147 [DEBUG] [Thread-181583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:05:11.147 [DEBUG] [Thread-181583] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:05:11.148 [DEBUG] [Thread-181583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:05:11.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:05:11.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:05:11.150 [DEBUG] [Thread-181583] [transport.py] [_log()] userauth is OK
2026-04-12T03:05:11.150 [DEBUG] [Thread-181583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:05:11.150 [DEBUG] [Thread-181583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:05:11.151 [DEBUG] [Thread-181583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:05:11.151 [DEBUG] [Thread-181583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:05:11.173 [INFO] [Thread-181583] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:05:11.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:05:12.162 [DEBUG] [Thread-181583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:05:12.163 [DEBUG] [Thread-181583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:05:12.163 [DEBUG] [Thread-181583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:05:12.204 [DEBUG] [Thread-181583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:05:12.204 [DEBUG] [Thread-181583] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:05:12.207 [DEBUG] [Thread-181583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:05:12.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:05:12.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:05:12.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:05:12.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:05:12.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:05:12.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:05:12.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:05:12.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:05:12.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:05:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.044899 -999.00  +10.10  14.52     98   +9.80 1 3 1 3 1     0    0 0.25 -0.65 ----- 13.5 14.5 272.8 18.4 11.3 -1.1 11.2 -1.0 10.8 -0.9 11.2 -0.3
2026-04-12T03:05:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:05:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:05:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.044899
2026-04-12T03:05:12.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:05:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:05:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:05:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:05:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:05:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:04:47', tmtdew=-0.07015, humidity=100.406, cloud=0.0, wind=20.8894, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:04:39.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:05:12.238 [DEBUG] [Thread-181583] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:05:12.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:05:12.334 [DEBUG] [Thread-181586] [transport.py] [_log()] starting thread (client mode): 0xae52d060
2026-04-12T03:05:12.334 [DEBUG] [Thread-181586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:05:12.348 [DEBUG] [Thread-181586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:05:12.348 [INFO] [Thread-181586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:05:12.356 [DEBUG] [Thread-181586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] client lang: <none>
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] server lang: <none>
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] kex follows: False
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] Compression: none
2026-04-12T03:05:12.357 [DEBUG] [Thread-181586] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:05:12.412 [DEBUG] [Thread-181586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:05:12.413 [DEBUG] [Thread-181586] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:05:12.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:05:12.413 [DEBUG] [Thread-181586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:05:12.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:05:12.469 [DEBUG] [Thread-181586] [transport.py] [_log()] userauth is OK
2026-04-12T03:05:12.469 [DEBUG] [Thread-181586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:05:12.469 [DEBUG] [Thread-181586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:05:12.469 [DEBUG] [Thread-181586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:05:12.469 [DEBUG] [Thread-181586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:05:12.488 [INFO] [Thread-181586] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:05:12.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:05:12.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:05:13.318 [DEBUG] [Thread-181586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:05:13.318 [DEBUG] [Thread-181586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:05:13.366 [DEBUG] [Thread-181586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:05:13.366 [DEBUG] [Thread-181586] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:05:13.376 [DEBUG] [Thread-181586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:05:13.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03: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-04-12T03:05:13.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-04-12T03:05:13.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:05:13.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:05:13.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:05:13.412 [DEBUG] [Thread-181586] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:05:23.436 [DEBUG] [Thread-181588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:37.965 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:37.966 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:38.499 [DEBUG] [Thread-181589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:05:43.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:05:43.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:05:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 5, 23), -0.02764, 100.153, 0.0, 17.9798, 10.0015, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:05:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:05:23
2026-04-12T03:05:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:05:45.254 [DEBUG] [Thread-181590] [transport.py] [_log()] starting thread (client mode): 0xae52f5e0
2026-04-12T03:05:45.255 [DEBUG] [Thread-181590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:05:45.275 [DEBUG] [Thread-181590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:05:45.275 [INFO] [Thread-181590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:05:45.278 [DEBUG] [Thread-181590] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] client lang: <none>
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] server lang: <none>
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] kex follows: False
2026-04-12T03:05:45.279 [DEBUG] [Thread-181590] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:05:45.280 [DEBUG] [Thread-181590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:05:45.280 [DEBUG] [Thread-181590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:05:45.280 [DEBUG] [Thread-181590] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:05:45.280 [DEBUG] [Thread-181590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:05:45.280 [DEBUG] [Thread-181590] [transport.py] [_log()] Compression: none
2026-04-12T03:05:45.280 [DEBUG] [Thread-181590] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:05:45.299 [DEBUG] [Thread-181590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:05:45.299 [DEBUG] [Thread-181590] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:05:45.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:05:45.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:05:45.301 [DEBUG] [Thread-181590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:05:45.302 [DEBUG] [Thread-181590] [transport.py] [_log()] userauth is OK
2026-04-12T03:05:45.302 [DEBUG] [Thread-181590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:05:45.302 [DEBUG] [Thread-181590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:05:45.302 [DEBUG] [Thread-181590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:05:45.303 [DEBUG] [Thread-181590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:05:45.325 [INFO] [Thread-181590] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:05:45.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:05:45.972 [DEBUG] [Thread-181590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:05:45.973 [DEBUG] [Thread-181590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:05:45.973 [DEBUG] [Thread-181590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:05:46.014 [DEBUG] [Thread-181590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:05:46.014 [DEBUG] [Thread-181590] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:05:46.017 [DEBUG] [Thread-181590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:05:46.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:05:46.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:05:46.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:05:46.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:05:46.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:05:46.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:05:46.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:05:46.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:05:46.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:05:46.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.045246 -999.00  +10.10  16.93     98   +9.80 1 3 1 3 1     0    0 0.26 -0.50 ----- 13.1 16.9 271.5 20.2 11.3 -1.1 11.2 -1.0 10.8 -0.8 11.1 -0.3
2026-04-12T03:05:46.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:05:46.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:05:46.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.045246
2026-04-12T03:05:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:05:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:05:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:05:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:05:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:05:46.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:05:23', tmtdew=-0.02764, humidity=100.153, cloud=0.0, wind=17.9798, temperature=10.0015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:05:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:05:46.042 [DEBUG] [Thread-181590] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:05:46.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:05:46.137 [DEBUG] [Thread-181593] [transport.py] [_log()] starting thread (client mode): 0xae52c910
2026-04-12T03:05:46.137 [DEBUG] [Thread-181593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:05:46.151 [DEBUG] [Thread-181593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:05:46.151 [INFO] [Thread-181593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:05:46.159 [DEBUG] [Thread-181593] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:05:46.159 [DEBUG] [Thread-181593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:05:46.159 [DEBUG] [Thread-181593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] client lang: <none>
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] server lang: <none>
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] kex follows: False
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] Compression: none
2026-04-12T03:05:46.160 [DEBUG] [Thread-181593] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:05:46.216 [DEBUG] [Thread-181593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:05:46.216 [DEBUG] [Thread-181593] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:05:46.217 [DEBUG] [Thread-181593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:05:46.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:05:46.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:05:46.274 [DEBUG] [Thread-181593] [transport.py] [_log()] userauth is OK
2026-04-12T03:05:46.274 [DEBUG] [Thread-181593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:05:46.274 [DEBUG] [Thread-181593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:05:46.274 [DEBUG] [Thread-181593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:05:46.274 [DEBUG] [Thread-181593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:05:46.293 [INFO] [Thread-181593] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:05:46.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:05:46.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:05:47.152 [DEBUG] [Thread-181593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:05:47.152 [DEBUG] [Thread-181593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:05:47.201 [DEBUG] [Thread-181593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:05:47.201 [DEBUG] [Thread-181593] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:05:47.210 [DEBUG] [Thread-181593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:05:47.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:05:47.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-04-12T03:05:47.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:05:47.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:05:47.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:05:47.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:05:47.250 [DEBUG] [Thread-181593] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:05:53.531 [DEBUG] [Thread-181595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:05:56.002 [DEBUG] [Thread-181596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:08.584 [DEBUG] [Thread-181597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:06:17.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:06:17.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-04-12T03:06:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 5, 58), -0.030075, 100.17, 0.0, 18.4561, 9.96832, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:06:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:05:58
2026-04-12T03:06:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:06:19.087 [DEBUG] [Thread-181598] [transport.py] [_log()] starting thread (client mode): 0xae52cc10
2026-04-12T03:06:19.088 [DEBUG] [Thread-181598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:06:19.099 [DEBUG] [Thread-181598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:06:19.099 [INFO] [Thread-181598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:06:19.102 [DEBUG] [Thread-181598] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] client lang: <none>
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] server lang: <none>
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] kex follows: False
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] Compression: none
2026-04-12T03:06:19.103 [DEBUG] [Thread-181598] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:06:19.125 [DEBUG] [Thread-181598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:06:19.125 [DEBUG] [Thread-181598] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:06:19.126 [DEBUG] [Thread-181598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:06:19.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:06:19.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:06:19.127 [DEBUG] [Thread-181598] [transport.py] [_log()] userauth is OK
2026-04-12T03:06:19.128 [DEBUG] [Thread-181598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:06:19.128 [DEBUG] [Thread-181598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:06:19.128 [DEBUG] [Thread-181598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:06:19.128 [DEBUG] [Thread-181598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:06:19.146 [INFO] [Thread-181598] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:06:19.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:06:19.790 [DEBUG] [Thread-181598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:06:19.790 [DEBUG] [Thread-181598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:06:19.791 [DEBUG] [Thread-181598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:06:19.831 [DEBUG] [Thread-181598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:06:19.831 [DEBUG] [Thread-181598] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:06:19.834 [DEBUG] [Thread-181598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:06:19.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:06:19.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:06:19.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:06:19.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:06:19.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:06:19.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:06:19.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:06:19.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:06:19.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:06:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.045593 -999.00  +10.10  12.77     98   +9.80 1 3 1 3 1     0    0 0.26 -0.38 ----- 18.8 12.8 286.8 15.8 11.3 -1.0 11.2 -1.0 10.8 -0.8 11.2 -0.2
2026-04-12T03:06:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:06:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:06:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.045593
2026-04-12T03:06:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:06:19.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:06:19.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:06:19.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:06:19.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:06:19.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:05:58', tmtdew=-0.030075, humidity=100.17, cloud=0.0, wind=18.4561, temperature=9.96832, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:05:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:06:19.861 [DEBUG] [Thread-181598] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:06:19.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:06:23.622 [DEBUG] [Thread-181601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:38.169 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:38.171 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:38.674 [DEBUG] [Thread-181602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:53.712 [DEBUG] [Thread-181603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:06:56.070 [DEBUG] [Thread-181604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:08.750 [DEBUG] [Thread-181605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:23.788 [DEBUG] [Thread-181606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:38.375 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:38.376 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:38.822 [DEBUG] [Thread-181607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:53.858 [DEBUG] [Thread-181608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:07:56.140 [DEBUG] [Thread-181609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:08.891 [DEBUG] [Thread-181610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:23.928 [DEBUG] [Thread-181611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:35.071 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-04-12T03:08:38.578 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:38.580 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:38.966 [DEBUG] [Thread-181612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:54.005 [DEBUG] [Thread-181613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:08:56.216 [DEBUG] [Thread-181614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:09:05.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:09:05.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-04-12T03:09:06.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 8, 55), 0.02238, 100.153, 0.0, 20.2745, 9.98491, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:09:06.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:08:55
2026-04-12T03:09:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:09:06.842 [DEBUG] [Thread-181615] [transport.py] [_log()] starting thread (client mode): 0xae5b3fd0
2026-04-12T03:09:06.842 [DEBUG] [Thread-181615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:09:06.861 [DEBUG] [Thread-181615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:09:06.861 [INFO] [Thread-181615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] client lang: <none>
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] server lang: <none>
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] kex follows: False
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] Compression: none
2026-04-12T03:09:06.865 [DEBUG] [Thread-181615] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:09:06.882 [DEBUG] [Thread-181615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:09:06.882 [DEBUG] [Thread-181615] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:09:06.883 [DEBUG] [Thread-181615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:09:06.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:09:06.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:09:06.884 [DEBUG] [Thread-181615] [transport.py] [_log()] userauth is OK
2026-04-12T03:09:06.885 [DEBUG] [Thread-181615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:09:06.885 [DEBUG] [Thread-181615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:09:06.885 [DEBUG] [Thread-181615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:09:06.885 [DEBUG] [Thread-181615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:09:06.917 [INFO] [Thread-181615] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:09:06.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:09:07.661 [DEBUG] [Thread-181615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:09:07.662 [DEBUG] [Thread-181615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:09:07.662 [DEBUG] [Thread-181615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:09:07.704 [DEBUG] [Thread-181615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:09:07.704 [DEBUG] [Thread-181615] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:09:07.707 [DEBUG] [Thread-181615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:09:07.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:09:07.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:09:07.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:09:07.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:09:07.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:09:07.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:09:07.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:09:07.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:09:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:09:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.047676 -999.00  +10.00  19.03     98   +9.70 1 3 1 3 1     0    0 0.29 0.80 ----- 17.5 19.0 280.3 26.1 11.4 -1.5 11.2 -1.3 10.9 -1.2 11.2 -0.5
2026-04-12T03:09:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:09:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:09:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.047676
2026-04-12T03:09:07.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:09:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:09:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:09:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:09:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:09:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:08:55', tmtdew=0.02238, humidity=100.153, cloud=0.0, wind=20.2745, temperature=9.98491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:08:39.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:09:07.730 [DEBUG] [Thread-181615] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:09:07.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:09:07.825 [DEBUG] [Thread-181618] [transport.py] [_log()] starting thread (client mode): 0xae5b0df0
2026-04-12T03:09:07.825 [DEBUG] [Thread-181618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:09:07.840 [DEBUG] [Thread-181618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:09:07.840 [INFO] [Thread-181618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:07.848 [DEBUG] [Thread-181618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] client lang: <none>
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] server lang: <none>
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] kex follows: False
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:09:07.849 [DEBUG] [Thread-181618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:09:07.850 [DEBUG] [Thread-181618] [transport.py] [_log()] Compression: none
2026-04-12T03:09:07.850 [DEBUG] [Thread-181618] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:09:07.904 [DEBUG] [Thread-181618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:09:07.905 [DEBUG] [Thread-181618] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:09:07.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:09:07.906 [DEBUG] [Thread-181618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:09:07.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:09:07.964 [DEBUG] [Thread-181618] [transport.py] [_log()] userauth is OK
2026-04-12T03:09:07.964 [DEBUG] [Thread-181618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:09:07.965 [DEBUG] [Thread-181618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:09:07.965 [DEBUG] [Thread-181618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:09:07.965 [DEBUG] [Thread-181618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:09:07.985 [INFO] [Thread-181618] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:09:07.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:09:07.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:09:08.839 [DEBUG] [Thread-181618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:09:08.839 [DEBUG] [Thread-181618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:09:08.886 [DEBUG] [Thread-181618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:09:08.887 [DEBUG] [Thread-181618] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:09:08.896 [DEBUG] [Thread-181618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:09:08.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:09:08.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-04-12T03:09:08.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-04-12T03:09:08.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:09:08.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:09:08.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:09:08.933 [DEBUG] [Thread-181618] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:09:09.044 [DEBUG] [Thread-181620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:24.096 [DEBUG] [Thread-181621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:38.779 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:38.781 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:38.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:09:38.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:09:38.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-04-12T03:09:39.135 [DEBUG] [Thread-181622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 9, 30), 0.02238, 100.153, 0.0, 21.5798, 9.98491, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:09:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:09:30
2026-04-12T03:09:40.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:09:40.785 [DEBUG] [Thread-181623] [transport.py] [_log()] starting thread (client mode): 0xb0f6eaa0
2026-04-12T03:09:40.786 [DEBUG] [Thread-181623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:09:40.806 [DEBUG] [Thread-181623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:09:40.806 [INFO] [Thread-181623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] client lang: <none>
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] server lang: <none>
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] kex follows: False
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:09:40.809 [DEBUG] [Thread-181623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:09:40.810 [DEBUG] [Thread-181623] [transport.py] [_log()] Compression: none
2026-04-12T03:09:40.810 [DEBUG] [Thread-181623] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:09:40.826 [DEBUG] [Thread-181623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:09:40.827 [DEBUG] [Thread-181623] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:09:40.827 [DEBUG] [Thread-181623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:09:40.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:09:40.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:09:40.829 [DEBUG] [Thread-181623] [transport.py] [_log()] userauth is OK
2026-04-12T03:09:40.830 [DEBUG] [Thread-181623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:09:40.830 [DEBUG] [Thread-181623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:09:40.830 [DEBUG] [Thread-181623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:09:40.830 [DEBUG] [Thread-181623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:09:40.848 [INFO] [Thread-181623] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:09:40.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:09:41.634 [DEBUG] [Thread-181623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:09:41.634 [DEBUG] [Thread-181623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:09:41.635 [DEBUG] [Thread-181623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:09:41.675 [DEBUG] [Thread-181623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:09:41.675 [DEBUG] [Thread-181623] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:09:41.678 [DEBUG] [Thread-181623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:09:41.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:09:41.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:09:41.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:09:41.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:09:41.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:09:41.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:09:41.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:09:41.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:09:41.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:09:41.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.048024 -999.00  +10.00  17.78     98   +9.70 1 3 1 3 1     0    0 0.30 1.14 ----- 17.3 17.8 285.8 20.7 11.3 -1.2 11.2 -1.3 10.8 -1.4 11.2 -0.6
2026-04-12T03:09:41.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:09:41.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:09:41.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.048024
2026-04-12T03:09:41.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:09:41.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:09:41.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:09:41.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:09:41.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:09:41.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:09:30', tmtdew=0.02238, humidity=100.153, cloud=0.0, wind=21.5798, temperature=9.98491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:09:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:09:41.706 [DEBUG] [Thread-181623] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:09:41.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:09:41.800 [DEBUG] [Thread-181626] [transport.py] [_log()] starting thread (client mode): 0xae52ffa0
2026-04-12T03:09:41.800 [DEBUG] [Thread-181626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:09:41.815 [DEBUG] [Thread-181626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:09:41.815 [INFO] [Thread-181626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:09:41.823 [DEBUG] [Thread-181626] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:09:41.823 [DEBUG] [Thread-181626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:09:41.823 [DEBUG] [Thread-181626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:09:41.823 [DEBUG] [Thread-181626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] client lang: <none>
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] server lang: <none>
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] kex follows: False
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] Compression: none
2026-04-12T03:09:41.824 [DEBUG] [Thread-181626] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:09:41.879 [DEBUG] [Thread-181626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:09:41.880 [DEBUG] [Thread-181626] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:09:41.880 [DEBUG] [Thread-181626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:09:41.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:09:41.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:09:41.937 [DEBUG] [Thread-181626] [transport.py] [_log()] userauth is OK
2026-04-12T03:09:41.937 [DEBUG] [Thread-181626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:09:41.937 [DEBUG] [Thread-181626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:09:41.937 [DEBUG] [Thread-181626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:09:41.938 [DEBUG] [Thread-181626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:09:41.957 [INFO] [Thread-181626] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:09:41.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:09:41.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:09:42.772 [DEBUG] [Thread-181626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:09:42.772 [DEBUG] [Thread-181626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:09:42.820 [DEBUG] [Thread-181626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:09:42.820 [DEBUG] [Thread-181626] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:09:42.830 [DEBUG] [Thread-181626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:09:42.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:09:42.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:09:42.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-04-12T03:09:42.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:09:42.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:09:42.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:09:42.866 [DEBUG] [Thread-181626] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:09:54.170 [DEBUG] [Thread-181628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:09:56.294 [DEBUG] [Thread-181629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:09.220 [DEBUG] [Thread-181630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:12.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:10:12.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:10:12.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-04-12T03:10:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 10, 6), 0.02736, 100.12, 0.0, 22.603, 9.96832, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:10:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:10:06
2026-04-12T03:10:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:10:14.746 [DEBUG] [Thread-181631] [transport.py] [_log()] starting thread (client mode): 0xae52c400
2026-04-12T03:10:14.746 [DEBUG] [Thread-181631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:10:14.767 [DEBUG] [Thread-181631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:10:14.767 [INFO] [Thread-181631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] client lang: <none>
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] server lang: <none>
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] kex follows: False
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] Compression: none
2026-04-12T03:10:14.770 [DEBUG] [Thread-181631] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:10:14.789 [DEBUG] [Thread-181631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:10:14.789 [DEBUG] [Thread-181631] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:10:14.790 [DEBUG] [Thread-181631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:10:14.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:10:14.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:10:14.792 [DEBUG] [Thread-181631] [transport.py] [_log()] userauth is OK
2026-04-12T03:10:14.792 [DEBUG] [Thread-181631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:10:14.792 [DEBUG] [Thread-181631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:10:14.792 [DEBUG] [Thread-181631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:10:14.793 [DEBUG] [Thread-181631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:10:14.818 [INFO] [Thread-181631] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:10:14.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:10:15.931 [DEBUG] [Thread-181631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:10:15.931 [DEBUG] [Thread-181631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:10:15.931 [DEBUG] [Thread-181631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:10:15.972 [DEBUG] [Thread-181631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:10:15.972 [DEBUG] [Thread-181631] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:10:15.975 [DEBUG] [Thread-181631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:10:15.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:10:15.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:10:15.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:10:15.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:10:16.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:10:16.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:10:16.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:10:16.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:10:16.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:10:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.048371 -999.00   +9.90  16.61     98   +9.70 1 3 1 3 1     0    0 0.31 1.19 ----- 15.0 16.6 282.2 21.2 11.3 -1.4 11.2 -1.2 10.8 -1.6 11.2 -0.6
2026-04-12T03:10:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:10:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:10:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.048371
2026-04-12T03:10:16.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:10:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:10:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:10:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:10:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:10:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:10:06', tmtdew=0.02736, humidity=100.12, cloud=0.0, wind=22.603, temperature=9.96832, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:09:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:10:16.013 [DEBUG] [Thread-181631] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:10:16.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:10:16.108 [DEBUG] [Thread-181634] [transport.py] [_log()] starting thread (client mode): 0xae52c460
2026-04-12T03:10:16.108 [DEBUG] [Thread-181634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:10:16.123 [DEBUG] [Thread-181634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:10:16.123 [INFO] [Thread-181634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:10:16.130 [DEBUG] [Thread-181634] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] client lang: <none>
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] server lang: <none>
2026-04-12T03:10:16.131 [DEBUG] [Thread-181634] [transport.py] [_log()] kex follows: False
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] Compression: none
2026-04-12T03:10:16.132 [DEBUG] [Thread-181634] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:10:16.189 [DEBUG] [Thread-181634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:10:16.189 [DEBUG] [Thread-181634] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:10:16.190 [DEBUG] [Thread-181634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:10:16.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:10:16.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:10:16.244 [DEBUG] [Thread-181634] [transport.py] [_log()] userauth is OK
2026-04-12T03:10:16.245 [DEBUG] [Thread-181634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:10:16.245 [DEBUG] [Thread-181634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:10:16.245 [DEBUG] [Thread-181634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:10:16.245 [DEBUG] [Thread-181634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:10:16.263 [INFO] [Thread-181634] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:10:16.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:10:16.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:10:17.079 [DEBUG] [Thread-181634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:10:17.080 [DEBUG] [Thread-181634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:10:17.128 [DEBUG] [Thread-181634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:10:17.128 [DEBUG] [Thread-181634] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:10:17.137 [DEBUG] [Thread-181634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:10:17.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:10:17.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-04-12T03:10:17.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-04-12T03:10:17.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:10:17.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:10:17.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:10:17.170 [DEBUG] [Thread-181634] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:10:24.258 [DEBUG] [Thread-181636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:38.986 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:38.988 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:39.311 [DEBUG] [Thread-181637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:10:47.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:10:47.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-04-12T03:10:48.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 10, 41), -0.05528, 100.307, 0.0, 22.7592, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:10:48.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:10:41
2026-04-12T03:10:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:10:48.995 [DEBUG] [Thread-181638] [transport.py] [_log()] starting thread (client mode): 0xae5b14b0
2026-04-12T03:10:48.995 [DEBUG] [Thread-181638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:10:49.015 [DEBUG] [Thread-181638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:10:49.015 [INFO] [Thread-181638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] client lang: <none>
2026-04-12T03:10:49.018 [DEBUG] [Thread-181638] [transport.py] [_log()] server lang: <none>
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] kex follows: False
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] Compression: none
2026-04-12T03:10:49.019 [DEBUG] [Thread-181638] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:10:49.035 [DEBUG] [Thread-181638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:10:49.035 [DEBUG] [Thread-181638] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:10:49.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:10:49.036 [DEBUG] [Thread-181638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:10:49.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:10:49.039 [DEBUG] [Thread-181638] [transport.py] [_log()] userauth is OK
2026-04-12T03:10:49.039 [DEBUG] [Thread-181638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:10:49.039 [DEBUG] [Thread-181638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:10:49.039 [DEBUG] [Thread-181638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:10:49.039 [DEBUG] [Thread-181638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:10:49.062 [INFO] [Thread-181638] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:10:49.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:10:49.811 [DEBUG] [Thread-181638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:10:49.811 [DEBUG] [Thread-181638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:10:49.811 [DEBUG] [Thread-181638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:10:49.852 [DEBUG] [Thread-181638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:10:49.852 [DEBUG] [Thread-181638] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:10:49.856 [DEBUG] [Thread-181638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:10:49.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:10:49.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:10:49.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:10:49.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:10:49.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:10:49.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:10:49.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:10:49.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:10:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:10:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.048718 -999.00  +10.00  16.49     98   +9.70 1 3 1 3 1     0    0 0.31 1.09 ----- 15.1 16.5 287.0 22.4 11.3 -1.3 -999.0 -999.0 10.8 -1.3 11.2 -0.5
2026-04-12T03:10:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:10:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:10:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.048718
2026-04-12T03:10:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:10:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:10:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:10:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:10:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:10:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:10:41', tmtdew=-0.05528, humidity=100.307, cloud=0.0, wind=22.7592, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:10:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:10:49.885 [DEBUG] [Thread-181638] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:10:49.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:10:49.983 [DEBUG] [Thread-181641] [transport.py] [_log()] starting thread (client mode): 0xae5b3880
2026-04-12T03:10:49.983 [DEBUG] [Thread-181641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:10:49.998 [DEBUG] [Thread-181641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:10:49.998 [INFO] [Thread-181641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] client lang: <none>
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] server lang: <none>
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] kex follows: False
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:10:50.006 [DEBUG] [Thread-181641] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:10:50.007 [DEBUG] [Thread-181641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:10:50.007 [DEBUG] [Thread-181641] [transport.py] [_log()] Compression: none
2026-04-12T03:10:50.007 [DEBUG] [Thread-181641] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:10:50.065 [DEBUG] [Thread-181641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:10:50.066 [DEBUG] [Thread-181641] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:10:50.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:10:50.067 [DEBUG] [Thread-181641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:10:50.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:10:50.125 [DEBUG] [Thread-181641] [transport.py] [_log()] userauth is OK
2026-04-12T03:10:50.125 [DEBUG] [Thread-181641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:10:50.125 [DEBUG] [Thread-181641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:10:50.126 [DEBUG] [Thread-181641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:10:50.126 [DEBUG] [Thread-181641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:10:50.145 [INFO] [Thread-181641] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:10:50.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:10:50.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:10:50.944 [DEBUG] [Thread-181641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:10:50.944 [DEBUG] [Thread-181641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:10:50.992 [DEBUG] [Thread-181641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:10:50.992 [DEBUG] [Thread-181641] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:10:51.002 [DEBUG] [Thread-181641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:10:51.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:10:51.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:10:51.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-04-12T03:10:51.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:10:51.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:10:51.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:10:51.039 [DEBUG] [Thread-181641] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:10:54.344 [DEBUG] [Thread-181643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:10:56.371 [DEBUG] [Thread-181644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:09.396 [DEBUG] [Thread-181645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:11:21.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:11:21.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-04-12T03:11:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 10, 41), -0.05528, 100.307, 0.0, 22.7592, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:11:22.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:10:41
2026-04-12T03:11:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:11:23.030 [DEBUG] [Thread-181646] [transport.py] [_log()] starting thread (client mode): 0xae5b0a60
2026-04-12T03:11:23.030 [DEBUG] [Thread-181646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:11:23.049 [DEBUG] [Thread-181646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:11:23.049 [INFO] [Thread-181646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:11:23.052 [DEBUG] [Thread-181646] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] client lang: <none>
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] server lang: <none>
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] kex follows: False
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:11:23.053 [DEBUG] [Thread-181646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:11:23.054 [DEBUG] [Thread-181646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:11:23.054 [DEBUG] [Thread-181646] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:11:23.054 [DEBUG] [Thread-181646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:11:23.054 [DEBUG] [Thread-181646] [transport.py] [_log()] Compression: none
2026-04-12T03:11:23.054 [DEBUG] [Thread-181646] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:11:23.071 [DEBUG] [Thread-181646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:11:23.071 [DEBUG] [Thread-181646] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:11:23.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:11:23.072 [DEBUG] [Thread-181646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:11:23.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:11:23.074 [DEBUG] [Thread-181646] [transport.py] [_log()] userauth is OK
2026-04-12T03:11:23.075 [DEBUG] [Thread-181646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:11:23.075 [DEBUG] [Thread-181646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:11:23.075 [DEBUG] [Thread-181646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:11:23.075 [DEBUG] [Thread-181646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:11:23.110 [INFO] [Thread-181646] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:11:23.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:11:23.921 [DEBUG] [Thread-181646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:11:23.921 [DEBUG] [Thread-181646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:11:23.921 [DEBUG] [Thread-181646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:11:23.962 [DEBUG] [Thread-181646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:11:23.962 [DEBUG] [Thread-181646] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:11:23.965 [DEBUG] [Thread-181646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:11:23.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:11:23.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:11:23.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:11:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:11:23.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:11:23.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:11:23.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:11:23.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:11:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:11:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.049065 -999.00  +10.00  13.46     98   +9.70 1 3 1 3 1     0    0 0.31 1.38 ----- 16.6 13.5 283.4 22.1 11.3 -1.3 11.2 -1.3 10.8 -0.9 11.2 -0.7
2026-04-12T03:11:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:11:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:11:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.049065
2026-04-12T03:11:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:11:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:11:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:11:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:11:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:11:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:10:41', tmtdew=-0.05528, humidity=100.307, cloud=0.0, wind=22.7592, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:10:39.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:11:23.995 [DEBUG] [Thread-181646] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:11:24.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:11:24.089 [DEBUG] [Thread-181649] [transport.py] [_log()] starting thread (client mode): 0xae52cf70
2026-04-12T03:11:24.089 [DEBUG] [Thread-181649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:11:24.103 [DEBUG] [Thread-181649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:11:24.103 [INFO] [Thread-181649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:11:24.111 [DEBUG] [Thread-181649] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:11:24.111 [DEBUG] [Thread-181649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] client lang: <none>
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] server lang: <none>
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] kex follows: False
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] Compression: none
2026-04-12T03:11:24.112 [DEBUG] [Thread-181649] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:11:24.169 [DEBUG] [Thread-181649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:11:24.170 [DEBUG] [Thread-181649] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:11:24.171 [DEBUG] [Thread-181649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:11:24.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:11:24.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:11:24.228 [DEBUG] [Thread-181649] [transport.py] [_log()] userauth is OK
2026-04-12T03:11:24.228 [DEBUG] [Thread-181649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:11:24.228 [DEBUG] [Thread-181649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:11:24.228 [DEBUG] [Thread-181649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:11:24.228 [DEBUG] [Thread-181649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:11:24.248 [INFO] [Thread-181649] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:11:24.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:11:24.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:11:24.432 [DEBUG] [Thread-181651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:25.071 [DEBUG] [Thread-181649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:11:25.072 [DEBUG] [Thread-181649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:11:25.119 [DEBUG] [Thread-181649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:11:25.119 [DEBUG] [Thread-181649] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:11:25.128 [DEBUG] [Thread-181649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:11:25.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:11:25.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-04-12T03:11:25.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:11:25.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:11:25.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:11:25.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:11:25.165 [DEBUG] [Thread-181649] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:11:39.190 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:39.192 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:39.483 [DEBUG] [Thread-181652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:54.519 [DEBUG] [Thread-181653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:11:55.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:11:55.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-04-12T03:11:56.449 [DEBUG] [Thread-181654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:11:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 11, 16), -0.03262, 100.187, 0.0, 18.8089, 9.96808, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:11:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:11:16
2026-04-12T03:11:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:11:57.004 [DEBUG] [Thread-181655] [transport.py] [_log()] starting thread (client mode): 0xae52f580
2026-04-12T03:11:57.005 [DEBUG] [Thread-181655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:11:57.025 [DEBUG] [Thread-181655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:11:57.025 [INFO] [Thread-181655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] client lang: <none>
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] server lang: <none>
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] kex follows: False
2026-04-12T03:11:57.029 [DEBUG] [Thread-181655] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:11:57.030 [DEBUG] [Thread-181655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:11:57.030 [DEBUG] [Thread-181655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:11:57.030 [DEBUG] [Thread-181655] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:11:57.030 [DEBUG] [Thread-181655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:11:57.030 [DEBUG] [Thread-181655] [transport.py] [_log()] Compression: none
2026-04-12T03:11:57.030 [DEBUG] [Thread-181655] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:11:57.049 [DEBUG] [Thread-181655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:11:57.050 [DEBUG] [Thread-181655] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:11:57.050 [DEBUG] [Thread-181655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:11:57.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:11:57.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:11:57.053 [DEBUG] [Thread-181655] [transport.py] [_log()] userauth is OK
2026-04-12T03:11:57.053 [DEBUG] [Thread-181655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:11:57.053 [DEBUG] [Thread-181655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:11:57.053 [DEBUG] [Thread-181655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:11:57.053 [DEBUG] [Thread-181655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:11:57.075 [INFO] [Thread-181655] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:11:57.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:11:57.843 [DEBUG] [Thread-181655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:11:57.843 [DEBUG] [Thread-181655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:11:57.844 [DEBUG] [Thread-181655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:11:57.884 [DEBUG] [Thread-181655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:11:57.884 [DEBUG] [Thread-181655] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:11:57.886 [DEBUG] [Thread-181655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:11:57.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:11:57.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:11:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:11:57.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:11:57.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:11:57.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:11:57.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:11:57.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.049412 -999.00   +9.90  19.92     98   +9.70 1 3 1 3 1     0    0 0.32 1.55 ----- 22.0 19.9 280.0 24.1 11.3 -1.4 11.2 -1.5 10.8 -0.9 11.2 -0.8
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.049412
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:11:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:11:16', tmtdew=-0.03262, humidity=100.187, cloud=0.0, wind=18.8089, temperature=9.96808, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:11:09.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:11:57.904 [DEBUG] [Thread-181655] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:11:57.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:11:57.989 [DEBUG] [Thread-181658] [transport.py] [_log()] starting thread (client mode): 0xae52e890
2026-04-12T03:11:57.989 [DEBUG] [Thread-181658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:11:58.004 [DEBUG] [Thread-181658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:11:58.004 [INFO] [Thread-181658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] client lang: <none>
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] server lang: <none>
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] kex follows: False
2026-04-12T03:11:58.011 [DEBUG] [Thread-181658] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:11:58.012 [DEBUG] [Thread-181658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:11:58.012 [DEBUG] [Thread-181658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:11:58.012 [DEBUG] [Thread-181658] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:11:58.012 [DEBUG] [Thread-181658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:11:58.012 [DEBUG] [Thread-181658] [transport.py] [_log()] Compression: none
2026-04-12T03:11:58.012 [DEBUG] [Thread-181658] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:11:58.069 [DEBUG] [Thread-181658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:11:58.070 [DEBUG] [Thread-181658] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:11:58.071 [DEBUG] [Thread-181658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:11:58.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:11:58.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:11:58.128 [DEBUG] [Thread-181658] [transport.py] [_log()] userauth is OK
2026-04-12T03:11:58.128 [DEBUG] [Thread-181658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:11:58.129 [DEBUG] [Thread-181658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:11:58.129 [DEBUG] [Thread-181658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:11:58.129 [DEBUG] [Thread-181658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:11:58.153 [INFO] [Thread-181658] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:11:58.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:11:58.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:11:58.956 [DEBUG] [Thread-181658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:11:58.956 [DEBUG] [Thread-181658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:11:59.004 [DEBUG] [Thread-181658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:11:59.004 [DEBUG] [Thread-181658] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:11:59.013 [DEBUG] [Thread-181658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:11:59.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:11:59.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-04-12T03:11:59.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-04-12T03:11:59.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:11:59.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:11:59.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:11:59.051 [DEBUG] [Thread-181658] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:12:09.555 [DEBUG] [Thread-181660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:12:24.609 [DEBUG] [Thread-181661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:12:29.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:12:29.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:12:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:12:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 11, 52), -0.06024, 100.34, 0.0, 23.994, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:12:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:11:52
2026-04-12T03:12:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:12:30.979 [DEBUG] [Thread-181662] [transport.py] [_log()] starting thread (client mode): 0xae5b0370
2026-04-12T03:12:30.979 [DEBUG] [Thread-181662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:12:30.999 [DEBUG] [Thread-181662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:12:30.999 [INFO] [Thread-181662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:12:31.002 [DEBUG] [Thread-181662] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] client lang: <none>
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] server lang: <none>
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] kex follows: False
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] Compression: none
2026-04-12T03:12:31.003 [DEBUG] [Thread-181662] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:12:31.018 [DEBUG] [Thread-181662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:12:31.018 [DEBUG] [Thread-181662] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:12:31.019 [DEBUG] [Thread-181662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:12:31.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:12:31.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:12:31.021 [DEBUG] [Thread-181662] [transport.py] [_log()] userauth is OK
2026-04-12T03:12:31.021 [DEBUG] [Thread-181662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:12:31.021 [DEBUG] [Thread-181662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:12:31.021 [DEBUG] [Thread-181662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:12:31.021 [DEBUG] [Thread-181662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:12:31.046 [INFO] [Thread-181662] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:12:31.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:12:31.846 [DEBUG] [Thread-181662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:12:31.846 [DEBUG] [Thread-181662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:12:31.846 [DEBUG] [Thread-181662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:12:31.887 [DEBUG] [Thread-181662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:12:31.887 [DEBUG] [Thread-181662] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:12:31.891 [DEBUG] [Thread-181662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:12:31.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:12:31.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:12:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:12:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:12:31.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:12:31.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:12:31.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:12:31.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:12:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:12:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.050107 -999.00   +9.90  17.67     98   +9.60 1 3 1 3 1     0    0 0.31 1.05 ----- 20.1 17.7 275.5 28.8 11.3 -1.4 11.1 -1.3 10.7 -1.1 11.1 -0.5
2026-04-12T03:12:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:12:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:12:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.050107
2026-04-12T03:12:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:12:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:12:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:12:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:12:31.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:12:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:11:52', tmtdew=-0.06024, humidity=100.34, cloud=0.0, wind=23.994, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:12:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:12:31.917 [DEBUG] [Thread-181662] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:12:32.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:12:32.020 [DEBUG] [Thread-181665] [transport.py] [_log()] starting thread (client mode): 0xae52e3b0
2026-04-12T03:12:32.020 [DEBUG] [Thread-181665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:12:32.037 [DEBUG] [Thread-181665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:12:32.037 [INFO] [Thread-181665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] client lang: <none>
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] server lang: <none>
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] kex follows: False
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:12:32.045 [DEBUG] [Thread-181665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:12:32.046 [DEBUG] [Thread-181665] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:12:32.046 [DEBUG] [Thread-181665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:12:32.046 [DEBUG] [Thread-181665] [transport.py] [_log()] Compression: none
2026-04-12T03:12:32.046 [DEBUG] [Thread-181665] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:12:32.112 [DEBUG] [Thread-181665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:12:32.113 [DEBUG] [Thread-181665] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:12:32.113 [DEBUG] [Thread-181665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:12:32.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:12:32.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:12:32.169 [DEBUG] [Thread-181665] [transport.py] [_log()] userauth is OK
2026-04-12T03:12:32.169 [DEBUG] [Thread-181665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:12:32.169 [DEBUG] [Thread-181665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:12:32.170 [DEBUG] [Thread-181665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:12:32.170 [DEBUG] [Thread-181665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:12:32.191 [INFO] [Thread-181665] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:12:32.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:12:32.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:12:32.992 [DEBUG] [Thread-181665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:12:32.993 [DEBUG] [Thread-181665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:12:33.040 [DEBUG] [Thread-181665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:12:33.041 [DEBUG] [Thread-181665] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:12:33.049 [DEBUG] [Thread-181665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:12:33.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:12:33.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-04-12T03:12:33.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-04-12T03:12:33.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:12:33.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:12:33.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:12:33.084 [DEBUG] [Thread-181665] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:12:39.396 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:12:39.398 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:12:39.648 [DEBUG] [Thread-181667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:12:54.703 [DEBUG] [Thread-181668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:12:56.507 [DEBUG] [Thread-181669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:13:03.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:13:03.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:13:04.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 12, 28), -0.03262, 100.187, 0.0, 21.8268, 9.96808, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:13:04.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:12:28
2026-04-12T03:13:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:13:04.971 [DEBUG] [Thread-181670] [transport.py] [_log()] starting thread (client mode): 0xb0f405e0
2026-04-12T03:13:04.971 [DEBUG] [Thread-181670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:13:04.991 [DEBUG] [Thread-181670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:13:04.991 [INFO] [Thread-181670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] client lang: <none>
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] server lang: <none>
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] kex follows: False
2026-04-12T03:13:04.994 [DEBUG] [Thread-181670] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:13:04.995 [DEBUG] [Thread-181670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:13:04.995 [DEBUG] [Thread-181670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:13:04.995 [DEBUG] [Thread-181670] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:13:04.995 [DEBUG] [Thread-181670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:13:04.995 [DEBUG] [Thread-181670] [transport.py] [_log()] Compression: none
2026-04-12T03:13:04.995 [DEBUG] [Thread-181670] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:13:05.012 [DEBUG] [Thread-181670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:13:05.013 [DEBUG] [Thread-181670] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:13:05.013 [DEBUG] [Thread-181670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:13:05.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:13:05.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:13:05.015 [DEBUG] [Thread-181670] [transport.py] [_log()] userauth is OK
2026-04-12T03:13:05.015 [DEBUG] [Thread-181670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:13:05.015 [DEBUG] [Thread-181670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:13:05.015 [DEBUG] [Thread-181670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:13:05.015 [DEBUG] [Thread-181670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:13:05.041 [INFO] [Thread-181670] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:13:05.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:13:05.841 [DEBUG] [Thread-181670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:13:05.841 [DEBUG] [Thread-181670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:13:05.841 [DEBUG] [Thread-181670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:13:05.882 [DEBUG] [Thread-181670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:13:05.882 [DEBUG] [Thread-181670] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:13:05.886 [DEBUG] [Thread-181670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:13:05.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:13:05.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:13:05.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:13:05.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:13:05.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:13:05.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:13:05.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:13:05.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:13:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:13:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.050454 -999.00   +9.90  22.28     98   +9.60 1 3 1 3 1     0    0 0.29 0.79 ----- 21.7 22.3 277.0 28.6 11.2 -1.5 11.1 -1.5 10.8 -1.4 11.1 -0.5
2026-04-12T03:13:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:13:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:13:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.050454
2026-04-12T03:13:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:13:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:13:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:13:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:13:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:13:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:12:28', tmtdew=-0.03262, humidity=100.187, cloud=0.0, wind=21.8268, temperature=9.96808, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:12:39.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:13:05.912 [DEBUG] [Thread-181670] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:13: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-04-12T03:13:06.005 [DEBUG] [Thread-181673] [transport.py] [_log()] starting thread (client mode): 0xae52eaa0
2026-04-12T03:13:06.005 [DEBUG] [Thread-181673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:13:06.020 [DEBUG] [Thread-181673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:13:06.020 [INFO] [Thread-181673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:06.028 [DEBUG] [Thread-181673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] client lang: <none>
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] server lang: <none>
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] kex follows: False
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] Compression: none
2026-04-12T03:13:06.029 [DEBUG] [Thread-181673] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:13:06.089 [DEBUG] [Thread-181673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:13:06.090 [DEBUG] [Thread-181673] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:13:06.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:13:06.091 [DEBUG] [Thread-181673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:13:06.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:13:06.145 [DEBUG] [Thread-181673] [transport.py] [_log()] userauth is OK
2026-04-12T03:13:06.145 [DEBUG] [Thread-181673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:13:06.145 [DEBUG] [Thread-181673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:13:06.145 [DEBUG] [Thread-181673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:13:06.146 [DEBUG] [Thread-181673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:13:06.164 [INFO] [Thread-181673] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:13:06.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:13:06.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:13:06.995 [DEBUG] [Thread-181673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:13:06.995 [DEBUG] [Thread-181673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:13:07.043 [DEBUG] [Thread-181673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:13:07.044 [DEBUG] [Thread-181673] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:13:07.053 [DEBUG] [Thread-181673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:13:07.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:13:07.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-04-12T03:13:07.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-04-12T03:13:07.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:13:07.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:13:07.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:13:07.088 [DEBUG] [Thread-181673] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:13:09.737 [DEBUG] [Thread-181675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:24.792 [DEBUG] [Thread-181676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:13:37.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:13:37.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:13:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 13, 3), -0.0326, 100.187, 0.0, 22.6206, 9.9515, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:13:38.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:13:03
2026-04-12T03:13:38.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:13:38.871 [DEBUG] [Thread-181677] [transport.py] [_log()] starting thread (client mode): 0xae5b16f0
2026-04-12T03:13:38.871 [DEBUG] [Thread-181677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:13:38.886 [DEBUG] [Thread-181677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:13:38.886 [INFO] [Thread-181677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:13:38.889 [DEBUG] [Thread-181677] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] client lang: <none>
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] server lang: <none>
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] kex follows: False
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:13:38.890 [DEBUG] [Thread-181677] [transport.py] [_log()] Compression: none
2026-04-12T03:13:38.891 [DEBUG] [Thread-181677] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:13:38.909 [DEBUG] [Thread-181677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:13:38.910 [DEBUG] [Thread-181677] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:13:38.910 [DEBUG] [Thread-181677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:13:38.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:13:38.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:13:38.953 [DEBUG] [Thread-181677] [transport.py] [_log()] userauth is OK
2026-04-12T03:13:38.953 [DEBUG] [Thread-181677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:13:38.954 [DEBUG] [Thread-181677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:13:38.954 [DEBUG] [Thread-181677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:13:38.954 [DEBUG] [Thread-181677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:13:38.991 [INFO] [Thread-181677] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:13:38.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:13:39.601 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:39.603 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:39.786 [DEBUG] [Thread-181677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:13:39.786 [DEBUG] [Thread-181677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:13:39.786 [DEBUG] [Thread-181677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:13:39.827 [DEBUG] [Thread-181677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:13:39.827 [DEBUG] [Thread-181677] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:13:39.829 [DEBUG] [Thread-181679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:39.831 [DEBUG] [Thread-181677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:13:39.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:13:39.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:13:39.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:13:39.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:13:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:13:39.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:13:39.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:13:39.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:13:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:13:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.050801 -999.00   +9.90  19.32     98   +9.60 1 3 1 3 1     0    0 0.30 0.70 ----- 19.3 19.3 277.8 26.1 11.2 -1.4 11.1 -1.1 10.7 -1.5 11.1 -0.7
2026-04-12T03:13:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:13:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:13:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.050801
2026-04-12T03:13:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:13:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:13:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:13:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:13:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:13:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:13:03', tmtdew=-0.0326, humidity=100.187, cloud=0.0, wind=22.6206, temperature=9.9515, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:13:09.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:13:39.856 [DEBUG] [Thread-181677] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:13:39.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:13:39.951 [DEBUG] [Thread-181681] [transport.py] [_log()] starting thread (client mode): 0xae563d00
2026-04-12T03:13:39.951 [DEBUG] [Thread-181681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:13:40.186 [DEBUG] [Thread-181681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:13:40.186 [INFO] [Thread-181681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:13:40.188 [DEBUG] [Thread-181681] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:13:40.188 [DEBUG] [Thread-181681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:13:40.188 [DEBUG] [Thread-181681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:13:40.188 [DEBUG] [Thread-181681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:40.188 [DEBUG] [Thread-181681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:13:40.188 [DEBUG] [Thread-181681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] client lang: <none>
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] server lang: <none>
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] kex follows: False
2026-04-12T03:13:40.189 [DEBUG] [Thread-181681] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:13:40.190 [DEBUG] [Thread-181681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:13:40.190 [DEBUG] [Thread-181681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:13:40.190 [DEBUG] [Thread-181681] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:13:40.190 [DEBUG] [Thread-181681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:13:40.191 [DEBUG] [Thread-181681] [transport.py] [_log()] Compression: none
2026-04-12T03:13:40.191 [DEBUG] [Thread-181681] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:13:40.253 [DEBUG] [Thread-181681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:13:40.253 [DEBUG] [Thread-181681] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:13:40.254 [DEBUG] [Thread-181681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:13:40.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:13:40.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:13:40.309 [DEBUG] [Thread-181681] [transport.py] [_log()] userauth is OK
2026-04-12T03:13:40.309 [DEBUG] [Thread-181681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:13:40.310 [DEBUG] [Thread-181681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:13:40.310 [DEBUG] [Thread-181681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:13:40.310 [DEBUG] [Thread-181681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:13:40.328 [INFO] [Thread-181681] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:13:40.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:13:40.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:13:41.152 [DEBUG] [Thread-181681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:13:41.152 [DEBUG] [Thread-181681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:13:41.200 [DEBUG] [Thread-181681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:13:41.200 [DEBUG] [Thread-181681] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:13:41.210 [DEBUG] [Thread-181681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:13:41.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:13:41.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:13:41.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-04-12T03:13:41.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:13:41.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:13:41.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:13:41.247 [DEBUG] [Thread-181681] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:13:54.867 [DEBUG] [Thread-181683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:13:56.576 [DEBUG] [Thread-181684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:09.922 [DEBUG] [Thread-181685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:11.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:14:11.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:14:11.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:14:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 13, 38), -0.06529, 100.373, 0.0, 23.7118, 10.4693, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:14:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:13:38
2026-04-12T03:14:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:14:13.228 [DEBUG] [Thread-181686] [transport.py] [_log()] starting thread (client mode): 0xb0f43a00
2026-04-12T03:14:13.228 [DEBUG] [Thread-181686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:14:13.250 [DEBUG] [Thread-181686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:14:13.250 [INFO] [Thread-181686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] client lang: <none>
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] server lang: <none>
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] kex follows: False
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] Compression: none
2026-04-12T03:14:13.254 [DEBUG] [Thread-181686] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:14:13.272 [DEBUG] [Thread-181686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:14:13.273 [DEBUG] [Thread-181686] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:14:13.273 [DEBUG] [Thread-181686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:14:13.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:14:13.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:14:13.275 [DEBUG] [Thread-181686] [transport.py] [_log()] userauth is OK
2026-04-12T03:14:13.275 [DEBUG] [Thread-181686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:14:13.275 [DEBUG] [Thread-181686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:14:13.276 [DEBUG] [Thread-181686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:14:13.276 [DEBUG] [Thread-181686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:14:13.294 [INFO] [Thread-181686] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:14:13.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:14:14.099 [DEBUG] [Thread-181686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:14:14.100 [DEBUG] [Thread-181686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:14:14.100 [DEBUG] [Thread-181686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:14:14.141 [DEBUG] [Thread-181686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:14:14.141 [DEBUG] [Thread-181686] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:14:14.145 [DEBUG] [Thread-181686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:14:14.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:14:14.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:14:14.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:14:14.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:14:14.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:14:14.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:14:14.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:14:14.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.051148 -999.00   +9.90  18.45     98   +9.60 1 3 1 3 1     0    0 0.30 0.72 ----- 16.5 18.4 274.0 21.6 11.3 -1.6 11.1 -1.2 10.7 -1.0 11.1 -0.8
2026-04-12T03:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.051148
2026-04-12T03:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:14:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:14:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:14:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:14:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:13:38', tmtdew=-0.06529, humidity=100.373, cloud=0.0, wind=23.7118, temperature=10.4693, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:13:39.187', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:14:14.171 [DEBUG] [Thread-181686] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:14:14.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:14:14.266 [DEBUG] [Thread-181689] [transport.py] [_log()] starting thread (client mode): 0xae52c6d0
2026-04-12T03:14:14.267 [DEBUG] [Thread-181689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:14:14.281 [DEBUG] [Thread-181689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:14:14.281 [INFO] [Thread-181689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:14:14.289 [DEBUG] [Thread-181689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] client lang: <none>
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] server lang: <none>
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] kex follows: False
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] Compression: none
2026-04-12T03:14:14.290 [DEBUG] [Thread-181689] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:14:14.349 [DEBUG] [Thread-181689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:14:14.350 [DEBUG] [Thread-181689] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:14:14.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:14:14.351 [DEBUG] [Thread-181689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:14:14.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:14:14.405 [DEBUG] [Thread-181689] [transport.py] [_log()] userauth is OK
2026-04-12T03:14:14.405 [DEBUG] [Thread-181689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:14:14.405 [DEBUG] [Thread-181689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:14:14.405 [DEBUG] [Thread-181689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:14:14.405 [DEBUG] [Thread-181689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:14:14.424 [INFO] [Thread-181689] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:14:14.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:14:14.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:14:15.246 [DEBUG] [Thread-181689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:14:15.246 [DEBUG] [Thread-181689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:14:15.293 [DEBUG] [Thread-181689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:14:15.294 [DEBUG] [Thread-181689] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:14:15.302 [DEBUG] [Thread-181689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:14:15.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:14:15.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-04-12T03:14:15.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:14:15.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:14:15.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:14:15.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:14:15.335 [DEBUG] [Thread-181689] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:14:24.955 [DEBUG] [Thread-181691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:39.805 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:39.806 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:40.016 [DEBUG] [Thread-181692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:14:45.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:14: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-04-12T03:14:46.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 14, 14), 0.01738, 100.187, 0.0, 20.9448, 9.96808, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:14:46.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:14:14
2026-04-12T03:14:47.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:14:47.240 [DEBUG] [Thread-181693] [transport.py] [_log()] starting thread (client mode): 0xae537c40
2026-04-12T03:14:47.240 [DEBUG] [Thread-181693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:14:47.260 [DEBUG] [Thread-181693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:14:47.261 [INFO] [Thread-181693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] client lang: <none>
2026-04-12T03:14:47.264 [DEBUG] [Thread-181693] [transport.py] [_log()] server lang: <none>
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] kex follows: False
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] Compression: none
2026-04-12T03:14:47.265 [DEBUG] [Thread-181693] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:14:47.285 [DEBUG] [Thread-181693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:14:47.285 [DEBUG] [Thread-181693] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:14:47.286 [DEBUG] [Thread-181693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:14:47.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:14:47.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:14:47.289 [DEBUG] [Thread-181693] [transport.py] [_log()] userauth is OK
2026-04-12T03:14:47.289 [DEBUG] [Thread-181693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:14:47.289 [DEBUG] [Thread-181693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:14:47.289 [DEBUG] [Thread-181693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:14:47.289 [DEBUG] [Thread-181693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:14:47.314 [INFO] [Thread-181693] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:14:47.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:14:48.083 [DEBUG] [Thread-181693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:14:48.083 [DEBUG] [Thread-181693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:14:48.083 [DEBUG] [Thread-181693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:14:48.124 [DEBUG] [Thread-181693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:14:48.124 [DEBUG] [Thread-181693] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:14:48.127 [DEBUG] [Thread-181693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:14:48.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:14:48.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:14:48.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:14:48.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:14:48.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:14:48.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:14:48.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:14:48.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:14:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:14:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.051496 -999.00   +9.90  15.31     98   +9.70 1 3 1 3 1     0    0 0.29 0.57 ----- 19.9 15.3 277.4 21.7 11.3 -1.2 11.1 -1.2 10.7 -1.2 11.1 -0.7
2026-04-12T03:14:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:14:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:14:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.051496
2026-04-12T03:14:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:14:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:14:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:14:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:14:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:14:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:14:14', tmtdew=0.01738, humidity=100.187, cloud=0.0, wind=20.9448, temperature=9.96808, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:14:09.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:14:48.151 [DEBUG] [Thread-181693] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:14:48.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:14:48.247 [DEBUG] [Thread-181696] [transport.py] [_log()] starting thread (client mode): 0xae52ee30
2026-04-12T03:14:48.247 [DEBUG] [Thread-181696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:14:48.261 [DEBUG] [Thread-181696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:14:48.261 [INFO] [Thread-181696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] client lang: <none>
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] server lang: <none>
2026-04-12T03:14:48.269 [DEBUG] [Thread-181696] [transport.py] [_log()] kex follows: False
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] Compression: none
2026-04-12T03:14:48.270 [DEBUG] [Thread-181696] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:14:48.330 [DEBUG] [Thread-181696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:14:48.331 [DEBUG] [Thread-181696] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:14:48.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:14:48.332 [DEBUG] [Thread-181696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:14:48.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:14:48.390 [DEBUG] [Thread-181696] [transport.py] [_log()] userauth is OK
2026-04-12T03:14:48.390 [DEBUG] [Thread-181696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:14:48.390 [DEBUG] [Thread-181696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:14:48.390 [DEBUG] [Thread-181696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:14:48.390 [DEBUG] [Thread-181696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:14:48.409 [INFO] [Thread-181696] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:14:48.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:14:48.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:14:49.241 [DEBUG] [Thread-181696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:14:49.241 [DEBUG] [Thread-181696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:14:49.289 [DEBUG] [Thread-181696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:14:49.289 [DEBUG] [Thread-181696] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:14:49.299 [DEBUG] [Thread-181696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:14:49.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:14:49.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-04-12T03:14:49.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-04-12T03:14:49.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:14:49.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:14:49.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:14:49.336 [DEBUG] [Thread-181696] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:14:55.053 [DEBUG] [Thread-181698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:14:56.634 [DEBUG] [Thread-181699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:10.112 [DEBUG] [Thread-181700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:19.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:15:19.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:15:19.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-04-12T03:15:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 14, 50), -0.05528, 100.307, 0.0, 22.9356, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:15:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:14:50
2026-04-12T03:15:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:15:21.162 [DEBUG] [Thread-181701] [transport.py] [_log()] starting thread (client mode): 0xae5b2c80
2026-04-12T03:15:21.163 [DEBUG] [Thread-181701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:15:21.182 [DEBUG] [Thread-181701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:15:21.182 [INFO] [Thread-181701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:21.183 [DEBUG] [Thread-181701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] client lang: <none>
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] server lang: <none>
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] kex follows: False
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] Compression: none
2026-04-12T03:15:21.184 [DEBUG] [Thread-181701] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:15:21.198 [DEBUG] [Thread-181701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:15:21.199 [DEBUG] [Thread-181701] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:15:21.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:15:21.200 [DEBUG] [Thread-181701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:15:21.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:15:21.202 [DEBUG] [Thread-181701] [transport.py] [_log()] userauth is OK
2026-04-12T03:15:21.202 [DEBUG] [Thread-181701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:15:21.202 [DEBUG] [Thread-181701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:15:21.202 [DEBUG] [Thread-181701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:15:21.202 [DEBUG] [Thread-181701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:15:21.220 [INFO] [Thread-181701] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:15:21.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:15:22.311 [DEBUG] [Thread-181701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:15:22.311 [DEBUG] [Thread-181701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:15:22.312 [DEBUG] [Thread-181701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:15:22.352 [DEBUG] [Thread-181701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:15:22.352 [DEBUG] [Thread-181701] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:15:22.354 [DEBUG] [Thread-181701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:15:22.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:15:22.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:15:22.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:15:22.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:15:22.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:15:22.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:15:22.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:15:22.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:15:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:15:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.051843 -999.00   +9.90  17.29     98   +9.60 1 3 1 3 1     0    0 0.29 0.80 ----- 17.6 17.3 280.6 25.1 11.2 -1.3 11.1 -1.1 10.7 -1.4 11.1 -0.4
2026-04-12T03:15:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:15:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:15:22.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.051843
2026-04-12T03:15:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:15:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:15:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:15:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:15:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:15:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:14:50', tmtdew=-0.05528, humidity=100.307, cloud=0.0, wind=22.9356, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:14:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:15:22.378 [DEBUG] [Thread-181701] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:15:22.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:15:22.471 [DEBUG] [Thread-181704] [transport.py] [_log()] starting thread (client mode): 0xae5b4f70
2026-04-12T03:15:22.471 [DEBUG] [Thread-181704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:15:22.486 [DEBUG] [Thread-181704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:15:22.486 [INFO] [Thread-181704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:15:22.493 [DEBUG] [Thread-181704] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] client lang: <none>
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] server lang: <none>
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] kex follows: False
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] Compression: none
2026-04-12T03:15:22.494 [DEBUG] [Thread-181704] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:15:22.554 [DEBUG] [Thread-181704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:15:22.555 [DEBUG] [Thread-181704] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:15:22.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:15:22.556 [DEBUG] [Thread-181704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:15:22.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:15:22.613 [DEBUG] [Thread-181704] [transport.py] [_log()] userauth is OK
2026-04-12T03:15:22.614 [DEBUG] [Thread-181704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:15:22.614 [DEBUG] [Thread-181704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:15:22.614 [DEBUG] [Thread-181704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:15:22.614 [DEBUG] [Thread-181704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:15:22.632 [INFO] [Thread-181704] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:15:22.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:15:22.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:15:23.446 [DEBUG] [Thread-181704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:15:23.447 [DEBUG] [Thread-181704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:15:23.495 [DEBUG] [Thread-181704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:15:23.495 [DEBUG] [Thread-181704] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:15:23.505 [DEBUG] [Thread-181704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:15:23.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:15:23.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-04-12T03:15:23.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-04-12T03:15:23.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:15:23.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:15:23.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:15:23.544 [DEBUG] [Thread-181704] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:15:25.153 [DEBUG] [Thread-181706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:40.010 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:40.012 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:40.206 [DEBUG] [Thread-181707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:53.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:15:53.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:15:53.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:15:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 15, 25), 0.017355, 100.187, 0.0, 21.6857, 9.98466, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:15:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:15:25
2026-04-12T03:15:55.246 [DEBUG] [Thread-181708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:15:55.466 [DEBUG] [Thread-181709] [transport.py] [_log()] starting thread (client mode): 0xb0febb80
2026-04-12T03:15:55.467 [DEBUG] [Thread-181709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:15:55.486 [DEBUG] [Thread-181709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:15:55.486 [INFO] [Thread-181709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:55.489 [DEBUG] [Thread-181709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] client lang: <none>
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] server lang: <none>
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] kex follows: False
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] Compression: none
2026-04-12T03:15:55.490 [DEBUG] [Thread-181709] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:15:55.506 [DEBUG] [Thread-181709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:15:55.506 [DEBUG] [Thread-181709] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:15:55.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:15:55.508 [DEBUG] [Thread-181709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:15:55.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:15:55.510 [DEBUG] [Thread-181709] [transport.py] [_log()] userauth is OK
2026-04-12T03:15:55.510 [DEBUG] [Thread-181709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:15:55.510 [DEBUG] [Thread-181709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:15:55.510 [DEBUG] [Thread-181709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:15:55.510 [DEBUG] [Thread-181709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:15:55.534 [INFO] [Thread-181709] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:15:55.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:15:56.318 [DEBUG] [Thread-181709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:15:56.318 [DEBUG] [Thread-181709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:15:56.318 [DEBUG] [Thread-181709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:15:56.360 [DEBUG] [Thread-181709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:15:56.360 [DEBUG] [Thread-181709] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:15:56.363 [DEBUG] [Thread-181709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:15:56.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:15:56.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:15:56.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:15:56.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:15:56.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:15:56.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:15:56.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:15:56.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:15:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:15:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.052190 -999.00   +9.90  19.17     98   +9.60 1 3 1 3 1     0    0 0.29 0.69 ----- 20.5 19.2 286.0 24.1 11.2 -1.1 11.1 -1.2 10.7 -1.3 11.1 -0.4
2026-04-12T03:15:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:15:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:15:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.052190
2026-04-12T03:15:56.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:15:56.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:15:56.388 [DEBUG] [Thread-181709] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:15:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:15:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:15:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:15:56.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:15:25', tmtdew=0.017355, humidity=100.187, cloud=0.0, wind=21.6857, temperature=9.98466, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:15:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:15:56.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:15:56.482 [DEBUG] [Thread-181712] [transport.py] [_log()] starting thread (client mode): 0xb0feaf20
2026-04-12T03:15:56.483 [DEBUG] [Thread-181712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:15:56.497 [DEBUG] [Thread-181712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:15:56.498 [INFO] [Thread-181712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] client lang: <none>
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] server lang: <none>
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] kex follows: False
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] Compression: none
2026-04-12T03:15:56.505 [DEBUG] [Thread-181712] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:15:56.565 [DEBUG] [Thread-181712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:15:56.565 [DEBUG] [Thread-181712] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:15:56.565 [DEBUG] [Thread-181712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:15:56.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:15:56.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:15:56.621 [DEBUG] [Thread-181712] [transport.py] [_log()] userauth is OK
2026-04-12T03:15:56.621 [DEBUG] [Thread-181712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:15:56.621 [DEBUG] [Thread-181712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:15:56.621 [DEBUG] [Thread-181712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:15:56.621 [DEBUG] [Thread-181712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:15:56.638 [INFO] [Thread-181712] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:15:56.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:15:56.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:15:56.686 [DEBUG] [Thread-181714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:15:57.452 [DEBUG] [Thread-181712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:15:57.452 [DEBUG] [Thread-181712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:15:57.500 [DEBUG] [Thread-181712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:15:57.500 [DEBUG] [Thread-181712] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:15:57.510 [DEBUG] [Thread-181712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:15:57.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:15:57.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-04-12T03:15: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') -> 00000000
2026-04-12T03:15:57.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:15:57.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:15:57.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:15:57.548 [DEBUG] [Thread-181712] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:16:10.285 [DEBUG] [Thread-181715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:16:25.334 [DEBUG] [Thread-181716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:16:27.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:16:27.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:16:27.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-04-12T03:16:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 16), -0.035075, 100.203, 0.0, 22.9918, 9.9515, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:16:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:16:00
2026-04-12T03:16:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:16:29.392 [DEBUG] [Thread-181717] [transport.py] [_log()] starting thread (client mode): 0xae535870
2026-04-12T03:16:29.392 [DEBUG] [Thread-181717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:16:29.411 [DEBUG] [Thread-181717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:16:29.411 [INFO] [Thread-181717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:16:29.414 [DEBUG] [Thread-181717] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:16:29.415 [DEBUG] [Thread-181717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] client lang: <none>
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] server lang: <none>
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] kex follows: False
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] Compression: none
2026-04-12T03:16:29.416 [DEBUG] [Thread-181717] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:16:29.433 [DEBUG] [Thread-181717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:16:29.434 [DEBUG] [Thread-181717] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:16:29.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:16:29.435 [DEBUG] [Thread-181717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:16:29.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:16:29.437 [DEBUG] [Thread-181717] [transport.py] [_log()] userauth is OK
2026-04-12T03:16:29.437 [DEBUG] [Thread-181717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:16:29.437 [DEBUG] [Thread-181717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:16:29.437 [DEBUG] [Thread-181717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:16:29.437 [DEBUG] [Thread-181717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:16:29.461 [INFO] [Thread-181717] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:16:29.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:16:30.262 [DEBUG] [Thread-181717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:16:30.262 [DEBUG] [Thread-181717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:16:30.263 [DEBUG] [Thread-181717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:16:30.303 [DEBUG] [Thread-181717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:16:30.303 [DEBUG] [Thread-181717] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:16:30.306 [DEBUG] [Thread-181717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:16:30.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:16:30.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:16:30.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:16:30.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:16:30.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:16:30.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:16:30.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:16:30.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:16:30.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:16:30.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.052537 -999.00   +9.90  15.64     98   +9.70 1 3 1 3 1     0    0 0.28 0.43 ----- 17.5 15.6 278.0 23.4 11.2 -1.1 11.1 -1.2 10.7 -0.7 11.1 -0.5
2026-04-12T03:16:30.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:16:30.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:16:30.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.052537
2026-04-12T03:16:30.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:16:30.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:16:30.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:16:30.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:16:30.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:16:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:16:00', tmtdew=-0.035075, humidity=100.203, cloud=0.0, wind=22.9918, temperature=9.9515, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:15:39.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:16:30.332 [DEBUG] [Thread-181717] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:16:30.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:16:30.429 [DEBUG] [Thread-181720] [transport.py] [_log()] starting thread (client mode): 0xae52ddb0
2026-04-12T03:16:30.429 [DEBUG] [Thread-181720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:16:30.443 [DEBUG] [Thread-181720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:16:30.443 [INFO] [Thread-181720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:16:30.451 [DEBUG] [Thread-181720] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:16:30.451 [DEBUG] [Thread-181720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:16:30.451 [DEBUG] [Thread-181720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:16:30.452 [DEBUG] [Thread-181720] [transport.py] [_log()] client lang: <none>
2026-04-12T03:16:30.453 [DEBUG] [Thread-181720] [transport.py] [_log()] server lang: <none>
2026-04-12T03:16:30.453 [DEBUG] [Thread-181720] [transport.py] [_log()] kex follows: False
2026-04-12T03:16:30.453 [DEBUG] [Thread-181720] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:16:30.453 [DEBUG] [Thread-181720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:16:30.453 [DEBUG] [Thread-181720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:16:30.453 [DEBUG] [Thread-181720] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:16:30.454 [DEBUG] [Thread-181720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:16:30.454 [DEBUG] [Thread-181720] [transport.py] [_log()] Compression: none
2026-04-12T03:16:30.454 [DEBUG] [Thread-181720] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:16:30.509 [DEBUG] [Thread-181720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:16:30.510 [DEBUG] [Thread-181720] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:16:30.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:16:30.511 [DEBUG] [Thread-181720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:16:30.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:16:30.566 [DEBUG] [Thread-181720] [transport.py] [_log()] userauth is OK
2026-04-12T03:16:30.566 [DEBUG] [Thread-181720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:16:30.566 [DEBUG] [Thread-181720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:16:30.566 [DEBUG] [Thread-181720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:16:30.566 [DEBUG] [Thread-181720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:16:30.585 [INFO] [Thread-181720] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:16:30.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:16:30.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:16:31.423 [DEBUG] [Thread-181720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:16:31.424 [DEBUG] [Thread-181720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:16:31.472 [DEBUG] [Thread-181720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:16:31.472 [DEBUG] [Thread-181720] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:16:31.482 [DEBUG] [Thread-181720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:16:31.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:16:31.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:16:31.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-04-12T03:16:31.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:16:31.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:16:31.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:16:31.517 [DEBUG] [Thread-181720] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:16:40.214 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:16:40.215 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:16:40.369 [DEBUG] [Thread-181722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:16:55.421 [DEBUG] [Thread-181723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:16:56.757 [DEBUG] [Thread-181724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:17:01.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:17: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-04-12T03:17:02.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 16, 36), -0.07024, 100.406, 0.0, 19.9015, 10.4693, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:17:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:16:36
2026-04-12T03:17:03.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:17:03.378 [DEBUG] [Thread-181725] [transport.py] [_log()] starting thread (client mode): 0xae5354e0
2026-04-12T03:17:03.378 [DEBUG] [Thread-181725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:17:03.396 [DEBUG] [Thread-181725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:17:03.396 [INFO] [Thread-181725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:03.399 [DEBUG] [Thread-181725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] client lang: <none>
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] server lang: <none>
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] kex follows: False
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] Compression: none
2026-04-12T03:17:03.400 [DEBUG] [Thread-181725] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:17:03.414 [DEBUG] [Thread-181725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:17:03.414 [DEBUG] [Thread-181725] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:17:03.414 [DEBUG] [Thread-181725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:17:03.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:17:03.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:17:03.416 [DEBUG] [Thread-181725] [transport.py] [_log()] userauth is OK
2026-04-12T03:17:03.416 [DEBUG] [Thread-181725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:17:03.416 [DEBUG] [Thread-181725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:17:03.416 [DEBUG] [Thread-181725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:17:03.417 [DEBUG] [Thread-181725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:17:03.437 [INFO] [Thread-181725] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:17:03.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:17:04.238 [DEBUG] [Thread-181725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:17:04.239 [DEBUG] [Thread-181725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:17:04.239 [DEBUG] [Thread-181725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:17:04.280 [DEBUG] [Thread-181725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:17:04.280 [DEBUG] [Thread-181725] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:17:04.283 [DEBUG] [Thread-181725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:17:04.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:17:04.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:17:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:17:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:17:04.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:17:04.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:17:04.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:17:04.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:17:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:17:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.052886 -999.00   +9.90  16.39     98   +9.70 1 3 1 3 1     0    0 0.27 -0.18 ----- 18.9 16.4 280.9 24.3 11.3 -1.1 11.1 -1.1 10.7 -1.6 11.1 -0.4
2026-04-12T03:17:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:17:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:17:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.052886
2026-04-12T03:17:04.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:17:04.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:17:04.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:17:04.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:17:04.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:17:04.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:16:36', tmtdew=-0.07024, humidity=100.406, cloud=0.0, wind=19.9015, temperature=10.4693, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:16:09.350', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:17:04.312 [DEBUG] [Thread-181725] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:17:04.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:17:04.404 [DEBUG] [Thread-181728] [transport.py] [_log()] starting thread (client mode): 0xb0feb190
2026-04-12T03:17:04.404 [DEBUG] [Thread-181728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:17:04.419 [DEBUG] [Thread-181728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:17:04.419 [INFO] [Thread-181728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:17:04.427 [DEBUG] [Thread-181728] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:17:04.427 [DEBUG] [Thread-181728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:17:04.427 [DEBUG] [Thread-181728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] client lang: <none>
2026-04-12T03:17:04.428 [DEBUG] [Thread-181728] [transport.py] [_log()] server lang: <none>
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] kex follows: False
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] Compression: none
2026-04-12T03:17:04.429 [DEBUG] [Thread-181728] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:17:04.486 [DEBUG] [Thread-181728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:17:04.487 [DEBUG] [Thread-181728] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:17:04.487 [DEBUG] [Thread-181728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:17:04.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:17:04.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:17:04.542 [DEBUG] [Thread-181728] [transport.py] [_log()] userauth is OK
2026-04-12T03:17:04.542 [DEBUG] [Thread-181728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:17:04.543 [DEBUG] [Thread-181728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:17:04.543 [DEBUG] [Thread-181728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:17:04.543 [DEBUG] [Thread-181728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:17:04.561 [INFO] [Thread-181728] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:17:04.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:17:04.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:17:05.369 [DEBUG] [Thread-181728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:17:05.369 [DEBUG] [Thread-181728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:17:05.417 [DEBUG] [Thread-181728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:17:05.417 [DEBUG] [Thread-181728] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:17:05.426 [DEBUG] [Thread-181728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:17:05.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:17:05.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-04-12T03:17:05.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-04-12T03:17:05.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:17:05.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:17:05.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:17:05.464 [DEBUG] [Thread-181728] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:17:10.458 [DEBUG] [Thread-181730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:25.509 [DEBUG] [Thread-181731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:35.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:17:35.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:17:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:17:36.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 17, 11), -0.02764, 100.153, 0.0, 22.7264, 9.9515, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:17:36.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:17:11
2026-04-12T03:17:37.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:17:37.284 [DEBUG] [Thread-181732] [transport.py] [_log()] starting thread (client mode): 0xb0fe8b50
2026-04-12T03:17:37.284 [DEBUG] [Thread-181732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:17:37.303 [DEBUG] [Thread-181732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:17:37.304 [INFO] [Thread-181732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] client lang: <none>
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] server lang: <none>
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] kex follows: False
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:17:37.307 [DEBUG] [Thread-181732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:17:37.308 [DEBUG] [Thread-181732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:17:37.308 [DEBUG] [Thread-181732] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:17:37.308 [DEBUG] [Thread-181732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:17:37.308 [DEBUG] [Thread-181732] [transport.py] [_log()] Compression: none
2026-04-12T03:17:37.308 [DEBUG] [Thread-181732] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:17:37.324 [DEBUG] [Thread-181732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:17:37.325 [DEBUG] [Thread-181732] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:17:37.325 [DEBUG] [Thread-181732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:17:37.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:17:37.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:17:37.327 [DEBUG] [Thread-181732] [transport.py] [_log()] userauth is OK
2026-04-12T03:17:37.328 [DEBUG] [Thread-181732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:17:37.328 [DEBUG] [Thread-181732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:17:37.328 [DEBUG] [Thread-181732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:17:37.328 [DEBUG] [Thread-181732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:17:37.343 [INFO] [Thread-181732] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:17:37.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:17:38.109 [DEBUG] [Thread-181732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:17:38.110 [DEBUG] [Thread-181732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:17:38.110 [DEBUG] [Thread-181732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:17:38.151 [DEBUG] [Thread-181732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:17:38.151 [DEBUG] [Thread-181732] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:17:38.154 [DEBUG] [Thread-181732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:17:38.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:17:38.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:17:38.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:17:38.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:17:38.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:17:38.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:17:38.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:17:38.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:17:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:17:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.053579 -999.00  +10.00  20.35     98   +9.70 1 3 1 3 1     0    0 0.24 -1.09 ----- 17.1 20.4 270.8 22.4 11.3 -1.1 11.1 -1.2 10.7 -1.1 11.1 -0.5
2026-04-12T03:17:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:17:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:17:38.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.053579
2026-04-12T03:17:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:17:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:17:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:17:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:17:38.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:17:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:17:11', tmtdew=-0.02764, humidity=100.153, cloud=0.0, wind=22.7264, temperature=9.9515, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:17:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:17:38.175 [DEBUG] [Thread-181732] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:17:38.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:17:38.268 [DEBUG] [Thread-181735] [transport.py] [_log()] starting thread (client mode): 0xae5347c0
2026-04-12T03:17:38.268 [DEBUG] [Thread-181735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:17:38.286 [DEBUG] [Thread-181735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:17:38.286 [INFO] [Thread-181735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] client lang: <none>
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] server lang: <none>
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] kex follows: False
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:17:38.294 [DEBUG] [Thread-181735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:17:38.295 [DEBUG] [Thread-181735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:17:38.295 [DEBUG] [Thread-181735] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:17:38.295 [DEBUG] [Thread-181735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:17:38.295 [DEBUG] [Thread-181735] [transport.py] [_log()] Compression: none
2026-04-12T03:17:38.295 [DEBUG] [Thread-181735] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:17:38.350 [DEBUG] [Thread-181735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:17:38.351 [DEBUG] [Thread-181735] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:17:38.351 [DEBUG] [Thread-181735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:17:38.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:17:38.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:17:38.407 [DEBUG] [Thread-181735] [transport.py] [_log()] userauth is OK
2026-04-12T03:17:38.408 [DEBUG] [Thread-181735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:17:38.408 [DEBUG] [Thread-181735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:17:38.408 [DEBUG] [Thread-181735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:17:38.408 [DEBUG] [Thread-181735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:17:38.427 [INFO] [Thread-181735] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:17:38.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:17:38.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:17:39.245 [DEBUG] [Thread-181735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:17:39.246 [DEBUG] [Thread-181735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:17:39.294 [DEBUG] [Thread-181735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:17:39.295 [DEBUG] [Thread-181735] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:17:39.304 [DEBUG] [Thread-181735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:17:39.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:17:39.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-04-12T03:17:39.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:17:39.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:17:39.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:17:39.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:17:39.340 [DEBUG] [Thread-181735] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:17:40.419 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:40.420 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:40.546 [DEBUG] [Thread-181737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:55.603 [DEBUG] [Thread-181738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:17:56.811 [DEBUG] [Thread-181739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:09.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:18:09.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:18:09.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-04-12T03:18:10.639 [DEBUG] [Thread-181740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:10.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 17, 47), -0.06024, 100.34, 0.0, 20.4307, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:18:10.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:17:47
2026-04-12T03:18:11.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:18:11.209 [DEBUG] [Thread-181741] [transport.py] [_log()] starting thread (client mode): 0xb0fe9210
2026-04-12T03:18:11.209 [DEBUG] [Thread-181741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:18:11.235 [DEBUG] [Thread-181741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:18:11.235 [INFO] [Thread-181741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:18:11.239 [DEBUG] [Thread-181741] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:18:11.239 [DEBUG] [Thread-181741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:18:11.239 [DEBUG] [Thread-181741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:18:11.239 [DEBUG] [Thread-181741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] client lang: <none>
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] server lang: <none>
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] kex follows: False
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:18:11.240 [DEBUG] [Thread-181741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:18:11.241 [DEBUG] [Thread-181741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:18:11.241 [DEBUG] [Thread-181741] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:18:11.241 [DEBUG] [Thread-181741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:18:11.241 [DEBUG] [Thread-181741] [transport.py] [_log()] Compression: none
2026-04-12T03:18:11.241 [DEBUG] [Thread-181741] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:18:11.260 [DEBUG] [Thread-181741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:18:11.261 [DEBUG] [Thread-181741] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:18:11.262 [DEBUG] [Thread-181741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:18:11.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:18:11.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:18:11.263 [DEBUG] [Thread-181741] [transport.py] [_log()] userauth is OK
2026-04-12T03:18:11.264 [DEBUG] [Thread-181741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:18:11.264 [DEBUG] [Thread-181741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:18:11.264 [DEBUG] [Thread-181741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:18:11.264 [DEBUG] [Thread-181741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:18:11.282 [INFO] [Thread-181741] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:18:11.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:18:12.119 [DEBUG] [Thread-181741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:18:12.119 [DEBUG] [Thread-181741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:18:12.119 [DEBUG] [Thread-181741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:18:12.160 [DEBUG] [Thread-181741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:18:12.160 [DEBUG] [Thread-181741] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:18:12.164 [DEBUG] [Thread-181741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:18:12.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:18:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:18:12.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:18:12.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:18:12.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:18:12.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:18:12.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:18:12.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:18:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:18:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.053926 -999.00  +10.00  16.58     98   +9.70 1 3 1 3 1     0    0 0.24 -1.18 ----- 18.3 16.6 276.8 21.6 11.3 -1.2 11.2 -1.2 10.7 -1.0 11.1 -0.6
2026-04-12T03:18:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:18:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:18:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.053926
2026-04-12T03:18:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:18:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:18:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:18:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:18:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:18:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:17:47', tmtdew=-0.06024, humidity=100.34, cloud=0.0, wind=20.4307, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:17:39.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:18:12.189 [DEBUG] [Thread-181741] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:18:12.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:18:12.285 [DEBUG] [Thread-181744] [transport.py] [_log()] starting thread (client mode): 0xb0f41d50
2026-04-12T03:18:12.285 [DEBUG] [Thread-181744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:18:12.300 [DEBUG] [Thread-181744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:18:12.300 [INFO] [Thread-181744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:18:12.308 [DEBUG] [Thread-181744] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:18:12.308 [DEBUG] [Thread-181744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:18:12.308 [DEBUG] [Thread-181744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:18:12.308 [DEBUG] [Thread-181744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] client lang: <none>
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] server lang: <none>
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] kex follows: False
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] Compression: none
2026-04-12T03:18:12.309 [DEBUG] [Thread-181744] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:18:12.366 [DEBUG] [Thread-181744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:18:12.366 [DEBUG] [Thread-181744] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:18:12.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:18:12.367 [DEBUG] [Thread-181744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:18:12.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:18:12.423 [DEBUG] [Thread-181744] [transport.py] [_log()] userauth is OK
2026-04-12T03:18:12.423 [DEBUG] [Thread-181744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:18:12.423 [DEBUG] [Thread-181744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:18:12.424 [DEBUG] [Thread-181744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:18:12.424 [DEBUG] [Thread-181744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:18:12.442 [INFO] [Thread-181744] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:18:12.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:18:12.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:18:13.209 [DEBUG] [Thread-181744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:18:13.210 [DEBUG] [Thread-181744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:18:13.256 [DEBUG] [Thread-181744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:18:13.256 [DEBUG] [Thread-181744] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:18:13.267 [DEBUG] [Thread-181744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:18:13.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:18:13.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-04-12T03:18:13.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-04-12T03:18:13.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:18:13.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:18:13.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:18:13.300 [DEBUG] [Thread-181744] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:18:25.677 [DEBUG] [Thread-181746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:40.625 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:40.626 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:40.728 [DEBUG] [Thread-181747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:43.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:18:43.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:18:43.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:18:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 18, 22), -0.030145, 100.17, 0.0, 23.8032, 9.96808, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:18:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:18:22
2026-04-12T03:18:44.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:18:45.143 [DEBUG] [Thread-181748] [transport.py] [_log()] starting thread (client mode): 0xb0fea980
2026-04-12T03:18:45.143 [DEBUG] [Thread-181748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:18:45.163 [DEBUG] [Thread-181748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:18:45.163 [INFO] [Thread-181748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] client lang: <none>
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] server lang: <none>
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] kex follows: False
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] Compression: none
2026-04-12T03:18:45.166 [DEBUG] [Thread-181748] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:18:45.185 [DEBUG] [Thread-181748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:18:45.185 [DEBUG] [Thread-181748] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:18:45.186 [DEBUG] [Thread-181748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:18:45.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:18:45.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:18:45.229 [DEBUG] [Thread-181748] [transport.py] [_log()] userauth is OK
2026-04-12T03:18:45.229 [DEBUG] [Thread-181748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:18:45.229 [DEBUG] [Thread-181748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:18:45.229 [DEBUG] [Thread-181748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:18:45.229 [DEBUG] [Thread-181748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:18:45.267 [INFO] [Thread-181748] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:18:45.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:18:46.075 [DEBUG] [Thread-181748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:18:46.075 [DEBUG] [Thread-181748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:18:46.075 [DEBUG] [Thread-181748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:18:46.116 [DEBUG] [Thread-181748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:18:46.116 [DEBUG] [Thread-181748] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:18:46.120 [DEBUG] [Thread-181748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:18:46.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:18:46.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:18:46.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:18:46.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:18:46.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:18:46.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:18:46.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:18:46.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:18:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:18:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.054274 -999.00   +9.90  22.56     98   +9.70 1 3 1 3 1     0    0 0.24 -1.19 ----- 15.8 22.6 273.6 24.2 11.2 -1.4 11.1 -1.4 10.7 -1.1 11.1 -0.6
2026-04-12T03:18:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:18:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:18:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.054274
2026-04-12T03:18:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:18:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:18:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:18:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:18:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:18:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:18:22', tmtdew=-0.030145, humidity=100.17, cloud=0.0, wind=23.8032, temperature=9.96808, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:18:09.274', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:18:46.149 [DEBUG] [Thread-181748] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:18:46.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:18:46.242 [DEBUG] [Thread-181751] [transport.py] [_log()] starting thread (client mode): 0xb0fead70
2026-04-12T03:18:46.242 [DEBUG] [Thread-181751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:18:46.257 [DEBUG] [Thread-181751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:18:46.257 [INFO] [Thread-181751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] client lang: <none>
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] server lang: <none>
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] kex follows: False
2026-04-12T03:18:46.265 [DEBUG] [Thread-181751] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:18:46.266 [DEBUG] [Thread-181751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:18:46.266 [DEBUG] [Thread-181751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:18:46.266 [DEBUG] [Thread-181751] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:18:46.266 [DEBUG] [Thread-181751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:18:46.266 [DEBUG] [Thread-181751] [transport.py] [_log()] Compression: none
2026-04-12T03:18:46.266 [DEBUG] [Thread-181751] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:18:46.322 [DEBUG] [Thread-181751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:18:46.323 [DEBUG] [Thread-181751] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:18:46.324 [DEBUG] [Thread-181751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:18:46.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:18:46.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:18:46.378 [DEBUG] [Thread-181751] [transport.py] [_log()] userauth is OK
2026-04-12T03:18:46.379 [DEBUG] [Thread-181751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:18:46.379 [DEBUG] [Thread-181751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:18:46.379 [DEBUG] [Thread-181751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:18:46.379 [DEBUG] [Thread-181751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:18:46.397 [INFO] [Thread-181751] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:18:46.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:18:46.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:18:47.208 [DEBUG] [Thread-181751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:18:47.208 [DEBUG] [Thread-181751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:18:47.256 [DEBUG] [Thread-181751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:18:47.256 [DEBUG] [Thread-181751] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:18:47.266 [DEBUG] [Thread-181751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:18:47.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:18:47.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-04-12T03:18:47.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-04-12T03:18:47.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:18:47.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:18:47.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:18:47.303 [DEBUG] [Thread-181751] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:18:55.765 [DEBUG] [Thread-181753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:18:56.871 [DEBUG] [Thread-181754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:10.816 [DEBUG] [Thread-181755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:19:17.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:19:17.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-04-12T03:19:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 18, 57), 0.0199, 100.17, 0.0, 18.4039, 9.98491, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:19:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:18:57
2026-04-12T03:19:19.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:19:19.187 [DEBUG] [Thread-181756] [transport.py] [_log()] starting thread (client mode): 0xb0fe8520
2026-04-12T03:19:19.187 [DEBUG] [Thread-181756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:19:19.209 [DEBUG] [Thread-181756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:19:19.210 [INFO] [Thread-181756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] client lang: <none>
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] server lang: <none>
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] kex follows: False
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:19:19.212 [DEBUG] [Thread-181756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:19:19.213 [DEBUG] [Thread-181756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:19:19.213 [DEBUG] [Thread-181756] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:19:19.213 [DEBUG] [Thread-181756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:19:19.213 [DEBUG] [Thread-181756] [transport.py] [_log()] Compression: none
2026-04-12T03:19:19.213 [DEBUG] [Thread-181756] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:19:19.229 [DEBUG] [Thread-181756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:19:19.230 [DEBUG] [Thread-181756] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:19:19.230 [DEBUG] [Thread-181756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:19:19.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:19:19.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:19:19.232 [DEBUG] [Thread-181756] [transport.py] [_log()] userauth is OK
2026-04-12T03:19:19.232 [DEBUG] [Thread-181756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:19:19.232 [DEBUG] [Thread-181756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:19:19.232 [DEBUG] [Thread-181756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:19:19.233 [DEBUG] [Thread-181756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:19:19.256 [INFO] [Thread-181756] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:19:19.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:19:20.048 [DEBUG] [Thread-181756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:19:20.049 [DEBUG] [Thread-181756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:19:20.049 [DEBUG] [Thread-181756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:19:20.090 [DEBUG] [Thread-181756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:19:20.090 [DEBUG] [Thread-181756] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:19:20.094 [DEBUG] [Thread-181756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:19:20.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:19:20.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:19:20.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:19:20.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:19:20.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:19:20.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:19:20.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:19:20.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:19:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:19:20.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.054621 -999.00   +9.90  19.17     98   +9.70 1 3 1 3 1     0    0 0.23 -1.47 ----- 22.6 19.2 278.5 23.2 11.2 -1.2 11.1 -1.2 10.7 -1.1 11.1 -0.5
2026-04-12T03:19:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:19:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:19:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.054621
2026-04-12T03:19:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:19:20.122 [DEBUG] [Thread-181756] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:19:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:19:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:19:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:19:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:19:20.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:18:57', tmtdew=0.0199, humidity=100.17, cloud=0.0, wind=18.4039, temperature=9.98491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:18:39.254', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:19:20.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:19:20.218 [DEBUG] [Thread-181759] [transport.py] [_log()] starting thread (client mode): 0xae5b7ee0
2026-04-12T03:19:20.218 [DEBUG] [Thread-181759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:19:20.236 [DEBUG] [Thread-181759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:19:20.237 [INFO] [Thread-181759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:19:20.246 [DEBUG] [Thread-181759] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:19:20.246 [DEBUG] [Thread-181759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:19:20.246 [DEBUG] [Thread-181759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:19:20.246 [DEBUG] [Thread-181759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:20.246 [DEBUG] [Thread-181759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] client lang: <none>
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] server lang: <none>
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] kex follows: False
2026-04-12T03:19:20.247 [DEBUG] [Thread-181759] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:19:20.248 [DEBUG] [Thread-181759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:19:20.248 [DEBUG] [Thread-181759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:19:20.248 [DEBUG] [Thread-181759] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:19:20.248 [DEBUG] [Thread-181759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:19:20.248 [DEBUG] [Thread-181759] [transport.py] [_log()] Compression: none
2026-04-12T03:19:20.248 [DEBUG] [Thread-181759] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:19:20.303 [DEBUG] [Thread-181759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:19:20.304 [DEBUG] [Thread-181759] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:19:20.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:19:20.305 [DEBUG] [Thread-181759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:19:20.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:19:20.359 [DEBUG] [Thread-181759] [transport.py] [_log()] userauth is OK
2026-04-12T03:19:20.360 [DEBUG] [Thread-181759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:19:20.360 [DEBUG] [Thread-181759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:19:20.360 [DEBUG] [Thread-181759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:19:20.360 [DEBUG] [Thread-181759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:19:20.380 [INFO] [Thread-181759] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:19:20.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:19:20.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:19:21.211 [DEBUG] [Thread-181759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:19:21.211 [DEBUG] [Thread-181759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:19:21.259 [DEBUG] [Thread-181759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:19:21.260 [DEBUG] [Thread-181759] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:19:21.269 [DEBUG] [Thread-181759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:19:21.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:19:21.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:19:21.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-04-12T03:19:21.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:19:21.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:19:21.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:19:21.312 [DEBUG] [Thread-181759] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:19:25.855 [DEBUG] [Thread-181761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:40.826 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:40.827 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:40.916 [DEBUG] [Thread-181762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:51.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:19:51.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:19:51.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-04-12T03:19:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 19, 33), -0.04528, 100.24, 0.0, 24.0646, 10.3366, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:19:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:19:33
2026-04-12T03:19:53.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:19:53.174 [DEBUG] [Thread-181763] [transport.py] [_log()] starting thread (client mode): 0xb0febca0
2026-04-12T03:19:53.174 [DEBUG] [Thread-181763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:19:53.195 [DEBUG] [Thread-181763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:19:53.195 [INFO] [Thread-181763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:19:53.198 [DEBUG] [Thread-181763] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:19:53.198 [DEBUG] [Thread-181763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:19:53.198 [DEBUG] [Thread-181763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] client lang: <none>
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] server lang: <none>
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] kex follows: False
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:19:53.199 [DEBUG] [Thread-181763] [transport.py] [_log()] Compression: none
2026-04-12T03:19:53.200 [DEBUG] [Thread-181763] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:19:53.217 [DEBUG] [Thread-181763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:19:53.218 [DEBUG] [Thread-181763] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:19:53.218 [DEBUG] [Thread-181763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:19:53.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:19:53.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:19:53.220 [DEBUG] [Thread-181763] [transport.py] [_log()] userauth is OK
2026-04-12T03:19:53.220 [DEBUG] [Thread-181763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:19:53.220 [DEBUG] [Thread-181763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:19:53.220 [DEBUG] [Thread-181763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:19:53.221 [DEBUG] [Thread-181763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:19:53.245 [INFO] [Thread-181763] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:19:53.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:19:54.019 [DEBUG] [Thread-181763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:19:54.019 [DEBUG] [Thread-181763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:19:54.019 [DEBUG] [Thread-181763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:19:54.061 [DEBUG] [Thread-181763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:19:54.061 [DEBUG] [Thread-181763] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:19:54.065 [DEBUG] [Thread-181763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:19:54.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:19:54.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:19:54.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:19:54.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:19:54.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:19:54.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:19:54.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:19:54.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:19:54.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:19:54.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.054968 -999.00   +9.90  18.71     98   +9.70 1 3 1 3 1     0    0 0.21 -1.83 ----- 17.9 18.7 287.2 24.2 11.3 -1.5 11.1 -1.3 10.7 -1.4 11.1 -0.6
2026-04-12T03:19:54.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:19:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:19:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.054968
2026-04-12T03:19:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:19:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:19:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:19:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:19:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:19:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:19:33', tmtdew=-0.04528, humidity=100.24, cloud=0.0, wind=24.0646, temperature=10.3366, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:19:09.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:19:54.091 [DEBUG] [Thread-181763] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:19:54.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:19:54.185 [DEBUG] [Thread-181766] [transport.py] [_log()] starting thread (client mode): 0xb0f43880
2026-04-12T03:19:54.185 [DEBUG] [Thread-181766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:19:54.203 [DEBUG] [Thread-181766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:19:54.203 [INFO] [Thread-181766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:19:54.212 [DEBUG] [Thread-181766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] client lang: <none>
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] server lang: <none>
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] kex follows: False
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] Compression: none
2026-04-12T03:19:54.213 [DEBUG] [Thread-181766] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:19:54.275 [DEBUG] [Thread-181766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:19:54.276 [DEBUG] [Thread-181766] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:19:54.277 [DEBUG] [Thread-181766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:19:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:19:54.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:19:54.335 [DEBUG] [Thread-181766] [transport.py] [_log()] userauth is OK
2026-04-12T03:19:54.335 [DEBUG] [Thread-181766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:19:54.335 [DEBUG] [Thread-181766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:19:54.336 [DEBUG] [Thread-181766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:19:54.336 [DEBUG] [Thread-181766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:19:54.354 [INFO] [Thread-181766] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:19:54.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:19:54.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:19:55.189 [DEBUG] [Thread-181766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:19:55.190 [DEBUG] [Thread-181766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:19:55.237 [DEBUG] [Thread-181766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:19:55.237 [DEBUG] [Thread-181766] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:19:55.247 [DEBUG] [Thread-181766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:19:55.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:19: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-04-12T03:19: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-04-12T03:19:55.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:19:55.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:19:55.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:19:55.283 [DEBUG] [Thread-181766] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:19:55.954 [DEBUG] [Thread-181768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:19:56.933 [DEBUG] [Thread-181769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:11.015 [DEBUG] [Thread-181770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:20:25.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:20:25.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-04-12T03:20:26.051 [DEBUG] [Thread-181771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 20, 9), 0.01738, 100.187, 0.0, 25.0916, 10.0181, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:20:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:20:09
2026-04-12T03:20:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:20:27.181 [DEBUG] [Thread-181772] [transport.py] [_log()] starting thread (client mode): 0xae5359f0
2026-04-12T03:20:27.181 [DEBUG] [Thread-181772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:20:27.203 [DEBUG] [Thread-181772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:20:27.203 [INFO] [Thread-181772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:20:27.206 [DEBUG] [Thread-181772] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:20:27.206 [DEBUG] [Thread-181772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:20:27.206 [DEBUG] [Thread-181772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:20:27.206 [DEBUG] [Thread-181772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:20:27.206 [DEBUG] [Thread-181772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] client lang: <none>
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] server lang: <none>
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] kex follows: False
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] Compression: none
2026-04-12T03:20:27.207 [DEBUG] [Thread-181772] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:20:27.224 [DEBUG] [Thread-181772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:20:27.224 [DEBUG] [Thread-181772] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:20:27.225 [DEBUG] [Thread-181772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:20:27.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:20:27.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:20:27.226 [DEBUG] [Thread-181772] [transport.py] [_log()] userauth is OK
2026-04-12T03:20:27.227 [DEBUG] [Thread-181772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:20:27.227 [DEBUG] [Thread-181772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:20:27.227 [DEBUG] [Thread-181772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:20:27.227 [DEBUG] [Thread-181772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:20:27.260 [INFO] [Thread-181772] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:20:27.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:20:28.338 [DEBUG] [Thread-181772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:20:28.338 [DEBUG] [Thread-181772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:20:28.339 [DEBUG] [Thread-181772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:20:28.379 [DEBUG] [Thread-181772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:20:28.379 [DEBUG] [Thread-181772] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:20:28.381 [DEBUG] [Thread-181772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:20:28.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:20:28.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:20:28.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:20:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:20:28.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:20:28.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:20:28.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:20:28.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.055315 -999.00   +9.90  19.51     98   +9.70 1 3 1 3 1     0    0 0.21 -2.00 ----- 20.3 19.5 274.9 22.7 11.2 -1.3 11.1 -1.3 10.7 -1.0 11.1 -0.5
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.055315
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:20:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:20:09', tmtdew=0.01738, humidity=100.187, cloud=0.0, wind=25.0916, temperature=10.0181, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:19:39.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:20:28.403 [DEBUG] [Thread-181772] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:20:28.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:20:28.486 [DEBUG] [Thread-181775] [transport.py] [_log()] starting thread (client mode): 0xb0febf10
2026-04-12T03:20:28.486 [DEBUG] [Thread-181775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:20:28.501 [DEBUG] [Thread-181775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:20:28.501 [INFO] [Thread-181775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:20:28.509 [DEBUG] [Thread-181775] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:20:28.510 [DEBUG] [Thread-181775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] client lang: <none>
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] server lang: <none>
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] kex follows: False
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:20:28.511 [DEBUG] [Thread-181775] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:20:28.512 [DEBUG] [Thread-181775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:20:28.512 [DEBUG] [Thread-181775] [transport.py] [_log()] Compression: none
2026-04-12T03:20:28.512 [DEBUG] [Thread-181775] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:20:28.568 [DEBUG] [Thread-181775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:20:28.569 [DEBUG] [Thread-181775] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:20:28.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:20:28.570 [DEBUG] [Thread-181775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:20:28.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:20:28.627 [DEBUG] [Thread-181775] [transport.py] [_log()] userauth is OK
2026-04-12T03:20:28.627 [DEBUG] [Thread-181775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:20:28.627 [DEBUG] [Thread-181775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:20:28.628 [DEBUG] [Thread-181775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:20:28.628 [DEBUG] [Thread-181775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:20:28.648 [INFO] [Thread-181775] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:20:28.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:20:28.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:20:29.519 [DEBUG] [Thread-181775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:20:29.519 [DEBUG] [Thread-181775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:20:29.568 [DEBUG] [Thread-181775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:20:29.568 [DEBUG] [Thread-181775] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:20:29.578 [DEBUG] [Thread-181775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:20:29.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:20:29.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-04-12T03:20:29.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:20:29.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:20:29.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:20:29.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:20:29.614 [DEBUG] [Thread-181775] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:20:41.031 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:41.032 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:41.085 [DEBUG] [Thread-181777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:56.135 [DEBUG] [Thread-181778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:57.000 [DEBUG] [Thread-181779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:20:59.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:20:59.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:20:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:21:00.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 20, 44), -0.06533, 100.373, 0.0, 23.5354, 10.5025, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:21:00.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:20:44
2026-04-12T03:21:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:21:01.473 [DEBUG] [Thread-181780] [transport.py] [_log()] starting thread (client mode): 0xae560df0
2026-04-12T03:21:01.473 [DEBUG] [Thread-181780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:21:01.494 [DEBUG] [Thread-181780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:21:01.494 [INFO] [Thread-181780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] client lang: <none>
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] server lang: <none>
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] kex follows: False
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:21:01.496 [DEBUG] [Thread-181780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:21:01.497 [DEBUG] [Thread-181780] [transport.py] [_log()] Compression: none
2026-04-12T03:21:01.497 [DEBUG] [Thread-181780] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:21:01.514 [DEBUG] [Thread-181780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:21:01.515 [DEBUG] [Thread-181780] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:21:01.515 [DEBUG] [Thread-181780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:21:01.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:21:01.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:21:01.517 [DEBUG] [Thread-181780] [transport.py] [_log()] userauth is OK
2026-04-12T03:21:01.517 [DEBUG] [Thread-181780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:21:01.517 [DEBUG] [Thread-181780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:21:01.517 [DEBUG] [Thread-181780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:21:01.518 [DEBUG] [Thread-181780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:21:01.536 [INFO] [Thread-181780] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:21:01.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:21:02.323 [DEBUG] [Thread-181780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:21:02.323 [DEBUG] [Thread-181780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:21:02.324 [DEBUG] [Thread-181780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:21:02.365 [DEBUG] [Thread-181780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:21:02.365 [DEBUG] [Thread-181780] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:21:02.368 [DEBUG] [Thread-181780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:21:02.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:21:02.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:21:02.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:21:02.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:21:02.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:21:02.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:21:02.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:21:02.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:21:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:21:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.055662 -999.00   +9.90  20.85     98   +9.70 1 3 1 3 1     0    0 0.19 -2.45 ----- 20.4 20.9 280.6 24.1 11.2 -1.2 11.1 -1.3 10.7 -1.1 11.1 -0.5
2026-04-12T03:21:02.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:21:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:21:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.055662
2026-04-12T03:21:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:21:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:21:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:21:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:21:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:21:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:20:44', tmtdew=-0.06533, humidity=100.373, cloud=0.0, wind=23.5354, temperature=10.5025, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:20:09.197', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:21:02.385 [DEBUG] [Thread-181780] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:21:02.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:21:02.479 [DEBUG] [Thread-181783] [transport.py] [_log()] starting thread (client mode): 0xb0f6cf10
2026-04-12T03:21:02.479 [DEBUG] [Thread-181783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:21:02.494 [DEBUG] [Thread-181783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:21:02.494 [INFO] [Thread-181783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:21:02.501 [DEBUG] [Thread-181783] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] client lang: <none>
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] server lang: <none>
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] kex follows: False
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] Compression: none
2026-04-12T03:21:02.502 [DEBUG] [Thread-181783] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:21:02.559 [DEBUG] [Thread-181783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:21:02.560 [DEBUG] [Thread-181783] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:21:02.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:21:02.561 [DEBUG] [Thread-181783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:21:02.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:21:02.619 [DEBUG] [Thread-181783] [transport.py] [_log()] userauth is OK
2026-04-12T03:21:02.619 [DEBUG] [Thread-181783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:21:02.619 [DEBUG] [Thread-181783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:21:02.620 [DEBUG] [Thread-181783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:21:02.620 [DEBUG] [Thread-181783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:21:02.639 [INFO] [Thread-181783] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:21:02.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:21:02.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:21:03.435 [DEBUG] [Thread-181783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:21:03.435 [DEBUG] [Thread-181783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:21:03.482 [DEBUG] [Thread-181783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:21:03.483 [DEBUG] [Thread-181783] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:21:03.492 [DEBUG] [Thread-181783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:21:03.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:21:03.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:21:03.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-04-12T03:21:03.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:21:03.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:21:03.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:21:03.526 [DEBUG] [Thread-181783] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:21:11.174 [DEBUG] [Thread-181785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:21:26.214 [DEBUG] [Thread-181786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:21:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:21:33.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:21:33.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-04-12T03:21:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 21, 20), 0.0199, 100.17, 0.0, 21.8974, 9.98491, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:21:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:21:20
2026-04-12T03:21:35.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:21:35.387 [DEBUG] [Thread-181787] [transport.py] [_log()] starting thread (client mode): 0xb0feadd0
2026-04-12T03:21:35.387 [DEBUG] [Thread-181787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:21:35.403 [DEBUG] [Thread-181787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:21:35.403 [INFO] [Thread-181787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:21:35.407 [DEBUG] [Thread-181787] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] client lang: <none>
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] server lang: <none>
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] kex follows: False
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:21:35.408 [DEBUG] [Thread-181787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:21:35.409 [DEBUG] [Thread-181787] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:21:35.409 [DEBUG] [Thread-181787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:21:35.409 [DEBUG] [Thread-181787] [transport.py] [_log()] Compression: none
2026-04-12T03:21:35.409 [DEBUG] [Thread-181787] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:21:35.423 [DEBUG] [Thread-181787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:21:35.423 [DEBUG] [Thread-181787] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:21:35.424 [DEBUG] [Thread-181787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:21:35.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:21:35.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:21:35.464 [DEBUG] [Thread-181787] [transport.py] [_log()] userauth is OK
2026-04-12T03:21:35.465 [DEBUG] [Thread-181787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:21:35.465 [DEBUG] [Thread-181787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:21:35.465 [DEBUG] [Thread-181787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:21:35.465 [DEBUG] [Thread-181787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:21:35.500 [INFO] [Thread-181787] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:21:35.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:21:36.311 [DEBUG] [Thread-181787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:21:36.311 [DEBUG] [Thread-181787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:21:36.311 [DEBUG] [Thread-181787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:21:36.352 [DEBUG] [Thread-181787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:21:36.353 [DEBUG] [Thread-181787] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:21:36.355 [DEBUG] [Thread-181787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:21:36.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:21:36.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:21:36.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:21:36.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:21:36.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:21:36.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:21:36.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:21:36.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:21:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:21:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.056009 -999.00   +9.90  20.62     98   +9.70 1 3 1 3 1     0    0 0.19 -2.58 ----- 19.2 20.6 276.4 27.1 11.2 -1.2 11.1 -1.2 10.7 -1.2 11.1 -0.5
2026-04-12T03:21:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:21:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:21:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.056009
2026-04-12T03:21:36.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:21:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:21:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:21:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:21:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:21:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:21:20', tmtdew=0.0199, humidity=100.17, cloud=0.0, wind=21.8974, temperature=9.98491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:20:39.178', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:21:36.382 [DEBUG] [Thread-181787] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:21:36.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:21:36.472 [DEBUG] [Thread-181790] [transport.py] [_log()] starting thread (client mode): 0xb0f6eb90
2026-04-12T03:21:36.472 [DEBUG] [Thread-181790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:21:36.487 [DEBUG] [Thread-181790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:21:36.487 [INFO] [Thread-181790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:21:36.494 [DEBUG] [Thread-181790] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] client lang: <none>
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] server lang: <none>
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] kex follows: False
2026-04-12T03:21:36.495 [DEBUG] [Thread-181790] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:21:36.496 [DEBUG] [Thread-181790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:21:36.496 [DEBUG] [Thread-181790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:21:36.496 [DEBUG] [Thread-181790] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:21:36.496 [DEBUG] [Thread-181790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:21:36.496 [DEBUG] [Thread-181790] [transport.py] [_log()] Compression: none
2026-04-12T03:21:36.496 [DEBUG] [Thread-181790] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:21:36.555 [DEBUG] [Thread-181790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:21:36.556 [DEBUG] [Thread-181790] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:21:36.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:21:36.557 [DEBUG] [Thread-181790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:21:36.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:21:36.611 [DEBUG] [Thread-181790] [transport.py] [_log()] userauth is OK
2026-04-12T03:21:36.611 [DEBUG] [Thread-181790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:21:36.611 [DEBUG] [Thread-181790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:21:36.612 [DEBUG] [Thread-181790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:21:36.612 [DEBUG] [Thread-181790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:21:36.631 [INFO] [Thread-181790] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:21:36.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:21:36.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:21:37.446 [DEBUG] [Thread-181790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:21:37.446 [DEBUG] [Thread-181790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:21:37.495 [DEBUG] [Thread-181790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:21:37.495 [DEBUG] [Thread-181790] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:21:37.504 [DEBUG] [Thread-181790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:21:37.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:21:37.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-04-12T03:21:37.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-04-12T03:21:37.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:21:37.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:21:37.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:21:37.541 [DEBUG] [Thread-181790] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:21:41.238 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:21:41.239 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:21:41.250 [DEBUG] [Thread-181792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:21:56.310 [DEBUG] [Thread-181793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:21:57.058 [DEBUG] [Thread-181794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:07.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:22:07.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:22:07.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-04-12T03:22:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 21, 55), 0.027335, 100.12, 0.0, 20.75, 9.98491, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:22:08.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:21:55
2026-04-12T03:22:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:22:09.418 [DEBUG] [Thread-181795] [transport.py] [_log()] starting thread (client mode): 0xae561900
2026-04-12T03:22:09.418 [DEBUG] [Thread-181795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:22:09.432 [DEBUG] [Thread-181795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:22:09.432 [INFO] [Thread-181795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:22:09.434 [DEBUG] [Thread-181795] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:22:09.434 [DEBUG] [Thread-181795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] client lang: <none>
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] server lang: <none>
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] kex follows: False
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] Compression: none
2026-04-12T03:22:09.435 [DEBUG] [Thread-181795] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:22:09.448 [DEBUG] [Thread-181795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:22:09.448 [DEBUG] [Thread-181795] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:22:09.449 [DEBUG] [Thread-181795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:22:09.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:22:09.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:22:09.451 [DEBUG] [Thread-181795] [transport.py] [_log()] userauth is OK
2026-04-12T03:22:09.451 [DEBUG] [Thread-181795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:22:09.451 [DEBUG] [Thread-181795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:22:09.451 [DEBUG] [Thread-181795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:22:09.451 [DEBUG] [Thread-181795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:22:09.465 [INFO] [Thread-181795] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:22:09.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:22:10.235 [DEBUG] [Thread-181795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:22:10.235 [DEBUG] [Thread-181795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:22:10.235 [DEBUG] [Thread-181795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:22:10.277 [DEBUG] [Thread-181795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:22:10.277 [DEBUG] [Thread-181795] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:22:10.280 [DEBUG] [Thread-181795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:22:10.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:22:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:22:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:22:10.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:22:10.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:22:10.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:22:10.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:22:10.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:22:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:22:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.056357 -999.00  +10.00  15.54     98   +9.70 1 3 1 3 1     0    0 0.19 -2.60 ----- 19.1 15.5 284.0 22.7 11.3 -1.1 11.1 -1.0 10.7 -0.9 11.1 -0.4
2026-04-12T03:22:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:22:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:22:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.056357
2026-04-12T03:22:10.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:22:10.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:22:10.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:22:10.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:22:10.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:22:10.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:21:55', tmtdew=0.027335, humidity=100.12, cloud=0.0, wind=20.75, temperature=9.98491, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:21:09.245', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:22:10.309 [DEBUG] [Thread-181795] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:22:10.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:22:10.405 [DEBUG] [Thread-181798] [transport.py] [_log()] starting thread (client mode): 0xae5b6380
2026-04-12T03:22:10.405 [DEBUG] [Thread-181798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:22:10.420 [DEBUG] [Thread-181798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:22:10.420 [INFO] [Thread-181798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:22:10.428 [DEBUG] [Thread-181798] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:22:10.428 [DEBUG] [Thread-181798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:22:10.428 [DEBUG] [Thread-181798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:22:10.428 [DEBUG] [Thread-181798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:10.428 [DEBUG] [Thread-181798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:10.428 [DEBUG] [Thread-181798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] client lang: <none>
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] server lang: <none>
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] kex follows: False
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] Compression: none
2026-04-12T03:22:10.429 [DEBUG] [Thread-181798] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:22:10.488 [DEBUG] [Thread-181798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:22:10.488 [DEBUG] [Thread-181798] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:22:10.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:22:10.489 [DEBUG] [Thread-181798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:22:10.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:22:10.547 [DEBUG] [Thread-181798] [transport.py] [_log()] userauth is OK
2026-04-12T03:22:10.547 [DEBUG] [Thread-181798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:22:10.547 [DEBUG] [Thread-181798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:22:10.547 [DEBUG] [Thread-181798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:22:10.547 [DEBUG] [Thread-181798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:22:10.571 [INFO] [Thread-181798] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:22:10.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:22:10.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:22:11.347 [DEBUG] [Thread-181800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:11.383 [DEBUG] [Thread-181798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:22:11.384 [DEBUG] [Thread-181798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:22:11.432 [DEBUG] [Thread-181798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:22:11.433 [DEBUG] [Thread-181798] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:22:11.442 [DEBUG] [Thread-181798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:22:11.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:22:11.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-04-12T03:22:11.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:22:11.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:22:11.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:22:11.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:22:11.485 [DEBUG] [Thread-181798] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:22:26.398 [DEBUG] [Thread-181801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:41.435 [DEBUG] [Thread-181802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:41.443 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:41.445 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:22:41.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:22:41.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-04-12T03:22:42.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 22, 31), 0.01988, 100.17, 0.0, 21.9143, 10.0015, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:22:42.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:22:31
2026-04-12T03:22:43.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:22:43.395 [DEBUG] [Thread-181803] [transport.py] [_log()] starting thread (client mode): 0xae560c70
2026-04-12T03:22:43.395 [DEBUG] [Thread-181803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:22:43.417 [DEBUG] [Thread-181803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:22:43.417 [INFO] [Thread-181803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:22:43.420 [DEBUG] [Thread-181803] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:22:43.420 [DEBUG] [Thread-181803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:22:43.420 [DEBUG] [Thread-181803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] client lang: <none>
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] server lang: <none>
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] kex follows: False
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:22:43.421 [DEBUG] [Thread-181803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:22:43.422 [DEBUG] [Thread-181803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:22:43.422 [DEBUG] [Thread-181803] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:22:43.422 [DEBUG] [Thread-181803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:22:43.422 [DEBUG] [Thread-181803] [transport.py] [_log()] Compression: none
2026-04-12T03:22:43.422 [DEBUG] [Thread-181803] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:22:43.442 [DEBUG] [Thread-181803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:22:43.442 [DEBUG] [Thread-181803] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:22:43.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:22:43.443 [DEBUG] [Thread-181803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:22:43.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:22:43.445 [DEBUG] [Thread-181803] [transport.py] [_log()] userauth is OK
2026-04-12T03:22:43.445 [DEBUG] [Thread-181803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:22:43.446 [DEBUG] [Thread-181803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:22:43.446 [DEBUG] [Thread-181803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:22:43.446 [DEBUG] [Thread-181803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:22:43.459 [INFO] [Thread-181803] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:22:43.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:22:44.237 [DEBUG] [Thread-181803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:22:44.237 [DEBUG] [Thread-181803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:22:44.237 [DEBUG] [Thread-181803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:22:44.278 [DEBUG] [Thread-181803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:22:44.278 [DEBUG] [Thread-181803] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:22:44.281 [DEBUG] [Thread-181803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:22:44.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:22:44.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:22:44.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:22:44.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:22:44.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:22:44.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:22:44.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:22:44.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:22:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:22:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.057051 -999.00  +10.00  20.51     98   +9.70 1 3 1 3 1     0    0 0.20 -2.07 ----- 20.3 20.5 273.2 23.5 11.2 -1.4 11.1 -1.2 10.7 -1.2 11.1 -0.5
2026-04-12T03:22:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:22:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:22:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.057051
2026-04-12T03:22:44.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:22:44.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:22:44.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:22:44.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:22:44.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:22:44.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:22:31', tmtdew=0.01988, humidity=100.17, cloud=0.0, wind=21.9143, temperature=10.0015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:22:09.206', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:22:44.309 [DEBUG] [Thread-181803] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:22:44.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:22:44.402 [DEBUG] [Thread-181806] [transport.py] [_log()] starting thread (client mode): 0xb0fe86a0
2026-04-12T03:22:44.402 [DEBUG] [Thread-181806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:22:44.416 [DEBUG] [Thread-181806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:22:44.417 [INFO] [Thread-181806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] client lang: <none>
2026-04-12T03:22:44.424 [DEBUG] [Thread-181806] [transport.py] [_log()] server lang: <none>
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] kex follows: False
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] Compression: none
2026-04-12T03:22:44.425 [DEBUG] [Thread-181806] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:22:44.482 [DEBUG] [Thread-181806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:22:44.483 [DEBUG] [Thread-181806] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:22:44.483 [DEBUG] [Thread-181806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:22:44.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:22:44.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:22:44.540 [DEBUG] [Thread-181806] [transport.py] [_log()] userauth is OK
2026-04-12T03:22:44.540 [DEBUG] [Thread-181806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:22:44.540 [DEBUG] [Thread-181806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:22:44.540 [DEBUG] [Thread-181806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:22:44.541 [DEBUG] [Thread-181806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:22:44.565 [INFO] [Thread-181806] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:22:44.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:22:44.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:22:45.361 [DEBUG] [Thread-181806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:22:45.361 [DEBUG] [Thread-181806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:22:45.409 [DEBUG] [Thread-181806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:22:45.409 [DEBUG] [Thread-181806] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:22:45.419 [DEBUG] [Thread-181806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:22:45.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:22:45.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:22: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') -> 00000000
2026-04-12T03:22:45.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:22:45.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:22:45.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:22:45.456 [DEBUG] [Thread-181806] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:22:56.467 [DEBUG] [Thread-181808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:22:57.116 [DEBUG] [Thread-181809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:11.523 [DEBUG] [Thread-181810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:15.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:23:15.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:23:15.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-04-12T03:23:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 23, 7), 0.01988, 100.17, 0.0, 22.1436, 10.0015, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:23:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:23:07
2026-04-12T03:23:17.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:23:17.290 [DEBUG] [Thread-181811] [transport.py] [_log()] starting thread (client mode): 0xb0f6dd20
2026-04-12T03:23:17.290 [DEBUG] [Thread-181811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:23:17.310 [DEBUG] [Thread-181811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:23:17.310 [INFO] [Thread-181811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:17.312 [DEBUG] [Thread-181811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] client lang: <none>
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] server lang: <none>
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] kex follows: False
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] Compression: none
2026-04-12T03:23:17.313 [DEBUG] [Thread-181811] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:23:17.325 [DEBUG] [Thread-181811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:23:17.326 [DEBUG] [Thread-181811] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:23:17.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:23:17.327 [DEBUG] [Thread-181811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:23:17.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:23:17.329 [DEBUG] [Thread-181811] [transport.py] [_log()] userauth is OK
2026-04-12T03:23:17.330 [DEBUG] [Thread-181811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:23:17.330 [DEBUG] [Thread-181811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:23:17.330 [DEBUG] [Thread-181811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:23:17.330 [DEBUG] [Thread-181811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:23:17.357 [INFO] [Thread-181811] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:23:17.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:23:18.131 [DEBUG] [Thread-181811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:23:18.131 [DEBUG] [Thread-181811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:23:18.132 [DEBUG] [Thread-181811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:23:18.173 [DEBUG] [Thread-181811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:23:18.173 [DEBUG] [Thread-181811] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:23:18.176 [DEBUG] [Thread-181811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:23:18.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:23:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:23:18.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:23:18.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:23:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:23:18.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:23:18.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:23:18.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:23:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:23:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.057398 -999.00  +10.00  14.26     98   +9.70 1 3 1 3 1     0    0 0.20 -1.92 ----- 18.5 14.3 280.8 23.2 11.3 -1.1 11.1 -1.1 10.7 -1.2 11.1 -0.3
2026-04-12T03:23:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:23:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:23:18.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.057398
2026-04-12T03:23:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:23:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:23:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:23:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:23:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:23:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:23:07', tmtdew=0.01988, humidity=100.17, cloud=0.0, wind=22.1436, temperature=10.0015, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:22:39.187', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:23:18.202 [DEBUG] [Thread-181811] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:23:18.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:23:18.299 [DEBUG] [Thread-181814] [transport.py] [_log()] starting thread (client mode): 0xae560dc0
2026-04-12T03:23:18.299 [DEBUG] [Thread-181814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:23:18.313 [DEBUG] [Thread-181814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:23:18.314 [INFO] [Thread-181814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:23:18.321 [DEBUG] [Thread-181814] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:23:18.321 [DEBUG] [Thread-181814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:23:18.321 [DEBUG] [Thread-181814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:23:18.321 [DEBUG] [Thread-181814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:18.321 [DEBUG] [Thread-181814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] client lang: <none>
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] server lang: <none>
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] kex follows: False
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:23:18.322 [DEBUG] [Thread-181814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:23:18.323 [DEBUG] [Thread-181814] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:23:18.323 [DEBUG] [Thread-181814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:23:18.323 [DEBUG] [Thread-181814] [transport.py] [_log()] Compression: none
2026-04-12T03:23:18.323 [DEBUG] [Thread-181814] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:23:18.379 [DEBUG] [Thread-181814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:23:18.379 [DEBUG] [Thread-181814] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:23:18.380 [DEBUG] [Thread-181814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:23:18.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:23:18.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:23:18.435 [DEBUG] [Thread-181814] [transport.py] [_log()] userauth is OK
2026-04-12T03:23:18.436 [DEBUG] [Thread-181814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:23:18.436 [DEBUG] [Thread-181814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:23:18.436 [DEBUG] [Thread-181814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:23:18.436 [DEBUG] [Thread-181814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:23:18.454 [INFO] [Thread-181814] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:23:18.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:23:18.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:23:19.262 [DEBUG] [Thread-181814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:23:19.262 [DEBUG] [Thread-181814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:23:19.310 [DEBUG] [Thread-181814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:23:19.311 [DEBUG] [Thread-181814] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:23:19.320 [DEBUG] [Thread-181814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:23:19.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:23:19.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-04-12T03:23:19.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:23:19.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:23:19.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:23:19.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:23:19.355 [DEBUG] [Thread-181814] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:23:26.561 [DEBUG] [Thread-181816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:41.614 [DEBUG] [Thread-181817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:41.652 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:41.654 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:23:49.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:23:49.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-04-12T03:23:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 23, 42), -0.06024, 100.34, 0.0, 24.3821, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:23:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:23:42
2026-04-12T03:23:51.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:23:51.237 [DEBUG] [Thread-181818] [transport.py] [_log()] starting thread (client mode): 0xae5359f0
2026-04-12T03:23:51.238 [DEBUG] [Thread-181818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:23:51.253 [DEBUG] [Thread-181818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:23:51.253 [INFO] [Thread-181818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] client lang: <none>
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] server lang: <none>
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] kex follows: False
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] Compression: none
2026-04-12T03:23:51.256 [DEBUG] [Thread-181818] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:23:51.274 [DEBUG] [Thread-181818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:23:51.274 [DEBUG] [Thread-181818] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:23:51.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:23:51.275 [DEBUG] [Thread-181818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:23:51.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:23:51.277 [DEBUG] [Thread-181818] [transport.py] [_log()] userauth is OK
2026-04-12T03:23:51.277 [DEBUG] [Thread-181818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:23:51.277 [DEBUG] [Thread-181818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:23:51.278 [DEBUG] [Thread-181818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:23:51.278 [DEBUG] [Thread-181818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:23:51.296 [INFO] [Thread-181818] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:23:51.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:23:52.068 [DEBUG] [Thread-181818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:23:52.068 [DEBUG] [Thread-181818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:23:52.068 [DEBUG] [Thread-181818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:23:52.109 [DEBUG] [Thread-181818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:23:52.109 [DEBUG] [Thread-181818] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:23:52.113 [DEBUG] [Thread-181818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:23:52.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:23:52.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:23:52.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:23:52.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:23:52.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:23:52.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:23:52.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:23:52.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:23:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:23:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.057745 -999.00  +10.00  15.36     98   +9.80 1 3 1 3 1     0    0 0.20 -1.88 ----- 17.0 15.4 285.3 21.2 11.3 -1.1 11.2 -1.0 10.7 -1.1 11.1 -0.4
2026-04-12T03:23:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:23:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:23:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.057745
2026-04-12T03:23:52.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:23:52.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:23:52.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:23:52.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:23:52.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:23:52.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:23:42', tmtdew=-0.06024, humidity=100.34, cloud=0.0, wind=24.3821, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:23:09.168', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:23:52.136 [DEBUG] [Thread-181818] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:23:52.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:23:52.227 [DEBUG] [Thread-181821] [transport.py] [_log()] starting thread (client mode): 0xae5b53c0
2026-04-12T03:23:52.227 [DEBUG] [Thread-181821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:23:52.243 [DEBUG] [Thread-181821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:23:52.243 [INFO] [Thread-181821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:23:52.253 [DEBUG] [Thread-181821] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:23:52.254 [DEBUG] [Thread-181821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] client lang: <none>
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] server lang: <none>
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] kex follows: False
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:23:52.255 [DEBUG] [Thread-181821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:23:52.256 [DEBUG] [Thread-181821] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:23:52.256 [DEBUG] [Thread-181821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:23:52.256 [DEBUG] [Thread-181821] [transport.py] [_log()] Compression: none
2026-04-12T03:23:52.256 [DEBUG] [Thread-181821] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:23:52.312 [DEBUG] [Thread-181821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:23:52.313 [DEBUG] [Thread-181821] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:23:52.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:23:52.314 [DEBUG] [Thread-181821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:23:52.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:23:52.371 [DEBUG] [Thread-181821] [transport.py] [_log()] userauth is OK
2026-04-12T03:23:52.372 [DEBUG] [Thread-181821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:23:52.372 [DEBUG] [Thread-181821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:23:52.372 [DEBUG] [Thread-181821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:23:52.372 [DEBUG] [Thread-181821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:23:52.391 [INFO] [Thread-181821] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:23:52.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:23:52.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:23:53.231 [DEBUG] [Thread-181821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:23:53.231 [DEBUG] [Thread-181821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:23:53.279 [DEBUG] [Thread-181821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:23:53.280 [DEBUG] [Thread-181821] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:23:53.289 [DEBUG] [Thread-181821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:23:53.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:23:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:23:53.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-04-12T03:23:53.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:23:53.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:23:53.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:23:53.324 [DEBUG] [Thread-181821] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:23:56.650 [DEBUG] [Thread-181823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:23:57.181 [DEBUG] [Thread-181824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:11.704 [DEBUG] [Thread-181825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:23.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:24:23.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:24: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-04-12T03:24:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 23, 42), -0.06024, 100.34, 0.0, 24.3821, 10.403, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:24:24.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:23:42
2026-04-12T03:24:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:24:25.175 [DEBUG] [Thread-181826] [transport.py] [_log()] starting thread (client mode): 0xae52e290
2026-04-12T03:24:25.175 [DEBUG] [Thread-181826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:24:25.197 [DEBUG] [Thread-181826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:24:25.197 [INFO] [Thread-181826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:24:25.201 [DEBUG] [Thread-181826] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:24:25.201 [DEBUG] [Thread-181826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:24:25.201 [DEBUG] [Thread-181826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:24:25.201 [DEBUG] [Thread-181826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:24:25.201 [DEBUG] [Thread-181826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] client lang: <none>
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] server lang: <none>
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] kex follows: False
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:24:25.202 [DEBUG] [Thread-181826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:24:25.203 [DEBUG] [Thread-181826] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:24:25.203 [DEBUG] [Thread-181826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:24:25.203 [DEBUG] [Thread-181826] [transport.py] [_log()] Compression: none
2026-04-12T03:24:25.203 [DEBUG] [Thread-181826] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:24:25.222 [DEBUG] [Thread-181826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:24:25.222 [DEBUG] [Thread-181826] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:24:25.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:24:25.223 [DEBUG] [Thread-181826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:24:25.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:24:25.225 [DEBUG] [Thread-181826] [transport.py] [_log()] userauth is OK
2026-04-12T03:24:25.225 [DEBUG] [Thread-181826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:24:25.225 [DEBUG] [Thread-181826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:24:25.226 [DEBUG] [Thread-181826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:24:25.226 [DEBUG] [Thread-181826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:24:25.250 [INFO] [Thread-181826] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:24:25.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:24:26.009 [DEBUG] [Thread-181826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:24:26.009 [DEBUG] [Thread-181826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:24:26.010 [DEBUG] [Thread-181826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:24:26.051 [DEBUG] [Thread-181826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:24:26.052 [DEBUG] [Thread-181826] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:24:26.056 [DEBUG] [Thread-181826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:24:26.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:24:26.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:24:26.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:24:26.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:24:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:24:26.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:24:26.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:24:26.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:24:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:24:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.058093 -999.00  +10.00  18.21     98   +9.80 1 3 1 3 1     0    0 0.20 -2.09 ----- 16.7 18.2 283.6 21.9 11.3 -1.2 11.1 -1.2 10.7 -1.1 11.2 -0.4
2026-04-12T03:24:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:24:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:24:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.058093
2026-04-12T03:24:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:24:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:24:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:24:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:24:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:24:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:23:42', tmtdew=-0.06024, humidity=100.34, cloud=0.0, wind=24.3821, temperature=10.403, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:23:39.235', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:24:26.083 [DEBUG] [Thread-181826] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:24:26.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:24:26.175 [DEBUG] [Thread-181829] [transport.py] [_log()] starting thread (client mode): 0xae52e0e0
2026-04-12T03:24:26.175 [DEBUG] [Thread-181829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:24:26.190 [DEBUG] [Thread-181829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:24:26.190 [INFO] [Thread-181829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:24:26.197 [DEBUG] [Thread-181829] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] client lang: <none>
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] server lang: <none>
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] kex follows: False
2026-04-12T03:24:26.198 [DEBUG] [Thread-181829] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:24:26.199 [DEBUG] [Thread-181829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:24:26.199 [DEBUG] [Thread-181829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:24:26.199 [DEBUG] [Thread-181829] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:24:26.199 [DEBUG] [Thread-181829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:24:26.199 [DEBUG] [Thread-181829] [transport.py] [_log()] Compression: none
2026-04-12T03:24:26.199 [DEBUG] [Thread-181829] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:24:26.260 [DEBUG] [Thread-181829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:24:26.260 [DEBUG] [Thread-181829] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:24:26.261 [DEBUG] [Thread-181829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:24:26.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:24:26.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:24:26.315 [DEBUG] [Thread-181829] [transport.py] [_log()] userauth is OK
2026-04-12T03:24:26.316 [DEBUG] [Thread-181829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:24:26.316 [DEBUG] [Thread-181829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:24:26.316 [DEBUG] [Thread-181829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:24:26.316 [DEBUG] [Thread-181829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:24:26.336 [INFO] [Thread-181829] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:24:26.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:24:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:24:26.741 [DEBUG] [Thread-181831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:27.142 [DEBUG] [Thread-181829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:24:27.142 [DEBUG] [Thread-181829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:24:27.190 [DEBUG] [Thread-181829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:24:27.190 [DEBUG] [Thread-181829] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:24:27.200 [DEBUG] [Thread-181829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:24:27.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:24:27.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:24:27.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:24:27.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:24:27.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:24:27.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:24:27.237 [DEBUG] [Thread-181829] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:24:41.796 [DEBUG] [Thread-181832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:41.858 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:41.860 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:56.830 [DEBUG] [Thread-181833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:57.245 [DEBUG] [Thread-181834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:24:57.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:24:57.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:24:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:24:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 24, 17), 0.01738, 100.187, 0.0, 22.073, 10.0681, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:24:58.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:24:17
2026-04-12T03:24:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:24:59.048 [DEBUG] [Thread-181835] [transport.py] [_log()] starting thread (client mode): 0xae5347c0
2026-04-12T03:24:59.048 [DEBUG] [Thread-181835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:24:59.067 [DEBUG] [Thread-181835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:24:59.067 [INFO] [Thread-181835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:24:59.070 [DEBUG] [Thread-181835] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:24:59.070 [DEBUG] [Thread-181835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] client lang: <none>
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] server lang: <none>
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] kex follows: False
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:24:59.071 [DEBUG] [Thread-181835] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:24:59.072 [DEBUG] [Thread-181835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:24:59.072 [DEBUG] [Thread-181835] [transport.py] [_log()] Compression: none
2026-04-12T03:24:59.072 [DEBUG] [Thread-181835] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:24:59.090 [DEBUG] [Thread-181835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:24:59.091 [DEBUG] [Thread-181835] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:24:59.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:24:59.092 [DEBUG] [Thread-181835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:24:59.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:24:59.094 [DEBUG] [Thread-181835] [transport.py] [_log()] userauth is OK
2026-04-12T03:24:59.095 [DEBUG] [Thread-181835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:24:59.095 [DEBUG] [Thread-181835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:24:59.095 [DEBUG] [Thread-181835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:24:59.095 [DEBUG] [Thread-181835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:24:59.119 [INFO] [Thread-181835] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:24:59.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:24:59.876 [DEBUG] [Thread-181835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:24:59.876 [DEBUG] [Thread-181835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:24:59.876 [DEBUG] [Thread-181835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:24:59.917 [DEBUG] [Thread-181835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:24:59.917 [DEBUG] [Thread-181835] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:24:59.918 [DEBUG] [Thread-181835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:24:59.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:24:59.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:24:59.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:24:59.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:24:59.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:24:59.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:24:59.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.058440 -999.00  +10.00  15.29     98   +9.80 1 3 1 3 1     0    0 0.19 -2.16 ----- 20.0 15.3 286.0 25.6 11.3 -1.2 11.2 -1.0 10.7 -1.0 11.1 -0.4
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.058440
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:24:59.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:24:17', tmtdew=0.01738, humidity=100.187, cloud=0.0, wind=22.073, temperature=10.0681, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:24:09.216', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:24:59.930 [DEBUG] [Thread-181835] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:25:00.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:25:00.012 [DEBUG] [Thread-181838] [transport.py] [_log()] starting thread (client mode): 0xae563310
2026-04-12T03:25:00.012 [DEBUG] [Thread-181838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:25:00.027 [DEBUG] [Thread-181838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:25:00.027 [INFO] [Thread-181838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] client lang: <none>
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] server lang: <none>
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] kex follows: False
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] Compression: none
2026-04-12T03:25:00.035 [DEBUG] [Thread-181838] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:25:00.095 [DEBUG] [Thread-181838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:25:00.096 [DEBUG] [Thread-181838] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:25:00.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:25:00.097 [DEBUG] [Thread-181838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:25:00.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:25:00.151 [DEBUG] [Thread-181838] [transport.py] [_log()] userauth is OK
2026-04-12T03:25:00.152 [DEBUG] [Thread-181838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:25:00.152 [DEBUG] [Thread-181838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:25:00.152 [DEBUG] [Thread-181838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:25:00.152 [DEBUG] [Thread-181838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:25:00.170 [INFO] [Thread-181838] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:25:00.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:25:00.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:25:00.995 [DEBUG] [Thread-181838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:25:00.995 [DEBUG] [Thread-181838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:25:01.043 [DEBUG] [Thread-181838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:25:01.043 [DEBUG] [Thread-181838] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:25:01.052 [DEBUG] [Thread-181838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:25:01.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:25:01.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-04-12T03:25:01.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-04-12T03:25:01.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:25:01.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:25:01.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:25:01.086 [DEBUG] [Thread-181838] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:25:11.865 [DEBUG] [Thread-181840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:25:26.916 [DEBUG] [Thread-181841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:25:31.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:25:31.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:25:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:25:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 24, 53), -0.06515, 100.373, 0.0, 22.1594, 10.3698, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:25:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:24:53
2026-04-12T03:25:32.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:25:33.048 [DEBUG] [Thread-181842] [transport.py] [_log()] starting thread (client mode): 0xb0f6cf10
2026-04-12T03:25:33.048 [DEBUG] [Thread-181842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:25:33.069 [DEBUG] [Thread-181842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:25:33.069 [INFO] [Thread-181842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] client lang: <none>
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] server lang: <none>
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] kex follows: False
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:25:33.072 [DEBUG] [Thread-181842] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:25:33.073 [DEBUG] [Thread-181842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:25:33.073 [DEBUG] [Thread-181842] [transport.py] [_log()] Compression: none
2026-04-12T03:25:33.073 [DEBUG] [Thread-181842] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:25:33.090 [DEBUG] [Thread-181842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:25:33.091 [DEBUG] [Thread-181842] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:25:33.091 [DEBUG] [Thread-181842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:25:33.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:25:33.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:25:33.094 [DEBUG] [Thread-181842] [transport.py] [_log()] userauth is OK
2026-04-12T03:25:33.094 [DEBUG] [Thread-181842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:25:33.094 [DEBUG] [Thread-181842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:25:33.094 [DEBUG] [Thread-181842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:25:33.094 [DEBUG] [Thread-181842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:25:33.118 [INFO] [Thread-181842] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:25:33.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:25:34.234 [DEBUG] [Thread-181842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:25:34.235 [DEBUG] [Thread-181842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:25:34.235 [DEBUG] [Thread-181842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:25:34.276 [DEBUG] [Thread-181842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:25:34.276 [DEBUG] [Thread-181842] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:25:34.279 [DEBUG] [Thread-181842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:25:34.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:25:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:25:34.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:25:34.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:25:34.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:25:34.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:25:34.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:25:34.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:25:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:25:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.059134 -999.00  +10.10  16.90     98   +9.80 1 3 1 3 1     0    0 0.20 -1.80 ----- 18.9 16.9 280.2 22.7 11.3 -1.1 11.2 -1.0 10.8 -1.3 11.2 -0.4
2026-04-12T03:25:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:25:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:25:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.059134
2026-04-12T03:25:34.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:25:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:25:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:25:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:25:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:25:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:24:53', tmtdew=-0.06515, humidity=100.373, cloud=0.0, wind=22.1594, temperature=10.3698, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:25:09.178', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:25:34.316 [DEBUG] [Thread-181842] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:25:34.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:25:34.410 [DEBUG] [Thread-181845] [transport.py] [_log()] starting thread (client mode): 0xae5b49d0
2026-04-12T03:25:34.410 [DEBUG] [Thread-181845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:25:34.425 [DEBUG] [Thread-181845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:25:34.425 [INFO] [Thread-181845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:25:34.432 [DEBUG] [Thread-181845] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:25:34.432 [DEBUG] [Thread-181845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] client lang: <none>
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] server lang: <none>
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] kex follows: False
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] Compression: none
2026-04-12T03:25:34.433 [DEBUG] [Thread-181845] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:25:34.492 [DEBUG] [Thread-181845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:25:34.492 [DEBUG] [Thread-181845] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:25:34.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:25:34.493 [DEBUG] [Thread-181845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:25:34.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:25:34.548 [DEBUG] [Thread-181845] [transport.py] [_log()] userauth is OK
2026-04-12T03:25:34.548 [DEBUG] [Thread-181845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:25:34.548 [DEBUG] [Thread-181845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:25:34.548 [DEBUG] [Thread-181845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:25:34.549 [DEBUG] [Thread-181845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:25:34.567 [INFO] [Thread-181845] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:25:34.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:25:34.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:25:35.388 [DEBUG] [Thread-181845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:25:35.389 [DEBUG] [Thread-181845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:25:35.437 [DEBUG] [Thread-181845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:25:35.437 [DEBUG] [Thread-181845] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:25:35.664 [DEBUG] [Thread-181845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:25:35.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:25:35.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-04-12T03:25:35.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-04-12T03:25:35.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:25:35.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:25:35.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:25:35.702 [DEBUG] [Thread-181845] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:25:41.955 [DEBUG] [Thread-181847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:25:42.063 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:25:42.064 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:25:57.018 [DEBUG] [Thread-181848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:25:57.303 [DEBUG] [Thread-181849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:05.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:26:05.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:26:05.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-04-12T03:26:07.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 25, 28), 0.0174, 100.187, 0.0, 22.7617, 10.0515, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:26:07.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:25:28
2026-04-12T03:26:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:26:07.629 [DEBUG] [Thread-181850] [transport.py] [_log()] starting thread (client mode): 0xae52ff40
2026-04-12T03:26:07.629 [DEBUG] [Thread-181850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:26:07.646 [DEBUG] [Thread-181850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:26:07.646 [INFO] [Thread-181850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] client lang: <none>
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] server lang: <none>
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] kex follows: False
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] Compression: none
2026-04-12T03:26:07.648 [DEBUG] [Thread-181850] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:26:07.659 [DEBUG] [Thread-181850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:26:07.659 [DEBUG] [Thread-181850] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:26:07.659 [DEBUG] [Thread-181850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:26:07.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:26:07.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:26:07.661 [DEBUG] [Thread-181850] [transport.py] [_log()] userauth is OK
2026-04-12T03:26:07.661 [DEBUG] [Thread-181850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:26:07.661 [DEBUG] [Thread-181850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:26:07.661 [DEBUG] [Thread-181850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:26:07.661 [DEBUG] [Thread-181850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:26:07.679 [INFO] [Thread-181850] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:26:07.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:26:08.245 [DEBUG] [Thread-181850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:26:08.245 [DEBUG] [Thread-181850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:26:08.246 [DEBUG] [Thread-181850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:26:08.286 [DEBUG] [Thread-181850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:26:08.286 [DEBUG] [Thread-181850] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:26:08.290 [DEBUG] [Thread-181850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:26:08.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:26:08.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:26:08.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:26:08.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:26:08.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:26:08.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:26:08.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:26:08.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:26:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:26:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.059481 -999.00  +10.10  17.42     98   +9.80 1 3 1 3 1     0    0 0.21 -1.43 ----- 24.7 17.4 290.5 21.5 11.3 -1.1 11.1 -1.1 10.8 -1.1 11.2 -0.4
2026-04-12T03:26:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:26:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:26:08.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.059481
2026-04-12T03:26:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:26:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:26:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:26:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:26:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:26:08.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:25:28', tmtdew=0.0174, humidity=100.187, cloud=0.0, wind=22.7617, temperature=10.0515, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:25:39.158', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:26:08.324 [DEBUG] [Thread-181850] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:26:08.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:26:08.417 [DEBUG] [Thread-181853] [transport.py] [_log()] starting thread (client mode): 0xb0f6dd20
2026-04-12T03:26:08.417 [DEBUG] [Thread-181853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:26:08.432 [DEBUG] [Thread-181853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:26:08.432 [INFO] [Thread-181853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] client lang: <none>
2026-04-12T03:26:08.441 [DEBUG] [Thread-181853] [transport.py] [_log()] server lang: <none>
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] kex follows: False
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] Compression: none
2026-04-12T03:26:08.442 [DEBUG] [Thread-181853] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:26:08.503 [DEBUG] [Thread-181853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:26:08.504 [DEBUG] [Thread-181853] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:26:08.504 [DEBUG] [Thread-181853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:26:08.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:26:08.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:26:08.559 [DEBUG] [Thread-181853] [transport.py] [_log()] userauth is OK
2026-04-12T03:26:08.559 [DEBUG] [Thread-181853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:26:08.560 [DEBUG] [Thread-181853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:26:08.560 [DEBUG] [Thread-181853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:26:08.560 [DEBUG] [Thread-181853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:26:08.579 [INFO] [Thread-181853] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:26:08.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:26:08.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:26:09.372 [DEBUG] [Thread-181853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:26:09.373 [DEBUG] [Thread-181853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:26:09.420 [DEBUG] [Thread-181853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:26:09.421 [DEBUG] [Thread-181853] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:26:09.429 [DEBUG] [Thread-181853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:26:09.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:26:09.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-04-12T03:26:09.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-04-12T03:26:09.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:26:09.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:26:09.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:26:09.465 [DEBUG] [Thread-181853] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:26:12.057 [DEBUG] [Thread-181855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:27.111 [DEBUG] [Thread-181856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:26:39.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:26:39.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-04-12T03:26:40.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 26, 4), 0.02486, 100.137, 0.0, 23.2204, 10.0349, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:26:40.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:26:04
2026-04-12T03:26:41.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:26:41.404 [DEBUG] [Thread-181857] [transport.py] [_log()] starting thread (client mode): 0xae5b34f0
2026-04-12T03:26:41.405 [DEBUG] [Thread-181857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:26:41.425 [DEBUG] [Thread-181857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:26:41.425 [INFO] [Thread-181857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] client lang: <none>
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] server lang: <none>
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] kex follows: False
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] Compression: none
2026-04-12T03:26:41.428 [DEBUG] [Thread-181857] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:26:41.437 [DEBUG] [Thread-181857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:26:41.437 [DEBUG] [Thread-181857] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:26:41.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:26:41.438 [DEBUG] [Thread-181857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:26:41.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:26:41.440 [DEBUG] [Thread-181857] [transport.py] [_log()] userauth is OK
2026-04-12T03:26:41.440 [DEBUG] [Thread-181857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:26:41.440 [DEBUG] [Thread-181857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:26:41.440 [DEBUG] [Thread-181857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:26:41.440 [DEBUG] [Thread-181857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:26:41.459 [INFO] [Thread-181857] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:26:41.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:26:42.067 [DEBUG] [Thread-181857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:26:42.067 [DEBUG] [Thread-181857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:26:42.068 [DEBUG] [Thread-181857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:26:42.109 [DEBUG] [Thread-181857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:26:42.110 [DEBUG] [Thread-181857] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:26:42.114 [DEBUG] [Thread-181857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:26:42.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:26:42.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:26:42.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:26:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:26:42.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:26:42.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:26:42.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:26:42.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:26:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:26:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.059829 -999.00   +9.90  21.83     98   +9.70 1 3 1 3 1     0    0 0.21 -1.48 ----- 21.0 21.8 277.2 28.2 11.3 -1.3 11.1 -1.3 10.8 -1.3 11.2 -0.8
2026-04-12T03:26:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:26:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:26:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.059829
2026-04-12T03:26:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:26:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:26:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:26:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:26:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:26:42.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:26:04', tmtdew=0.02486, humidity=100.137, cloud=0.0, wind=23.2204, temperature=10.0349, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:26:09.226', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:26:42.139 [DEBUG] [Thread-181857] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:26:42.147 [DEBUG] [Thread-181860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:42.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:26:42.231 [DEBUG] [Thread-181861] [transport.py] [_log()] starting thread (client mode): 0xb0fea980
2026-04-12T03:26:42.231 [DEBUG] [Thread-181861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:26:42.246 [DEBUG] [Thread-181861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:26:42.247 [INFO] [Thread-181861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:26:42.254 [DEBUG] [Thread-181861] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] client lang: <none>
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] server lang: <none>
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] kex follows: False
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] Compression: none
2026-04-12T03:26:42.255 [DEBUG] [Thread-181861] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:26:42.267 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:42.268 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:42.312 [DEBUG] [Thread-181861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:26:42.313 [DEBUG] [Thread-181861] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:26:42.313 [DEBUG] [Thread-181861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:26:42.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:26:42.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:26:42.372 [DEBUG] [Thread-181861] [transport.py] [_log()] userauth is OK
2026-04-12T03:26:42.372 [DEBUG] [Thread-181861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:26:42.373 [DEBUG] [Thread-181861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:26:42.373 [DEBUG] [Thread-181861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:26:42.373 [DEBUG] [Thread-181861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:26:42.391 [INFO] [Thread-181861] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:26:42.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:26:42.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:26:43.240 [DEBUG] [Thread-181861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:26:43.241 [DEBUG] [Thread-181861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:26:43.289 [DEBUG] [Thread-181861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:26:43.289 [DEBUG] [Thread-181861] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:26:43.299 [DEBUG] [Thread-181861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:26:43.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:26:43.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-04-12T03:26:43.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-04-12T03:26:43.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:26:43.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:26:43.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:26:43.337 [DEBUG] [Thread-181861] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:26:57.192 [DEBUG] [Thread-181863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:26:57.361 [DEBUG] [Thread-181864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:12.226 [DEBUG] [Thread-181865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:13.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:27:13.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:27:13.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-04-12T03:27:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 26, 39), -0.07024, 100.406, 0.0, 23.6765, 10.4693, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:27:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:26:39
2026-04-12T03:27:15.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:27:15.273 [DEBUG] [Thread-181866] [transport.py] [_log()] starting thread (client mode): 0xae52d150
2026-04-12T03:27:15.273 [DEBUG] [Thread-181866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:27:15.297 [DEBUG] [Thread-181866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:27:15.297 [INFO] [Thread-181866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:27:15.300 [DEBUG] [Thread-181866] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:27:15.300 [DEBUG] [Thread-181866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:27:15.300 [DEBUG] [Thread-181866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:27:15.300 [DEBUG] [Thread-181866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] client lang: <none>
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] server lang: <none>
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] kex follows: False
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] Compression: none
2026-04-12T03:27:15.301 [DEBUG] [Thread-181866] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:27:15.323 [DEBUG] [Thread-181866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:27:15.323 [DEBUG] [Thread-181866] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:27:15.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:27:15.324 [DEBUG] [Thread-181866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:27:15.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:27:15.327 [DEBUG] [Thread-181866] [transport.py] [_log()] userauth is OK
2026-04-12T03:27:15.327 [DEBUG] [Thread-181866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:27:15.327 [DEBUG] [Thread-181866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:27:15.327 [DEBUG] [Thread-181866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:27:15.327 [DEBUG] [Thread-181866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:27:15.352 [INFO] [Thread-181866] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:27:15.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:27:15.970 [DEBUG] [Thread-181866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:27:15.970 [DEBUG] [Thread-181866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:27:15.971 [DEBUG] [Thread-181866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:27:16.011 [DEBUG] [Thread-181866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:27:16.011 [DEBUG] [Thread-181866] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:27:16.014 [DEBUG] [Thread-181866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:27:16.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:27:16.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:27:16.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:27:16.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:27:16.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:27:16.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:27:16.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:27:16.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:27:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:27:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.060523 -999.00  +10.00  19.20     98   +9.70 1 3 1 3 1     0    0 0.19 -1.86 ----- 18.8 19.2 279.4 22.7 11.3 -1.1 11.1 -1.1 10.7 -1.0 11.1 -0.4
2026-04-12T03:27:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:27:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:27:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.060523
2026-04-12T03:27:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:27:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:27:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:27:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:27:16.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:27:16.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:26:39', tmtdew=-0.07024, humidity=100.406, cloud=0.0, wind=23.6765, temperature=10.4693, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:27:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:27:16.041 [DEBUG] [Thread-181866] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:27:16.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:27:16.134 [DEBUG] [Thread-181869] [transport.py] [_log()] starting thread (client mode): 0xae5b2320
2026-04-12T03:27:16.134 [DEBUG] [Thread-181869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:27:16.149 [DEBUG] [Thread-181869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:27:16.149 [INFO] [Thread-181869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:27:16.156 [DEBUG] [Thread-181869] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] client lang: <none>
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] server lang: <none>
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] kex follows: False
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] Compression: none
2026-04-12T03:27:16.157 [DEBUG] [Thread-181869] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:27:16.215 [DEBUG] [Thread-181869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:27:16.215 [DEBUG] [Thread-181869] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:27:16.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:27:16.217 [DEBUG] [Thread-181869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:27:16.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:27:16.271 [DEBUG] [Thread-181869] [transport.py] [_log()] userauth is OK
2026-04-12T03:27:16.272 [DEBUG] [Thread-181869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:27:16.272 [DEBUG] [Thread-181869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:27:16.272 [DEBUG] [Thread-181869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:27:16.272 [DEBUG] [Thread-181869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:27:16.291 [INFO] [Thread-181869] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:27:16.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:27:16.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:27:17.114 [DEBUG] [Thread-181869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:27:17.114 [DEBUG] [Thread-181869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:27:17.162 [DEBUG] [Thread-181869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:27:17.162 [DEBUG] [Thread-181869] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:27:17.172 [DEBUG] [Thread-181869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:27:17.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:27: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')
2026-04-12T03:27:17.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-04-12T03:27:17.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:27:17.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:27:17.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:27:17.209 [DEBUG] [Thread-181869] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:27:27.264 [DEBUG] [Thread-181871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:42.314 [DEBUG] [Thread-181872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:42.474 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:42.475 [DEBUG] [Thread-4 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:47.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:27:47.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-04-12T03:27: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-04-12T03:27:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 4, 12, 3, 27, 15), 0.02221, 100.154, 0.0, 20.2039, 10.0681, 2, 2, 0, 2, 0, 0),)
2026-04-12T03:27:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-04-12 03:27:15
2026-04-12T03:27:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-04-12T03:27:49.097 [DEBUG] [Thread-181873] [transport.py] [_log()] starting thread (client mode): 0xae5b3e50
2026-04-12T03:27:49.097 [DEBUG] [Thread-181873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:27:49.119 [DEBUG] [Thread-181873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-04-12T03:27:49.119 [INFO] [Thread-181873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] client lang: <none>
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] server lang: <none>
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] kex follows: False
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] Compression: none
2026-04-12T03:27:49.121 [DEBUG] [Thread-181873] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:27:49.130 [DEBUG] [Thread-181873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:27:49.130 [DEBUG] [Thread-181873] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:27:49.130 [DEBUG] [Thread-181873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-04-12T03:27:49.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-04-12T03:27:49.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:27:49.131 [DEBUG] [Thread-181873] [transport.py] [_log()] userauth is OK
2026-04-12T03:27:49.131 [DEBUG] [Thread-181873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:27:49.131 [DEBUG] [Thread-181873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:27:49.131 [DEBUG] [Thread-181873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-04-12T03:27:49.131 [DEBUG] [Thread-181873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:27:49.150 [INFO] [Thread-181873] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:27:49.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:27:49.702 [DEBUG] [Thread-181873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:27:49.702 [DEBUG] [Thread-181873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:27:49.703 [DEBUG] [Thread-181873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-04-12T03:27:49.743 [DEBUG] [Thread-181873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:27:49.743 [DEBUG] [Thread-181873] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:27:49.748 [DEBUG] [Thread-181873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:27:49.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:27:49.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-04-12T03:27:49.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-04-12T03:27:49.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-04-12T03:27:49.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:27:49.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-04-12T03:27:49.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:27:49.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:27:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-04-12T03:27:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61142.060870 -999.00  +10.00  23.22     98   +9.70 1 3 1 3 1     0    0 0.21 -1.47 ----- 24.1 23.2 275.8 30.5 11.3 -1.6 11.1 -1.4 10.7 -1.5 11.1 -0.7
2026-04-12T03:27:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-04-12T03:27:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-04-12T03:27:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61142.060870
2026-04-12T03:27:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-04-12T03:27:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-04-12T03:27:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-04-12T03:27:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-04-12T03:27:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-04-12T03:27:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-04-12T03:27:15', tmtdew=0.02221, humidity=100.154, cloud=0.0, wind=20.2039, temperature=10.0681, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-04-11T05:28:44', seeing=1.36, atlas_timestamp='2026-04-12T01:27:39.168', atlas_cloud=3, atlas_rain=1, zp_data=[3.1667499999999995, nan, nan, nan, nan, nan, nan, nan, nan, 1.9290000000000003, nan, 2.542, nan, nan, nan, nan, nan, 1.6189999999999998, 1.6214999999999993, 1.803749999999999, nan, nan, 1.7692500000000004, nan, nan, 0.42850000000000055, 0.8607500000000003, nan, nan, 1.4635000000000016, 0.9050000000000011, 0.9065000000000012, -0.8232500000000016], zp_timestamp='2026-04-11T01:16:00', zp_ref_data=[8.48875, 8.54325, 8.55925, 8.5125, 8.5015, 8.49125, 8.504, 8.51725, 8.5445, 8.57, 8.58325, 8.513, 8.523, 8.50325, 8.514, 8.514, 8.55725, 8.5435, 8.559, 8.472249999999999, 8.434999999999999, 8.435749999999999, 8.42725, 8.45575, 8.495, 8.3635, 8.40775, 8.3025, 8.224, 8.245000000000001, 8.277000000000001, 8.271, 8.29075], zp_ref_timestamp='2026-03-06T03:35:00')
2026-04-12T03:27:49.779 [DEBUG] [Thread-181873] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:27:49.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-04-12T03:27:49.873 [DEBUG] [Thread-181876] [transport.py] [_log()] starting thread (client mode): 0xae5e5a80
2026-04-12T03:27:49.873 [DEBUG] [Thread-181876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-04-12T03:27:49.888 [DEBUG] [Thread-181876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-04-12T03:27:49.889 [INFO] [Thread-181876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-04-12T03:27:49.896 [DEBUG] [Thread-181876] [transport.py] [_log()] === Key exchange possibilities ===
2026-04-12T03:27:49.896 [DEBUG] [Thread-181876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-04-12T03:27:49.896 [DEBUG] [Thread-181876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] client lang: <none>
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] server lang: <none>
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] kex follows: False
2026-04-12T03:27:49.897 [DEBUG] [Thread-181876] [transport.py] [_log()] === Key exchange agreements ===
2026-04-12T03:27:49.898 [DEBUG] [Thread-181876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-04-12T03:27:49.898 [DEBUG] [Thread-181876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-04-12T03:27:49.898 [DEBUG] [Thread-181876] [transport.py] [_log()] Cipher: aes128-ctr
2026-04-12T03:27:49.898 [DEBUG] [Thread-181876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-04-12T03:27:49.898 [DEBUG] [Thread-181876] [transport.py] [_log()] Compression: none
2026-04-12T03:27:49.898 [DEBUG] [Thread-181876] [transport.py] [_log()] === End of kex handshake ===
2026-04-12T03:27:49.956 [DEBUG] [Thread-181876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-04-12T03:27:49.957 [DEBUG] [Thread-181876] [transport.py] [_log()] Switch to new keys ...
2026-04-12T03:27:49.957 [DEBUG] [Thread-181876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-04-12T03:27:49.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-04-12T03:27:49.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-04-12T03:27:50.016 [DEBUG] [Thread-181876] [transport.py] [_log()] userauth is OK
2026-04-12T03:27:50.016 [DEBUG] [Thread-181876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-04-12T03:27:50.017 [DEBUG] [Thread-181876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-04-12T03:27:50.017 [DEBUG] [Thread-181876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-04-12T03:27:50.017 [DEBUG] [Thread-181876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-04-12T03:27:50.035 [INFO] [Thread-181876] [transport.py] [_log()] Authentication (publickey) successful!
2026-04-12T03:27:50.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-04-12T03:27:50.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-04-12T03:27:50.855 [DEBUG] [Thread-181876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-04-12T03:27:50.856 [DEBUG] [Thread-181876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-04-12T03:27:50.904 [DEBUG] [Thread-181876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-04-12T03:27:50.904 [DEBUG] [Thread-181876] [transport.py] [_log()] Secsh channel 0 opened.
2026-04-12T03:27:50.914 [DEBUG] [Thread-181876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-04-12T03:27:50.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-04-12T03:27:50.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-04-12T03:27:50.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-04-12T03:27:50.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-04-12T03:27:50.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-04-12T03:27:50.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-04-12T03:27:50.952 [DEBUG] [Thread-181876] [transport.py] [_log()] EOF in transport thread
2026-04-12T03:27:57.353 [DEBUG] [Thread-181878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:27:57.426 [DEBUG] [Thread-181879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:28:12.407 [DEBUG] [Thread-181880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-04-12T03:28:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-04-12T03:2
[file cut: first 33554432 bytes kept]
[document cut: first 32645413 of 33554432 characters kept]
